# Take apart bits of HTML and puts them back together again in new and# fascinating ways. Copyright (C) 2002 Free Software Foundation, Inc.# Contributed by Phil Edwards <pme@gcc.gnu.org>. Simple two-state automaton# inspired by Richard Henderson's gcc/mkmap-symver.awk.# 'file' is the name of the file on stdin# 'title' is the text to print at the start of the listBEGIN {state = "looking";entries = 0;printf (" <li>%s\n", title);printf (" <ul>\n");}# Searching for the little table of contents at the top.state == "looking" && /^<h1>Contents/ {state = "entries";next;}# Ignore everything else up to that point.state == "looking" {next;}# An entry in the table of contents. Pull that line apart.state == "entries" && /<li>/ {extract_info($0);next;}# End of the list. Don't bother reading the rest of the file. (It could# also contain more <li>'s, so that would be incorrect as well as wasteful.)state == "entries" && /^<\/ul>/ {exit;}END {for (i = 0; i < entries; i++)printf (" %s\n", entry[i]);printf (" </ul>\n </li>\n\n");}function extract_info(line) {# thistarget will be things like "#5" or "elsewhere.html"match(line,"href=\".*\"");thistarget = substr(line,RSTART+6,RLENGTH-7);# take apart the filenamesplit(file,X,"/");if (thistarget ~ /^#/) {# local name, use directory and filenametarget = file thistarget} else {# different file, only use directorytarget = X[1] "/" thistarget}# visible textgsub("</a></li>","",line);start = index(line,"\">") + 2;thistext = substr(line,start);# Assemble and store the HTML for later output.entry[entries++] = "<li><a href=\"" target "\">" thistext "</a></li>"}# vim:sw=2