summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xdmt/template.awk55
1 files changed, 55 insertions, 0 deletions
diff --git a/dmt/template.awk b/dmt/template.awk
new file mode 100755
index 0000000..4274484
--- /dev/null
+++ b/dmt/template.awk
@@ -0,0 +1,55 @@
+#!/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")
+}