#!/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) 2012, 2013 Free Software Foundation, Inc. # # 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 . # # This will produce documentation in the following format: # manual/ multi-page HTML # manual/easejs.html single-page HTML ## # 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/manual path_doc="$(pwd)/doc-cp" path_img="$path_doc/img" path_js="$path_doc/interactive.js" path_doc_multi="$path_doc/easejs.html" # style a particular file, rewriting relevant portions of the HTML webify() { docpath="$1" root="$2" tmp="$1.tmp" # if necessary, rewrite links to point to the proper directory (we do not use # absolute paths, as that is not friendly to viewing the documentation on a # filesystem) shref='sed \"s#\\(src\\|href\\)=\\\"\\([^\\\"]\\+\\)\\\"#' shref="$shref"'\\1=\\\"'"$root"'\\2\\\"#g\"' shref="$shref | sed 's#//\\\"#\\\"#g'" 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/&#; s##\n&#; ' "$docpath" \ | awk ' // { print ""; system( "awk \"/body/{i=1;next;} i\" includes/header.html | '"$shref"'" ); next } /<\/body>/ { system( "cat includes/footer.html | '"$shref"'" ); exit } { print } ' \ > "$tmp" # overwrite file with changes mv "$tmp" "$docpath" } # generate the documentation from the master branch git checkout "${WEBDOC_BRANCH:-master}" \ && autoreconf -fvi \ && ./configure \ && make html html-single \ && cp -rl doc "$path_doc" \ && git checkout - \ && pwd \ && ln -sfv "$path_doc/easejs-single.html" "$path_doc_multi/easejs.html" \ && for path in $( find "$path_doc_multi" -name '*.htm?' ) do webify "$path" "../" done \ && ln -sfv "$path_doc_multi" "$path_dest" \ && ln -sfv "$path_img" "$path_js" "$path_dest/"