37 lines
905 B
Diff
37 lines
905 B
Diff
--- a/fontTools/misc/psCharStrings.py
|
|
+++ b/fontTools/misc/psCharStrings.py
|
|
@@ -223,9 +223,16 @@
|
|
else:
|
|
return b"\xff" + pack(">l", value) # encode the entire fixed point value
|
|
|
|
+
|
|
+realZeroBytes = bytechr(30) + bytechr(0xf)
|
|
+
|
|
def encodeFloat(f):
|
|
# For CFF only, used in cffLib
|
|
- s = str(f).upper()
|
|
+ if f == 0.0: # 0.0 == +0.0 == -0.0
|
|
+ return realZeroBytes
|
|
+ # Note: 14 decimal digits seems to be the limitation for CFF real numbers
|
|
+ # in macOS. However, we use 8 here to match the implementation of AFDKO.
|
|
+ s = "%.8G" % f
|
|
if s[:2] == "0.":
|
|
s = s[1:]
|
|
elif s[:3] == "-0.":
|
|
@@ -234,9 +241,13 @@
|
|
while s:
|
|
c = s[0]
|
|
s = s[1:]
|
|
- if c == "E" and s[:1] == "-":
|
|
- s = s[1:]
|
|
- c = "E-"
|
|
+ if c == "E":
|
|
+ c2 = s[:1]
|
|
+ if c2 == "-":
|
|
+ s = s[1:]
|
|
+ c = "E-"
|
|
+ elif c2 == "+":
|
|
+ s = s[1:]
|
|
nibbles.append(realNibblesDict[c])
|
|
nibbles.append(0xf)
|
|
if len(nibbles) % 2:
|