| 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.items(): |
| 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]) |