lib/inc.awk: refactor so that it works in all awks sadly, the one true awk and openbsd awk don't support nested arrays, had to twist everything here.
la-ninpre aaoth@aaoth.xyz
Thu, 04 Dec 2025 17:38:24 +0300
1 files changed,
16 insertions(+),
11 deletions(-)
jump to
M
lib/inc.awk
→
lib/inc.awk
@@ -1,10 +1,10 @@
# usage: awk -f inc.awk *.html function nodot(name) { - if(name ~ /^\.\//){ - name=substr(name,3); - } - return name; + if(name ~ /^\.\//){ + name=substr(name,3); + } + return name; } BEGIN {@@ -23,7 +23,7 @@
/<a href=/ { if(match($0, /<a href="[a-zA-Z0-9].*\.html">/)){ l=substr($0,RSTART+9,RLENGTH-9-2); - incoming[l][nodot(FILENAME)]=1; + incoming[l,nodot(FILENAME)]=1; if(!(l in files)) { printf("warning: redlink '%s' in '%s'\n", l, nodot(FILENAME)); }@@ -31,13 +31,18 @@ }
} END { - for(f in incoming){ - split(f,fbase,"."); + for(kv in incoming){ + split(kv,f,SUBSEP); + split(f[1],fbase,"."); fname=fbase[1] "-inc.htm"; - print "<ul>" > fname; - for(l in incoming[f]) { - printf("\t<li><a href=\"%s\">%s</a></li>\n",l,title[l]) >> fname; + if(lastname!=fname){ + if(lastname!=""){ + printf "</ul>\n" >> lastname; + } + lastname=fname; + print "<ul>" > fname; } - printf "</ul>\n" >> fname; + printf("\t<li><a href=\"%s\">%s</a></li>\n",f[2],title[f[2]]) >> fname; } + printf "</ul>\n" >> lastname; }