aat

git mirror of https://ccx.te2000.cz/bzr/aat
git clone https://ccx.te2000.cz/git/aat
Log | Files | Refs | README

commit d06ef8e5dd739d41df0297c0d6cf3bb7f6f278c3
parent d0dcbf0a7470719f9f41394be363160b4cc376b8
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date:   Wed, 30 Oct 2013 22:03:06 +0100

remove let macro, more debugging, fix complex query output
Diffstat:
Mbin/aat.awk | 19++++++++++---------
Mbin/aat_macros.sed | 2+-
Mbin/query.awk | 15+++++++++++----
Mdata.awk | 10+++++++++-
4 files changed, 31 insertions(+), 15 deletions(-)

diff --git a/bin/aat.awk b/bin/aat.awk @@ -52,15 +52,16 @@ function call_macro(name, args) { } # Assign a variable with query expression - else if(name == "let"){ - if (!match(args, / *= */)) { - print "ERROR: invalid let statement: " args >"/dev/stderr" - exit 1 - } - tok_type=T_AWK - token("V[\"" substr(args, 1, RSTART-1) "\"] = " \ - aat_process(substr(args, RSTART+RLENGTH)) "\n") - } + # else if(name == "let"){ + # if (!match(args, / *= */)) { + # print "ERROR: invalid let statement: " args >"/dev/stderr" + # exit 1 + # } + # tok_type=T_AWK + # token("V[\"" substr(args, 1, RSTART-1) "\"] = " \ + # substr(args, RSTART+RLENGTH)) "\n" + # # aat_process(substr(args, RSTART+RLENGTH)) "\n") + # } # if with a query expression else if(name == "if"){ diff --git a/bin/aat_macros.sed b/bin/aat_macros.sed @@ -13,4 +13,4 @@ s/^[[:space:]]*@if[[:space:]]\+\(.\+\)$/if(get("\1")) {\n/ s/^[[:space:]]*@elif[[:space:]]\+\(.\+\)$/} else if(get("\1")) {\n/ s/^[[:space:]]*@else[[:space:]]*$/} else {/ s/^[[:space:]]*@endif[[:space:]]*$/}/ -s/^[[:space:]]*@let[[:space:]]\+\([a-zA-Z_][a-zA-Z0-9_]*\)[[:space:]]*=[[:space:]]*\(.*\)$/V["\1"] = \2\n/ +#s/^[[:space:]]*@let[[:space:]]\+\([a-zA-Z_][a-zA-Z0-9_]*\)[[:space:]]*=[[:space:]]*\(.*\)$/V["\1"] = \2\n/ diff --git a/bin/query.awk b/bin/query.awk @@ -13,22 +13,28 @@ function out(str) { # called for expanding {< >} # global variable expand_remaining used as input function expand_query( expanded) { + if(DEBUG) printf "E: →%s←\n", expand_remaining >"/dev/stderr" expanded = "" while(match(expand_remaining, "['<>]")) { - if(RSTART > 1) + if(RSTART > 1) { expanded = expanded "\"" substr(expand_remaining, 1, RSTART-1) "\"" + if(DEBUG) printf "e: →%s←\n", expanded >"/dev/stderr" + } char = substr(expand_remaining, RSTART, 1) expand_remaining = substr(expand_remaining, RSTART+1) if(char == ">") return "get("expanded")" else if(char == "<") { expanded = expanded expand_query() + if(DEBUG) printf "e: →%s←\n", expanded >"/dev/stderr" } else if(char == "'") { if(match(expand_remaining, "'")) { - expanded = expanded substr(expand_remaining, 1, RSTART-1) + expanded = expanded "(" substr(expand_remaining, 1, RSTART-1) ")" + if(DEBUG) printf "e: →%s←\n", expanded >"/dev/stderr" expand_remaining = substr(expand_remaining, RSTART+1) } else { - expanded = expand_remaining + expanded = expanded "(" expand_remaining ")" + if(DEBUG) printf "e: →%s←\n", expanded >"/dev/stderr" expand_remaining = "" } } else { @@ -37,7 +43,8 @@ function expand_query( expanded) { } } if(expand_remaining) { - expanded = "\"" expand_remaining "\"" + expanded = expanded "\"" expand_remaining "\"" + if(DEBUG) printf "e: →%s←\n", expanded >"/dev/stderr" expand_remaining = "" } return "get("expanded")" diff --git a/data.awk b/data.awk @@ -77,7 +77,7 @@ function loop_end() { loop_stack["depth"]-- } -function get(varname, i, n, names, values, loopvar, looprow, prefix) { +function _get(varname, i, n, names, values, loopvar, looprow, prefix) { for(i=loop_stack["depth"]; i>0; i--) { prefix = loop_stack[i, "pre"] if(prefix) @@ -115,6 +115,14 @@ function get(varname, i, n, names, values, loopvar, looprow, prefix) { return V[varname] } +function get(varname, result) { + result = _get(varname) + if(DEBUG) { + print "get →" varname "← ⇒ →"result"←" >"/dev/stderr" + } + return result +} + function or_(a, b) { return a ? a : b }