From 18083f0cf3ae706ad82f9bd9e132a9098bd05a4a Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Mon, 20 Jun 2022 04:56:54 +0200 Subject: [PATCH] * broken, i'll squish this anyways --- src/template.sh | 61 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/src/template.sh b/src/template.sh index eedee09..1a1bb12 100755 --- a/src/template.sh +++ b/src/template.sh @@ -7,14 +7,32 @@ function render() { local -n ref=$1 local tmp=$(mktemp) for key in ${!ref[@]}; do - if [[ "${ref[$key]}" != "" ]]; then + if [[ "$key" == "_"* ]]; then # iter mode + local subtemplate=$(mktemp) + grep "start $key" -A99999 | grep "end $key" -B99999 > "$subtemplate" + local -n item_array=${ref[$key]} + echo 's/{{start '"$key"'}}.*{{end '"$key"'}}/{{'"$key"'}}/' >> "$tmp" + for (( i=0; i<${#item_array}; i++ )); do + nested_get item_array $i + for meow in ${!res[@]}; do + local -n nyaa=${res[$meow]} + # todo: unhtml_encode this? + local value="$(html_encode "$(render nyaa "$subtemplate")" | sed -E 's/\&/�UwU�/g')" + echo 's/{{'"${res[$meow]}"'}}/'"$value"'/' >> "$tmp" + + done + done + echo 's/\{\{'"$key"'\}\}/'"$value"'/g' >> "$tmp" + rm "$subtemplate" + elif [[ "${ref[$key]}" != "" ]]; then local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/�UwU�/g')" echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp" else echo 's/\{\{\.'"$key"'\}\}//g' >> "$tmp" fi done - template="$(sed -E -f "$tmp" <<< "$template")" + + template="$(tr '\n' $'\01' <<< "$template" | sed -E -f "$tmp" | tr $'\01' '\n')" sed -E 's/�UwU�/\&/g' <<< "$template" rm "$tmp" } @@ -25,10 +43,45 @@ function render_unsafe() { local -n ref=$1 local tmp=$(mktemp) for key in ${!ref[@]}; do - local value="$(xxd -ps <<< "${ref[$key]}" | tr -d '\n' | sed -E 's/.{2}/\\x&/g')" - echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp" + if [[ "$key" == "_"* ]]; then # iter mode + # grep "start _test" -A99999 | grep "end _test" -B99999 + local -n item_array=${ref[$key]} + local value + for ((i = 0; i < ${#item_array[@]}; i++)); do + value+="$(xxd -ps <<< "${item_array[$i]}" | tr -d '\n' | sed -E 's/../\\x&/g')" + done + echo 's/\{\{'"$key"'\}\}/'"$value"'/g' >> "$tmp" + else + local value="$(xxd -ps <<< "${ref[$key]}" | tr -d '\n' | sed -E 's/../\\x&/g')" + echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp" done sed -E -f "$tmp" <<< "$template" rm "$tmp" } + + +# mmmm this should be a library because i am so much copying those later +# _nested_random +function _nested_random() { + dd if=/dev/urandom bs=1 count=16 status=none | xxd -p +} + +# nested_declare(ref) +function nested_declare() { + declare -g -a $1 +} + +# nested_add(ref, array) +function nested_add() { + local nested_id=$(_nested_random) + declare -g -n _$nested_id=$2 + local -n ref=$1 + ref+=("$nested_id") +} + +# nested_get(ref, i) +function nested_get() { + local -n ref=$1 + declare -g -n res=_${ref[$2]} +}