X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mDoc.git/blobdiff_plain/5ffb04ae1044c81f6982fa22e1bc1b05ffa5abce..5968bc04a73fc57ddea666df2fd30fd7228645cc:/python/mDoc/mdoc/worker.py?ds=sidebyside diff --git a/python/mDoc/mdoc/worker.py b/python/mDoc/mdoc/worker.py index 120bf5e..362dd50 100644 --- a/python/mDoc/mdoc/worker.py +++ b/python/mDoc/mdoc/worker.py @@ -19,7 +19,7 @@ def outlast(outfile, tpllayer, attrs, value): if tpllayer["value"]: print (file=outfile) ''' -def process_file_layer(source, outfile, globals, hierarc): +def process_file_layer(source, outfile, global_defs, hierarc, functions, target): (ctl,elem, value, attrs) = source.extractElement(XMLE.EC_BEG) @@ -28,8 +28,13 @@ def process_file_layer(source, outfile, globals, hierarc): nexthiera = {} if elem in hierarc: items = hierarc[elem] - elif elem in globals: - items = globals[elem] + elif elem in global_defs: + items = global_defs[elem] + elif elem == "verbatim" and attrs["target"] == target: + print (value, end="", file=outfile) + #elif elem == "exec": + # r = eval(functions[attrs["function"]]) + # print (r, end="", file=outfile) else: print ("Warning: No mapping for item:" +elem) if items: @@ -41,15 +46,41 @@ def process_file_layer(source, outfile, globals, hierarc): # proceed working for item in items: if not "position" in item["attrs"]: - nexthiera = item["items"] - if value: - print (value, end="", file=outfile) - process_file_layer(source, outfile, globals, nexthiera) + # determine line end + end = "\n" + if "end" in item["attrs"]: + end = item["attrs"]["end"] + # check "pre" + if "pre" in item["attrs"]: + text = item["attrs"]["pre"] + if text.startswith(r"\n"): + print (file=outfile) + text = text[2:] + print (text, end="", file=outfile) + if "exec" in item["attrs"]: + # call function + store_current_node = source.currentNode + l = {"out" : None, "source":source} + exec(functions[item["attrs"]["exec"]], globals(), l) + # proceed on previous position + source.currentNode = store_current_node + print (l["out"], file=outfile) + else: + # proceed working + nexthiera = item["items"] + if value: + print (value, end="", file=outfile) + process_file_layer(source, outfile, global_defs, nexthiera, functions, target) + # check "post" + if "post" in item["attrs"]: + print (item["attrs"]["post"], end="", file=outfile) + print (end=end, file=outfile) # search for "last" for item in items: if "position" in item["attrs"]: if item["attrs"]["position"] == "last": print (item["value"], end="", file=outfile) + (ctl,elem, value, attrs) = source.extractElement(ctl) def convert (file, format): @@ -60,7 +91,14 @@ def convert (file, format): # read whole template tple = XmlExtractor() tpl = tple.readFile("tpl/"+format+".tpl") - globals = tpl["mdoc"][0]["items"]["global"][0]["items"] + functions_in_file = tpl["mdoc"][0]["items"]["functions"][0]["items"]["function"] + # compile functions + functions = {} + for f in functions_in_file: + name = f["attrs"]["name"] + functions[name] = compile(f["value"], '', "exec") + + global_defs = tpl["mdoc"][0]["items"]["global"][0]["items"] hierarc = tpl["mdoc"][0]["items"]["hierarchical"][0]["items"] # open output file @@ -69,5 +107,5 @@ def convert (file, format): outfile = open(outname, "w") #print ("hallo", file=outfile) - process_file_layer(source, outfile, globals, hierarc) + process_file_layer(source, outfile, global_defs, hierarc, functions, format)