#!/usr/bin/python # -*- coding: UTF-8 -*- import re def auto_parse_include(text, suffix, callback=None): # 遍历所有的 '@include' 标签 xml = suffix == ".xml" java = suffix == ".java" if xml: frgment_new_instance_matches = re.findall(r'', text) # print(f"发现include标签:{matches}") # 如果存在 '@include' 标签,取出标签中的 layout if frgment_new_instance_matches: for match in frgment_new_instance_matches: layout = re.search(r'layout=\"@layout/([^\"]+)\"', match).group(1) if layout and callback: callback(f"{layout}.xml") # print(f"解析到include标签:{layout}.xml") # 遍历所有的viewStub frgment_new_instance_matches = re.findall(r'', text) if frgment_new_instance_matches: for match in frgment_new_instance_matches: view_stub = re.search(r'layout=\"@layout/([^\"]+)\"', match).group(1) print(f"解析到ViewStub:{view_stub}") if view_stub and callback: callback(f"{view_stub}.xml") # 遍历所有的background drawable_background = re.findall(r'android:background=\"@drawable/([^\"]+)\"', text) if drawable_background: for match in drawable_background: print(f"解析到background:{match}") if match and callback: callback(f"{match}.xml") # 遍历所有的src drawable_src = re.findall(r'android:src=\"@drawable/([^\"]+)\"', text) if drawable_src: for match in drawable_src: print(f"解析到src:{match}") if match and callback: callback(f"{match}.xml") if java: # 遍历所有的 'R.layout.xxxxxxx' 代码 frgment_new_instance_matches = re.findall(r'R\.layout\.\w*\b', text) if frgment_new_instance_matches: for match in frgment_new_instance_matches: layout = re.search(r'R\.layout\.(\w*)\b', match).group(1) if layout and callback: callback(f"{layout}.xml") # 遍历所有的viewBinding # inflate 或者 bind匹配 bind_inflate_matches = re.findall(r'(\w+Binding)\.(?:bind|inflate)+', text) if bind_inflate_matches: for match in bind_inflate_matches: v1 = re.search(r'(\w+)Binding', match).group(1) print(f"解析到viewBinding:{v1} bind或者inflate") # 将v2的驼峰改为下划线命名,首字母小写 v1 = re.sub(r'(?', text) if generics_matches: for match in generics_matches: for v2 in match: if v2: print(f"解析到viewBinding:{v2} 泛型匹配") # 将v2的驼峰改为下划线命名,首字母小写 v2 = re.sub(r'(?