# Tamito KAJIYAMA <2 March 2002>
import codecs, japanese.c._japanese_codecs
class Codec(codecs.Codec):
encode = japanese.c._japanese_codecs.ms932_encode
decode = japanese.c._japanese_codecs.ms932_decode
class StreamWriter(Codec, codecs.StreamWriter):
pass
class StreamReader(Codec, codecs.StreamReader):
def __init__(self, stream, errors='strict'):
codecs.StreamReader.__init__(self, stream, errors)
self.data = ''
def _read(self, func, size):
if size == 0:
return u''
if size is None or size < 0:
data = self.data + func()
self.data = ''
else:
data = self.data + func(max(size, 2) - len(self.data))
size = len(data)
p = 0
while p < size:
if data[p] < "\x80" or data[p] >= "\xa1" and data[p] <= "\xdf":
p = p + 1
elif p + 2 <= size:
p = p + 2
else:
break
data, self.data = data[:p], data[p:]
return self.decode(data, self.errors)[0]
def read(self, size=-1):
return self._read(self.stream.read, size)
def readline(self, size=-1):
return self._read(self.stream.readline, size)
def readlines(self, size=-1):
data = self._read(self.stream.read, size)
buffer = []
end = 0
while 1:
pos = data.find(u'\n', end)
if pos < 0:
if end < len(data):
buffer.append(data[end:])
break
buffer.append(data[end:pos+1])
end = pos+1
return buffer
def reset(self):
self.data = ''
### encodings module API
def getregentry():
return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
syntax highlighted by Code2HTML, v. 0.9.1