blob: 47627c5728b07f33e8b2b8cd4b78ccaa0f2e6043 [file] [log] [blame]
Hye-Shik Change2ac4ab2006-03-26 02:34:59 +00001import os, string
2
3codecs = {
4 'cn': ('gb2312', 'gbk', 'gb18030', 'hz'),
5 'tw': ('big5', 'cp950'),
6 'hk': ('big5hkscs',),
7 'jp': ('cp932', 'shift_jis', 'euc_jp', 'euc_jisx0213', 'shift_jisx0213',
8 'euc_jis_2004', 'shift_jis_2004'),
9 'kr': ('cp949', 'euc_kr', 'johab'),
10 'iso2022': ('iso2022_jp', 'iso2022_jp_1', 'iso2022_jp_2',
11 'iso2022_jp_2004', 'iso2022_jp_3', 'iso2022_jp_ext',
12 'iso2022_kr'),
13}
14
15TEMPLATE = string.Template("""\
16#
17# $encoding.py: Python Unicode Codec for $ENCODING
18#
19# Written by Hye-Shik Chang <perky@FreeBSD.org>
20#
21
22import _codecs_$owner, codecs
23import _multibytecodec as mbc
24
25codec = _codecs_$owner.getcodec('$encoding')
26
27class Codec(codecs.Codec):
28 encode = codec.encode
29 decode = codec.decode
30
31class IncrementalEncoder(mbc.MultibyteIncrementalEncoder,
32 codecs.IncrementalEncoder):
33 codec = codec
34class IncrementalDecoder(mbc.MultibyteIncrementalDecoder,
35 codecs.IncrementalDecoder):
36 codec = codec
37class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader):
38 codec = codec
39class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter):
40 codec = codec
41
42def getregentry():
43 return codecs.CodecInfo(
44 name='$encoding',
45 encode=Codec().encode,
46 decode=Codec().decode,
47 incrementalencoder=IncrementalEncoder,
48 incrementaldecoder=IncrementalDecoder,
49 streamreader=StreamReader,
50 streamwriter=StreamWriter,
51 )
52""")
53
54def gencodecs(prefix):
55 for loc, encodings in codecs.iteritems():
56 for enc in encodings:
57 code = TEMPLATE.substitute(ENCODING=enc.upper(),
58 encoding=enc.lower(),
59 owner=loc)
60 codecpath = os.path.join(prefix, enc + '.py')
61 open(codecpath, 'w').write(code)
62
63if __name__ == '__main__':
64 import sys
65 gencodecs(sys.argv[1])