Compare commits

...

10 commits

Author SHA1 Message Date
Dominika Liberda
c4d1de8015 Merge branch 'better_templates' into 'master'
Better templates

See merge request laudom/http.sh!3
2022-06-28 07:25:36 +00:00
Dominika Liberda
1a7805fccb * satanize 2022-06-28 09:34:04 +02:00
Dominika Liberda
fcd102f113 * oops, fixes global replace 2022-06-25 12:02:45 +02:00
Dominika Liberda
e1f8ded023 why not, let's bump to 0.95 2022-06-25 11:35:03 +02:00
Dominika Liberda
f3ff522d82 * template replace now global except for foreach 2022-06-25 11:32:20 +02:00
Dominika Liberda
b7945227ea * fix ampersand expansion 2022-06-25 11:03:39 +02:00
Dominika Liberda
828bc8e426 * proper multiline 2022-06-25 09:23:16 +02:00
Dominika Liberda
a954f330ab + poor man's array copy 2022-06-25 09:00:25 +02:00
Dominika Liberda
c607722e2b * stuff working 2022-06-21 04:00:17 +02:00
Dominika Liberda
18083f0cf3 * broken, i'll squish this anyways 2022-06-20 04:56:54 +02:00
3 changed files with 82 additions and 11 deletions

View file

@ -21,9 +21,9 @@ cfg[ssl_cert]=''
cfg[ssl_key]=''
cfg[extension]='shs'
cfg[extra_headers]='server: HTTP.sh/0.94 (devel)'
cfg[extra_headers]='server: HTTP.sh/0.95 (devel)'
cfg[title]='HTTP.sh 0.94'
cfg[title]='HTTP.sh 0.95'
cfg[php_enabled]=false # enable PHP script evalutaion (requires PHP)
cfg[python_enabled]=false # enable Python script evalutaion (requires Python)

View file

@ -27,9 +27,9 @@ cfg[ssl_cert]=''
cfg[ssl_key]=''
cfg[extension]='shs'
cfg[extra_headers]='server: HTTP.sh/0.94 (devel)'
cfg[extra_headers]='server: HTTP.sh/0.95 (devel)'
cfg[title]='HTTP.sh 0.94'
cfg[title]='HTTP.sh 0.95'
cfg[php_enabled]=false # enable PHP script evalutaion (requires PHP)
cfg[python_enabled]=false # enable Python script evalutaion (requires Python)

View file

@ -3,18 +3,46 @@
# render(array, template_file)
function render() {
local template="$(cat "$2")"
local template="$(cat "$2" | tr -d $'\01'$'\02' | sed 's/\&/<2F>UwU<77>/g')"
local -n ref=$1
local tmp=$(mktemp)
for key in ${!ref[@]}; do
if [[ "${ref[$key]}" != "" ]]; then
if [[ "$key" == "_"* ]]; then # iter mode
local value=''
subtemplate=$(mktemp)
subtemplate_tmp=$(mktemp)
echo "$template" | sed 's/\&/<2F>UwU<77>/g' | grep "{{start $key}}" -A99999 | grep "{{end $key}}" -B99999 | tr -d $'\01'$'\02' | tr '\n' $'\01' > "$subtemplate"
echo 's'$'\02''\{\{start '"$key"'\}\}.*\{\{end '"$key"'\}\}'$'\02''\{\{'"$key"'\}\}'$'\02'';' >> "$tmp"
local -n asdf=${ref[$key]}
for j in ${!asdf[@]}; do
local -n fdsa=_${asdf[$j]}
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
echo 's'$'\02''\{\{start '"$key"'\}\}'$'\02'$'\02' >> "$subtemplate_tmp"
echo 's'$'\02''\{\{end '"$key"'\}\}'$'\02'$'\02' >> "$subtemplate_tmp"
value+="$(cat "$subtemplate" | tr '\n' $'\01' | sed -E -f "$subtemplate_tmp" | tr $'\01' '\n')"
rm "$subtemplate_tmp"
done
echo 's'$'\02''\{\{'"$key"'\}\}'$'\02'''"$value"''$'\02'';' >> "$tmp"
rm "$subtemplate"
elif [[ "${ref[$key]}" != "" ]]; then
local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/<2F>UwU<77>/g')"
echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp"
echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'''"$value"''$'\02''g;' >> "$tmp"
else
echo 's/\{\{\.'"$key"'\}\}//g' >> "$tmp"
echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'$'\02''g;' >> "$tmp"
fi
done
template="$(sed -E -f "$tmp" <<< "$template")"
cat "$tmp" | tr '\n' $'\01' | sed -E 's/'$'\02'';'$'\01''/'$'\02'';/g;s/'$'\02''g;'$'\01''/'$'\02''g;/g' > "${tmp}_"
template="$(tr '\n' $'\01' <<< "$template" | sed -E -f "${tmp}_" | tr $'\01' '\n')"
sed -E 's/<2F>UwU<77>/\&/g' <<< "$template"
rm "$tmp"
}
@ -25,10 +53,53 @@ 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"
fi
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 -n nested_ref=$2
declare -g -A _$nested_id
# poor man's array copy
for i in ${!nested_ref[@]}; do
declare -g -A _$nested_id[$i]="${nested_ref[$i]}"
done
local -n ref=$1
ref+=("$nested_id")
}
# nested_get(ref, i)
function nested_get() {
local -n ref=$1
declare -g -n res=_${ref[$2]}
}