aboutsummaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rwxr-xr-xbin/template.awk56
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/]
3function pr(str) {
4 if(lastc !~ "[{(]")
5 gsub(/'/, "''", str)
6 printf "%s", str
7}
8function 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
23BEGIN {
24 lastc = "{"
25 trans("}")
26}
27END {
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}