diff --git a/data/fonts/fonts.xml b/data/fonts/fonts.xml
index 4c214b529b39a..d2b47c6336c4c 100644
--- a/data/fonts/fonts.xml
+++ b/data/fonts/fonts.xml
@@ -60,7 +60,7 @@
- NotoSerif-Regular.ttf
+ NotoSerif.ttf
NotoSerif-Bold.ttf
NotoSerif-Italic.ttf
NotoSerif-BoldItalic.ttf
@@ -112,33 +112,33 @@
- NotoNaskhArabic-Regular.ttf
+ NotoNaskhArabic.ttf
NotoNaskhArabic-Bold.ttf
- NotoNaskhArabicUI-Regular.ttf
+ NotoNaskhArabicUI.ttf
NotoNaskhArabicUI-Bold.ttf
- NotoSansEthiopic-Regular.ttf
+ NotoSansEthiopic.ttf
NotoSansEthiopic-Bold.ttf
NotoSerifEthiopic-Regular.otf
NotoSerifEthiopic-Bold.otf
- NotoSansHebrew-Regular.ttf
+ NotoSansHebrew.ttf
NotoSansHebrew-Bold.ttf
NotoSerifHebrew-Regular.ttf
NotoSerifHebrew-Bold.ttf
- NotoSansThai-Regular.ttf
+ NotoSansThai.ttf
NotoSansThai-Bold.ttf
- NotoSerifThai-Regular.ttf
+ NotoSerifThai.ttf
NotoSerifThai-Bold.ttf
- NotoSansThaiUI-Regular.ttf
+ NotoSansThaiUI.ttf
NotoSansThaiUI-Bold.ttf
@@ -149,28 +149,28 @@
NotoSerifArmenian-Bold.otf
- NotoSansGeorgian-VF.ttf
+ NotoSansGeorgian-Regular.ttf
- NotoSansGeorgian-VF.ttf
+ NotoSansGeorgian-Regular.ttf
- NotoSansGeorgian-VF.ttf
+ NotoSansGeorgian-Regular.ttf
- NotoSansGeorgian-VF.ttf
+ NotoSansGeorgian-Regular.ttf
- NotoSerifGeorgian-VF.ttf
+ NotoSerifGeorgian-Regular.ttf
- NotoSerifGeorgian-VF.ttf
+ NotoSerifGeorgian-Regular.ttf
- NotoSerifGeorgian-VF.ttf
+ NotoSerifGeorgian-Regular.ttf
- NotoSerifGeorgian-VF.ttf
+ NotoSerifGeorgian-Regular.ttf
@@ -178,7 +178,7 @@
NotoSansDevanagari-Regular.otf
NotoSansDevanagari-Medium.otf
NotoSansDevanagari-Bold.otf
- NotoSerifDevanagari-Regular.ttf
+ NotoSerifDevanagari.ttf
NotoSerifDevanagari-Bold.ttf
@@ -191,23 +191,23 @@
danda characters.
-->
- NotoSansGujarati-Regular.ttf
+ NotoSansGujarati.ttf
NotoSansGujarati-Bold.ttf
- NotoSerifGujarati-Regular.ttf
+ NotoSerifGujarati.ttf
NotoSerifGujarati-Bold.ttf
- NotoSansGujaratiUI-Regular.ttf
+ NotoSansGujaratiUI.ttf
NotoSansGujaratiUI-Bold.ttf
- NotoSansGurmukhi-Regular.ttf
+ NotoSansGurmukhi.ttf
NotoSansGurmukhi-Bold.ttf
NotoSerifGurmukhi-Regular.otf
NotoSerifGurmukhi-Bold.otf
- NotoSansGurmukhiUI-Regular.ttf
+ NotoSansGurmukhiUI.ttf
NotoSansGurmukhiUI-Bold.ttf
@@ -226,7 +226,7 @@
NotoSansMalayalam-Regular.otf
NotoSansMalayalam-Medium.otf
NotoSansMalayalam-Bold.otf
- NotoSerifMalayalam-Regular.ttf
+ NotoSerifMalayalam.ttf
NotoSerifMalayalam-Bold.ttf
@@ -238,7 +238,7 @@
NotoSansBengali-Regular.otf
NotoSansBengali-Medium.otf
NotoSansBengali-Bold.otf
- NotoSerifBengali-Regular.ttf
+ NotoSerifBengali.ttf
NotoSerifBengali-Bold.ttf
@@ -247,31 +247,31 @@
NotoSansBengaliUI-Bold.otf
- NotoSansTelugu-Regular.ttf
+ NotoSansTelugu.ttf
NotoSansTelugu-Bold.ttf
- NotoSerifTelugu-Regular.ttf
+ NotoSerifTelugu.ttf
NotoSerifTelugu-Bold.ttf
- NotoSansTeluguUI-Regular.ttf
+ NotoSansTeluguUI.ttf
NotoSansTeluguUI-Bold.ttf
- NotoSansKannada-Regular.ttf
+ NotoSansKannada.ttf
NotoSansKannada-Bold.ttf
- NotoSerifKannada-Regular.ttf
+ NotoSerifKannada.ttf
NotoSerifKannada-Bold.ttf
- NotoSansKannadaUI-Regular.ttf
+ NotoSansKannadaUI.ttf
NotoSansKannadaUI-Bold.ttf
- NotoSansOriya-Regular.ttf
+ NotoSansOriya.ttf
NotoSansOriya-Bold.ttf
- NotoSansOriyaUI-Regular.ttf
+ NotoSansOriyaUI.ttf
NotoSansOriyaUI-Bold.ttf
@@ -288,39 +288,39 @@
NotoSansSinhalaUI-Bold.otf
- NotoSansKhmer-VF.ttf
+ NotoSansKhmer-Regular.ttf
- NotoSansKhmer-VF.ttf
+ NotoSansKhmer-Regular.ttf
- NotoSansKhmer-VF.ttf
+ NotoSansKhmer-Regular.ttf
- NotoSansKhmer-VF.ttf
+ NotoSansKhmer-Regular.ttf
- NotoSansKhmer-VF.ttf
+ NotoSansKhmer-Regular.ttf
- NotoSansKhmer-VF.ttf
+ NotoSansKhmer-Regular.ttf
- NotoSansKhmer-VF.ttf
+ NotoSansKhmer-Regular.ttf
- NotoSansKhmer-VF.ttf
+ NotoSansKhmer-Regular.ttf
- NotoSansKhmer-VF.ttf
+ NotoSansKhmer-Regular.ttf
@@ -328,17 +328,17 @@
NotoSerifKhmer-Bold.otf
- NotoSansKhmerUI-Regular.ttf
+ NotoSansKhmerUI.ttf
NotoSansKhmerUI-Bold.ttf
- NotoSansLao-Regular.ttf
+ NotoSansLao.ttf
NotoSansLao-Bold.ttf
- NotoSerifLao-Regular.ttf
+ NotoSerifLao.ttf
NotoSerifLao-Bold.ttf
- NotoSansLaoUI-Regular.ttf
+ NotoSansLaoUI.ttf
NotoSansLaoUI-Bold.ttf
@@ -354,56 +354,56 @@
NotoSansMyanmarUI-Bold.otf
- NotoSansThaana-Regular.ttf
+ NotoSansThaana.ttf
NotoSansThaana-Bold.ttf
- NotoSansCham-Regular.ttf
+ NotoSansCham.ttf
NotoSansCham-Bold.ttf
NotoSansAhom-Regular.otf
- NotoSansAdlam-VF.ttf
+ NotoSansAdlam-Regular.ttf
- NotoSansAdlam-VF.ttf
+ NotoSansAdlam-Regular.ttf
- NotoSansAdlam-VF.ttf
+ NotoSansAdlam-Regular.ttf
- NotoSansAdlam-VF.ttf
+ NotoSansAdlam-Regular.ttf
- NotoSansAvestan-Regular.ttf
+ NotoSansAvestan.ttf
- NotoSansBalinese-Regular.ttf
+ NotoSansBalinese.ttf
- NotoSansBamum-Regular.ttf
+ NotoSansBamum.ttf
- NotoSansBatak-Regular.ttf
+ NotoSansBatak.ttf
- NotoSansBrahmi-Regular.ttf
+ NotoSansBrahmi.ttf
- NotoSansBuginese-Regular.ttf
+ NotoSansBuginese.ttf
- NotoSansBuhid-Regular.ttf
+ NotoSansBuhid.ttf
- NotoSansCanadianAboriginal-Regular.ttf
+ NotoSansCanadianAboriginal.ttf
- NotoSansCarian-Regular.ttf
+ NotoSansCarian.ttf
NotoSansChakma-Regular.otf
@@ -412,184 +412,184 @@
NotoSansCherokee-Regular.ttf
- NotoSansCoptic-Regular.ttf
+ NotoSansCoptic.ttf
- NotoSansCuneiform-Regular.ttf
+ NotoSansCuneiform.ttf
- NotoSansCypriot-Regular.ttf
+ NotoSansCypriot.ttf
- NotoSansDeseret-Regular.ttf
+ NotoSansDeseret.ttf
- NotoSansEgyptianHieroglyphs-Regular.ttf
+ NotoSansEgyptianHieroglyphs.ttf
NotoSansElbasan-Regular.otf
- NotoSansGlagolitic-Regular.ttf
+ NotoSansGlagolitic.ttf
- NotoSansGothic-Regular.ttf
+ NotoSansGothic.ttf
- NotoSansHanunoo-Regular.ttf
+ NotoSansHanunoo.ttf
- NotoSansImperialAramaic-Regular.ttf
+ NotoSansImperialAramaic.ttf
- NotoSansInscriptionalPahlavi-Regular.ttf
+ NotoSansInscriptionalPahlavi.ttf
- NotoSansInscriptionalParthian-Regular.ttf
+ NotoSansInscriptionalParthian.ttf
NotoSansJavanese-Regular.ttf
- NotoSansKaithi-Regular.ttf
+ NotoSansKaithi.ttf
- NotoSansKayahLi-Regular.ttf
+ NotoSansKayahLi.ttf
- NotoSansKharoshthi-Regular.ttf
+ NotoSansKharoshthi.ttf
- NotoSansLepcha-Regular.ttf
+ NotoSansLepcha.ttf
- NotoSansLimbu-Regular.ttf
+ NotoSansLimbu.ttf
- NotoSansLinearB-Regular.ttf
+ NotoSansLinearB.ttf
- NotoSansLisu-Regular.ttf
+ NotoSansLisu.ttf
- NotoSansLycian-Regular.ttf
+ NotoSansLycian.ttf
- NotoSansLydian-Regular.ttf
+ NotoSansLydian.ttf
- NotoSansMandaic-Regular.ttf
+ NotoSansMandaic.ttf
- NotoSansMeeteiMayek-Regular.ttf
+ NotoSansMeeteiMayek.ttf
- NotoSansNewTaiLue-Regular.ttf
+ NotoSansNewTaiLue.ttf
- NotoSansNKo-Regular.ttf
+ NotoSansNKo.ttf
- NotoSansOgham-Regular.ttf
+ NotoSansOgham.ttf
- NotoSansOlChiki-Regular.ttf
+ NotoSansOlChiki.ttf
- NotoSansOldItalic-Regular.ttf
+ NotoSansOldItalic.ttf
- NotoSansOldPersian-Regular.ttf
+ NotoSansOldPersian.ttf
- NotoSansOldSouthArabian-Regular.ttf
+ NotoSansOldSouthArabian.ttf
- NotoSansOldTurkic-Regular.ttf
+ NotoSansOldTurkic.ttf
NotoSansOsage-Regular.ttf
- NotoSansOsmanya-Regular.ttf
+ NotoSansOsmanya.ttf
- NotoSansPhoenician-Regular.ttf
+ NotoSansPhoenician.ttf
- NotoSansRejang-Regular.ttf
+ NotoSansRejang.ttf
- NotoSansRunic-Regular.ttf
+ NotoSansRunic.ttf
- NotoSansSamaritan-Regular.ttf
+ NotoSansSamaritan.ttf
- NotoSansSaurashtra-Regular.ttf
+ NotoSansSaurashtra.ttf
- NotoSansShavian-Regular.ttf
+ NotoSansShavian.ttf
- NotoSansSundanese-Regular.ttf
+ NotoSansSundanese.ttf
- NotoSansSylotiNagri-Regular.ttf
+ NotoSansSylotiNagri.ttf
- NotoSansSyriacEstrangela-Regular.ttf
+ NotoSansSyriacEstrangela.ttf
- NotoSansSyriacEastern-Regular.ttf
+ NotoSansSyriacEastern.ttf
- NotoSansSyriacWestern-Regular.ttf
+ NotoSansSyriacWestern.ttf
- NotoSansTagalog-Regular.ttf
+ NotoSansTagalog.ttf
- NotoSansTagbanwa-Regular.ttf
+ NotoSansTagbanwa.ttf
- NotoSansTaiTham-Regular.ttf
+ NotoSansTaiTham.ttf
- NotoSansTaiViet-Regular.ttf
+ NotoSansTaiViet.ttf
- NotoSansTibetan-Regular.ttf
+ NotoSansTibetan.ttf
NotoSansTibetan-Bold.ttf
NotoSansTifinagh-Regular.otf
- NotoSansUgaritic-Regular.ttf
+ NotoSansUgaritic.ttf
- NotoSansVai-Regular.ttf
+ NotoSansVai.ttf
NotoSansSymbols-Regular-Subsetted.ttf
- NotoSansCJK-Regular.ttc
- NotoSerifCJK-Regular.ttc
+ NotoSansCJKjp-Regular.otc
+ NotoSerifCJKjp-Regular.otc
- NotoSansCJK-Regular.ttc
- NotoSerifCJK-Regular.ttc
+ NotoSansCJKjp-Regular.otc
+ NotoSerifCJKjp-Regular.otc
- NotoSansCJK-Regular.ttc
- NotoSerifCJK-Regular.ttc
+ NotoSansCJKjp-Regular.otc
+ NotoSerifCJKjp-Regular.otc
- NotoSansCJK-Regular.ttc
- NotoSerifCJK-Regular.ttc
+ NotoSansCJKjp-Regular.otc
+ NotoSerifCJKjp-Regular.otc
NotoColorEmoji.ttf
@@ -602,16 +602,16 @@
override the East Asian punctuation for Chinese.
-->
- NotoSansTaiLe-Regular.ttf
+ NotoSansTaiLe.ttf
- NotoSansYi-Regular.ttf
+ NotoSansYi.ttf
- NotoSansMongolian-Regular.ttf
+ NotoSansMongolian.ttf
- NotoSansPhagsPa-Regular.ttf
+ NotoSansPhagsPa.ttf
NotoSansAnatolianHieroglyphs-Regular.otf
diff --git a/tools/fonts/fontchain_linter.py b/tools/fonts/fontchain_linter.py
index a4a315b7e3711..7de7065026188 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]