+data/xcolors/themes: data/xcolors
+data/xcolors: $(download)
+ $(call gitsave,https://github.com/tlatsas/xcolors)
+
+data/termcol-xcolor.inc.pl: tools/mktermcol-xcolor data/xcolors/themes
+ $(call cmdsave,$^/*)
+
+data/wordlist.version.txt: force
+ @[ -e $@ ] || date -Is >$@
+ @perl -ni -I. -MShiar_Sheet::DB -E 'say (Shiar_Sheet::DB->connect->select(word => "max(updated)", \["updated>?", $$_])->list or exit 1)' $@ || true
+
+data/wordlist.inc.pl: tools/mkwordlist data/wordlist.version.txt
+ $(call cmdsave,$<)
+data/wordlist.%.inc.pl: tools/mkwordlist data/wordlist.version.txt
+ $(call cmdsave,$< $*)
+data/word%.json: data/word%.inc.pl
+ $(call cmdsave,perl -MJSON=encode_json -E "print encode_json(do \$$ARGV[0])" ./$<)
+data/%.json: %.inc.pl
+ $(call cmdsave,perl -MJSON -E "print JSON->new->utf8->canonical->encode(do \$$ARGV[0])" ./$<)
+
+data/wordpairs.inc.pl: data/wordlist.version.txt
+ @perl -I. -MShiar_Sheet::DB -MData::Dump=pp -E 'say pp(Shiar_Sheet::DB->connect->select("word w JOIN word a ON w.id=a.ref" => "w.id, a.id", {"a.lang"=>undef})->map or exit 1)' >$@
+
+.SECONDARY: data/font/%.ttf