cornquest/justfile

120 lines
2.6 KiB
Plaintext

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
# 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 and number of nodes
info:
echo "$(recinf -t game {{db}}) nodes" \
&& echo "$(recsel -t game -P text {{db}} | wc -w | awk '{ print $1}') words"
# rebulid graph on change
watch-graph:
ls {{db}} | entr -c just graph
# rebulid pdf on change
watch-pdf:
ls {{db}} | entr -c just pdf
# 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 0
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"
# make ms
_ms: _data
recsel -t game {{db}} \
| rec2csv \
| csvjson \
| jq '. | { data: . }' \
| mustache - templates/story.ms.template \
> tmp/story.ms
# make pdf
pdf: _ms
mustache tmp/data tmp/story.ms \
| groff -ms -Tps -dpaper=a5 -P-pa5 \
| ps2pdfwr - 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