Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def __init__(self, filename, features, version):
self._font = font = ufoLib2.Font(validate=False)
self._version = version
parser = SFDParser(filename, font, ignore_uvs=False, ufo_anchors=False,
ufo_kerning=False, minimal=True)
parser.parse()
if features:
preprocessor = Preprocessor()
for d in ("italic", "sans", "display", "math"):
if d in filename.lower():
preprocessor.define(d.upper())
with open(features) as f:
preprocessor.parse(f)
feafile = StringIO()
preprocessor.write(feafile)
feafile.write(font.features.text)
font.features.text = feafile.getvalue()
def __init__(self,lexer=None):
super(Preprocessor, self).__init__()
if lexer is None:
lexer = lex.lex()
self.lexer = lexer
self.macros = { }
self.path = [] # list of -I formal search paths for includes
self.temp_path = [] # list of temporary search paths for includes
self.rewrite_paths = [(re.escape(os.path.abspath('') + os.sep) + '(.*)', '\\1')]
self.include_once = {}
self.include_depth = 0
self.include_times = [] # list of FileInclusionTime
self.return_code = 0
self.debugout = None
self.auto_pragma_once_enabled = True
self.line_directive = '#line'
self.compress = False
__all__ = []
class FileAction(argparse.Action):
def __init__(self, option_strings, dest, **kwargs):
super(FileAction, self).__init__(option_strings, dest, **kwargs)
def __call__(self, parser, namespace, values, option_string=None):
if getattr(namespace, self.dest)[0] == sys.stdin:
items = []
else:
items = copy.copy(getattr(namespace, self.dest))
items += [argparse.FileType('rt')(value) for value in values]
setattr(namespace, self.dest, items)
class CmdPreprocessor(Preprocessor):
def __init__(self, argv):
if len(argv) < 2:
argv = [argv[0], '--help']
argp = argparse.ArgumentParser(prog='pcpp',
description=
'''A pure universal Python C (pre-)preprocessor implementation very useful for
pre-preprocessing header only C++ libraries into single file includes and
other such build or packaging stage malarky.''',
epilog=
'''Note that so pcpp can stand in for other preprocessor tooling, it
ignores any arguments it does not understand.''')
argp.add_argument('inputs', metavar = 'input', default = [sys.stdin], nargs = '*', action = FileAction, help = 'Files to preprocess (use \'-\' for stdin)')
argp.add_argument('-o', dest = 'output', metavar = 'path', type = argparse.FileType('wt'), default=sys.stdout, nargs = '?', help = 'Output to a file instead of stdout')
argp.add_argument('-D', dest = 'defines', metavar = 'macro[=val]', nargs = 1, action = 'append', help = 'Predefine name as a macro [with value]')
argp.add_argument('-U', dest = 'undefines', metavar = 'macro', nargs = 1, action = 'append', help = 'Pre-undefine name as a macro')
argp.add_argument('-N', dest = 'nevers', metavar = 'macro', nargs = 1, action = 'append', help = 'Never define name as a macro, even if defined during the preprocessing.')
def run_c_preprocessor(header_contents):
"""
Run a C preprocessor on the given header file contents.
"""
from pcpp.preprocessor import Preprocessor
cpp = Preprocessor()
cpp.parse(header_contents)
output = StringIO.StringIO()
cpp.write(output)
return output.getvalue()