summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorSeigo Nonaka <nona@google.com>2021-02-24 17:36:37 -0800
committerSeigo Nonaka <nona@google.com>2021-02-25 01:43:32 +0000
commit2a0135d19cab371293eb810609d9fb8d882bb27b (patch)
tree875e95e0c363ac6af2b21ceff45c6283196d144a /tools
parenteb45aabc03b635ee5d63ceeb7a58f1cbcdfdd02c (diff)
Rename the font file with PostScript name based file name
This CL also adds lint rules for matching the file name and PostScript name. Bug: 179952916 Test: m fontchain_lint Merged-In: I829840299b5d138cfec8924ce8f77e1371524a70 Change-Id: Ifbe99d68c40605f004c88f63000b092cb68cafd6
Diffstat (limited to 'tools')
-rwxr-xr-xtools/fonts/fontchain_linter.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/tools/fonts/fontchain_linter.py b/tools/fonts/fontchain_linter.py
index a4a315b7e371..7de706502618 100755
--- a/tools/fonts/fontchain_linter.py
+++ b/tools/fonts/fontchain_linter.py
@@ -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',
@@ -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]
@@ -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]