47 lines
997 B
Awk
47 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))
|
||
|
|
}
|