76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
|
|
import os
|
|
import re
|
|
|
|
def fix_svg_file(filepath):
|
|
with open(filepath, 'r', encoding='utf-8') as f:
|
|
content = f.read()
|
|
|
|
# Find style block
|
|
style_match = re.search(r'<style>(.*?)</style>', content, re.DOTALL)
|
|
if not style_match:
|
|
print(f"Skipping {os.path.basename(filepath)}: No style block found")
|
|
return False
|
|
|
|
style_content = style_match.group(1)
|
|
|
|
# Parse class -> fill mappings
|
|
# Matches .classname { fill: #color; }
|
|
# Also handles formatting variations
|
|
mappings = {}
|
|
|
|
# Regex for class definition: .name { ... }
|
|
# We look for fill: ... inside
|
|
class_pattern = re.compile(r'\.([\w-]+)\s*\{([^}]+)\}')
|
|
|
|
for match in class_pattern.finditer(style_content):
|
|
class_name = match.group(1)
|
|
body = match.group(2)
|
|
|
|
# Extract fill color
|
|
fill_match = re.search(r'fill:\s*(#[0-9a-fA-F]{3,6})', body)
|
|
if fill_match:
|
|
mappings[class_name] = fill_match.group(1)
|
|
|
|
if not mappings:
|
|
print(f"Skipping {os.path.basename(filepath)}: No fill mappings found in style")
|
|
return False
|
|
|
|
# Remove style block
|
|
new_content = re.sub(r'<style>.*?</style>', '', content, flags=re.DOTALL)
|
|
|
|
# Replace class="name" with fill="color"
|
|
# Note: We keep other attributes. If class is the only one, we replace it.
|
|
# If other attributes exist, we should append fill and remove class?
|
|
# Simplest approach: Replace `class="name"` with `fill="color"`
|
|
|
|
changed = False
|
|
for cls, color in mappings.items():
|
|
# Match class="name" or class='name'
|
|
# Be careful not to replace partial matches (e.g. class="name-suffix")
|
|
pattern = re.compile(r'class=["\']' + re.escape(cls) + r'["\']')
|
|
if pattern.search(new_content):
|
|
new_content = pattern.sub(f'fill="{color}"', new_content)
|
|
changed = True
|
|
|
|
if changed:
|
|
with open(filepath, 'w', encoding='utf-8') as f:
|
|
f.write(new_content)
|
|
print(f"Fixed {os.path.basename(filepath)}")
|
|
return True
|
|
else:
|
|
print(f"No class usages found for {os.path.basename(filepath)}")
|
|
return False
|
|
|
|
def main():
|
|
target_dir = '/Users/maidong/Desktop/zyc/qiyuan_gitea/rtc_prd/airhub_app/assets/www/icons'
|
|
count = 0
|
|
for filename in os.listdir(target_dir):
|
|
if filename.endswith('.svg'):
|
|
if fix_svg_file(os.path.join(target_dir, filename)):
|
|
count += 1
|
|
print(f"Total files fixed: {count}")
|
|
|
|
if __name__ == '__main__':
|
|
main()
|