def get_named_lang_scrs(family_id_to_lang_scr_to_sample_key): """Return the list of lang_scrs whose names appear in the UI.""" named_lang_scrs = lang_data.lang_scripts() supported_lang_scrs = set() for family_id in family_id_to_lang_scr_to_sample_key: lang_scrs = [l for l in family_id_to_lang_scr_to_sample_key[family_id].keys() if l in named_lang_scrs] supported_lang_scrs.update(lang_scrs) return supported_lang_scrs
def get_named_lang_scrs(family_id_to_lang_scr_to_sample_key): """Return the list of lang_scrs whose names appear in the UI.""" named_lang_scrs = lang_data.lang_scripts() supported_lang_scrs = set() for family_id in family_id_to_lang_scr_to_sample_key: lang_scrs = [ l for l in family_id_to_lang_scr_to_sample_key[family_id].keys() if l in named_lang_scrs] supported_lang_scrs.update(lang_scrs) return supported_lang_scrs
def generate(self): if self.clean: self.clean_target_dir() if not self.no_build: self.ensure_target_dirs_exist() # debug/print # ['families', 'script_to_family_ids', 'used_lang_data', # 'family_id_to_lang_scrs', 'family_id_to_default_lang_scr'] debug = frozenset([]) def use_in_web(font): return (not font.subset and not font.is_UI and not font.fmt == 'ttc' and not font.script in {'CJK', 'HST'} and not font.family in {'Arimo', 'Cousine', 'Tinos'}) fonts = filter(use_in_web, noto_fonts.get_noto_fonts()) families = noto_fonts.get_families(fonts) if 'families' in debug: print '\nfamilies' for family_id, family in sorted(families.iteritems()): print family_id, family.rep_member.script script_to_family_ids = get_script_to_family_ids(families) if 'script_to_family_ids' in debug: print '\nscript to family ids' for script, family_ids in sorted(script_to_family_ids.iteritems()): print script, family_ids all_lang_scrs = set(['und-' + script for script in script_to_family_ids]) all_lang_scrs.update(lang_data.lang_scripts()) lang_scr_to_sample_infos = {} for lang_scr in all_lang_scrs: lang, script = lang_scr.split('-') if not script in script_to_family_ids: print 'no family supports script in %s' % lang_scr continue sample_infos = get_sample_infos(lang_scr) if not sample_infos: continue lang_scr_to_sample_infos[lang_scr] = sample_infos if 'lang_scr_to_sample_infos' in debug: print '\nlang+script to sample infos' for lang_scr, info_list in sorted(lang_scr_to_sample_infos.iteritems()): for info in info_list: print '%s key: %s rtl: %s attrib: %s len: %d' % ( lang_scr, info[3], info[0], info[2], len(info[1])) family_id_to_lang_scrs = get_family_id_to_lang_scrs( lang_scr_to_sample_infos.keys(), script_to_family_ids) family_id_to_lang_scr_to_sample_key, sample_key_to_info = get_family_id_to_lang_scr_to_sample_key( family_id_to_lang_scrs, families, lang_scr_to_sample_infos) family_id_to_regions = get_family_id_to_regions(family_id_to_lang_scr_to_sample_key) region_to_family_ids = get_region_to_family_ids(family_id_to_regions) family_id_to_default_lang_scr = get_family_id_to_default_lang_scr( family_id_to_lang_scrs, families) if 'family_id_to_default_lang_scr' in debug: print '\nfamily id to default lang scr' for family_id, lang_scr in family_id_to_default_lang_scr.iteritems(): print family_id, lang_scr region_data = get_region_lat_lng_data(region_to_family_ids.keys()) lang_scrs = get_named_lang_scrs(family_id_to_lang_scr_to_sample_key) lang_scr_sort_order = get_lang_scr_sort_order(lang_scrs) # sanity checks # all families have languages, and all those have samples. # all families have a default language, and that is in the sample list error_list = [] for family in families.values(): family_id = family.family_id if not family_id in family_id_to_lang_scr_to_sample_key: error_list.append('no entry for family %s' % family_id) continue lang_scr_to_sample_key = family_id_to_lang_scr_to_sample_key[family_id] if not lang_scr_to_sample_key: error_list.append('no langs for family %s' % family_id) continue for lang_scr in lang_scr_to_sample_key: sample_key = lang_scr_to_sample_key[lang_scr] if not sample_key: error_list.append('no sample key for lang %s in family %s' % (lang_scr, sample_key)) continue if not sample_key in sample_key_to_info: error_list.append('no sample for sample key: %s' % sample_key) if not family_id in family_id_to_default_lang_scr: error_list.append('no default lang for family %s' % family_id) continue default_lang_scr = family_id_to_default_lang_scr[family_id] if not default_lang_scr in lang_scr_to_sample_key: error_list.append('default lang %s not in samples for family %s' % (default_lang_scr, family_id)) if error_list: print 'Errors:\n' + '\n '.join(error_list) if error_list or self.no_build: print 'skipping build output' return # build outputs if self.no_zips: print 'skipping zip output' else: family_zip_info = self.build_zips(families) universal_zip_info = self.build_universal_zips(families) # build outputs not used by the json but linked to from the web page self.build_ttc_zips() if self.no_css: print 'skipping css output' else: family_css_info = self.build_css(families) if self.no_data: print 'skipping data output%s' % reason else: self.build_data_json(family_id_to_lang_scr_to_sample_key, families, family_zip_info, universal_zip_info, family_id_to_regions, region_to_family_ids) self.build_families_json(family_id_to_lang_scr_to_sample_key, families, family_id_to_default_lang_scr, family_id_to_regions, family_css_info, lang_scr_sort_order) self.build_misc_json(sample_key_to_info, region_data) if self.no_images: print 'skipping image output' else: self.build_images(family_id_to_lang_scr_to_sample_key, families, family_id_to_default_lang_scr, sample_key_to_info)
def generate(self): if self.clean: self.clean_target_dir() if not self.no_build: self.ensure_target_dirs_exist() def use_in_web(font): return (not font.subset and not font.fmt == 'ttc' and not font.script in {'CJK', 'HST'} and not font.family in {'Arimo', 'Cousine', 'Tinos'}) fonts = filter(use_in_web, noto_fonts.get_noto_fonts()) families = noto_fonts.get_families(fonts) check_families(families) if 'families' in self.debug: print '\n#debug families' for family_id, family in sorted(families.iteritems()): print '%s (%s, %s)' % ( family_id, family.name, noto_fonts.get_family_filename(family)) if family.hinted_members: print ' hinted: %s' % ', '.join(sorted( [path.basename(m.filepath) for m in family.hinted_members])) if family.unhinted_members: print ' unhinted: %s' % ', '.join(sorted( [path.basename(m.filepath) for m in family.unhinted_members])) script_to_family_ids = get_script_to_family_ids(families) if 'script_to_family_ids' in self.debug: print '\n#debug script to family ids' for script, family_ids in sorted(script_to_family_ids.iteritems()): print '%s: %s' % (script, ', '.join(sorted(family_ids))) all_lang_scrs = set(['und-' + script for script in script_to_family_ids]) all_lang_scrs.update(lang_data.lang_scripts()) lang_scr_to_sample_infos = {} for lang_scr in all_lang_scrs: lang, script = lang_scr.split('-') if not script in script_to_family_ids: print 'no family supports script in %s' % lang_scr continue sample_infos = get_sample_infos(lang_scr) if not sample_infos: continue lang_scr_to_sample_infos[lang_scr] = sample_infos if 'lang_scr_to_sample_infos' in self.debug: print '\n#debug lang+script to sample infos' for lang_scr, info_list in sorted(lang_scr_to_sample_infos.iteritems()): for info in info_list: print '%s: %s, %s, len %d' % ( lang_scr, info[2], info[1], len(info[0])) family_id_to_lang_scrs = get_family_id_to_lang_scrs( lang_scr_to_sample_infos.keys(), script_to_family_ids) if 'family_id_to_lang_scrs' in self.debug: print '\n#debug family id to list of lang+script' for family_id, lang_scrs in sorted(family_id_to_lang_scrs.iteritems()): print '%s: (%d) %s' % ( family_id, len(lang_scrs), ' '.join(sorted(lang_scrs))) family_id_to_lang_scr_to_sample_key, sample_key_to_info = ( get_family_id_to_lang_scr_to_sample_key( family_id_to_lang_scrs, families, lang_scr_to_sample_infos)) if 'family_id_to_lang_scr_to_sample_key' in self.debug: print '\n#debug family id to map from lang+script to sample key' for family_id, lang_scr_to_sample_key in sorted( family_id_to_lang_scr_to_sample_key.iteritems()): print '%s (%d):' % (family_id, len(lang_scr_to_sample_key)) for lang_scr, sample_key in sorted(lang_scr_to_sample_key.iteritems()): print ' %s: %s' % (lang_scr, sample_key) if 'sample_key_to_info' in self.debug: print '\n#debug sample key to sample info' for sample_key, info in sorted(sample_key_to_info.iteritems()): print '%s: %s, len %d' % ( sample_key, info[1], len(info[0])) family_id_to_regions = get_family_id_to_regions( family_id_to_lang_scr_to_sample_key) if 'family_id_to_regions' in self.debug: print '\n#debug family id to regions' for family_id, regions in sorted(family_id_to_regions.iteritems()): print '%s: (%d) %s' % ( family_id, len(regions), ', '.join(sorted(regions))) region_to_family_ids = get_region_to_family_ids(family_id_to_regions) if 'region_to_family_ids' in self.debug: print '\n#debug region to family ids' for region, family_ids in sorted(region_to_family_ids.iteritems()): print '%s: (%d) %s' % ( region, len(family_ids), ', '.join(sorted(family_ids))) family_id_to_default_lang_scr = get_family_id_to_default_lang_scr( family_id_to_lang_scrs, families) if 'family_id_to_default_lang_scr' in self.debug: print '\n#debug family id to default lang scr' for family_id, lang_scr in sorted( family_id_to_default_lang_scr.iteritems()): print '%s: %s' % (family_id, lang_scr) region_data = get_region_lat_lng_data(region_to_family_ids.keys()) lang_scrs = get_named_lang_scrs(family_id_to_lang_scr_to_sample_key) lang_scr_sort_order = get_lang_scr_sort_order(lang_scrs) # sanity checks # all families have languages, and all those have samples. # all families have a default language, and that is in the sample list error_list = [] for family in families.values(): family_id = family.family_id if not family_id in family_id_to_lang_scr_to_sample_key: error_list.append('no entry for family %s' % family_id) continue lang_scr_to_sample_key = family_id_to_lang_scr_to_sample_key[family_id] if not lang_scr_to_sample_key: error_list.append('no langs for family %s' % family_id) continue for lang_scr in lang_scr_to_sample_key: sample_key = lang_scr_to_sample_key[lang_scr] if not sample_key: error_list.append( 'no sample key for lang %s in family %s' % (lang_scr, sample_key)) continue if not sample_key in sample_key_to_info: error_list.append('no sample for sample key: %s' % sample_key) if not family_id in family_id_to_default_lang_scr: error_list.append('no default lang for family %s' % family_id) continue default_lang_scr = family_id_to_default_lang_scr[family_id] if not default_lang_scr in lang_scr_to_sample_key: error_list.append('default lang %s not in samples for family %s' % (default_lang_scr, family_id)) if error_list: print 'Errors:\n' + '\n '.join(error_list) if error_list or self.no_build: print 'skipping build output' return # build outputs # zips are required for data if self.no_zips and self.no_data: print 'skipping zip output' else: self.build_readmes() family_zip_info = self.build_zips(families) universal_zip_info = self.build_universal_zips(families) # build outputs not used by the json but linked to from the web page if not self.no_zips: self.build_ttc_zips() if self.no_css: print 'skipping css output' else: family_css_info = self.build_css(families) if self.no_data: print 'skipping data output' else: self.build_data_json(family_id_to_lang_scr_to_sample_key, families, family_zip_info, universal_zip_info, family_id_to_regions, region_to_family_ids) self.build_families_json(family_id_to_lang_scr_to_sample_key, families, family_id_to_default_lang_scr, family_id_to_regions, family_css_info, lang_scr_sort_order) self.build_misc_json(sample_key_to_info, region_data) if self.no_images: print 'skipping image output' else: self.build_images(family_id_to_lang_scr_to_sample_key, families, family_id_to_default_lang_scr, sample_key_to_info)
def generate(self): if self.clean: self.clean_target_dir() if not self.no_build: self.ensure_target_dirs_exist() # debug/print # ['families', 'script_to_family_ids', 'used_lang_data', # 'family_id_to_lang_scrs', 'family_id_to_default_lang_scr'] debug = frozenset([]) def use_in_web(font): return (not font.subset and not font.is_UI and not font.fmt == 'ttc' and not font.script in {'CJK', 'HST', 'Qaae'} and not font.family in {'Arimo', 'Cousine', 'Tinos'}) fonts = [ font for font in noto_fonts.get_noto_fonts() if use_in_web(font) ] families = noto_fonts.get_families(fonts) if 'families' in debug: print '\nfamilies' for family_id, family in sorted(families.iteritems()): print family_id, family.rep_member.script script_to_family_ids = get_script_to_family_ids(families) if 'script_to_family_ids' in debug: print '\nscript to family ids' for script, family_ids in sorted(script_to_family_ids.iteritems()): print script, family_ids all_lang_scrs = set( ['und-' + script for script in script_to_family_ids]) all_lang_scrs.update(lang_data.lang_scripts()) lang_scr_to_sample_infos = {} for lang_scr in all_lang_scrs: lang, script = lang_scr.split('-') if not script in script_to_family_ids: print 'no family supports script in %s' % lang_scr continue rtl = cldr_data.is_rtl(lang_scr) sample_infos = get_sample_infos(lang_scr, rtl) if not sample_infos: continue lang_scr_to_sample_infos[lang_scr] = sample_infos if 'lang_scr_to_sample_infos' in debug: print '\nlang+script to sample infos' for lang_scr, info_list in sorted( lang_scr_to_sample_infos.iteritems()): for info in info_list: print '%s key: %s rtl: %s attrib: %s len: %d' % ( lang_scr, info[3], info[0], info[2], len(info[1])) family_id_to_lang_scrs = get_family_id_to_lang_scrs( lang_scr_to_sample_infos.keys(), script_to_family_ids) family_id_to_lang_scr_to_sample_key, sample_key_to_info = get_family_id_to_lang_scr_to_sample_key( family_id_to_lang_scrs, families, lang_scr_to_sample_infos) family_id_to_regions = get_family_id_to_regions( family_id_to_lang_scr_to_sample_key) region_to_family_ids = get_region_to_family_ids(family_id_to_regions) family_id_to_default_lang_scr = get_family_id_to_default_lang_scr( family_id_to_lang_scrs, families) if 'family_id_to_default_lang_scr' in debug: print '\nfamily id to default lang scr' for family_id, lang_scr in family_id_to_default_lang_scr.iteritems( ): print family_id, lang_scr region_data = get_region_lat_lng_data(region_to_family_ids.keys()) lang_scrs = get_named_lang_scrs(family_id_to_lang_scr_to_sample_key) lang_scr_sort_order = get_lang_scr_sort_order(lang_scrs) # sanity checks # all families have languages, and all those have samples. # all families have a default language, and that is in the sample list error_list = [] for family in families.values(): family_id = family.family_id if not family_id in family_id_to_lang_scr_to_sample_key: error_list.append('no entry for family %s' % family_id) continue lang_scr_to_sample_key = family_id_to_lang_scr_to_sample_key[ family_id] if not lang_scr_to_sample_key: error_list.append('no langs for family %s' % family_id) continue for lang_scr in lang_scr_to_sample_key: sample_key = lang_scr_to_sample_key[lang_scr] if not sample_key: error_list.append( 'no sample key for lang %s in family %s' % (lang_scr, sample_key)) continue if not sample_key in sample_key_to_info: error_list.append('no sample for sample key: %s' % sample_key) if not family_id in family_id_to_default_lang_scr: error_list.append('no default lang for family %s' % family_id) continue default_lang_scr = family_id_to_default_lang_scr[family_id] if not default_lang_scr in lang_scr_to_sample_key: error_list.append( 'default lang %s not in samples for family %s' % (default_lang_scr, family_id)) if error_list: print 'Errors:\n' + '\n '.join(error_list) if error_list or self.no_build: print 'skipping build output' return # build outputs if self.no_zips: print 'skipping zip output' else: family_zip_info = self.build_zips(families) universal_zip_info = self.build_universal_zips(families) # build outputs not used by the json but linked to from the web page self.build_ttc_zips() if self.no_css: print 'skipping css output' else: family_css_info = self.build_css(families) if self.no_data: print 'skipping data output%s' % reason else: self.build_data_json(family_id_to_lang_scr_to_sample_key, families, family_zip_info, universal_zip_info, family_id_to_regions, region_to_family_ids) self.build_families_json(family_id_to_lang_scr_to_sample_key, families, family_id_to_default_lang_scr, family_id_to_regions, family_css_info, lang_scr_sort_order) self.build_misc_json(sample_key_to_info, region_data) if self.no_images: print 'skipping image output' else: self.build_images(family_id_to_lang_scr_to_sample_key, families, family_id_to_default_lang_scr, sample_key_to_info)
def generate(self): if self.clean: self.clean_target_dir() if not self.no_build: self.ensure_target_dirs_exist() def use_in_web(font): return (not font.subset and not font.fmt == 'ttc' and not font.script in {'CJK', 'HST'} and not font.family in {'Arimo', 'Cousine', 'Tinos'}) fonts = filter(use_in_web, noto_fonts.get_noto_fonts()) families = noto_fonts.get_families(fonts) check_families(families) if 'families' in self.debug: print '\n#debug families' for family_id, family in sorted(families.iteritems()): print '%s (%s, %s)' % ( family_id, family.name, noto_fonts.get_family_filename(family)) if family.hinted_members: print ' hinted: %s' % ', '.join(sorted( [path.basename(m.filepath) for m in family.hinted_members])) if family.unhinted_members: print ' unhinted: %s' % ', '.join(sorted( [path.basename(m.filepath) for m in family.unhinted_members])) script_to_family_ids = get_script_to_family_ids(families) if 'script_to_family_ids' in self.debug: print '\n#debug script to family ids' for script, family_ids in sorted(script_to_family_ids.iteritems()): print '%s: %s' % (script, ', '.join(sorted(family_ids))) all_lang_scrs = set(['und-' + script for script in script_to_family_ids]) all_lang_scrs.update(lang_data.lang_scripts()) lang_scr_to_sample_infos = {} for lang_scr in all_lang_scrs: lang, script = lang_scr.split('-') if not script in script_to_family_ids: print 'no family supports script in %s' % lang_scr continue sample_infos = get_sample_infos(lang_scr) if not sample_infos: continue lang_scr_to_sample_infos[lang_scr] = sample_infos if 'lang_scr_to_sample_infos' in self.debug: print '\n#debug lang+script to sample infos' for lang_scr, info_list in sorted(lang_scr_to_sample_infos.iteritems()): for info in info_list: print '%s: %s, %s, len %d' % ( lang_scr, info[2], info[1], len(info[0])) family_id_to_lang_scrs = get_family_id_to_lang_scrs( lang_scr_to_sample_infos.keys(), script_to_family_ids) if 'family_id_to_lang_scrs' in self.debug: print '\n#debug family id to list of lang+script' for family_id, lang_scrs in sorted(family_id_to_lang_scrs.iteritems()): print '%s: (%d) %s' % ( family_id, len(lang_scrs), ' '.join(sorted(lang_scrs))) family_id_to_lang_scr_to_sample_key, sample_key_to_info = ( get_family_id_to_lang_scr_to_sample_key( family_id_to_lang_scrs, families, lang_scr_to_sample_infos)) if 'family_id_to_lang_scr_to_sample_key' in self.debug: print '\n#debug family id to map from lang+script to sample key' for family_id, lang_scr_to_sample_key in sorted( family_id_to_lang_scr_to_sample_key.iteritems()): print '%s (%d):' % (family_id, len(lang_scr_to_sample_key)) for lang_scr, sample_key in sorted(lang_scr_to_sample_key.iteritems()): print ' %s: %s' % (lang_scr, sample_key) if 'sample_key_to_info' in self.debug: print '\n#debug sample key to sample info' for sample_key, info in sorted(sample_key_to_info.iteritems()): print '%s: %s, len %d' % ( sample_key, info[1], len(info[0])) family_id_to_regions = get_family_id_to_regions( family_id_to_lang_scr_to_sample_key) if 'family_id_to_regions' in self.debug: print '\n#debug family id to regions' for family_id, regions in sorted(family_id_to_regions.iteritems()): print '%s: (%d) %s' % ( family_id, len(regions), ', '.join(sorted(regions))) region_to_family_ids = get_region_to_family_ids(family_id_to_regions) if 'region_to_family_ids' in self.debug: print '\n#debug region to family ids' for region, family_ids in sorted(region_to_family_ids.iteritems()): print '%s: (%d) %s' % ( region, len(family_ids), ', '.join(sorted(family_ids))) family_id_to_default_lang_scr = get_family_id_to_default_lang_scr( family_id_to_lang_scrs, families) if 'family_id_to_default_lang_scr' in self.debug: print '\n#debug family id to default lang scr' for family_id, lang_scr in sorted( family_id_to_default_lang_scr.iteritems()): print '%s: %s' % (family_id, lang_scr) region_data = get_region_lat_lng_data(region_to_family_ids.keys()) lang_scrs = get_named_lang_scrs(family_id_to_lang_scr_to_sample_key) lang_scr_sort_order = get_lang_scr_sort_order(lang_scrs) # sanity checks # all families have languages, and all those have samples. # all families have a default language, and that is in the sample list error_list = [] for family in families.values(): family_id = family.family_id if not family_id in family_id_to_lang_scr_to_sample_key: error_list.append('no entry for family %s' % family_id) continue lang_scr_to_sample_key = family_id_to_lang_scr_to_sample_key[family_id] if not lang_scr_to_sample_key: error_list.append('no langs for family %s' % family_id) continue for lang_scr in lang_scr_to_sample_key: sample_key = lang_scr_to_sample_key[lang_scr] if not sample_key: error_list.append( 'no sample key for lang %s in family %s' % (lang_scr, sample_key)) continue if not sample_key in sample_key_to_info: error_list.append('no sample for sample key: %s' % sample_key) if not family_id in family_id_to_default_lang_scr: error_list.append('no default lang for family %s' % family_id) continue default_lang_scr = family_id_to_default_lang_scr[family_id] if not default_lang_scr in lang_scr_to_sample_key: error_list.append('default lang %s not in samples for family %s' % (default_lang_scr, family_id)) if error_list: print 'Errors:\n' + '\n '.join(error_list) if error_list or self.no_build: print 'skipping build output' return # build outputs # zips are required for data if self.no_zips and self.no_data: print 'skipping zip output' else: family_zip_info = self.build_zips(families) universal_zip_info = self.build_universal_zips(families) # build outputs not used by the json but linked to from the web page if not self.no_zips: self.build_ttc_zips() if self.no_css: print 'skipping css output' else: family_css_info = self.build_css(families) if self.no_data: print 'skipping data output' else: self.build_data_json(family_id_to_lang_scr_to_sample_key, families, family_zip_info, universal_zip_info, family_id_to_regions, region_to_family_ids) self.build_families_json(family_id_to_lang_scr_to_sample_key, families, family_id_to_default_lang_scr, family_id_to_regions, family_css_info, lang_scr_sort_order) self.build_misc_json(sample_key_to_info, region_data) if self.no_images: print 'skipping image output' else: self.build_images(family_id_to_lang_scr_to_sample_key, families, family_id_to_default_lang_scr, sample_key_to_info)