diff options
Diffstat (limited to 'bin')
| -rwxr-xr-x | bin/template.awk | 56 | 
1 files changed, 56 insertions, 0 deletions
| diff --git a/bin/template.awk b/bin/template.awk new file mode 100755 index 0000000..f543506 --- /dev/null +++ b/bin/template.awk | |||
| @@ -0,0 +1,56 @@ | |||
| 1 | #!/usr/bin/awk -f | ||
| 2 | #taken from werc [http://werc.cat-v.org/] | ||
| 3 | function pr(str) { | ||
| 4 | if(lastc !~ "[{(]") | ||
| 5 | gsub(/'/, "''", str) | ||
| 6 | printf "%s", str | ||
| 7 | } | ||
| 8 | function trans(c) { | ||
| 9 | printf "%s", end | ||
| 10 | |||
| 11 | lastc = c | ||
| 12 | end = "\n" | ||
| 13 | if(c == "%") | ||
| 14 | end = "" | ||
| 15 | else if(c == "(") | ||
| 16 | printf "echo -n " | ||
| 17 | else if(c ~ "[})]") { | ||
| 18 | end = "'\n" | ||
| 19 | printf "echo -n '" | ||
| 20 | } | ||
| 21 | } | ||
| 22 | |||
| 23 | BEGIN { | ||
| 24 | lastc = "{" | ||
| 25 | trans("}") | ||
| 26 | } | ||
| 27 | END { | ||
| 28 | print end | ||
| 29 | } | ||
| 30 | |||
| 31 | /^%/ && $0 !~ /^%[{()}%]/ && lastc !~ /[({]/ { | ||
| 32 | trans("%") | ||
| 33 | print substr($0, 2) | ||
| 34 | next | ||
| 35 | } | ||
| 36 | { | ||
| 37 | if(lastc == "%") | ||
| 38 | trans("}") | ||
| 39 | n = split($0, a, "%") | ||
| 40 | pr(a[1]) | ||
| 41 | for(i=2; i<=n; i++) { | ||
| 42 | c = substr(a[i], 1, 1) | ||
| 43 | rest = substr(a[i], 2) | ||
| 44 | |||
| 45 | if((lastc !~ "[({]" && c ~ "[({]") || | ||
| 46 | (lastc == "{" && c == "}") || | ||
| 47 | (lastc == "(" && c == ")")) | ||
| 48 | trans(c) | ||
| 49 | else if(c == "%") | ||
| 50 | pr("%") | ||
| 51 | else | ||
| 52 | pr("%" c) | ||
| 53 | pr(rest) | ||
| 54 | } | ||
| 55 | pr("\n") | ||
| 56 | } | ||
