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]) |