]> wagnertech.de Git - mDoc.git/blobdiff - python/mDoc/mdoc/worker.py
pydev-ts
[mDoc.git] / python / mDoc / mdoc / worker.py
index 120bf5e82547173431db54e88af2eea19168755b..362dd503aa1cd4aa26ff3a3c80efdafa3fb61575 100644 (file)
@@ -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"], '<string>', "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)