c-preprocessor

python library for metaprogramming like it's the 1970s
Log | Files | Refs | README

__init__.py (1469B)


      1 import codecs
      2 import encodings
      3 from encodings import utf_8
      4 import io
      5 import tokenize
      6 from . import process
      7 
      8 def encode(input_string):
      9     print(encoded_bytes)
     10     out = (input_string+"a").encode()
     11     return (out, len(out))
     12     # Encoding logic ...
     13 
     14 def decode(encoded_bytes):
     15     # out = encoded_bytes.decode()+"a"
     16     out = "print('hi')"
     17     return (out, len(out))
     18     # Decoding logic ...
     19 
     20 class IncrementalDecoder(utf_8.IncrementalDecoder):
     21     def decode(self, inp, final=False):
     22         self.buffer += inp
     23         if final:
     24             buff = self.buffer
     25             self.buffer = b""
     26             return super(IncrementalDecoder, self,).decode(
     27                 preprocess(buff).encode(), final=True
     28             )
     29         else:
     30             return ""
     31 
     32 class StreamReader(utf_8.StreamReader):
     33     def __init__(self, *args, **kwargs):
     34         codecs.StreamReader.__init__(self, *args, **kwargs)
     35         self.stream = io.StringIO("print('stream_reader')")
     36         
     37 def custom_search_function(encoding_name):
     38     # print(encoding_name)
     39     if encoding_name != "c_preprocessor": return None
     40     utf8=encodings.search_function('utf8')
     41     return codecs.CodecInfo(
     42         name='c_preprocessor',
     43         encode = encode,
     44         decode = decode,
     45         incrementalencoder=utf8.incrementalencoder,
     46         incrementaldecoder=IncrementalDecoder,
     47         streamreader=utf8.streamreader,
     48         streamwriter=utf8.streamwriter
     49     )
     50 
     51 codecs.register(custom_search_function)
     52