From 4ce52292aa9750481006793a32797116ef113deb Mon Sep 17 00:00:00 2001 From: Dominique Liberda Date: Wed, 18 Jan 2023 05:08:45 +0100 Subject: [PATCH 1/2] + else statement in conditional templates --- src/template.sh | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/template.sh b/src/template.sh index f3c1863..75b081a 100755 --- a/src/template.sh +++ b/src/template.sh @@ -22,7 +22,6 @@ function render() { echo 's'$'\02''\{\{start '"$key"'\}\}.*\{\{end '"$key"'\}\}'$'\02''\{\{'"$key"'\}\}'$'\02'';' >> "$tmp" local -n asdf=${ref[$key]} - local j local value='' for j in ${!asdf[@]}; do @@ -32,7 +31,6 @@ function render() { rm "$subtemplate_tmp" done - echo 's'$'\02''\{\{'"$key"'\}\}'$'\02'''"$value"''$'\02'';' >> "$tmp" rm "$subtemplate" @@ -43,15 +41,15 @@ function render() { local _key="\\?${key/?/}" local subtemplate=$(mktemp) - echo 's'$'\02''\{\{start '"$_key"'\}\}(.*)\{\{end '"$_key"'\}\}'$'\02''\1'$'\02'';' >> "$subtemplate" + echo 's'$'\02''\{\{start '"$_key"'\}\}((.*)\{\{else '"$_key"'\}\}.*\{\{end '"$_key"'\}\}|(.*)\{\{end '"$_key"'\}\})'$'\02''\2'$'\02'';' >> "$subtemplate" cat <<< $(cat "$subtemplate" "$tmp") > "$tmp" # call that cat abuse elif [[ "${ref[$key]}" != "" ]]; then echo "VALUE: ${ref[$key]}" > /dev/stderr if [[ "$3" != true ]]; then - local value="$(echo "${ref[$key]}" | html_encode | sed -E 's/\&/�UwU�/g')" + local value="$(html_encode <<< "${ref[$key]}" | sed -E 's/\&/�UwU�/g')" else - local value="$(echo "${ref[$key]}" | sed -E 's/\\\\/�OwO�/g;s/\\//g;s/�OwO�/\\/g' | html_encode | sed -E 's/\&/�UwU�/g')" + local value="$(sed -E 's/\\\\/�OwO�/g;s/\\//g;s/�OwO�/\\/g' <<< "${ref[$key]}" | html_encode | sed -E 's/\&/�UwU�/g')" fi echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'''"$value"''$'\02''g;' >> "$tmp" else @@ -61,8 +59,8 @@ function render() { if [[ "$3" != true ]]; then # are we recursing? 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}_" + + echo 's/\{\{start \?([a-zA-Z0-9_-]*[^}])\}\}(.*\{\{else \?\1\}\}(.*)\{\{end \?\1\}\}|.*\{\{end \?\1\}\})/\3/g' >> "${tmp}_" template="$(tr '\n' $'\01' <<< "$template" | sed -E -f "${tmp}_" | tr $'\01' '\n')" sed -E 's/�UwU�/\&/g' <<< "$template" rm "$tmp" "${tmp}_" From 7f1838372a810251a7553bf90651c49e220def12 Mon Sep 17 00:00:00 2001 From: Dominique Liberda Date: Wed, 18 Jan 2023 06:24:10 +0100 Subject: [PATCH 2/2] * fix regression due to sed's imporper regexp handling --- src/template.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/template.sh b/src/template.sh index 75b081a..413c409 100755 --- a/src/template.sh +++ b/src/template.sh @@ -41,7 +41,7 @@ function render() { local _key="\\?${key/?/}" local subtemplate=$(mktemp) - echo 's'$'\02''\{\{start '"$_key"'\}\}((.*)\{\{else '"$_key"'\}\}.*\{\{end '"$_key"'\}\}|(.*)\{\{end '"$_key"'\}\})'$'\02''\2'$'\02'';' >> "$subtemplate" + echo 's'$'\02''\{\{start '"$_key"'\}\}((.*)\{\{else '"$_key"'\}\}.*\{\{end '"$_key"'\}\}|(.*)\{\{end '"$_key"'\}\})'$'\02''\2\3'$'\02'';' >> "$subtemplate" cat <<< $(cat "$subtemplate" "$tmp") > "$tmp" # call that cat abuse elif [[ "${ref[$key]}" != "" ]]; then