Loading data/fonts/fonts.xml +121 −121 File changed.Preview size limit exceeded, changes collapsed. Show changes tools/fonts/fontchain_linter.py +55 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,12 @@ from fontTools import ttLib EMOJI_VS = 0xFE0F #TODO(179952916): Rename CutiveMono and DancingScript CANONICAL_NAME_EXCEPTION_LIST = [ 'CutiveMono.ttf', 'DancingScript-Regular.ttf', ] LANG_TO_SCRIPT = { 'as': 'Beng', 'be': 'Cyrl', Loading Loading @@ -658,6 +664,53 @@ def check_cjk_punctuation(): assert_font_supports_none_of_chars(record.font, cjk_punctuation, name) def getPostScriptName(font): ttf = open_font(font) nameTable = ttf['name'] for name in nameTable.names: if name.nameID == 6 and name.platformID == 3 and name.platEncID == 1 and name.langID == 0x0409: return str(name) def getSuffix(font): file_path, index = font with open(path.join(_fonts_dir, file_path), 'rb') as f: tag = f.read(4) isCollection = tag == b'ttcf' ttf = open_font(font) isType1 = ('CFF ' in ttf or 'CFF2' in ttf) if isType1: if isCollection: return '.otc' else: return '.otf' else: if isCollection: return '.ttc' else: return '.ttf' def check_canonical_name(): for record in _all_fonts: file_name, index = record.font if file_name in CANONICAL_NAME_EXCEPTION_LIST: continue if index and index != 0: continue psName = getPostScriptName(record.font) assert psName, 'PostScript must be defined' suffix = getSuffix(record.font) canonicalName = '%s%s' % (psName, suffix) assert file_name == canonicalName, ( '%s is not a canonical name. Must be %s' % (file_name, canonicalName)) def main(): global _fonts_dir target_out = sys.argv[1] Loading @@ -675,6 +728,8 @@ def main(): check_cjk_punctuation() check_canonical_name() check_emoji = sys.argv[2] if check_emoji == 'true': ucd_path = sys.argv[3] Loading Loading
data/fonts/fonts.xml +121 −121 File changed.Preview size limit exceeded, changes collapsed. Show changes
tools/fonts/fontchain_linter.py +55 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,12 @@ from fontTools import ttLib EMOJI_VS = 0xFE0F #TODO(179952916): Rename CutiveMono and DancingScript CANONICAL_NAME_EXCEPTION_LIST = [ 'CutiveMono.ttf', 'DancingScript-Regular.ttf', ] LANG_TO_SCRIPT = { 'as': 'Beng', 'be': 'Cyrl', Loading Loading @@ -658,6 +664,53 @@ def check_cjk_punctuation(): assert_font_supports_none_of_chars(record.font, cjk_punctuation, name) def getPostScriptName(font): ttf = open_font(font) nameTable = ttf['name'] for name in nameTable.names: if name.nameID == 6 and name.platformID == 3 and name.platEncID == 1 and name.langID == 0x0409: return str(name) def getSuffix(font): file_path, index = font with open(path.join(_fonts_dir, file_path), 'rb') as f: tag = f.read(4) isCollection = tag == b'ttcf' ttf = open_font(font) isType1 = ('CFF ' in ttf or 'CFF2' in ttf) if isType1: if isCollection: return '.otc' else: return '.otf' else: if isCollection: return '.ttc' else: return '.ttf' def check_canonical_name(): for record in _all_fonts: file_name, index = record.font if file_name in CANONICAL_NAME_EXCEPTION_LIST: continue if index and index != 0: continue psName = getPostScriptName(record.font) assert psName, 'PostScript must be defined' suffix = getSuffix(record.font) canonicalName = '%s%s' % (psName, suffix) assert file_name == canonicalName, ( '%s is not a canonical name. Must be %s' % (file_name, canonicalName)) def main(): global _fonts_dir target_out = sys.argv[1] Loading @@ -675,6 +728,8 @@ def main(): check_cjk_punctuation() check_canonical_name() check_emoji = sys.argv[2] if check_emoji == 'true': ucd_path = sys.argv[3] Loading