BEGIN{ lnum=0; cnum=0; type=""; last_field=""; FS=":"; # category is an array of category data delete category; # link is an array of link data delete link; ### configurable variables BASEDIR="./"; ROOTFILE="./lawn/index.gph"; ROOTSEL="/lawn/index.gph"; HOST="localhost"; PORT="1500"; } function is_empty(a){ for (i in a) return 0; return 1; } function add_link(c){ lnum+=1; for (k in c){ link[lnum,k]=c[k]; } } function add_category(c){ cnum+=1; for (k in c){ category[cnum,k]=c[k]; } } function get_cur(cur){ #print "cur[Type]:", cur["Type"]; switch (cur["Type"]) { case "": { print "empty type -- skipping record"; return; } case "link": { add_link(cur); return; } case "category":{ add_category(cur); return; } default: { printf("invalid type: %s -- skipping\n", cur["Type"]) ; return; } } } /^[A-Z][-a-zA-Z]+:/{## New field #print "Field:",$1,"-","Value:",$2 gsub(/^ +/,"",$2); gsub(/ *$/,"",$2); cur[$1]=$2; last_field=$1 } /^[[:blank:]]*$/{ ## End of stanza if (!is_empty(cur)){ get_cur(cur); delete cur; last_field=""; } } /^[[:blank:]]+[^[:blank:]]+/{## Multi-line value if (!is_empty(cur) && last_field!=""){ gsub(/^[[:blank:]]+/, "", $0); cur[last_field]=cur[last_field] "\n" $0; } } END{ ## for (i=1;i<=cnum;i++){ ## printf("[1%s|%s|%s|%s]\r\n", category[i,"LinkName"], category[i,"Selector"], \ ## category[i,"Host"], category[i,"Port"]); ## } render_init(); render_categories(category, cnum); render_post_categories(category, cnum); render_links(category, cnum, link, lnum); render_finalise(category, cnum, link, lnum); ##render_links(link, lnum, cfiles); #for (k in cnames) # print k, cnames[k]; }