diff --git a/nototools/data/family_name_info_p3.xml b/nototools/data/family_name_info_p3.xml index 62e89590..979ba692 100644 --- a/nototools/data/family_name_info_p3.xml +++ b/nototools/data/family_name_info_p3.xml @@ -13,6 +13,7 @@ + @@ -100,7 +101,6 @@ - @@ -150,7 +150,6 @@ - @@ -161,6 +160,8 @@ + + @@ -182,7 +183,6 @@ - @@ -222,6 +222,10 @@ + + + + diff --git a/nototools/data/familyname_and_styles.txt b/nototools/data/familyname_and_styles.txt index e685f8cd..5c35b602 100644 --- a/nototools/data/familyname_and_styles.txt +++ b/nototools/data/familyname_and_styles.txt @@ -38,6 +38,7 @@ NotoSerifArabic # was Naskh NotoSansGeorgian NotoSerifGeorgian NotoSansTamil +NotoSansTamilSupplement NotoSansTamilUI NotoSerifTamil NotoSerifTamilSlanted @@ -261,4 +262,3 @@ NotoKufiArabic NotoNaskhArabic NotoNaskhArabicUI NotoMono - diff --git a/nototools/data/noto_cmap_phase3.xml b/nototools/data/noto_cmap_phase3.xml index 1c2330cd..ccde28bb 100644 --- a/nototools/data/noto_cmap_phase3.xml +++ b/nototools/data/noto_cmap_phase3.xml @@ -137,6 +137,7 @@ Tale,Tai Le,64,0000 000d 0020 00a0 0300-0301 0307-0308 030c 1040-1049 1950-196d 1970-1974 200b-200d 25cc 3001-3002 3008-300b,16,002c 002e 003a 003f 00d7 2012-2015 201c-201d 2022 25fb-25fe Talu,New Tai Lue,90,0000 000d 0020 00a0 1980-19ab 19b0-19c9 19d0-19da 19de-19df 200c-200d 25cc,0, Taml,Tamil,145,0000 000d 0020-0023 0025 0027-003f 005b-005f 007b-007e 00a0 00ad 00b2-00b3 00d7 00f7 0951-0952 0964-0965 0b82-0b83 0b85-0b8a 0b8e-0b90 0b92-0b95 0b99-0b9a 0b9c 0b9e-0b9f 0ba3-0ba4 0ba8-0baa 0bae-0bb9 0bbe-0bc2 0bc6-0bc8 0bca-0bcd 0bd0 0bd7 0be6-0bfa 1cda 200b-200d 2010 2013-2014 2018-2019 201c-201d 2026 2074 2082-2084 20b9 2212 25cc a8f3 11303 1133c,-1, + Taml_Sup,Tamil_Supplement,145,0000 000d 0020-0023 0025 0027-003f 005b-005f 007b-007e 00a0 00ad 00b2-00b3 00d7 00f7 0951-0952 0964-0965 0b82-0b83 0b85-0b8a 0b8e-0b90 0b92-0b95 0b99-0b9a 0b9c 0b9e-0b9f 0ba3-0ba4 0ba8-0baa 0bae-0bb9 0bbe-0bc2 0bc6-0bc8 0bca-0bcd 0bd0 0bd7 0be6-0bfa 1cda 200b-200d 2010 2013-2014 2018-2019 201c-201d 2026 2074 2082-2084 20b9 2212 25cc a8f3 11303 1133c,-1, Tang,Tangut,6885,0000 000d 0020 00a0 16fe0 17000-187ec 18800-18af2,-1, Tavt,Tai Viet,82,0000 000d 0020 00a0 200b-200d 25cc a78b-a78c aa80-aac2 aadb-aadf,10,00d7 2012-2015 2022 25fb-25fe Telu,Telugu,160,0000 000d 0020-0023 0025 0027-003f 005b-005f 007b-007e 00a0 00ad 00d7 00f7 0951-0952 0964-0965 0c00-0c03 0c05-0c0c 0c0e-0c10 0c12-0c28 0c2a-0c39 0c3d-0c44 0c46-0c48 0c4a-0c4d 0c55-0c56 0c58-0c5a 0c60-0c63 0c66-0c6f 0c78-0c7f 1cda 200b-200d 2010 2013-2014 2018-2019 201c-201d 2026 20b9 2212 25cc,-1, diff --git a/nototools/noto_fonts.py b/nototools/noto_fonts.py index f2fc9bd3..0280ae52 100644 --- a/nototools/noto_fonts.py +++ b/nototools/noto_fonts.py @@ -251,6 +251,8 @@ def get_noto_font(filepath, family_name='Arimo|Cousine|Tinos|Noto', 'Adobe' if is_cjk else 'Google' if script == 'Zsye' and variant == 'color' else 'Khmertype' if phase < 3 and script in ['Khmr', 'Cham', 'Laoo'] + else 'Ek Type' if script in ['Gonm','aml_Sup','Gong'] + else 'JamraPatel LLC' if script in ['Adlm'] # ready to add new fonts to this manufacturer else 'Monotype') return NotoFont( @@ -364,8 +366,8 @@ def noto_font_to_wws_family_id(notofont): id += '-mono' if notofont.is_UI: id += '-ui' - if notofont.is_display: - id += '-display' + #if notofont.is_display: # Not sure why we add -display again. It's already appended to id in line 350. + #id += '-display' return id diff --git a/nototools/noto_names.py b/nototools/noto_names.py index 819d2311..b267abea 100755 --- a/nototools/noto_names.py +++ b/nototools/noto_names.py @@ -60,8 +60,8 @@ # Regex values returned in NameTableData must start with ^ and end with $, # since lint uses this to understand the value is a regex. -GOOGLE_COPYRIGHT_RE = r'^Copyright 20\d\d Google Inc. All Rights Reserved\.$' - +# Updated regex expression to return match if: A- string contain years range or single year B- string contain Google LLC or Google Inc. C- string contain 'Rights Reserved' or 'rights reserved' +GOOGLE_COPYRIGHT_RE = r'^(?:Copyright 20\d\d Google|Copyright 20\d\d-20\d\d Google) (?:LLC|Inc). All (?:Rights Reserved|rights reserved)\.$' ADOBE_COPYRIGHT_RE = ( u"^Copyright \u00a9 2014(?:, 20\d\d)? Adobe Systems Incorporated " u"\(http://www.adobe.com/\)\.$") @@ -126,6 +126,7 @@ 'MONO': None, 'SYM2': 'Symbols2', 'MUSE': None, + 'Mero': 'Meroitic', } @@ -281,7 +282,7 @@ def _original_parts(family_parts, subfamily_parts, no_style_linking=False): 'SemiBold': 'SemBd', 'ExtraBold': 'ExtBd', 'Black': 'Blk', - 'Display': 'Disp', + 'Display': 'Disp', #This will trigger error when performing family check. NotoSerifDisplay and NotoSansfDisplay added exceptions for those 2 fonts line 369 } _VERY_SHORT_NAMES = { @@ -305,31 +306,31 @@ def _original_parts(family_parts, subfamily_parts, no_style_linking=False): # need it. If the name data changes this can break. _SHORT_SCRIPTS = { 'Anatolian Hieroglyphs': 'AnatoHiero', # Hluw - 'Pahawh Hmong': 'PahHmong', # Hmng + #'Pahawh Hmong': 'PahHmong', # Hmng This will trigger error for family check for this font. Not needed 'New Tai Lue': 'NewTaiLue', # Talu - 'Syloti Nagri': 'SyloNagri', # Sylo + #'Syloti Nagri': 'SyloNagri', # Sylo This will trigger error for family check for this font. Not needed 'Imperial Aramaic': 'ImpAramaic', # Armi 'SignWriting': 'SignWrit', # Sgnw 'Warang Citi': 'WarangCiti', # Wara 'Canadian Aboriginal': 'CanAborig', # Cans 'Egyptian Hieroglyphs': 'EgyptHiero', # Egyp - 'Mende Kikakui': 'MendKik', # Mend + #'Mende Kikakui': 'MendKik', # Mend This will trigger error for family check for this font. Not needed 'Old Persian': 'OldPersian', # Xpeo 'Old North Arabian': 'OldNorArab', # Narb 'Caucasian Albanian': 'CaucAlban', # Aghb - 'Meroitic Hieroglyphs': 'MeroHiero', # Mero + 'Meroitic Hieroglyphs': 'Meroitic', # Mero changed 'MeroHiero' to 'Meroitic'. MeroHiero not valid family name 'Meroitic Cursive': 'MeroCursiv', # Merc 'Inscriptional Pahlavi': 'InsPahlavi', # Phli 'Old South Arabian': 'OldSouArab', # Sarb 'Psalter Pahlavi': 'PsaPahlavi', # Phlp - 'Meetei Mayek': 'MeetMayek', # Mtei + 'Meetei Mayek': 'MeeteiMayek', # Mtei MeetMayek will trigger error changed to MeeteiMayek 'Hanifi Rohingya': 'HanifiRohg', # Rohg - 'Sora Sompeng': 'SoraSomp', # Sora + #'Sora Sompeng': 'SoraSomp', # Sora This will trigger error for family check for this font. Not needed 'Inscriptional Parthian': 'InsParthi', # Prti 'Pau Cin Hau': 'PauCinHau', # Pauc 'Old Hungarian': 'OldHung', # Hung - 'Masaram Gondi': 'MasaramGon', # Gonm - 'Gunjala Gondi': 'GunjalaGon', # Gonj + #'Masaram Gondi': 'MasaramGon', # Gonm This will trigger error for family check for this font. Not needed + #'Gunjala Gondi': 'GunjalaGondi', # Gonj This will trigger error for family check for this font. Not needed 'Zanabazar Square': 'Zanabazar', # Zanb 'Medefaidrin': 'Medfaidrin', # Medf } @@ -364,8 +365,11 @@ def _name_with_style(parts, name_style): return ' '.join(parts) # preemtively shorten script names short_parts = [_SHORT_SCRIPTS.get(n, n) for n in parts] - if name_style == 'short': - return ' '.join(_SHORT_NAMES.get(n, n) for n in short_parts) + if name_style == 'short': + if parts[2] == 'Display': #special case for fonts contain 'display' as part of the original font name (NotoSansDisplay,NotoSerifDisplay) + return ' '.join(parts) + else: + return ' '.join(_SHORT_NAMES.get(n, n) for n in short_parts) name = ' '.join(_VERY_SHORT_NAMES.get(n, n) for n in short_parts) if name_style != 'very short': # 'extra short' name = name.replace(' ', '') @@ -450,12 +454,14 @@ def _version_re(noto_font, phase): hint_ext = '' ttfautohint_tag = 'ttfautohint' if noto_font.is_hinted else '' - return r'^Version ([0-2])\.(\d{%d})%s(?:;.*%s.*)?$' % ( + return r'^Version ([0-4])\.(\d{%d})%s(?:;.*%s.*)?$' % ( sub_len, hint_ext, ttfautohint_tag) -def _trademark(noto_font): - return '%s is a trademark of Google Inc.' % noto_font.family +#trademark check will use regex to match with both LLC or Inc. +def _trademark_re(noto_font): + GOOGLE_TRADEMARK_RE = r'^%s is a trademark of Google (?:LLC|Inc.)$' % noto_font.family + return GOOGLE_TRADEMARK_RE def _manufacturer(noto_font): @@ -463,6 +469,10 @@ def _manufacturer(noto_font): return 'Adobe Systems Incorporated' if noto_font.manufacturer == 'Monotype': return 'Monotype Imaging Inc.' + if noto_font.manufacturer == 'Ek Type': + return 'Ek Type' + if noto_font.manufacturer == 'JamraPatel LLC': + return 'JamraPatel LLC' if noto_font.manufacturer == 'Khmertype': return 'Danh Hong' if noto_font.manufacturer == 'Google': @@ -500,6 +510,16 @@ def _manufacturer(noto_font): } def _designer(noto_font, phase): + if noto_font.manufacturer == 'Ek Type': + if noto_font.script in ['Gonm', 'Taml_Sup']: + return 'Ek Type & Mukund Gokhale' + else: + return 'Ek Type' + if noto_font.manufacturer == 'JamraPatel LLC': + if noto_font.script in ['Adlm']: + return 'Mark Jamra, Neil Patel' + else: + return 'Designed by JamraPatel LLC' if noto_font.manufacturer == 'Adobe': return '-' if noto_font.manufacturer == 'Monotype': @@ -510,11 +530,28 @@ def _designer(noto_font, phase): return DESIGNER_STRINGS[designer_key] if noto_font.family == 'Noto': if noto_font.style == 'Serif' and noto_font.script in [ - 'Beng', 'Gujr', 'Knda', 'Mlym', 'Taml', 'Telu']: - return 'Indian Type Foundry' - if noto_font.script == 'Arab' and phase == 3: - return 'Nadine Chahine' - return 'Monotype Design Team' + 'Beng', 'Gujr', 'Knda']: + return 'Juan Bruce, Universal Thirst, Indian Type Foundry and the Monotype Design Team.' + if noto_font.script in [ + 'Taml']: + return 'Indian Type Foundry, Tom Grace, and the Monotype Design Team' + if noto_font.script in [ + 'Telu', 'Knda', 'Guru']: + return 'Jelle Bosma - Monotype Design Team' + if phase == 3: + if noto_font.script == 'Tang': + return 'Julius Hui - Monotype Design Team' + if noto_font.script == 'Arab': + return 'Nadine Chahine - Monotype Design Team' + if noto_font.script == 'Deva': + return 'Universal Thirst, Indian Type Foundry and the Monotype Design Team' + if noto_font.script == 'Syrc': + return 'Patrick Giasson and the Monotype Design Team' + if noto_font.script == 'Mlym': + return 'Indian type Foundry, Jelle Bosma, Monotype Design Team' + if noto_font.script == 'Sora': + return 'Monotype Design Team. David Williams.' + return 'Monotype Design Team' if noto_font.family in ['Arimo', 'Cousine', 'Tinos']: return 'Steve Matteson' raise ValueError('unknown family "%s"' % noto_font.family) @@ -528,6 +565,10 @@ def _designer(noto_font, phase): def _designer_url(noto_font): if noto_font.manufacturer == 'Adobe': return 'http://www.adobe.com/type/' + if noto_font.manufacturer == 'Ek Type': + return 'http://www.ektype.in' + if noto_font.manufacturer == 'JamraPatel LLC': + return 'https://www.jamra-patel.com' if noto_font.manufacturer == 'Monotype': return 'http://www.monotype.com/studio' if noto_font.manufacturer == 'Khmertype': @@ -546,6 +587,10 @@ def _description_re(noto_font, phase): if phase < 3: hint_prefix = 'Data %shinted.' % ( '' if noto_font.is_hinted else 'un') + if noto_font.manufacturer == 'Ek Type': + return '-' + if noto_font.manufacturer == 'JamraPatel LLC': + return '-' else: # In phase 3 no hint prefix at all regardless of hinted or unhinted. hint_prefix = '' @@ -553,9 +598,12 @@ def _description_re(noto_font, phase): designer = '' if noto_font.manufacturer == 'Monotype': if noto_font.family == 'Noto': - designer = 'Designed by Monotype design team.' - if hint_prefix: - hint_prefix += ' ' + if noto_font.script == 'Sora': + designer = 'Designed by Monotype design team. David Williams.' + else: + designer = 'Designed by Monotype design team.' + if hint_prefix: + hint_prefix += ' ' else: # Arimo, Tinos, and Cousine don't currently mention hinting in their # descriptions, but they probably should. @@ -625,7 +673,7 @@ def name_table_data(noto_font, family_to_name_info, phase): version_re=_version_re(noto_font, phase), postscript_name=_postscript_name( family_parts, subfamily_parts, include_regular), - trademark=_trademark(noto_font), + trademark=_trademark_re(noto_font), # to use regex to match the trademark manufacturer=_manufacturer(noto_font), designer=_designer(noto_font, phase), description_re=_description_re(noto_font, phase), diff --git a/nototools/unicode_data.py b/nototools/unicode_data.py index e91b861b..fa42f914 100755 --- a/nototools/unicode_data.py +++ b/nototools/unicode_data.py @@ -406,7 +406,7 @@ def script_code(script_name): # that we special-case _HARD_CODED_HUMAN_READABLE_SCRIPT_NAMES = { 'Aran': 'Nastaliq', # not assigned - 'Nkoo': 'N\'Ko', + 'Nkoo': 'NKo', 'Phag': 'Phags-pa', 'Piqd': 'Klingon', # not assigned 'Zmth': 'Math', # not assigned diff --git a/third_party/ucd/PropertyValueAliases.txt b/third_party/ucd/PropertyValueAliases.txt index 1a76ea0a..566e4079 100644 --- a/third_party/ucd/PropertyValueAliases.txt +++ b/third_party/ucd/PropertyValueAliases.txt @@ -1,5 +1,5 @@ -# PropertyValueAliases-12.0.0.txt -# Date: 2019-02-19, 05:01:57 GMT +# PropertyValueAliases-12.1.0.txt +# Date: 2019-03-10, 10:53:18 GMT # © 2019 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html @@ -87,6 +87,7 @@ age; 9.0 ; V9_0 age; 10.0 ; V10_0 age; 11.0 ; V11_0 age; 12.0 ; V12_0 +age; 12.1 ; V12_1 age; NA ; Unassigned # Alphabetic (Alpha) @@ -1329,6 +1330,7 @@ sc ; Takr ; Takri sc ; Tale ; Tai_Le sc ; Talu ; New_Tai_Lue sc ; Taml ; Tamil +sc ; Taml_Sup ; Tamil_Supplement sc ; Tang ; Tangut sc ; Tavt ; Tai_Viet sc ; Telu ; Telugu @@ -1342,6 +1344,8 @@ sc ; Ugar ; Ugaritic sc ; Vaii ; Vai sc ; Wara ; Warang_Citi sc ; Wcho ; Wancho +sc ; Siyq ; Indic_Siyaq_Numbers +sc ; Manu ; Mayan_Numerals sc ; Xpeo ; Old_Persian sc ; Xsux ; Cuneiform sc ; Yiii ; Yi