52 lines
1.7 KiB
Python
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)
|