dleslie 01/07/27 13:59:19
Modified: java/xdocs/sources/xalan xsltc_constraints.xml
xsltc_usage.xml
Log:
2.2.D8
Revision Changes Path
1.12 +204 -138 xml-xalan/java/xdocs/sources/xalan/xsltc_constraints.xml
Index: xsltc_constraints.xml
===================================================================
RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/xsltc_constraints.xml,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- xsltc_constraints.xml 2001/07/19 16:22:50 1.11
+++ xsltc_constraints.xml 2001/07/27 20:59:18 1.12
@@ -12,160 +12,71 @@
<li><link anchor="xsltchistory">History of XSLTC software
changes</link></li>
</ul>
<anchor name="xsltcnew"/>
-<s3 title="Changes since &xslt4j; 2.2.D6">
-<ul><li><ref>Committed by </ref>[EMAIL PROTECTED]<ref> on
</ref>07/09/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler Constants.java
- Param.java StepPattern.java Stylesheet.java
- SyntaxTreeNode.java Variable.java WithParam.java
- java/src/org/apache/xalan/xsltc/dom KeyIndex.java
- java/src/org/apache/xalan/xsltc/runtime
- AbstractTranslet.java BasisLibrary.java
- DefaultRun.java Parameter.java TextOutput.java<br/><ref>Committer's log
entry: </ref>Loads of small fixes and a good few comments added to the source
code.
- The major fixes are one fix for variable/parameter handlingi and one for
- key/id index handling. XSLTC now correctly updates the value of parameters
- with changing default values, such as with
- <xsl:param name="foo" select="current()"/>.
- Also updated bit-arrays to correctly return single node ids, so that the
- key() and id() functions return the correct number of nodes (they would
- sometimes skip the first node in the defined node set for the key/id).
- Added some structure and loads of comments to the Translet base class.
+<s3 title="Changes since &xslt4j; 2.2.D7">
+<p>XSLTC source code updates:</p><ul><li><ref>Committed by </ref>[EMAIL
PROTECTED]<ref> on </ref>07/20/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/runtime
+ DefaultSAXOutputHandler.java
+ java/src/org/apache/xalan/xsltc/trax
+ TransformerFactoryImpl.java TransformerImpl.java<br/><ref>Committer's log
entry: </ref>Added support for SAXSource and SAXResult in TransformerFactoryImpl
+ and TransformerFactory. I had to add a new consturctor the the
+ default SAX output handler (in the xsltc runtime library) to acommodate
+ the SAXResult TrAX output handler.
PR: n/a
Obtained from: n/a
Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/10/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler
- AncestorPattern.java AttributeSet.java
- CallTemplate.java CastExpr.java EqualityExpr.java
- Expression.java FunctionCall.java If.java
- Import.java Include.java Mode.java NameBase.java
- Param.java ParameterRef.java Parser.java
- StepPattern.java SyntaxTreeNode.java Template.java
- TestSeq.java Variable.java VariableRef.java
- XSLTC.java XslAttribute.java
- java/src/org/apache/xalan/xsltc/compiler/util ErrorMsg.java
- ReferenceType.java
- java/src/org/apache/xalan/xsltc/dom MultiDOM.java
- StepIterator.java
- java/src/org/apache/xalan/xsltc/runtime
BasisLibrary.java<br/><ref>Committer's log entry: </ref>A wide range of fixes
provided by Erwin Bolwidt.
- o) fix for long IF and GOTO instructions inside translets.
- 'wide' GOTOs are now used (GOTO_W) instead of plain GOTO
- to allow longer jump offsets
- o) fix for illegal field/method names in the translet.
- Methods and fields no longer contain the '.' or '-' characters
- o) source filenames (and if possible also line numbers) are now
- provided with error and warning messages
- o) external functions that are not supported by XSLTC do not cause
- compile errors. They will still cause a warning message at
- compile-time if they are not wrapped in proper <xsl:if> or
- <xsl:when> elements that test on the availability of the function,
- and will cause a runtime error if the function is attempted called.
- o) added type cast from reference-type to node-type
- o) some other smaller fixes to prevent null-pointer exceptions
- Other changes:
- o) code cleanup and some added comments
- PR: n/a
- Obtained from: n/a
- Submitted by: Erwin Bolwidt <[EMAIL PROTECTED]>
- Reviewed by: Morten Jorgensen <[EMAIL
PROTECTED]><br/><br/></li><li><ref>Committed by </ref>[EMAIL PROTECTED]<ref>
on </ref>07/12/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler Parser.java
- SyntaxTreeNode.java XSLTC.java<br/><ref>Committer's log entry:
</ref>Cleaned up the XSLTC compiler class in an attempt to make it more
flexible.
- This class was originally written as a command-line interface, but it has
- now grown huge and messy. I separated the command-line stuff from the
- methods that make up the actual functionality and made some methods public.
- This is part of the preparation for our new implementation of the JAXP
- Templates object.
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/20/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler XSLTC.java
+ java/src/org/apache/xalan/xsltc/trax
+ TransformerFactoryImpl.java<br/><ref>Committer's log entry: </ref>Added
default error-reporting behaviour for our trax code (error messages
+ are dumped to System.err).
PR: n/a
- Obtained from: n.a
- Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/12/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/runtime DefaultRun.java<br/><ref>Added:
</ref>java/src/org/apache/xalan/xsltc/cmdline Compile.java
- Transform.java<br/><ref>Committer's log entry: </ref>Extracted the
command-line stuff from the core XSLTC packages. The command-
- line handling is now in xalan.xsltc.cmdline.Compile and
- xalan.xsltc.cmdline.Transform. The command-line stuff is still left in
- xalan.xsltc.compiler.XSLTC and xalan.xsltc.runtime.DefaultRun for backwards
- compatability. This should be removed shortly.
- PR: n/a
Obtained from: n/a
Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/12/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/cmdline Compile.java
- java/src/org/apache/xalan/xsltc/compiler XSLTC.java<br/><ref>Added:
</ref>java/src/org/apache/xalan/xsltc/cmdline/getopt GetOpt.java
- GetOptsException.java IllegalArgumentException.java
- MissingOptArgException.java
- java/src/org/apache/xalan/xsltc/trax TemplatesImpl.java
- TransformerImpl.java<br/><ref>Removed:
</ref>java/src/org/apache/xalan/xsltc/util/getopt GetOpt.java
- GetOptsException.java IllegalArgumentException.java
- MissingOptArgException.java<br/><ref>Committer's log entry: </ref>Moved the
org.apache.xalan.xsltc.util.getopt package to
- org.apache.xalan.xsltc.cmdline.getopt. Also added some skeleton
- code in a new org.apache.xalan.xsltc.trax directory.
- PR: n/a
- Obtained from: n/a
- Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/12/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/trax
TransletTemplates.java<br/><ref>Committer's log entry: </ref>minor adjustment
- Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/12/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/trax
- TransformerFactoryImpl.java<br/><ref>Committer's log entry: </ref>removed
obselete try/catch<br/><br/></li><li><ref>Committed by </ref>[EMAIL
PROTECTED]<ref> on </ref>07/12/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler XSLTC.java
- java/src/org/apache/xalan/xsltc/runtime
- AbstractTranslet.java
- java/src/org/apache/xalan/xsltc/trax TemplatesImpl.java
- TransformerFactoryImpl.java TransformerImpl.java<br/><ref>Removed:
</ref>java/src/org/apache/xalan/xsltc/trax
TransletTemplates.java<br/><ref>Committer's log entry: </ref>A first stab at
our new TrAX design.`
- Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/13/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler XSLTC.java
- java/src/org/apache/xalan/xsltc/trax TemplatesImpl.java
- TransformerFactoryImpl.java TransformerImpl.java<br/><ref>Committer's log
entry: </ref>A few minor adjustments to yesterdays JAXP/TrAX implementation.
These is one
- change in the way the compiler (XSLTC) generates bytecode arrays, and the
- rest is basically a cleanup of error reporting and a few added comments.
- PR: n/a
- Obtained from: n/a
- Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/16/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/dom DocumentCache.java<br/><ref>Added:
</ref>java/src/org/apache/xalan/xsltc/trax
OutputSettings.java<br/><ref>Committer's log entry: </ref>Reduced the refresh
rate of the DocumentCache to 1 second.
- PR: n/a
- Obtained from: n/a
- Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/17/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/dom
DocumentCache.java<br/><ref>Committer's log entry: </ref>Submitted by: Tom Amiro
- Fixes bug 1591. Changed the lastModified() method to return
- the correct timestamp for local files beginnig with the "file:"
- protocol. Incorporated Brian Ewin's suggestion to use URLdecode.
- Todd Miller and Morten Jorgensen<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/17/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/dom DOMImpl.java
- java/src/org/apache/xalan/xsltc/trax TemplatesImpl.java
- TransformerFactoryImpl.java TransformerImpl.java<br/><ref>Committer's log
entry: </ref>Added some javadoc comments to our trax stuff. Added preliminary
support
- for getting/setting output properties, and for getting/setting URL
resolvers.
- PR: n/a
- Obtained from: n/a
- Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/18/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc TransletOutputHandler.java
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/20/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/trax
+ TransformerFactoryImpl.java<br/><ref>Committer's log entry: </ref>in
progress, adding DOMSource support<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/20/2001<br/><ref>Added:
</ref>java/src/org/apache/xalan/xsltc/trax DOM2SAX.java<br/><ref>Committer's
log entry: </ref>new class, DOM2SAX, supports DOMSources, in
progress<br/><br/></li><li><ref>Committed by </ref>[EMAIL PROTECTED]<ref> on
</ref>07/20/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler Import.java
+ Include.java Stylesheet.java XSLTC.java
+ java/src/org/apache/xalan/xsltc/trax
+ TransformerFactoryImpl.java TransformerImpl.java<br/><ref>Added:
</ref>java/src/org/apache/xalan/xsltc/compiler
SourceLoader.java<br/><ref>Committer's log entry: </ref>Added a SourceLoader
interface to the compiler package. This interface can
+ be used to plug in an external document loader for imported and/or
+ included stylesheets. The trax.TransformerImpl class is updated to
+ implement this interface and act as an adapter between the internal XSLTC
+ SourceLoader interface and TrAX's URIResolver interface.
+ PR: n/a
+ Obtained from: n/a
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/20/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/runtime
Constants.java<br/><ref>Committer's log entry: </ref>Added the
NAMESPACE_FEATURE constant. Checked to see if it was in
+ org.xml.sax first, but it wasn't. Since this constant is used both
+ at compile and runtime, it should be in the runtime Constants class
+ as well as the compile Constants class. Runtime code needs to be
+ kept separate from the compile time code.<br/><br/></li><li><ref>Committed
by </ref>[EMAIL PROTECTED]<ref> on </ref>07/20/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/runtime DefaultRun.java
java/src/org/apache/xalan/xsltc/cmdline Transform.java
- java/src/org/apache/xalan/xsltc/compiler Output.java
- Stylesheet.java
- java/src/org/apache/xalan/xsltc/runtime
- AbstractTranslet.java DefaultRun.java
- DefaultSAXOutputHandler.java SAXAdapter.java
- StringValueHandler.java TextOutput.java
- TransletOutputBase.java<br/><ref>Committer's log entry: </ref>A series of
changes to the XSLTC output handling to accomodate the
- set/getOutputSettings() methods in the TrAX API.
+ java/src/org/apache/xalan/xsltc/dom DocumentCache.java<br/><ref>Committer's
log entry: </ref>Added import for org.apache.xalan.xsltc.runtime.Constants;
+ to the runtime classes that need to use the NAMESPACE_FEATURE constant
+ and had them reference it rather than define it
themselves.<br/><br/></li><li><ref>Committed by </ref>[EMAIL PROTECTED]<ref> on
</ref>07/20/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler XSLTC.java<br/><ref>Committer's
log entry: </ref>minor changes for DOMSource impl
support<br/><br/></li><li><ref>Committed by </ref>[EMAIL PROTECTED]<ref> on
</ref>07/20/2001<br/><ref>Modified: </ref>java/src/org/apache/xalan/xsltc/trax
+ TransformerFactoryImpl.java<br/><ref>Committer's log entry: </ref>Added
DOMSource support for stylesheet<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/20/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/trax DOM2SAX.java<br/><ref>Committer's
log entry: </ref>updated convertor which supports DOMSource
impl<br/><br/></li><li><ref>Committed by </ref>[EMAIL PROTECTED]<ref> on
</ref>07/23/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler XSLTC.java<br/><ref>Committer's
log entry: </ref>Added a small fix to the compiler (XSLTC.java) to make sure
that the SAX
+ parser reference was not reset prior to compiling the translet.
PR: n/a
Obtained from: n/a
Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/19/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/runtime
TextOutput.java<br/><ref>Committer's log entry: </ref>Fixed the handling of the
'cdata-section-elements' attribute of the
- <xsl:output> element. Previously we output the whole element,
including
- all contents, child elements and the start- and end-tags in one big
- CDATA section. We now correctly output only immediate text child-nodes
- as CDATA sections.
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/23/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/trax
+ TransformerFactoryImpl.java TransformerImpl.java<br/><ref>Committer's log
entry: </ref>Added support for DOMSource as input to our Transformer
implementation<br/><br/></li><li><ref>Committed by </ref>[EMAIL PROTECTED]<ref>
on </ref>07/23/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler Import.java
+ Sort.java
+ java/src/org/apache/xalan/xsltc/dom NodeSortRecord.java
+ NodeSortRecordFactory.java<br/><ref>Committer's log entry: </ref>For some
reason I decided to optimise the <xsl:sort> functionaility. The
+ sort records we used has some global values stored behind methods, but are
+ now static fields. Somewhat faster.
PR: n/a
Obtained from: n/a
Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/19/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc Translet.java
- java/src/org/apache/xalan/xsltc/dom LoadDocument.java
- java/src/org/apache/xalan/xsltc/runtime
- AbstractTranslet.java
- java/src/org/apache/xalan/xsltc/trax
TransformerImpl.java<br/><ref>Committer's log entry: </ref>Added implementation
of get/setOutputProperties() of the Transformer
- implementation.
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/23/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler Import.java
+ Include.java<br/><ref>Committer's log entry: </ref>Fix for problem with
import & include introduced with the latest updated
+ for TrAX URIResolvers.
PR: n/a
Obtained from: n/a
Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/19/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/dom
DocumentCache.java<br/><ref>Committer's log entry: </ref>Added (a rather
brutal) handling of all Exceptions thrown in the
- DocumentCache.getLastModified() method. This class is provided only
- as an example/skeleton, but should still - for various reasons -
- be provided in the base 'xsltc.dom' package.
- PR: n/a
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/27/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/dom DOMImpl.java<br/><ref>Committer's log
entry: </ref>Integrated fix for problem with count() function for certain
iterators.
+ PR: Bugzilla 1407
Obtained from: n/a
- Submitted by: [EMAIL PROTECTED]
- Reviewed by: [EMAIL PROTECTED]<br/><br/></li></ul>
+ Submitted by: John Howard <[EMAIL PROTECTED]>
+ Reviewed by: Morten Jorgensen <[EMAIL PROTECTED]><br/><br/></li></ul>
</s3>
<anchor name="xsltcconf"/>
<s3 title="XSLT 1.0 Conformance and Extensions">
@@ -315,7 +226,162 @@
<anchor name="xsltchistory"/>
<s3 title="History of XSLTC software changes">
<p>The following sections list XSLT changes back to the incorporation of
XSLTC into &xslt4c;.</p>
-<s4 title="XSLTC source code updates for the &xslt4j; 2.2.D releases">
+<s4 title="XSLTC source code updates for &xslt4j; 2.2.D7">
+<ul><li><ref>Committed by </ref>[EMAIL PROTECTED]<ref> on
</ref>07/09/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler Constants.java
+ Param.java StepPattern.java Stylesheet.java
+ SyntaxTreeNode.java Variable.java WithParam.java
+ java/src/org/apache/xalan/xsltc/dom KeyIndex.java
+ java/src/org/apache/xalan/xsltc/runtime
+ AbstractTranslet.java BasisLibrary.java
+ DefaultRun.java Parameter.java TextOutput.java<br/><ref>Committer's log
entry: </ref>Loads of small fixes and a good few comments added to the source
code.
+ The major fixes are one fix for variable/parameter handlingi and one for
+ key/id index handling. XSLTC now correctly updates the value of parameters
+ with changing default values, such as with
+ <xsl:param name="foo" select="current()"/>.
+ Also updated bit-arrays to correctly return single node ids, so that the
+ key() and id() functions return the correct number of nodes (they would
+ sometimes skip the first node in the defined node set for the key/id).
+ Added some structure and loads of comments to the Translet base class.
+ PR: n/a
+ Obtained from: n/a
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/10/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler
+ AncestorPattern.java AttributeSet.java
+ CallTemplate.java CastExpr.java EqualityExpr.java
+ Expression.java FunctionCall.java If.java
+ Import.java Include.java Mode.java NameBase.java
+ Param.java ParameterRef.java Parser.java
+ StepPattern.java SyntaxTreeNode.java Template.java
+ TestSeq.java Variable.java VariableRef.java
+ XSLTC.java XslAttribute.java
+ java/src/org/apache/xalan/xsltc/compiler/util ErrorMsg.java
+ ReferenceType.java
+ java/src/org/apache/xalan/xsltc/dom MultiDOM.java
+ StepIterator.java
+ java/src/org/apache/xalan/xsltc/runtime
BasisLibrary.java<br/><ref>Committer's log entry: </ref>A wide range of fixes
provided by Erwin Bolwidt.
+ o) fix for long IF and GOTO instructions inside translets.
+ 'wide' GOTOs are now used (GOTO_W) instead of plain GOTO
+ to allow longer jump offsets
+ o) fix for illegal field/method names in the translet.
+ Methods and fields no longer contain the '.' or '-' characters
+ o) source filenames (and if possible also line numbers) are now
+ provided with error and warning messages
+ o) external functions that are not supported by XSLTC do not cause
+ compile errors. They will still cause a warning message at
+ compile-time if they are not wrapped in proper <xsl:if> or
+ <xsl:when> elements that test on the availability of the function,
+ and will cause a runtime error if the function is attempted called.
+ o) added type cast from reference-type to node-type
+ o) some other smaller fixes to prevent null-pointer exceptions
+ Other changes:
+ o) code cleanup and some added comments
+ PR: n/a
+ Obtained from: n/a
+ Submitted by: Erwin Bolwidt <[EMAIL PROTECTED]>
+ Reviewed by: Morten Jorgensen <[EMAIL
PROTECTED]><br/><br/></li><li><ref>Committed by </ref>[EMAIL PROTECTED]<ref>
on </ref>07/12/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler Parser.java
+ SyntaxTreeNode.java XSLTC.java<br/><ref>Committer's log entry:
</ref>Cleaned up the XSLTC compiler class in an attempt to make it more
flexible.
+ This class was originally written as a command-line interface, but it has
+ now grown huge and messy. I separated the command-line stuff from the
+ methods that make up the actual functionality and made some methods public.
+ This is part of the preparation for our new implementation of the JAXP
+ Templates object.
+ PR: n/a
+ Obtained from: n.a
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/12/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/runtime DefaultRun.java<br/><ref>Added:
</ref>java/src/org/apache/xalan/xsltc/cmdline Compile.java
+ Transform.java<br/><ref>Committer's log entry: </ref>Extracted the
command-line stuff from the core XSLTC packages. The command-
+ line handling is now in xalan.xsltc.cmdline.Compile and
+ xalan.xsltc.cmdline.Transform. The command-line stuff is still left in
+ xalan.xsltc.compiler.XSLTC and xalan.xsltc.runtime.DefaultRun for backwards
+ compatability. This should be removed shortly.
+ PR: n/a
+ Obtained from: n/a
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/12/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/cmdline Compile.java
+ java/src/org/apache/xalan/xsltc/compiler XSLTC.java<br/><ref>Added:
</ref>java/src/org/apache/xalan/xsltc/cmdline/getopt GetOpt.java
+ GetOptsException.java IllegalArgumentException.java
+ MissingOptArgException.java
+ java/src/org/apache/xalan/xsltc/trax TemplatesImpl.java
+ TransformerImpl.java<br/><ref>Removed:
</ref>java/src/org/apache/xalan/xsltc/util/getopt GetOpt.java
+ GetOptsException.java IllegalArgumentException.java
+ MissingOptArgException.java<br/><ref>Committer's log entry: </ref>Moved the
org.apache.xalan.xsltc.util.getopt package to
+ org.apache.xalan.xsltc.cmdline.getopt. Also added some skeleton
+ code in a new org.apache.xalan.xsltc.trax directory.
+ PR: n/a
+ Obtained from: n/a
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/12/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/trax
TransletTemplates.java<br/><ref>Committer's log entry: </ref>minor adjustment
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/12/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/trax
+ TransformerFactoryImpl.java<br/><ref>Committer's log entry: </ref>removed
obselete try/catch<br/><br/></li><li><ref>Committed by </ref>[EMAIL
PROTECTED]<ref> on </ref>07/12/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler XSLTC.java
+ java/src/org/apache/xalan/xsltc/runtime
+ AbstractTranslet.java
+ java/src/org/apache/xalan/xsltc/trax TemplatesImpl.java
+ TransformerFactoryImpl.java TransformerImpl.java<br/><ref>Removed:
</ref>java/src/org/apache/xalan/xsltc/trax
TransletTemplates.java<br/><ref>Committer's log entry: </ref>A first stab at
our new TrAX design.`
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/13/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler XSLTC.java
+ java/src/org/apache/xalan/xsltc/trax TemplatesImpl.java
+ TransformerFactoryImpl.java TransformerImpl.java<br/><ref>Committer's log
entry: </ref>A few minor adjustments to yesterdays JAXP/TrAX implementation.
These is one
+ change in the way the compiler (XSLTC) generates bytecode arrays, and the
+ rest is basically a cleanup of error reporting and a few added comments.
+ PR: n/a
+ Obtained from: n/a
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/16/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/dom DocumentCache.java<br/><ref>Added:
</ref>java/src/org/apache/xalan/xsltc/trax
OutputSettings.java<br/><ref>Committer's log entry: </ref>Reduced the refresh
rate of the DocumentCache to 1 second.
+ PR: n/a
+ Obtained from: n/a
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/17/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/dom
DocumentCache.java<br/><ref>Committer's log entry: </ref>Submitted by: Tom Amiro
+ Fixes bug 1591. Changed the lastModified() method to return
+ the correct timestamp for local files beginnig with the "file:"
+ protocol. Incorporated Brian Ewin's suggestion to use URLdecode.
+ Todd Miller and Morten Jorgensen<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/17/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/dom DOMImpl.java
+ java/src/org/apache/xalan/xsltc/trax TemplatesImpl.java
+ TransformerFactoryImpl.java TransformerImpl.java<br/><ref>Committer's log
entry: </ref>Added some javadoc comments to our trax stuff. Added preliminary
support
+ for getting/setting output properties, and for getting/setting URL
resolvers.
+ PR: n/a
+ Obtained from: n/a
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/18/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc TransletOutputHandler.java
+ java/src/org/apache/xalan/xsltc/cmdline Transform.java
+ java/src/org/apache/xalan/xsltc/compiler Output.java
+ Stylesheet.java
+ java/src/org/apache/xalan/xsltc/runtime
+ AbstractTranslet.java DefaultRun.java
+ DefaultSAXOutputHandler.java SAXAdapter.java
+ StringValueHandler.java TextOutput.java
+ TransletOutputBase.java<br/><ref>Committer's log entry: </ref>A series of
changes to the XSLTC output handling to accomodate the
+ set/getOutputSettings() methods in the TrAX API.
+ PR: n/a
+ Obtained from: n/a
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/19/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/runtime
TextOutput.java<br/><ref>Committer's log entry: </ref>Fixed the handling of the
'cdata-section-elements' attribute of the
+ <xsl:output> element. Previously we output the whole element,
including
+ all contents, child elements and the start- and end-tags in one big
+ CDATA section. We now correctly output only immediate text child-nodes
+ as CDATA sections.
+ PR: n/a
+ Obtained from: n/a
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/19/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc Translet.java
+ java/src/org/apache/xalan/xsltc/dom LoadDocument.java
+ java/src/org/apache/xalan/xsltc/runtime
+ AbstractTranslet.java
+ java/src/org/apache/xalan/xsltc/trax
TransformerImpl.java<br/><ref>Committer's log entry: </ref>Added implementation
of get/setOutputProperties() of the Transformer
+ implementation.
+ PR: n/a
+ Obtained from: n/a
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li><li><ref>Committed by
</ref>[EMAIL PROTECTED]<ref> on </ref>07/19/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/dom
DocumentCache.java<br/><ref>Committer's log entry: </ref>Added (a rather
brutal) handling of all Exceptions thrown in the
+ DocumentCache.getLastModified() method. This class is provided only
+ as an example/skeleton, but should still - for various reasons -
+ be provided in the base 'xsltc.dom' package.
+ PR: n/a
+ Obtained from: n/a
+ Submitted by: [EMAIL PROTECTED]
+ Reviewed by: [EMAIL PROTECTED]<br/><br/></li></ul>
+</s4>
+<s4 title="XSLTC source code updates for the &xslt4j; 2.2.D releases up to
and including 2.2.D6">
<ul><li><ref>Committed by </ref>[EMAIL PROTECTED]<ref> on
</ref>05/23/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler Text.java<br/><ref>Committer's
log entry: </ref>bug fix 1403, output escaping
fixed<br/><br/></li><li><ref>Committed by </ref>[EMAIL PROTECTED]<ref> on
</ref>05/23/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/runtime
TextOutput.java<br/><ref>Committer's log entry: </ref>bug fix 1403, output
escaping fixed<br/><br/></li><li><ref>Committed by </ref>[EMAIL PROTECTED]<ref>
on </ref>06/05/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler Parser.java<br/><ref>Committer's
log entry: </ref>stylesheet compilation error listening added for
TrAX support<br/><br/></li><li><ref>Committed by </ref>[EMAIL
PROTECTED]<ref> on </ref>06/05/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/compiler XSLTC.java<br/><ref>Committer's
log entry: </ref>stylesheet compilation error listening added for
TrAX support<br/><br/></li><li><ref>Committed by </ref>[EMAIL
PROTECTED]<ref> on </ref>06/05/2001<br/><ref>Modified:
</ref>java/src/org/apache/xalan/xsltc/runtime
1.18 +264 -5 xml-xalan/java/xdocs/sources/xalan/xsltc_usage.xml
Index: xsltc_usage.xml
===================================================================
RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/xsltc_usage.xml,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- xsltc_usage.xml 2001/07/26 14:04:37 1.17
+++ xsltc_usage.xml 2001/07/27 20:59:18 1.18
@@ -64,7 +64,7 @@
<li><link anchor="compile">Compiling translets from the command
line</link></li>
<li><link anchor="run">Running translets from the command line</link></li>
<li><link anchor="api">Calling XSLTC with the TrAX/JAXP API</link></li>
- <li><link anchor="nativeapi">Calling XSLTC with the native API</link></li>
+ <li><link anchor="native_api">Calling XSLTC with the native API</link></li>
<li><link anchor="constraints">XSLTC usage constraints</link></li>
</ul>
<p>See also: <jump href="xsltc/index.html">XSLTC Design</jump></p>
@@ -385,10 +385,269 @@
new StreamResult(new
FileOutputStream(htmlOutURI)));</source>
<p>For a working sample that illustrates this usage pattern, see <link
idref="samples" anchor="xsltc2">JAXPTransletMultipleTransformations</link>.</p>
</s3>
-</s2>
-<s3 title="Calling XSLTC with the native API">
-<p></p>
-</s3><anchor name="constraints"/>
+</s2><anchor name="native_api"/>
+<s2 title="Calling XSLTC with the native API">
+<p>This section demonstrates how to use the native XSLTC API in a standalone
Java application.</p>
+<p>Processing an XML document with a translet involves three main steps:</p>
+<ol>
+ <li><link anchor="native_compile">Compile the stylesheet to a
translet</link>.</li>
+ <li><link anchor="native_parse">Parse the input XML document</link>.</li>
+ <li><link anchor="native_transform">Use the translet to transform the XML
document</link>.</li>
+</ol><anchor name="native_overview"/>
+<s3 title="Code overview">
+<p>XsltApp.java illustrates the basic structure for coding a transformation
with the native XSLTC API. In the following listing, the method for performing
each of the three steps is an empty shell. The methods are filled in the
listings in subsequent sections.</p>
+<source>import org.apache.xalan.xsltc.Translet;
+import org.apache.xalan.xsltc.dom.DOMImpl;
+
+public class XsltApp {
+ public static void main(String[] args) {
+ XsltApp proc = new XsltApp();
+ proc.run(args);
+ }
+
+ public void run(String[] args) {
+ if (args.length != 2) {
+ System.err.println("Usage:\n\tprocessor <xmlfile>
<xslfile>" +
+ "\n\n\twhere <xmlfile> = xml input filename, and" +
+ "\n\t <xslfile> = stylesheet filename.");
+ System.exit(1);
+ }
+ String xmldocFilename = args[0];
+ String stylesheetFilename = args[1];
+
+ // Compile the stylesheet to a translet
+ Translet translet = compileStylesheet(stylesheetFilename);
+
+ // Parse the input XML document
+ DOMImpl dom = getDOM(xmldocFilename);
+
+ // Transform the XML document against the translet
+ doTransform(translet, dom);
+ System.exit(0);
+ }
+
+ // compile the stylesheet [Empty shell: see below]
+ private Translet compileStylesheet(String stylesheetName) { return null; }
+
+ // parse the input XML document [Empty shell: see below]
+ private DOMImpl getDOM(String xmldocname) { return null; }
+
+ // transform the XML document [Empty shell: see below]
+ private void doTransform(Translet translet, DOMImpl dom) { }
+}</source>
+
+<p>XsltApp takes two command line arguments: the input XML document
filename, and the
+XSL stylesheet filename. The public run() method processes the commandline
args,
+and then carries out the three steps.</p>
+<p>The first step is accomplished by calling the compileStylesheet() method.
This method
+takes the stylesheet filename as input (String), and returns an instance
+of the translet, as type org.apache.xalan.xsltc.Translet.</p>
+
+<p>The input XML document now needs to be parsed. This is accomplished by
the getDOM() method. This method takes the XML document's filename (String)
+and returns the Document Object Model for the document, as an object of
+type org.apache.xalan.xsltc.dom.DOMImpl. </p>
+
+<p>Finally, the transformation prescribed by the stylesheet is carried out by
+calling the doTransform() method. This method takes the translet (compiled
+stylesheet) and the dom (Document Object Model for the XML document) as
+input parameters. In this example, the results of the transformation are
+output to standard output, so this method returns nothing. </p>
+
+<p>If all three steps are carried out successfully, the application exits
with
+a successful (zero) value.</p>
+
+<p>The following sections examine each of the three steps in detail.</p>
+</s3><anchor name="native_compile"/>
+<s3 title="1. Compiling the Stylesheet to a Translet">
+<p>The 'compileStylesheet' method:</p>
+
+<source>import java.io.File;
+import java.net.MalformedURLException;
+import org.apache.xalan.xsltc.compiler.XSLTC;
+...
+ private Translet compileStylesheet(String stylesheetName) {
+ Translet retval = null;
+ String transletName = stylesheetName.substring(0,
+ stylesheetName.indexOf('.'));
+ try {
+ XSLTC xsltc = new XSLTC();
+ xsltc.init();
+ File stylesheet = new File(stylesheetName);
+ xsltc.compile(stylesheet.toURL());
+ Class clazz = Class.forName(transletName);
+ retval = (Translet)clazz.newInstance();
+ }
+ catch (MalformedURLException e) {
+ System.err.println("Could not create URL to stylesheet file: " +
+ stylesheetName + ".\n" + e.getMessage());
+ System.exit(1);
+ }
+ catch (ClassNotFoundException e) {
+ System.err.println("Could not find class file: " +
+ transletName + ".class .\n" + e.getMessage());
+ System.exit(1);
+ }
+ catch (InstantiationException e) {
+ System.err.println("Could not instantiate class file: " +
+ transletName + ".class .\n" + e.getMessage());
+ System.exit(1);
+ }
+ catch (IllegalAccessException e) {
+ System.err.println("Could not instantiate class file: " +
+ transletName + ".class, illegal access.\n" + e.getMessage());
+ System.exit(1);
+ }
+ return retval;
+ }</source>
+
+<p>This method reads in the stylesheet file, compiles it to Java bytecodes
+(the translet), and then writes the bytecodes to the filesystem, as a
+series of .class files. Their base name is derived from the name of the
+stylesheet. </p>
+
+<p>The XSLT compiler object (org.apache.xalan.xsltc.compiler.XSLTC), is
created,
+initialized and then its compile() method is called passing in a URL
+to the stylesheet itself. Once the .class files have been written,
+the translet is instantiated using Java reflection to create the Class
+and then a new instance of the Class as 'retval' of type
+org.apache.xalan.xsltc.Translet. </p>
+
+<p>Notice all of the various exceptions that could be thrown in the process
+have been handled with explicit warning messages and a System.exit with a
non-zero return value.
+In your applications, you may want to handle these exceptions
differently.</p>
+
+</s3><anchor name="native_parse"/>
+<s3 title="2. Parsing the XML Document">
+
+<p>Parsing the input XML document is handled in the getDOM() method:</p>
+
+<source>import java.io.IOException;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.ParserConfigurationException;
+import org.apache.xalan.xsltc.compiler.Constants;
+import org.apache.xalan.xsltc.dom.DTDMonitor;
+import org.xml.sax.XMLReader;
+import org.xml.sax.SAXException;
+...
+ private DTDMonitor _dtdMonitor = null;
+
+ private DOMImpl getDOM(String xmldocname) {
+ final SAXParserFactory factory = SAXParserFactory.newInstance();
+ try {
+ factory.setFeature(Constants.NAMESPACE_FEATURE, true);
+ }
+ catch (Exception e) {
+ factory.setNamespaceAware(true);
+ }
+ final DOMImpl dom = new DOMImpl();
+ dom.setDocumentURI(xmldocname);
+ XMLReader reader = null;
+ SAXParser parser = null;
+ _dtdMonitor = new DTDMonitor();
+ try {
+ parser = factory.newSAXParser();
+ reader = parser.getXMLReader();
+ reader.setContentHandler(dom.getBuilder());
+ _dtdMonitor.handleDTD(reader);
+ reader.parse(xmldocname);
+ }
+ catch (ParserConfigurationException e) {
+ System.err.println("SAX Parser is not configured properly.\n"+
+ e.getMessage());
+ System.exit(1);
+ }
+ catch (SAXException e ) {
+ System.err.println("SAX Parser could not be created.\n"+
+ e.getMessage());
+ System.exit(1);
+ }
+ catch (IOException e ) {
+ System.err.println("XML Reader could not read xml document '"+
+ xmldocname + "'," + e.getMessage());
+ System.exit(1);
+ }
+ return dom;
+ }</source>
+
+<p>The method parses the input XML document and creates a Document
+Object Model to return to the run() method for later use. To parse the
+document we use a javax.xml.parsers.SAXParser, from the JAXP. The JAXP
+model uses a factory method; accordingly we first create the factory,
+which is of type javax.xml.parsers.SAXParserFactory. After configuring
+the factory to handle namespaces, the procedure gets an org.xml.sax.XMLReader
+from the SAXParser. The reader is registered
+with the class DTDMonitor, and then the reader is instructed to parse
+the XML document. The DOMImpl object is returned to the main() method.</p>
+
+<note>Before the document is parsed, the DOMImpl is configured with the
+XML document's URI with a call to the setDocumentURI() method. This
+is necessary to define the origin of the document from which the DOM tree
+is built. This information is needed for xsl:import, xsl:include, and
+the document() function.</note>
+</s3><anchor name="native_transform"/>
+<s3 title="3. Doing the Transformation">
+
+<p>Now everything is set to carry out the XSL transformation. The
doTransform()
+method takes a reference to the Translet object generated
+from the stylesheet, and the DOMImpl object created from the XML
document.</p>
+
+<source>import java.io.IOException;
+import org.apache.xalan.xsltc.runtime.DefaultSAXOutputHandler;
+import org.apache.xalan.xsltc.runtime.TextOutput;
+import org.apache.xalan.xsltc.runtime.AbstractTranslet;
+import org.apache.xalan.xsltc.TransletException;
+...
+ private void doTransform(Translet translet, DOMImpl dom) {
+ DefaultSAXOutputHandler outputhandlr = null;
+ TextOutput textoutput = null;
+ try {
+ outputhandlr= new DefaultSAXOutputHandler(System.out, "utf-8");
+ textoutput = new TextOutput(outputhandlr, "utf-8");
+ }
+ catch (IOException e) {
+ System.err.println("Could not create SAX Output Handler."+
+ e.getMessage());
+ System.exit(1);
+ }
+
+ // for XSL keys
+ AbstractTranslet absTranslet = (AbstractTranslet)translet;
+ absTranslet.setIndexSize(dom.getSize());
+ _dtdMonitor.buildIdIndex(dom, 0, absTranslet);
+
+ try {
+ absTranslet.transform(dom, textoutput);
+ }
+ catch (TransletException e) {
+ System.err.println("Could not transform XML document."+
+ e.getMessage());
+ System.exit(1);
+ }
+ }</source>
+
+<p>The Translet's transform() method takes two arguments: the DOMImpl
+reference created in the getDOM() method, and an xsltc.runtime.TextOutput
+object. TextOutput is a ContentHandler wrapper class that implements the
+xsltc.TransletOutputHandler interface. In this example, the content
+handler (DefaultSAXOutputHandler) is wrapped.</p>
+
+<p>Translet is an interface. AbstractTranslet is a class that implements that
+interface. Before the transform() method is called, setIndexSize(int)
+is called to pass in the maximum DOM size to the translet and the DTDMonitor
+is called to build the node index that the Key (xsl:key implementation)
+class uses. This is a general case, if you are not using keys, then you
+do not need to set the index size, consequently you would not need to
+work with the AbstractTranslet either. In that case, you can use the
+Translet directly by calling translet.transform(dom, textoutput). </p>
+</s3><anchor name="native_conclusion"/>
+<s3 title="Conclusion">
+<p>The native XSLT compiler API provides a way to compile an XSL stylesheet
+into a translet. The translet can then be used to transform the DOMImpl
+of an input XML document. This example demonstrated how to compile a
+stylesheet into a translet, parse an input XML document, and then transform
+the XML document using the translet.</p>
+</s3></s2><anchor name="constraints"/>
<s2 title="XSLTC usage constraints">
<p>See <link idref="readme" anchor="xsltcconf">Conformance issues</link> and
<link idref="readme"
anchor="xsltcknownproblems">Known problems</link>.</p>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]