#!/usr/bin/awk -ffunction pr(str) { if(lastc !~ "[{(]") gsub(/'/, "''", str) printf "%s", str}function trans(c) { printf "%s", end lastc = c end = "\n" if(c == "%") end = "" else if(c == "(") printf "echo -n " else if(c ~ "[})]") { end = "'\n" printf "echo -n '" }} BEGIN { lastc = "{" trans("}")}END { print end} /^%/ && $0 !~ /^%[{()}%]/ && lastc !~ /[({]/ { trans("%") print substr($0, 2) next}{ if(lastc == "%") trans("}") n = split($0, a, "%") pr(a[1]) for(i=2; i<=n; i++) { c = substr(a[i], 1, 1) rest = substr(a[i], 2) if((lastc !~ "[({]" && c ~ "[({]") || (lastc == "{" && c == "}") || (lastc == "(" && c == ")")) trans(c) else if(c == "%") pr("%") else pr("%" c) pr(rest) } pr("\n")}
#!/usr/bin/awk -f
function pr(str) {
if(lastc !~ "[{(]")
gsub(/'/, "''", str)
printf "%s", str
}
function trans(c) {
printf "%s", end
lastc = c
end = "\n"
if(c == "%")
end = ""
else if(c == "(")
printf "echo -n "
else if(c ~ "[})]") {
end = "'\n"
printf "echo -n '"
}
}
BEGIN {
lastc = "{"
trans("}")
}
END {
print end
}
/^%/ && $0 !~ /^%[{()}%]/ && lastc !~ /[({]/ {
trans("%")
print substr($0, 2)
next
}
{
if(lastc == "%")
trans("}")
n = split($0, a, "%")
pr(a[1])
for(i=2; i<=n; i++) {
c = substr(a[i], 1, 1)
rest = substr(a[i], 2)
if((lastc !~ "[({]" && c ~ "[({]") ||
(lastc == "{" && c == "}") ||
(lastc == "(" && c == ")"))
trans(c)
else if(c == "%")
pr("%")
else
pr("%" c)
pr(rest)
}
pr("\n")
}