#!/bin/ash # # pak-web-make-submenu -- 2008-09-09, last edit 2008-09-16 # # script to create submenu (sitemap) list # # Copyright (C) 2008 Grant Coady GPLv2 # # Call: cd $web_doc_root; pak-web-make-submenu > sitemap.text # # two pass, first pass collect directories and non-index .html files tmp=$(mktemp) || exit 1 # get public view directories list then add *.html files find . -type d | egrep -v 'archive|image|networkmon|public|server' | \ while read path do echo "$path/" >> $tmp # remove {index,README}.html as they are used for directory ls $path/*.html | egrep -v 'index|README|sitemap' >> $tmp done # second pass, generate the indented list of lists with leaf-node links awk ' BEGIN { list_type = "ul" list_item = "li" class = "toc" # use toc1, toc2, ... tocn depth = 3 print "" } { sub(/\.\//, "") # strip leading ./ gsub(/\//, " ") # "/" -> blank, splits record into fields } /^$/ || NF > depth { next # skip unwanted } function indent(n, i, s) { # return list item indent s = "" for (i = n; i > 0; i--) { s = s "\t" } return s } NF > lastNF { # indent, always single printf "%s<%s class=%s%s>\n", indent(NF-1), list_type, class, NF } NF < lastNF { # undent, may be multiple for (i = lastNF; i > NF; i--) { printf "%s\n", indent(i-1), list_type } } { lastNF = NF href = name = $NF if (name ~ /\.html$/) { sub(/\.html/, "", name) # strip .html from file } else { href = href "/" # add "/" to directory } # prefix path to list item for (i = NF-1; i > 0; i--) { href = $i "/" href } li = sprintf("<%s>", list_item) printf "%s%s%s\n", indent(NF), li, href, name } END { for (i = lastNF; i > 0; i--) { printf "%s\n", indent(i-1), list_type } }' $tmp rm $tmp # end