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 <[email protected]>
#

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