@@ -22,18 +22,53 @@ def read_mapper_xml_file(self, mapper_xml_file_path):
2222 self .id_2_element_map [child_id ] = child
2323
2424
25+ # @staticmethod
26+ # def _trim_prefix(s : str, prefixes : Set[str]):
27+ # l = [term.strip() for term in s.split()]
28+ # idx = 0
29+ # for term in l:
30+ # if term in prefixes:
31+ # idx += 1
32+ # continue
33+ # else:
34+ # break
35+ #
36+ # return " ".join(l[idx:])
37+
2538 @staticmethod
26- def _trim_prefix (s : str , prefixes : Set [str ]):
39+ def _trim_prefix (s : str , prefixes : Set [str ]):
40+ p = [term [0 ] for term in sorted ([(prefix , len (prefix )) for prefix in prefixes ], key = lambda x : x [1 ], reverse = True )]
2741 l = [term .strip () for term in s .split ()]
28- idx = 0
29- for term in l :
30- if term in prefixes :
31- idx += 1
32- continue
33- else :
42+ s = " " .join (l )
43+ while True :
44+ to_break = True
45+ for prefix in p :
46+ if s .startswith (prefix ):
47+ s = s [len (prefix ):].strip ()
48+ to_break = False
49+ break
50+ if to_break :
51+ break
52+
53+ return s .strip ()
54+
55+ @staticmethod
56+ def _trim_suffix (s : str , suffixes : Set [str ]):
57+ suffixes = [term [0 ] for term in
58+ sorted ([(suffix , len (suffix )) for suffix in suffixes ], key = lambda x : x [1 ], reverse = True )]
59+ l = [term .strip () for term in s .split ()]
60+ s = " " .join (l )
61+ while True :
62+ to_break = True
63+ for suffix in suffixes :
64+ if s .endswith (suffix ):
65+ s = s [:- 1 * len (suffix )].strip ()
66+ to_break = False
67+ break
68+ if to_break :
3469 break
3570
36- return " " . join ( l [ idx :] )
71+ return s . strip ( )
3772
3873 def parse_element (self , element : et .Element , param : dict ) -> str :
3974 # print ("++++>", element)
@@ -86,9 +121,23 @@ def parse_element(self, element : et.Element, param: dict) -> str:
86121 else :
87122 return "WHERE " + ' ' .join (l [idx :])
88123 elif element .tag == "trim" :
89- prefix = element .attrib ['prefix' ]
90- prefix_overrides_set = set ()
91- [prefix_overrides_set .add (term .strip ()) for term in element .attrib ['prefixOverrides' ].split ("|" )]
124+ prefix = ""
125+ if 'prefix' in element .attrib :
126+ prefix = element .attrib ['prefix' ]
127+
128+ suffix = ""
129+ if 'suffix' in element .attrib :
130+ suffix = element .attrib ['suffix' ]
131+
132+ if 'prefixOverrides' in element .attrib :
133+ prefix_overrides_set = set ([term .strip () for term in element .attrib ['prefixOverrides' ].split ("|" )])
134+ else :
135+ prefix_overrides_set = set ()
136+
137+ if 'suffixOverrides' in element .attrib :
138+ suffix_overrides_set = set ([term .strip () for term in element .attrib ['suffixOverrides' ].split ("|" )])
139+ else :
140+ suffix_overrides_set = set ()
92141
93142 ret = ""
94143 if element .text is not None :
@@ -97,8 +146,13 @@ def parse_element(self, element : et.Element, param: dict) -> str:
97146 ret += self .parse_element (child , param )
98147 ret += child .tail
99148
100- ret = MapperManager ._trim_prefix (ret , prefix_overrides_set )
101- return prefix + " " + ret
149+ if len (prefix_overrides_set ) > 0 :
150+ ret = MapperManager ._trim_prefix (ret , prefix_overrides_set )
151+
152+ if len (suffix_overrides_set ) > 0 :
153+ ret = MapperManager ._trim_suffix (ret , suffix_overrides_set )
154+
155+ return prefix + " " + ret + " " + suffix
102156
103157 elif element .tag == "set" :
104158 prefix_overrides_set = set ()
0 commit comments