#!/usr/bin/env python # # Copyright (C) 2007 Terry < snip, not in public ^_^ > # # This software is provided 'as-is', without any express or implied # warranty. In no event will the authors be held liable for any damages # arising from the use of this software. # # Permission is granted to anyone to use this software for any purpose, # including commercial applications, and to alter it and redistribute it # freely, subject to the following restrictions: # # 1. The origin of this software must not be misrepresented; you must not # claim that you wrote the original software. If you use this software # in a product, an acknowledgment in the product documentation would be # appreciated but is not required. # 2. Altered source versions must be plainly marked as such, and must not be # misrepresented as being the original software. # 3. This notice may not be removed or altered from any source distribution. # # < snip again > # ############################################################################# """ -- pdpp.py -- A simple Python-written Document Pre-Processor. Purpose: Allow a simple syntax for defining constants, macros, variables, and other associated items. And combine this with a simple style of text and formating instructions To create a easy way of generating an HTML document. """ import sys, os import re import optparse EXIT_SUCCESS = 0 EXIT_FAILURE = 1 class ConstantNotDefinedError(Exception): pass class PreProcessor: """Simple text preprocessor #define FOO bar -> causes PrePrcessor#defines[] to have a dictionary appended as { 'FOO' : bar }. The add_define() and get_define() methods insert a key,value and fetch a value by key. #macro .... """ defines = [] macros = [] def __init__(self): pass def add_define(self, const, value): "Register a constant as translating to value with the preprocessor" p = { "%s" % const : value } self.defines.append(p) def get_define(self, const): """Access a stored constant and return it's definition (value) ThrowsConstantNotDefinedError if constant is not defined""" for hash in self.defines: for key in hash: if key == "%s" % const: return hash[key] #raise ConstantNotDefinedError, "%s not defined!" % key def add_macro(self): pass def get_macro(self, macro): pass def parse(self, file): lines = file.readlines() for ln in lines: if re.match(r'^#.*', ln): cmd=ln.split(' ') if cmd[0].lower() == '#define': val=' '.join(cmd[2:]) self.add_define( cmd[1], val) return True def usage(): sys.stderr.write("write me") sys.exit(EXIT_FAILURE) def main(argv): try: fp = file('./test.txt') pp=PreProcessor() pp.parse(fp) print pp.defines,"\n\n\n" print pp.get_define('OS') print pp.get_define('VERSION') print pp.get_define('VIM') print pp.get_define('undefined') except IOError: usage() if __name__ == "__main__": main(sys.argv)