]> wagnertech.de Git - mDoc.git/blob - python/mDoc/mdoc/extractor.py
mdoku_0.2
[mDoc.git] / python / mDoc / mdoc / extractor.py
1 '''
2 Created on 26.03.2021
3
4 @author: antix19
5 '''
6 from mutil.XmlExtractor import XmlExtractor
7 from mutil import XmlExtractor as XMLE
8
9 def eval_class(classs, item):
10     item_hira = item.split(".")
11     ilen = len(item_hira) 
12     class_hira = classs.split(".")
13     if len(class_hira) < len(item_hira):
14         return False,ilen
15     for i in range(len(item_hira)):
16         if item_hira[i] != class_hira[i]:
17             return False,ilen
18     return True,ilen
19     
20 def eval_attribute(classs, attribute):
21     for item in attribute.split(":"):
22         ret,ilen = eval_class(classs, item)
23         if ret:
24             return True,ilen
25     return False,ilen
26
27 def is_for_print(classs, attrs):
28     include = False
29     exclude = False
30     ilen    = 0
31     elen    = 0
32     if "include" in attrs:
33         include,ilen = eval_attribute(classs, attrs["include"])
34     if "exclude" in attrs:
35         exclude,elen = eval_attribute(classs, attrs["exclude"])
36     if ilen > 0 and elen == 0:
37         return include
38     elif elen > 0 and ilen == 0:
39         return not exclude
40     elif ilen > 0 and elen > 0:
41         if ilen > elen:
42             if include:
43                 return True
44             else:
45                 return not exclude
46         elif elen > ilen:
47             if exclude:
48                 return False
49             else:
50                 return include
51     return True
52     
53     
54 def extract(file, classs, target):
55     source = XmlExtractor()
56     source.openInput(file)
57     
58     # open output file
59     out_file = open(target, "w")
60     
61     source.requireChild("document")
62     (ctl,elem, value, attrs) = source.extractElement(XMLE.EC_BEG)
63     while ctl != XMLE.EC_END:
64         if elem != "text":
65             raise EnvironmentError("<text> node expected")
66         if is_for_print(classs, attrs):
67             out_file.write(value+"\n")
68         (ctl,elem, value, attrs) = source.extractElement(ctl)
69     return 0
70
71