#! /bin/sh ## saxon [--b|--sa]? [--catalogs=...]* [--catalog-verbose[=...]]* \ ## [--add-cp=...]* [--cp=...]* [--mem=...]? \ ## [--proxy=[user:password@]host:port]? ## ## Order of options is not significant, but the options to be ## forwarded to Saxon must be at the end. See below for an ## explanation of the options. Options --catalogs and --proxy ## are mutually exclusive. ## ## Depends on the following environment variables: ## ## - APACHE_XML_RESOLVER_JAR (if catalogs are used) ## - FG_JAVA_LIBS ## - SAXON_SCRIPT_HOME (if different from $HOME, for tilde "~" ## substitution) JAVA=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java if [[ -f "${FG_JAVA_LIBS}/com/saxonica/saxon9/saxon9sa.jar" ]]; then SAXON_JAR="${FG_JAVA_LIBS}/com/saxonica/saxon9/saxon9sa.jar"; else SAXON_JAR="${FG_JAVA_LIBS}/com/saxonica/saxon9/saxon9.jar"; fi if [[ sa.jar = `echo ${SAXON_JAR} | sed 's/.\+[89]\(\(sa\)\?.jar\)/\1/'` ]]; then SAXON_CLASS=com.saxonica.Transform; else SAXON_CLASS=net.sf.saxon.Transform; fi USE_CAT=false CATALOG_VERB=1 if [[ -z "$SAXON_SCRIPT_HOME" ]]; then MY_HOME=$HOME else MY_HOME=$SAXON_SCRIPT_HOME fi JAVA_OPT= CP_DELIM=":" MEMORY=512m PROXY=$FG_PROXY PROXY_USER= PROXY_PWD= PROXY_HOST= PROXY_PORT= while echo "$1" | grep -- ^-- >/dev/null 2>&1; do case "$1" in # XSLT Basic version. --b) SAXON_CLASS=net.sf.saxon.Transform SAXON_JAR="${FG_JAVA_LIBS}/com/saxonica/saxon9/saxon9.jar";; # XSLT Schema-Aware version. --sa) SAXON_CLASS=com.saxonica.Transform SAXON_JAR="${FG_JAVA_LIBS}/com/saxonica/saxon9/saxon9sa.jar";; # Add XML Catalogs URI resolution, by adding a catalog to the # catalog list. Resolve "~" only on the head of the option. # May be repeated. --catalogs=*) USE_CAT=true # Add separator. if [[ -n $CATALOGS ]]; then CATALOGS="${CATALOGS}${CP_DELIM}" fi # Resolve "~". TMP_CAT=`echo $1 | sed s/^--catalogs=//` if echo "$TMP_CAT" | grep -- '^~' >/dev/null 2>&1; then TMP_CAT="$MY_HOME"`echo $TMP_CAT | sed s/^~//`; fi CATALOGS="$CATALOGS$TMP_CAT";; # Set the XML Catalogs resolver verbosity. --catalog-verbose=*) USE_CAT=true CATALOG_VERB=`echo $1 | sed s/^--catalog-verbose=//`;; # Set the XML Catalogs resolver verbosity to 3. --catalog-verbose) USE_CAT=true CATALOG_VERB=3;; # Add some path to the class path. Resolve "~" only on the # head of the option. May be repeated. --add-cp=*) # Resolve "~". TMP_CP=`echo $1 | sed s/^--add-cp=//` if echo "$TMP_CP" | grep -- '^~' >/dev/null 2>&1; then TMP_CP="$MY_HOME"`echo $TMP_CP | sed s/^~//`; fi ADD_CP="$ADD_CP$CP_DELIM$TMP_CP";; # Set the class path. Resolve "~" only on the head of the # option. May be repeated. --cp=*) # Resolve "~". TMP_CP=`echo $1 | sed s/^--cp=//` if echo "$TMP_CP" | grep -- '^~' >/dev/null 2>&1; then TMP_CP="$MY_HOME"`echo $TMP_CP | sed s/^~//`; fi CP="${CP}${CP_DELIM}${TMP_CP}";; # The memory space to give to the JVM --mem=*) MEMORY=$1;; # Add support for --proxy=user:password@host:port (in fgeorges.jar) --proxy=*) # TODO: Check the format of $1 PROXY=`echo $1 | sed "s/^--proxy=\(.*\)$/\1/"`;; # Additional option for the JVM --java=*) JAVA_OPT="$JAVA_OPT `echo $1 | sed s/^--java=//`";; # Unknown option! --*) echo "Unknown option: $1" 1>&2 exit 1;; esac shift; done if [[ -z "$CP" ]]; then CP="$SAXON_JAR" for jar in ${FG_JAVA_LIBS}/com/saxonica/saxon9/saxon9*-*.jar; do CP="${CP}${CP_DELIM}${jar}"; done fi if [[ "$SAXON_CLASS" = com.saxonica.Transform ]]; then CP="${CP}${CP_DELIM}${FG_JAVA_LIBS}/com/saxonica/saxon9/" fi if [[ "$USE_CAT" = true ]]; then CP="${CP}${CP_DELIM}${APACHE_XML_RESOLVER_JAR}" fi if [[ -n "$FGEORGES_JAR" ]]; then CP="${CP}${CP_DELIM}${FGEORGES_JAR}" fi CP="${CP}${ADD_CP}" SAXON_OPT= if [[ "$USE_CAT" = true ]]; then JAVA_OPT="$JAVA_OPT -Dxml.catalog.files=$CATALOGS -Dxml.catalog.verbosity=$CATALOG_VERB" SAXON_OPT="$SAXON_OPT -r org.apache.xml.resolver.tools.CatalogResolver -x org.apache.xml.resolver.tools.ResolvingXMLReader -y org.apache.xml.resolver.tools.ResolvingXMLReader" fi # TODO: Check the format of the PROXY value if [[ -n "$PROXY" ]]; then PROXY_USER=`echo $PROXY | sed "s/^\(\(.*\):\(.*\)@\)\?\(.*\):\([0-9]*\)$/\2/"` PROXY_PWD=`echo $PROXY | sed "s/^\(\(.*\):\(.*\)@\)\?\(.*\):\([0-9]*\)$/\3/"` PROXY_HOST=`echo $PROXY | sed "s/^\(\(.*\):\(.*\)@\)\?\(.*\):\([0-9]*\)$/\4/"` PROXY_PORT=`echo $PROXY | sed "s/^\(\(.*\):\(.*\)@\)\?\(.*\):\([0-9]*\)$/\5/"` fi # TODO: Try to solve this problem. if [[ "$USE_CAT" = true && -n "$PROXY_HOST" ]]; then echo "Impossible to use --catalogs with --proxy (both use Saxon's -r option)" 1>&2 exit 1 fi if [[ -n "$PROXY_HOST" ]]; then JAVA_OPT="$JAVA_OPT -Dhttp.proxyHost=$PROXY_HOST -Dhttp.proxyPort=$PROXY_PORT" JAVA_OPT="$JAVA_OPT -Dhttps.proxyHost=$PROXY_HOST -Dhttps.proxyPort=$PROXY_PORT" # SAXON_OPT="$SAXON_OPT -r org.fgeorges.saxon.HttpProxyUriResolver" fi if [[ -n "$PROXY_USER" ]]; then JAVA_OPT="$JAVA_OPT -Dfgeorges.httpProxyUser=$PROXY_USER -Dfgeorges.httpProxyPwd=$PROXY_PWD" SAXON_OPT="$SAXON_OPT -r org.fgeorges.saxon.HttpProxyUriResolver" fi echo Using ${SAXON_CLASS}... 1>&2 # echo "$JAVA" "-Xmx$MEMORY" \ # -cp "$CP" \ # $JAVA_OPT \ # $SAXON_CLASS \ # $SAXON_OPT \ # "$@" 1>&2 "$JAVA" "-Xmx$MEMORY" \ -cp "$CP" \ $JAVA_OPT \ $SAXON_CLASS \ $SAXON_OPT \ "$@"