# Rebuild the animated feature slideshow of the home page (docs/images/json-light.svg and json-dark.svg) when # slides.md, build.py or the fonts change. Needs uv (build.py declares its dependencies inline, PEP 723), curl, # unzip and shasum. Run it from docs/mkdocs/scripts/slideshow. # # make download missing fonts and build both SVGs # make fonts download only the fonts # make SECONDS=12 change the time per slide # make clean remove the generated SVGs # make distclean also remove the downloaded fonts SECONDS ?= 15 IMAGES := ../../docs/images LIGHT := $(IMAGES)/json-light.svg DARK := $(IMAGES)/json-dark.svg RUN := uv run --script build.py FONTS := fonts/Inter.ttf fonts/JetBrainsMono.ttf DEPS := build.py slides.md $(FONTS) # Pinned sources; the checksums make a changed upstream file fail instead of silently changing the output. # Inter: Google Fonts repository at a fixed commit (variable font with opsz and wght axes). INTER_URL := https://raw.githubusercontent.com/google/fonts/0b58fb370093f9a9f4ff785d94405710b79de67c/ofl/inter/Inter%5Bopsz%2Cwght%5D.ttf # JetBrains Mono: release 2.304 (the variable font in fonts/variable/ of the zip). JBM_URL := https://github.com/JetBrains/JetBrainsMono/releases/download/v2.304/JetBrainsMono-2.304.zip JBM_ZIP := fonts/JetBrainsMono-2.304.zip SHA256_Inter.ttf := 29160a80ff49ddcab2c97711247e08b1fab27a484a329ce8b813d820dc559031 SHA256_JetBrainsMono.ttf := 662a196d58f1183bf2d77428b6d5283fe3f45161ab021bea4036bc98e5cac016 SHA256_JetBrainsMono-2.304.zip := 6f6376c6ed2960ea8a963cd7387ec9d76e3f629125bc33d1fdcd7eb7012f7bbf # Check $@.tmp against its pinned checksum, then move it into place. define verify echo '$(SHA256_$(notdir $@)) $@.tmp' | shasum -a 256 -c --quiet - || { rm -f $@.tmp; exit 1; } mv $@.tmp $@ endef .PHONY: all fonts clean distclean .INTERMEDIATE: $(JBM_ZIP) all: $(LIGHT) $(DARK) fonts: $(FONTS) # fixed colours for the docs: an cannot see Material's theme toggle, so the home page includes both # and shows the one that matches $(LIGHT): $(DEPS) $(RUN) $@.tmp $(SECONDS) light mv $@.tmp $@ $(DARK): $(DEPS) $(RUN) $@.tmp $(SECONDS) dark mv $@.tmp $@ fonts/Inter.ttf: mkdir -p fonts curl -fsSL -m 300 -o $@.tmp '$(INTER_URL)' $(verify) $(JBM_ZIP): mkdir -p fonts curl -fsSL -m 300 -o $@.tmp '$(JBM_URL)' $(verify) fonts/JetBrainsMono.ttf: | $(JBM_ZIP) unzip -p $(JBM_ZIP) 'fonts/variable/JetBrainsMono[[]wght].ttf' > $@.tmp $(verify) clean: rm -f $(LIGHT) $(DARK) $(IMAGES)/*.svg.tmp distclean: clean rm -f $(FONTS) fonts/*.tmp $(JBM_ZIP)