* new template functions
This commit is contained in:
parent
c4d1de8015
commit
0c32e2fe00
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# template.sh - basic templating engine
|
# template.sh - basic templating engine
|
||||||
|
|
||||||
|
# nightmare fuel
|
||||||
# render(array, template_file)
|
# render(array, template_file)
|
||||||
function render() {
|
function render() {
|
||||||
local template="$(cat "$2" | tr -d $'\01'$'\02' | sed 's/\&/<2F>UwU<77>/g')"
|
local template="$(cat "$2" | tr -d $'\01'$'\02' | sed 's/\&/<2F>UwU<77>/g')"
|
||||||
|
@ -16,12 +17,16 @@ function render() {
|
||||||
echo 's'$'\02''\{\{start '"$key"'\}\}.*\{\{end '"$key"'\}\}'$'\02''\{\{'"$key"'\}\}'$'\02'';' >> "$tmp"
|
echo 's'$'\02''\{\{start '"$key"'\}\}.*\{\{end '"$key"'\}\}'$'\02''\{\{'"$key"'\}\}'$'\02'';' >> "$tmp"
|
||||||
|
|
||||||
local -n asdf=${ref[$key]}
|
local -n asdf=${ref[$key]}
|
||||||
|
value=''
|
||||||
|
|
||||||
for j in ${!asdf[@]}; do
|
for j in ${!asdf[@]}; do
|
||||||
local -n fdsa=_${asdf[$j]}
|
local -n fdsa=_${asdf[$j]}
|
||||||
|
|
||||||
for i in ${!fdsa[@]}; do
|
# TODO: somewhere here, it should recurse. it does not.
|
||||||
echo 's'$'\02''\{\{.'"$i"'\}\}'$'\02'''"${fdsa[$i]}"''$'\02''g;' | tr '\n' $'\01' | sed -E 's/'$'\02'';'$'\01''/'$'\02'';/g;s/'$'\02''g;'$'\01''/'$'\02''g;/g' >> "$subtemplate_tmp"
|
# recursion is fun! let's do recursion!
|
||||||
|
|
||||||
|
for _i in ${!fdsa[@]}; do
|
||||||
|
echo 's'$'\02''\{\{\.'"$_i"'\}\}'$'\02'''"${fdsa[$_i]}"''$'\02''g;' | tr '\n' $'\01' | sed -E 's/'$'\02'';'$'\01''/'$'\02'';/g;s/'$'\02''g;'$'\01''/'$'\02''g;/g' >> "$subtemplate_tmp"
|
||||||
done
|
done
|
||||||
|
|
||||||
echo 's'$'\02''\{\{start '"$key"'\}\}'$'\02'$'\02' >> "$subtemplate_tmp"
|
echo 's'$'\02''\{\{start '"$key"'\}\}'$'\02'$'\02' >> "$subtemplate_tmp"
|
||||||
|
@ -33,6 +38,16 @@ function render() {
|
||||||
|
|
||||||
echo 's'$'\02''\{\{'"$key"'\}\}'$'\02'''"$value"''$'\02'';' >> "$tmp"
|
echo 's'$'\02''\{\{'"$key"'\}\}'$'\02'''"$value"''$'\02'';' >> "$tmp"
|
||||||
rm "$subtemplate"
|
rm "$subtemplate"
|
||||||
|
elif [[ "$key" == "@"* && "${ref[$key]}" != '' ]]; then
|
||||||
|
local value="$(sed -E 's/\&/<2F>UwU<77>/g' <<< "${ref[$key]}")"
|
||||||
|
echo 's'$'\02''\{\{\'"$key"'\}\}'$'\02'''"$value"''$'\02''g;' >> "$tmp"
|
||||||
|
elif [[ "$key" == '?'* ]]; then
|
||||||
|
_key="\\?${key/?/}"
|
||||||
|
|
||||||
|
subtemplate=$(mktemp)
|
||||||
|
echo 's'$'\02''\{\{start '"$_key"'\}\}(.*)\{\{end '"$_key"'\}\}'$'\02''\{\{(\1)\}\}'$'\02'';' >> "$subtemplate"
|
||||||
|
cat <<< $(cat "$subtemplate" "$tmp") > "$tmp" # call that cat abuse
|
||||||
|
|
||||||
elif [[ "${ref[$key]}" != "" ]]; then
|
elif [[ "${ref[$key]}" != "" ]]; then
|
||||||
local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/<2F>UwU<77>/g')"
|
local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/<2F>UwU<77>/g')"
|
||||||
echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'''"$value"''$'\02''g;' >> "$tmp"
|
echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'''"$value"''$'\02''g;' >> "$tmp"
|
||||||
|
@ -42,6 +57,8 @@ function render() {
|
||||||
done
|
done
|
||||||
|
|
||||||
cat "$tmp" | tr '\n' $'\01' | sed -E 's/'$'\02'';'$'\01''/'$'\02'';/g;s/'$'\02''g;'$'\01''/'$'\02''g;/g' > "${tmp}_"
|
cat "$tmp" | tr '\n' $'\01' | sed -E 's/'$'\02'';'$'\01''/'$'\02'';/g;s/'$'\02''g;'$'\01''/'$'\02''g;/g' > "${tmp}_"
|
||||||
|
|
||||||
|
echo 's/\{\{start \?([a-zA-Z0-9_-]*[^}])\}\}.*\{\{end \?(\1)\}\}//g' >> "${tmp}_"
|
||||||
template="$(tr '\n' $'\01' <<< "$template" | sed -E -f "${tmp}_" | tr $'\01' '\n')"
|
template="$(tr '\n' $'\01' <<< "$template" | sed -E -f "${tmp}_" | tr $'\01' '\n')"
|
||||||
sed -E 's/<2F>UwU<77>/\&/g' <<< "$template"
|
sed -E 's/<2F>UwU<77>/\&/g' <<< "$template"
|
||||||
rm "$tmp"
|
rm "$tmp"
|
||||||
|
@ -57,12 +74,12 @@ function render_unsafe() {
|
||||||
# grep "start _test" -A99999 | grep "end _test" -B99999
|
# grep "start _test" -A99999 | grep "end _test" -B99999
|
||||||
local -n item_array=${ref[$key]}
|
local -n item_array=${ref[$key]}
|
||||||
local value
|
local value
|
||||||
for ((i = 0; i < ${#item_array[@]}; i++)); do
|
for ((_i = 0; _i < ${#item_array[@]}; _i++)); do
|
||||||
value+="$(xxd -ps <<< "${item_array[$i]}" | tr -d '\n' | sed -E 's/../\\x&/g')"
|
value+="$(xxd -p <<< "${item_array[$_i]}" | tr -d '\n' | sed -E 's/../\\x&/g')"
|
||||||
done
|
done
|
||||||
echo 's/\{\{'"$key"'\}\}/'"$value"'/g' >> "$tmp"
|
echo 's/\{\{'"$key"'\}\}/'"$value"'/g' >> "$tmp"
|
||||||
else
|
else
|
||||||
local value="$(xxd -ps <<< "${ref[$key]}" | tr -d '\n' | sed -E 's/../\\x&/g')"
|
local value="$(xxd -p <<< "${ref[$key]}" | tr -d '\n' | sed -E 's/../\\x&/g')"
|
||||||
echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp"
|
echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -90,8 +107,8 @@ function nested_add() {
|
||||||
declare -g -A _$nested_id
|
declare -g -A _$nested_id
|
||||||
|
|
||||||
# poor man's array copy
|
# poor man's array copy
|
||||||
for i in ${!nested_ref[@]}; do
|
for k in ${!nested_ref[@]}; do
|
||||||
declare -g -A _$nested_id[$i]="${nested_ref[$i]}"
|
declare -g -A _$nested_id[$k]="${nested_ref[$k]}"
|
||||||
done
|
done
|
||||||
|
|
||||||
local -n ref=$1
|
local -n ref=$1
|
||||||
|
|
Loading…
Reference in a new issue