diff options
author | James Godfrey-Kittle <jamesgk@google.com> | 2015-04-20 16:43:29 -0700 |
---|---|---|
committer | jamesgk <jamesgk19@gmail.com> | 2015-04-20 17:04:20 -0700 |
commit | 4122e80f0d4201a3825a33d8a297423371ad7858 (patch) | |
tree | 7bc0aa953110f5a9a5df789c93002948e3948f5d | |
parent | 2d407e1905ad03db886b4772c91d6341daa11b78 (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.py | 12 |
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): |