db := 'db/game.rec' # show all commands default: just --list --unsorted # super plain boring output _map: recsel -t game {{db}} | recfmt '"{{{{name}}": "{{{{id}}", ' # build dot file # TODO: change id to name? or id /and/ name? # TODO: how do you document a wicked sed script? _dot: #!/usr/bin/env zsh echo "digraph {" > tmp/dot recsel -t game {{db}} \ | recfmt '{{{{id}} -> {{{{text}}|' \ | sed -e 's/|/\n\n/g' \ | sed -e '/./{H;$!d;}' -e 'x; s/\n//g; G;' \ | sed -e 's/}}[^{]*{{{{/}} {{{{/g' -e 's/> [^{]* {{{{/> {{{{/' \ | sed -e 's/}}[^{]*/}} /' \ | sed -e '/{{{{/!d' -e 's/\.$//' \ | sed -e 's/> \(.*\)$/> { \1 };/' \ >> tmp/dot echo "}" >> tmp/dot # an alternative syntax to dot that allows for unicode graphs _grapheasy: #!/usr/bin/env zsh recsel -t game {{db}} \ | recfmt '{{{{id}} -> {{{{text}}|' \ | sed -e 's/|/\n\n/g' \ | sed -e '/./{H;$!d;}' -e 'x; s/\n//g; G;' \ | sed -e 's/}}[^{]*{{{{/}} {{{{/g' -e 's/> [^{]* {{{{/> {{{{/' \ | sed -e 's/}}[^{]*/}} /' \ | sed -e '/{{{{/!d' -e 's/\.$//' \ | sed -e 's/> \(.*\)$/> { \1 };/' \ | sed -e 's/^\([0-9]*\) -> {/[ \1 ] -->/' \ | sed 's/};$//' \ | sed 's/}} {{{{/>> ], [ <> ]/' \ | sed 's/<>/}}/g' \ > tmp/grapheasy mustache tmp/data tmp/grapheasy \ | gsed '1 i graph { flow: south; }' \ | graph-easy --as=boxart \ | less # build a graph of all the nodes graph: _data _dot mustache tmp/data tmp/dot | dot -Tpng > out/graph.png # build data object _data: echo "{" $(just _map) "}" \ | sed -e 's/, }/ }/' \ > tmp/data # plain output build: _data mustache tmp/data {{db}} \ | recfmt '{{{{id}}: {{{{text}}|' \ | sed -e 's/|/\n\n/g' \ # read the story browse: just build | fmt | less # remove generated files clean: rm -f tmp/* out/* # word count words: recsel -t game -P text {{db}} | wc -w # rebulid graph on change watch: ls {{db}} | entr -c just graph # shuffle ids _shuffle: recsel -t game -P id db/game.rec \ | sed '/^$/d' \ | shuf --random-source=/dev/urandom \ | gsed -e '/^0$/d' -e '1 i 0' # story in random order, starting with 1 randomize: for n in $(just _shuffle); do recsel -t game -e "id='$n'" db/game.rec; echo; done # renumber the randomized list renumber: #!/usr/bin/env zsh tmpfile=$(mktemp) echo "$tmpfile" #cp {{db}} {{db}}.bak just randomize > "$tmpfile" j=$(recinf -t game "$tmpfile") recdel -t game -n 0-$((j - 1)) {{db}} for i in {0..$((j - 1))} do name=$(recsel -n "$i" -P name "$tmpfile") text=$(recsel -n "$i" -P text "$tmpfile") echo "$i $name $text" recins -t game -f name -v "$name" -f text -v "$text" {{db}} done rm "$tmpfile" # get json json: recsel -t game {{db}} \ | rec2csv \ | csvjson \ | jq '. | { data: . }' # make ms _ms: _data just json \ | mustache - templates/story.ms.template \ > tmp/story.ms # make pdf pdf: _ms mustache tmp/data tmp/story.ms \ | groff -ms -Tpdf \ > out/story.pdf # make ascii doc ascii: _ms mustache tmp/data tmp/story.ms \ | groff -ms -Tascii \ | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" \ > out/story.txt # generate tags tags: ctags --options=./lib/game.ctags db/game.rec