NAME
	xsltc - optional command wrapper for Apache/Xalan XSLT Compiler 

SYNOPSIS
	xsltc [-o <output>] [-d <directory>] [-j <jarfile>] 
	      [-p <package name>] [-uxhsi] [<stylesheet>... ]

DESCRIPTION
	This command-line tool is a wrapper for the Java class
	org.apache.xalan.xsltc.cmdline.Compile. (See CODE below)

	The Sun XSLT Compiler is a Java-based tool for compiling XSLT
	stylesheets into lightweight and portable Java byte codes 
	called translets.  

	The XSLT Compiler can be run on any platform including UNIX,
	Windows, NT, Mac that supports Java 1.2.x or later. The generated
	translets can be run on any platform that supports a Java
	Runtime Environment, including a Palm Pilot with J2ME CLDC 
	(Java 2 Micro Edition, Connected Limited Device Configuration).

OPTIONS

	The following options are supported:

	-o <output>
		Changes the name of the generated translet class.
		By default, the translet class would be named
		<stylesheet>, if -o <output> is set, then the 
		translet class would be named <output>. Translet
		class files are written as .class files.

	-d <directory>
		Changes the destination directory. By default, any
		translet class files generated would be placed in 
		the current working directory. If -d <directory> 
		is specified, the files would be output to <directory>.

	-j <jarfile>
		Outputs all generated translet class files into a 
		jar file named <jarfile>.jar. When this option is 
		used only a jar file will be output.

	-p <package name>
		Specify a package name for all generated translet
		class.

	-u
		Specifies that <stylesheet> location will be a URI
		such as 'http://myserver/stylesheet1.xsl'.

	-i
		Specify that the stylesheet should be read from stdin.

	-x
		Turn debugging messages on.

	-h
		Output help screen.

	-s
		Prevent the command line tool from calling System.exit()


OPERANDS

	The following operand is supported:

	<stylesheet>    A path name of an input stylesheet file. 

CODE
	Here is an example wrapper script to implement this command.
        You should define 'INSTALLDIR' to be the directory where you
        have installed XalanJ, for example, '/usr/local/xml-xalan'.

	#!/bin/sh
	JAR=${INSTALLDIR}/java/bin/xsltc.jar
	XER=${INSTALLDIR}/java/bin/xercesImpl.jar
	XML=${INSTALLDIR}/java/bin/xml-apis.jar
	JCPR=${INSTALLDIR}/java/bin/runtime.jar
	BCEL=${INSTALLDIR}/java/bin/BCEL.jar
	JCP=${INSTALLDIR}/java/bin/java_cup.jar
	JLEX=${INSTALLDIR}/java/bin/JLex.jar
	REGEXP=${INSTALLDIR}/java/bin/regexp.jar

        CLASSPATH=.:${JAR}:${XER}:${XML}:${JCPR}:${BCEL}:${JCP}:${JLEX}:${REGEXP}
        java -cp ${CLASSPATH} org.apache.xalan.xsltc.cmdline.Compile "$@"
	

EXAMPLES
	Example 1:  Creating a translet from stylesheet 'hamlet.xsl'.

	example%  xsltc hamlet.xsl

	would produce a set of class files such as 'hamlet.class',
	'hamlet$0.class', 'hamlet$1.class'.

	Example 2:  Outputting all classes into a jar file.

	example%  xsltc -j hamlet.jar hamlet.xsl

	would produce a single jar file output, 'hamlet.jar' which would
	contain all the generated .class files for the hamlet translet.

	Example 3: Naming the class file.  

	example%  xsltc -o newhamlet hamlet.xsl

	would produce a set of class files such as 'newhamlet.class',
	'newhamlet$0.class', etc rather than the default which would 
	be 'hamlet.class', 'hamlet$0.class', etc.	

	Example 4: Multiple stylesheets. 

	example%  xsltc hamlet1.xsl hamlet2.xsl hamlet3.xsl

	would produce a set of class files derived from the three
	stylesheets. 

	Example 5: Package Specification.

	example% xsltc -p com.mycompany.translets hamlet.xsl

	would produce a set of class files such as 
	'com/mycompany/translets/hamlet.class',
	'com/mycompany/translets/hamlet$0.class', etc.

FILES
	file.xsl		input XSLT stylesheet
	file.class		byte code file
	file.jar		java archive file
	
SEE ALSO
	xslt, jar.

BUGS
	See the Bugzilla bug database: http://nagoya.apache.org/bugzilla

AUTHORS
	Morten Jorgensen,		   morten.jorgensen@ireland.sun.com
	G. Todd Miller,                            todd.miller@east.sun.com
	Santiago Pericas-Geertsen
	Jacek Ambroziak
