summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/template.source.sh79
1 files changed, 67 insertions, 12 deletions
diff --git a/lib/template.source.sh b/lib/template.source.sh
index 26d5acb..f2777e5 100644
--- a/lib/template.source.sh
+++ b/lib/template.source.sh
@@ -7,14 +7,14 @@ template::generate () {
continue
fi
num_tpl_files=$(( num_tpl_files + 1 ))
- template::_generate "$tpl_path" &
+ template::_generate_file "$tpl_path"
done < <(find "$CONTENT_BASE_DIR/gemtext" -type f -name \*.gmi.tpl)
wait
log INFO "Converted $num_tpl_files template files"
}
-template::_generate () {
+template::_generate_file () {
local -r tpl_path="$1"; shift
local -r tpl_dir="$(dirname "$tpl_path")"
local -r tpl="$(basename "$tpl_path")"
@@ -23,28 +23,83 @@ template::_generate () {
cd "$tpl_dir" || log PANIC "Unable to chdir to $tpl_dir"
log INFO "$tpl_path -> $dest"
+ template::_generate < "$tpl" > "$dest.tmp"
+ mv "$dest.tmp" "$dest"
+ cd -
+}
+
+template::_generate () {
+ local is_block=no
+ local block=''
+
while IFS='' read -r line; do
+ if [ "$is_block" = yes ]; then
+ if [ "$line" = '>>>' ]; then
+ template::_eval "$block"
+ is_block=no
+ else
+ block="$block
+$line"
+ fi
+ continue
+ fi
case "$line" in
'<< '*)
- template::_line "$line"
+ template::_eval "$line"
+ ;;
+ '<<<')
+ is_block=yes
;;
*)
echo "$line"
;;
esac
- done < "$tpl" > "$dest.tmp"
-
- mv "$dest.tmp" "$dest"
- cd -
+ done
}
-template::_line () {
+template::_eval () {
eval "${1/<< /}"
}
template::test () {
- assert::equals "$(template::_line '<< echo -n foo')" 'foo'
- assert::equals "$(template::_line '<< echo foo')" 'foo'
- assert::equals "$(template::_line '<< $DATE --date @0 +%Y%m%d')" '19700101'
- assert::equals "$(template::_line '<< echo "$AUTHOR"')" "$AUTHOR"
+ assert::equals "$(template::_eval '<< echo -n foo')" 'foo'
+ assert::equals "$(template::_eval '<< echo foo')" 'foo'
+ assert::equals "$(template::_eval '<< $DATE --date @0 +%Y%m%d')" '19700101'
+ assert::equals "$(template::_eval '<< echo "$AUTHOR"')" "$AUTHOR"
+
+ template::_eval '<< foo=bar'
+ assert::equals "$(template::_eval '<< echo $foo')" bar
+
+ local -r template1='# Hello Mister
+<<<
+ echo -n "Epoch 0 starts at: "
+ $DATE --date @0 +%Y%m%d
+ echo Just so that you know
+>>>'
+ local -r expect1='# Hello Mister
+Epoch 0 starts at: 19700101
+Just so that you know'
+ assert::equals "$(template::_generate <<< "$template1")" "$expect1"
+
+ local -r template2='<<<
+ for i in {1..10}; do
+ echo -n $i
+ done
+>>>'
+ assert::equals "$(template::_generate <<< "$template2")" 12345678910
+
+ local -r template3='<<<
+ foo=baz
+>>>
+<<<
+ echo $foo
+>>>'
+ assert::equals "$(template::_generate <<< "$template3")" baz
+
+ local -r template4='<<<
+>>>
+<<<
+>>>
+<< :'
+ assert::equals "$(template::_generate <<< "$template4")" ''
}