template.awk - swerc - anselm's simpler werc fork
 (HTM) git clone git://git.suckless.org/swerc
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
       template.awk (771B)
       ---
            1 #!/usr/bin/awk -f
            2 function pr(str) {
            3         if(lastc !~ "[{(]")
            4                 gsub(/'/, "''", str)
            5         printf "%s", str
            6 }
            7 function trans(c) {
            8         printf "%s", end
            9 
           10         lastc = c
           11         end = "\n"
           12         if(c == "%")
           13                 end = ""
           14         else if(c == "(")
           15                 printf "echo -n "
           16         else if(c ~ "[})]") {
           17                 end = "'\n"
           18                 printf "echo -n '"
           19         }
           20 }
           21 
           22 BEGIN {
           23         lastc = "{"
           24         trans("}")
           25 }
           26 END {
           27         print end
           28 }
           29 
           30 /^%/ && $0 !~ /^%[{()}%]/ && lastc !~ /[({]/ {
           31         trans("%")
           32         print substr($0, 2)
           33         next
           34 }
           35 {
           36         if(lastc == "%")
           37                 trans("}")
           38         n = split($0, a, "%")
           39         pr(a[1])
           40         for(i=2; i<=n; i++) {
           41                 c = substr(a[i], 1, 1)
           42                 rest = substr(a[i], 2)
           43 
           44                 if((lastc !~ "[({]" && c ~ "[({]") ||
           45                    (lastc == "{" && c == "}") ||
           46                    (lastc == "(" && c == ")"))
           47                         trans(c)
           48                 else if(c == "%")
           49                         pr("%")
           50                 else
           51                         pr("%" c)
           52                 pr(rest)
           53         }
           54         pr("\n")
           55 }