#!/bin/bash # Yes, this script is aching to be rewritten in Python. # It was never supposed to grow this big! if [ $# -ne 1 ]; then echo "Usage: 1. ./validate.sh " >&2 echo " 2. ./validate.sh all" >&2 exit 1 fi WWWDIR="`dirname \"$0\"`" # Much of this script is concerned with setting up a local cache of the # DTD and files required by the DTD, so they are not re-downloaded every time. ensure () { BASENAME="`basename \"$1\"`" if [ -n "$2" ]; then LOCALFILE="$WWWDIR/$2/$BASENAME" else LOCALFILE="$WWWDIR/$BASENAME" fi test ! -f "$LOCALFILE" && wget -O "$LOCALFILE" "$1" } ensure "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent" ensure "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent" ensure "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent" ensure "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" # Do not need these, but the URLs are here for uncommenting if you like #ensure "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd" #ensure "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" # If you have ongmls installed, then you almost certainly have a SGML # declaration for XML installed already, but there is no cross-platform way of # knowing where. So, instead, just download one, since we had to download # other things anyway. ensure "http://www.w3.org/TR/xhtml1/DTD/xhtml.soc" ensure "http://www.w3.org/TR/xhtml1/DTD/xhtml1.dcl" # If you are doing any serious hacking on the web pages, you probably want # the CSS locally too. mkdir -p "$WWWDIR/tigris-branding" mkdir -p "$WWWDIR/tigris-branding/css" mkdir -p "$WWWDIR/tigris-branding/scripts" mkdir -p "$WWWDIR/tigris-branding/images" ensure "http://subversion.tigris.org/branding/css/tigris.css" \ "tigris-branding/css" ensure "http://subversion.tigris.org/branding/css/inst.css" \ "tigris-branding/css" ensure "http://subversion.tigris.org/branding/css/print.css" \ "tigris-branding/css" ensure "http://subversion.tigris.org/branding/scripts/tigris.js" \ "tigris-branding/scripts" for f in `sed -n -e 's,.*url(\.\./images/\([^)]*\).*,\1,;tp' -etp -ed -e:p -ep \ $WWWDIR/tigris-branding/css/*.css`; do ensure "http://subversion.tigris.org/branding/images/$f" \ "tigris-branding/images" done export SGML_CATALOG_FILES="$WWWDIR/xhtml.soc" if [ -z "$XML_VALIDATOR" ]; then if [ "`type -p xmllint`" != "" ]; then export XML_VALIDATOR="xmllint" else if [ "`type -p onsgmls`" != "" ]; then export XML_VALIDATOR="onsgmls" else echo "No XML validator found!" >&2 exit 1 fi fi fi echo "Selected XML validator: '$XML_VALIDATOR'" validate () { case $XML_VALIDATOR in onsgmls) SP_CHARSET_FIXED=YES SP_ENCODING=XML \ onsgmls -wxml -ges "$1" ;; xmllint) xmllint --nonet --noout --valid --catalogs "$1" ;; *) echo "Internal error - unknown XML validator '$XML_VALIDATOR'!" >&2 exit 1 ;; esac } if [ "$1" = "all" ]; then WARNFILE=".validation-warnings.$$.tmp" for f in "$WWWDIR"/*.html; do case $f in */project_tools.html) RESULT='Skipped' ;; *) validate "$f" 2>"$WARNFILE" if [ $? -eq 0 ]; then RESULT='\033[32mvalid\033[0m' else WARNLINES="`cat \"$WARNFILE\" | wc -l`" RESULT='\033[31;1mINVALID ('"$WARNLINES"')\033[0m' fi cat "$WARNFILE" ;; esac echo -e "$f: $RESULT" done rm -f "$WARNFILE" exit 0 fi validate "$1"