Skip to content

Commit

Permalink
Merge pull request #1061 from black7375/codepage-parse
Browse files Browse the repository at this point in the history
Support new codepage ranges syntax #530
  • Loading branch information
anthrotype authored Jan 28, 2025
2 parents 76e49f1 + 740bff0 commit f976349
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 3 deletions.
30 changes: 29 additions & 1 deletion Lib/glyphsLib/builder/custom_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ def to_ufo(self, builder, glyphs, ufo):
if codepages is None:
return

ufo_codepage_bits = [CODEPAGE_RANGES[v] for v in codepages]
ufo_codepage_bits = self._convert_to_bits(codepages)
unsupported_codepage_bits = glyphs.get_custom_value(
"codePageRangesUnsupportedBits"
)
Expand All @@ -501,6 +501,34 @@ def to_ufo(self, builder, glyphs, ufo):

ufo.set_info_value("openTypeOS2CodePageRanges", sorted(ufo_codepage_bits))

@staticmethod
def _convert_to_bits(codepages):
ufo_codepage_bits = []
for codepage in codepages:
if isinstance(codepage, int):
ufo_codepage_bits.append(CODEPAGE_RANGES[codepage])

elif isinstance(codepage, str):
if codepage.isdigit():
ufo_codepage_bits.append(CODEPAGE_RANGES[int(codepage)])
elif codepage.startswith("bit "):
try:
ufo_codepage_bits.append(int(codepage[4:]))
except ValueError as err:
raise ValueError(
f"'{codepage}' is not in correct format. "
"A number must follow after 'bit '."
) from err
else:
raise ValueError(
f"'{codepage}'is neither a number nor 'bit ' format."
)

else:
raise TypeError(f"Unsupported type: {type(codepage)}")

return ufo_codepage_bits


register(OS2CodePageRangesParamHandler())

Expand Down
2 changes: 0 additions & 2 deletions Lib/glyphsLib/classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -1357,14 +1357,12 @@ def _serialize_to_plist(self, writer):
_CUSTOM_INTLIST_PARAMS = frozenset(
(
"fsType",
"openTypeOS2CodePageRanges",
"openTypeOS2FamilyClass",
"openTypeOS2Panose",
"openTypeOS2Type",
"openTypeOS2UnicodeRanges",
"panose",
"unicodeRanges",
"codePageRanges",
"openTypeHeadFlags",
)
)
Expand Down
15 changes: 15 additions & 0 deletions tests/builder/custom_params_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,21 @@ def test_set_codePageRanges(self):
self.font.customParameters["codePageRangesUnsupportedBits"], [15]
)

def test_set_codePageRanges_with_various_types(self):
self.font.customParameters["openTypeOS2CodePageRanges"] = [
1252,
"1250",
"bit 29",
]
self.font.customParameters["codePageRangesUnsupportedBits"] = [15]
self.set_custom_params()
self.assertEqual(self.ufo.info.openTypeOS2CodePageRanges, [0, 1, 15, 29])
self.font = glyphsLib.to_glyphs([self.ufo], minimize_ufo_diffs=True)
self.assertEqual(self.font.customParameters["codePageRanges"], [1252, 1250])
self.assertEqual(
self.font.customParameters["codePageRangesUnsupportedBits"], [15, 29]
)

def test_set_openTypeOS2CodePageRanges(self):
self.font.customParameters["openTypeOS2CodePageRanges"] = [1252, 1250]
self.font.customParameters["codePageRangesUnsupportedBits"] = [15]
Expand Down

0 comments on commit f976349

Please sign in to comment.