Files
MyFastHtml/src/myfasthtml/icons/update_icons.py

52 lines
1.7 KiB
Python

import os
root_folder = "/home/kodjo/Dev/MyDocManager/src/frontend/node_modules/@sicons"
import re
def pascal_to_snake(name: str) -> str:
"""Convert a PascalCase or CamelCase string to snake_case."""
# Insert underscore before capital letters (except the first one)
s1 = re.sub(r'(.)([A-Z][a-z]+)', r'\1_\2', name)
# Handle consecutive capital letters (like 'HTTPServer' -> 'http_server')
s2 = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', s1)
return s2.lower()
def create_icons(file, icon_folder):
for filename in os.listdir(f"{root_folder}/{icon_folder}"):
print("#", end='')
if not filename.endswith(".svg"):
continue
with open(f"{root_folder}/{icon_folder}/{filename}", "r") as f_read:
svg_content = f_read.read().strip()
icon_name = "icon_" + pascal_to_snake(filename.split('.')[0])
file.write(f"{icon_name} = NotStr('''{svg_content}''')\n")
print("")
if __name__ == "__main__":
for folder in ["antd", "material", "carbon", "fa", "fluent", "ionicons4", "ionicons5", "tabler"]:
# for folder in ["antd"]:
print(f"Processing icons for {folder}")
with open(f"{folder}.py", "w") as f_write:
# Add README.md content to the top of the file
if os.path.exists(f"{root_folder}/{folder}/README.md"):
with open(f"{root_folder}/{folder}/README.md", "r") as f_readme:
for line in f_readme:
if line.startswith("#"):
f_write.write(line)
else:
f_write.write(f"# {line}")
f_write.write("\n\n")
# Add imports
f_write.write("from fastcore.basics import NotStr\n\n")
# Add icons
create_icons(f_write, folder)