all repos — aaothxyz-decadv @ d6185c275b1d83d30db413ec0c259503512b105f

aaoth.xyz website, but new.

day 04: add scripts to find incoming links

i said no automation, but this is somewhat innocent, i guess?
la ninpre aaoth@aaoth.xyz
Thu, 04 Dec 2025 16:23:10 +0300
commit

d6185c275b1d83d30db413ec0c259503512b105f

parent

8d169d142b6f063895555bd24b5db6390976b956

4 files changed, 80 insertions(+), 0 deletions(-)

jump to
A .gitignore

@@ -0,0 +1,2 @@

+dist/ +*-inc.htm
A build.sh

@@ -0,0 +1,26 @@

+#!/bin/sh + +[ ! -d dist ] && mkdir dist + +rm -f dist/* + +cp ./*.css ./*.svg ./*.png ./*.jpg dist/ + +awk -f lib/inc.awk ./*.html + +for file in ./*.html; do + if [ "$file" = "index.html" ] || + [ ! -f "${file%%.html}-inc.htm" ]; then + cp "$file" dist/ + continue + fi + ed "$file" <<EOF +?<\/body>?-r footer.htm +?{{incoming}}?d +-r ${file%%.html}-inc.htm +w dist/$file +q +EOF +done + +rm ./*-inc.htm
A footer.htm

@@ -0,0 +1,9 @@

+<footer> +<h2>incoming links</h2> +<div class="win"> +{{incoming}} +<hr> +<p>copyright © 2025 la ninpre, +<a href="https://creativecommons.org/licenses/by-nc/4.0/">cc by-nc 4.0</a></p> +</div> +</footer>
A lib/inc.awk

@@ -0,0 +1,43 @@

+# usage: awk -f inc.awk *.html + +function nodot(name) { + if(name ~ /^\.\//){ + name=substr(name,3); + } + return name; +} + +BEGIN { + for(i=1;i<ARGC;i++){ + files[nodot(ARGV[i])] = 1; + } +} + +/<title>/ { + match($0, /<title>.*<\/title>/); + t=substr($0,RSTART+7,RLENGTH-7-8); + match(t, / — /); + title[nodot(FILENAME)]=substr(t,1,RSTART-1); +} + +/<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; + if(!(l in files)) { + printf("warning: redlink '%s' in '%s'\n", l, nodot(FILENAME)); + } + } +} + +END { + for(f in incoming){ + split(f,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; + } + printf "</ul>\n" >> fname; + } +}