| #!/usr/bin/python -B |
| |
| """ Usage: make-normalize-generateddata-input.py PATH_TO_MOZILLA_CENTRAL |
| |
| This script generates test input data for String.prototype.normalize |
| from intl/icu/source/data/unidata/NormalizationTest.txt |
| to js/src/tests/ecma_6/String/normalize-generateddata-input.js |
| """ |
| |
| from __future__ import print_function |
| import re, sys |
| |
| sep_pat = re.compile(' +') |
| def to_code_list(codes): |
| return '[' + ', '.join(map(lambda x: '0x{0}'.format(x), re.split(sep_pat, codes))) + ']' |
| |
| def convert(dir): |
| ver_pat = re.compile('NormalizationTest-([0-9\.]+)\.txt') |
| part_pat = re.compile('^@(Part([0-9]+) .+)$') |
| test_pat = re.compile('^([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);$') |
| ignore_pat = re.compile('^#|^$') |
| js_path = 'js/src/tests/ecma_6/String/normalize-generateddata-input.js' |
| txt_path = 'intl/icu/source/data/unidata/NormalizationTest.txt' |
| |
| part_opened = False |
| not_empty = False |
| with open('{dir}/{path}'.format(dir=dir, path=txt_path), 'r') as f: |
| with open('{dir}/{path}'.format(dir=dir, path=js_path), 'w') as outf: |
| for line in f: |
| m = test_pat.search(line) |
| if m: |
| if not_empty: |
| outf.write(',') |
| outf.write('\n') |
| pat = '{{ source: {source}, NFC: {NFC}, NFD: {NFD}, NFKC: {NFKC}, NFKD: {NFKD} }}' |
| outf.write(pat.format(source=to_code_list(m.group(1)), |
| NFC=to_code_list(m.group(2)), |
| NFD=to_code_list(m.group(3)), |
| NFKC=to_code_list(m.group(4)), |
| NFKD=to_code_list(m.group(5)))) |
| not_empty = True |
| continue |
| m = part_pat.search(line) |
| if m: |
| desc = m.group(1) |
| part = m.group(2) |
| if part_opened: |
| outf.write('\n];\n') |
| outf.write('/* {desc} */\n'.format(desc=desc)) |
| outf.write('var tests_part{part} = ['.format(part=part)) |
| part_opened = True |
| not_empty = False |
| continue |
| m = ver_pat.search(line) |
| if m: |
| ver = m.group(1) |
| outf.write('/* created from NormalizationTest-{ver}.txt */\n'.format(ver=ver)) |
| continue |
| m = ignore_pat.search(line) |
| if m: |
| continue |
| print("Unknown line: {0}".format(line), file=sys.stderr) |
| if part_opened: |
| outf.write('\n];\n') |
| |
| if __name__ == '__main__': |
| if len(sys.argv) < 2: |
| print("Usage: make-normalize-generateddata-input.py PATH_TO_MOZILLA_CENTRAL", file=sys.stderr) |
| sys.exit(1) |
| convert(sys.argv[1]) |