# Copyright 2017 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # This script generates a header containing a dictionary from locales to # accept language strings from chromium's .xtb files. It is not very # robust at the moment, and makes some assumptions about the format of # the files, including at least the following: # * assumes necessary data is contained only with files of the form # components/strings/components_locale_settings_${LANG}.xtb # * assumes ${LANG} is identified in the lang attribute of the root # element of the file's xml data # * assumes that there is only one relevant element with the # IDS_ACCEPT_LANGUAGES attribute from __future__ import print_function import os import re import sys from xml.etree import ElementTree STRINGS_DIR = sys.argv[2] + 'components/strings/' # pylint: disable=inconsistent-return-statements def extract_accept_langs(filename): tree = ElementTree.parse(STRINGS_DIR + filename).getroot() for child in tree: if child.get('id') == 'IDS_ACCEPT_LANGUAGES': return tree.get('lang'), child.text # pylint: enable=inconsistent-return-statements def gen_accept_langs_table(): accept_langs_list = [extract_accept_langs(filename) for filename in os.listdir(STRINGS_DIR) if re.match(r'components_locale_settings_\S+.xtb', filename)] return dict(accept_langs for accept_langs in accept_langs_list if accept_langs) HEADER = "static NSDictionary* const acceptLangs = @{" def LINE(locale, accept_langs): return ' @"' + locale + '" : @"' + accept_langs + '",' FOOTER = "};" def main(): with open(sys.argv[1] + "/accept_languages_table.h", "w+") as f: print(HEADER, file=f) for (locale, accept_langs) in gen_accept_langs_table().items(): print(LINE(locale, accept_langs), file=f) print(FOOTER, file=f) if __name__ == "__main__": main()