aat

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

commit b1f6afc9b5dd0b00f45d4b7f42cbfd442aafcfc2
parent 97d8e58aa0b3d1c1783ce9bf33db80d7ed084cd7
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date:   Tue,  8 Oct 2013 22:55:30 +0200

allow interleaving of awk expressions with queries
Diffstat:
Mbin/aat.awk | 51+++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 49 insertions(+), 2 deletions(-)

diff --git a/bin/aat.awk b/bin/aat.awk @@ -203,9 +203,56 @@ function expand_query( expanded) { } return "get("expanded")" } +function match_dbg(type, str) { + if(DEBUG) printf "<%s match: \"%s\">", type, \ + substr(str, RSTART, RLENGTH) >"/dev/stderr" +} function aat_process(str) { - expand_remaining = str - return expand_query() + processed = "" + while(str) { + if(match(str, /^[0-9]x?[0-9a-fA-F.]+(e[-+][0-9]+)?/)) { + # number literal + match_dbg("number", str) + processed = processed "("substr(str, 1, RLENGTH)")" + str = substr(str, RLENGTH+1) + } else if(match(str, /^[a-zA-Z_.<>'][a-zA-Z0-9_.<>']*/)) { + # a query + match_dbg("query", str) + expand_remaining=substr(str, 1, RLENGTH) + str = substr(str, RLENGTH+1) + processed = processed expand_query() + } else if(match(str, /^\|[a-zA-Z]/)) { + # filters ahead + match_dbg("filter", str) + break + } else if(match(str, /^"/)) { + # literal string + match_dbg("string", str) + match(str, /^"([^"\\]|\\[^"])*"/) + processed = processed substr(str, 1, RLENGTH) + str = substr(str, RLENGTH+1) + } else if(match(str, /^ /)) { + # spaces are passed verbatim + match_dbg("space", str) + processed = processed " " + str = substr(str, 2) + } else { + # anything else is passed verbatim up to space or quote + if(match(str, /[ "]/)) { + if(DEBUG) printf "<* match: \"%s\">", \ + substr(str, 1, RSTART-1) >"/dev/stderr" + processed = processed substr(str, 1, RSTART-1) + str = substr(str, RSTART) + } else { + if(DEBUG) printf "<* non-match: \"%s\">", \ + str >"/dev/stderr" + processed = processed str + str = "" + } + } + } + # TODO filters + return processed } { parse_line($0) }