diff --git a/Makefile b/Makefile index 060ba5f..3706665 100644 --- a/Makefile +++ b/Makefile @@ -51,6 +51,10 @@ blog: | sed 's/\( "$(outdir)/blog.html" +# documentation, styled to match the rest of the website +webdoc: + ./tools/webdoc + # publish webroot to remote server using rsync (do not delete files, since we # may not have built everything) publish: | default diff --git a/style.css b/style.css index 1438f14..76d0405 100644 --- a/style.css +++ b/style.css @@ -14,6 +14,9 @@ html, body { font-family: arial, serif; font-size: 16px; + + /* for use with manual pages */ + border: none !important; } a, a:active, a:link { diff --git a/tools/webdoc b/tools/webdoc new file mode 100755 index 0000000..ae400db --- /dev/null +++ b/tools/webdoc @@ -0,0 +1,106 @@ +#!/bin/sh +# +# Styles documentation, generated from master, to match the rest of the website +# +# What a relief. This also allows the documentation that is generated separately +# (apart from the website) to have its own style; that makes sense, considering +# the master branch should have no knowledge of the website. +# +# Copyright (C) 2010 Mike Gerwitz +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +## + +# ensure that we are within the git repository (otherwise, we cannot generate +# content from master) +git rev-parse --git-dir >/dev/null 2>/dev/null || { + echo "This command may only be run from within the git repository" >&2 + exit 1 +} + +# we do not want to switch branches if it may risk losing changes +[ "$( git status --short | grep -v '??' )" ] && { + # auto-stashing can be used during development to test this script without + # fighting with git + if [ -z "$WEBDOC_AUTOSTASH" ]; then + echo "Working tree is dirty; please stash or commit changes" >&2 + exit 2 + fi + + # automatically stash changes + echo "Stashing changes before switching branches..." >&2 + git stash save 'Stashed by webdoc' + + # on exit, pop the stash + trap 'git stash pop' EXIT +} + + +path_dest=webroot +path_doc=build/doc +path_img=$path_doc/img +path_js=$path_doc/interactive.js +path_doc_single=$path_doc/manual.html +path_doc_multi=$path_doc/manual + +# style a particular file, rewriting relevant portions of the HTML +webify() +{ + docpath="$1" + root="$2" + tmp="$1.tmp" + + echo "Styling $path..." + + # We do not use -i here because we have some piping to do. We also use a $root + # var in place of a simple "/" prefix to permit this page to be viewed + # anywhere --- not just on the root of a domain. + sed ' + s##\n&#; + s#highlight\.pack\.js#'$root'scripts/&#; + ' "$docpath" \ + | awk ' + // { + print ""; + system( " \ + awk \"/body/{i=1;next;} i\" includes/header.html \ + | sed \"s#href=\\\"\\([^\\\"]\\+\\)\\\"#href=\\\"'$root'\\1\\\"#g\"\ + " ); + next + } + { print } + /<\/body>/ { + system( "cat includes/footer.html" ); + next + } + ' \ + > "$tmp" + + # overwrite file with changes + mv "$tmp" "$docpath" +} + +# generate the documentation from the master branch +git checkout master \ + && make doc-html \ + && git checkout - \ + && webify "$path_doc_single" \ + && for path in $( find "$path_doc_multi" -name '*.htm?' ) + do + webify "$path" "../" + done \ + && ln -sf \ + "../$path_doc_single" "../$path_img" "../$path_js" "../$path_doc_multi" \ + "$path_dest/"