mirror of
https://github.com/idapython/src
synced 2026-06-08 14:47:00 +00:00
65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
|
|
import sys
|
|
import logging
|
|
import re
|
|
|
|
logging.basicConfig(stream=sys.stdout)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class CleanLoggerAdapter(logging.LoggerAdapter):
|
|
|
|
objaddr_re = re.compile(r"(<[a-zA-Z0-9\.\s_']* at )0x[0-9a-f]*(>)")
|
|
|
|
def process(self, msg, kwargs):
|
|
msg = re.sub(self.objaddr_re, r"\1(snipped)\2", msg)
|
|
return msg, kwargs
|
|
|
|
def getChild(self, suffix):
|
|
sub_logger = self.logger.getChild(suffix)
|
|
return CleanLoggerAdapter(sub_logger, self.extra)
|
|
|
|
logger = CleanLoggerAdapter(logger, {})
|
|
|
|
import importlib
|
|
import ast
|
|
|
|
import os
|
|
__dir__, _ = os.path.split(__file__)
|
|
import astor_0_8_1
|
|
|
|
def parse_options():
|
|
from argparse import ArgumentParser
|
|
p = ArgumentParser()
|
|
p.add_argument("-m", "--idapython-module-name", required=True)
|
|
p.add_argument("-i", "--input", required=True)
|
|
p.add_argument("-x", "--doxygen-xml", required=True)
|
|
p.add_argument("-c", "--cpp-wrapper", required=True)
|
|
p.add_argument("-r", "--pydoc-overrides", required=True)
|
|
p.add_argument("-o", "--output", required=True)
|
|
p.add_argument("-d", "--debug", default=False, action="store_true")
|
|
p.add_argument("-p", "--passes", required=True)
|
|
return p.parse_args()
|
|
|
|
opts = parse_options()
|
|
if opts.debug:
|
|
logger.setLevel(logging.DEBUG)
|
|
|
|
with open(opts.input) as fin:
|
|
tree = ast.parse(fin.read(), filename=opts.input)
|
|
|
|
import pypasses.doxy
|
|
setattr(opts, "dx_module", pypasses.doxy.parse(opts, logger))
|
|
|
|
|
|
for one_pass in opts.passes.split(","):
|
|
module_name = f"pypasses.{one_pass}"
|
|
module = importlib.import_module(module_name)
|
|
sub_logger = logger.getChild(module_name)
|
|
module.process(tree, opts, sub_logger)
|
|
tree = ast.fix_missing_locations(tree)
|
|
|
|
clob = astor_0_8_1.to_source(tree)
|
|
with open(opts.output, "wb") as fout:
|
|
fout.write(clob.encode("UTF-8"))
|
|
|