zenwalker
2/24/2017 - 9:19 PM

cpreprocessor.py

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)