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