shithub: werc

ref: cbfeb6d94bb83c10d71effd316ca380377c33445
dir: /bin/template.awk/

View raw version
#!/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")
}