blob: 3abc8d27c967a750a21742eb4f981c3e58c75d8f [file] [log] [blame]
#!/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 <filename>" >&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"