17db96d56Sopenharmony_ci#
27db96d56Sopenharmony_ci# genmap_korean.py: Korean Codecs Map Generator
37db96d56Sopenharmony_ci#
47db96d56Sopenharmony_ci# Original Author:  Hye-Shik Chang <perky@FreeBSD.org>
57db96d56Sopenharmony_ci# Modified Author:  Dong-hee Na <donghee.na92@gmail.com>
67db96d56Sopenharmony_ci#
77db96d56Sopenharmony_ciimport os
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_cifrom genmap_support import *
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ciKSX1001_C1 = (0x21, 0x7e)
137db96d56Sopenharmony_ciKSX1001_C2 = (0x21, 0x7e)
147db96d56Sopenharmony_ciUHCL1_C1 = (0x81, 0xa0)
157db96d56Sopenharmony_ciUHCL1_C2 = (0x41, 0xfe)
167db96d56Sopenharmony_ciUHCL2_C1 = (0xa1, 0xfe)
177db96d56Sopenharmony_ciUHCL2_C2 = (0x41, 0xa0)
187db96d56Sopenharmony_ciMAPPINGS_CP949 = 'http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT'
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_cidef main():
227db96d56Sopenharmony_ci    mapfile = open_mapping_file('python-mappings/CP949.TXT', MAPPINGS_CP949)
237db96d56Sopenharmony_ci    print("Loading Mapping File...")
247db96d56Sopenharmony_ci    decmap = loadmap(mapfile)
257db96d56Sopenharmony_ci    uhcdecmap, ksx1001decmap, cp949encmap = {}, {}, {}
267db96d56Sopenharmony_ci    for c1, c2map in decmap.items():
277db96d56Sopenharmony_ci        for c2, code in c2map.items():
287db96d56Sopenharmony_ci            if c1 >= 0xa1 and c2 >= 0xa1:
297db96d56Sopenharmony_ci                ksx1001decmap.setdefault(c1 & 0x7f, {})
307db96d56Sopenharmony_ci                ksx1001decmap[c1 & 0x7f][c2 & 0x7f] = c2map[c2]
317db96d56Sopenharmony_ci                cp949encmap.setdefault(code >> 8, {})
327db96d56Sopenharmony_ci                cp949encmap[code >> 8][code & 0xFF] = (c1 << 8 | c2) & 0x7f7f
337db96d56Sopenharmony_ci            else:
347db96d56Sopenharmony_ci                # uhc
357db96d56Sopenharmony_ci                uhcdecmap.setdefault(c1, {})
367db96d56Sopenharmony_ci                uhcdecmap[c1][c2] = c2map[c2]
377db96d56Sopenharmony_ci                cp949encmap.setdefault(code >> 8, {})  # MSB set
387db96d56Sopenharmony_ci                cp949encmap[code >> 8][code & 0xFF] = (c1 << 8 | c2)
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci    with open('mappings_kr.h', 'w') as fp:
417db96d56Sopenharmony_ci        print_autogen(fp, os.path.basename(__file__))
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci        print("Generating KS X 1001 decode map...")
447db96d56Sopenharmony_ci        writer = DecodeMapWriter(fp, "ksx1001", ksx1001decmap)
457db96d56Sopenharmony_ci        writer.update_decode_map(KSX1001_C1, KSX1001_C2)
467db96d56Sopenharmony_ci        writer.generate()
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci        print("Generating UHC decode map...")
497db96d56Sopenharmony_ci        writer = DecodeMapWriter(fp, "cp949ext", uhcdecmap)
507db96d56Sopenharmony_ci        writer.update_decode_map(UHCL1_C1, UHCL1_C2)
517db96d56Sopenharmony_ci        writer.update_decode_map(UHCL2_C1, UHCL2_C2)
527db96d56Sopenharmony_ci        writer.generate()
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci        print("Generating CP949 (includes KS X 1001) encode map...")
557db96d56Sopenharmony_ci        writer = EncodeMapWriter(fp, "cp949", cp949encmap)
567db96d56Sopenharmony_ci        writer.generate()
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci    print("Done!")
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ciif __name__ == '__main__':
627db96d56Sopenharmony_ci    main()
63