aat

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

commit bc9fa5e1857a61091bc200ac695bf49fab82d11a
parent 73eecb05ef1671893e9d8a4cd1a49cc32ec7bd5e
Author: Jan Pobrislo <ccx@wpr.cz>
Date:   Wed, 23 Sep 2015 03:42:51 +0200

fixups of data.awk
Diffstat:
Mdata.awk | 65+++++++++++++++++++++++++++++++++++++++++------------------------
1 file changed, 41 insertions(+), 24 deletions(-)

diff --git a/data.awk b/data.awk @@ -56,7 +56,7 @@ state == 1 { m = match($0, ident_re) varname = substr($0, m, RLENGTH) V[varname] = substr($0, m+1+RLENGTH) - if(DEBUG) printf "got scalar: %s ⇒ %s (%d)\n", varname, V[varname], m >"/dev/stderr" + if(DEBUG) printf "got scalar: %s = %s (%d)\n", varname, V[varname], m >"/dev/stderr" next } @@ -102,32 +102,44 @@ function find(varname, i, n, names, values, loopvar, looprow, prefix) { continue loopvar = loop_stack[i, "var"] looprow = loop_stack[i, "row"] - if(varname == prefix"_index") - return looprow - if(varname == prefix"_index0") - return looprow - 1 - if(varname == prefix"_revindex") - return V[loopvar, "rows"] - looprow + 1 - if(varname == prefix"_revindex0") - return V[loopvar, "rows"] - looprow - if(varname == prefix"_first") - return looprow == 1 - if(varname == prefix"_last") - return looprow == V[loopvar, "rows"] - if(varname == prefix"_length") - return V[loopvar, "rows"] + if(varname == prefix"_index") { + found = looprow + return 1 + } + if(varname == prefix"_index0") { + found = looprow - 1 + return 1 + } + if(varname == prefix"_revindex") { + found = V[loopvar, "rows"] - looprow + 1 + return 1 + } + if(varname == prefix"_revindex0") { + found = V[loopvar, "rows"] - looprow + return 1 + } + if(varname == prefix"_first") { + found = looprow == 1 + return 1 + } + if(varname == prefix"_last") { + found = looprow == V[loopvar, "rows"] + return 1 + } + if(varname == prefix"_length") { + found = V[loopvar, "rows"] + return 1 + } split(V[loopvar, "fields"], names) for(n in names) { if(varname == (prefix names[n])) { split(V[loopvar, looprow], values) - return values[n] + found = values[n] + return 1 } } } if(!(varname in V)) { - if(DEBUG) { - print "variable not found: " varname >"/dev/stderr" - } return 0 } found = V[varname] @@ -137,10 +149,14 @@ function find(varname, i, n, names, values, loopvar, looprow, prefix) { function get(varname) { if(!find(varname)) { if(ENVIRON["DATA_AWK_EMPTY_GET"]) { - return "" + if(DEBUG) { + print "variable not found: " varname >"/dev/stderr" + } + found = "" + } else { + print "error: undefined variable '"varname"'" >"/dev/stderr" + exit 1 } - print "error: undefined variable '"varname"'" >"/dev/stderr" - exit 1 } if(DEBUG) { print "get →" varname "← = →"found"←" >"/dev/stderr" @@ -155,9 +171,10 @@ function or_(a, b) { END { if(DEBUG) { print "--- loaded keys ---" >"/dev/stderr" - for(key in V) - printf("%s\t→%s←\t", key, V[key]) >"/dev/stderr" + for(key in V) { + printf("%s\t→%s←\n", key, V[key]) >"/dev/stderr" printf(">> %d →%s←\n", find(key), found) >"/dev/stderr" + } print "-------------------" >"/dev/stderr" } }