17db96d56Sopenharmony_ciimport os, string
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_cicodecs = {
47db96d56Sopenharmony_ci    'cn': ('gb2312', 'gbk', 'gb18030', 'hz'),
57db96d56Sopenharmony_ci    'tw': ('big5', 'cp950'),
67db96d56Sopenharmony_ci    'hk': ('big5hkscs',),
77db96d56Sopenharmony_ci    'jp': ('cp932', 'shift_jis', 'euc_jp', 'euc_jisx0213', 'shift_jisx0213',
87db96d56Sopenharmony_ci           'euc_jis_2004', 'shift_jis_2004'),
97db96d56Sopenharmony_ci    'kr': ('cp949', 'euc_kr', 'johab'),
107db96d56Sopenharmony_ci    'iso2022': ('iso2022_jp', 'iso2022_jp_1', 'iso2022_jp_2',
117db96d56Sopenharmony_ci                'iso2022_jp_2004', 'iso2022_jp_3', 'iso2022_jp_ext',
127db96d56Sopenharmony_ci                'iso2022_kr'),
137db96d56Sopenharmony_ci}
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ciTEMPLATE = string.Template("""\
167db96d56Sopenharmony_ci#
177db96d56Sopenharmony_ci# $encoding.py: Python Unicode Codec for $ENCODING
187db96d56Sopenharmony_ci#
197db96d56Sopenharmony_ci# Written by Hye-Shik Chang <perky@FreeBSD.org>
207db96d56Sopenharmony_ci#
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ciimport _codecs_$owner, codecs
237db96d56Sopenharmony_ciimport _multibytecodec as mbc
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_cicodec = _codecs_$owner.getcodec('$encoding')
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ciclass Codec(codecs.Codec):
287db96d56Sopenharmony_ci    encode = codec.encode
297db96d56Sopenharmony_ci    decode = codec.decode
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ciclass IncrementalEncoder(mbc.MultibyteIncrementalEncoder,
327db96d56Sopenharmony_ci                         codecs.IncrementalEncoder):
337db96d56Sopenharmony_ci    codec = codec
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ciclass IncrementalDecoder(mbc.MultibyteIncrementalDecoder,
367db96d56Sopenharmony_ci                         codecs.IncrementalDecoder):
377db96d56Sopenharmony_ci    codec = codec
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ciclass StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader):
407db96d56Sopenharmony_ci    codec = codec
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ciclass StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter):
437db96d56Sopenharmony_ci    codec = codec
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_cidef getregentry():
467db96d56Sopenharmony_ci    return codecs.CodecInfo(
477db96d56Sopenharmony_ci        name='$encoding',
487db96d56Sopenharmony_ci        encode=Codec().encode,
497db96d56Sopenharmony_ci        decode=Codec().decode,
507db96d56Sopenharmony_ci        incrementalencoder=IncrementalEncoder,
517db96d56Sopenharmony_ci        incrementaldecoder=IncrementalDecoder,
527db96d56Sopenharmony_ci        streamreader=StreamReader,
537db96d56Sopenharmony_ci        streamwriter=StreamWriter,
547db96d56Sopenharmony_ci    )
557db96d56Sopenharmony_ci""")
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_cidef gencodecs(prefix):
587db96d56Sopenharmony_ci    for loc, encodings in codecs.items():
597db96d56Sopenharmony_ci        for enc in encodings:
607db96d56Sopenharmony_ci            code = TEMPLATE.substitute(ENCODING=enc.upper(),
617db96d56Sopenharmony_ci                                       encoding=enc.lower(),
627db96d56Sopenharmony_ci                                       owner=loc)
637db96d56Sopenharmony_ci            codecpath = os.path.join(prefix, enc + '.py')
647db96d56Sopenharmony_ci            with open(codecpath, 'w') as f:
657db96d56Sopenharmony_ci                f.write(code)
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ciif __name__ == '__main__':
687db96d56Sopenharmony_ci    import sys
697db96d56Sopenharmony_ci    gencodecs(sys.argv[1])
70