diff --git a/CHANGELOG.md b/CHANGELOG.md index a279fad5..7eab7a64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ ## [1.1.13] - 2020-04-?? - Fixed contextual menu to also respond to right-click. +- Fixed feature tag list: not all available features were always shown. + ([Issue 85](https://github.com/justvanrossum/fontgoggles/issues/85), + [PR 86](https://github.com/justvanrossum/fontgoggles/issues/86)) ## [1.1.12] - 2020-04-03 diff --git a/Lib/fontgoggles/misc/hbShape.py b/Lib/fontgoggles/misc/hbShape.py index 1f61f32e..a9925e57 100644 --- a/Lib/fontgoggles/misc/hbShape.py +++ b/Lib/fontgoggles/misc/hbShape.py @@ -112,8 +112,14 @@ def _getGlyphNameFromCodePoint(cmap, codePoint): else: self._funcs = None - def getFeatures(self, tag): - return hb.ot_layout_language_get_feature_tags(self.face, tag) + def getFeatures(self, otTableTag): + features = set() + for scriptIndex, script in enumerate(hb.ot_layout_table_get_script_tags(self.face, otTableTag)): + langIdices = list(range(len(hb.ot_layout_script_get_language_tags(self.face, otTableTag, scriptIndex)))) + langIdices.append(0xFFFF) + for langIndex in langIdices: + features.update(hb.ot_layout_language_get_feature_tags(self.face, otTableTag, scriptIndex, langIndex)) + return features def getStylisticSetNames(self): tags = _stylisticSets & set(self.getFeatures("GSUB")) diff --git a/Tests/test_font.py b/Tests/test_font.py index 30a870c1..319ccfd3 100644 --- a/Tests/test_font.py +++ b/Tests/test_font.py @@ -18,7 +18,7 @@ def test_sniffFontType(): 'weight': 400, 'width': 5}, {'calt', 'ccmp', 'dnom', 'fina', 'init', - 'liga', 'medi', 'numr', + 'locl', 'liga', 'medi', 'numr', 'pnum', 'rlig', 'rtlm', 'ss01', 'ss02', 'ss03', 'ss04', 'ss05', 'ss06', 'ss07', 'ss08'}, {'curs', 'kern', 'mark', 'mkmk', 'ss05'}, @@ -50,10 +50,10 @@ def test_sniffFontType(): 'suffix': 'ttf', 'weight': 400, 'width': 5}, - {'aalt', 'ccmp', 'dnom', 'fina', 'frac', 'init', 'liga', - 'medi', 'numr', 'ordn', 'rlig', 'salt', 'sinf', 'ss01', - 'ss02', 'ss03', 'ss04', 'ss05', 'ss06', 'subs', 'sups', - 'zero'}, + {'aalt', 'calt', 'ccmp', 'dnom', 'fina', 'frac', 'init', + 'locl', 'liga', 'medi', 'numr', 'ordn', 'rlig', 'salt', + 'sinf', 'ss01', 'ss02', 'ss03', 'ss04', 'ss05', 'ss06', + 'subs', 'sups', 'zero'}, {'kern', 'mark', 'mkmk'}, {'DFLT': set(), 'arab': {'URD '}, 'latn': set()}, {}, @@ -128,7 +128,7 @@ def test_sniffFontType(): 'suffix': 'ttf', 'weight': 400, 'width': 5}, - {'abvs', 'blws', 'blwf'}, + {'locl', 'blws', 'abvs', 'blwf'}, {'kern', 'mark', 'mkmk'}, {'mym2': {'KSW ', 'MON '}}, {},