summaryrefslogtreecommitdiffstats
path: root/lib/inc.awk
blob: 309640d8c9b322cb975486c08425256be2799d71 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 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(kv in incoming){
		split(kv,f,SUBSEP);
		split(f[1],fbase,".");
		fname=fbase[1] "-inc.htm";
		if(lastname!=fname){
			if(lastname!=""){
				printf "</ul>\n" >> lastname;
			}
			lastname=fname;
			print "<ul>" > fname;
		}
		printf("\t<li><a href=\"%s\">%s</a></li>\n",f[2],title[f[2]]) >> fname;
	}
	printf "</ul>\n" >> lastname;
}