def _swat_font(noto_font, dst_root, dry_run): filepath = noto_font.filepath basename = path.basename(filepath) if noto_font.is_cjk: print '# Skipping cjk font %s' % basename return if noto_font.fmt == 'ttc': print '# Deferring ttc font %s' % basename _ttc_fonts[noto_font] = ttc_utils.ttcfile_filenames(filepath) return ttfont = ttLib.TTFont(filepath, fontNumber=0) names = font_data.get_name_records(ttfont) # create relative root path rel_filepath = _noto_relative_path(filepath) if not rel_filepath: raise ValueError('Could not identify noto root of %s' % filepath) print '-----\nUpdating %s' % rel_filepath dst_file = path.join(dst_root, rel_filepath) version = names[_VERSION_ID] m = re.match(r'Version (\d{1,5})\.(\d{1,5})(.*)', version) if not m: print '! Could not match version string (%s)' % version return major_version = m.group(1) minor_version = m.group(2) version_remainder = m.group(3) accuracy = len(minor_version) print_revision = font_data.printable_font_revision(ttfont, accuracy) # sanity check expected_revision = major_version + '.' + minor_version if expected_revision != print_revision: print '! Expected revision \'%s\' but got revision \'%s\'' % ( expected_revision, print_revision) return # bump the minor version keeping significant digits: new_minor_version = str(int(minor_version) + 1).zfill(accuracy) new_revision = major_version + '.' + new_minor_version print 'Update revision from \'%s\' to \'%s\'' % (expected_revision, new_revision) # double check we are going to properly round-trip this value float_revision = float(new_revision) fixed_revision = misc.fixedTools.floatToFixed(float_revision, 16) rt_float_rev = misc.fixedTools.fixedToFloat(fixed_revision, 16) rt_float_rev_int = int(rt_float_rev) rt_float_rev_frac = int( round((rt_float_rev - rt_float_rev_int) * 10**accuracy)) rt_new_revision = (str(rt_float_rev_int) + '.' + str(rt_float_rev_frac).zfill(accuracy)) if new_revision != rt_new_revision: print '! Could not update new revision, expected \'%s\' but got \'%s\'' % ( new_revision, rt_new_revision) return new_version_string = 'Version ' + new_revision if not noto_font.is_hinted: new_version_string += ' uh' print '%s: %s' % ('Would write' if dry_run else 'Writing', dst_file) new_trademark = "%s is a trademark of Google Inc." % noto_font.family # description field should be set. # Roozbeh has note, make sure design field has information # on whether the font is hinted. # Missing in Lao and Khmer, default in Cham. if (cldr_data.get_english_script_name(noto_font.script) in ['Lao', 'Khmer', 'Cham']): new_description = 'Data %shinted.' % ('' if noto_font.is_hinted else 'un') # elif noto_font.vendor is 'Monotype': elif not noto_font.is_cjk and noto_font.family == 'Noto': new_description = ('Data %shinted. Designed by Monotype design team.' % ('' if noto_font.is_hinted else 'un')) else: new_description = None if re.match(r'^Copyright 201\d Google Inc. All Rights Reserved\.$', names[_COPYRIGHT_ID]): new_copyright = None else: new_copyright = '!!' if names.get(_DESIGNER_ID) in [ 'Steve Matteson', 'Monotype Design Team', 'Danh Hong', ]: new_designer = None elif names.get(_DESIGNER_ID) == 'Monotype Design team': new_designer = 'Monotype Design Team' elif (_DESIGNER_ID not in names and cldr_data.get_english_script_name(noto_font.script) == 'Khmer'): new_designer = 'Danh Hong' else: new_designer = '!!' if names.get(_DESIGNER_URL_ID) in [ 'http://www.monotype.com/studio', 'http://www.khmertype.org', ]: new_designer_url = None elif names.get(_DESIGNER_URL_ID) in [ 'http://www.monotypeimaging.com/ProductsServices/TypeDesignerShowcase', ]: new_designer_url = 'http://www.monotype.com/studio' elif names.get(_DESIGNER_URL_ID) in [ 'http://www.khmertype.blogspot.com', 'http://www.khmertype.blogspot.com/', 'http://khmertype.blogspot.com/', 'http://wwwkhmertype.blogspot.com.com/', ]: new_designer_url = 'http://www.khmertype.org' else: new_designer_url = '!!!' if names.get(_MANUFACTURER_ID) in [ 'Monotype Imaging Inc.', 'Danh Hong', ]: new_manufacturer = None else: new_manufacturer = '!!!' def update(name_id, new, newText=None): old = names.get(name_id) if new and (new != old): if not dry_run and not '!!!' in new: font_data.set_name_record(ttfont, name_id, new, addIfMissing='win') label = _NAME_ID_LABELS[name_id] oldText = '\'%s\'' % old if old else 'None' newText = newText or ('\'%s\'' % new) print '%s:\n old: %s\n new: %s' % (label, oldText, newText or new) label_change = _changes.get(label) if not label_change: label_change = {} _changes[label] = label_change new_val_change = label_change.get(new) if not new_val_change: new_val_change = {} label_change[new] = new_val_change old_val_fonts = new_val_change.get(old) if not old_val_fonts: old_val_fonts = [] new_val_change[old] = old_val_fonts old_val_fonts.append(noto_font.filepath) update(_COPYRIGHT_ID, new_copyright) update(_VERSION_ID, new_version_string) update(_TRADEMARK_ID, new_trademark) update(_MANUFACTURER_ID, new_manufacturer) update(_DESIGNER_ID, new_designer) update(_DESCRIPTION_ID, new_description) update(_VENDOR_URL_ID, _NOTO_URL) update(_DESIGNER_URL_ID, new_designer_url) update(_LICENSE_ID, _SIL_LICENSE, newText='(OFL)') update(_LICENSE_URL_ID, _SIL_LICENSE_URL) if autofix_for_release.fix_fstype(ttfont): _autofix['fstype'].append(noto_font.filepath) if autofix_for_release.fix_vendor_id(ttfont): _autofix['vendor_id'].append(noto_font.filepath) if autofix_for_release.fix_attachlist(ttfont): _autofix['attachlist'].append(noto_font.filepath) if noto_font.is_hinted: tables_to_drop = _HINTED_TABLES_TO_DROP else: tables_to_drop = _UNHINTED_TABLES_TO_DROP if autofix_for_release.drop_hints(ttfont): _autofix['drop_hints'].append(noto_font.filepath) if autofix_for_release.drop_tables(ttfont, tables_to_drop): _autofix['drop_tables'].append(noto_font.filepath) if noto_font.family == 'Noto': if autofix_for_release.fix_linegap(ttfont): _autofix['linegap'].append(noto_font.filepath) if autofix_for_release.fix_os2_unicoderange(ttfont): _autofix['os2_unicoderange'].append(noto_font.filepath) if dry_run: return ttfont['head'].fontRevision = float_revision dst_dir = path.dirname(dst_file) if not path.isdir(dst_dir): os.makedirs(dst_dir) ttfont.save(dst_file) print 'Wrote file.'
def _swat_font(noto_font, dst_root, dry_run): filepath = noto_font.filepath basename = path.basename(filepath) if noto_font.is_cjk: print '# Skipping cjk font %s' % basename return if noto_font.fmt == 'ttc': print '# Deferring ttc font %s' % basename _ttc_fonts[noto_font] = ttc_utils.ttcfile_filenames(filepath) return ttfont = ttLib.TTFont(filepath, fontNumber=0) names = font_data.get_name_records(ttfont) # create relative root path rel_filepath = _noto_relative_path(filepath) if not rel_filepath: raise ValueError('Could not identify noto root of %s' % filepath) print '-----\nUpdating %s' % rel_filepath dst_file = path.join(dst_root, rel_filepath) version = names[_VERSION_ID] m = re.match(r'Version (\d{1,5})\.(\d{1,5})(.*)', version) if not m: print '! Could not match version string (%s)' % version return major_version = m.group(1) minor_version = m.group(2) version_remainder = m.group(3) accuracy = len(minor_version) print_revision = font_data.printable_font_revision(ttfont, accuracy) # sanity check expected_revision = major_version + '.' + minor_version if expected_revision != print_revision: print '! Expected revision \'%s\' but got revision \'%s\'' % ( expected_revision, print_revision) return # bump the minor version keeping significant digits: new_minor_version = str(int(minor_version) + 1).zfill(accuracy) new_revision = major_version + '.' + new_minor_version print 'Update revision from \'%s\' to \'%s\'' % ( expected_revision, new_revision) # double check we are going to properly round-trip this value float_revision = float(new_revision) fixed_revision = misc.fixedTools.floatToFixed(float_revision, 16) rt_float_rev = misc.fixedTools.fixedToFloat(fixed_revision, 16) rt_float_rev_int = int(rt_float_rev) rt_float_rev_frac = int(round((rt_float_rev - rt_float_rev_int) * 10 ** accuracy)) rt_new_revision = (str(rt_float_rev_int) + '.' + str(rt_float_rev_frac).zfill(accuracy)) if new_revision != rt_new_revision: print '! Could not update new revision, expected \'%s\' but got \'%s\'' % ( new_revision, rt_new_revision) return new_version_string = 'Version ' + new_revision if not noto_font.is_hinted: new_version_string += ' uh' print '%s: %s' % ('Would write' if dry_run else 'Writing', dst_file) new_trademark = "%s is a trademark of Google Inc." % noto_font.family # description field should be set. # Roozbeh has note, make sure design field has information # on whether the font is hinted. # Missing in Lao and Khmer, default in Cham. if (cldr_data.get_english_script_name(noto_font.script) in ['Lao', 'Khmer', 'Cham']): new_description = 'Data %shinted.' % ('' if noto_font.is_hinted else 'un') # elif noto_font.vendor is 'Monotype': elif not noto_font.is_cjk and noto_font.family == 'Noto': new_description = ( 'Data %shinted. Designed by Monotype design team.' % ('' if noto_font.is_hinted else 'un')) else: new_description = None if re.match(r'^Copyright 201\d Google Inc. All Rights Reserved\.$', names[_COPYRIGHT_ID]): new_copyright = None else: new_copyright = '!!' if names.get(_DESIGNER_ID) in [ 'Steve Matteson', 'Monotype Design Team', 'Danh Hong', ]: new_designer = None elif names.get(_DESIGNER_ID) == 'Monotype Design team': new_designer = 'Monotype Design Team' elif (_DESIGNER_ID not in names and cldr_data.get_english_script_name(noto_font.script) == 'Khmer'): new_designer = 'Danh Hong' else: new_designer = '!!' if names.get(_DESIGNER_URL_ID) in [ 'http://www.monotype.com/studio', 'http://www.khmertype.org', ]: new_designer_url = None elif names.get(_DESIGNER_URL_ID) in [ 'http://www.monotypeimaging.com/ProductsServices/TypeDesignerShowcase', ]: new_designer_url = 'http://www.monotype.com/studio' elif names.get(_DESIGNER_URL_ID) in [ 'http://www.khmertype.blogspot.com', 'http://www.khmertype.blogspot.com/', 'http://khmertype.blogspot.com/', 'http://wwwkhmertype.blogspot.com.com/', ]: new_designer_url = 'http://www.khmertype.org' else: new_designer_url = '!!!' if names.get(_MANUFACTURER_ID) in [ 'Monotype Imaging Inc.', 'Danh Hong', ]: new_manufacturer = None else: new_manufacturer = '!!!' def update(name_id, new, newText=None): old = names.get(name_id) if new and (new != old): if not dry_run and not '!!!' in new: font_data.set_name_record(ttfont, name_id, new, addIfMissing='win') label = _NAME_ID_LABELS[name_id] oldText = '\'%s\'' % old if old else 'None' newText = newText or ('\'%s\'' % new) print '%s:\n old: %s\n new: %s' % (label, oldText, newText or new) label_change = _changes.get(label) if not label_change: label_change = {} _changes[label] = label_change new_val_change = label_change.get(new) if not new_val_change: new_val_change = {} label_change[new] = new_val_change old_val_fonts = new_val_change.get(old) if not old_val_fonts: old_val_fonts = [] new_val_change[old] = old_val_fonts old_val_fonts.append(noto_font.filepath) update(_COPYRIGHT_ID, new_copyright) update(_VERSION_ID, new_version_string) update(_TRADEMARK_ID, new_trademark) update(_MANUFACTURER_ID, new_manufacturer) update(_DESIGNER_ID, new_designer) update(_DESCRIPTION_ID, new_description) update(_VENDOR_URL_ID, _NOTO_URL) update(_DESIGNER_URL_ID, new_designer_url) update(_LICENSE_ID, _SIL_LICENSE, newText='(OFL)') update(_LICENSE_URL_ID, _SIL_LICENSE_URL) if autofix_for_release.fix_fstype(ttfont): _autofix['fstype'].append(noto_font.filepath) if autofix_for_release.fix_vendor_id(ttfont): _autofix['vendor_id'].append(noto_font.filepath) if autofix_for_release.fix_attachlist(ttfont): _autofix['attachlist'].append(noto_font.filepath) if noto_font.is_hinted: tables_to_drop = _HINTED_TABLES_TO_DROP else: tables_to_drop = _UNHINTED_TABLES_TO_DROP if autofix_for_release.drop_hints(ttfont): _autofix['drop_hints'].append(noto_font.filepath) if autofix_for_release.drop_tables(ttfont, tables_to_drop): _autofix['drop_tables'].append(noto_font.filepath) if noto_font.family == 'Noto': if autofix_for_release.fix_linegap(ttfont): _autofix['linegap'].append(noto_font.filepath) if autofix_for_release.fix_os2_unicoderange(ttfont): _autofix['os2_unicoderange'].append(noto_font.filepath) if dry_run: return ttfont['head'].fontRevision = float_revision dst_dir = path.dirname(dst_file) if not path.isdir(dst_dir): os.makedirs(dst_dir) ttfont.save(dst_file) print 'Wrote file.'
def _swat_font(noto_font, dst_root, dry_run): filepath = noto_font.filepath basename = path.basename(filepath) if noto_font.is_cjk: print '# Skipping cjk font %s' % basename return if noto_font.fmt == 'ttc': print '# Deferring ttc font %s' % basename _ttc_fonts[noto_font] = ttc_utils.ttcfile_filenames(filepath) return ttfont = ttLib.TTFont(filepath, fontNumber=0) names = font_data.get_name_records(ttfont) # create relative root path rel_filepath = _noto_relative_path(filepath) if not rel_filepath: raise ValueError('Could not identify noto root of %s' % filepath) print '-----\nUpdating %s' % rel_filepath dst_file = path.join(dst_root, rel_filepath) try: new_revision, new_version_string = get_bumped_version( ttfont, noto_font.is_hinted) except ValueError as e: print e return print '%s: %s' % ('Would write' if dry_run else 'Writing', dst_file) new_trademark = "%s is a trademark of Google Inc." % noto_font.family # description field should be set. # Roozbeh has note, make sure design field has information # on whether the font is hinted. # Missing in Lao and Khmer, default in Cham. if (cldr_data.get_english_script_name(noto_font.script) in ['Lao', 'Khmer', 'Cham']): new_description = 'Data %shinted.' % ('' if noto_font.is_hinted else 'un') # elif noto_font.vendor is 'Monotype': elif not noto_font.is_cjk and noto_font.family == 'Noto': new_description = ( 'Data %shinted. Designed by Monotype design team.' % ('' if noto_font.is_hinted else 'un')) else: new_description = None if re.match(r'^Copyright 201\d Google Inc. All Rights Reserved\.$', names[_COPYRIGHT_ID]): new_copyright = None else: new_copyright = '!!' if names.get(_DESIGNER_ID) in [ 'Steve Matteson', 'Monotype Design Team', 'Danh Hong', ]: new_designer = None elif names.get(_DESIGNER_ID) == 'Monotype Design team': new_designer = 'Monotype Design Team' elif (_DESIGNER_ID not in names and cldr_data.get_english_script_name(noto_font.script) == 'Khmer'): new_designer = 'Danh Hong' else: new_designer = '!!' if names.get(_DESIGNER_URL_ID) in [ 'http://www.monotype.com/studio', 'http://www.khmertype.org', ]: new_designer_url = None elif names.get(_DESIGNER_URL_ID) in [ 'http://www.monotypeimaging.com/ProductsServices/TypeDesignerShowcase', ]: new_designer_url = 'http://www.monotype.com/studio' elif names.get(_DESIGNER_URL_ID) in [ 'http://www.khmertype.blogspot.com', 'http://www.khmertype.blogspot.com/', 'http://khmertype.blogspot.com/', 'http://wwwkhmertype.blogspot.com.com/', ]: new_designer_url = 'http://www.khmertype.org' else: new_designer_url = '!!!' if names.get(_MANUFACTURER_ID) in [ 'Monotype Imaging Inc.', 'Danh Hong', ]: new_manufacturer = None else: new_manufacturer = '!!!' def update(name_id, new, newText=None): old = names.get(name_id) if new and (new != old): if not dry_run and not '!!!' in new: font_data.set_name_record(ttfont, name_id, new, addIfMissing='win') label = _NAME_ID_LABELS[name_id] oldText = '\'%s\'' % old if old else 'None' newText = newText or ('\'%s\'' % new) print '%s:\n old: %s\n new: %s' % (label, oldText, newText or new) label_change = _changes.get(label) if not label_change: label_change = {} _changes[label] = label_change new_val_change = label_change.get(new) if not new_val_change: new_val_change = {} label_change[new] = new_val_change old_val_fonts = new_val_change.get(old) if not old_val_fonts: old_val_fonts = [] new_val_change[old] = old_val_fonts old_val_fonts.append(noto_font.filepath) update(_COPYRIGHT_ID, new_copyright) update(_VERSION_ID, new_version_string) update(_TRADEMARK_ID, new_trademark) update(_MANUFACTURER_ID, new_manufacturer) update(_DESIGNER_ID, new_designer) update(_DESCRIPTION_ID, new_description) update(_VENDOR_URL_ID, _NOTO_URL) update(_DESIGNER_URL_ID, new_designer_url) update(_LICENSE_ID, _SIL_LICENSE, newText='(OFL)') update(_LICENSE_URL_ID, _SIL_LICENSE_URL) if autofix_for_release.fix_fstype(ttfont): _autofix['fstype'].append(noto_font.filepath) if autofix_for_release.fix_vendor_id(ttfont): _autofix['vendor_id'].append(noto_font.filepath) if autofix_for_release.fix_attachlist(ttfont): _autofix['attachlist'].append(noto_font.filepath) if noto_font.is_hinted: tables_to_drop = _HINTED_TABLES_TO_DROP else: tables_to_drop = _UNHINTED_TABLES_TO_DROP if autofix_for_release.drop_hints(ttfont): _autofix['drop_hints'].append(noto_font.filepath) if autofix_for_release.drop_tables(ttfont, tables_to_drop): _autofix['drop_tables'].append(noto_font.filepath) if noto_font.family == 'Noto': if autofix_for_release.fix_linegap(ttfont): _autofix['linegap'].append(noto_font.filepath) if autofix_for_release.fix_os2_unicoderange(ttfont): _autofix['os2_unicoderange'].append(noto_font.filepath) if dry_run: return ttfont['head'].fontRevision = float_revision dst_dir = path.dirname(dst_file) if not path.isdir(dst_dir): os.makedirs(dst_dir) ttfont.save(dst_file) print 'Wrote file.'
def _swat_font(noto_font, dst_root, dry_run): filepath = noto_font.filepath basename = path.basename(filepath) if noto_font.is_cjk: print('# Skipping cjk font %s' % basename) return if noto_font.fmt == 'ttc': print('# Deferring ttc font %s' % basename) _ttc_fonts[noto_font] = ttc_utils.ttcfile_filenames(filepath) return ttfont = ttLib.TTFont(filepath, fontNumber=0) names = font_data.get_name_records(ttfont) # create relative root path rel_filepath = _noto_relative_path(filepath) if not rel_filepath: raise ValueError('Could not identify noto root of %s' % filepath) print('-----\nUpdating %s' % rel_filepath) dst_file = path.join(dst_root, rel_filepath) try: new_revision, new_version_string = get_bumped_version( ttfont, noto_font.is_hinted) except ValueError as e: print(e) return print('%s: %s' % ('Would write' if dry_run else 'Writing', dst_file)) new_trademark = "%s is a trademark of Google Inc." % noto_font.family # description field should be set. # Roozbeh has note, make sure design field has information # on whether the font is hinted. # Missing in Lao and Khmer, default in Cham. if (cldr_data.get_english_script_name(noto_font.script) in ['Lao', 'Khmer', 'Cham']): new_description = 'Data %shinted.' % ('' if noto_font.is_hinted else 'un') # elif noto_font.vendor is 'Monotype': elif not noto_font.is_cjk and noto_font.family == 'Noto': new_description = ('Data %shinted. Designed by Monotype design team.' % ('' if noto_font.is_hinted else 'un')) else: new_description = None if re.match(r'^Copyright 201\d Google Inc. All Rights Reserved\.$', names[_COPYRIGHT_ID]): new_copyright = None else: new_copyright = '!!' if names.get(_DESIGNER_ID) in [ 'Steve Matteson', 'Monotype Design Team', 'Danh Hong', ]: new_designer = None elif names.get(_DESIGNER_ID) == 'Monotype Design team': new_designer = 'Monotype Design Team' elif (_DESIGNER_ID not in names and cldr_data.get_english_script_name(noto_font.script) == 'Khmer'): new_designer = 'Danh Hong' else: new_designer = '!!' if names.get(_DESIGNER_URL_ID) in [ 'http://www.monotype.com/studio', 'http://www.khmertype.org', ]: new_designer_url = None elif names.get(_DESIGNER_URL_ID) in [ 'http://www.monotypeimaging.com/ProductsServices/TypeDesignerShowcase', ]: new_designer_url = 'http://www.monotype.com/studio' elif names.get(_DESIGNER_URL_ID) in [ 'http://www.khmertype.blogspot.com', 'http://www.khmertype.blogspot.com/', 'http://khmertype.blogspot.com/', 'http://wwwkhmertype.blogspot.com.com/', ]: new_designer_url = 'http://www.khmertype.org' else: new_designer_url = '!!!' if names.get(_MANUFACTURER_ID) in [ 'Monotype Imaging Inc.', 'Danh Hong', ]: new_manufacturer = None else: new_manufacturer = '!!!' def update(name_id, new, newText=None): old = names.get(name_id) if new and (new != old): if not dry_run and not '!!!' in new: font_data.set_name_record(ttfont, name_id, new, addIfMissing='win') label = _NAME_ID_LABELS[name_id] oldText = '\'%s\'' % old if old else 'None' newText = newText or ('\'%s\'' % new) print('%s:\n old: %s\n new: %s' % (label, oldText, newText or new)) label_change = _changes.get(label) if not label_change: label_change = {} _changes[label] = label_change new_val_change = label_change.get(new) if not new_val_change: new_val_change = {} label_change[new] = new_val_change old_val_fonts = new_val_change.get(old) if not old_val_fonts: old_val_fonts = [] new_val_change[old] = old_val_fonts old_val_fonts.append(noto_font.filepath) update(_COPYRIGHT_ID, new_copyright) update(_VERSION_ID, new_version_string) update(_TRADEMARK_ID, new_trademark) update(_MANUFACTURER_ID, new_manufacturer) update(_DESIGNER_ID, new_designer) update(_DESCRIPTION_ID, new_description) update(_VENDOR_URL_ID, _NOTO_URL) update(_DESIGNER_URL_ID, new_designer_url) update(_LICENSE_ID, _SIL_LICENSE, newText='(OFL)') update(_LICENSE_URL_ID, _SIL_LICENSE_URL) if autofix_for_release.fix_fstype(ttfont): _autofix['fstype'].append(noto_font.filepath) if autofix_for_release.fix_vendor_id(ttfont): _autofix['vendor_id'].append(noto_font.filepath) if autofix_for_release.fix_attachlist(ttfont): _autofix['attachlist'].append(noto_font.filepath) if noto_font.is_hinted: tables_to_drop = _HINTED_TABLES_TO_DROP else: tables_to_drop = _UNHINTED_TABLES_TO_DROP if autofix_for_release.drop_hints(ttfont): _autofix['drop_hints'].append(noto_font.filepath) if autofix_for_release.drop_tables(ttfont, tables_to_drop): _autofix['drop_tables'].append(noto_font.filepath) if noto_font.family == 'Noto': if autofix_for_release.fix_linegap(ttfont): _autofix['linegap'].append(noto_font.filepath) if autofix_for_release.fix_os2_unicoderange(ttfont): _autofix['os2_unicoderange'].append(noto_font.filepath) if dry_run: return ttfont['head'].fontRevision = float_revision dst_dir = path.dirname(dst_file) if not path.isdir(dst_dir): os.makedirs(dst_dir) ttfont.save(dst_file) print('Wrote file.')
def _swat_font(noto_font, dst_root, dry_run): filepath = noto_font.filepath basename = path.basename(filepath) if noto_font.is_cjk: print("# Skipping cjk font %s" % basename) return if noto_font.fmt == "ttc": print("# Deferring ttc font %s" % basename) _ttc_fonts[noto_font] = ttc_utils.ttcfile_filenames(filepath) return ttfont = ttLib.TTFont(filepath, fontNumber=0) names = font_data.get_name_records(ttfont) # create relative root path rel_filepath = _noto_relative_path(filepath) if not rel_filepath: raise ValueError("Could not identify noto root of %s" % filepath) print("-----\nUpdating %s" % rel_filepath) dst_file = path.join(dst_root, rel_filepath) try: new_revision, new_version_string = get_bumped_version( ttfont, noto_font.is_hinted) except ValueError as e: print(e) return print("%s: %s" % ("Would write" if dry_run else "Writing", dst_file)) new_trademark = "%s is a trademark of Google Inc." % noto_font.family # description field should be set. # Roozbeh has note, make sure design field has information # on whether the font is hinted. # Missing in Lao and Khmer, default in Cham. if cldr_data.get_english_script_name( noto_font.script) in ["Lao", "Khmer", "Cham"]: new_description = "Data %shinted." % ("" if noto_font.is_hinted else "un") # elif noto_font.vendor is 'Monotype': elif not noto_font.is_cjk and noto_font.family == "Noto": new_description = "Data %shinted. Designed by Monotype design team." % ( "" if noto_font.is_hinted else "un") else: new_description = None if re.match(r"^Copyright 201\d Google Inc. All Rights Reserved\.$", names[_COPYRIGHT_ID]): new_copyright = None else: new_copyright = "!!" if names.get(_DESIGNER_ID) in [ "Steve Matteson", "Monotype Design Team", "Danh Hong", ]: new_designer = None elif names.get(_DESIGNER_ID) == "Monotype Design team": new_designer = "Monotype Design Team" elif (_DESIGNER_ID not in names and cldr_data.get_english_script_name(noto_font.script) == "Khmer"): new_designer = "Danh Hong" else: new_designer = "!!" if names.get(_DESIGNER_URL_ID) in [ "http://www.monotype.com/studio", "http://www.khmertype.org", ]: new_designer_url = None elif names.get(_DESIGNER_URL_ID) in [ "http://www.monotypeimaging.com/ProductsServices/TypeDesignerShowcase", ]: new_designer_url = "http://www.monotype.com/studio" elif names.get(_DESIGNER_URL_ID) in [ "http://www.khmertype.blogspot.com", "http://www.khmertype.blogspot.com/", "http://khmertype.blogspot.com/", "http://wwwkhmertype.blogspot.com.com/", ]: new_designer_url = "http://www.khmertype.org" else: new_designer_url = "!!!" if names.get(_MANUFACTURER_ID) in [ "Monotype Imaging Inc.", "Danh Hong", ]: new_manufacturer = None else: new_manufacturer = "!!!" def update(name_id, new, newText=None): old = names.get(name_id) if new and (new != old): if not dry_run and not "!!!" in new: font_data.set_name_record(ttfont, name_id, new, addIfMissing="win") label = _NAME_ID_LABELS[name_id] oldText = "'%s'" % old if old else "None" newText = newText or ("'%s'" % new) print("%s:\n old: %s\n new: %s" % (label, oldText, newText or new)) label_change = _changes.get(label) if not label_change: label_change = {} _changes[label] = label_change new_val_change = label_change.get(new) if not new_val_change: new_val_change = {} label_change[new] = new_val_change old_val_fonts = new_val_change.get(old) if not old_val_fonts: old_val_fonts = [] new_val_change[old] = old_val_fonts old_val_fonts.append(noto_font.filepath) update(_COPYRIGHT_ID, new_copyright) update(_VERSION_ID, new_version_string) update(_TRADEMARK_ID, new_trademark) update(_MANUFACTURER_ID, new_manufacturer) update(_DESIGNER_ID, new_designer) update(_DESCRIPTION_ID, new_description) update(_VENDOR_URL_ID, _NOTO_URL) update(_DESIGNER_URL_ID, new_designer_url) update(_LICENSE_ID, _SIL_LICENSE, newText="(OFL)") update(_LICENSE_URL_ID, _SIL_LICENSE_URL) if autofix_for_release.fix_fstype(ttfont): _autofix["fstype"].append(noto_font.filepath) if autofix_for_release.fix_vendor_id(ttfont): _autofix["vendor_id"].append(noto_font.filepath) if autofix_for_release.fix_attachlist(ttfont): _autofix["attachlist"].append(noto_font.filepath) if noto_font.is_hinted: tables_to_drop = _HINTED_TABLES_TO_DROP else: tables_to_drop = _UNHINTED_TABLES_TO_DROP if autofix_for_release.drop_hints(ttfont): _autofix["drop_hints"].append(noto_font.filepath) if autofix_for_release.drop_tables(ttfont, tables_to_drop): _autofix["drop_tables"].append(noto_font.filepath) if noto_font.family == "Noto": if autofix_for_release.fix_linegap(ttfont): _autofix["linegap"].append(noto_font.filepath) if autofix_for_release.fix_os2_unicoderange(ttfont): _autofix["os2_unicoderange"].append(noto_font.filepath) if dry_run: return ttfont["head"].fontRevision = float_revision dst_dir = path.dirname(dst_file) if not path.isdir(dst_dir): os.makedirs(dst_dir) ttfont.save(dst_file) print("Wrote file.")