summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Godfrey-Kittle <jamesgk@google.com>2015-04-20 16:43:29 -0700
committerjamesgk <jamesgk19@gmail.com>2015-04-20 17:04:20 -0700
commit4122e80f0d4201a3825a33d8a297423371ad7858 (patch)
tree7bc0aa953110f5a9a5df789c93002948e3948f5d
parent2d407e1905ad03db886b4772c91d6341daa11b78 (diff)
Break up kerning subtable by actual rule counts.
This should avoid segmentation faults from makeotf even as we add more kerning rules. Necessary for the upcoming missing-anchor fix.
-rw-r--r--scripts/lib/fontbuild/kerning.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/scripts/lib/fontbuild/kerning.py b/scripts/lib/fontbuild/kerning.py
index 816ca1d..abb61f3 100644
--- a/scripts/lib/fontbuild/kerning.py
+++ b/scripts/lib/fontbuild/kerning.py
@@ -29,6 +29,7 @@ class KernFeatureWriter(AbstractFeatureWriter):
self.kerning = font.kerning
self.leftClasses = []
self.rightClasses = []
+ self.classSizes = {}
def write(self, linesep="\n"):
"""Write kern feature."""
@@ -60,12 +61,11 @@ class KernFeatureWriter(AbstractFeatureWriter):
self.kerning.remove(pair)
# write the feature
+ self.ruleCount = 0
lines = ["feature kern {"]
lines.append(self._writeKerning(self.kerning, linesep))
lines.append(self._writeKerning(leftClassKerning, linesep, True))
- lines.append(" subtable;")
lines.append(self._writeKerning(rightClassKerning, linesep, True))
- lines.append(" subtable;")
lines.append(self._writeKerning(classPairKerning, linesep))
lines.append("} kern;")
return linesep.join(lines)
@@ -78,6 +78,13 @@ class KernFeatureWriter(AbstractFeatureWriter):
pairs = kerning.items()
pairs.sort()
for (left, right), val in pairs:
+ rulesAdded = (
+ self.classSizes.get(left, 1) * self.classSizes.get(right, 1)
+ if enum else 1)
+ self.ruleCount += rulesAdded
+ if self.ruleCount > 2048:
+ lines.append(" subtable;")
+ self.ruleCount = rulesAdded
lines.append(" %spos %s %s %d;" % (enum, left, right, val))
return linesep.join(lines)
@@ -91,6 +98,7 @@ class KernFeatureWriter(AbstractFeatureWriter):
self.leftClasses.append(info)
elif name.endswith("_R"):
self.rightClasses.append(info)
+ self.classSizes[name] = len(contents)
def makeKernFeature(font, text):