def process_converter(filename, form_xml, debug, cl_path): if not filename: return None if form_xml: form = form_xml.xpath('/CALC/FORMSET/FORM/@val')[0].upper() preprocessed = preprocess_calc_file(filename, debug=debug, cl_path=cl_path) input_stream = InputStream(preprocessed) tree = antrl_parse(input_stream, debug) xml = tree2xml(tree) if debug: print "##### parse converter: %s #####" % filename pretty_print(xml) withforms = xml.xpath('//WithForms[ID[1][@val="%s"]]' % form) if not withforms: return withforms = withforms[0] fedform = withforms.xpath("ID[2]/@val")[0].upper() for each in withforms.xpath(".//Assign"): each.set('fed', '1') id = each.getchildren()[0] id.set('val', "%s.%s" % (form, id.get('val').upper())) for id in each.getchildren()[1].xpath('.//ID'): id.set('val', "%s.%s" % (fedform, id.get('val').upper())) id.set('fed','1') #Cleanup boolean\literal assigns for each in withforms.xpath(".//IfStruct/Assign[Boolean|Literal]"): each.getparent().remove(each) if debug: print "##### withforms #####" pretty_print(withforms) form_xml.append(withforms)
arg = parser.parse_args() debug = arg.debug with open(arg.pref_file) as settings_file: settings = json.load(settings_file) if arg.use_preparsed: root = etree.parse("output/preparsed.xml") else: with open(settings.get("preprocessed")) as f: preprocessed = f.read() input_stream = InputStream(preprocessed) tree = antrl_parse(input_stream, debug) root = tree2xml(tree, debug) for each in root.xpath('//CONCAT'): each.set('val', "__".join(each.xpath("ArgList/*[2]/@val"))) each.tag = 'String' each.remove(each.getchildren()[0]) with open('output/preparsed.xml', 'w') as f: f.write(etree.tostring(root, pretty_print = True)) if debug: print "##ParseTreeWalker##" pretty_print(root)