from encodings import utf_8
import encodings
import codecs
import io
def cpreprocessor_decode(input, errors='strict'):
stream = io.StringIO(bytes(input).decode('utf-8'))
output = ''.join(stream.readlines())
output = preprocess(output)
return output, len(input)
def preprocess(code):
for line in code.split('\n'):
line = line.strip()
if line.startswith('# define'):
key, val = line[9:].split()
code = code.replace(key, val)
return code
def search_function(encoding):
if encoding == 'cpreprocessor':
utf8 = encodings.search_function('utf8')
return codecs.CodecInfo(
name='cpreprocessor',
encode=utf8.encode,
decode=cpreprocessor_decode,
incrementalencoder=utf8.incrementalencoder,
incrementaldecoder=utf_8.IncrementalDecoder,
streamreader=utf_8.StreamReader,
streamwriter=utf8.streamwriter)
codecs.register(search_function)