#!/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'(?