CARDS_YAML := $(wildcard cards/*.yaml) CARDS_XML := $(wildcard cards/*.xml) CARDS := $(CARDS_YAML) $(CARDS_XML) CARDS_DESTS_YAML := $(patsubst cards/%.yaml,cards/build/%.html,$(CARDS)) CARDS_DESTS_XML := $(patsubst cards/%.xml,cards/build/%.x.html,$(CARDS)) CARDS_DESTS := $(CARDS_DESTS_YAML) $(CARDS_DESTS_XML) .PHONY: style style: build/test_card.html build/test_card_rendered.html cards/build/all.html .PHONY: cards cards: $(CARDS_DESTS) cards/build/all.html .PHONY: style style: build/style.xsl .PHONY: dev dev: git ls-files | entr bash -c "make style" .PHONY: dev_cards dev_cards: git ls-files | entr bash -c "make cards" .PHONY: clean clean: rm -v build/* cards/build/* build/test_card.html: build/test_card.xml build/style.xsl xsltproc \ -o build/test_card.html \ build/style.xsl \ build/test_card.xml define PYTHON_MAKE_JINJA2_RENDERED_CARD from jinja2 import Environment, FileSystemLoader from markdown import markdown import yaml, sys, glob, traceback import xmltodict with open("build/style.css") as f: css_data = f.read() with open(sys.argv[2], "w") as f: e = Environment(trim_blocks=True, lstrip_blocks=True, loader=FileSystemLoader('')) f.write(e.get_template("templates/card_header.html.j2").render(is_local=True, css_data=css_data)) e.filters.update({ "is_number":lambda x: str(x).isnumeric(), "is_string":lambda x: isinstance(x, str), "markdown":markdown, "any":any, "all":all, "split":str.split, "startswith":str.startswith, "tail": lambda x: x[1:], "cull_whitespace":(lambda x: " ".join(x.split())) }) for n, filename in enumerate([sys.argv[1]] if sys.argv[1] != "ALL" else sorted(glob.glob("cards/*.yaml") + glob.glob("cards/*.xml"))): with open(filename) as f2: if filename.endswith("yaml"): yaml_data = yaml.load(f2.read()) xml_data = {} elif filename.endswith("xml"): xml = xmltodict.parse(f2.read()) xml_data = xml.get("ability_card", {}) yaml_data = yaml.load(xml_data.get("yaml_data", "")) try: data = e.get_template('style.html.j2').render(yaml=yaml_data, xml=xml_data) except Exception as ex: data = f"
{ex}
" traceback.print_exc() if sys.argv[1] == "ALL": f.write(f"\n\n
\n

{filename}

\n\n{data}\n
") else: f.write(f"\n
\n{data}\n
") endef export PYTHON_MAKE_JINJA2_RENDERED_CARD build/test_card_rendered.html: build/test_card.xml style.html.j2 build/style.css templates/card_header.html.j2 python3 -c "$$PYTHON_MAKE_JINJA2_RENDERED_CARD" "build/test_card.xml" "build/test_card_rendered.html" export PYTHON_MAKE_JINJA2_RENDERED_CARD cards/build/%.html: cards/%.yaml style.html.j2 build/style.css templates/card_header.html.j2 python3 -c "$$PYTHON_MAKE_JINJA2_RENDERED_CARD" $< $@ export PYTHON_MAKE_JINJA2_RENDERED_CARD cards/build/%.x.html: cards/%.xml style.html.j2 build/style.css templates/card_header.html.j2 python3 -c "$$PYTHON_MAKE_JINJA2_RENDERED_CARD" $< $@ export PYTHON_MAKE_JINJA2_RENDERED_CARD cards/build/all.html: $(CARDS) style.html.j2 build/style.css templates/card_header.html.j2 python3 -c "$$PYTHON_MAKE_JINJA2_RENDERED_CARD" ALL $@ define PYTHON_MAKE_CARD_XML from jinja2 import Environment, FileSystemLoader with open("test_card.yaml") as f: data = f.read() with open("test_card.xml") as f: xml_data = f.read() with open("build/test_card.xml", "w") as f: f.write(Environment( loader=FileSystemLoader('templates')) .get_template('card.xml.j2') .render(data=data, xml_data=xml_data)) endef export PYTHON_MAKE_CARD_XML build/test_card.xml: test_card.yaml test_card.xml templates/card.xml.j2 python3 -c "$$PYTHON_MAKE_CARD_XML" define PYTHON_MAKE_STYLE_XSL from jinja2 import Environment, FileSystemLoader with open("build/style.css") as f: css_data = f.read() with open("style.html.j2") as f: jinja_data = f.read() with open("style.js") as f: js_data = f.read() env = Environment( trim_blocks=True, lstrip_blocks=True, loader=FileSystemLoader('templates')) card_header = env.get_template('card_header.html.j2').render() with open("build/style.xsl", "w") as f: f.write( env.get_template('style.xsl.j2') .render( css_data=css_data, jinja_data=jinja_data, js_data=js_data, card_header=card_header)) endef export PYTHON_MAKE_STYLE_XSL build/style.xsl: build/style.css templates/style.xsl.j2 templates/card_header.html.j2 style.html.j2 style.js python3 -c "$$PYTHON_MAKE_STYLE_XSL" define PYTHON_MAKE_SASS import sass with open("style.scss") as f: with open("build/style.css", "w") as of: of.write(sass.compile(string=f.read(), output_style="expanded")) endef export PYTHON_MAKE_SASS build/style.css: style.scss python3 -c "$$PYTHON_MAKE_SASS"