+#!/bin/sh
+#############################################################################
+# Name: check.sh
+# Purpose: Check embedded xslt
+# Author: Mike Wetherell
+# RCS-ID: $Id$
+# Copyright: (c) 2007 Mike Wetherell
+# Licence: wxWidgets licence
+#############################################################################
+
+usage() {
+ echo "Usage: $0 [options] FILE..."
+ echo "Check embedded xslt"
+ echo
+ echo "Options:"
+ echo " -g generate xslt"
+ echo " -h show help"
+ echo " -l N output only line N"
+ echo " -p preprocess"
+ echo " -v validate"
+ exit 0
+}
+
+badopt() {
+ echo "try '$0 -h' for more information" >&2
+ exit 1
+}
+
+GENERATE=1
+PREPROCESS=2
+VALIDATE=3
+
+MODE=$VALIDATE
+FILTER=cat
+
+while getopts ghl:pv opt; do
+ case "$opt" in
+ \?) badopt ;;
+ g) MODE=$GENERATE ;;
+ h) usage ;;
+ l) FILTER="sed -ne ${OPTARG}p" ;;
+ p) MODE=$PREPROCESS ;;
+ v) MODE=$VALIDATE ;;
+ esac
+done
+
+if [ $OPTIND -gt 1 ]; then
+ shift `expr $OPTIND - 1`
+fi
+
+if [ $# -eq 0 ]; then
+ usage
+fi
+
+DIR="`dirname $0`"
+WORKDIR="${TMPDIR:-/tmp}/wx.$$"
+mkdir "$WORKDIR" || exit
+trap 'rm -rf "$WORKDIR"' EXIT
+WORKPAT=`echo "$WORKDIR" | sed 's|[^A-Za-z0-9]/|.|g'`
+XSLT="$WORKDIR/XSLT"
+PREP="$WORKDIR/PREP"
+STDERR="$WORKDIR/STDERR"
+ERR=0
+
+# Change the names of the temporary files in an error message to something
+# to something more informative
+errout()
+{
+ NAME="$1"
+
+ if [ -s "$STDERR" ]; then
+ sed "s|file ${WORKPAT}|${WORKPAT}|g;\
+ s|${WORKPAT}/XSLT|generated XSLT|g;\
+ s|${WORKPAT}/PREP|$NAME (preprocessed)|g" "$STDERR" |
+ awk '{
+ print;
+ if (sub(/.*generated XSLT line */, "") && sub(/[^0-9].*/, ""))
+ {
+ system("sed -ne "$0"p '$XSLT'");
+ }
+ }'
+ fi
+}
+
+output()
+{
+ $FILTER "$1"
+}
+
+generate()
+{
+ INPUT="$1"
+
+ if xsltproc --xinclude -o "$XSLT" $DIR/embedded.xsl "$INPUT" 2>"$STDERR" &&
+ test \! -s "$STDERR"
+ then
+ if [ $MODE -eq $GENERATE ]; then
+ output "$XSLT"
+ fi
+ else
+ return 1
+ fi
+}
+
+preprocess()
+{
+ INPUT="$1"
+
+ if [ $MODE -lt $PREPROCESS ]; then
+ return 0
+ fi
+
+ if xsltproc --xinclude -o "$PREP" "$XSLT" "$INPUT" 2>"$STDERR" &&
+ test \! -s "$STDERR"
+ then
+ if [ $MODE -eq $PREPROCESS ]; then
+ output "$PREP"
+ fi
+ else
+ return 1
+ fi
+}
+
+validate()
+{
+ NAME="$1"
+
+ if [ $MODE -lt $VALIDATE ]; then
+ return 0
+ fi
+
+ if xmllint --noout --schema $DIR/bot.xsd "$PREP" 2>"$STDERR"
+ then
+ errout "$NAME"
+ else
+ return 1
+ fi
+}
+
+while [ $# -gt 0 ]; do
+ INPUT="$1"
+ NAME="`echo \"$INPUT\" | sed 's/[|\]/\\\&/g'`"
+
+ {
+ generate "$INPUT" &&
+ preprocess "$INPUT" &&
+ validate "$NAME"
+ } || {
+ errout "$NAME" >&2
+ ERR=1
+ }
+
+ rm -f "$XSLT" "$PREP" "$STDERR"
+
+ shift
+done
+
+exit $ERR