landing-page/preproc/interp.awk

46 lines
997 B
Awk

function translate_var_refs(str, _out, _name) {
_out = ""
while (match(str, /%\[[a-zA-Z0-9_]+\]/)) {
_out = _out substr(str, 1, RSTART-1)
_name = substr(str, RSTART+2, RLENGTH-3)
_out = _out sprintf("${DATA_%s-%[%s]}", _name, _name)
str = substr(str, RSTART + RLENGTH)
}
_out = _out str
return _out
}
function escape_shell(str) {
gsub(/\\/, "\\\\", str)
gsub(/'/, "\\'", str)
gsub(/"/, "\\\"", str)
gsub(/\$/, "\\$", str)
return str
}
BEGIN {
begin=0
}
{
if (!begin) {
printf "export FILENAME='%s'\n", FILENAME
printf ". preproc/lib.sh\n"
begin=1
}
}
/^%~/ {
print substr($0, 3)
}
/^%[a-zA-Z0-9_]+:/ {
_split = index($0, ":")
_name = substr($0, 2, _split-2)
_value = substr($0, _split+1)
printf "export DATA_%s='%s'\n", _name, escape_shell(_value)
}
!/^%%|^%~|^%[a-zA-Z0-9_]+:/ {
printf "printf '%%s\\n' \"%s\"\n", translate_var_refs(escape_shell($0))
}