| import os, string | 
 |  | 
 | codecs = { | 
 |     'cn': ('gb2312', 'gbk', 'gb18030', 'hz'), | 
 |     'tw': ('big5', 'cp950'), | 
 |     'hk': ('big5hkscs',), | 
 |     'jp': ('cp932', 'shift_jis', 'euc_jp', 'euc_jisx0213', 'shift_jisx0213', | 
 |            'euc_jis_2004', 'shift_jis_2004'), | 
 |     'kr': ('cp949', 'euc_kr', 'johab'), | 
 |     'iso2022': ('iso2022_jp', 'iso2022_jp_1', 'iso2022_jp_2', | 
 |                 'iso2022_jp_2004', 'iso2022_jp_3', 'iso2022_jp_ext', | 
 |                 'iso2022_kr'), | 
 | } | 
 |  | 
 | TEMPLATE = string.Template("""\ | 
 | # | 
 | # $encoding.py: Python Unicode Codec for $ENCODING | 
 | # | 
 | # Written by Hye-Shik Chang <perky@FreeBSD.org> | 
 | # | 
 |  | 
 | import _codecs_$owner, codecs | 
 | import _multibytecodec as mbc | 
 |  | 
 | codec = _codecs_$owner.getcodec('$encoding') | 
 |  | 
 | class Codec(codecs.Codec): | 
 |     encode = codec.encode | 
 |     decode = codec.decode | 
 |  | 
 | class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, | 
 |                          codecs.IncrementalEncoder): | 
 |     codec = codec | 
 |  | 
 | class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, | 
 |                          codecs.IncrementalDecoder): | 
 |     codec = codec | 
 |  | 
 | class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): | 
 |     codec = codec | 
 |  | 
 | class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): | 
 |     codec = codec | 
 |  | 
 | def getregentry(): | 
 |     return codecs.CodecInfo( | 
 |         name='$encoding', | 
 |         encode=Codec().encode, | 
 |         decode=Codec().decode, | 
 |         incrementalencoder=IncrementalEncoder, | 
 |         incrementaldecoder=IncrementalDecoder, | 
 |         streamreader=StreamReader, | 
 |         streamwriter=StreamWriter, | 
 |     ) | 
 | """) | 
 |  | 
 | def gencodecs(prefix): | 
 |     for loc, encodings in codecs.iteritems(): | 
 |         for enc in encodings: | 
 |             code = TEMPLATE.substitute(ENCODING=enc.upper(), | 
 |                                        encoding=enc.lower(), | 
 |                                        owner=loc) | 
 |             codecpath = os.path.join(prefix, enc + '.py') | 
 |             open(codecpath, 'w').write(code) | 
 |  | 
 | if __name__ == '__main__': | 
 |     import sys | 
 |     gencodecs(sys.argv[1]) |