summaryrefslogtreecommitdiff
path: root/misc/fonttools-3.34.2-psCharStrings.patch
diff options
context:
space:
mode:
Diffstat (limited to 'misc/fonttools-3.34.2-psCharStrings.patch')
-rw-r--r--misc/fonttools-3.34.2-psCharStrings.patch37
1 files changed, 37 insertions, 0 deletions
diff --git a/misc/fonttools-3.34.2-psCharStrings.patch b/misc/fonttools-3.34.2-psCharStrings.patch
new file mode 100644
index 000000000..7be387201
--- /dev/null
+++ b/misc/fonttools-3.34.2-psCharStrings.patch
@@ -0,0 +1,37 @@
+--- 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: