1#!/usr/bin/python -B 2 3""" Usage: make-normalize-generateddata-input.py PATH_TO_MOZILLA_CENTRAL 4 5 This script generates test input data for String.prototype.normalize 6 from intl/icu/source/data/unidata/NormalizationTest.txt 7 to js/src/tests/non262/String/normalize-generateddata-input.js 8""" 9 10from __future__ import print_function 11import re 12import sys 13 14sep_pat = re.compile(" +") 15 16 17def to_code_list(codes): 18 return "[" + ", ".join("0x{0}".format(x) for x in re.split(sep_pat, codes)) + "]" 19 20 21def convert(dir): 22 ver_pat = re.compile("NormalizationTest-([0-9\.]+)\.txt") 23 part_pat = re.compile("^@(Part([0-9]+) .+)$") 24 test_pat = re.compile( 25 "^([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);$" 26 ) 27 ignore_pat = re.compile("^#|^$") 28 js_path = "js/src/tests/non262/String/normalize-generateddata-input.js" 29 txt_path = "intl/icu/source/data/unidata/NormalizationTest.txt" 30 31 part_opened = False 32 not_empty = False 33 with open("{dir}/{path}".format(dir=dir, path=txt_path), "r") as f: 34 with open("{dir}/{path}".format(dir=dir, path=js_path), "w") as outf: 35 for line in f: 36 m = test_pat.search(line) 37 if m: 38 if not_empty: 39 outf.write(",") 40 outf.write("\n") 41 pat = "{{ source: {source}, NFC: {NFC}, NFD: {NFD}, NFKC: {NFKC}, NFKD: {NFKD} }}" # NOQA: E501 42 outf.write( 43 pat.format( 44 source=to_code_list(m.group(1)), 45 NFC=to_code_list(m.group(2)), 46 NFD=to_code_list(m.group(3)), 47 NFKC=to_code_list(m.group(4)), 48 NFKD=to_code_list(m.group(5)), 49 ) 50 ) 51 not_empty = True 52 continue 53 m = part_pat.search(line) 54 if m: 55 desc = m.group(1) 56 part = m.group(2) 57 if part_opened: 58 outf.write("\n];\n") 59 outf.write("/* {desc} */\n".format(desc=desc)) 60 outf.write("var tests_part{part} = [".format(part=part)) 61 part_opened = True 62 not_empty = False 63 continue 64 m = ver_pat.search(line) 65 if m: 66 ver = m.group(1) 67 outf.write( 68 "/* created from NormalizationTest-{ver}.txt */\n".format( 69 ver=ver 70 ) 71 ) 72 continue 73 m = ignore_pat.search(line) 74 if m: 75 continue 76 print("Unknown line: {0}".format(line), file=sys.stderr) 77 if part_opened: 78 outf.write("\n];\n") 79 80 81if __name__ == "__main__": 82 if len(sys.argv) < 2: 83 print( 84 "Usage: make-normalize-generateddata-input.py PATH_TO_MOZILLA_CENTRAL", 85 file=sys.stderr, 86 ) 87 sys.exit(1) 88 convert(sys.argv[1]) 89