mirror of
https://github.com/ethauvin/warp-themes.git
synced 2025-04-25 01:07:10 -07:00
185 lines
4.3 KiB
Python
185 lines
4.3 KiB
Python
import argparse
|
|
import os
|
|
from pathlib import Path
|
|
from typing import Any
|
|
from typing import Dict
|
|
from typing import List
|
|
from typing import Optional
|
|
|
|
import yaml
|
|
|
|
|
|
def get_all_input_files(input_dir: str) -> List[str]:
|
|
"""
|
|
|
|
Parameters
|
|
----------
|
|
input_dir :
|
|
|
|
Returns
|
|
-------
|
|
|
|
"""
|
|
filenames: Any = next(os.walk(input_dir), (None, None, []))[2]
|
|
return list(filter(lambda f: (f.endswith("yaml") or f.endswith("yml")), filenames))
|
|
|
|
|
|
def ensure_output_dir(output_dir: str) -> None:
|
|
"""
|
|
|
|
Parameters
|
|
----------
|
|
output_dir :
|
|
"""
|
|
if not os.path.exists(output_dir):
|
|
os.makedirs(output_dir)
|
|
|
|
|
|
def add_color_to_dict(
|
|
output: Dict[str, str],
|
|
obj: Dict[str, str],
|
|
key: str,
|
|
prefix: Optional[str] = None,
|
|
) -> None:
|
|
"""
|
|
|
|
Parameters
|
|
----------
|
|
output :
|
|
obj :
|
|
key :
|
|
prefix :
|
|
"""
|
|
if not prefix:
|
|
prefix = ""
|
|
output[f"{prefix}{key}"] = obj[key]
|
|
|
|
|
|
def get_color_dict(input_dir: str, file_name: str) -> Dict[str, str]:
|
|
"""
|
|
|
|
Parameters
|
|
----------
|
|
input_dir :
|
|
file_name :
|
|
|
|
Returns
|
|
-------
|
|
|
|
"""
|
|
file = open(os.path.join(input_dir, file_name), "r")
|
|
loaded_theme = yaml.safe_load(file)
|
|
output: Dict[str, str] = {}
|
|
add_color_to_dict(output, loaded_theme, "accent")
|
|
add_color_to_dict(output, loaded_theme, "foreground")
|
|
add_color_to_dict(output, loaded_theme, "background")
|
|
|
|
normal_colors = loaded_theme["terminal_colors"]["normal"]
|
|
for color in normal_colors.keys():
|
|
add_color_to_dict(output, normal_colors, color)
|
|
|
|
bright_colors = loaded_theme["terminal_colors"]["bright"]
|
|
for color in bright_colors.keys():
|
|
add_color_to_dict(output, bright_colors, color, "br")
|
|
|
|
return output
|
|
|
|
|
|
def file_name_to_display(file_name: str) -> str:
|
|
"""
|
|
|
|
Parameters
|
|
----------
|
|
file_name :
|
|
|
|
Returns
|
|
-------
|
|
|
|
"""
|
|
file_name = Path(file_name).with_suffix("").name
|
|
|
|
split = file_name.split("_")
|
|
output = []
|
|
for s in split:
|
|
output.append(s.capitalize())
|
|
return " ".join(output)
|
|
|
|
|
|
def gen_svg_for_theme(color_dict: Dict[str, str], svg_template: str) -> str:
|
|
"""
|
|
|
|
Parameters
|
|
----------
|
|
color_dict :
|
|
svg_template :
|
|
|
|
Returns
|
|
-------
|
|
|
|
"""
|
|
output = svg_template
|
|
|
|
for key, value in color_dict.items():
|
|
if isinstance(value, str):
|
|
output = output.replace(f"{{{key}}}", value)
|
|
return output
|
|
|
|
|
|
def main() -> None:
|
|
""" """
|
|
parser = argparse.ArgumentParser(
|
|
description="Generate README.md with embedded SVG previews."
|
|
)
|
|
parser.add_argument(
|
|
"input_dir",
|
|
type=str,
|
|
help="Directory from which to read in all Warp themes.",
|
|
)
|
|
parser.add_argument(
|
|
"--output_dir", type=str, help="Where to save README.md", default=""
|
|
)
|
|
parser.add_argument(
|
|
"--svg_path",
|
|
type=str,
|
|
help="Path to svg template file.",
|
|
default="scripts/preview.svg",
|
|
)
|
|
parser.add_argument(
|
|
"--intro_file",
|
|
type=str,
|
|
help="What should go on top of README.md.",
|
|
default="README-intro.md",
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
input_dir: str = args.input_dir
|
|
output_dir: str
|
|
if output_dir := args.output_dir:
|
|
ensure_output_dir(output_dir=output_dir)
|
|
else:
|
|
output_dir = input_dir
|
|
|
|
filenames = get_all_input_files(input_dir=input_dir)
|
|
markdown = ["|Theme name | Preview|", "| --- | --- |"]
|
|
svg = open(args.svg_path, "r").read()
|
|
svg_dir = os.path.join(output_dir, "previews")
|
|
os.makedirs(svg_dir, exist_ok=True)
|
|
|
|
for input_file in sorted(filenames):
|
|
print(f"Generating for {input_file}")
|
|
cell = f"|**[{file_name_to_display(input_file)}]({input_file})**:|"
|
|
color_dict = get_color_dict(output_dir, input_file)
|
|
theme_svg = gen_svg_for_theme(color_dict, svg)
|
|
theme_svg_path = os.path.join(svg_dir, f"{input_file}.svg")
|
|
with open(theme_svg_path, "w") as svg_out:
|
|
svg_out.write(theme_svg)
|
|
cell += f"<img src='previews/{input_file}.svg' width='300'>|"
|
|
markdown.append(cell)
|
|
|
|
output_str = "\n".join(markdown)
|
|
with open(os.path.join(output_dir, "README.md"), "w") as output:
|
|
output.write(output_str)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|