[stylebook] 01/34: Import tarball and sources.
Emmanuel Bourg
ebourg-guest at moszumanska.debian.org
Thu Mar 29 10:54:16 BST 2018
This is an automated email from the git hooks/post-receive script.
ebourg-guest pushed a commit to branch master
in repository stylebook.
commit 829530d2a231432dd156826f18a4b9afbb89b72c
Author: Marcus Better <marcus at better.se>
Date: Thu Nov 9 10:26:06 2006 +0000
Import tarball and sources.
---
LICENSE.txt | 56 +++
bin/stylebook-1.0-b1.LICENSE.txt | 50 +++
bin/stylebook-1.0-b2.LICENSE.txt | 50 +++
bin/xalan.LICENSE.txt | 50 +++
bin/xerces.LICENSE.txt | 50 +++
build.bat | 23 ++
build.xml | 106 +++++
docs/blocks.xml | 99 +++++
docs/book.xml | 18 +
docs/changes.xml | 26 ++
docs/characters.xml | 28 ++
docs/entities.ent | 3 +
docs/faqs-1.xml | 86 ++++
docs/faqs-2.xml | 86 ++++
docs/faqs.xml | 86 ++++
docs/links.xml | 65 +++
docs/readme.xml | 10 +
docs/run.bat | 2 +
docs/sections.xml | 78 ++++
docs/test.jpg | Bin 0 -> 6263 bytes
src/org/apache/stylebook/AbstractComponent.java | 56 +++
src/org/apache/stylebook/BasicContext.java | 39 ++
src/org/apache/stylebook/BasicEngine.java | 200 +++++++++
src/org/apache/stylebook/BasicEntry.java | 85 ++++
src/org/apache/stylebook/BasicParameters.java | 90 ++++
src/org/apache/stylebook/Component.java | 29 ++
src/org/apache/stylebook/ComponentFactory.java | 122 ++++++
src/org/apache/stylebook/CreationContext.java | 23 ++
src/org/apache/stylebook/CreationException.java | 125 ++++++
src/org/apache/stylebook/Engine.java | 69 ++++
src/org/apache/stylebook/Entry.java | 26 ++
.../apache/stylebook/InitializationException.java | 37 ++
src/org/apache/stylebook/Loader.java | 77 ++++
src/org/apache/stylebook/LoadingException.java | 37 ++
src/org/apache/stylebook/Logger.java | 25 ++
src/org/apache/stylebook/NodeListParameters.java | 35 ++
src/org/apache/stylebook/Parameters.java | 62 +++
src/org/apache/stylebook/Parser.java | 54 +++
src/org/apache/stylebook/Printer.java | 25 ++
src/org/apache/stylebook/Processor.java | 24 ++
src/org/apache/stylebook/Producer.java | 24 ++
src/org/apache/stylebook/Project.java | 139 +++++++
src/org/apache/stylebook/ResourceEntry.java | 53 +++
src/org/apache/stylebook/StreamHandler.java | 50 +++
src/org/apache/stylebook/StyleBook.java | 163 ++++++++
src/org/apache/stylebook/URLHandler.java | 124 ++++++
src/org/apache/stylebook/data/engine.dtd | 38 ++
src/org/apache/stylebook/data/engine.xml | 31 ++
src/org/apache/stylebook/data/loader.dtd | 19 +
src/org/apache/stylebook/data/loader.xml | 17 +
src/org/apache/stylebook/data/project.dtd | 57 +++
src/org/apache/stylebook/data/project.xml | 47 +++
src/org/apache/stylebook/data/stylebook.properties | 16 +
.../apache/stylebook/parsers/AbstractParser.java | 30 ++
.../apache/stylebook/parsers/CachingParser.java | 118 ++++++
src/org/apache/stylebook/parsers/XercesParser.java | 132 ++++++
src/org/apache/stylebook/printers/HTMLPrinter.java | 314 ++++++++++++++
.../apache/stylebook/printers/HTMLSerializer.java | 48 +++
.../apache/stylebook/printers/ImagePrinter.java | 274 +++++++++++++
src/org/apache/stylebook/printers/XMLPrinter.java | 241 +++++++++++
.../stylebook/processors/ImportProcessor.java | 109 +++++
.../apache/stylebook/processors/NullProcessor.java | 28 ++
.../stylebook/processors/Xalan2Processor.java | 113 ++++++
.../stylebook/processors/XalanProcessor.java | 145 +++++++
.../stylebook/producers/ContextProducer.java | 44 ++
.../stylebook/producers/DirectoryProducer.java | 129 ++++++
.../apache/stylebook/producers/ParserProducer.java | 28 ++
.../stylebook/producers/ProjectProducer.java | 30 ++
styles/apachexml/dtd/blocks.ent | 57 +++
styles/apachexml/dtd/book.dtd | 49 +++
styles/apachexml/dtd/changes.dtd | 24 ++
styles/apachexml/dtd/characters.ent | 297 ++++++++++++++
styles/apachexml/dtd/document.dtd | 19 +
styles/apachexml/dtd/faqs.dtd | 19 +
styles/apachexml/dtd/links.ent | 24 ++
styles/apachexml/dtd/markup.ent | 21 +
styles/apachexml/graphics/button-a.gif | Bin 0 -> 179 bytes
styles/apachexml/graphics/button-b.gif | Bin 0 -> 154 bytes
styles/apachexml/loader.xml | 9 +
styles/apachexml/resources/bottom.gif | Bin 0 -> 1075 bytes
styles/apachexml/resources/button-asf-hi.gif | Bin 0 -> 1535 bytes
styles/apachexml/resources/button-asf-lo.gif | Bin 0 -> 1519 bytes
styles/apachexml/resources/button-w3c-hi.gif | Bin 0 -> 1503 bytes
styles/apachexml/resources/button-w3c-lo.gif | Bin 0 -> 1495 bytes
styles/apachexml/resources/button-xml-hi.gif | Bin 0 -> 1464 bytes
styles/apachexml/resources/button-xml-lo.gif | Bin 0 -> 1458 bytes
styles/apachexml/resources/close.gif | Bin 0 -> 498 bytes
styles/apachexml/resources/dot.gif | Bin 0 -> 49 bytes
styles/apachexml/resources/join.gif | Bin 0 -> 1268 bytes
styles/apachexml/resources/line.gif | Bin 0 -> 924 bytes
styles/apachexml/resources/logo.gif | Bin 0 -> 3223 bytes
styles/apachexml/resources/note.gif | Bin 0 -> 295 bytes
styles/apachexml/resources/right.gif | Bin 0 -> 1202 bytes
styles/apachexml/resources/script.js | 21 +
styles/apachexml/resources/separator.gif | Bin 0 -> 110 bytes
styles/apachexml/resources/void.gif | Bin 0 -> 49 bytes
styles/apachexml/stylesheets/any2header.xsl | 29 ++
styles/apachexml/stylesheets/any2project.xsl | 21 +
styles/apachexml/stylesheets/book2group.xsl | 34 ++
styles/apachexml/stylesheets/book2project.xsl | 289 +++++++++++++
styles/apachexml/stylesheets/changes2document.xsl | 43 ++
styles/apachexml/stylesheets/context2footer.xsl | 29 ++
styles/apachexml/stylesheets/context2label.xsl | 25 ++
styles/apachexml/stylesheets/directory2project.xsl | 34 ++
styles/apachexml/stylesheets/document2html.xsl | 451 +++++++++++++++++++++
styles/apachexml/stylesheets/faqs2document.xsl | 53 +++
styles/apachexml/stylesheets/group2document.xsl | 31 ++
styles/christmas/christmas.psd | Bin 0 -> 189723 bytes
styles/christmas/dtd/blocks.ent | 37 ++
styles/christmas/dtd/blocks1.ent | 40 ++
styles/christmas/dtd/book.dtd | 47 +++
styles/christmas/dtd/changes.dtd | 24 ++
styles/christmas/dtd/characters.ent | 297 ++++++++++++++
styles/christmas/dtd/document.dtd | 19 +
styles/christmas/dtd/document1.dtd | 40 ++
styles/christmas/dtd/faqs.dtd | 19 +
styles/christmas/dtd/links.ent | 20 +
styles/christmas/dtd/links1.ent | 29 ++
styles/christmas/dtd/markup.ent | 21 +
styles/christmas/dtd/markup1.ent | 21 +
styles/christmas/graphics/label-1.gif | Bin 0 -> 1980 bytes
styles/christmas/graphics/label-2.gif | Bin 0 -> 22325 bytes
styles/christmas/graphics/label-3.gif | Bin 0 -> 1894 bytes
styles/christmas/loader.xml | 9 +
styles/christmas/loader1.xml | 9 +
styles/christmas/resources/green-bar-1.gif | Bin 0 -> 80 bytes
styles/christmas/resources/green-bar-2.gif | Bin 0 -> 62 bytes
styles/christmas/resources/green-bar.gif | Bin 0 -> 44 bytes
styles/christmas/resources/green-hi.gif | Bin 0 -> 41 bytes
styles/christmas/resources/green-lo.gif | Bin 0 -> 41 bytes
styles/christmas/resources/logo-1.gif | Bin 0 -> 3038 bytes
styles/christmas/resources/logo-2.gif | Bin 0 -> 1089 bytes
styles/christmas/resources/logo-3.gif | Bin 0 -> 1289 bytes
styles/christmas/resources/note.gif | Bin 0 -> 295 bytes
styles/christmas/resources/red-hi.gif | Bin 0 -> 41 bytes
styles/christmas/resources/red-lo.gif | Bin 0 -> 41 bytes
styles/christmas/resources/script.js | 17 +
styles/christmas/resources/separator.gif | Bin 0 -> 1021 bytes
styles/christmas/resources/void.gif | Bin 0 -> 49 bytes
styles/christmas/resources/www.apache.org.gif | Bin 0 -> 566 bytes
styles/christmas/resources/www.w3.org.gif | Bin 0 -> 487 bytes
styles/christmas/resources/www.xml.org.gif | Bin 0 -> 511 bytes
styles/christmas/resources/xml.apache.org.gif | Bin 0 -> 528 bytes
styles/christmas/stylesheets/any2header.xsl | 31 ++
styles/christmas/stylesheets/any2project.xsl | 21 +
styles/christmas/stylesheets/book2group.xsl | 34 ++
styles/christmas/stylesheets/book2project.xsl | 290 +++++++++++++
styles/christmas/stylesheets/book2project1.xsl | 289 +++++++++++++
styles/christmas/stylesheets/changes2document.xsl | 43 ++
styles/christmas/stylesheets/context2footer.xsl | 29 ++
styles/christmas/stylesheets/context2label.xsl | 27 ++
styles/christmas/stylesheets/directory2project.xsl | 34 ++
styles/christmas/stylesheets/document2html.xsl | 403 ++++++++++++++++++
styles/christmas/stylesheets/document2html1.xsl | 404 ++++++++++++++++++
styles/christmas/stylesheets/faqs2document.xsl | 53 +++
styles/christmas/stylesheets/group2document.xsl | 31 ++
styles/christmas/vineritc.ttf | Bin 0 -> 100104 bytes
styles/ibm-style/dtd/blocks.ent | 42 ++
styles/ibm-style/dtd/book.dtd | 47 +++
styles/ibm-style/dtd/changes.dtd | 24 ++
styles/ibm-style/dtd/characters.ent | 297 ++++++++++++++
styles/ibm-style/dtd/document.dtd | 19 +
styles/ibm-style/dtd/faqs.dtd | 19 +
styles/ibm-style/dtd/links.ent | 20 +
styles/ibm-style/dtd/markup.ent | 21 +
styles/ibm-style/graphics/footer.gif | Bin 0 -> 352 bytes
styles/ibm-style/graphics/header.gif | Bin 0 -> 8530 bytes
styles/ibm-style/graphics/label-1.gif | Bin 0 -> 537 bytes
styles/ibm-style/graphics/label-2.gif | Bin 0 -> 361 bytes
styles/ibm-style/graphics/label-3.gif | Bin 0 -> 307 bytes
styles/ibm-style/loader.xml | 9 +
styles/ibm-style/resources/button-awk-0.gif | Bin 0 -> 1163 bytes
styles/ibm-style/resources/button-awk-1.gif | Bin 0 -> 1102 bytes
styles/ibm-style/resources/button-dev-0.gif | Bin 0 -> 1173 bytes
styles/ibm-style/resources/button-dev-1.gif | Bin 0 -> 1097 bytes
styles/ibm-style/resources/button-ibm-0.gif | Bin 0 -> 774 bytes
styles/ibm-style/resources/button-ibm-1.gif | Bin 0 -> 749 bytes
styles/ibm-style/resources/note.gif | Bin 0 -> 295 bytes
styles/ibm-style/resources/script.js | 17 +
styles/ibm-style/resources/separator.gif | Bin 0 -> 104 bytes
styles/ibm-style/resources/topbar.gif | Bin 0 -> 263 bytes
styles/ibm-style/resources/void.gif | Bin 0 -> 49 bytes
styles/ibm-style/stylesheets/any2header.xsl | 37 ++
styles/ibm-style/stylesheets/any2project.xsl | 21 +
styles/ibm-style/stylesheets/book2group.xsl | 34 ++
styles/ibm-style/stylesheets/book2project.xsl | 303 ++++++++++++++
styles/ibm-style/stylesheets/changes2document.xsl | 43 ++
styles/ibm-style/stylesheets/context2footer.xsl | 29 ++
styles/ibm-style/stylesheets/context2label.xsl | 34 ++
styles/ibm-style/stylesheets/directory2project.xsl | 34 ++
styles/ibm-style/stylesheets/document2html.xsl | 387 ++++++++++++++++++
styles/ibm-style/stylesheets/faqs2document.xsl | 53 +++
styles/ibm-style/stylesheets/group2document.xsl | 31 ++
193 files changed, 10211 insertions(+)
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..46a5d36
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,56 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ *
+ * Copyright (c) 1999 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ * not be used to endorse or promote products derived from this
+ * software without prior written permission. For written
+ * permission, please contact apache at apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * nor may "Apache" appear in their name, without prior written
+ * permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation and was
+ * originally based on software copyright (c) 1999, International
+ * Business Machines, Inc., http://www.apache.org. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
diff --git a/bin/stylebook-1.0-b1.LICENSE.txt b/bin/stylebook-1.0-b1.LICENSE.txt
new file mode 100644
index 0000000..85486bf
--- /dev/null
+++ b/bin/stylebook-1.0-b1.LICENSE.txt
@@ -0,0 +1,50 @@
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Apache Cocoon" and "Apache Software Foundation" must not be
+ used to endorse or promote products derived from this software without
+ prior written permission. For written permission, please contact
+ apache at apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation and was originally created by
+ Stefano Mazzocchi <stefano at apache.org>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+*/
diff --git a/bin/stylebook-1.0-b2.LICENSE.txt b/bin/stylebook-1.0-b2.LICENSE.txt
new file mode 100644
index 0000000..85486bf
--- /dev/null
+++ b/bin/stylebook-1.0-b2.LICENSE.txt
@@ -0,0 +1,50 @@
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Apache Cocoon" and "Apache Software Foundation" must not be
+ used to endorse or promote products derived from this software without
+ prior written permission. For written permission, please contact
+ apache at apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation and was originally created by
+ Stefano Mazzocchi <stefano at apache.org>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+*/
diff --git a/bin/xalan.LICENSE.txt b/bin/xalan.LICENSE.txt
new file mode 100644
index 0000000..85486bf
--- /dev/null
+++ b/bin/xalan.LICENSE.txt
@@ -0,0 +1,50 @@
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Apache Cocoon" and "Apache Software Foundation" must not be
+ used to endorse or promote products derived from this software without
+ prior written permission. For written permission, please contact
+ apache at apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation and was originally created by
+ Stefano Mazzocchi <stefano at apache.org>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+*/
diff --git a/bin/xerces.LICENSE.txt b/bin/xerces.LICENSE.txt
new file mode 100644
index 0000000..85486bf
--- /dev/null
+++ b/bin/xerces.LICENSE.txt
@@ -0,0 +1,50 @@
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Apache Cocoon" and "Apache Software Foundation" must not be
+ used to endorse or promote products derived from this software without
+ prior written permission. For written permission, please contact
+ apache at apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation and was originally created by
+ Stefano Mazzocchi <stefano at apache.org>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+*/
diff --git a/build.bat b/build.bat
new file mode 100755
index 0000000..683b367
--- /dev/null
+++ b/build.bat
@@ -0,0 +1,23 @@
+ at echo off
+echo Xerces-Java Build System
+echo ------------------------
+
+if "%JAVA_HOME%" == "" goto error
+
+set TOOLS_DIR=../xml-xerces/java/tools
+set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%TOOLS_DIR%\ant.jar;%TOOLS_DIR%\xerces.jar;%TOOLS_DIR%\xalan.jar;%TOOLS_DIR%\stylebook-1.0-b2.jar;%TOOLS_DIR%\style-apachexml.jar;
+set ANT_HOME=%TOOLS_DIR%
+
+echo Building with classpath %LOCALCLASSPATH%
+echo Starting Ant...
+%JAVA_HOME%\bin\java.exe -Dant.home="%ANT_HOME%" -classpath "%LOCALCLASSPATH%" org.apache.tools.ant.Main %1 %2 %3 %4 %5
+goto end
+
+:error
+echo "ERROR: JAVA_HOME not found in your environment."
+echo "Please, set the JAVA_HOME variable in your environment to match the"
+echo "location of the Java Virtual Machine you want to use."
+
+:end
+set LOCALCLASSPATH=
+ at echo on
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..a245ae5
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0"?>
+
+<!-- ===================================================================
+
+ Build file for Stylebook
+
+Notes:
+ This is a build file for use with the Jakarta Ant java build tool.
+
+Installation Instructions:
+ To install Ant on your system, you need to checkout the
+ "jakarta-tools" CVS module. Then you should place the files
+ - ant.jar
+ - projectx-tr2.jar
+ - javac.jar
+ in your classpath. (XML parser abstraction is currently in
+ the todo list, volunteers welcome!)
+
+Build Instructions:
+ To build, run
+
+ java org.apache.tools.ant.Main
+
+ on the directory where this file is located.
+
+ Note: See build.bat in this directory for info on setting up your classpath
+ to build Stylebook. If you are using the compile2/package2 option to build
+ a version of Stylebook that works with Xalan-J 2, Xalan-J 2 (NOT Xalan-J 1) must be on the
+ classpath and an up-to-date version of Xerces-J with javax.xml.parsers must also be on the
+ classpath.
+ Donald Leslie <donald_leslie at lotus.com>
+ 9-11-00
+
+Authors:
+ Stefano Mazzocchi <stefano at apache.org>
+
+Copyright:
+ Copyright (c) 1999 The Apache Software Foundation.
+
+ $Id: build.xml 313292 2004-12-14 15:54:50Z dims $
+
+==================================================================== -->
+
+<project name="Stylebook" default="package2" basedir=".">
+
+ <target name="init">
+ <property name="name" value="stylebook"/>
+ <property name="version" value="1.0-b2"/>
+ <property name="version-xalan-2" value="1.0-b3_xalan-2"/> <!-- Version to use with Xalan-J 2 -->
+
+ <property name="build.compiler" value="classic"/>
+ <property name="debug" value="off"/>
+
+ <property name="build.dir" value="./build"/>
+ <property name="build.src" value="${build.dir}/src"/>
+ <property name="build.dest" value="${build.dir}/classes"/>
+ <property name="src.dir" value="./src"/>
+ <property name="bin.dir" value="./bin"/>
+ <condition property="sun.codec.present" >
+ <available classname="com.sun.image.codec.jpeg.JPEGCodec"/>
+ </condition>
+ </target>
+
+ <target name="prepare" depends="init">
+ <mkdir dir="${build.dir}"/>
+ <mkdir dir="${build.src}"/>
+ <mkdir dir="${build.dest}"/>
+ <copy todir="${build.src}">
+ <fileset dir="${src.dir}"/>
+ </copy>
+ </target>
+
+ <!-- If compiling version to run with Xalan-J 1, must not include Xalan2Processor in the compile.
+ If compiling version to run with Xalan-J 2, must not include XalanProcessor in the compile. -->
+
+ <target name="compile" depends="prepare">
+ <javac srcdir="${build.src}" excludes="org/apache/stylebook/processors/Xalan2Processor.java" destdir="${build.dest}" classpath="${classpath}" debug="${debug}"/>
+ <copy todir="${build.dest}/org/apache/stylebook/data">
+ <fileset dir="${build.src}/org/apache/stylebook/data"/>
+ </copy>
+ </target>
+
+ <target name="package" depends="compile">
+ <jar jarfile="${bin.dir}/${name}-${version}.jar" basedir="${build.dest}" includes="org/**"/>
+ </target>
+
+<!--Compile and Package to work with Xalan-J 2 -->
+ <target name="compile2" depends="prepare">
+ <javac srcdir="${src.dir}" excludes="org/apache/stylebook/processors/XalanProcessor.java" destdir="${build.dest}" debug="${debug}">
+ <exclude name="**/org/apache/stylebook/processors/XalanProcessor.java"/>
+ <exclude name="**/org/apache/stylebook/printers/ImagePrinter.java" unless="sun.codec.present"/>
+ </javac>
+ <copy todir="${build.dest}/org/apache/stylebook/data">
+ <fileset dir="${build.src}/org/apache/stylebook/data"/>
+ </copy>
+ </target>
+ <target name="package2" depends="compile2">
+ <replace file="${build.dest}/org/apache/stylebook/data/engine.xml" token="XalanProcessor" value="Xalan2Processor"/>
+ <jar jarfile="${bin.dir}/${name}-${version-xalan-2}.jar" basedir="${build.dest}" includes="org/**"/>
+ </target>
+
+ <target name="clean">
+ <deltree dir="${build.dir}"/>
+ </target>
+
+</project>
diff --git a/docs/blocks.xml b/docs/blocks.xml
new file mode 100644
index 0000000..907a5b2
--- /dev/null
+++ b/docs/blocks.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<!DOCTYPE s1 SYSTEM "sbk:/style/dtd/document.dtd">
+
+<s1 title="Blocks Test File">
+ <p>
+ This is a regular paragraph. Senatus haec intellegit. consul videt; hic
+ tamen vivit. Vivit? immo vero etiam in senatum venit, fit publici
+ consilii particeps, notat et designat oculis ad caedem unum quemque
+ nostrum.
+ </p>
+ <s2 title="This is an <s2 ...> section">
+ <p>
+ This is a regular paragraph. Senatus haec intellegit. consul videt; hic
+ tamen vivit. Vivit? immo vero etiam in senatum venit, fit publici
+ consilii particeps, notat et designat oculis ad caedem unum quemque
+ nostrum.
+ </p>
+ <note>
+ This is a <note>. Nos autem fortes viri satis facere rei
+ publicae videmur, si istius furorem ac tela vitemus. Ad mortem te,
+ Catilina, duci iussu consulis iam pridem oportebat, in te conferri
+ pestem, quam tu in nos machinaris. An vero vir amplissumus, P. Scipio,
+ pontifex maximus, Ti. Gracchum mediocriter labefactantem statum rei
+ publicae privatus interfecit.
+ </note>
+ <p>
+ This is a regular paragraph. Senatus haec intellegit. consul videt; hic
+ tamen vivit. Vivit? immo vero etiam in senatum venit, fit publici
+ consilii particeps, notat et designat oculis ad caedem unum quemque
+ nostrum.
+ </p>
+ <ul>
+ <li>Element number one of an unordered list.</li>
+ <li>Element number two of an unordered list.</li>
+ <li>Element number three of an unordered list.</li>
+ <li>Element number four of an unordered list.</li>
+ </ul>
+ <ol>
+ <li>Element number one of an ordered list.</li>
+ <li>Element number two of an ordered list.</li>
+ <li>Element number three of an ordered list.</li>
+ <li>Element number four of an ordered list.</li>
+ </ol>
+ <source><![CDATA[
+//This is some source code in specified in <source>
+
+public class Source {
+ private int errors=0;
+
+ public static void main(String argv[]) {
+ if (argv.length!=1) {
+ System.out.println("Command Line Error");
+ }
+ }
+}]]></source>
+ <p>
+ This is a regular paragraph. Senatus haec intellegit. consul videt; hic
+ tamen vivit. Vivit? immo vero etiam in senatum venit, fit publici
+ consilii particeps, notat et designat oculis ad caedem unum quemque
+ nostrum.
+ </p>
+ <table>
+ <tr>
+ <tn/>
+ <th colspan="2">header 1 / 2</th>
+ <th>header 3</th>
+ <th>header 4</th>
+ </tr>
+ <tr>
+ <th>header a</th>
+ <td>data a1</td>
+ <td>data a2</td>
+ <td colspan="2">data a3 / a4</td>
+ </tr>
+ <tr>
+ <th rowspan="2">header b / c</th>
+ <td>data b1</td>
+ <td>data b2</td>
+ <tn/>
+ <td rowspan="2">data b4 / c4</td>
+ </tr>
+ <tr>
+ <td>data c1</td>
+ <td rowspan="2" colspan="2">data c2 / c3 / d2 / d3</td>
+ </tr>
+ <tr>
+ <th >header d</th>
+ <td>data d1</td>
+ <td>data d4</td>
+ </tr>
+ </table>
+ <p>
+ This is a regular paragraph. Senatus haec intellegit. consul videt; hic
+ tamen vivit. Vivit? immo vero etiam in senatum venit, fit publici
+ consilii particeps, notat et designat oculis ad caedem unum quemque
+ nostrum.
+ </p>
+ </s2>
+</s1>
\ No newline at end of file
diff --git a/docs/book.xml b/docs/book.xml
new file mode 100644
index 0000000..e282fcc
--- /dev/null
+++ b/docs/book.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE book SYSTEM "sbk:/style/dtd/book.dtd">
+
+<book title="Test Documentation" copyright="1999 Apache Software Foundation">
+ <document id="readme" label="Readme" source="readme.xml" />
+ <document id="sections" label="Sections" source="sections.xml" />
+ <separator />
+ <document id="blocks" label="Blocks" source="blocks.xml" />
+ <document id="characters" label="Characters" source="characters.xml"/>
+ <document id="links" label="Links" source="links.xml" />
+ <separator />
+ <faqs id="faqs" label="FAQ File" source="faqs.xml" />
+ <group id="faqgroup" label="FAQ Group" >
+ <entry id="faqs-1" source="faqs-1.xml" />
+ <entry id="faqs-2" source="faqs-2.xml" />
+ </group >
+ <changes id="changes" label="Changes" source="changes.xml" />
+</book>
diff --git a/docs/changes.xml b/docs/changes.xml
new file mode 100644
index 0000000..c7c753a
--- /dev/null
+++ b/docs/changes.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE changes SYSTEM "sbk:/style/dtd/changes.dtd">
+
+<changes title="Changes simple file">
+ <release date="December 1, 1999" version="1.0">
+ <features>
+ <feat>First Feature Added</feat>
+ <feat>Second Feature Added</feat>
+ </features>
+ <fixes>
+ <fix>First bug fix</fix>
+ <fix>Second bug fix</fix>
+ </fixes>
+ </release>
+
+ <release date="November 30, 1999" version="0.9">
+ <features>
+ <feat>First Feature Added (Testing the <em>em</em> tag)</feat>
+ <feat>Second Feature Added (Testing the <ref>ref</ref> tag)</feat>
+ </features>
+ <fixes>
+ <fix>First bug fix (Testing the <em>em</em> tag)</fix>
+ <fix>Second bug fix (Testing the <ref>ref</ref> tag)</fix>
+ </fixes>
+ </release>
+</changes>
\ No newline at end of file
diff --git a/docs/characters.xml b/docs/characters.xml
new file mode 100644
index 0000000..843a0df
--- /dev/null
+++ b/docs/characters.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE s1 SYSTEM "sbk:/style/dtd/document.dtd">
+
+<s1 title="Characters Test File">
+ <p>
+ This is a regular paragraph. Senatus haec intellegit. consul videt; hic
+ tamen vivit. Vivit? immo vero etiam in senatum venit, fit publici
+ consilii particeps, notat et designat oculis ad caedem unum quemque
+ nostrum.
+ </p>
+ <s2 title="This is an <s2 ...> section">
+ <p>
+ This is a regular paragraph. When using <em> we obtain <em>this
+ effect</em>. When, instead, we use <ref> we obtain <ref>this
+ other effect</ref>. Another interesting modifier is <code> wich
+ produces <code>this effect</code>.
+ </p>
+ <p>
+ Here is an example of <br>. Here we go to the next line without
+ closing the paragraph tag.<br/>
+ This is a regular paragraph. Senatus haec intellegit. consul videt; hic
+ tamen vivit. Vivit? immo vero etiam in senatum venit, fit publici
+ consilii particeps, notat et designat oculis ad caedem unum quemque
+ nostrum.
+ </p>
+
+ </s2>
+</s1>
\ No newline at end of file
diff --git a/docs/entities.ent b/docs/entities.ent
new file mode 100644
index 0000000..1d37d21
--- /dev/null
+++ b/docs/entities.ent
@@ -0,0 +1,3 @@
+<?xml encoding='US-ASCII'?>
+
+<!ENTITY myentity "MyEntityValue">
\ No newline at end of file
diff --git a/docs/faqs-1.xml b/docs/faqs-1.xml
new file mode 100644
index 0000000..ac0ef51
--- /dev/null
+++ b/docs/faqs-1.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+<!DOCTYPE faqs SYSTEM "sbk:/style/dtd/faqs.dtd">
+
+<faqs title="Second FAQS simple file">
+ <faq title="Title for question 1 of Second file">
+ <q>Question 1 of Second file</q>
+ <a>
+ <p>
+ Answer 1 of Second file
+ </p>
+ </a>
+ </faq>
+
+ <faq>
+ <q>Question 2 of Second file</q>
+ <a>
+ <p>
+ Answer 2 of Second file
+ </p>
+ </a>
+ </faq>
+
+ <faq title="Title for question 3 of Second file">
+ <q>Question 3 of Second file</q>
+ <a>
+ <p>
+ Answer 3 of Second file
+ </p>
+ </a>
+ </faq>
+
+ <faq>
+ <q>Question 4 of Second file</q>
+ <a>
+ <p>
+ Answer 4 of Second file
+ </p>
+ </a>
+ </faq>
+
+ <faq title="Title for question 5 of Second file">
+ <q>Question 5 of Second file</q>
+ <a>
+ <p>
+ Answer 5 of Second file
+ </p>
+ </a>
+ </faq>
+
+ <faq>
+ <q>Question 6 of Second file</q>
+ <a>
+ <p>
+ Answer 6 of Second file
+ </p>
+ </a>
+ </faq>
+
+ <faq title="Title for question 7 of Second file">
+ <q>Question 7 of Second file</q>
+ <a>
+ <p>
+ Answer 7 of Second file
+ </p>
+ </a>
+ </faq>
+
+ <faq>
+ <q>Question 8 of Second file</q>
+ <a>
+ <p>
+ Answer 8 of Second file
+ </p>
+ </a>
+ </faq>
+
+ <faq title="Title for question 9 of Second file">
+ <q>Question 9 of Second file</q>
+ <a>
+ <p>
+ Answer 9 of Second file
+ </p>
+ </a>
+ </faq>
+
+</faqs>
\ No newline at end of file
diff --git a/docs/faqs-2.xml b/docs/faqs-2.xml
new file mode 100644
index 0000000..30f2c35
--- /dev/null
+++ b/docs/faqs-2.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+<!DOCTYPE faqs SYSTEM "sbk:/style/dtd/faqs.dtd">
+
+<faqs title="Third FAQS simple file">
+ <faq title="Title for question 1 of Third file">
+ <q>Question 1 of Third file</q>
+ <a>
+ <p>
+ Answer 1 of Third file
+ </p>
+ </a>
+ </faq>
+
+ <faq>
+ <q>Question 2 of Third file</q>
+ <a>
+ <p>
+ Answer 2 of Third file
+ </p>
+ </a>
+ </faq>
+
+ <faq title="Title for question 3 of Third file">
+ <q>Question 3 of Third file</q>
+ <a>
+ <p>
+ Answer 3 of Third file
+ </p>
+ </a>
+ </faq>
+
+ <faq>
+ <q>Question 4 of Third file</q>
+ <a>
+ <p>
+ Answer 4 of Third file
+ </p>
+ </a>
+ </faq>
+
+ <faq title="Title for question 5 of Third file">
+ <q>Question 5 of Third file</q>
+ <a>
+ <p>
+ Answer 5 of Third file
+ </p>
+ </a>
+ </faq>
+
+ <faq>
+ <q>Question 6 of Third file</q>
+ <a>
+ <p>
+ Answer 6 of Third file
+ </p>
+ </a>
+ </faq>
+
+ <faq title="Title for question 7 of Third file">
+ <q>Question 7 of Third file</q>
+ <a>
+ <p>
+ Answer 7 of Third file
+ </p>
+ </a>
+ </faq>
+
+ <faq>
+ <q>Question 8 of Third file</q>
+ <a>
+ <p>
+ Answer 8 of Third file
+ </p>
+ </a>
+ </faq>
+
+ <faq title="Title for question 9 of Third file">
+ <q>Question 9 of Third file</q>
+ <a>
+ <p>
+ Answer 9 of Third file
+ </p>
+ </a>
+ </faq>
+
+</faqs>
\ No newline at end of file
diff --git a/docs/faqs.xml b/docs/faqs.xml
new file mode 100644
index 0000000..0c24058
--- /dev/null
+++ b/docs/faqs.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+<!DOCTYPE faqs SYSTEM "sbk:/style/dtd/faqs.dtd">
+
+<faqs title="First FAQS simple file">
+ <faq title="Title for question 1 of First file">
+ <q>Question 1 of First file</q>
+ <a>
+ <p>
+ Answer 1 of First file
+ </p>
+ </a>
+ </faq>
+
+ <faq>
+ <q>Question 2 of First file</q>
+ <a>
+ <p>
+ Answer 2 of First file
+ </p>
+ </a>
+ </faq>
+
+ <faq title="Title for question 3 of First file">
+ <q>Question 3 of First file</q>
+ <a>
+ <p>
+ Answer 3 of First file
+ </p>
+ </a>
+ </faq>
+
+ <faq>
+ <q>Question 4 of First file</q>
+ <a>
+ <p>
+ Answer 4 of First file
+ </p>
+ </a>
+ </faq>
+
+ <faq title="Title for question 5 of First file">
+ <q>Question 5 of First file</q>
+ <a>
+ <p>
+ Answer 5 of First file
+ </p>
+ </a>
+ </faq>
+
+ <faq>
+ <q>Question 6 of First file</q>
+ <a>
+ <p>
+ Answer 6 of First file
+ </p>
+ </a>
+ </faq>
+
+ <faq title="Title for question 7 of First file">
+ <q>Question 7 of First file</q>
+ <a>
+ <p>
+ Answer 7 of First file
+ </p>
+ </a>
+ </faq>
+
+ <faq>
+ <q>Question 8 of First file</q>
+ <a>
+ <p>
+ Answer 8 of First file
+ </p>
+ </a>
+ </faq>
+
+ <faq title="Title for question 9 of First file">
+ <q>Question 9 of First file</q>
+ <a>
+ <p>
+ Answer 9 of First file
+ </p>
+ </a>
+ </faq>
+
+</faqs>
\ No newline at end of file
diff --git a/docs/links.xml b/docs/links.xml
new file mode 100644
index 0000000..c2efbeb
--- /dev/null
+++ b/docs/links.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<!DOCTYPE s1 SYSTEM "sbk:/style/dtd/document.dtd">
+
+<s1 title="Links Test File">
+ <p>
+ This is a regular paragraph. Senatus haec intellegit. consul videt; hic
+ tamen vivit. Vivit? immo vero etiam in senatum venit, fit publici
+ consilii particeps, notat et designat oculis ad caedem unum quemque
+ nostrum.
+ </p>
+ <s2 title="Linking to another document">
+ <p>
+ Clicking <link idref="readme">here</link> you will be transported to the
+ <em>Readme</em> file. This has been achieved with
+ <code><link idref="readme">here</link></code>.<br/>
+ Note that the <code>idref="..."</code> <em>MUST</em> refer to an
+ <code>id="..."</code> specified in the book file.
+ </p>
+ </s2>
+ <s2 title="Linking to an anchor">
+ <p>
+ Clicking <link anchor="bottom">here</link> you will be transported to the
+ end of this file. This has been achieved with
+ <code><link anchor="bottom">here</link></code>
+ and inserting <code><anchor name="bottom"/></code> at the end of
+ this file.
+ </p>
+ </s2>
+ <s2 title="Jumping out">
+ <p>
+ Clicking <jump href="mailto:pier at apache.org">here</jump> you will be able
+ to send me E-Mail. This can be done inserting
+ <code><jump href="mailto:pier at apache.org">here</jump></code>.
+ The jump tag is used whenever you cannot use link, since the target is
+ outside stylebook domain.
+ </p>
+ </s2>
+ <s2 title="Linking to an anchor in a different document">
+ <p>
+ Clicking <link idref="sections" anchor="bottom">here</link> you will be
+ transported to the end of the <em>Sections</em> file. This has been
+ achieved with
+ <code><link idref="sections" anchor="bottom">here</link></code>
+ and inserting <code><anchor name="bottom"/></code> at the end of
+ the target file (<code>sections.xml</code>).
+ </p>
+ </s2>
+ <s2 title="Images">
+ <p>
+ <img src="test.jpg" alt="A squirrel"/>
+ Last, but not least, inserting here <code><img src="test.jpg"/></code>
+ we see an image appear in the target html. I know I sound stupid but I
+ don't know what to write and I need to keep this long...
+ </p>
+ <p>
+ <jump href="mailto:pier at apache.org">
+ <img src="test.jpg" alt="The same squirrel"/>
+ </jump>
+ Inserting here a different image, but this time surrounded with
+ a <code><jump href="mailto:pier at apache.org"/></code> element,
+ clicking on the image you will be able to send me mail.
+ </p>
+ </s2>
+ <anchor name="bottom"/>
+</s1>
\ No newline at end of file
diff --git a/docs/readme.xml b/docs/readme.xml
new file mode 100644
index 0000000..a51d1f1
--- /dev/null
+++ b/docs/readme.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE s1 SYSTEM "sbk:/style/dtd/document.dtd">
+
+<s1 title="Test Files Readme">
+ <p>
+ Senatus haec intellegit. consul videt; hic tamen vivit. Vivit? immo
+ vero etiam in senatum venit, fit publici consilii particeps, notat et
+ designat oculis ad caedem unum quemque nostrum. &myentity;
+ </p>
+</s1>
\ No newline at end of file
diff --git a/docs/run.bat b/docs/run.bat
new file mode 100755
index 0000000..940757b
--- /dev/null
+++ b/docs/run.bat
@@ -0,0 +1,2 @@
+ at echo off
+java -classpath "..\bin\stylebook-1.0-b1.jar" org.apache.stylebook.StyleBook "targetDirectory=targets" book.xml ../styles/apachexml
diff --git a/docs/sections.xml b/docs/sections.xml
new file mode 100644
index 0000000..40fac28
--- /dev/null
+++ b/docs/sections.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<!DOCTYPE s1 SYSTEM "sbk:/style/dtd/document.dtd">
+
+<s1 title="Sections Test File">
+ <p>
+ Senatus haec intellegit. consul videt; hic tamen vivit. Vivit? immo
+ vero etiam in senatum venit, fit publici consilii particeps, notat et
+ designat oculis ad caedem unum quemque nostrum.
+ </p>
+ <p>
+ Nos autem fortes viri satis facere rei publicae videmur, si istius
+ furorem ac tela vitemus. Ad mortem te, Catilina, duci iussu consulis
+ iam pridem oportebat, in te conferri pestem, quam tu in nos
+ machinaris. An vero vir amplissumus, P. Scipio, pontifex maximus, Ti.
+ Gracchum mediocriter labefactantem statum rei publicae privatus
+ interfecit.
+ </p>
+ <p>
+ Catilinam orbem terrae caede atque incendiis vastare cupientem nos
+ consules perferemus? Namilla nimis antiqua praetereo, quod C.
+ Servilius Ahala Sp. Maelium novis rebus studentem manu sua occidit.
+ </p>
+ <s2 title="This is an <s2 ...> section">
+ <p>
+ Senatus haec intellegit. consul videt; hic tamen vivit. Vivit? immo
+ vero etiam in senatum venit, fit publici consilii particeps, notat et
+ designat oculis ad caedem unum quemque nostrum.
+ </p>
+ <p>
+ Nos autem fortes viri satis facere rei publicae videmur, si istius
+ furorem ac tela vitemus. Ad mortem te, Catilina, duci iussu consulis
+ iam pridem oportebat, in te conferri pestem, quam tu in nos
+ machinaris. An vero vir amplissumus, P. Scipio, pontifex maximus, Ti.
+ Gracchum mediocriter labefactantem statum rei publicae privatus
+ interfecit.
+ </p>
+ <s3 title="This is an <s3 ...> section">
+ <p>
+ Senatus haec intellegit. consul videt; hic tamen vivit. Vivit? immo
+ vero etiam in senatum venit, fit publici consilii particeps, notat et
+ designat oculis ad caedem unum quemque nostrum.
+ </p>
+ <p>
+ Nos autem fortes viri satis facere rei publicae videmur, si istius
+ furorem ac tela vitemus. Ad mortem te, Catilina, duci iussu consulis
+ iam pridem oportebat, in te conferri pestem, quam tu in nos
+ machinaris. An vero vir amplissumus, P. Scipio, pontifex maximus, Ti.
+ Gracchum mediocriter labefactantem statum rei publicae privatus
+ interfecit.
+ </p>
+ <s4 title="This is an <s4 ...> section">
+ <p>
+ Senatus haec intellegit. consul videt; hic tamen vivit. Vivit? immo
+ vero etiam in senatum venit, fit publici consilii particeps, notat et
+ designat oculis ad caedem unum quemque nostrum.
+ </p>
+ </s4>
+ <s4 title="This is an <s4 ...> section">
+ <p>
+ Senatus haec intellegit. consul videt; hic tamen vivit. Vivit? immo
+ vero etiam in senatum venit, fit publici consilii particeps, notat et
+ designat oculis ad caedem unum quemque nostrum.
+ </p>
+ </s4>
+ <p>
+ Catilinam orbem terrae caede atque incendiis vastare cupientem nos
+ consules perferemus? Namilla nimis antiqua praetereo, quod C.
+ Servilius Ahala Sp. Maelium novis rebus studentem manu sua occidit.
+ </p>
+ </s3>
+ <p>
+ Catilinam orbem terrae caede atque incendiis vastare cupientem nos
+ consules perferemus? Namilla nimis antiqua praetereo, quod C.
+ Servilius Ahala Sp. Maelium novis rebus studentem manu sua occidit.
+ </p>
+ </s2>
+ <anchor name="bottom"/>
+</s1>
\ No newline at end of file
diff --git a/docs/test.jpg b/docs/test.jpg
new file mode 100644
index 0000000..19ce72a
Binary files /dev/null and b/docs/test.jpg differ
diff --git a/src/org/apache/stylebook/AbstractComponent.java b/src/org/apache/stylebook/AbstractComponent.java
new file mode 100644
index 0000000..17be572
--- /dev/null
+++ b/src/org/apache/stylebook/AbstractComponent.java
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public abstract class AbstractComponent implements Component {
+ /** The Engine owning this Component instance. */
+ protected Engine engine=null;
+ /** This component initialization Parameters. */
+ protected Parameters params=null;
+
+ /**
+ * Initialize this component instance.
+ *
+ * @param e The Engine owning this Component instance
+ * @param p This component initialization Parameters
+ */
+ public void init(Engine e, Parameters p)
+ throws InitializationException {
+ if (e==null) throw new NullPointerException("Null Engine");
+ if (p==null) throw new NullPointerException("Null Parameters");
+ this.engine=e;
+ this.params=p;
+ this.debug("Initializing");
+ }
+
+ /**
+ * Report a debug message to the owning Engine.
+ *
+ * @param msg The debug message to report.
+ */
+ protected void debug(String message) {
+ this.engine.debug(this, message);
+ }
+
+ /**
+ * Report a log message to the owning Engine.
+ *
+ * @param msg The log message to report.
+ */
+ protected void log(String message) {
+ this.engine.log(this, message);
+ }
+}
diff --git a/src/org/apache/stylebook/BasicContext.java b/src/org/apache/stylebook/BasicContext.java
new file mode 100644
index 0000000..5676ebb
--- /dev/null
+++ b/src/org/apache/stylebook/BasicContext.java
@@ -0,0 +1,39 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.net.URL;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313202 $ $Date: 1999-11-30 13:28:55 +0100 (tis, 30 nov 1999) $
+ */
+public class BasicContext extends BasicParameters implements CreationContext {
+ /** Our Source */
+ private URL source=null;
+ /** Our Target */
+ private String target=null;
+
+ public BasicContext(URL source, String target) {
+ super();
+ this.source=source;
+ this.target=target;
+ }
+
+ public URL getSourceURL() {
+ return(this.source);
+ }
+
+ public String getTargetName() {
+ return(this.target);
+ }
+}
diff --git a/src/org/apache/stylebook/BasicEngine.java b/src/org/apache/stylebook/BasicEngine.java
new file mode 100644
index 0000000..33359ff
--- /dev/null
+++ b/src/org/apache/stylebook/BasicEngine.java
@@ -0,0 +1,200 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313202 $ $Date: 1999-11-30 13:28:55 +0100 (tis, 30 nov 1999) $
+ */
+public class BasicEngine implements Engine {
+ /** Our Parser instance */
+ private Parser parser=null;
+ /** The Producer table */
+ private Hashtable producers=new Hashtable();
+ /** The Processor table */
+ private Hashtable processors=new Hashtable();
+ /** The Printers table */
+ private Hashtable printers=new Hashtable();
+ /** The Logger instance */
+ private Logger logger=null;
+ /** The debug() activation flag */
+ private boolean debug=false;
+
+ /**
+ * Create a new instance of this Engine.
+ *
+ * @param parser The name of the Parser class used to read configuration.
+ * @param cont The SystemID of the configuration file.
+ * @param logger The Logger used by this Engine.
+ */
+ public BasicEngine(String parser, URL conf, Logger logger)
+ throws InitializationException {
+ super();
+ // Check the Logger
+ if (logger==null)
+ throw new InitializationException("No Logger instance specified");
+ else this.logger=logger;
+ // Parse the configuration file with the specified Parser
+ Parser pars=ComponentFactory.getParser(parser);
+ pars.init(this,new BasicParameters());
+ Document d=null;
+ try {
+ if ((d=pars.parse(conf))==null)
+ throw new InitializationException("Parser returned null doc");
+ } catch (Exception e) {
+ throw new InitializationException("Cannot parse configurations \""+
+ conf+"\"");
+ }
+ // Step thru the different elements to configure the engine
+ this.logger.log(this,"Initializing");
+ Element e=d.getDocumentElement();
+ if (!e.getTagName().equals("engine"))
+ throw new InitializationException("Conf don't begin with <engine>");
+ NodeList l=e.getChildNodes();
+ for (int x=0; x<l.getLength(); x++) {
+ if (l.item(x).getNodeType()!=Node.ELEMENT_NODE) continue;
+ Element n=(Element)l.item(x);
+ String t=n.getTagName();
+ if (t.equals("debug"))
+ if(n.getAttribute("enabled").equalsIgnoreCase("true"))
+ this.debug=true;
+ else this.debug=false;
+ else if (t.equals("parser")) configureParser(n);
+ else if (t.equals("producer")) configureProducer(n);
+ else if (t.equals("processor")) configureProcessor(n);
+ else if (t.equals("printer")) configurePrinter(n);
+ else throw new InitializationException("Unknown Element <"+t+">");
+ }
+ if(this.parser==null) this.parser=pars;
+ }
+
+ /** Configure the Parser from a givent Element */
+ private void configureParser(Element e)
+ throws InitializationException {
+ if (this.parser!=null)
+ throw new InitializationException("Parser already configured");
+ String classname=e.getAttribute("class");
+ this.parser=ComponentFactory.getParser(classname);
+ this.parser.init(this,new NodeListParameters(e.getChildNodes()));
+ }
+
+ /** Configure a Producer from a givent Element */
+ private void configureProducer(Element e)
+ throws InitializationException {
+ String name=e.getAttribute("name");
+ String cls=e.getAttribute("class");
+ if(name.length()==0)
+ throw new InitializationException("No name specified for Producer");
+ Producer p=ComponentFactory.getProducer(cls);
+ p.init(this,new NodeListParameters(e.getChildNodes()));
+ if(this.producers.put(name,p)!=null)
+ throw new InitializationException("Duplucate Producer \""+
+ name+"\"");
+ }
+
+ /** Configure a Processor from a givent Element */
+ private void configureProcessor(Element e)
+ throws InitializationException {
+ String name=e.getAttribute("name");
+ String cls=e.getAttribute("class");
+ if(name.length()==0)
+ throw new InitializationException("No name specified for Processor");
+ Processor p=ComponentFactory.getProcessor(cls);
+ p.init(this,new NodeListParameters(e.getChildNodes()));
+ if(this.processors.put(name,p)!=null)
+ throw new InitializationException("Duplucate Processor \""+
+ name+"\"");
+ }
+
+ /** Configure a Printer from a givent Element */
+ private void configurePrinter(Element e)
+ throws InitializationException {
+ String name=e.getAttribute("name");
+ String cls=e.getAttribute("class");
+ if(name.length()==0)
+ throw new InitializationException("No name specified for Printer");
+ Printer p=ComponentFactory.getPrinter(cls);
+ p.init(this,new NodeListParameters(e.getChildNodes()));
+ if(this.printers.put(name,p)!=null)
+ throw new InitializationException("Duplucate Printer \""+
+ name+"\"");
+ }
+
+ /**
+ * Return the Parser instance owned by this Engine.
+ *
+ * @return A non-null Parser instance.
+ */
+ public Parser getParser() {
+ return(this.parser);
+ }
+
+ /**
+ * Return a Producer instance associated with the specified name.
+ *
+ * @param name A non-null String representing the Producer name.
+ * @return A non-null Producer instance or null if no Producer is associated
+ * with the specified name.
+ */
+ public Producer getProducer(String name) {
+ return((Producer)this.producers.get(name));
+ }
+
+ /**
+ * Return a Processor instance associated with the specified name.
+ *
+ * @param name A non-null String representing the Processor name.
+ * @return A non-null Processor instance or null if no Processor is
+ * associated with the specified name.
+ */
+ public Processor getProcessor(String name) {
+ return((Processor)this.processors.get(name));
+ }
+
+ /**
+ * Return a Printer instance associated with the specified name.
+ *
+ * @param name A non-null String representing the Printer name.
+ * @return A non-null Printer instance or null if no Printer is
+ * associated with the specified name.
+ */
+ public Printer getPrinter(String name) {
+ return((Printer)this.printers.get(name));
+ }
+
+ /**
+ * Report a debug message to the user.
+ *
+ * @param msg The debug message to report.
+ */
+ public void debug(Object source, String msg) {
+ if(this.debug) this.logger.log(source,msg);
+ }
+
+ /**
+ * Report a log message to the user.
+ *
+ * @param msg The log message to report.
+ */
+ public void log(Object source, String msg) {
+ this.logger.log(source,msg);
+ }
+}
diff --git a/src/org/apache/stylebook/BasicEntry.java b/src/org/apache/stylebook/BasicEntry.java
new file mode 100644
index 0000000..cf29cdb
--- /dev/null
+++ b/src/org/apache/stylebook/BasicEntry.java
@@ -0,0 +1,85 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313221 $ $Date: 1999-12-01 19:39:14 +0100 (ons, 01 dec 1999) $
+ */
+public class BasicEntry extends BasicContext implements Entry {
+ private Producer producer=null;
+ private Printer printer=null;
+ private Vector tasks=new Vector();
+
+ public BasicEntry(Engine e, URL s, String t, Element d, Parameters p)
+ throws LoadingException {
+ super(s,t);
+ String prod=d.getAttribute("producer");
+ String prnt=d.getAttribute("printer");
+ e.debug(this,"Creating Entry Source=\""+s+"\" Target=\""+t+"\""+
+ " ["+prod+"/"+prnt+"]");
+ if ((this.producer=e.getProducer(prod))==null)
+ throw new LoadingException("Invalid Producer \""+prod+"\"");
+ if ((this.printer=e.getPrinter(prnt))==null)
+ throw new LoadingException("Invalid Printer \""+prnt+"\"");
+ NodeList l=d.getChildNodes();
+ Parameters p2=new NodeListParameters(l).merge(p);
+ for(int x=0;x<l.getLength();x++) {
+ if(l.item(x).getNodeType()!=Node.ELEMENT_NODE) continue;
+ Element el=(Element)l.item(x);
+ if(el.getTagName().equals("parameter")) continue;
+ if(!el.getTagName().equals("processor"))
+ throw new LoadingException("Invalid Tag <"+el.getTagName()+">");
+ Processor proc=e.getProcessor(el.getAttribute("name"));
+ if(proc==null)
+ throw new LoadingException("Invalid Processr \""+proc+"\"");
+ Parameters par=new NodeListParameters(el.getChildNodes()).merge(p2);
+ this.tasks.add(new Task(proc,par));
+ }
+ this.merge(p2);
+ }
+
+ public void create(OutputStream out)
+ throws IOException, CreationException {
+ Document d=this.producer.produce(this);
+ Enumeration e=this.tasks.elements();
+ while(e.hasMoreElements()) {
+ Task t=(Task)e.nextElement();
+ d=t.processor.process(d,this,t.parameters);
+ }
+ this.printer.print(d,this,out);
+ }
+
+ private class Task {
+ public Processor processor=null;
+ public Parameters parameters=null;
+
+ public Task(Processor proc, Parameters param) {
+ this.processor=proc;
+ this.parameters=param;
+ }
+ }
+
+ public boolean equals(Entry e) {
+ return(false);
+ }
+}
diff --git a/src/org/apache/stylebook/BasicParameters.java b/src/org/apache/stylebook/BasicParameters.java
new file mode 100644
index 0000000..ad1794b
--- /dev/null
+++ b/src/org/apache/stylebook/BasicParameters.java
@@ -0,0 +1,90 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public class BasicParameters implements Parameters {
+ private Hashtable table=null;
+
+ public BasicParameters() {
+ super();
+ this.table=new Hashtable();
+ }
+
+ /**
+ * Retrieve a value for a specified parameter.
+ *
+ * @param name The parameter name.
+ * @return The parameter value or null if the parameter has no specified
+ * value.
+ */
+ public String getParameter(String name) {
+ return((String)this.table.get(name));
+ }
+
+ /**
+ * Retrieve a value for a specified parameter.
+ *
+ * @param name The parameter name.
+ * @param def The parameter default value.
+ * @return The parameter value or def if the parameter has no specified
+ * value.
+ */
+ public String getParameter(String name, String def) {
+ String val=getParameter(name);
+ if (val==null) return(def);
+ else return(val);
+ }
+
+ /**
+ * Get all valid parameter names.
+ *
+ * @return A non-null (maybe empty) Enumeration.
+ */
+ public Enumeration getParameterNames() {
+ return(table.keys());
+ }
+
+ /**
+ * Set or update parameter value.
+ *
+ * @parameter name The parameter name.
+ * @parameter value The parameter value.
+ * @return The old value of the parameter or null.
+ */
+ public String setParameter(String name, String value) {
+ if (value==null) return((String)this.table.remove(name));
+ else return((String)this.table.put(name,value));
+ }
+
+ /**
+ * Merge the values from another Parameters object into this instance.
+ *
+ * @param p The Parameters object from wich values must be retrieved.
+ */
+ public Parameters merge(Parameters p) {
+ if (p==null) return(this);
+ Enumeration e=p.getParameterNames();
+ while (e.hasMoreElements()) {
+ String name=(String)e.nextElement();
+ String value=p.getParameter(name);
+ this.setParameter(name,value);
+ }
+ return(this);
+ }
+}
\ No newline at end of file
diff --git a/src/org/apache/stylebook/Component.java b/src/org/apache/stylebook/Component.java
new file mode 100644
index 0000000..7718c24
--- /dev/null
+++ b/src/org/apache/stylebook/Component.java
@@ -0,0 +1,29 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public interface Component {
+ /**
+ * Initialize this component instance.
+ *
+ * @param e The Engine owning this Component instance
+ * @param p This component initialization Parameters
+ * @exception InitializationException If this Component instance cannot be
+ * initialized.
+ */
+ public void init(Engine e, Parameters p)
+ throws InitializationException;
+}
diff --git a/src/org/apache/stylebook/ComponentFactory.java b/src/org/apache/stylebook/ComponentFactory.java
new file mode 100644
index 0000000..10ebccc
--- /dev/null
+++ b/src/org/apache/stylebook/ComponentFactory.java
@@ -0,0 +1,122 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public class ComponentFactory {
+ /** Deny construction. */
+ private ComponentFactory() {
+ super();
+ }
+
+ /**
+ * Create a new Component instance.
+ *
+ * @param classname The name of the Component class.
+ * @return A non-null Component instance.
+ * @exception InitializationException If the Component instance cannot be
+ * created.
+ */
+ public static Component getComponent(String classname)
+ throws InitializationException {
+ try {
+ return ((Component)Class.forName(classname).newInstance());
+ } catch (ClassCastException e) {
+ throw new InitializationException("Class \""+classname+
+ "\" is not a Component");
+ } catch (InstantiationException e) {
+ throw new InitializationException("Class \""+classname+
+ "\" cannot be instantiated");
+ } catch (IllegalAccessException e) {
+ throw new InitializationException("Class \""+classname+
+ "\" cannot be accessed");
+ } catch (ClassNotFoundException e) {
+ throw new InitializationException("Class \""+classname+
+ "\" not found");
+ }
+ }
+
+ /**
+ * Create a new Parser instance.
+ *
+ * @param classname The name of the Parser class.
+ * @return A non-null Parser instance.
+ * @exception InitializationException If the Parser instance cannot be
+ * created.
+ */
+ public static Parser getParser(String classname)
+ throws InitializationException {
+ try {
+ return ((Parser)getComponent(classname));
+ } catch (ClassCastException e) {
+ throw new InitializationException("Class \""+classname+
+ "\" is not a Parser");
+ }
+ }
+
+ /**
+ * Create a new Producer instance.
+ *
+ * @param classname The name of the Producer class.
+ * @return A non-null Producer instance.
+ * @exception InitializationException If the Producer instance cannot be
+ * created.
+ */
+ public static Producer getProducer(String classname)
+ throws InitializationException {
+ try {
+ return ((Producer)getComponent(classname));
+ } catch (ClassCastException e) {
+ throw new InitializationException("Class \""+classname+
+ "\" is not a Producer");
+ }
+ }
+
+ /**
+ * Create a new Processor instance.
+ *
+ * @param classname The name of the Processor class.
+ * @return A non-null Processor instance.
+ * @exception InitializationException If the Processor instance cannot be
+ * created.
+ */
+ public static Processor getProcessor(String classname)
+ throws InitializationException {
+ try {
+ return ((Processor)getComponent(classname));
+ } catch (ClassCastException e) {
+ throw new InitializationException("Class \""+classname+
+ "\" is not a Processor");
+ }
+ }
+
+ /**
+ * Create a new Printer instance.
+ *
+ * @param classname The name of the Printer class.
+ * @return A non-null Printer instance.
+ * @exception InitializationException If the Printer instance cannot be
+ * created.
+ */
+ public static Printer getPrinter(String classname)
+ throws InitializationException {
+ try {
+ return ((Printer)getComponent(classname));
+ } catch (ClassCastException e) {
+ throw new InitializationException("Class \""+classname+
+ "\" is not a Printer");
+ }
+ }
+}
diff --git a/src/org/apache/stylebook/CreationContext.java b/src/org/apache/stylebook/CreationContext.java
new file mode 100644
index 0000000..667e7b5
--- /dev/null
+++ b/src/org/apache/stylebook/CreationContext.java
@@ -0,0 +1,23 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.net.URL;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313202 $ $Date: 1999-11-30 13:28:55 +0100 (tis, 30 nov 1999) $
+ */
+public interface CreationContext extends Parameters {
+ public URL getSourceURL();
+ public String getTargetName();
+}
diff --git a/src/org/apache/stylebook/CreationException.java b/src/org/apache/stylebook/CreationException.java
new file mode 100644
index 0000000..f749c46
--- /dev/null
+++ b/src/org/apache/stylebook/CreationException.java
@@ -0,0 +1,125 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import org.w3c.dom.Document;
+
+/**
+ * A CreationException is thrown whenever an Entry cannot be produced for
+ * any reason.
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public class CreationException extends Exception {
+ private transient Exception exception=null;
+ private transient Document document=null;
+
+ /**
+ * Create a new CreationException instance.
+ */
+ public CreationException() {
+ this(null,null,null);
+ }
+
+ /**
+ * Create a new CreationException instance with a specified detail message.
+ *
+ * @param m The detail message.
+ */
+ public CreationException(String m) {
+ this(m,null,null);
+ }
+
+ /**
+ * Create a new CreationException instance with a specified nested
+ * exception.
+ *
+ * @param e The nested exception.
+ */
+ public CreationException(Exception e) {
+ this(null,e,null);
+ }
+
+ /**
+ * Create a new CreationException instance with a specified invalid
+ * document.
+ *
+ * @param d The invalid document.
+ */
+ public CreationException(Document d) {
+ this(null,null,d);
+ }
+
+ /**
+ * Create a new CreationException instance with a specified detail message
+ * and a specified nested exception.
+ *
+ * @param m The detail message.
+ * @param e The nested exception.
+ */
+ public CreationException(String m, Exception e) {
+ this(m,e,null);
+ }
+
+ /**
+ * Create a new CreationException instance with a specified detail message
+ * and a specified invalid document.
+ *
+ * @param m The detail message.
+ * @param d The invalid document.
+ */
+ public CreationException(String m, Document d) {
+ this(m,null,d);
+ }
+
+ /**
+ * Create a new CreationException instance with a specified nested
+ * exception and a specified invalid document.
+ *
+ * @param e The nested exception.
+ * @param d The invalid document.
+ */
+ public CreationException(Exception e, Document d) {
+ this(null,e,d);
+ }
+
+ /**
+ * Create a new CreationException instance with a specified detail message,
+ * a specified nested exception and a specified invalid document.
+ *
+ * @param m The detail message.
+ * @param e The nested exception.
+ * @param d The invalid document.
+ */
+ public CreationException(String m, Exception e, Document d) {
+ super(m);
+ this.exception=e;
+ this.document=d;
+ }
+
+ /**
+ * Retrieve the nested exception of this CreationException.
+ *
+ * @return The invalid document or null if this wasn't specified.
+ */
+ public Exception getException() {
+ return(this.exception);
+ }
+
+ /**
+ * Retrieve the invalid document of this CreationException.
+ *
+ * @return The invalid document or null if this wasn't specified.
+ */
+ public Document getDocument() {
+ return(this.document);
+ }
+}
diff --git a/src/org/apache/stylebook/Engine.java b/src/org/apache/stylebook/Engine.java
new file mode 100644
index 0000000..c673a53
--- /dev/null
+++ b/src/org/apache/stylebook/Engine.java
@@ -0,0 +1,69 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.util.Enumeration;
+import org.w3c.dom.Document;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public interface Engine {
+ /**
+ * Return the Parser instance owned by this Engine.
+ *
+ * @return A non-null Parser instance.
+ */
+ public Parser getParser();
+
+ /**
+ * Return a Producer instance associated with the specified name.
+ *
+ * @param name A non-null String representing the Producer name.
+ * @return A non-null Producer instance or null if no Producer is associated
+ * with the specified name.
+ */
+ public Producer getProducer(String name);
+
+ /**
+ * Return a Processor instance associated with the specified name.
+ *
+ * @param name A non-null String representing the Processor name.
+ * @return A non-null Processor instance or null if no Processor is
+ * associated with the specified name.
+ */
+ public Processor getProcessor(String name);
+
+ /**
+ * Return a Printer instance associated with the specified name.
+ *
+ * @param name A non-null String representing the Printer name.
+ * @return A non-null Printer instance or null if no Printer is
+ * associated with the specified name.
+ */
+ public Printer getPrinter(String name);
+
+ /**
+ * Report a debug message to the user.
+ *
+ * @param msg The debug message to report.
+ */
+ public void debug(Object source, String message);
+
+ /**
+ * Report a log message to the user.
+ *
+ * @param msg The log message to report.
+ */
+ public void log(Object source, String message);
+}
diff --git a/src/org/apache/stylebook/Entry.java b/src/org/apache/stylebook/Entry.java
new file mode 100644
index 0000000..71f86ab
--- /dev/null
+++ b/src/org/apache/stylebook/Entry.java
@@ -0,0 +1,26 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313221 $ $Date: 1999-12-01 19:39:14 +0100 (ons, 01 dec 1999) $
+ */
+public interface Entry {
+ public void create(OutputStream out)
+ throws IOException, CreationException;
+
+ public boolean equals(Entry e);
+}
diff --git a/src/org/apache/stylebook/InitializationException.java b/src/org/apache/stylebook/InitializationException.java
new file mode 100644
index 0000000..158aebc
--- /dev/null
+++ b/src/org/apache/stylebook/InitializationException.java
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+/**
+ * A InitializationException is thrown whenever a Component cannot be
+ * initialized for any reason.
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public class InitializationException extends Exception {
+ /**
+ * Create a new InitializationException instance.
+ */
+ public InitializationException() {
+ super();
+ }
+
+ /**
+ * Create a new InitializationException instance with a specified detail
+ * message.
+ *
+ * @param m The detail message.
+ */
+ public InitializationException(String m) {
+ super(m);
+ }
+
+}
diff --git a/src/org/apache/stylebook/Loader.java b/src/org/apache/stylebook/Loader.java
new file mode 100644
index 0000000..4fb7963
--- /dev/null
+++ b/src/org/apache/stylebook/Loader.java
@@ -0,0 +1,77 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import org.xml.sax.InputSource;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313202 $ $Date: 1999-11-30 13:28:55 +0100 (tis, 30 nov 1999) $
+ */
+public class Loader {
+ private Engine engine=null;
+
+ public Loader(Engine e) {
+ this.engine=e;
+ }
+
+ public Project load(URL loader, URL project)
+ throws LoadingException {
+ try {
+ // Parse the project file
+ this.engine.log(this,"Parsing Project file");
+ Document p=this.engine.getParser().parse(project);
+ // Prepare a temporary creationcontext
+ CreationContext c=new BasicContext(project,"");
+ // Parse the loader configuration file
+ this.engine.debug(this,"Parsing Loader configuration");
+ Document d=this.engine.getParser().parse(loader);
+ // Check the parsed loader configuration root element
+ if (!d.getDocumentElement().getTagName().equals("loader"))
+ throw new LoadingException("Loader config is not <loader>");
+ // Apply the different processors
+ NodeList l=d.getDocumentElement().getChildNodes();
+ for(int x=0;x<l.getLength();x++) {
+ if (l.item(x).getNodeType()!=Node.ELEMENT_NODE) continue;
+ p=process(p,(Element)l.item(x),c);
+ }
+ // Create the project
+ Parameters param=new BasicParameters();
+ param.setParameter("stylebook.project",project.toExternalForm());
+ Project pr=new Project(this.engine,p,param,project);
+ return(pr);
+ } catch (IOException e) {
+ this.engine.log(this,"Caught "+e.getClass().getName());
+ throw new LoadingException(e.getMessage());
+ } catch (CreationException e) {
+ this.engine.log(this,"Caught "+e.getClass().getName());
+ throw new LoadingException(e.getMessage());
+ }
+ }
+
+ private Document process(Document d, Element e, CreationContext c)
+ throws IOException, CreationException, LoadingException {
+ if(!e.getTagName().equals("processor"))
+ throw new LoadingException("Unknown element <"+e.getTagName()+">");
+ String name=e.getAttribute("name");
+ Parameters p=new NodeListParameters(e.getChildNodes());
+ d=this.engine.getProcessor(name).process(d,c,p);
+ return(d);
+ }
+}
\ No newline at end of file
diff --git a/src/org/apache/stylebook/LoadingException.java b/src/org/apache/stylebook/LoadingException.java
new file mode 100644
index 0000000..9085e96
--- /dev/null
+++ b/src/org/apache/stylebook/LoadingException.java
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+/**
+ * A LoadingException is thrown whenever the Loaded cannot load and create a
+ * project.
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public class LoadingException extends Exception {
+ /**
+ * Create a new LoadingException instance.
+ */
+ public LoadingException() {
+ super();
+ }
+
+ /**
+ * Create a new LoadingException instance with a specified detail
+ * message.
+ *
+ * @param m The detail message.
+ */
+ public LoadingException(String m) {
+ super(m);
+ }
+
+}
diff --git a/src/org/apache/stylebook/Logger.java b/src/org/apache/stylebook/Logger.java
new file mode 100644
index 0000000..755e5c5
--- /dev/null
+++ b/src/org/apache/stylebook/Logger.java
@@ -0,0 +1,25 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public interface Logger {
+ /**
+ * Report a message to the user.
+ *
+ * @param msg The log message to report.
+ */
+ public void log(Object source, String message);
+}
diff --git a/src/org/apache/stylebook/NodeListParameters.java b/src/org/apache/stylebook/NodeListParameters.java
new file mode 100644
index 0000000..d8ee9f6
--- /dev/null
+++ b/src/org/apache/stylebook/NodeListParameters.java
@@ -0,0 +1,35 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public class NodeListParameters extends BasicParameters implements Parameters {
+
+ public NodeListParameters(NodeList l) {
+ super();
+ if (l!=null) for (int x=0; x<l.getLength(); x++) {
+ if (l.item(x).getNodeType()!=Node.ELEMENT_NODE) continue;
+ Element e=(Element)l.item(x);
+ if (!e.getTagName().equals("parameter")) continue;
+ this.setParameter(e.getAttribute("name"),e.getAttribute("value"));
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/org/apache/stylebook/Parameters.java b/src/org/apache/stylebook/Parameters.java
new file mode 100644
index 0000000..8df2ef7
--- /dev/null
+++ b/src/org/apache/stylebook/Parameters.java
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.util.Enumeration;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public interface Parameters {
+ /**
+ * Retrieve a value for a specified parameter.
+ *
+ * @param name The parameter name.
+ * @return The parameter value or null if the parameter has no specified
+ * value.
+ */
+ public String getParameter(String name);
+
+ /**
+ * Retrieve a value for a specified parameter.
+ *
+ * @param name The parameter name.
+ * @param def The parameter default value.
+ * @return The parameter value or def if the parameter has no specified
+ * value.
+ */
+ public String getParameter(String name, String def);
+
+ /**
+ * Get all valid parameter names.
+ *
+ * @return A non-null (maybe empty) Enumeration.
+ */
+ public Enumeration getParameterNames();
+
+ /**
+ * Set or update parameter value.
+ *
+ * @parameter name The parameter name.
+ * @parameter value The parameter value.
+ * @return The old value of the parameter or null.
+ */
+ public String setParameter(String name, String value);
+
+ /**
+ * Merge the values from another Parameters object into this instance.
+ *
+ * @param p The Parameters object from wich values must be retrieved.
+ */
+ public Parameters merge(Parameters p);
+}
\ No newline at end of file
diff --git a/src/org/apache/stylebook/Parser.java b/src/org/apache/stylebook/Parser.java
new file mode 100644
index 0000000..e795ba0
--- /dev/null
+++ b/src/org/apache/stylebook/Parser.java
@@ -0,0 +1,54 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.io.IOException;
+import java.net.URL;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313202 $ $Date: 1999-11-30 13:28:55 +0100 (tis, 30 nov 1999) $
+ */
+public interface Parser extends Component{
+ /**
+ * Parse the specified InputSource.
+ *
+ * @param in The InputSource to parse.
+ * @return A non-null DOM Document object.
+ * @exception IOException If an I/O error occourred accessing the specified
+ * System-ID.
+ * @exception CreationException If an error occourred parsing the document.
+ */
+ public Document parse(InputSource in)
+ throws IOException, CreationException;
+
+ /**
+ * Parse the specified InputSource.
+ *
+ * @param in The InputSource to parse.
+ * @return A non-null DOM Document object.
+ * @exception IOException If an I/O error occourred accessing the specified
+ * System-ID.
+ * @exception CreationException If an error occourred parsing the document.
+ */
+ public Document parse(URL url)
+ throws IOException, CreationException;
+
+ /**
+ * Create a new empty DOM Document object.
+ *
+ * @return A non-null DOM Document object.
+ */
+ public Document create();
+}
diff --git a/src/org/apache/stylebook/Printer.java b/src/org/apache/stylebook/Printer.java
new file mode 100644
index 0000000..234d7b0
--- /dev/null
+++ b/src/org/apache/stylebook/Printer.java
@@ -0,0 +1,25 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import org.w3c.dom.Document;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public interface Printer extends Component {
+ public void print(Document doc, CreationContext c, OutputStream out)
+ throws CreationException, IOException;
+}
diff --git a/src/org/apache/stylebook/Processor.java b/src/org/apache/stylebook/Processor.java
new file mode 100644
index 0000000..836c96e
--- /dev/null
+++ b/src/org/apache/stylebook/Processor.java
@@ -0,0 +1,24 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.io.IOException;
+import org.w3c.dom.Document;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public interface Processor extends Component {
+ public Document process(Document doc, CreationContext c, Parameters p)
+ throws CreationException, IOException;
+}
diff --git a/src/org/apache/stylebook/Producer.java b/src/org/apache/stylebook/Producer.java
new file mode 100644
index 0000000..9ffc8fe
--- /dev/null
+++ b/src/org/apache/stylebook/Producer.java
@@ -0,0 +1,24 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.io.IOException;
+import org.w3c.dom.Document;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public interface Producer extends Component{
+ public Document produce(CreationContext c)
+ throws CreationException, IOException;
+}
diff --git a/src/org/apache/stylebook/Project.java b/src/org/apache/stylebook/Project.java
new file mode 100644
index 0000000..6755053
--- /dev/null
+++ b/src/org/apache/stylebook/Project.java
@@ -0,0 +1,139 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313221 $ $Date: 1999-12-01 19:39:14 +0100 (ons, 01 dec 1999) $
+ */
+public class Project {
+ private Hashtable entries=new Hashtable();
+ private Engine engine=null;
+ private URL urlbase=null;
+
+ public Project(Engine engine, Document project, Parameters parambase, URL u)
+ throws LoadingException, IOException {
+ this.engine=engine;
+ this.urlbase=u;
+ Element root=project.getDocumentElement();
+ if(!root.getTagName().equals("project"))
+ throw new LoadingException("Project does not start with <project>");
+ NodeList l=root.getChildNodes();
+ Parameters parameters=new NodeListParameters(l).merge(parambase);
+ processNodeList(l,this.urlbase,parameters);
+ }
+
+ private void processNodeList(NodeList l, URL urlbase, Parameters parambase)
+ throws LoadingException, IOException {
+ for(int x=0;x<l.getLength();x++) {
+ if(l.item(x).getNodeType()!=Node.ELEMENT_NODE) continue;
+ Element e=(Element)l.item(x);
+ String name=e.getTagName();
+ if(name.equals("parameter")) continue;
+ else if(name.equals("create")) setCreateEntry(e,urlbase,parambase);
+ else if(name.equals("resource")) setResourceEntry(e,urlbase);
+ else if(name.equals("process")) processEntry(e,urlbase,parambase);
+ else throw new LoadingException("Invalid element <"+name+">");
+ }
+ }
+
+ public Enumeration getEntryNames() {
+ return(this.entries.keys());
+ }
+
+ public void create(String name, OutputStream out)
+ throws IOException, CreationException {
+ this.engine.log(this,"Creating \""+name+"\"");
+ Entry e=(Entry)this.entries.get(name);
+ if(e==null) throw new CreationException("No Entry \""+name+"\"");
+ e.create(out);
+ }
+
+ private void setCreateEntry(Element e, URL urlbase, Parameters parambase)
+ throws LoadingException, IOException {
+ URL source=new URL(urlbase,e.getAttribute("source"));
+ String target=e.getAttribute("target");
+ Entry entry=new BasicEntry(this.engine,source,target,e,parambase);
+ Entry old=(Entry)this.entries.put(target,entry);
+ if(old!=null) if(!old.equals(entry))
+ throw new LoadingException("Duplicate Entry \""+target+"\"");
+ }
+
+ private void setResourceEntry(Element e, URL urlbase)
+ throws LoadingException, IOException {
+ URL source=new URL(urlbase,e.getAttribute("source"));
+ String target=e.getAttribute("target");
+ Entry entry=new ResourceEntry(this.engine,source,target);
+ Entry old=(Entry)this.entries.put(target,entry);
+ if(old!=null) if(!old.equals(entry))
+ throw new LoadingException("Duplicate Entry \""+target+"\"");
+ }
+
+ private void processEntry(Element e, URL urlbase, Parameters parambase)
+ throws LoadingException, IOException {
+ // Get the producer and the source, create a temporary context
+ String prod=e.getAttribute("producer");
+ URL source=new URL(urlbase,e.getAttribute("source"));
+ CreationContext ctx=new BasicContext(source,"");
+ ctx.merge(parambase);
+ // Try to load the producer
+ this.engine.debug(this,"Processing Source=\""+source+"\" ["+prod+"]");
+ Producer producer=this.engine.getProducer(prod);
+ if (producer==null)
+ throw new LoadingException("Invalid Producer \""+prod+"\"");
+ // Get local parameters
+ NodeList l=e.getChildNodes();
+ ctx.merge(new NodeListParameters(l));
+ // Try to create the subproject
+ Document doc=null;
+ try {
+ // Produce the document
+ doc=producer.produce(ctx);
+ // For every processor, generate the project
+ for(int x=0;x<l.getLength();x++) {
+ if(l.item(x).getNodeType()!=Node.ELEMENT_NODE) continue;
+ Element el=(Element)l.item(x);
+ if(el.getTagName().equals("parameter")) continue;
+ if(!el.getTagName().equals("processor"))
+ throw new LoadingException("Invalid <"+el.getTagName()+">");
+ Processor proc=this.engine.getProcessor(el.getAttribute("name"));
+ if(proc==null)
+ throw new LoadingException("No Processr \""+proc+"\"");
+ Parameters p=new NodeListParameters(el.getChildNodes()).merge(ctx);
+ doc=proc.process(doc,ctx,p);
+ }
+ } catch (CreationException x) {
+ x.printStackTrace(System.out);
+ throw new LoadingException("Processing Entry ("+x.getMessage()+")");
+ }
+ // Check for proper document
+ if (doc==null) return;
+ // Do as a top-level project recursively
+ Element root=doc.getDocumentElement();
+ if(!root.getTagName().equals("project"))
+ throw new LoadingException("Result of process is not <project>");
+ l=root.getChildNodes();
+ Parameters p=new NodeListParameters(l).merge(ctx);
+ processNodeList(l,source,p);
+
+ }
+}
diff --git a/src/org/apache/stylebook/ResourceEntry.java b/src/org/apache/stylebook/ResourceEntry.java
new file mode 100644
index 0000000..aba825f
--- /dev/null
+++ b/src/org/apache/stylebook/ResourceEntry.java
@@ -0,0 +1,53 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.io.IOException;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313221 $ $Date: 1999-12-01 19:39:14 +0100 (ons, 01 dec 1999) $
+ */
+public class ResourceEntry implements Entry {
+ private URL src=null;
+
+ public ResourceEntry(Engine e, URL s, String t) {
+ e.debug(this,"Creating Resource Source=\""+s+"\" Target=\""+t+"\"");
+ this.src=s;
+ }
+
+ public void create(OutputStream o)
+ throws IOException, CreationException {
+ InputStream in=new BufferedInputStream(this.src.openStream());
+ OutputStream out=new BufferedOutputStream(o);
+ int data=-1;
+ while((data=in.read())!=-1) out.write(data);
+ in.close();
+ out.flush();
+ }
+
+ public boolean equals(Entry e) {
+ try {
+ ResourceEntry r=(ResourceEntry)e;
+ if(r.src.equals(this.src)) return(true);
+ return(false);
+ } catch (Exception x) {
+ return(false);
+ }
+ }
+}
diff --git a/src/org/apache/stylebook/StreamHandler.java b/src/org/apache/stylebook/StreamHandler.java
new file mode 100644
index 0000000..8448fae
--- /dev/null
+++ b/src/org/apache/stylebook/StreamHandler.java
@@ -0,0 +1,50 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public class StreamHandler {
+ private File base=null;
+
+ public StreamHandler(String base) throws IOException {
+ if(base==null) base=System.getProperty("user.dir");
+ this.base=new File(base).getCanonicalFile();
+ if(!this.base.isDirectory()) {
+ mkdir(this.base);
+ }
+ }
+
+ public OutputStream getOutputStream(String name)
+ throws IOException {
+ File f=new File(name);
+ if (f.isAbsolute()) return new FileOutputStream(f);
+ if (f.getParent()!=null) mkdir(new File(base,f.getParent()));
+ return(new FileOutputStream(new File(base,name)));
+ }
+
+ private void mkdir(File file)
+ throws IOException {
+ if (file==null) return;
+ mkdir(file.getParentFile());
+ if (file.isDirectory()) return;
+ else file.mkdir();
+ }
+}
diff --git a/src/org/apache/stylebook/StyleBook.java b/src/org/apache/stylebook/StyleBook.java
new file mode 100644
index 0000000..6d0a504
--- /dev/null
+++ b/src/org/apache/stylebook/StyleBook.java
@@ -0,0 +1,163 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Properties;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313278 $ $Date: 2000-07-14 20:31:36 +0200 (fre, 14 jul 2000) $
+ */
+public class StyleBook implements Logger {
+ /** The project on wich we must operate */
+ private URL project=null;
+ /** Our properties */
+ private Properties properties=null;
+ /** The properties file */
+ private String propertiesfile="org/apache/stylebook/data/stylebook.properties";
+ /** Deny construction */
+ private StyleBook() {}
+
+ /** Create the StyleBook object */
+ private StyleBook(String argv[])
+ throws IOException {
+ super();
+ this.properties=new Properties();
+ ClassLoader loader=this.getClass().getClassLoader();
+ InputStream in=loader.getResourceAsStream(propertiesfile);
+ this.properties.load(in);
+
+ String project=null;
+ String style=null;
+
+ for(int x=0;x<argv.length;x++) {
+ String line=argv[x];
+ int pos=line.indexOf('=');
+ if (pos<0) {
+ if(project!=null) {
+ if(style!=null) {
+ exit("Duplicate Style (\""+style+ "\",\""+line+
+ "\")",1);
+ } else style=line;
+ } else project=line;
+ } else {
+ String name=line.substring(0,pos);
+ String value=line.substring(pos+1);
+ String old=(String)this.properties.setProperty(name,value);
+ log("Overriding "+name+"=\""+value+"\" (Old=\""+old+"\")");
+ }
+ }
+ if(project==null) exit("Project file non specified",1);
+ if(style==null) exit("Style file non specified",1);
+ File projectFile=new File(project);
+ File styleFile=new File(style);
+ URLHandler u=new URLHandler(projectFile,styleFile);
+ URL.setURLStreamHandlerFactory(u);
+ this.project=new URL("sbk:/sources/"+projectFile.getName());
+ log("Project URL: \""+this.project+"\"");
+ }
+
+ /**
+ * Run StyleBook.
+ *
+ * @param argv Command Line Arguments
+ */
+ public static void main(String argv[]) throws IOException{
+ try {
+ StyleBook sb=new StyleBook(argv);
+ Engine e=sb.getEngine();
+ if (e==null) exit("Error creating engine",3);
+ Project p=sb.getProject(e);
+ if (p==null) exit("Error creating project",3);
+ String targets=sb.properties.getProperty("targetDirectory");
+ StreamHandler s=new StreamHandler(targets);
+ Enumeration n=p.getEntryNames();
+ while (n.hasMoreElements()) {
+ String t=(String)n.nextElement();
+ p.create(t,s.getOutputStream(t));
+ }
+ } catch (CreationException x) {
+ Exception x2=x.getException();
+ if(x2!=null) log(x2);
+ exit(x,255);
+ } catch (Exception x) {
+ exit(x,255);
+ }
+ exit("All done successfully",0);
+ }
+
+ /** Create and Initialize Engine */
+ private Engine getEngine() throws IOException {
+ try {
+ String parser=properties.getProperty("parserClass");
+ URL config=new URL(properties.getProperty("engineConfig"));
+ return(new BasicEngine(parser,config,this));
+ } catch (InitializationException e) {
+ log(e);
+ return(null);
+ }
+ }
+
+ /** Create and Initialize Project */
+ private Project getProject(Engine e) throws IOException {
+ try {
+ Loader l=new Loader(e);
+ URL u=new URL(properties.getProperty("loaderConfig"));
+ return(l.load(u,project));
+ } catch (LoadingException x) {
+ log(x);
+ return(null);
+ }
+ }
+
+/* ************************************************************************** */
+
+ /**
+ * Report a message to the user.
+ *
+ * @param msg The log message to report.
+ */
+ public void log(Object source, String msg) {
+ String cls=source.getClass().getName();
+ cls=cls.substring(cls.lastIndexOf('.')+1);
+ System.out.println("["+cls+"] "+msg);
+ }
+
+ /** Report a message thru System.out */
+ private static void log(String msg) {
+ System.out.println("[StyleBook] "+msg);
+ }
+
+ /** Report an exception thru System.out */
+ private static void log(Exception e) {
+ log("Caught "+e.getClass().getName());
+ e.printStackTrace(System.out);
+ }
+
+ /** Report a message and exit with the specified error number */
+ private static void exit(String msg, int exit) {
+ log(msg);
+ System.exit(exit);
+ }
+
+ /** Report an exception and exit with the specified error number */
+ private static void exit(Exception e, int exit) {
+ log(e);
+ System.exit(exit);
+ }
+}
diff --git a/src/org/apache/stylebook/URLHandler.java b/src/org/apache/stylebook/URLHandler.java
new file mode 100644
index 0000000..9079522
--- /dev/null
+++ b/src/org/apache/stylebook/URLHandler.java
@@ -0,0 +1,124 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+import java.net.URLStreamHandlerFactory;
+import java.util.zip.ZipFile;
+
+/**
+ * The URLHandler class implements URLStreamHandlerFactory, wich is the
+ * factory used by StyleBook to produce URLConnections.<br>
+ * Handled by this factory are the "res" protocol (wich handles
+ * resources derived from the actual or the system class loaders) and the
+ * "sbk" protocol wich handles files in the style name space and the
+ * sources name space.
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313217 $ $Date: 1999-12-01 15:21:27 +0100 (ons, 01 dec 1999) $
+ */
+public class URLHandler implements URLStreamHandlerFactory {
+ private URL sty=null;
+ private URL src=null;
+
+ public URLHandler() {
+ super();
+ }
+
+ public URLHandler(File sources, File style)
+ throws IOException {
+ super();
+ if (sources==null) throw new IOException("Null Sources");
+ if (style==null) throw new IOException("Null Style");
+
+ if (style.isDirectory()) {
+ this.sty=style.getCanonicalFile().toURL();
+ } else if (style.exists()) {
+ // Check if it's a proper ZipFile
+ new ZipFile(style).close();
+ this.sty=new URL("jar:"+style.getCanonicalFile().toURL()+"!/");
+ } else throw new IOException("Style File/Directory not found");
+
+ if (sources.isFile()) {
+ this.src=sources.getCanonicalFile().toURL();
+ } else throw new IOException("Sources File/Directory not found");
+ }
+
+ public URLStreamHandler createURLStreamHandler(String protocol) {
+ if (protocol==null) return(null);
+ try {
+ if (protocol.equalsIgnoreCase("sbk"))
+ return(new StylebookStreamHandler(this.sty,this.src));
+ if (protocol.equalsIgnoreCase("res"))
+ return(new ResourceStreamHandler());
+ else return(null);
+ } catch (IOException e) {
+ return(null);
+ }
+ }
+
+ private class StylebookStreamHandler extends URLStreamHandler {
+ private URL style=null;
+ private URL sources=null;
+
+ private StylebookStreamHandler() {
+ super();
+ }
+
+ private StylebookStreamHandler(URL style, URL sources)
+ throws IOException {
+ this();
+ this.style=style;
+ this.sources=sources;
+ }
+
+ public URLConnection openConnection(URL u) throws IOException {
+ if (u==null) return(null);
+ String file=u.getFile();
+ for(int x=0;x<file.length();x++) if (file.charAt(x)!='/') {
+ file=file.substring(x);
+ break;
+ }
+ if (file.startsWith("style/")) {
+ if (file.length()==6) return(this.style.openConnection());
+ return new URL(this.style,file.substring(6)).openConnection();
+ } else if (file.startsWith("sources/")) {
+ if (file.length()==8) return(this.sources.openConnection());
+ return new URL(this.sources,file.substring(8)).openConnection();
+ } else throw new IOException("Invalid StyleBook URL \""+u+"\"");
+ }
+ }
+
+ private class ResourceStreamHandler extends URLStreamHandler {
+
+ private ResourceStreamHandler() {
+ super();
+ }
+
+ public URLConnection openConnection(URL u) throws IOException {
+ ClassLoader l=this.getClass().getClassLoader();
+ if (l==null) return(null);
+ String file=u.getFile();
+ for(int x=0;x<file.length();x++) if (file.charAt(x)!='/') {
+ file=file.substring(x);
+ break;
+ }
+ URL x=l.getResource(file);
+ if (x==null) x=ClassLoader.getSystemResource(u.getFile());
+ if (x==null) return(null);
+ return(x.openConnection());
+ }
+ }
+}
+
\ No newline at end of file
diff --git a/src/org/apache/stylebook/data/engine.dtd b/src/org/apache/stylebook/data/engine.dtd
new file mode 100644
index 0000000..5a963a1
--- /dev/null
+++ b/src/org/apache/stylebook/data/engine.dtd
@@ -0,0 +1,38 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- ENGINE DTD: Specifies how the engine configuration file should
+ be formatted. Reference it as
+ SYSTEM "res:/org/apache/stylebook/data/engine.dtd" -->
+
+<!-- engine: the root element of the configuration file -->
+<!ELEMENT engine (debug?, parser, producer*, processor*, printer*)>
+
+<!-- debug: enable or disable output of debug information -->
+<!ELEMENT debug EMPTY>
+<!ATTLIST debug enabled (true|false) "false">
+
+<!-- parser: define the parser class used by stylebook -->
+<!ELEMENT parser (parameter)*>
+<!ATTLIST parser class CDATA #REQUIRED>
+
+<!-- producer: associate a class with a producer name -->
+<!ELEMENT producer (parameter)*>
+<!ATTLIST producer name CDATA #REQUIRED
+ class CDATA #REQUIRED>
+
+<!-- processor: associate a class with a processor name -->
+<!ELEMENT processor (parameter)*>
+<!ATTLIST processor name CDATA #REQUIRED
+ class CDATA #REQUIRED>
+
+<!-- printer: associate a class with a printer name -->
+<!ELEMENT printer (parameter)*>
+<!ATTLIST printer name CDATA #REQUIRED
+ class CDATA #REQUIRED>
+
+<!-- parameter: a parameter passed to a class during initialiation -->
+<!ELEMENT parameter EMPTY>
+<!ATTLIST parameter name CDATA #REQUIRED
+ value CDATA #REQUIRED>
+
+<!-- CVS $Revision: 313209 $ $Date: 1999-12-01 13:52:36 +0100 (ons, 01 dec 1999) $ -->
diff --git a/src/org/apache/stylebook/data/engine.xml b/src/org/apache/stylebook/data/engine.xml
new file mode 100644
index 0000000..3ee513e
--- /dev/null
+++ b/src/org/apache/stylebook/data/engine.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE engine SYSTEM "res:/org/apache/stylebook/data/engine.dtd">
+
+<!-- ENGINE CONFIGURATION: Configuration for the StyleBook Engine class.
+ See "engine.dtd" for informations. -->
+
+<engine>
+
+ <debug enabled="false"/>
+
+ <parser class="org.apache.stylebook.parsers.CachingParser">
+ <parameter name="parserclass" value="org.apache.stylebook.parsers.XercesParser"/>
+ <parameter name="cachesize" value="10"/>
+ </parser>
+
+ <producer name="parser" class="org.apache.stylebook.producers.ParserProducer"/>
+ <producer name="context" class="org.apache.stylebook.producers.ContextProducer"/>
+ <producer name="project" class="org.apache.stylebook.producers.ProjectProducer"/>
+ <producer name="directory" class="org.apache.stylebook.producers.DirectoryProducer"/>
+
+ <processor name="null" class="org.apache.stylebook.processors.NullProcessor"/>
+ <processor name="xslt" class="org.apache.stylebook.processors.XalanProcessor"/>
+ <processor name="import" class="org.apache.stylebook.processors.ImportProcessor"/>
+
+ <printer name="xml" class="org.apache.stylebook.printers.XMLPrinter"/>
+ <printer name="html" class="org.apache.stylebook.printers.HTMLPrinter"/>
+ <printer name="image" class="org.apache.stylebook.printers.ImagePrinter"/>
+
+</engine>
+
+<!-- CVS $Revision: 313220 $ $Date: 1999-12-01 19:38:23 +0100 (ons, 01 dec 1999) $ -->
\ No newline at end of file
diff --git a/src/org/apache/stylebook/data/loader.dtd b/src/org/apache/stylebook/data/loader.dtd
new file mode 100644
index 0000000..8ac1001
--- /dev/null
+++ b/src/org/apache/stylebook/data/loader.dtd
@@ -0,0 +1,19 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- LOADER DTD: Defines how the StyleBook project source file should be
+ processed to be rendered as defined in project.dtd
+ SYSTEM "res:/org/apache/stylebook/data/loader.dtd" -->
+
+<!-- loader: the root element of the loader configuration file -->
+<!ELEMENT engine (processor*)>
+
+<!-- processor: process the source document using this processor -->
+<!ELEMENT processor (parameter)*>
+<!ATTLIST processor name CDATA #REQUIRED>
+
+<!-- parameter: a parameter passed to a processor during translation -->
+<!ELEMENT parameter EMPTY>
+<!ATTLIST parameter name CDATA #REQUIRED
+ value CDATA #REQUIRED>
+
+<!-- CVS $Revision: 313209 $ $Date: 1999-12-01 13:52:36 +0100 (ons, 01 dec 1999) $ -->
diff --git a/src/org/apache/stylebook/data/loader.xml b/src/org/apache/stylebook/data/loader.xml
new file mode 100644
index 0000000..0e950c3
--- /dev/null
+++ b/src/org/apache/stylebook/data/loader.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE engine SYSTEM "res:/org/apache/stylebook/data/loader.dtd">
+
+<!-- LOADER CONFIGURATION: When the project file specified on the command line
+ is loaded this is passed to a serie of processor
+ wich will translate it into the format specified
+ by "project.dtd". This file is only an example since
+ the loader configuration is by default located at
+ "sbk:/style/loader.xml" and packaged with the style
+ you want to use.
+ See "loader.dtd" for informations. -->
+
+<loader>
+ <processor name="xslt"/>
+</loader>
+
+<!-- CVS $Revision: 313213 $ $Date: 1999-12-01 14:29:28 +0100 (ons, 01 dec 1999) $ -->
diff --git a/src/org/apache/stylebook/data/project.dtd b/src/org/apache/stylebook/data/project.dtd
new file mode 100644
index 0000000..92cafc3
--- /dev/null
+++ b/src/org/apache/stylebook/data/project.dtd
@@ -0,0 +1,57 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- PROJECT DTD: Defines the format of the project file, and in wich format
+ the loader, after processing the file supplied on the command
+ line, should instantiate the project. This DTD is not used,
+ actually, since most of the times the final project is the
+ result of one or more processing stages, but is given to you
+ as a reference on how StyleBook expects the project.
+ SYSTEM "res:/org/apache/stylebook/data/project.dtd" -->
+
+<!-- project: the root element of the project file -->
+<!ELEMENT project (parameter|create|resource|process)*>
+
+<!-- parameter: a parameter passed to the different stages of creation
+ note that parameters are context sensitive -->
+<!ELEMENT parameter EMPTY>
+<!ATTLIST parameter name CDATA #REQUIRED
+ value CDATA #REQUIRED>
+
+<!-- create: create a target file producing it using the specified processor
+ acting on the specified source, processing it thru the different
+ specified processors and printing it to the specified target file
+ using the specified printer
+ note that the target must be an ID (there cannot be two different
+ target names in the document) -->
+<!ELEMENT create (parameter|processor)*>
+<!ATTLIST create target ID #REQUIRED
+ source CDATA #REQUIRED
+ producer CDATA #REQUIRED
+ printer CDATA #REQUIRED>
+
+<!-- processor: used in creation specifies how a document should be processed
+ before forwarding it to the next stage -->
+<!ELEMENT processor (parameter)*>
+<!ATTLIST processor name CDATA #REQUIRED>
+
+<!-- resource: specifies a resource or a file that needs to be copied from
+ one place to another -->
+<!ELEMENT resource EMPTY>
+<!ATTLIST resource target ID #REQUIRED
+ source CDATA #REQUIRED>
+
+<!-- resource: specifies a resource or a file that needs to be copied from
+ one place to another -->
+<!ELEMENT resource EMPTY>
+<!ATTLIST resource target ID #REQUIRED
+ source CDATA #REQUIRED>
+
+<!-- process: produce and process the specified source as done in creation
+ but instead of printing it add it to the project itself
+ note that the output of the last processing stage must conform
+ to this dtd -->
+<!ELEMENT create (parameter|processor)*>
+<!ATTLIST create source CDATA #REQUIRED
+ producer CDATA #REQUIRED>
+
+<!-- CVS $Revision: 313211 $ $Date: 1999-12-01 14:14:25 +0100 (ons, 01 dec 1999) $ -->
diff --git a/src/org/apache/stylebook/data/project.xml b/src/org/apache/stylebook/data/project.xml
new file mode 100644
index 0000000..6c5daa9
--- /dev/null
+++ b/src/org/apache/stylebook/data/project.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!DOCTYPE engine SYSTEM "res:/org/apache/stylebook/data/project.dtd">
+
+<!-- PROJECT EXAMPLE: This is an example of how the project file should look
+ like after it passed thru the different processors
+ specified in the loader configuration. -->
+
+<project>
+
+ <!-- this parameter will be visible everywhere -->
+ <parameter name="copyright" value="Apache Software Foundation"/>
+
+
+ <!-- copy the image.jpg file from the style archive to the targets -->
+ <resource source="sbk:/style/image.jpg" target="images/image.jpg"/>
+
+ <!-- copy the photo.jpg file from the sources to the targets -->
+ <resource source="sbk:/sources/photo.jpg" target="images/photo.jpg"/>
+
+ <!-- create the file index.html from the source index.xml -->
+ <create source="sbk:/sources/index.xml" target="index.html"
+ producer="parser" printer="html">
+ <!-- this parameter will be visible creating only this target -->
+ <parameter name="data" value="an unknown value"/>
+
+ <!-- after production pass the document to the import processor -->
+ <processor name="import"/>
+
+ <!-- after the document has been managed by the import processor, process
+ it with the xslt processor -->
+ <processor name="xslt">
+ <!-- this parameter is only visible to this processor processing this
+ specific file -->
+ <parameter name="stylesheet" value="sbk:/style/document2html.xsl"/>
+ </processor>
+ </create>
+
+ <!-- process an entry and add the result to this project -->
+ <process source="sbk:/style/resources/" producer="directory">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/directory2project.xsl"/>
+ </processor>
+ </process>
+
+</project>
+
+<!-- CVS $Revision: 313212 $ $Date: 1999-12-01 14:28:47 +0100 (ons, 01 dec 1999) $ -->
\ No newline at end of file
diff --git a/src/org/apache/stylebook/data/stylebook.properties b/src/org/apache/stylebook/data/stylebook.properties
new file mode 100644
index 0000000..bb802aa
--- /dev/null
+++ b/src/org/apache/stylebook/data/stylebook.properties
@@ -0,0 +1,16 @@
+############################################################################
+# The StyleBook principal configuration file.
+
+# The class used to parse the loader, engine and project files
+parserClass=org.apache.stylebook.parsers.XercesParser
+
+# The URL of the location of the engine configuration
+engineConfig=res:/org/apache/stylebook/data/engine.xml
+
+# The URL of the location of the loader configuration
+loaderConfig=sbk:/style/loader.xml
+
+# The default targets directory where StyleBook will produce output
+targetDirectory=.
+
+# CVS $Revision: 313210 $ $Date: 1999-12-01 13:55:30 +0100 (ons, 01 dec 1999) $
diff --git a/src/org/apache/stylebook/parsers/AbstractParser.java b/src/org/apache/stylebook/parsers/AbstractParser.java
new file mode 100644
index 0000000..9e068c4
--- /dev/null
+++ b/src/org/apache/stylebook/parsers/AbstractParser.java
@@ -0,0 +1,30 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.parsers;
+
+import org.apache.stylebook.*;
+import java.io.IOException;
+import java.net.URL;
+import org.xml.sax.InputSource;
+import org.w3c.dom.Document;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313202 $ $Date: 1999-11-30 13:28:55 +0100 (tis, 30 nov 1999) $
+ */
+public abstract class AbstractParser extends AbstractComponent implements Parser {
+
+ public Document parse(URL in)
+ throws IOException, CreationException {
+ return(this.parse(new InputSource(in.toExternalForm())));
+ }
+}
\ No newline at end of file
diff --git a/src/org/apache/stylebook/parsers/CachingParser.java b/src/org/apache/stylebook/parsers/CachingParser.java
new file mode 100644
index 0000000..460e6f4
--- /dev/null
+++ b/src/org/apache/stylebook/parsers/CachingParser.java
@@ -0,0 +1,118 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.parsers;
+
+import org.apache.stylebook.*;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import org.xml.sax.InputSource;
+import org.w3c.dom.Document;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313202 $ $Date: 1999-11-30 13:28:55 +0100 (tis, 30 nov 1999) $
+ */
+public class CachingParser extends AbstractParser implements Parser {
+ private Parser parser=null;
+ private int cachesize=10;
+ private Hashtable cache=new Hashtable();
+
+ /**
+ * Initialize this component instance.
+ *
+ * @param e The Engine owning this Component instance
+ * @param p This component initialization Parameters
+ */
+ public void init(Engine e, Parameters p)
+ throws InitializationException {
+ super.init(e,p);
+ // Instantiate the sub-parser
+ String cls=p.getParameter("parserclass");
+ if (cls==null)
+ throw new InitializationException("Parameter \"parserclass\" not "+
+ "specified");
+ this.parser=ComponentFactory.getParser(cls);
+ // Create the parameters for the sub-parser
+ Parameters p2=new BasicParameters();
+ Enumeration n=p.getParameterNames();
+ while(n.hasMoreElements()) {
+ String name=(String)n.nextElement();
+ String value=p.getParameter(name);
+ if(!name.startsWith("parser.")) continue;
+ name=name.substring(7);
+ p2.setParameter(name,value);
+ }
+ // Initialize the sub-parser
+ this.parser.init(e,p2);
+ // Set up the cache size
+ try {
+ this.cachesize=Integer.parseInt(p.getParameter("cachesize"));
+ } catch (Exception x) {
+ debug("Cache size not specified (default=10)");
+ this.cachesize=10;
+ }
+ }
+
+ /**
+ * Create a new empty DOM Document object.
+ *
+ * @return A non-null DOM Document object.
+ * @exception DocumentException If the new Document cannot be created.
+ */
+ public Document create() {
+ return(this.parser.create());
+ }
+
+ /**
+ * Parse the specified InputSource.
+ *
+ * @param in The InputSource to parse.
+ * @return A non-null DOM Document object.
+ * @exception IOException If an I/O error occourred accessing the specified
+ * System-ID.
+ * @exception CreationException If an error occourred parsing the document.
+ */
+ public Document parse(InputSource in)
+ throws IOException, CreationException {
+ String name=in.getSystemId();
+ if (name==null) return(this.parser.parse(in));
+ CachedEntry ent=(CachedEntry)this.cache.get(name);
+ Document doc=null;
+ if (ent==null) {
+ doc=this.parser.parse(in);
+ ent=new CachedEntry(doc);
+ this.cache.put(name,ent);
+ } else {
+ ent.hits++;
+ doc=ent.document;
+ if (doc==null) doc=this.parser.parse(in);
+ else log("Serving cached document \""+name+"\" ("+ent.hits+")");
+ ent.document=doc;
+ }
+ purge();
+ return(doc);
+ }
+
+ private void purge() {
+ // Cache purging algorithm...
+ }
+
+ private class CachedEntry {
+ public Document document=null;
+ public int hits=0;
+
+ public CachedEntry(Document doc) {
+ this.document=doc;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/org/apache/stylebook/parsers/XercesParser.java b/src/org/apache/stylebook/parsers/XercesParser.java
new file mode 100644
index 0000000..f72d062
--- /dev/null
+++ b/src/org/apache/stylebook/parsers/XercesParser.java
@@ -0,0 +1,132 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.parsers;
+
+import java.io.IOException;
+import org.apache.stylebook.AbstractComponent;
+import org.apache.stylebook.Parser;
+import org.apache.stylebook.CreationException;
+import org.apache.xerces.dom.DocumentImpl;
+
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.w3c.dom.Document;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.ParserConfigurationException;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313289 $ $Date: 2002-01-22 19:24:53 +0100 (tis, 22 jan 2002) $
+ */
+public class XercesParser extends AbstractParser implements Parser,ErrorHandler {
+ DocumentBuilderFactory docFactory;
+
+ /**
+ * Instantiate a DocumentBuilderFactory.
+ */
+ public XercesParser()
+ {
+ docFactory = DocumentBuilderFactory.newInstance();
+ docFactory.setNamespaceAware(true);
+ docFactory.setExpandEntityReferences(true);
+ }
+
+
+ /**
+ * Parse the specified InputSource.
+ *
+ * @param in The InputSource to parse.
+ * @return A non-null DOM Document object.
+ * @exception IOException If an I/O error occourred accessing the specified
+ * System-ID.
+ * @exception CreationException If an error occourred parsing the document.
+ */
+ public Document parse(InputSource in)
+ throws IOException, CreationException {
+ this.debug("Parsing \""+in.getSystemId()+"\"");
+ try {
+ DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
+ Document document = docBuilder.parse(in);
+
+ if (document==null) {
+ throw new CreationException("Cannot retrieve parsed document");
+ } else return(document);
+ } catch (IOException e) {
+ this.log(e.getMessage());
+ throw new CreationException("IOException caught while using DocumentBuilder to parse an XML document.",e);
+ } catch (ParserConfigurationException e) {
+ this.log(e.getMessage());
+ throw new CreationException("ParserConfigurationException caught while using DocumentBuilder to parse an XML document.",e);
+ } catch (SAXNotRecognizedException e) {
+ this.log(e.getMessage());
+ throw new CreationException("SAXNotRecognizedException caught while using DocumentBuilder to parse an XML document.",e);
+ } catch (SAXException e) {
+ this.log(e.getMessage());
+ throw new CreationException("SAXException caught using DocumentBuilder to parse an XML document.",e);
+ }
+ }
+
+ /**
+ * Create a new empty DOM Document object.
+ *
+ * @return A non-null DOM Document object.
+ * @exception DocumentException If the new Document cannot be created.
+ */
+ public Document create() {
+ this.debug("Creating new Document");
+ return new DocumentImpl();
+ }
+
+ /**
+ * Receive notification of a recoverable error.
+ *
+ * @param e The Exception thrown during parsing.
+ * @exception SAXException The Exception notifying the client.
+ */
+ public void error(SAXParseException e)
+ throws SAXException {
+ throw new SAXException(e.getMessage()+" [File: \""+e.getSystemId()+
+ "\" Line: "+e.getLineNumber()+" Column: "+
+ e.getColumnNumber()+"]",e);
+ }
+
+ /**
+ * Receive notification of a non-recoverable error.
+ *
+ * @param e The Exception thrown during parsing.
+ * @exception SAXException The Exception notifying the client.
+ */
+ public void fatalError(SAXParseException e)
+ throws SAXException {
+ throw new SAXException(e.getMessage()+" [File: \""+e.getSystemId()+
+ "\" Line: "+e.getLineNumber()+" Column: "+
+ e.getColumnNumber()+"]",e);
+ }
+
+ /**
+ * Receive notification of a warning.
+ *
+ * @param e The Exception thrown during parsing.
+ * @exception SAXException The Exception notifying the client.
+ */
+ public void warning(SAXParseException e)
+ throws SAXException {
+ throw new SAXException(e.getMessage()+" [File: \""+e.getSystemId()+
+ "\" Line: "+e.getLineNumber()+" Column: "+
+ e.getColumnNumber()+"]",e);
+ }
+}
\ No newline at end of file
diff --git a/src/org/apache/stylebook/printers/HTMLPrinter.java b/src/org/apache/stylebook/printers/HTMLPrinter.java
new file mode 100644
index 0000000..e9888a2
--- /dev/null
+++ b/src/org/apache/stylebook/printers/HTMLPrinter.java
@@ -0,0 +1,314 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.printers;
+
+import org.apache.stylebook.*;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.BufferedWriter;
+import org.w3c.dom.Attr;
+import org.w3c.dom.CDATASection;
+import org.w3c.dom.Comment;
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.Element;
+import org.w3c.dom.Entity;
+import org.w3c.dom.EntityReference;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Notation;
+import org.w3c.dom.ProcessingInstruction;
+import org.w3c.dom.Text;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313270 $ $Date: 2000-06-23 23:21:08 +0200 (fre, 23 jun 2000) $
+ */
+public class HTMLPrinter extends AbstractComponent implements Printer
+{
+
+ final static String ENCODING = "UTF8";
+
+ /**
+ * Print a DOM Document.
+ *
+ * @param doc The Document to print.
+ * @param out The OutputStream used for printing.
+ * @param env The Environment of this printing request.
+ * @exception IOException If an I/O error occourred accessing resources.
+ * @exception CreationException If the Document cannot be printed.
+ */
+ public void print(Document doc, CreationContext c, OutputStream out)
+ throws CreationException, IOException {
+ BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(out,ENCODING));
+ printDocument(doc, writer);
+ writer.flush();
+ }
+
+
+ /** Process a nodelist calling the appropriate print...() method. */
+ private void printNodeList(NodeList list, BufferedWriter out) throws IOException {
+ for ( int x=0;x<list.getLength();x++ )
+ {
+ Node node=list.item(x);
+ switch ( node.getNodeType() )
+ {
+ case Node.ATTRIBUTE_NODE:
+ printAttribute((Attr)node,out);
+ break;
+ case Node.CDATA_SECTION_NODE:
+ printCDATASection((CDATASection)node,out);
+ break;
+ case Node.COMMENT_NODE:
+ printComment((Comment)node,out);
+ break;
+ case Node.DOCUMENT_FRAGMENT_NODE:
+ printDocumentFragment((DocumentFragment)node,out);
+ break;
+ case Node.DOCUMENT_NODE:
+ printDocument((Document)node,out);
+ break;
+ case Node.DOCUMENT_TYPE_NODE:
+ printDocumentType((DocumentType)node,out);
+ break;
+ case Node.ELEMENT_NODE:
+ printElement((Element)node,out);
+ break;
+ case Node.ENTITY_NODE:
+ printEntity((Entity)node,out);
+ break;
+ case Node.ENTITY_REFERENCE_NODE:
+ printEntityReference((EntityReference)node,out);
+ break;
+ case Node.NOTATION_NODE:
+ printNotation((Notation)node,out);
+ break;
+ case Node.PROCESSING_INSTRUCTION_NODE:
+ printProcessingInstruction((ProcessingInstruction)node,out);
+ break;
+ case Node.TEXT_NODE:
+ printText((Text)node,out);
+ break;
+ }
+ }
+ }
+
+ /** Print an ATTRIBUTE (name="value") node. */
+ private void printAttribute(Attr node, BufferedWriter out) throws IOException {
+ out.write(node.getName()+"=\""+node.getValue()+"\"");
+ }
+
+ /** Print a CDATA (<[CDATA[ ... ]]>) node. */
+ private void printCDATASection(CDATASection node, BufferedWriter out) throws IOException {
+ printString(node.getData(),out);
+ }
+
+ /** Print a COMMENT (<!-- ... -->) node. */
+ private void printComment(Comment node, BufferedWriter out) throws IOException {
+ out.write("<!--"+node.getData()+"-->");
+ }
+
+ /** Print a DOCUMENT FRAGMENT (????) node. */
+ private void printDocumentFragment(DocumentFragment node, BufferedWriter out) throws IOException {
+ out.write("<!-- Document Fragment Node -->");
+ }
+
+ /** Print a DOCUMENT node. */
+ private void printDocument(Document node, BufferedWriter out) throws IOException {
+ printNodeList(node.getChildNodes(),out);
+ }
+
+ /** Print a DOCUMENT TYPE (<!DOCTYPE ... bla bla bla>) node. */
+ private void printDocumentType(DocumentType node, BufferedWriter out) throws IOException {
+ out.write("<!-- DOCTYPE "+node.getName()+" -->");
+ }
+
+ /** Print a ELEMENT (do I need to supply the example ??? :) node. */
+ private void printElement(Element node, BufferedWriter out) throws IOException {
+ String tag=node.getTagName().toUpperCase();
+ out.write("<"+tag);
+ // Process attributes
+ NamedNodeMap atts=node.getAttributes();
+ if ( (null!=atts) && (atts.getLength()>0) )
+ {
+ for ( int x=0; x<atts.getLength(); x++ )
+ {
+ out.write(' ');
+ printAttribute((Attr)atts.item(x),out);
+ }
+ }
+ out.write(">");
+ // Process child nodes
+ if ( (null!=node.getChildNodes()) &&
+ (node.getChildNodes().getLength()>0) )
+ {
+ printNodeList(node.getChildNodes(),out);
+ }
+
+ // Print the END tag...
+ if ( tag.equals("AREA") ) return;
+ else if ( tag.equals("BASE") ) return;
+ else if ( tag.equals("BASEFONT") ) return;
+ else if ( tag.equals("BR") ) return;
+ else if ( tag.equals("COL") ) return;
+ else if ( tag.equals("FRAME") ) return;
+ else if ( tag.equals("HR") ) return;
+ else if ( tag.equals("IMG") ) return;
+ else if ( tag.equals("INPUT") ) return;
+ else if ( tag.equals("ISINDEX") ) return;
+ else if ( tag.equals("LINK") ) return;
+ else if ( tag.equals("META") ) return;
+ else if ( tag.equals("PARAM") ) return;
+ out.write("</"+tag+">");
+ }
+
+ /** Print a ENTITY node (NOTE: This should be used with DOCTYPE). */
+ private void printEntity(Entity node, BufferedWriter out) throws IOException {
+ out.write("<!-- Entity Node -->");
+ }
+
+ /** Print a ENTITY REFERENCE node (NOTE: Again, used in within DOCTYPE). */
+ private void printEntityReference(EntityReference node, BufferedWriter out) throws IOException {
+ printString(node.getFirstChild().getNodeValue(),out);
+ }
+
+ /** Print a NOTATION node (NOTE: Again -3rd-, used in within DOCTYPE). */
+ private void printNotation(Notation node, BufferedWriter out) throws IOException {
+ out.write("<!-- Notation Node -->");
+ }
+
+ /** Print a PROCESSING INSTRUCTION (<?name ...?>) node. */
+ private void printProcessingInstruction(ProcessingInstruction node, BufferedWriter out) throws IOException {
+ out.write("<!-- PI:"+node.getTarget()+" "+node.getData()+"-->");
+ }
+
+ /** Print a TEXT (see example for ELEMENT) node. */
+ private void printText(Text node, BufferedWriter out) throws IOException {
+ printString(node.getData(),out);
+ }
+
+ private void printString(String data, BufferedWriter out) throws IOException {
+ for ( int x=0; x<data.length(); x++ )
+ {
+ char c=data.charAt(x);
+ if ( c=='\n' ) out.write("\n");
+ else if ( c==34 ) out.write(""");
+ else if ( c==38 ) out.write("&");
+ else if ( c==60 ) out.write("<");
+ else if ( c==62 ) out.write(">");
+ else if ( c==8364 ) out.write("€");
+ else if ( (c>=160) && (c<=255) ) switch ( c )
+ {
+ case 160: out.write(" "); break;
+ case 161: out.write("¡"); break;
+ case 162: out.write("¢"); break;
+ case 163: out.write("£"); break;
+ case 164: out.write("¤"); break;
+ case 165: out.write("¥"); break;
+ case 166: out.write("¦"); break;
+ case 167: out.write("§"); break;
+ case 168: out.write("¨"); break;
+ case 169: out.write("©"); break;
+ case 170: out.write("ª"); break;
+ case 171: out.write("«"); break;
+ case 172: out.write("¬"); break;
+ case 173: out.write(""); break;
+ case 174: out.write("®"); break;
+ case 175: out.write("¯"); break;
+ case 176: out.write("°"); break;
+ case 177: out.write("±"); break;
+ case 178: out.write("²"); break;
+ case 179: out.write("³"); break;
+ case 180: out.write("´"); break;
+ case 181: out.write("µ"); break;
+ case 182: out.write("¶"); break;
+ case 183: out.write("·"); break;
+ case 184: out.write("¸"); break;
+ case 185: out.write("¹"); break;
+ case 186: out.write("º"); break;
+ case 187: out.write("»"); break;
+ case 188: out.write("¼"); break;
+ case 189: out.write("½"); break;
+ case 190: out.write("¾"); break;
+ case 191: out.write("¿"); break;
+ case 192: out.write("À"); break;
+ case 193: out.write("Á"); break;
+ case 194: out.write("Â"); break;
+ case 195: out.write("Ã"); break;
+ case 196: out.write("Ä"); break;
+ case 197: out.write("Å"); break;
+ case 198: out.write("Æ"); break;
+ case 199: out.write("Ç"); break;
+ case 200: out.write("È"); break;
+ case 201: out.write("É"); break;
+ case 202: out.write("Ê"); break;
+ case 203: out.write("Ë"); break;
+ case 204: out.write("Ì"); break;
+ case 205: out.write("Í"); break;
+ case 206: out.write("Î"); break;
+ case 207: out.write("Ï"); break;
+ case 208: out.write("Ð"); break;
+ case 209: out.write("Ñ"); break;
+ case 210: out.write("Ò"); break;
+ case 211: out.write("Ó"); break;
+ case 212: out.write("Ô"); break;
+ case 213: out.write("Õ"); break;
+ case 214: out.write("Ö"); break;
+ case 215: out.write("×"); break;
+ case 216: out.write("Ø"); break;
+ case 217: out.write("Ù"); break;
+ case 218: out.write("Ú"); break;
+ case 219: out.write("Û"); break;
+ case 220: out.write("Ü"); break;
+ case 221: out.write("Ý"); break;
+ case 222: out.write("Þ"); break;
+ case 223: out.write("ß"); break;
+ case 224: out.write("à"); break;
+ case 225: out.write("á"); break;
+ case 226: out.write("â"); break;
+ case 227: out.write("ã"); break;
+ case 228: out.write("ä"); break;
+ case 229: out.write("å"); break;
+ case 230: out.write("æ"); break;
+ case 231: out.write("ç"); break;
+ case 232: out.write("è"); break;
+ case 233: out.write("é"); break;
+ case 234: out.write("ê"); break;
+ case 235: out.write("ë"); break;
+ case 236: out.write("ì"); break;
+ case 237: out.write("í"); break;
+ case 238: out.write("î"); break;
+ case 239: out.write("ï"); break;
+ case 240: out.write("ð"); break;
+ case 241: out.write("ñ"); break;
+ case 242: out.write("ò"); break;
+ case 243: out.write("ó"); break;
+ case 244: out.write("ô"); break;
+ case 245: out.write("õ"); break;
+ case 246: out.write("ö"); break;
+ case 247: out.write("÷"); break;
+ case 248: out.write("ø"); break;
+ case 249: out.write("ù"); break;
+ case 250: out.write("ú"); break;
+ case 251: out.write("û"); break;
+ case 252: out.write("ü"); break;
+ case 253: out.write("ý"); break;
+ case 254: out.write("þ"); break;
+ case 255: out.write("ÿ"); break;
+ }
+ else out.write(c);
+ }
+ }
+}
diff --git a/src/org/apache/stylebook/printers/HTMLSerializer.java b/src/org/apache/stylebook/printers/HTMLSerializer.java
new file mode 100644
index 0000000..c062190
--- /dev/null
+++ b/src/org/apache/stylebook/printers/HTMLSerializer.java
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.printers;
+
+import org.apache.stylebook.*;
+import org.apache.xml.serialize.OutputFormat;
+import org.apache.xml.serialize.Method;
+import org.apache.xml.serialize.XHTMLSerializer;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import org.w3c.dom.Document;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313265 $ $Date: 2000-06-06 03:03:21 +0200 (tis, 06 jun 2000) $
+ */
+public class HTMLSerializer extends AbstractComponent implements org.apache.stylebook.Printer {
+
+ /**
+ * Print a DOM Document.
+ *
+ * @param doc The Document to print.
+ * @param out The OutputStream used for printing.
+ * @param env The Environment of this printing request.
+ * @exception IOException If an I/O error occourred accessing resources.
+ * @exception CreationException If the Document cannot be printed.
+ */
+ public void print(Document doc, CreationContext c, OutputStream out)
+ throws CreationException, IOException {
+ // Thanks to Ingo Macherius <macherius at darmstadt.gmd.de>
+ //OutputFormat f=new OutputFormat(OutputFormat.METHOD_XHTML,
+ OutputFormat f=new OutputFormat(Method.XHTML,
+ "US-ASCII",true);
+ //Serializer s=Serializer.makeSerializer(out,f);
+ XHTMLSerializer s = new XHTMLSerializer(out, f);
+ s.serialize(doc);
+ }
+}
diff --git a/src/org/apache/stylebook/printers/ImagePrinter.java b/src/org/apache/stylebook/printers/ImagePrinter.java
new file mode 100644
index 0000000..b46bbd2
--- /dev/null
+++ b/src/org/apache/stylebook/printers/ImagePrinter.java
@@ -0,0 +1,274 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.printers;
+
+import org.apache.stylebook.*;
+import com.sun.image.codec.jpeg.*;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.*;
+import java.net.*;
+import java.awt.*;
+import java.awt.geom.AffineTransform;
+import java.awt.image.*;
+import java.util.*;
+import javax.swing.*;
+import org.w3c.dom.Attr;
+import org.w3c.dom.CDATASection;
+import org.w3c.dom.Comment;
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.Element;
+import org.w3c.dom.Entity;
+import org.w3c.dom.EntityReference;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Notation;
+import org.w3c.dom.ProcessingInstruction;
+import org.w3c.dom.Text;
+
+/**
+ * The ImagePrinter Printer writes images.
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313202 $ $Date: 1999-11-30 13:28:55 +0100 (tis, 30 nov 1999) $
+ */
+public class ImagePrinter extends AbstractComponent implements Printer {
+
+ int R=0;
+ int G=1;
+ int B=2;
+ int A=3;
+
+ /**
+ * Print a DOM Document.
+ *
+ * @param doc The Document to print.
+ * @param out The OutputStream used for printing.
+ * @param env The Environment of this printing request.
+ * @exception IOException If an I/O error occourred accessing resources.
+ * @exception CreationException If the Document cannot be printed.
+ */
+ public void print(Document doc, CreationContext ctx, OutputStream out)
+ throws CreationException, IOException {
+ // Check for proper root element
+ Element element=doc.getDocumentElement();
+ if (!element.getTagName().equals("image")) {
+ throw new CreationException("Invalid document supplied",doc);
+ }
+ // Check wether we have a source image
+ String source=element.getAttribute("source");
+ BufferedImage img=null;
+ Graphics2D gr=null;
+ // If we have a source image, this is taken as our source.
+ if (source.length()>0) {
+ ImageIcon ico=null;
+ if (source.indexOf(":/")>=0) {
+ ico=new ImageIcon(new URL(source).openConnection().getURL());
+ } else ico=new ImageIcon(source);
+
+ if ((ico.getIconWidth()<1) | (ico.getIconHeight()<1)) {
+ throw new CreationException("Cannot load image \""+source+"\"");
+ }
+ img=new BufferedImage(ico.getIconWidth(), ico.getIconHeight(),
+ BufferedImage.TYPE_INT_RGB);
+ gr=img.createGraphics();
+ gr.drawImage(ico.getImage(),0,0,ico.getImageObserver());
+ } else {
+ // We don't have a source image. Build up a new getting height and
+ // width from attributes
+ int w=0;
+ int h=0;
+ try {
+ String width=element.getAttribute("width");
+ String height=element.getAttribute("height");
+ w=Integer.parseInt(width);
+ h=Integer.parseInt(height);
+ } catch (NumberFormatException e) {
+ throw new CreationException("Image witdth or height error");
+ }
+ if ((w<1) | (h<1)) {
+ throw new CreationException("Image witdth or height unspecified");
+ }
+ img=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
+ gr=img.createGraphics();
+ // Now process the bgcolor attribute for background colorization
+ int bg=0;
+ try {
+ String bgcolor=element.getAttribute("bgcolor");
+ bg=Integer.parseInt(bgcolor,16);
+ } catch (NumberFormatException e) {
+ throw new CreationException("Background color error");
+ }
+ Color c=new Color(bg);
+ gr.setBackground(c);
+ gr.clearRect(0,0,w,h);
+ // Check if we have a background to tile
+ String background=element.getAttribute("background");
+ if (background.length()>0) {
+ // We have a background image. Load it.
+ ImageIcon ico=new ImageIcon(background);
+ if ((ico.getIconWidth()<1) | (ico.getIconHeight()<1)) {
+ throw new CreationException("Cannot load background \""+source+"\"");
+ }
+ // Tile the image.
+ int x=0;
+ int y=0;
+ while (true) {
+ gr.drawImage(ico.getImage(),x,y,ico.getImageObserver());
+ x+=ico.getIconWidth();
+ if (x>w) {
+ x=0;
+ y+=ico.getIconHeight();
+ }
+ if (y>h) break;
+ }
+ }
+ }
+
+ // Process child elements
+ NodeList l=element.getChildNodes();
+ for (int x=0;x<l.getLength();x++) {
+ if (l.item(x).getNodeType()==Node.ELEMENT_NODE) {
+ processElement((Element)l.item(x),img);
+ }
+ }
+
+ // Write out image (highest quality for jpeg data)
+ JPEGEncodeParam jpar=JPEGCodec.getDefaultJPEGEncodeParam(img);
+ jpar.setQuality(1,true);
+ JPEGImageEncoder jenc=JPEGCodec.createJPEGEncoder(out,jpar);
+ jenc.encode(img);
+ out.flush();
+ }
+
+ void processElement(Element e, BufferedImage i)
+ throws CreationException {
+ if (e==null) return;
+ int R=0; int G=1; int B=2; int A=3;
+ // Create new alpha image
+ int w=i.getWidth();
+ int h=i.getHeight();
+ BufferedImage n=new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
+ // Clear new alpha image
+ int np[]=new int[]{0,0,0,0};
+ WritableRaster nr=n.getRaster();
+ for (int x=0;x<nr.getWidth();x++) for (int y=10;y<nr.getHeight();y++) {
+ nr.setPixel(x,y,np);
+ }
+ // Check wich element is being processed.
+ boolean ret=false;
+ if (e.getTagName().equals("text")) ret=placeText(e,n);
+ if(!ret) return;
+ // Apply new image over existing
+ WritableRaster ir=i.getRaster();
+ int ip[]=new int[]{0,0,0,0};
+ double ia=0;
+ double na=1;
+ for (int x=0;x<ir.getWidth();x++) for (int y=0;y<ir.getHeight();y++) {
+ ir.getPixel(x,y,ip);
+ nr.getPixel(x,y,np);
+ if (np[A]>0) {
+ na=((double)np[A]/255);
+ ia=(1-na);
+ ip[R]=(int)(((double)ip[R]*ia) + ((double)np[R]*na));
+ ip[G]=(int)(((double)ip[G]*ia) + ((double)np[G]*na));;
+ ip[B]=(int)(((double)ip[B]*ia) + ((double)np[B]*na));;
+ }
+ ir.setPixel(x,y,ip);
+ }
+ }
+
+ private boolean placeText(Element e, BufferedImage i)
+ throws CreationException {
+ String text=e.getAttribute("text");
+ String font=e.getAttribute("font");
+ String ssize=e.getAttribute("size");
+ String sstyle=e.getAttribute("style");
+ String scolor=e.getAttribute("color");
+ String sx=e.getAttribute("x");
+ String sy=e.getAttribute("y");
+ String halign=e.getAttribute("halign");
+ String valign=e.getAttribute("valign");
+ // Check proper text
+ if (text.length()<1) return(false);
+ // Check size, x and y parameters
+ int color,size,insx,insy;
+ try {
+ size=Integer.parseInt(ssize);
+ insx=Integer.parseInt(sx);
+ insy=Integer.parseInt(sy);
+ color=Integer.parseInt(scolor,16);
+ } catch (NumberFormatException ex) {
+ throw new CreationException("Attribute size, x, y or color error");
+ }
+ // Get style
+ int style=Font.PLAIN;
+ if (sstyle.equals("bold")) style=Font.BOLD;
+ else if (sstyle.equals("italic")) style=Font.ITALIC;
+ else if (sstyle.equals("bolditalic")) style=Font.BOLD+Font.ITALIC;
+ Font f=new Font(font,style,size);
+ FontMetrics m=i.createGraphics().getFontMetrics(f);
+ // Create temporary image
+ int w=m.stringWidth(text)*2;
+ int h=m.getHeight()*2;
+ BufferedImage n=new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
+ // Write out some text
+ Graphics2D gr=n.createGraphics();
+ gr.setColor(new Color(0x0ff000000,true));
+ gr.setFont(f);
+ gr.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_ON);
+ gr.drawString(text,5,h-(h/4));
+ // Resize image
+ int minx=w;
+ int miny=h;
+ int maxx=0;
+ int maxy=0;
+ WritableRaster nr=n.getRaster();
+ int np[]=new int[]{0,0,0,0};
+ for (int x=0;x<nr.getWidth();x++) for (int y=10;y<nr.getHeight();y++) {
+ nr.getPixel(x,y,np);
+ if (np[A]>0) {
+ if(x<minx) minx=x;
+ if(x>maxx) maxx=x;
+ if(y<miny) miny=y;
+ if(y>maxy) maxy=y;
+ }
+ }
+ if (halign.equals("right")) insx=insx-((maxx-minx)+1);
+ if (halign.equals("center")) insx=insx-(((maxx-minx)+1)/2);
+ if (valign.equals("bottom")) insy=insy-((maxy-miny)+1);
+ if (valign.equals("center")) insy=insy-(((maxy-miny)+1)/2);
+ WritableRaster ir=i.getRaster();
+ int newx,newy;
+ newy=insy;
+ for (int y=miny;y<=maxy;y++) {
+ newx=insx;
+ if(newy>=0) {
+ for (int x=minx;x<=maxx;x++) {
+ nr.getPixel(x,y,np);
+ np[R]=(color >> 16) & 0x0ff;
+ np[G]=(color >> 8) & 0x0ff;
+ np[B]=(color & 0x0ff);
+ if(newx>=0) ir.setPixel(newx,newy,np);
+ newx++;
+ if(newx>=i.getWidth()) break;
+ }
+ }
+ newy++;
+ if(newy>=i.getHeight()) break;
+ }
+ return(true);
+ }
+}
diff --git a/src/org/apache/stylebook/printers/XMLPrinter.java b/src/org/apache/stylebook/printers/XMLPrinter.java
new file mode 100644
index 0000000..2a3218f
--- /dev/null
+++ b/src/org/apache/stylebook/printers/XMLPrinter.java
@@ -0,0 +1,241 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.printers;
+
+import org.apache.stylebook.*;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import org.w3c.dom.Attr;
+import org.w3c.dom.CDATASection;
+import org.w3c.dom.Comment;
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.Element;
+import org.w3c.dom.Entity;
+import org.w3c.dom.EntityReference;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Notation;
+import org.w3c.dom.ProcessingInstruction;
+import org.w3c.dom.Text;
+
+/**
+ * The XMLPrinter Printer writes documents in their canonical XML form.
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public class XMLPrinter extends AbstractComponent implements Printer {
+ /**
+ * Print a DOM Document.
+ */
+ public void print(Document doc, CreationContext c, OutputStream out)
+ throws CreationException, IOException {
+ printDocument(doc,new PrintStream(out),0);
+ }
+
+ /** Process a nodelist calling the appropriate print...() method. */
+ private void printNodeList(NodeList list, PrintStream out, int indent) {
+ for (int x=0;x<list.getLength();x++) {
+ Node node=list.item(x);
+ switch (node.getNodeType()) {
+ case Node.ATTRIBUTE_NODE:
+ printAttribute((Attr)node,out,indent);
+ break;
+ case Node.CDATA_SECTION_NODE:
+ printCDATASection((CDATASection)node,out,indent);
+ break;
+ case Node.COMMENT_NODE:
+ printComment((Comment)node,out,indent);
+ break;
+ case Node.DOCUMENT_FRAGMENT_NODE:
+ printDocumentFragment((DocumentFragment)node,out,indent);
+ break;
+ case Node.DOCUMENT_NODE:
+ printDocument((Document)node,out,indent);
+ break;
+ case Node.DOCUMENT_TYPE_NODE:
+ printDocumentType((DocumentType)node,out,indent);
+ break;
+ case Node.ELEMENT_NODE:
+ printElement((Element)node,out,indent);
+ break;
+ case Node.ENTITY_NODE:
+ printEntity((Entity)node,out,indent);
+ break;
+ case Node.ENTITY_REFERENCE_NODE:
+ printEntityReference((EntityReference)node,out,indent);
+ break;
+ case Node.NOTATION_NODE:
+ printNotation((Notation)node,out,indent);
+ break;
+ case Node.PROCESSING_INSTRUCTION_NODE:
+ printProcessingInstruction((ProcessingInstruction)node,out,indent);
+ break;
+ case Node.TEXT_NODE:
+ printText((Text)node,out,indent);
+ break;
+ }
+ }
+ }
+
+ /** Print an ATTRIBUTE (name="value") node. */
+ private void printAttribute(Attr node, PrintStream out, int indent) {
+ out.print(node.getName()+"=\""+node.getValue()+"\"");
+ }
+
+ /** Print a CDATA (<[CDATA[ ... ]]>) node. */
+ private void printCDATASection(CDATASection node, PrintStream out, int indent) {
+ indent(out,indent);
+ out.println("<[CDATA["+node.getData()+"]]>");
+ }
+
+ /** Print a COMMENT (<!-- ... -->) node. */
+ private void printComment(Comment node, PrintStream out, int indent) {
+ indent(out,indent);
+ out.println("<!--"+node.getData()+"-->");
+ }
+
+ /** Print a DOCUMENT FRAGMENT (????) node. */
+ private void printDocumentFragment(DocumentFragment node, PrintStream out, int indent) {
+ indent(out,indent);
+ out.println("<!-- Document Fragment Node -->");
+ }
+
+ /** Print a DOCUMENT node. */
+ private void printDocument(Document node, PrintStream out, int indent) {
+ indent(out,indent);
+ out.println("<?xml version=\"1.0\"?>");
+ printNodeList(node.getChildNodes(),out,indent);
+ }
+
+ /** Print a DOCUMENT TYPE (<!DOCTYPE ... bla bla bla>) node. */
+ private void printDocumentType(DocumentType node, PrintStream out, int indent) {
+ indent(out,indent);
+ out.println("<!DOCTYPE "+node.getName()+">");
+ // Should we insert ENTITIES and NOTATIONS?
+ }
+
+ /** Print a ELEMENT (do I need to supply the example ??? :) node. */
+ private void printElement(Element node, PrintStream out, int indent) {
+ // Print the tag name
+ indent(out,indent);
+ out.print("<"+node.getTagName());
+ // Process attributes
+ NamedNodeMap atts=node.getAttributes();
+ if ((null!=atts) && (atts.getLength()>0)) {
+ for (int x=0; x<atts.getLength(); x++) {
+ out.print(' ');
+ printAttribute((Attr)atts.item(x),out,indent);
+ }
+ }
+ // Process child nodes
+ if ((null!=node.getChildNodes()) &&
+ (node.getChildNodes().getLength()>0)) {
+ out.println(">");
+ printNodeList(node.getChildNodes(),out,indent+1);
+ indent(out,indent);
+ out.println("</"+node.getTagName()+">");
+ } else {
+ out.println("/>");
+ }
+ }
+
+ /** Print a ENTITY node (NOTE: This should be used with DOCTYPE). */
+ private void printEntity(Entity node, PrintStream out, int indent) {
+ indent(out,indent);
+ out.println("<!-- Entity Node -->");
+ }
+
+ /** Print a ENTITY REFERENCE node (NOTE: Again, used in within DOCTYPE). */
+ private void printEntityReference(EntityReference node, PrintStream out, int indent) {
+ indent(out,indent);
+ out.println("<!-- Entity Reference Node -->");
+ }
+
+ /** Print a NOTATION node (NOTE: Again -3rd-, used in within DOCTYPE). */
+ private void printNotation(Notation node, PrintStream out, int indent) {
+ indent(out,indent);
+ out.println("<!-- Notation Node -->");
+ }
+
+ /** Print a PROCESSING INSTRUCTION (<?name ...?>) node. */
+ private void printProcessingInstruction(ProcessingInstruction node, PrintStream out, int indent) {
+ indent(out,indent);
+ out.println("<?"+node.getTarget()+" "+node.getData()+"?>");
+ }
+
+ /** Print a TEXT (see example for ELEMENT) node. */
+ private void printText(Text node, PrintStream out, int indent) {
+ String data=node.getData();
+ if (data.length()==0) return;
+ data=leftTrim(data);
+ if (data.length()==0) return;
+ Text curr=node;
+ while(true) {
+ Node nextnode=curr.getNextSibling();
+ if (nextnode==null) break;
+ if (nextnode.getNodeType()!=Node.TEXT_NODE) break;
+ Text next=(Text)nextnode;
+ String app=next.getData();
+ if (app.length()>0) {
+ if (Character.isWhitespace(app.charAt(0))) {
+ data=trim(data)+' '+leftTrim(app);
+ } else {
+ data=trim(data)+leftTrim(app);
+ }
+ }
+ next.setData("");
+ curr=next;
+ }
+ data=trim(data);
+ node.setData(data);
+ if (data.length()>0) {
+ indent(out,indent);
+ out.println(data);
+ }
+ }
+
+ /** Remove white space at string beginning. */
+ private String leftTrim(String data) {
+ if (data.length()==0) return(data);
+ int index=0;
+ for (int x=0;x<data.length();x++) {
+ if (Character.isWhitespace(data.charAt(x))) index=x+1;
+ else break;
+ }
+ if (index==data.length()) return("");
+ return(data.substring(index));
+ }
+
+ /** Remove white space at string ending. */
+ private String rightTrim(String data) {
+ if (data.length()==0) return(data);
+ int index=data.length();
+ for (int x=index-1;x>=0;x--) {
+ if (Character.isWhitespace(data.charAt(x))) index=x;
+ else break;
+ }
+ return(data.substring(0,index));
+ }
+
+ /** Remove white space at string beginning and ending. */
+ private String trim(String data) {
+ return(leftTrim(rightTrim(data)));
+ }
+
+ /** Indent data (print whitespaces). */
+ private void indent(PrintStream out, int indent) {
+ for (int x=0; x<indent; x++) out.print(" ");
+ }
+}
diff --git a/src/org/apache/stylebook/processors/ImportProcessor.java b/src/org/apache/stylebook/processors/ImportProcessor.java
new file mode 100644
index 0000000..09414ac
--- /dev/null
+++ b/src/org/apache/stylebook/processors/ImportProcessor.java
@@ -0,0 +1,109 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.processors;
+
+import org.apache.stylebook.*;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.net.URL;
+import java.util.StringTokenizer;
+import org.w3c.dom.*;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313202 $ $Date: 1999-11-30 13:28:55 +0100 (tis, 30 nov 1999) $
+ */
+public class ImportProcessor extends AbstractComponent implements Processor {
+
+ public Document process(Document doc, CreationContext c, Parameters p)
+ throws CreationException, IOException {
+ processNode(doc.getDocumentElement(),doc,c);
+ return(doc);
+ }
+
+ private void processNode(Node node, Document doc, CreationContext ctx)
+ throws IOException, CreationException {
+ if(node==null) return;
+ if(node.getNodeType()!=Node.PROCESSING_INSTRUCTION_NODE) {
+ NodeList l=node.getChildNodes();
+ for (int x=0; x<l.getLength(); x++) processNode(l.item(x),doc,ctx);
+ return;
+ }
+ ProcessingInstruction pi=(ProcessingInstruction)node;
+ if (pi.getTarget().equals("import")) {
+ String producer=null;
+ String source="";
+ StringTokenizer tok=new StringTokenizer(pi.getData());
+ while(tok.hasMoreTokens()) {
+ String p=tok.nextToken();
+ StringTokenizer tok2=new StringTokenizer(p,"\"=",false);
+ if(tok2.countTokens()!=2)
+ throw new CreationException("Invalid parameter \""+p+"\"");
+ String name=tok2.nextToken();
+ String value=tok2.nextToken();
+ if(name.equals("producer")) producer=value;
+ else if(name.equals("source")) source=value;
+ else throw new CreationException("Invalid parameter \""+p+"\"");
+ }
+ if(producer==null)
+ throw new CreationException("Producer not specified");
+ log("Importing \""+source+"\" using Producer \""+producer+"\"");
+ URL src=new URL(ctx.getSourceURL(),source);
+ BasicContext ctx2=new BasicContext(src,ctx.getTargetName());
+ ctx2.merge(ctx);
+ Document newdoc=this.engine.getProducer(producer).produce(ctx2);
+ Node elem=copyNode(doc,newdoc.getDocumentElement());
+ if (elem==null) return;
+ pi.getParentNode().replaceChild(elem,pi);
+ }
+ }
+
+ private Node copyNode(Document d, Node n) {
+ if (n==null) return(null);
+ Node copy=null;
+ switch(n.getNodeType()) {
+ case Node.ELEMENT_NODE:
+ copy=d.createElement(((Element)n).getTagName());
+ NamedNodeMap m=n.getAttributes();
+ for (int k=0; k<m.getLength(); k++) {
+ Attr a=(Attr)m.item(k);
+ ((Element)copy).setAttribute(a.getName(),a.getValue());
+ }
+ break;
+ case Node.CDATA_SECTION_NODE:
+ copy=d.createCDATASection(((CharacterData)n).getData());
+ break;
+ case Node.COMMENT_NODE:
+ copy=d.createComment(((CharacterData)n).getData());
+ break;
+ case Node.TEXT_NODE:
+ copy=d.createTextNode(((CharacterData)n).getData());
+ break;
+ case Node.ENTITY_REFERENCE_NODE:
+ copy=d.createEntityReference(n.getNodeName());
+ break;
+ case Node.PROCESSING_INSTRUCTION_NODE:
+ String target=((ProcessingInstruction)n).getTarget();
+ String data=((ProcessingInstruction)n).getData();
+ copy=d.createProcessingInstruction(target,data);
+ break;
+ }
+ if (copy==null) return(null);
+ NodeList l=n.getChildNodes();
+ for (int x=0;x<l.getLength();x++) {
+ Node child=copyNode(d,l.item(x));
+ if (child!=null) copy.appendChild(child);
+ }
+ return(copy);
+ }
+}
diff --git a/src/org/apache/stylebook/processors/NullProcessor.java b/src/org/apache/stylebook/processors/NullProcessor.java
new file mode 100644
index 0000000..51e53ec
--- /dev/null
+++ b/src/org/apache/stylebook/processors/NullProcessor.java
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.processors;
+
+import org.apache.stylebook.*;
+import java.io.IOException;
+import org.w3c.dom.Document;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public class NullProcessor extends AbstractComponent implements Processor {
+ public Document process(Document doc, CreationContext c, Parameters p)
+ throws CreationException, IOException {
+ log("Processing document");
+ return(doc);
+ }
+}
diff --git a/src/org/apache/stylebook/processors/Xalan2Processor.java b/src/org/apache/stylebook/processors/Xalan2Processor.java
new file mode 100644
index 0000000..17a8450
--- /dev/null
+++ b/src/org/apache/stylebook/processors/Xalan2Processor.java
@@ -0,0 +1,113 @@
+/*****************************************************************************
+ * Copyright (C) 2000 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.processors;
+
+import org.apache.stylebook.*;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.Reader;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.StringTokenizer;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.ProcessingInstruction;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+// Imported TraX classes
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerConfigurationException;
+
+// Imported JAVA API for XML Parsing 1.0 classes
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+/*
+ * A revision of XalanProcessor for use with Xalan-Java 2.
+ * If you build Stylebook with Xalan2Processor rather than XalanProcessor, you can
+ * use Stylebook to process documents with Xalan-Java 2.
+ *
+ * @author Donald Leslie (donald_leslie at lotus.com)
+ */
+
+public class Xalan2Processor extends AbstractComponent implements Processor {
+
+ public Document process(Document doc, CreationContext c, Parameters p)
+ throws CreationException, IOException {
+ try {
+ // Retrieve the style
+ String styf=p.getParameter("stylesheet");
+ if (null==styf) styf=this.getStyleSheet(doc);
+ if (null==styf) return(doc);
+ TransformerFactory tFactory = TransformerFactory.newInstance();
+ Transformer transformer = tFactory.newTransformer(new StreamSource(styf));
+ // Set stylesheet parameters
+ Enumeration en=p.getParameterNames();
+ while (en.hasMoreElements()) {
+ String name=(String)en.nextElement();
+ transformer.setParameter(name, p.getParameter(name));
+ }
+ // Set up DOM container for result.
+ DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
+ dfactory.setNamespaceAware(true);
+ DocumentBuilder docBuilder = dfactory.newDocumentBuilder();
+ Document res = docBuilder.newDocument();
+ // Perform the transformation.
+ log("Applying XSL sheet \""+styf+"\"");
+ transformer.transform(new DOMSource(doc), new DOMResult(res));
+ return(res);
+ } catch (Exception e) {
+ e.printStackTrace(System.out);
+ throw new CreationException(e.getMessage(),e,doc);
+ }
+ }
+
+ /** Search for the <?xml:stylesheet ... ?> processing instruction. */
+ private String getStyleSheet(Document sourceTree) {
+ String uri=null;
+ NodeList children=sourceTree.getChildNodes();
+ int nNodes=children.getLength();
+ for(int i=0; i<nNodes; i++) {
+ Node child=children.item(i);
+ if (Node.PROCESSING_INSTRUCTION_NODE==child.getNodeType()) {
+ ProcessingInstruction pi=(ProcessingInstruction)child;
+ if(pi.getNodeName().equals("xml-stylesheet")) {
+ boolean isOK=true;
+ StringTokenizer tok=new StringTokenizer(pi.getNodeValue(),
+ " \t=");
+ while(tok.hasMoreTokens()) {
+ if(tok.nextToken().equals("type")) {
+ String typeVal=tok.nextToken();
+ typeVal=typeVal.substring(1, typeVal.length()-1);
+ if(!typeVal.equals("text/xsl")) isOK=false;
+ }
+ }
+ if(isOK) {
+ tok=new StringTokenizer(pi.getNodeValue()," \t=");
+ while(tok.hasMoreTokens()) {
+ if(tok.nextToken().equals("href")) {
+ uri=tok.nextToken();
+ uri=uri.substring(1,uri.length()-1);
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+ return(uri);
+ }
+}
diff --git a/src/org/apache/stylebook/processors/XalanProcessor.java b/src/org/apache/stylebook/processors/XalanProcessor.java
new file mode 100644
index 0000000..0229267
--- /dev/null
+++ b/src/org/apache/stylebook/processors/XalanProcessor.java
@@ -0,0 +1,145 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.processors;
+
+import org.apache.stylebook.*;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.Reader;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.StringTokenizer;
+import org.apache.xalan.xpath.xml.FormatterToDOM;
+import org.apache.xalan.xpath.xml.XMLParserLiaison;
+import org.apache.xalan.xpath.xml.XMLParserLiaisonDefault;
+import org.apache.xalan.xslt.XSLTInputSource;
+import org.apache.xalan.xslt.XSLTProcessor;
+import org.apache.xalan.xslt.XSLTProcessorFactory;
+import org.apache.xalan.xslt.XSLTResultTarget;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.ProcessingInstruction;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313202 $ $Date: 1999-11-30 13:28:55 +0100 (tis, 30 nov 1999) $
+ */
+public class XalanProcessor extends AbstractComponent implements Processor {
+
+ public Document process(Document doc, CreationContext c, Parameters p)
+ throws CreationException, IOException {
+ try {
+
+ // Create a new XSLTProcessor instance
+ XMLParserLiaison liaison=new Liaison(this.engine);
+ XSLTProcessor proc=XSLTProcessorFactory.getProcessor(liaison);
+ proc.setDiagnosticsOutput(System.out);
+ // Set processor parameters
+ Enumeration enum=p.getParameterNames();
+ while (enum.hasMoreElements()) {
+ String name=(String)enum.nextElement();
+ proc.setStylesheetParam(name,proc.createXString(p.getParameter(name)));
+ }
+ // Retrieve the style
+ String styf=p.getParameter("stylesheet");
+ if (null==styf) styf=this.getStyleSheet(doc);
+ if (null==styf) return(doc);
+ // Setup the input sources and the result target
+ Document res=this.engine.getParser().create();
+ Document sty=this.engine.getParser().parse(new InputSource(styf));
+ XSLTInputSource docin=new XSLTInputSource(doc);
+ XSLTInputSource styin=new XSLTInputSource(sty);
+ XSLTResultTarget out=new XSLTResultTarget(new FormatterToDOM(res));
+ // Process the document
+ log("Applying XSL sheet \""+styf+"\"");
+ proc.process(docin,styin,out);
+ return(res);
+ } catch (Exception e) {
+ e.printStackTrace(System.out);
+ throw new CreationException(e.getMessage(),e,doc);
+ }
+ }
+
+ /** Search for the <?xml:stylesheet ... ?> processing instruction. */
+ private String getStyleSheet(Document sourceTree) {
+ String uri=null;
+ NodeList children=sourceTree.getChildNodes();
+ int nNodes=children.getLength();
+ for(int i=0; i<nNodes; i++) {
+ Node child=children.item(i);
+ if (Node.PROCESSING_INSTRUCTION_NODE==child.getNodeType()) {
+ ProcessingInstruction pi=(ProcessingInstruction)child;
+ if(pi.getNodeName().equals("xml-stylesheet")) {
+ boolean isOK=true;
+ StringTokenizer tok=new StringTokenizer(pi.getNodeValue(),
+ " \t=");
+ while(tok.hasMoreTokens()) {
+ if(tok.nextToken().equals("type")) {
+ String typeVal=tok.nextToken();
+ typeVal=typeVal.substring(1, typeVal.length()-1);
+ if(!typeVal.equals("text/xsl")) isOK=false;
+ }
+ }
+ if(isOK) {
+ tok=new StringTokenizer(pi.getNodeValue()," \t=");
+ while(tok.hasMoreTokens()) {
+ if(tok.nextToken().equals("href")) {
+ uri=tok.nextToken();
+ uri=uri.substring(1,uri.length()-1);
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+ return(uri);
+ }
+
+ private class Liaison extends XMLParserLiaisonDefault {
+ private Engine engine=null;
+ private Document document=null;
+
+ public Liaison(Engine e) {
+ this.engine=e;
+ }
+
+ public Document createDocument() {
+ return(this.engine.getParser().create());
+ }
+
+ public void parse(InputSource in)
+ throws IOException, SAXException {
+ try {
+ this.document=this.engine.getParser().parse(in);
+ } catch (CreationException e) {
+ this.engine.debug(this,"CreationException "+e.getMessage());
+ Exception e2=e.getException();
+ if((e2==null)||(!(e2 instanceof SAXException)))
+ throw new SAXException("Exception parsing from Xalan");
+ throw (SAXException)e2;
+ }
+ }
+
+ public Document getDocument() {
+ return(this.document);
+ }
+
+ public boolean supportsSAX() {
+ return(false);
+ }
+ }
+}
diff --git a/src/org/apache/stylebook/producers/ContextProducer.java b/src/org/apache/stylebook/producers/ContextProducer.java
new file mode 100644
index 0000000..74217d8
--- /dev/null
+++ b/src/org/apache/stylebook/producers/ContextProducer.java
@@ -0,0 +1,44 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.producers;
+
+import org.apache.stylebook.*;
+import java.io.IOException;
+import java.util.Enumeration;
+import org.xml.sax.InputSource;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313202 $ $Date: 1999-11-30 13:28:55 +0100 (tis, 30 nov 1999) $
+ */
+public class ContextProducer extends AbstractComponent implements Producer {
+ public Document produce(CreationContext c)
+ throws CreationException, java.io.IOException {
+ Document d=engine.getParser().create();
+ Element root=d.createElement("context");
+ root.setAttribute("source",c.getSourceURL().toExternalForm());
+ root.setAttribute("target",c.getTargetName());
+ Enumeration e=c.getParameterNames();
+ while(e.hasMoreElements()) {
+ String name=(String)e.nextElement();
+ String value=c.getParameter(name);
+ Element param=d.createElement("parameter");
+ param.setAttribute("name",name);
+ param.setAttribute("value",value);
+ root.appendChild(param);
+ }
+ d.appendChild(root);
+ return(d);
+ }
+}
diff --git a/src/org/apache/stylebook/producers/DirectoryProducer.java b/src/org/apache/stylebook/producers/DirectoryProducer.java
new file mode 100644
index 0000000..16a7928
--- /dev/null
+++ b/src/org/apache/stylebook/producers/DirectoryProducer.java
@@ -0,0 +1,129 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.producers;
+
+import org.apache.stylebook.*;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipEntry;
+import org.xml.sax.InputSource;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313274 $ $Date: 2000-07-09 14:44:21 +0200 (sön, 09 jul 2000) $
+ */
+public class DirectoryProducer extends AbstractComponent implements Producer {
+ public Document produce(CreationContext c)
+ throws CreationException, java.io.IOException {
+ // Create the root document and the root element
+ Document d=engine.getParser().create();
+ Element root=d.createElement("directory");
+ // Retrieve the REAL url
+ URL source=c.getSourceURL().openConnection().getURL();
+ // Proceed if the protocol is "file:"
+ if (source.getProtocol().equals("file")) {
+ // Trim the file name and open the directory
+ String src=source.getFile();
+ //
+ // These lines seems to break UNIX files (duplicating the name
+ // of the directory.
+ // Thanks to "Gerard van Enk" <gerard.van.enk at eo.nl>
+ //
+ //for(int x=0;x<src.length();x++) if (src.charAt(x)!='/') {
+ // src=src.substring(x);
+ // break;
+ //}
+ File file=new File(src).getCanonicalFile();
+ if (!file.isDirectory())
+ throw new CreationException(c.getSourceURL()+" ("+file+
+ ") is not a Directory");
+ // List the files of a directory
+ File list[]=file.listFiles();
+ for (int x=0;x<list.length;x++) {
+ Element e=d.createElement("entry");
+ String name=list[x].getName();
+ if (list[x].isDirectory()) {
+ name=list[x].getName()+"/";
+ e.setAttribute("directory","true");
+ }
+ e.setAttribute("href",name);
+ e.appendChild(d.createTextNode(name));
+ root.appendChild(e);
+ }
+ } else if (source.getProtocol().equals("jar")) {
+ // Check the JAR url for jar file and jar entry
+ int index=source.getFile().indexOf('!');
+ String jarname=source.getFile();
+ String dirname="";
+ if (index>0) {
+ jarname=source.getFile().substring(0,index);
+ dirname=source.getFile().substring(index+1);
+ if (dirname.equals("/")) dirname="";
+ }
+ // Check if we can open the jar file (only file:)
+ URL jarurl=new URL(jarname);
+ if (!jarurl.getProtocol().equalsIgnoreCase("file"))
+ throw new CreationException("Cannot open zip files over "+
+ jarurl.getProtocol()+": protocol");
+ jarname=jarurl.getFile();
+ // Remove leading '/' chars from jar name and jar entry
+ if (System.getProperty("path.separator").equals(";")) {
+ // I believe that this is a workaround for a Windows JDK1.1 bug
+ for(int x=0;x<jarname.length();x++) if (jarname.charAt(x)!='/') {
+ jarname=jarname.substring(x);
+ break;
+ }
+ }
+ for(int x=0;x<dirname.length();x++) if (dirname.charAt(x)!='/') {
+ dirname=dirname.substring(x);
+ break;
+ }
+ // Open the JAR file and check if dirname is a valid directory
+ ZipFile f=new ZipFile(jarname);
+ if (dirname.length()>0) {
+ ZipEntry e=f.getEntry(dirname);
+ if (e==null)
+ throw new CreationException("Cannot find \""+dirname+
+ "\" in \""+jarname+"\"");
+ else if (!e.isDirectory())
+ throw new CreationException("Entry \""+dirname+"\" in \""+
+ jarname+"\" is not a Directory");
+ }
+ // Enumerate the JAR entries
+ Enumeration list=new ZipFile(jarname).entries();
+ while(list.hasMoreElements()) {
+ ZipEntry zipentry=(ZipEntry)list.nextElement();
+ // Check if the entry begins w/ dirname and doesn't go further
+ String entry=zipentry.getName();
+ if(!entry.startsWith(dirname)) continue;
+ entry=entry.substring(dirname.length());
+ if(entry.length()==0) continue;
+ if ((entry.indexOf('/')!=-1) &&
+ (entry.indexOf('/')!=entry.length()-1)) continue;
+ // Create the elements
+ Element elem=d.createElement("entry");
+ elem.setAttribute("href",entry);
+ if(zipentry.isDirectory()) elem.setAttribute("directory","true");
+ elem.appendChild(d.createTextNode(entry));
+ root.appendChild(elem);
+ }
+ }
+ d.appendChild(root);
+ return(d);
+ }
+}
diff --git a/src/org/apache/stylebook/producers/ParserProducer.java b/src/org/apache/stylebook/producers/ParserProducer.java
new file mode 100644
index 0000000..a700095
--- /dev/null
+++ b/src/org/apache/stylebook/producers/ParserProducer.java
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.producers;
+
+import org.apache.stylebook.*;
+import java.io.IOException;
+import org.xml.sax.InputSource;
+import org.w3c.dom.Document;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313202 $ $Date: 1999-11-30 13:28:55 +0100 (tis, 30 nov 1999) $
+ */
+public class ParserProducer extends AbstractComponent implements Producer {
+ public Document produce(CreationContext c)
+ throws CreationException, java.io.IOException {
+ return(engine.getParser().parse(c.getSourceURL()));
+ }
+}
diff --git a/src/org/apache/stylebook/producers/ProjectProducer.java b/src/org/apache/stylebook/producers/ProjectProducer.java
new file mode 100644
index 0000000..d79fd2a
--- /dev/null
+++ b/src/org/apache/stylebook/producers/ProjectProducer.java
@@ -0,0 +1,30 @@
+/*****************************************************************************
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of wich has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.stylebook.producers;
+
+import org.apache.stylebook.*;
+import java.io.IOException;
+import org.xml.sax.InputSource;
+import org.w3c.dom.Document;
+
+/**
+ *
+ *
+ * @author <a href="mailto:pier at apache.org">Pierpaolo Fumagalli</a>
+ * @author Copyright 1999 © <a href="http://www.apache.org">The Apache
+ * Software Foundation</a>. All rights reserved.
+ * @version CVS $Revision: 313195 $ $Date: 1999-11-15 23:08:18 +0100 (mån, 15 nov 1999) $
+ */
+public class ProjectProducer extends AbstractComponent implements Producer {
+ public Document produce(CreationContext c)
+ throws CreationException, java.io.IOException {
+ String project=c.getParameter("stylebook.project");
+ if(project==null) throw new CreationException("Cannot produce project");
+ return(engine.getParser().parse(new InputSource(project)));
+ }
+}
diff --git a/styles/apachexml/dtd/blocks.ent b/styles/apachexml/dtd/blocks.ent
new file mode 100644
index 0000000..d18b033
--- /dev/null
+++ b/styles/apachexml/dtd/blocks.ent
@@ -0,0 +1,57 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- BLOCKS ENTITY -->
+<!ENTITY % blocks "p|note|ul|ol|gloss|table|source|anchor|form">
+
+<!-- import the external markup.ent dtd -->
+<!ENTITY % markupEntity SYSTEM "markup.ent">
+%markupEntity;
+
+<!ENTITY % content "(#PCDATA|%markup;|%links;)*">
+
+<!ELEMENT p %content;>
+<!ELEMENT note %content;>
+
+<!ELEMENT ul (li|ol|ul)+>
+<!ELEMENT ol (li|ol|ul)+>
+<!ELEMENT li %content;>
+
+<!ELEMENT gloss (label|item)+>
+<!ELEMENT label %content;>
+<!ELEMENT item %content;>
+
+<!ELEMENT source (#PCDATA)>
+
+<!ELEMENT table (tr)+>
+<!ATTLIST table title CDATA #IMPLIED>
+
+<!ELEMENT tr (tn|th|td)+>
+
+<!ELEMENT tn EMPTY>
+<!ATTLIST tn colspan CDATA "1"
+ rowspan CDATA "1">
+
+<!ELEMENT th %content;>
+<!ATTLIST th colspan CDATA "1"
+ rowspan CDATA "1">
+
+<!ELEMENT td %content;>
+<!ATTLIST td colspan CDATA "1"
+ rowspan CDATA "1"
+ align (left|center|right) "left">
+
+
+<!ELEMENT form (#PCDATA|select|input)*>
+<!ATTLIST form action CDATA #REQUIRED
+ method CDATA #REQUIRED
+ id CDATA #REQUIRED>
+
+<!ELEMENT select (#PCDATA|option)*>
+<!ATTLIST select name CDATA #REQUIRED>
+
+<!ELEMENT option (#PCDATA)>
+<!ATTLIST option value CDATA #REQUIRED>
+
+<!ELEMENT input EMPTY>
+<!ATTLIST input type CDATA #REQUIRED
+ value CDATA #REQUIRED>
\ No newline at end of file
diff --git a/styles/apachexml/dtd/book.dtd b/styles/apachexml/dtd/book.dtd
new file mode 100644
index 0000000..11e29af
--- /dev/null
+++ b/styles/apachexml/dtd/book.dtd
@@ -0,0 +1,49 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- STYLEBOOK BOOK DTD -->
+
+<!-- import the external source-specific dtd -->
+<!ENTITY % externalEntity SYSTEM "sbk:/sources/entities.ent">
+%externalEntity;
+
+<!ELEMENT book (resources?|document|hidden|faqs|changes|group|external|separator)+>
+<!ATTLIST book title CDATA #REQUIRED
+ copyright CDATA #IMPLIED>
+
+<!ELEMENT resources EMPTY>
+<!ATTLIST resources source CDATA #REQUIRED>
+
+<!ELEMENT document EMPTY>
+<!ATTLIST document id ID #REQUIRED
+ source CDATA #REQUIRED
+ label CDATA #REQUIRED>
+
+<!ELEMENT hidden EMPTY>
+<!ATTLIST hidden id ID #REQUIRED
+ source CDATA #REQUIRED>
+
+<!ELEMENT faqs EMPTY>
+<!ATTLIST faqs id ID #REQUIRED
+ source CDATA #REQUIRED
+ label CDATA #REQUIRED>
+
+<!ELEMENT changes EMPTY>
+<!ATTLIST changes id ID #REQUIRED
+ source CDATA #REQUIRED
+ label CDATA #REQUIRED>
+
+<!ELEMENT group (entry)+>
+<!ATTLIST group id ID #IMPLIED
+ label CDATA #REQUIRED>
+
+<!ELEMENT entry EMPTY>
+<!ATTLIST entry id ID #REQUIRED
+ source CDATA #REQUIRED>
+
+<!ELEMENT external EMPTY>
+<!ATTLIST external label CDATA #REQUIRED
+ href CDATA #REQUIRED>
+
+<!ELEMENT separator EMPTY>
+
+<!-- CVS $Revision: 313257 $ $Date: 2000-01-20 17:15:12 +0100 (tor, 20 jan 2000) $ -->
\ No newline at end of file
diff --git a/styles/apachexml/dtd/changes.dtd b/styles/apachexml/dtd/changes.dtd
new file mode 100644
index 0000000..5c2ea21
--- /dev/null
+++ b/styles/apachexml/dtd/changes.dtd
@@ -0,0 +1,24 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- STYLEBOOK CHANGES DTD -->
+
+<!-- import the external markup.ent dtd -->
+<!ENTITY % markupEntity SYSTEM "markup.ent">
+%markupEntity;
+
+<!ENTITY % content "(#PCDATA|%markup;|%links;)*">
+
+<!ELEMENT changes (release)+>
+<!ATTLIST changes title CDATA #REQUIRED>
+
+<!ELEMENT release ((features,fixes)|(features)|(fixes))>
+<!ATTLIST release version CDATA #REQUIRED
+ date CDATA #IMPLIED>
+
+<!ELEMENT features (feat)+>
+<!ELEMENT fixes (fix)+>
+
+<!ELEMENT feat %content;>
+<!ELEMENT fix %content;>
+
+<!-- CVS $Revision: 313236 $ $Date: 1999-12-02 00:03:37 +0100 (tor, 02 dec 1999) $ -->
\ No newline at end of file
diff --git a/styles/apachexml/dtd/characters.ent b/styles/apachexml/dtd/characters.ent
new file mode 100644
index 0000000..eb30422
--- /dev/null
+++ b/styles/apachexml/dtd/characters.ent
@@ -0,0 +1,297 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- CHARACTERS ENTITY -->
+
+<!-- Latin A -->
+<!ENTITY nbsp " "> <!-- U+00A0 ISOnum - no-break space = non-breaking space -->
+<!ENTITY iexcl "¡"> <!-- U+00A1 ISOnum - inverted exclamation mark -->
+<!ENTITY cent "¢"> <!-- U+00A2 ISOnum - cent sign -->
+<!ENTITY pound "£"> <!-- U+00A3 ISOnum - pound sign -->
+<!ENTITY curren "¤"> <!-- U+00A4 ISOnum - currency sign -->
+<!ENTITY yen "¥"> <!-- U+00A5 ISOnum - yen sign = yuan sign -->
+<!ENTITY brvbar "¦"> <!-- U+00A6 ISOnum - broken bar = broken vertical bar -->
+<!ENTITY sect "§"> <!-- U+00A7 ISOnum - section sign -->
+<!ENTITY uml "¨"> <!-- U+00A8 ISOdia - diaeresis = spacing diaeresis -->
+<!ENTITY copy "©"> <!-- U+00A9 ISOnum - copyright sign -->
+<!ENTITY ordf "ª"> <!-- U+00AA ISOnum - feminine ordinal indicator -->
+<!ENTITY laquo "«"> <!-- U+00AB ISOnum - left-pointing double angle quotation mark = left pointing guillemet -->
+<!ENTITY not "¬"> <!-- U+00AC ISOnum - not sign -->
+<!ENTITY shy ""> <!-- U+00AD ISOnum - soft hyphen = discretionary hyphen -->
+<!ENTITY reg "®"> <!-- U+00AE ISOnum - registered sign = registered trade mark sign -->
+<!ENTITY macr "¯"> <!-- U+00AF ISOdia - macron = spacing macron = overline = APL overbar -->
+<!ENTITY deg "°"> <!-- U+00B0 ISOnum - degree sign -->
+<!ENTITY plusmn "±"> <!-- U+00B1 ISOnum - plus-minus sign = plus-or-minus sign -->
+<!ENTITY sup2 "²"> <!-- U+00B2 ISOnum - superscript two = superscript digit two = squared -->
+<!ENTITY sup3 "³"> <!-- U+00B3 ISOnum - superscript three = superscript digit three = cubed -->
+<!ENTITY acute "´"> <!-- U+00B4 ISOdia - acute accent = spacing acute -->
+<!ENTITY micro "µ"> <!-- U+00B5 ISOnum - micro sign -->
+<!ENTITY para "¶"> <!-- U+00B6 ISOnum - pilcrow sign = paragraph sign -->
+<!ENTITY middot "·"> <!-- U+00B7 ISOnum - middle dot = Georgian comma = Greek middle dot -->
+<!ENTITY cedil "¸"> <!-- U+00B8 ISOdia - cedilla = spacing cedilla -->
+<!ENTITY sup1 "¹"> <!-- U+00B9 ISOnum - superscript one = superscript digit one -->
+<!ENTITY ordm "º"> <!-- U+00BA ISOnum - masculine ordinal indicator -->
+<!ENTITY raquo "»"> <!-- U+00BB ISOnum - right-pointing double angle quotation mark = right pointing guillemet -->
+<!ENTITY frac14 "¼"> <!-- U+00BC ISOnum - vulgar fraction one quarter = fraction one quarter -->
+<!ENTITY frac12 "½"> <!-- U+00BD ISOnum - vulgar fraction one half = fraction one half -->
+<!ENTITY frac34 "¾"> <!-- U+00BE ISOnum - vulgar fraction three quarters = fraction three quarters -->
+<!ENTITY iquest "¿"> <!-- U+00BF ISOnum - inverted question mark = turned question mark -->
+<!ENTITY Agrave "À"> <!-- U+00C0 ISOlat1 - latin capital letter A with grave = latin capital letter A grave -->
+<!ENTITY Aacute "Á"> <!-- U+00C1 ISOlat1 - latin capital letter A with acute -->
+<!ENTITY Acirc "Â"> <!-- U+00C2 ISOlat1 - latin capital letter A with circumflex -->
+<!ENTITY Atilde "Ã"> <!-- U+00C3 ISOlat1 - latin capital letter A with tilde -->
+<!ENTITY Auml "Ä"> <!-- U+00C4 ISOlat1 - latin capital letter A with diaeresis -->
+<!ENTITY Aring "Å"> <!-- U+00C5 ISOlat1 - latin capital letter A with ring above = latin capital letter A ring -->
+<!ENTITY AElig "Æ"> <!-- U+00C6 ISOlat1 - latin capital letter AE = latin capital ligature AE -->
+<!ENTITY Ccedil "Ç"> <!-- U+00C7 ISOlat1 - latin capital letter C with cedilla -->
+<!ENTITY Egrave "È"> <!-- U+00C8 ISOlat1 - latin capital letter E with grave -->
+<!ENTITY Eacute "É"> <!-- U+00C9 ISOlat1 - latin capital letter E with acute -->
+<!ENTITY Ecirc "Ê"> <!-- U+00CA ISOlat1 - latin capital letter E with circumflex -->
+<!ENTITY Euml "Ë"> <!-- U+00CB ISOlat1 - latin capital letter E with diaeresis -->
+<!ENTITY Igrave "Ì"> <!-- U+00CC ISOlat1 - latin capital letter I with grave -->
+<!ENTITY Iacute "Í"> <!-- U+00CD ISOlat1 - latin capital letter I with acute -->
+<!ENTITY Icirc "Î"> <!-- U+00CE ISOlat1 - latin capital letter I with circumflex -->
+<!ENTITY Iuml "Ï"> <!-- U+00CF ISOlat1 - latin capital letter I with diaeresis -->
+<!ENTITY ETH "Ð"> <!-- U+00D0 ISOlat1 - latin capital letter ETH -->
+<!ENTITY Ntilde "Ñ"> <!-- U+00D1 ISOlat1 - latin capital letter N with tilde -->
+<!ENTITY Ograve "Ò"> <!-- U+00D2 ISOlat1 - latin capital letter O with grave -->
+<!ENTITY Oacute "Ó"> <!-- U+00D3 ISOlat1 - latin capital letter O with acute -->
+<!ENTITY Ocirc "Ô"> <!-- U+00D4 ISOlat1 - latin capital letter O with circumflex -->
+<!ENTITY Otilde "Õ"> <!-- U+00D5 ISOlat1 - latin capital letter O with tilde -->
+<!ENTITY Ouml "Ö"> <!-- U+00D6 ISOlat1 - latin capital letter O with diaeresis -->
+<!ENTITY times "×"> <!-- U+00D7 ISOnum - multiplication sign -->
+<!ENTITY Oslash "Ø"> <!-- U+00D8 ISOlat1 - latin capital letter O with stroke = latin capital letter O slash -->
+<!ENTITY Ugrave "Ù"> <!-- U+00D9 ISOlat1 - latin capital letter U with grave -->
+<!ENTITY Uacute "Ú"> <!-- U+00DA ISOlat1 - latin capital letter U with acute -->
+<!ENTITY Ucirc "Û"> <!-- U+00DB ISOlat1 - latin capital letter U with circumflex -->
+<!ENTITY Uuml "Ü"> <!-- U+00DC ISOlat1 - latin capital letter U with diaeresis -->
+<!ENTITY Yacute "Ý"> <!-- U+00DD ISOlat1 - latin capital letter Y with acute -->
+<!ENTITY THORN "Þ"> <!-- U+00DE ISOlat1 - latin capital letter THORN -->
+<!ENTITY szlig "ß"> <!-- U+00DF ISOlat1 - latin small letter sharp s = ess-zed -->
+<!ENTITY agrave "à"> <!-- U+00E0 ISOlat1 - latin small letter a with grave = latin small letter a grave -->
+<!ENTITY aacute "á"> <!-- U+00E1 ISOlat1 - latin small letter a with acute -->
+<!ENTITY acirc "â"> <!-- U+00E2 ISOlat1 - latin small letter a with circumflex -->
+<!ENTITY atilde "ã"> <!-- U+00E3 ISOlat1 - latin small letter a with tilde -->
+<!ENTITY auml "ä"> <!-- U+00E4 ISOlat1 - latin small letter a with diaeresis -->
+<!ENTITY aring "å"> <!-- U+00E5 ISOlat1 - latin small letter a with ring above = latin small letter a ring -->
+<!ENTITY aelig "æ"> <!-- U+00E6 ISOlat1 - latin small letter ae = latin small ligature ae -->
+<!ENTITY ccedil "ç"> <!-- U+00E7 ISOlat1 - latin small letter c with cedilla -->
+<!ENTITY egrave "è"> <!-- U+00E8 ISOlat1 - latin small letter e with grave -->
+<!ENTITY eacute "é"> <!-- U+00E9 ISOlat1 - latin small letter e with acute -->
+<!ENTITY ecirc "ê"> <!-- U+00EA ISOlat1 - latin small letter e with circumflex -->
+<!ENTITY euml "ë"> <!-- U+00EB ISOlat1 - latin small letter e with diaeresis -->
+<!ENTITY igrave "ì"> <!-- U+00EC ISOlat1 - latin small letter i with grave -->
+<!ENTITY iacute "í"> <!-- U+00ED ISOlat1 - latin small letter i with acute -->
+<!ENTITY icirc "î"> <!-- U+00EE ISOlat1 - latin small letter i with circumflex -->
+<!ENTITY iuml "ï"> <!-- U+00EF ISOlat1 - latin small letter i with diaeresis -->
+<!ENTITY eth "ð"> <!-- U+00F0 ISOlat1 - latin small letter eth -->
+<!ENTITY ntilde "ñ"> <!-- U+00F1 ISOlat1 - latin small letter n with tilde -->
+<!ENTITY ograve "ò"> <!-- U+00F2 ISOlat1 - latin small letter o with grave -->
+<!ENTITY oacute "ó"> <!-- U+00F3 ISOlat1 - latin small letter o with acute -->
+<!ENTITY ocirc "ô"> <!-- U+00F4 ISOlat1 - latin small letter o with circumflex -->
+<!ENTITY otilde "õ"> <!-- U+00F5 ISOlat1 - latin small letter o with tilde -->
+<!ENTITY ouml "ö"> <!-- U+00F6 ISOlat1 - latin small letter o with diaeresis -->
+<!ENTITY divide "÷"> <!-- U+00F7 ISOnum - division sign -->
+<!ENTITY oslash "ø"> <!-- U+00F8 ISOlat1 - latin small letter o with stroke = latin small letter o slash -->
+<!ENTITY ugrave "ù"> <!-- U+00F9 ISOlat1 - latin small letter u with grave -->
+<!ENTITY uacute "ú"> <!-- U+00FA ISOlat1 - latin small letter u with acute -->
+<!ENTITY ucirc "û"> <!-- U+00FB ISOlat1 - latin small letter u with circumflex -->
+<!ENTITY uuml "ü"> <!-- U+00FC ISOlat1 - latin small letter u with diaeresis -->
+<!ENTITY yacute "ý"> <!-- U+00FD ISOlat1 - latin small letter y with acute -->
+<!ENTITY thorn "þ"> <!-- U+00FE ISOlat1 - latin small letter thorn -->
+<!ENTITY yuml "ÿ"> <!-- U+00FF ISOlat1 - latin small letter y with diaeresis -->
+
+
+<!-- C0 Controls and Basic Latin -->
+<!ENTITY quot """> <!-- U+0022 ISOnum - quotation mark = APL quote -->
+<!ENTITY amp "&"> <!-- U+0026 ISOnum - ampersand -->
+<!ENTITY lt "<"> <!-- U+003C ISOnum - less-than sign -->
+<!ENTITY gt ">"> <!-- U+003E ISOnum - greater-than sign -->
+
+<!-- Latin Extended-A -->
+<!ENTITY OElig "Œ"> <!-- U+0152 ISOlat2 - latin capital ligature OE -->
+<!ENTITY oelig "œ"> <!-- U+0153 ISOlat2 - latin small ligature oe -->
+
+<!-- ligature is a misnomer, this is a separate character in some languages -->
+<!ENTITY Scaron "Š"> <!-- U+0160 ISOlat2 - latin capital letter S with caron -->
+<!ENTITY scaron "š"> <!-- U+0161 ISOlat2 - latin small letter s with caron -->
+<!ENTITY Yuml "Ÿ"> <!-- U+0178 ISOlat2 - latin capital letter Y with diaeresis -->
+
+<!-- Spacing Modifier Letters -->
+<!ENTITY circ "ˆ" > <!-- U+02C6 ISOpub - modifier letter circumflex accent -->
+<!ENTITY tilde "˜" > <!-- U+02DC ISOdia - small tilde -->
+
+<!-- General Punctuation -->
+<!ENTITY ensp " "> <!-- U+2002 ISOpub - en space -->
+<!ENTITY emsp " "> <!-- U+2003 ISOpub - em space -->
+<!ENTITY thinsp " "> <!-- U+2009 ISOpub - thin space -->
+<!ENTITY zwnj ""> <!-- U+200C RFC 2070 - zero width non-joiner -->
+<!ENTITY zwj ""> <!-- U+200D RFC 2070 - zero width joiner -->
+<!ENTITY lrm ""> <!-- U+200E RFC 2070 - left-to-right mark -->
+<!ENTITY rlm ""> <!-- U+200F RFC 2070 - right-to-left mark -->
+<!ENTITY ndash "–"> <!-- U+2013 ISOpub - en dash -->
+<!ENTITY mdash "—"> <!-- U+2014 ISOpub - em dash -->
+<!ENTITY lsquo "‘"> <!-- U+2018 ISOnum - left single quotation mark -->
+<!ENTITY rsquo "’"> <!-- U+2019 ISOnum - right single quotation mark -->
+<!ENTITY sbquo "‚"> <!-- U+201A NEW - single low-9 quotation mark -->
+<!ENTITY ldquo "“"> <!-- U+201C ISOnum - left double quotation mark -->
+<!ENTITY rdquo "”"> <!-- U+201D ISOnum - right double quotation mark, -->
+<!ENTITY bdquo "„"> <!-- U+201E NEW - double low-9 quotation mark -->
+<!ENTITY dagger "†"> <!-- U+2020 ISOpub - dagger -->
+<!ENTITY Dagger "‡"> <!-- U+2021 ISOpub - double dagger -->
+<!ENTITY permil "‰"> <!-- U+2030 ISOtech - per mille sign -->
+<!ENTITY lsaquo "‹"> <!-- U+2039 ISO prop. - single left-pointing angle quotation mark -->
+
+<!-- lsaquo is proposed but not yet ISO standardized -->
+<!ENTITY rsaquo "›"> <!-- U+203A ISO prop. - single right-pointing angle quotation mark -->
+
+<!-- rsaquo is proposed but not yet ISO standardized -->
+<!ENTITY euro "€"> <!-- U+20AC NEW - euro sign -->
+
+<!-- Latin Extended-B -->
+<!ENTITY fnof "ƒ"> <!-- U+0192 ISOtech - latin small f with hook = function = florin -->
+
+<!-- Greek -->
+<!ENTITY Alpha "Α"> <!-- U+0391 - greek capital letter alpha -->
+<!ENTITY Beta "Β"> <!-- U+0392 - greek capital letter beta -->
+<!ENTITY Gamma "Γ"> <!-- U+0393 ISOgrk3 - greek capital letter gamma -->
+<!ENTITY Delta "Δ"> <!-- U+0394 ISOgrk3 - greek capital letter delta -->
+<!ENTITY Epsilon "Ε"> <!-- U+0395 - greek capital letter epsilon -->
+<!ENTITY Zeta "Ζ"> <!-- U+0396 - greek capital letter zeta -->
+<!ENTITY Eta "Η"> <!-- U+0397 - greek capital letter eta -->
+<!ENTITY Theta "Θ"> <!-- U+0398 ISOgrk3 - greek capital letter theta -->
+<!ENTITY Iota "Ι"> <!-- U+0399 - greek capital letter iota -->
+<!ENTITY Kappa "Κ"> <!-- U+039A - greek capital letter kappa -->
+<!ENTITY Lambda "Λ"> <!-- U+039B ISOgrk3 - greek capital letter lambda -->
+<!ENTITY Mu "Μ"> <!-- U+039C - greek capital letter mu -->
+<!ENTITY Nu "Ν"> <!-- U+039D - greek capital letter nu -->
+<!ENTITY Xi "Ξ"> <!-- U+039E ISOgrk3 - greek capital letter xi -->
+<!ENTITY Omicron "Ο"> <!-- U+039F - greek capital letter omicron -->
+<!ENTITY Pi "Π"> <!-- U+03A0 ISOgrk3 - greek capital letter pi -->
+<!ENTITY Rho "Ρ"> <!-- U+03A1 - greek capital letter rho -->
+<!ENTITY Sigma "Σ"> <!-- U+03A3 ISOgrk3 - greek capital letter sigma -->
+<!ENTITY Tau "Τ"> <!-- U+03A4 - greek capital letter tau -->
+<!ENTITY Upsilon "Υ"> <!-- U+03A5 ISOgrk3 - greek capital letter upsilon -->
+<!ENTITY Phi "Φ"> <!-- U+03A6 ISOgrk3 - greek capital letter phi -->
+<!ENTITY Chi "Χ"> <!-- U+03A7 - greek capital letter chi -->
+<!ENTITY Psi "Ψ"> <!-- U+03A8 ISOgrk3 - greek capital letter psi -->
+<!ENTITY Omega "Ω"> <!-- U+03A9 ISOgrk3 - greek capital letter omega -->
+<!ENTITY alpha "α"> <!-- U+03B1 ISOgrk3 - greek small letter alpha -->
+<!ENTITY beta "β"> <!-- U+03B2 ISOgrk3 - greek small letter beta -->
+<!ENTITY gamma "γ"> <!-- U+03B3 ISOgrk3 - greek small letter gamma -->
+<!ENTITY delta "δ"> <!-- U+03B4 ISOgrk3 - greek small letter delta -->
+<!ENTITY epsilon "ε"> <!-- U+03B5 ISOgrk3 - greek small letter epsilon -->
+<!ENTITY zeta "ζ"> <!-- U+03B6 ISOgrk3 - greek small letter zeta -->
+<!ENTITY eta "η"> <!-- U+03B7 ISOgrk3 - greek small letter eta -->
+<!ENTITY theta "θ"> <!-- U+03B8 ISOgrk3 - greek small letter theta -->
+<!ENTITY iota "ι"> <!-- U+03B9 ISOgrk3 - greek small letter iota -->
+<!ENTITY kappa "κ"> <!-- U+03BA ISOgrk3 - greek small letter kappa -->
+<!ENTITY lambda "λ"> <!-- U+03BB ISOgrk3 - greek small letter lambda -->
+<!ENTITY mu "μ"> <!-- U+03BC ISOgrk3 - greek small letter mu -->
+<!ENTITY nu "ν"> <!-- U+03BD ISOgrk3 - greek small letter nu -->
+<!ENTITY xi "ξ"> <!-- U+03BE ISOgrk3 - greek small letter xi -->
+<!ENTITY omicron "ο"> <!-- U+03BF NEW - greek small letter omicron -->
+<!ENTITY pi "π"> <!-- U+03C0 ISOgrk3 - greek small letter pi -->
+<!ENTITY rho "ρ"> <!-- U+03C1 ISOgrk3 - greek small letter rho -->
+<!ENTITY sigmaf "ς"> <!-- U+03C2 ISOgrk3 - greek small letter final sigma -->
+<!ENTITY sigma "σ"> <!-- U+03C3 ISOgrk3 - greek small letter sigma -->
+<!ENTITY tau "τ"> <!-- U+03C4 ISOgrk3 - greek small letter tau -->
+<!ENTITY upsilon "υ"> <!-- U+03C5 ISOgrk3 - greek small letter upsilon -->
+<!ENTITY phi "φ"> <!-- U+03C6 ISOgrk3 - greek small letter phi -->
+<!ENTITY chi "χ"> <!-- U+03C7 ISOgrk3 - greek small letter chi -->
+<!ENTITY psi "ψ"> <!-- U+03C8 ISOgrk3 - greek small letter psi -->
+<!ENTITY omega "ω"> <!-- U+03C9 ISOgrk3 - greek small letter omega -->
+<!ENTITY thetasym "ϑ"> <!-- U+03D1 NEW - greek small letter theta symbol -->
+<!ENTITY upsih "ϒ"> <!-- U+03D2 NEW - greek upsilon with hook symbol -->
+<!ENTITY piv "ϖ"> <!-- U+03D6 ISOgrk3 - greek pi symbol -->
+
+<!-- General Punctuation -->
+<!ENTITY bull "•"> <!-- U+2022 ISOpub - bullet = black small circle -->
+<!ENTITY hellip "…"> <!-- U+2026 ISOpub - horizontal ellipsis = three dot leader -->
+<!ENTITY prime "′"> <!-- U+2032 ISOtech - prime = minutes = feet -->
+<!ENTITY Prime "″"> <!-- U+2033 ISOtech - double prime = seconds = inches -->
+<!ENTITY oline "‾"> <!-- U+203E NEW - overline = spacing overscore -->
+<!ENTITY frasl "⁄"> <!-- U+2044 NEW - fraction slash -->
+
+<!-- Letterlike Symbols -->
+<!ENTITY weierp "℘"> <!-- U+2118 ISOamso - script capital P = power set = Weierstrass p -->
+<!ENTITY image "ℑ"> <!-- U+2111 ISOamso - blackletter capital I = imaginary part -->
+<!ENTITY real "ℜ"> <!-- U+211C ISOamso - blackletter capital R = real part symbol -->
+<!ENTITY trade "™"> <!-- U+2122 ISOnum - trade mark sign -->
+<!ENTITY alefsym "ℵ"> <!-- U+2135 NEW - alef symbol = first transfinite cardinal -->
+
+<!-- Arrows -->
+<!ENTITY larr "←"> <!-- U+2190 ISOnum - leftwards arrow -->
+<!ENTITY uarr "↑"> <!-- U+2191 ISOnum - upwards arrow -->
+<!ENTITY rarr "→"> <!-- U+2192 ISOnum - rightwards arrow -->
+<!ENTITY darr "↓"> <!-- U+2193 ISOnum - downwards arrow -->
+<!ENTITY harr "↔"> <!-- U+2194 ISOamsa - left right arrow -->
+<!ENTITY crarr "↵"> <!-- U+21B5 NEW - downwards arrow with corner leftwards = carriage return -->
+<!ENTITY lArr "⇐"> <!-- U+21D0 ISOtech - leftwards double arrow -->
+<!ENTITY uArr "⇑"> <!-- U+21D1 ISOamsa - upwards double arrow -->
+<!ENTITY rArr "⇒"> <!-- U+21D2 ISOtech - rightwards double arrow -->
+<!ENTITY dArr "⇓"> <!-- U+21D3 ISOamsa - downwards double arrow -->
+<!ENTITY hArr "⇔"> <!-- U+21D4 ISOamsa - left right double arrow -->
+
+<!-- Mathematical Operators -->
+<!ENTITY forall "∀"> <!-- U+2200 ISOtech - for all -->
+<!ENTITY part "∂"> <!-- U+2202 ISOtech - partial differential -->
+<!ENTITY exist "∃"> <!-- U+2203 ISOtech - there exists -->
+<!ENTITY empty "∅"> <!-- U+2205 ISOamso - empty set = null set = diameter -->
+<!ENTITY nabla "∇"> <!-- U+2207 ISOtech - nabla = backward difference -->
+<!ENTITY isin "∈"> <!-- U+2208 ISOtech - element of -->
+<!ENTITY notin "∉"> <!-- U+2209 ISOtech - not an element of -->
+<!ENTITY ni "∋"> <!-- U+220B ISOtech - contains as member -->
+<!ENTITY prod "∏"> <!-- U+220F ISOamsb - n-ary product = product sign -->
+<!ENTITY sum "∑"> <!-- U+2211 ISOamsb - n-ary sumation -->
+<!ENTITY minus "−"> <!-- U+2212 ISOtech - minus sign -->
+<!ENTITY lowast "∗"> <!-- U+2217 ISOtech - asterisk operator -->
+<!ENTITY radic "√"> <!-- U+221A ISOtech - square root = radical sign -->
+<!ENTITY prop "∝"> <!-- U+221D ISOtech - proportional to -->
+<!ENTITY infin "∞"> <!-- U+221E ISOtech - infinity -->
+<!ENTITY ang "∠"> <!-- U+2220 ISOamso - angle -->
+<!ENTITY and "∧"> <!-- U+2227 ISOtech - logical and = wedge -->
+<!ENTITY or "∨"> <!-- U+2228 ISOtech - logical or = vee -->
+<!ENTITY cap "∩"> <!-- U+2229 ISOtech - intersection = cap -->
+<!ENTITY cup "∪"> <!-- U+222A ISOtech - union = cup -->
+<!ENTITY int "∫"> <!-- U+222B ISOtech - integral -->
+<!ENTITY there4 "∴"> <!-- U+2234 ISOtech - therefore -->
+<!ENTITY sim "∼"> <!-- U+223C ISOtech - tilde operator = varies with = similar to -->
+<!ENTITY cong "≅"> <!-- U+2245 ISOtech - approximately equal to -->
+<!ENTITY asymp "≈"> <!-- U+2248 ISOamsr - almost equal to = asymptotic to -->
+<!ENTITY ne "≠"> <!-- U+2260 ISOtech - not equal to -->
+<!ENTITY equiv "≡"> <!-- U+2261 ISOtech - identical to -->
+<!ENTITY le "≤"> <!-- U+2264 ISOtech - less-than or equal to -->
+<!ENTITY ge "≥"> <!-- U+2265 ISOtech - greater-than or equal to -->
+<!ENTITY sub "⊂"> <!-- U+2282 ISOtech - subset of -->
+<!ENTITY sup "⊃"> <!-- U+2283 ISOtech - superset of -->
+<!ENTITY nsub "⊄"> <!-- U+2284 ISOamsn - not a subset of -->
+<!ENTITY sube "⊆"> <!-- U+2286 ISOtech - subset of or equal to -->
+<!ENTITY supe "⊇"> <!-- U+2287 ISOtech - superset of or equal to -->
+<!ENTITY oplus "⊕"> <!-- U+2295 ISOamsb - circled plus = direct sum -->
+<!ENTITY otimes "⊗"> <!-- U+2297 ISOamsb - circled times = vector product -->
+<!ENTITY perp "⊥"> <!-- U+22A5 ISOtech - up tack = orthogonal to = perpendicular -->
+<!ENTITY sdot "⋅"> <!-- U+22C5 ISOamsb - dot operator -->
+
+<!-- Miscellaneous Technical -->
+<!ENTITY lceil "⌈"> <!-- U+2308 ISOamsc - left ceiling = apl upstile -->
+<!ENTITY rceil "⌉"> <!-- U+2309 ISOamsc - right ceiling -->
+<!ENTITY lfloor "⌊"> <!-- U+230A ISOamsc - left floor = apl downstile -->
+<!ENTITY rfloor "⌋"> <!-- U+230B ISOamsc - right floor -->
+<!ENTITY lang "〈"> <!-- U+2329 ISOtech - left-pointing angle bracket = bra -->
+<!ENTITY rang "〉"> <!-- U+232A ISOtech - right-pointing angle bracket = ket -->
+
+<!-- Geometric Shapes -->
+<!ENTITY loz "◊"> <!-- U+25CA ISOpub - lozenge -->
+
+<!-- Miscellaneous Symbols -->
+<!ENTITY spades "♠"> <!-- U+2660 ISOpub - black spade suit -->
+<!ENTITY clubs "♣"> <!-- U+2663 ISOpub - black club suit = shamrock -->
+<!ENTITY hearts "♥"> <!-- U+2665 ISOpub - black heart suit = valentine -->
+<!ENTITY diams "♦"> <!-- U+2666 ISOpub - black diamond suit -->
+
+<!-- CVS $Revision: 313216 $ $Date: 1999-12-01 15:19:18 +0100 (ons, 01 dec 1999) $ -->
+
+<!-- Portions (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies. -->
diff --git a/styles/apachexml/dtd/document.dtd b/styles/apachexml/dtd/document.dtd
new file mode 100644
index 0000000..b737c5b
--- /dev/null
+++ b/styles/apachexml/dtd/document.dtd
@@ -0,0 +1,19 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- STYLEBOOK DOCUMENT DTD -->
+
+<!-- import the external blocks.ent dtd -->
+<!ENTITY % blocksEntity SYSTEM "blocks.ent">
+%blocksEntity;
+
+<!ELEMENT s1 (s2|%blocks;)*>
+<!ELEMENT s2 (s3|%blocks;)*>
+<!ELEMENT s3 (s4|%blocks;)*>
+<!ELEMENT s4 (%blocks;)*>
+
+<!ATTLIST s1 title CDATA #REQUIRED>
+<!ATTLIST s2 title CDATA #REQUIRED>
+<!ATTLIST s3 title CDATA #REQUIRED>
+<!ATTLIST s4 title CDATA #REQUIRED>
+
+<!-- CVS $Revision: 313216 $ $Date: 1999-12-01 15:19:18 +0100 (ons, 01 dec 1999) $ -->
\ No newline at end of file
diff --git a/styles/apachexml/dtd/faqs.dtd b/styles/apachexml/dtd/faqs.dtd
new file mode 100644
index 0000000..25dd7c0
--- /dev/null
+++ b/styles/apachexml/dtd/faqs.dtd
@@ -0,0 +1,19 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- STYLEBOOK FAQS DTD -->
+
+<!-- import the external blocks.ent dtd -->
+<!ENTITY % blocksEntity SYSTEM "blocks.ent">
+%blocksEntity;
+
+<!ELEMENT faqs (faq)+>
+<!ATTLIST faqs title CDATA #REQUIRED>
+
+<!ELEMENT faq (q,a)>
+<!ATTLIST faq title CDATA #IMPLIED>
+
+
+<!ELEMENT q (#PCDATA)>
+<!ELEMENT a (%blocks;)+>
+
+<!-- CVS $Revision: 313216 $ $Date: 1999-12-01 15:19:18 +0100 (ons, 01 dec 1999) $ -->
\ No newline at end of file
diff --git a/styles/apachexml/dtd/links.ent b/styles/apachexml/dtd/links.ent
new file mode 100644
index 0000000..b6ccc07
--- /dev/null
+++ b/styles/apachexml/dtd/links.ent
@@ -0,0 +1,24 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- LINKS ENTITY -->
+<!ENTITY % links "link|anchor|jump|img|resource-ref|human-resource-ref">
+
+<!ELEMENT anchor EMPTY>
+<!ATTLIST anchor name NMTOKEN #REQUIRED>
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img src CDATA #REQUIRED
+ alt CDATA #REQUIRED>
+
+<!ELEMENT link (#PCDATA|img)*>
+<!ATTLIST link idref NMTOKEN #IMPLIED
+ anchor CDATA #IMPLIED>
+
+<!ELEMENT jump (#PCDATA|img)*>
+<!ATTLIST jump href CDATA #REQUIRED>
+
+<!-- cross-reference resource elements -->
+<!ELEMENT resource-ref EMPTY>
+<!ATTLIST resource-ref idref CDATA #REQUIRED>
+<!ELEMENT human-resource-ref EMPTY>
+<!ATTLIST human-resource-ref idref CDATA #REQUIRED>
\ No newline at end of file
diff --git a/styles/apachexml/dtd/markup.ent b/styles/apachexml/dtd/markup.ent
new file mode 100644
index 0000000..754be82
--- /dev/null
+++ b/styles/apachexml/dtd/markup.ent
@@ -0,0 +1,21 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- MARKUP ENTITY -->
+<!ENTITY % markup "em|ref|code|br">
+
+<!-- import the external source-specific dtd -->
+<!ENTITY % externalEntity SYSTEM "sbk:/sources/entities.ent">
+%externalEntity;
+<!-- import the external charecters.ent dtd -->
+<!ENTITY % charEntity SYSTEM "characters.ent">
+%charEntity;
+<!-- import the external links.ent dtd -->
+<!ENTITY % linksEntity SYSTEM "links.ent">
+%linksEntity;
+
+<!ELEMENT em (#PCDATA|%links;)*>
+<!ELEMENT ref (#PCDATA|%links;)*>
+<!ELEMENT code (#PCDATA|%links;)*>
+<!ELEMENT br EMPTY>
+
+<!-- CVS $Revision: 313236 $ $Date: 1999-12-02 00:03:37 +0100 (tor, 02 dec 1999) $ -->
\ No newline at end of file
diff --git a/styles/apachexml/graphics/button-a.gif b/styles/apachexml/graphics/button-a.gif
new file mode 100644
index 0000000..5d0b8c2
Binary files /dev/null and b/styles/apachexml/graphics/button-a.gif differ
diff --git a/styles/apachexml/graphics/button-b.gif b/styles/apachexml/graphics/button-b.gif
new file mode 100644
index 0000000..06e0381
Binary files /dev/null and b/styles/apachexml/graphics/button-b.gif differ
diff --git a/styles/apachexml/loader.xml b/styles/apachexml/loader.xml
new file mode 100644
index 0000000..d5accd4
--- /dev/null
+++ b/styles/apachexml/loader.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+
+<!-- CVS $Revision: 313219 $ $Date: 1999-12-01 15:26:14 +0100 (ons, 01 dec 1999) $ -->
+
+<loader>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/book2project.xsl"/>
+ </processor>
+</loader>
diff --git a/styles/apachexml/resources/bottom.gif b/styles/apachexml/resources/bottom.gif
new file mode 100644
index 0000000..f39031e
Binary files /dev/null and b/styles/apachexml/resources/bottom.gif differ
diff --git a/styles/apachexml/resources/button-asf-hi.gif b/styles/apachexml/resources/button-asf-hi.gif
new file mode 100644
index 0000000..08b880a
Binary files /dev/null and b/styles/apachexml/resources/button-asf-hi.gif differ
diff --git a/styles/apachexml/resources/button-asf-lo.gif b/styles/apachexml/resources/button-asf-lo.gif
new file mode 100644
index 0000000..134580f
Binary files /dev/null and b/styles/apachexml/resources/button-asf-lo.gif differ
diff --git a/styles/apachexml/resources/button-w3c-hi.gif b/styles/apachexml/resources/button-w3c-hi.gif
new file mode 100644
index 0000000..3bf0be3
Binary files /dev/null and b/styles/apachexml/resources/button-w3c-hi.gif differ
diff --git a/styles/apachexml/resources/button-w3c-lo.gif b/styles/apachexml/resources/button-w3c-lo.gif
new file mode 100644
index 0000000..d383d3d
Binary files /dev/null and b/styles/apachexml/resources/button-w3c-lo.gif differ
diff --git a/styles/apachexml/resources/button-xml-hi.gif b/styles/apachexml/resources/button-xml-hi.gif
new file mode 100644
index 0000000..01d095c
Binary files /dev/null and b/styles/apachexml/resources/button-xml-hi.gif differ
diff --git a/styles/apachexml/resources/button-xml-lo.gif b/styles/apachexml/resources/button-xml-lo.gif
new file mode 100644
index 0000000..5719c7e
Binary files /dev/null and b/styles/apachexml/resources/button-xml-lo.gif differ
diff --git a/styles/apachexml/resources/close.gif b/styles/apachexml/resources/close.gif
new file mode 100644
index 0000000..48a9782
Binary files /dev/null and b/styles/apachexml/resources/close.gif differ
diff --git a/styles/apachexml/resources/dot.gif b/styles/apachexml/resources/dot.gif
new file mode 100644
index 0000000..6227d1d
Binary files /dev/null and b/styles/apachexml/resources/dot.gif differ
diff --git a/styles/apachexml/resources/join.gif b/styles/apachexml/resources/join.gif
new file mode 100644
index 0000000..02e7611
Binary files /dev/null and b/styles/apachexml/resources/join.gif differ
diff --git a/styles/apachexml/resources/line.gif b/styles/apachexml/resources/line.gif
new file mode 100644
index 0000000..fd25c39
Binary files /dev/null and b/styles/apachexml/resources/line.gif differ
diff --git a/styles/apachexml/resources/logo.gif b/styles/apachexml/resources/logo.gif
new file mode 100644
index 0000000..53538c3
Binary files /dev/null and b/styles/apachexml/resources/logo.gif differ
diff --git a/styles/apachexml/resources/note.gif b/styles/apachexml/resources/note.gif
new file mode 100644
index 0000000..3394222
Binary files /dev/null and b/styles/apachexml/resources/note.gif differ
diff --git a/styles/apachexml/resources/right.gif b/styles/apachexml/resources/right.gif
new file mode 100644
index 0000000..bcb50e3
Binary files /dev/null and b/styles/apachexml/resources/right.gif differ
diff --git a/styles/apachexml/resources/script.js b/styles/apachexml/resources/script.js
new file mode 100644
index 0000000..ebadeb2
--- /dev/null
+++ b/styles/apachexml/resources/script.js
@@ -0,0 +1,21 @@
+rolloverImagesOn=new Array();
+rolloverImagesOff=new Array();
+
+function rolloverOn(name) {
+ if(rolloverImagesOn[name]){
+ document.images[name].src=rolloverImagesOn[name].src;
+ }
+}
+
+function rolloverOff(name) {
+ if(rolloverImagesOff[name]){
+ document.images[name].src=rolloverImagesOff[name].src;
+ }
+}
+
+function rolloverLoad(name,on,off) {
+ rolloverImagesOn[name]=new Image();
+ rolloverImagesOn[name].src=on;
+ rolloverImagesOff[name]=new Image();
+ rolloverImagesOff[name].src=off;
+}
diff --git a/styles/apachexml/resources/separator.gif b/styles/apachexml/resources/separator.gif
new file mode 100644
index 0000000..e774943
Binary files /dev/null and b/styles/apachexml/resources/separator.gif differ
diff --git a/styles/apachexml/resources/void.gif b/styles/apachexml/resources/void.gif
new file mode 100644
index 0000000..75b945d
Binary files /dev/null and b/styles/apachexml/resources/void.gif differ
diff --git a/styles/apachexml/stylesheets/any2header.xsl b/styles/apachexml/stylesheets/any2header.xsl
new file mode 100644
index 0000000..0c62100
--- /dev/null
+++ b/styles/apachexml/stylesheets/any2header.xsl
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:param name="label"/>
+
+ <xsl:template match="/">
+ <image width="456" height="35" bgcolor="0086b2">
+ <xsl:apply-templates/>
+ </image>
+ </xsl:template>
+
+ <xsl:template match="s1|faqs|changes">
+ <xsl:variable name="title">
+ <xsl:if test="string-length(@title)=0">
+ <xsl:value-of select="$label"/>
+ </xsl:if>
+ <xsl:if test="string-length(@title)>0">
+ <xsl:value-of select="@title"/>
+ </xsl:if>
+ </xsl:variable>
+
+ <text font="Arial" size="29" x="454" y="8" halign="right" valign="top" color="004080"
+ text="{$title}"/>
+ <text font="Arial" size="29" x="452" y="6" halign="right" valign="top" color="ffffff"
+ text="{$title}"/>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/apachexml/stylesheets/any2project.xsl b/styles/apachexml/stylesheets/any2project.xsl
new file mode 100644
index 0000000..191961f
--- /dev/null
+++ b/styles/apachexml/stylesheets/any2project.xsl
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:param name="label"/>
+
+ <xsl:template match="/">
+ <project>
+ <xsl:apply-templates/>
+ </project>
+ </xsl:template>
+
+ <xsl:template match="img">
+ <resource source="{@src}" target="images/{@src}"/>
+ </xsl:template>
+
+ <xsl:template match="node()">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/apachexml/stylesheets/book2group.xsl b/styles/apachexml/stylesheets/book2group.xsl
new file mode 100644
index 0000000..3c3cc12
--- /dev/null
+++ b/styles/apachexml/stylesheets/book2group.xsl
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:param name="id"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="book">
+ <group title="{group[attribute::id=$id]/@label}">
+ <xsl:apply-templates select="group[attribute::id=$id]/entry"/>
+ </group>
+ </xsl:template>
+
+ <xsl:template match="entry">
+ <entry id="{@id}" title="{document(concat('sbk:/sources/', at source))/faqs/@title}">
+ <xsl:apply-templates select="document(concat('sbk:/sources/', at source))/faqs/faq"/>
+ </entry>
+ </xsl:template>
+
+ <xsl:template match="faq">
+ <voice>
+ <xsl:if test="string-length(@title)=0">
+ <xsl:value-of select="q"/>
+ </xsl:if>
+ <xsl:if test="string-length(@title)>0">
+ <xsl:value-of select="@title"/>
+ </xsl:if>
+ </voice>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/apachexml/stylesheets/book2project.xsl b/styles/apachexml/stylesheets/book2project.xsl
new file mode 100644
index 0000000..bdc8410
--- /dev/null
+++ b/styles/apachexml/stylesheets/book2project.xsl
@@ -0,0 +1,289 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <!-- match the root book element -->
+ <xsl:template match="book">
+ <project>
+
+ <parameter name="copyright" value="{@copyright}"/>
+
+ <!-- copy all resources to the targets -->
+ <process source="sbk:/style/resources/" producer="directory">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/directory2project.xsl"/>
+ <parameter name="base" value="resources/"/>
+ </processor>
+ </process>
+
+ <xsl:apply-templates/>
+
+ </project>
+ </xsl:template>
+
+<!-- ********************************************************************** -->
+<!-- CREATE THE TARGET HTML -->
+<!-- ********************************************************************** -->
+
+ <xsl:template match="document">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+ <xsl:template match="hidden">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+ <xsl:template match="faqs">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/faqs2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="changes">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/changes2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="group">
+ <xsl:apply-templates/>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="" target="{@id}.html" producer="project" printer="html">
+ <parameter name="id" value="{@id}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/book2group.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/group2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="container">
+
+ <xsl:apply-templates/>
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="entry">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/faqs2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="external">
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="concat('ext-',position())"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ </xsl:template>
+<!-- ********************************************************************** -->
+<!-- NAMED TEMPLATES -->
+<!-- ********************************************************************** -->
+
+<!-- Generate the doument header image -->
+ <xsl:template name="header">
+ <xsl:param name="id"/>
+ <xsl:param name="source"/>
+ <xsl:param name="label"/>
+
+ <create source="{$source}" target="graphics/{$id}-header.jpg" producer="parser" printer="image">
+ <processor name="xslt">
+ <parameter name="label" value="{$label}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2header.xsl"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+<!-- Generate the three rollover label images -->
+ <xsl:template name="labels">
+ <xsl:param name="id"/>
+ <xsl:param name="label"/>
+
+ <create source="" target="graphics/{$id}-label-1.jpg" producer="context" printer="image">
+ <parameter name="label" value="{$label}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2label.xsl"/>
+ <parameter name="image" value="sbk:/style/graphics/button-a.gif"/>
+ <parameter name="color" value="ffffff"/>
+ </processor>
+ </create>
+
+ <create source="" target="graphics/{$id}-label-2.jpg" producer="context" printer="image">
+ <parameter name="label" value="{$label}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2label.xsl"/>
+ <parameter name="image" value="sbk:/style/graphics/button-b.gif"/>
+ <parameter name="color" value="ffff00"/>
+ </processor>
+ </create>
+
+ <create source="" target="graphics/{$id}-label-3.jpg" producer="context" printer="image">
+ <parameter name="label" value="{$label}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2label.xsl"/>
+ <parameter name="image" value="sbk:/style/graphics/button-b.gif"/>
+ <parameter name="color" value="ffffff"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/apachexml/stylesheets/changes2document.xsl b/styles/apachexml/stylesheets/changes2document.xsl
new file mode 100644
index 0000000..c0fd6ba
--- /dev/null
+++ b/styles/apachexml/stylesheets/changes2document.xsl
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="changes">
+ <s1 title="{@title}">
+ <xsl:apply-templates/>
+ </s1>
+ </xsl:template>
+
+ <xsl:template match="release">
+ <s2 title="Release {@version} {@date}">
+ <br/><xsl:apply-templates/>
+ </s2>
+ </xsl:template>
+
+ <xsl:template match="features">
+ <s3 title="Features">
+ <ul><xsl:apply-templates/></ul>
+ </s3>
+ </xsl:template>
+
+ <xsl:template match="fixes">
+ <s3 title="Bugs fixed">
+ <ul><xsl:apply-templates/></ul>
+ </s3>
+ </xsl:template>
+
+ <xsl:template match="feat|fix">
+ <li><xsl:apply-templates/></li>
+ </xsl:template>
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/apachexml/stylesheets/context2footer.xsl b/styles/apachexml/stylesheets/context2footer.xsl
new file mode 100644
index 0000000..16887a7
--- /dev/null
+++ b/styles/apachexml/stylesheets/context2footer.xsl
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="context">
+ <image source="sbk:/style/graphics/footer.gif">
+ <xsl:apply-templates/>
+ </image>
+ </xsl:template>
+
+ <xsl:template match="parameter">
+ <xsl:if test="@name='copyright'">
+ <text font="Arial Bold" size="11" x="124" y="6" style="plain"
+ halign="left" valign="top" color="666699"
+ text="Copyright © {@value}. All Rights Reserved."/>
+ <text font="Arial Bold" size="11" x="123" y="5" style="plain"
+ halign="left" valign="top" color="333366"
+ text="Copyright © {@value}. All Rights Reserved."/>
+ <text font="Arial Bold" size="11" x="122" y="4" style="plain"
+ halign="left" valign="top" color="ffffff"
+ text="Copyright © {@value}. All Rights Reserved."/>
+ </xsl:if>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/apachexml/stylesheets/context2label.xsl b/styles/apachexml/stylesheets/context2label.xsl
new file mode 100644
index 0000000..4970f3a
--- /dev/null
+++ b/styles/apachexml/stylesheets/context2label.xsl
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:param name="image"/>
+ <xsl:param name="color"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="context">
+ <image source="{$image}">
+ <xsl:apply-templates/>
+ </image>
+ </xsl:template>
+
+ <xsl:template match="parameter">
+ <xsl:if test="@name='label'">
+ <text font="Arial" size="12" x="14" y="1" halign="left"
+ valign="top" color="{$color}" style="italic" text="{@value}"/>
+ </xsl:if>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/apachexml/stylesheets/directory2project.xsl b/styles/apachexml/stylesheets/directory2project.xsl
new file mode 100644
index 0000000..9942788
--- /dev/null
+++ b/styles/apachexml/stylesheets/directory2project.xsl
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:param name="base"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="directory">
+ <project>
+ <xsl:apply-templates/>
+ </project>
+ </xsl:template>
+
+ <xsl:template match="entry">
+
+ <!--xsl:if test="@directory!='true'"-->
+ <resource source="{@href}" target="{$base}{@href}"/>
+ <!--/xsl:if-->
+<!-- don't copy subdir to avoid copying proprietary CVS files
+ <xsl:if test="@directory='true'">
+ <process source="{@href}" producer="directory">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/directory2project.xsl"/>
+ <parameter name="base" value="{$base}{@href}"/>
+ </processor>
+ </process>
+ </xsl:if>
+-->
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/apachexml/stylesheets/document2html.xsl b/styles/apachexml/stylesheets/document2html.xsl
new file mode 100644
index 0000000..32c3a6e
--- /dev/null
+++ b/styles/apachexml/stylesheets/document2html.xsl
@@ -0,0 +1,451 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:param name="stylebook.project"/>
+ <xsl:param name="copyright"/>
+ <xsl:param name="id"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="s1">
+ <html>
+ <head>
+ <script language="JavaScript" type="text/javascript" src="resources/script.js"/>
+ <title><xsl:value-of select="@title"/></title>
+ </head>
+ <body text="#000000" link="#0000ff" vlink="#0000aa" alink="#ff0000"
+ topmargin="4" leftmargin="4" marginwidth="4" marginheight="4"
+ bgcolor="#ffffff">
+ <!-- THE TOP BAR (HEADER) -->
+ <table width="620" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td width="135" height="60" rowspan="3" valign="top" align="left">
+ <img width="135" height="60" src="resources/logo.gif" hspace="0" vspace="0" border="0"/></td>
+ <td width="456" height="5" valign="top" align="left" colspan="4">
+ <img width="456" height="5" src="resources/line.gif" hspace="0" vspace="0" border="0"/></td>
+ <td width="29" height="60" rowspan="3" valign="top" align="left">
+ <img width="29" height="60" src="resources/right.gif" hspace="0" vspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td width="456" height="35" valign="top" align="left" colspan="4" bgcolor="#0086b2">
+ <img src="graphics/{$id}-header.jpg" width="456" height="35" hspace="0" vspace="0" border="0" alt="{s1/@title}"/></td>
+ </tr>
+ <tr>
+ <td width="168" height="20" valign="top" align="left">
+ <img width="168" height="20" src="resources/bottom.gif" hspace="0" vspace="0" border="0"/></td>
+ <td width="96" height="20" valign="top" align="left">
+ <a href="http://xml.apache.org/" onMouseOver="rolloverOn('xml');" onMouseOut="rolloverOff('xml');" target="new">
+ <img alt="http://xml.apache.org/" width="96" height="20" src="resources/button-xml-lo.gif"
+ name="xml" hspace="0" vspace="0" border="0"
+ onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');"/>
+ </a>
+ </td>
+ <td width="96" height="20" valign="top" align="left">
+ <a href="http://www.apache.org/" onMouseOver="rolloverOn('asf');" onMouseOut="rolloverOff('asf');" target="new">
+ <img alt="http://www.apache.org/" width="96" height="20" src="resources/button-asf-lo.gif"
+ name="asf" hspace="0" vspace="0" border="0"
+ onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');"/>
+ </a>
+ </td>
+ <td width="96" height="20" valign="top" align="left">
+ <a href="http://www.w3.org/" onMouseOver="rolloverOn('w3c');" onMouseOut="rolloverOff('w3c');" target="new">
+ <img alt="http://www.w3.org/" width="96" height="20" src="resources/button-w3c-lo.gif"
+ name="w3c" hspace="0" vspace="0" border="0"
+ onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');"/>
+ </a>
+ </td>
+ </tr>
+ </table>
+ <!-- THE MAIN PANEL (SIDEBAR AND CONTENT) -->
+ <table width="620" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <!-- THE SIDE BAR -->
+ <td width="120" valign="top" align="left">
+ <img width="120" height="14" src="resources/join.gif" hspace="0" vspace="0" border="0"/><br/>
+ <xsl:apply-templates select="document($stylebook.project)"/>
+ <img width="120" height="14" src="resources/close.gif" hspace="0" vspace="0" border="0"/><br/>
+ </td>
+ <!-- THE CONTENT PANEL -->
+ <td width="500" valign="top" align="left">
+ <table border="0" cellspacing="0" cellpadding="3">
+ <tr><td><xsl:apply-templates/></td></tr>
+ </table>
+ </td>
+ </tr>
+ </table><br/>
+ <table width="620" border="0" cellspacing="0" cellpadding="0">
+ <tr><td bgcolor="#0086b2"><img src="images/dot.gif" width="1" height="1"/></td></tr>
+ <tr>
+ <td align="center"><font size="-1" color="#0086b2"><i>
+ Copyright © <xsl:value-of select="$copyright"/>.
+ All Rights Reserved.
+ </i></font></td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- book -->
+
+ <xsl:template match="book">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="document|faqs|changes|group">
+ <xsl:if test="@id=$id">
+ <img src="graphics/{@id}-label-1.jpg" width="120" height="12" hspace="0" vspace="0" border="0" alt="{@label}"/>
+ </xsl:if>
+ <xsl:if test="@id!=$id">
+ <a href="{@id}.html" onMouseOver="rolloverOn('side-{@id}');" onMouseOut="rolloverOff('side-{@id}');">
+ <img onLoad="rolloverLoad('side-{@id}','graphics/{@id}-label-2.jpg','graphics/{@id}-label-3.jpg');"
+ name="side-{@id}" src="graphics/{@id}-label-3.jpg" width="120" height="12" hspace="0" vspace="0" border="0" alt="{@label}"/>
+ </a>
+ </xsl:if>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="external">
+ <xsl:variable name="extid" select="concat('ext-',position())"/>
+ <a href="{@href}" onMouseOver="rolloverOn('side-{$extid}');" onMouseOut="rolloverOff('side-{$extid}');">
+ <img onLoad="rolloverLoad('side-{$extid}','graphics/{$extid}-label-2.jpg','graphics/{$extid}-label-3.jpg');"
+ name="side-{$extid}" src="graphics/{$extid}-label-3.jpg" width="120" height="12" hspace="0" vspace="0" border="0" alt="{@label}"/>
+ </a>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="separator">
+ <img src="resources/separator.gif" width="120" height="6" hspace="0" vspace="0" border="0"/><br/>
+ </xsl:template>
+
+
+<!-- ###################################################################### -->
+<!-- document -->
+
+ <xsl:template match="s2">
+ <table width="494" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="666699" colspan="2" width="494">
+ <table width="494" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="#039acc" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#039acc" width="492" height="1"><img src="resources/void.gif" width="492" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#0086b2" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#039acc" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#0086b2" width="492">
+ <font size="+1" face="arial,helvetica,sanserif" color="#ffffff">
+ <img src="resources/void.gif" width="2" height="2" vspace="0" hspace="0" border="0"/>
+ <b><xsl:value-of select="@title"/></b>
+ </font>
+ </td>
+ <td bgcolor="#017299" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#0086b2" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#017299" width="492" height="1"><img src="resources/void.gif" width="492" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#017299" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="10"> </td>
+ <td width="484">
+ <font face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="s3">
+ <table width="484" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="666699" colspan="2" width="484">
+ <table width="484" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="#039acc" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#039acc" width="482" height="1"><img src="resources/void.gif" width="482" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#0086b2" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#039acc" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#0086b2" width="482">
+ <font face="arial,helvetica,sanserif" color="#ffffff">
+ <img src="resources/void.gif" width="2" height="2" vspace="0" hspace="0" border="0"/>
+ <b><xsl:value-of select="@title"/></b>
+ </font>
+ </td>
+ <td bgcolor="#017299" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#0086b2" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#017299" width="482" height="1"><img src="resources/void.gif" width="482" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#017299" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="10"> </td>
+ <td width="474">
+ <font size="-1" face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="s4">
+ <table width="474" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="666699" colspan="2" width="484">
+ <table width="474" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="#039acc" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#039acc" width="472" height="1"><img src="resources/void.gif" width="472" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#0086b2" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#039acc" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#0086b2" width="472">
+ <font size="-1" face="arial,helvetica,sanserif" color="#ffffff">
+ <img src="resources/void.gif" width="2" height="2" vspace="0" hspace="0" border="0"/>
+ <b><xsl:value-of select="@title"/></b>
+ </font>
+ </td>
+ <td bgcolor="#017299" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#0086b2" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#017299" width="472" height="1"><img src="resources/void.gif" width="472" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#017299" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="10"> </td>
+ <td width="464">
+ <font size="-1" face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- blocks -->
+
+ <xsl:template match="p">
+ <p><xsl:apply-templates/></p>
+ </xsl:template>
+
+ <xsl:template match="note">
+ <table width="100%" cellspacing="3" cellpadding="0" border="0">
+ <tr>
+ <td width="20" valign="top">
+ <img src="resources/note.gif" width="20" height="24" vspace="0" hspace="0" border="0" alt="Note"/>
+ </td>
+ <td valign="top">
+ <font size="-1" face="arial,helvetica,sanserif" color="#000000">
+ <i>
+ <xsl:apply-templates/>
+ </i>
+ </font>
+ </td>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="ul">
+ <ul><xsl:apply-templates/></ul>
+ </xsl:template>
+
+ <xsl:template match="ol">
+ <ol><xsl:apply-templates/></ol>
+ </xsl:template>
+
+ <xsl:template match="li">
+ <li><xsl:apply-templates/></li>
+ </xsl:template>
+
+ <!--Definition lists: gloss, term, label, item -->
+ <xsl:template match="gloss">
+ <dl><xsl:apply-templates/></dl>
+ </xsl:template>
+ <!-- <term> contains a single-word, multi-word or symbolic
+ designation which is regarded as a technical term. -->
+ <xsl:template match="term">
+ <dfn><xsl:apply-templates/></dfn>
+ </xsl:template>
+ <xsl:template match="label" priority="1">
+ <dt><xsl:apply-templates/></dt>
+ </xsl:template>
+ <xsl:template match="item" priority="2">
+ <dd>
+ <xsl:apply-templates/>
+ </dd>
+ </xsl:template>
+
+ <xsl:template match="source">
+ <div align="right">
+ <table width="464" cellspacing="4" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="#0086b2" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#0086b2" width="462" height="1"><img src="resources/void.gif" width="462" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#0086b2" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#0086b2" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#ffffff" width="462">
+ <font size="-1"><pre><xsl:apply-templates/></pre></font>
+ </td>
+ <td bgcolor="#0086b2" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#0086b2" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#0086b2" width="462" height="1"><img src="resources/void.gif" width="462" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#0086b2" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="table">
+ <table width="100%" border="0" cellspacing="2" cellpadding="2">
+ <xsl:apply-templates/>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="tr">
+ <tr><xsl:apply-templates/></tr>
+ </xsl:template>
+
+ <xsl:template match="th">
+ <td bgcolor="#039acc" colspan="{@colspan}" rowspan="{@rowspan}" valign="center" align="center">
+ <font color="#ffffff" size="-1" face="arial,helvetica,sanserif">
+ <b><xsl:apply-templates/></b>
+ </font>
+ </td>
+ </xsl:template>
+
+ <xsl:template match="td">
+ <td bgcolor="#a0ddf0" colspan="{@colspan}" rowspan="{@rowspan}" valign="top" align="left">
+ <font color="#000000" size="-1" face="arial,helvetica,sanserif">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </xsl:template>
+
+ <xsl:template match="tn">
+ <td bgcolor="#ffffff" colspan="{@colspan}" rowspan="{@rowspan}">
+
+ </td>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- markup -->
+
+ <xsl:template match="em">
+ <b><xsl:apply-templates/></b>
+ </xsl:template>
+
+ <xsl:template match="ref">
+ <i><xsl:apply-templates/></i>
+ </xsl:template>
+
+ <xsl:template match="code">
+ <code><font face="courier, monospaced"><xsl:apply-templates/></font></code>
+ </xsl:template>
+
+ <xsl:template match="br">
+ <br/>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- links -->
+
+ <xsl:template match="link">
+ <xsl:if test="string-length(@anchor)=0">
+ <xsl:if test="string-length(@idref)=0">
+ <xsl:apply-templates/>
+ </xsl:if>
+ <xsl:if test="string-length(@idref)>0">
+ <a href="{@idref}.html"><xsl:apply-templates/></a>
+ </xsl:if>
+ </xsl:if>
+
+ <xsl:if test="string-length(@anchor)>0">
+ <xsl:if test="string-length(@idref)=0">
+ <a href="#{@anchor}"><xsl:apply-templates/></a>
+ </xsl:if>
+ <xsl:if test="string-length(@idref)>0">
+ <a href="{@idref}.html#{@anchor}"><xsl:apply-templates/></a>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="anchor">
+ <a name="{@name}"><xsl:comment>anchor</xsl:comment></a>
+ </xsl:template>
+
+ <xsl:template match="jump">
+ <a href="{@href}"><xsl:apply-templates/></a>
+ </xsl:template>
+
+ <xsl:template match="img">
+ <img src="images/{@src}" border="0" vspace="4" hspace="4" align="right"/>
+ <br clear="all"/>
+ </xsl:template>
+
+ <xsl:template match="resource-ref">
+ <xsl:variable name="resourceFile"
+ select="document($stylebook.project)/book/resources/@source"/>
+ <xsl:variable name="xref" select="@idref"/>
+ <xsl:variable name="href"
+ select="document($resourceFile)/resources/resource[@id=$xref]/@location"/>
+ <xsl:variable name="label"
+ select="document($resourceFile)/resources/resource[@id=$xref]/@title"/>
+ <A href="{$href}" target="_top"><xsl:value-of select="$label"/></A>
+ </xsl:template>
+
+ <xsl:template match="human-resource-ref">
+ <xsl:variable name="resourceFile"
+ select="document($stylebook.project)/book/resources/@source"/>
+ <xsl:variable name="ref" select="@idref"/>
+ <xsl:variable name="mailto"
+ select="document($resourceFile)/resources/human-resource[@id=$ref]/@mailto"/>
+ <xsl:variable name="name"
+ select="document($resourceFile)/resources/human-resource[@id=$ref]/@name"/>
+ <A href="mailto:{$mailto}"><xsl:value-of select="$name"/></A>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- ignore -->
+ <xsl:template match="form">
+ <xsl:copy-of select="." />
+ </xsl:template>
+
+
+<!-- copy
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+-->
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/apachexml/stylesheets/faqs2document.xsl b/styles/apachexml/stylesheets/faqs2document.xsl
new file mode 100644
index 0000000..aaaeb02
--- /dev/null
+++ b/styles/apachexml/stylesheets/faqs2document.xsl
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="faqs">
+ <s1 title="{@title}">
+ <s2 title="Questions">
+ <ul>
+ <xsl:apply-templates select="faq" mode="index"/>
+ </ul>
+ </s2>
+ <s2 title="Answers">
+ <br/>
+ <xsl:apply-templates select="faq"/>
+ </s2>
+ </s1>
+ </xsl:template>
+
+ <xsl:template match="faq" mode="index">
+ <li>
+ <link anchor="faq-{position()}">
+ <xsl:if test="string-length(@title)=0">
+ <xsl:value-of select="q"/>
+ </xsl:if>
+ <xsl:if test="string-length(@title)>0">
+ <xsl:value-of select="@title"/>
+ </xsl:if>
+ </link>
+ </li>
+ </xsl:template>
+
+ <xsl:template match="faq">
+ <anchor name="faq-{position()}"/>
+ <s3 title="{q}">
+ <xsl:apply-templates select="a"/>
+ </s3>
+ </xsl:template>
+
+ <xsl:template match="a">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/apachexml/stylesheets/group2document.xsl b/styles/apachexml/stylesheets/group2document.xsl
new file mode 100644
index 0000000..0c26651
--- /dev/null
+++ b/styles/apachexml/stylesheets/group2document.xsl
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="group">
+ <s1 title="{@title}">
+ <xsl:apply-templates/>
+ </s1>
+ </xsl:template>
+
+ <xsl:template match="entry">
+ <s2 title="{@title}">
+ <p>
+ Read the <link idref="{@id}"><xsl:value-of select="@title"/></link>
+ document or jump directly to:
+ </p>
+ <ul>
+ <xsl:apply-templates/>
+ </ul>
+ </s2>
+ </xsl:template>
+
+ <xsl:template match="voice">
+ <li><link idref="{ancestor::*/@id}" anchor="faq-{position()}"><xsl:apply-templates/></link></li>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/christmas.psd b/styles/christmas/christmas.psd
new file mode 100644
index 0000000..a98a2ea
Binary files /dev/null and b/styles/christmas/christmas.psd differ
diff --git a/styles/christmas/dtd/blocks.ent b/styles/christmas/dtd/blocks.ent
new file mode 100644
index 0000000..f14162c
--- /dev/null
+++ b/styles/christmas/dtd/blocks.ent
@@ -0,0 +1,37 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- BLOCKS ENTITY -->
+<!ENTITY % blocks "p|note|ul|ol|table|source|anchor">
+
+<!-- import the external markup.ent dtd -->
+<!ENTITY % markupEntity SYSTEM "markup.ent">
+%markupEntity;
+
+<!ENTITY % content "(#PCDATA|%markup;|%links;)*">
+
+<!ELEMENT p %content;>
+<!ELEMENT note %content;>
+
+<!ELEMENT ul (li|ol|ul)+>
+<!ELEMENT ol (li|ol|ul)+>
+<!ELEMENT li %content;>
+
+<!ELEMENT source (#PCDATA)>
+
+<!ELEMENT table (tr)+>
+
+<!ELEMENT tr (tn|th|td)+>
+
+<!ELEMENT tn EMPTY>
+<!ATTLIST tn colspan CDATA "1"
+ rowspan CDATA "1">
+
+<!ELEMENT th %content;>
+<!ATTLIST th colspan CDATA "1"
+ rowspan CDATA "1">
+
+<!ELEMENT td %content;>
+<!ATTLIST td colspan CDATA "1"
+ rowspan CDATA "1">
+
+<!-- CVS $Revision: 313243 $ $Date: 1999-12-25 09:29:50 +0100 (lör, 25 dec 1999) $ -->
\ No newline at end of file
diff --git a/styles/christmas/dtd/blocks1.ent b/styles/christmas/dtd/blocks1.ent
new file mode 100644
index 0000000..52cff5f
--- /dev/null
+++ b/styles/christmas/dtd/blocks1.ent
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!-- BLOCKS ENTITY -->
+
+<!ENTITY % blocks "p|note|ul|ol|gloss|table|source|anchor">
+
+<!ENTITY % markupEntity SYSTEM "markup1.ent">
+%markupEntity;
+
+<!ENTITY % content "(#PCDATA|%markup;|%links;|p|important)*">
+
+<!ELEMENT p (#PCDATA|%markup;|%links;|note|important)*>
+<!ELEMENT note %content;>
+<!ELEMENT ul (li|ol|ul)+>
+<!ELEMENT ol (li|ol|ul)+>
+<!ELEMENT table (tr)+>
+<!ELEMENT source (#PCDATA)>
+<!ELEMENT gloss (label|item)+>
+
+<!ELEMENT label %content;>
+<!ELEMENT item %content;>
+<!ELEMENT important %content;>
+<!ELEMENT li %content;>
+
+<!ELEMENT tr (tn*,(th|td)+)>
+
+<!ELEMENT tn EMPTY>
+<!ATTLIST tn colspan CDATA "1"
+ rowspan CDATA "1"
+ width CDATA #IMPLIED>
+
+<!ELEMENT th %content;>
+<!ATTLIST th colspan CDATA "1"
+ rowspan CDATA "1"
+ width CDATA #IMPLIED>
+
+<!ELEMENT td %content;>
+<!ATTLIST td colspan CDATA "1"
+ rowspan CDATA "1"
+ width CDATA #IMPLIED>
diff --git a/styles/christmas/dtd/book.dtd b/styles/christmas/dtd/book.dtd
new file mode 100644
index 0000000..0e55cb0
--- /dev/null
+++ b/styles/christmas/dtd/book.dtd
@@ -0,0 +1,47 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- STYLEBOOK BOOK DTD -->
+
+<!-- import the external source-specific dtd -->
+<!ENTITY % externalEntity SYSTEM "sbk:/sources/entities.ent">
+%externalEntity;
+
+<!ELEMENT book (document|hidden|faqs|changes|group|external|separator)+>
+<!ATTLIST book title CDATA #REQUIRED
+ copyright CDATA #IMPLIED>
+
+
+<!ELEMENT document EMPTY>
+<!ATTLIST document id ID #REQUIRED
+ source CDATA #REQUIRED
+ label CDATA #REQUIRED>
+
+<!ELEMENT hidden EMPTY>
+<!ATTLIST hidden id ID #REQUIRED
+ source CDATA #REQUIRED>
+
+<!ELEMENT faqs EMPTY>
+<!ATTLIST faqs id ID #REQUIRED
+ source CDATA #REQUIRED
+ label CDATA #REQUIRED>
+
+<!ELEMENT changes EMPTY>
+<!ATTLIST changes id ID #REQUIRED
+ source CDATA #REQUIRED
+ label CDATA #REQUIRED>
+
+<!ELEMENT group (entry)+>
+<!ATTLIST group id ID #IMPLIED
+ label CDATA #REQUIRED>
+
+<!ELEMENT entry EMPTY>
+<!ATTLIST entry id ID #REQUIRED
+ source CDATA #REQUIRED>
+
+<!ELEMENT external EMPTY>
+<!ATTLIST external label CDATA #REQUIRED
+ href CDATA #REQUIRED>
+
+<!ELEMENT separator EMPTY>
+
+<!-- CVS $Revision: 313243 $ $Date: 1999-12-25 09:29:50 +0100 (lör, 25 dec 1999) $ -->
\ No newline at end of file
diff --git a/styles/christmas/dtd/changes.dtd b/styles/christmas/dtd/changes.dtd
new file mode 100644
index 0000000..c22c022
--- /dev/null
+++ b/styles/christmas/dtd/changes.dtd
@@ -0,0 +1,24 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- STYLEBOOK CHANGES DTD -->
+
+<!-- import the external markup.ent dtd -->
+<!ENTITY % markupEntity SYSTEM "markup.ent">
+%markupEntity;
+
+<!ENTITY % content "(#PCDATA|%markup;|%links;)*">
+
+<!ELEMENT changes (release)+>
+<!ATTLIST changes title CDATA #REQUIRED>
+
+<!ELEMENT release ((features,fixes)|(features)|(fixes))>
+<!ATTLIST release version CDATA #REQUIRED
+ date CDATA #IMPLIED>
+
+<!ELEMENT features (feat)+>
+<!ELEMENT fixes (fix)+>
+
+<!ELEMENT feat %content;>
+<!ELEMENT fix %content;>
+
+<!-- CVS $Revision: 313243 $ $Date: 1999-12-25 09:29:50 +0100 (lör, 25 dec 1999) $ -->
\ No newline at end of file
diff --git a/styles/christmas/dtd/characters.ent b/styles/christmas/dtd/characters.ent
new file mode 100644
index 0000000..db1ed5c
--- /dev/null
+++ b/styles/christmas/dtd/characters.ent
@@ -0,0 +1,297 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- CHARACTERS ENTITY -->
+
+<!-- Latin A -->
+<!ENTITY nbsp " "> <!-- U+00A0 ISOnum - no-break space = non-breaking space -->
+<!ENTITY iexcl "¡"> <!-- U+00A1 ISOnum - inverted exclamation mark -->
+<!ENTITY cent "¢"> <!-- U+00A2 ISOnum - cent sign -->
+<!ENTITY pound "£"> <!-- U+00A3 ISOnum - pound sign -->
+<!ENTITY curren "¤"> <!-- U+00A4 ISOnum - currency sign -->
+<!ENTITY yen "¥"> <!-- U+00A5 ISOnum - yen sign = yuan sign -->
+<!ENTITY brvbar "¦"> <!-- U+00A6 ISOnum - broken bar = broken vertical bar -->
+<!ENTITY sect "§"> <!-- U+00A7 ISOnum - section sign -->
+<!ENTITY uml "¨"> <!-- U+00A8 ISOdia - diaeresis = spacing diaeresis -->
+<!ENTITY copy "©"> <!-- U+00A9 ISOnum - copyright sign -->
+<!ENTITY ordf "ª"> <!-- U+00AA ISOnum - feminine ordinal indicator -->
+<!ENTITY laquo "«"> <!-- U+00AB ISOnum - left-pointing double angle quotation mark = left pointing guillemet -->
+<!ENTITY not "¬"> <!-- U+00AC ISOnum - not sign -->
+<!ENTITY shy ""> <!-- U+00AD ISOnum - soft hyphen = discretionary hyphen -->
+<!ENTITY reg "®"> <!-- U+00AE ISOnum - registered sign = registered trade mark sign -->
+<!ENTITY macr "¯"> <!-- U+00AF ISOdia - macron = spacing macron = overline = APL overbar -->
+<!ENTITY deg "°"> <!-- U+00B0 ISOnum - degree sign -->
+<!ENTITY plusmn "±"> <!-- U+00B1 ISOnum - plus-minus sign = plus-or-minus sign -->
+<!ENTITY sup2 "²"> <!-- U+00B2 ISOnum - superscript two = superscript digit two = squared -->
+<!ENTITY sup3 "³"> <!-- U+00B3 ISOnum - superscript three = superscript digit three = cubed -->
+<!ENTITY acute "´"> <!-- U+00B4 ISOdia - acute accent = spacing acute -->
+<!ENTITY micro "µ"> <!-- U+00B5 ISOnum - micro sign -->
+<!ENTITY para "¶"> <!-- U+00B6 ISOnum - pilcrow sign = paragraph sign -->
+<!ENTITY middot "·"> <!-- U+00B7 ISOnum - middle dot = Georgian comma = Greek middle dot -->
+<!ENTITY cedil "¸"> <!-- U+00B8 ISOdia - cedilla = spacing cedilla -->
+<!ENTITY sup1 "¹"> <!-- U+00B9 ISOnum - superscript one = superscript digit one -->
+<!ENTITY ordm "º"> <!-- U+00BA ISOnum - masculine ordinal indicator -->
+<!ENTITY raquo "»"> <!-- U+00BB ISOnum - right-pointing double angle quotation mark = right pointing guillemet -->
+<!ENTITY frac14 "¼"> <!-- U+00BC ISOnum - vulgar fraction one quarter = fraction one quarter -->
+<!ENTITY frac12 "½"> <!-- U+00BD ISOnum - vulgar fraction one half = fraction one half -->
+<!ENTITY frac34 "¾"> <!-- U+00BE ISOnum - vulgar fraction three quarters = fraction three quarters -->
+<!ENTITY iquest "¿"> <!-- U+00BF ISOnum - inverted question mark = turned question mark -->
+<!ENTITY Agrave "À"> <!-- U+00C0 ISOlat1 - latin capital letter A with grave = latin capital letter A grave -->
+<!ENTITY Aacute "Á"> <!-- U+00C1 ISOlat1 - latin capital letter A with acute -->
+<!ENTITY Acirc "Â"> <!-- U+00C2 ISOlat1 - latin capital letter A with circumflex -->
+<!ENTITY Atilde "Ã"> <!-- U+00C3 ISOlat1 - latin capital letter A with tilde -->
+<!ENTITY Auml "Ä"> <!-- U+00C4 ISOlat1 - latin capital letter A with diaeresis -->
+<!ENTITY Aring "Å"> <!-- U+00C5 ISOlat1 - latin capital letter A with ring above = latin capital letter A ring -->
+<!ENTITY AElig "Æ"> <!-- U+00C6 ISOlat1 - latin capital letter AE = latin capital ligature AE -->
+<!ENTITY Ccedil "Ç"> <!-- U+00C7 ISOlat1 - latin capital letter C with cedilla -->
+<!ENTITY Egrave "È"> <!-- U+00C8 ISOlat1 - latin capital letter E with grave -->
+<!ENTITY Eacute "É"> <!-- U+00C9 ISOlat1 - latin capital letter E with acute -->
+<!ENTITY Ecirc "Ê"> <!-- U+00CA ISOlat1 - latin capital letter E with circumflex -->
+<!ENTITY Euml "Ë"> <!-- U+00CB ISOlat1 - latin capital letter E with diaeresis -->
+<!ENTITY Igrave "Ì"> <!-- U+00CC ISOlat1 - latin capital letter I with grave -->
+<!ENTITY Iacute "Í"> <!-- U+00CD ISOlat1 - latin capital letter I with acute -->
+<!ENTITY Icirc "Î"> <!-- U+00CE ISOlat1 - latin capital letter I with circumflex -->
+<!ENTITY Iuml "Ï"> <!-- U+00CF ISOlat1 - latin capital letter I with diaeresis -->
+<!ENTITY ETH "Ð"> <!-- U+00D0 ISOlat1 - latin capital letter ETH -->
+<!ENTITY Ntilde "Ñ"> <!-- U+00D1 ISOlat1 - latin capital letter N with tilde -->
+<!ENTITY Ograve "Ò"> <!-- U+00D2 ISOlat1 - latin capital letter O with grave -->
+<!ENTITY Oacute "Ó"> <!-- U+00D3 ISOlat1 - latin capital letter O with acute -->
+<!ENTITY Ocirc "Ô"> <!-- U+00D4 ISOlat1 - latin capital letter O with circumflex -->
+<!ENTITY Otilde "Õ"> <!-- U+00D5 ISOlat1 - latin capital letter O with tilde -->
+<!ENTITY Ouml "Ö"> <!-- U+00D6 ISOlat1 - latin capital letter O with diaeresis -->
+<!ENTITY times "×"> <!-- U+00D7 ISOnum - multiplication sign -->
+<!ENTITY Oslash "Ø"> <!-- U+00D8 ISOlat1 - latin capital letter O with stroke = latin capital letter O slash -->
+<!ENTITY Ugrave "Ù"> <!-- U+00D9 ISOlat1 - latin capital letter U with grave -->
+<!ENTITY Uacute "Ú"> <!-- U+00DA ISOlat1 - latin capital letter U with acute -->
+<!ENTITY Ucirc "Û"> <!-- U+00DB ISOlat1 - latin capital letter U with circumflex -->
+<!ENTITY Uuml "Ü"> <!-- U+00DC ISOlat1 - latin capital letter U with diaeresis -->
+<!ENTITY Yacute "Ý"> <!-- U+00DD ISOlat1 - latin capital letter Y with acute -->
+<!ENTITY THORN "Þ"> <!-- U+00DE ISOlat1 - latin capital letter THORN -->
+<!ENTITY szlig "ß"> <!-- U+00DF ISOlat1 - latin small letter sharp s = ess-zed -->
+<!ENTITY agrave "à"> <!-- U+00E0 ISOlat1 - latin small letter a with grave = latin small letter a grave -->
+<!ENTITY aacute "á"> <!-- U+00E1 ISOlat1 - latin small letter a with acute -->
+<!ENTITY acirc "â"> <!-- U+00E2 ISOlat1 - latin small letter a with circumflex -->
+<!ENTITY atilde "ã"> <!-- U+00E3 ISOlat1 - latin small letter a with tilde -->
+<!ENTITY auml "ä"> <!-- U+00E4 ISOlat1 - latin small letter a with diaeresis -->
+<!ENTITY aring "å"> <!-- U+00E5 ISOlat1 - latin small letter a with ring above = latin small letter a ring -->
+<!ENTITY aelig "æ"> <!-- U+00E6 ISOlat1 - latin small letter ae = latin small ligature ae -->
+<!ENTITY ccedil "ç"> <!-- U+00E7 ISOlat1 - latin small letter c with cedilla -->
+<!ENTITY egrave "è"> <!-- U+00E8 ISOlat1 - latin small letter e with grave -->
+<!ENTITY eacute "é"> <!-- U+00E9 ISOlat1 - latin small letter e with acute -->
+<!ENTITY ecirc "ê"> <!-- U+00EA ISOlat1 - latin small letter e with circumflex -->
+<!ENTITY euml "ë"> <!-- U+00EB ISOlat1 - latin small letter e with diaeresis -->
+<!ENTITY igrave "ì"> <!-- U+00EC ISOlat1 - latin small letter i with grave -->
+<!ENTITY iacute "í"> <!-- U+00ED ISOlat1 - latin small letter i with acute -->
+<!ENTITY icirc "î"> <!-- U+00EE ISOlat1 - latin small letter i with circumflex -->
+<!ENTITY iuml "ï"> <!-- U+00EF ISOlat1 - latin small letter i with diaeresis -->
+<!ENTITY eth "ð"> <!-- U+00F0 ISOlat1 - latin small letter eth -->
+<!ENTITY ntilde "ñ"> <!-- U+00F1 ISOlat1 - latin small letter n with tilde -->
+<!ENTITY ograve "ò"> <!-- U+00F2 ISOlat1 - latin small letter o with grave -->
+<!ENTITY oacute "ó"> <!-- U+00F3 ISOlat1 - latin small letter o with acute -->
+<!ENTITY ocirc "ô"> <!-- U+00F4 ISOlat1 - latin small letter o with circumflex -->
+<!ENTITY otilde "õ"> <!-- U+00F5 ISOlat1 - latin small letter o with tilde -->
+<!ENTITY ouml "ö"> <!-- U+00F6 ISOlat1 - latin small letter o with diaeresis -->
+<!ENTITY divide "÷"> <!-- U+00F7 ISOnum - division sign -->
+<!ENTITY oslash "ø"> <!-- U+00F8 ISOlat1 - latin small letter o with stroke = latin small letter o slash -->
+<!ENTITY ugrave "ù"> <!-- U+00F9 ISOlat1 - latin small letter u with grave -->
+<!ENTITY uacute "ú"> <!-- U+00FA ISOlat1 - latin small letter u with acute -->
+<!ENTITY ucirc "û"> <!-- U+00FB ISOlat1 - latin small letter u with circumflex -->
+<!ENTITY uuml "ü"> <!-- U+00FC ISOlat1 - latin small letter u with diaeresis -->
+<!ENTITY yacute "ý"> <!-- U+00FD ISOlat1 - latin small letter y with acute -->
+<!ENTITY thorn "þ"> <!-- U+00FE ISOlat1 - latin small letter thorn -->
+<!ENTITY yuml "ÿ"> <!-- U+00FF ISOlat1 - latin small letter y with diaeresis -->
+
+
+<!-- C0 Controls and Basic Latin -->
+<!ENTITY quot """> <!-- U+0022 ISOnum - quotation mark = APL quote -->
+<!ENTITY amp "&"> <!-- U+0026 ISOnum - ampersand -->
+<!ENTITY lt "<"> <!-- U+003C ISOnum - less-than sign -->
+<!ENTITY gt ">"> <!-- U+003E ISOnum - greater-than sign -->
+
+<!-- Latin Extended-A -->
+<!ENTITY OElig "Œ"> <!-- U+0152 ISOlat2 - latin capital ligature OE -->
+<!ENTITY oelig "œ"> <!-- U+0153 ISOlat2 - latin small ligature oe -->
+
+<!-- ligature is a misnomer, this is a separate character in some languages -->
+<!ENTITY Scaron "Š"> <!-- U+0160 ISOlat2 - latin capital letter S with caron -->
+<!ENTITY scaron "š"> <!-- U+0161 ISOlat2 - latin small letter s with caron -->
+<!ENTITY Yuml "Ÿ"> <!-- U+0178 ISOlat2 - latin capital letter Y with diaeresis -->
+
+<!-- Spacing Modifier Letters -->
+<!ENTITY circ "ˆ" > <!-- U+02C6 ISOpub - modifier letter circumflex accent -->
+<!ENTITY tilde "˜" > <!-- U+02DC ISOdia - small tilde -->
+
+<!-- General Punctuation -->
+<!ENTITY ensp " "> <!-- U+2002 ISOpub - en space -->
+<!ENTITY emsp " "> <!-- U+2003 ISOpub - em space -->
+<!ENTITY thinsp " "> <!-- U+2009 ISOpub - thin space -->
+<!ENTITY zwnj ""> <!-- U+200C RFC 2070 - zero width non-joiner -->
+<!ENTITY zwj ""> <!-- U+200D RFC 2070 - zero width joiner -->
+<!ENTITY lrm ""> <!-- U+200E RFC 2070 - left-to-right mark -->
+<!ENTITY rlm ""> <!-- U+200F RFC 2070 - right-to-left mark -->
+<!ENTITY ndash "–"> <!-- U+2013 ISOpub - en dash -->
+<!ENTITY mdash "—"> <!-- U+2014 ISOpub - em dash -->
+<!ENTITY lsquo "‘"> <!-- U+2018 ISOnum - left single quotation mark -->
+<!ENTITY rsquo "’"> <!-- U+2019 ISOnum - right single quotation mark -->
+<!ENTITY sbquo "‚"> <!-- U+201A NEW - single low-9 quotation mark -->
+<!ENTITY ldquo "“"> <!-- U+201C ISOnum - left double quotation mark -->
+<!ENTITY rdquo "”"> <!-- U+201D ISOnum - right double quotation mark, -->
+<!ENTITY bdquo "„"> <!-- U+201E NEW - double low-9 quotation mark -->
+<!ENTITY dagger "†"> <!-- U+2020 ISOpub - dagger -->
+<!ENTITY Dagger "‡"> <!-- U+2021 ISOpub - double dagger -->
+<!ENTITY permil "‰"> <!-- U+2030 ISOtech - per mille sign -->
+<!ENTITY lsaquo "‹"> <!-- U+2039 ISO prop. - single left-pointing angle quotation mark -->
+
+<!-- lsaquo is proposed but not yet ISO standardized -->
+<!ENTITY rsaquo "›"> <!-- U+203A ISO prop. - single right-pointing angle quotation mark -->
+
+<!-- rsaquo is proposed but not yet ISO standardized -->
+<!ENTITY euro "€"> <!-- U+20AC NEW - euro sign -->
+
+<!-- Latin Extended-B -->
+<!ENTITY fnof "ƒ"> <!-- U+0192 ISOtech - latin small f with hook = function = florin -->
+
+<!-- Greek -->
+<!ENTITY Alpha "Α"> <!-- U+0391 - greek capital letter alpha -->
+<!ENTITY Beta "Β"> <!-- U+0392 - greek capital letter beta -->
+<!ENTITY Gamma "Γ"> <!-- U+0393 ISOgrk3 - greek capital letter gamma -->
+<!ENTITY Delta "Δ"> <!-- U+0394 ISOgrk3 - greek capital letter delta -->
+<!ENTITY Epsilon "Ε"> <!-- U+0395 - greek capital letter epsilon -->
+<!ENTITY Zeta "Ζ"> <!-- U+0396 - greek capital letter zeta -->
+<!ENTITY Eta "Η"> <!-- U+0397 - greek capital letter eta -->
+<!ENTITY Theta "Θ"> <!-- U+0398 ISOgrk3 - greek capital letter theta -->
+<!ENTITY Iota "Ι"> <!-- U+0399 - greek capital letter iota -->
+<!ENTITY Kappa "Κ"> <!-- U+039A - greek capital letter kappa -->
+<!ENTITY Lambda "Λ"> <!-- U+039B ISOgrk3 - greek capital letter lambda -->
+<!ENTITY Mu "Μ"> <!-- U+039C - greek capital letter mu -->
+<!ENTITY Nu "Ν"> <!-- U+039D - greek capital letter nu -->
+<!ENTITY Xi "Ξ"> <!-- U+039E ISOgrk3 - greek capital letter xi -->
+<!ENTITY Omicron "Ο"> <!-- U+039F - greek capital letter omicron -->
+<!ENTITY Pi "Π"> <!-- U+03A0 ISOgrk3 - greek capital letter pi -->
+<!ENTITY Rho "Ρ"> <!-- U+03A1 - greek capital letter rho -->
+<!ENTITY Sigma "Σ"> <!-- U+03A3 ISOgrk3 - greek capital letter sigma -->
+<!ENTITY Tau "Τ"> <!-- U+03A4 - greek capital letter tau -->
+<!ENTITY Upsilon "Υ"> <!-- U+03A5 ISOgrk3 - greek capital letter upsilon -->
+<!ENTITY Phi "Φ"> <!-- U+03A6 ISOgrk3 - greek capital letter phi -->
+<!ENTITY Chi "Χ"> <!-- U+03A7 - greek capital letter chi -->
+<!ENTITY Psi "Ψ"> <!-- U+03A8 ISOgrk3 - greek capital letter psi -->
+<!ENTITY Omega "Ω"> <!-- U+03A9 ISOgrk3 - greek capital letter omega -->
+<!ENTITY alpha "α"> <!-- U+03B1 ISOgrk3 - greek small letter alpha -->
+<!ENTITY beta "β"> <!-- U+03B2 ISOgrk3 - greek small letter beta -->
+<!ENTITY gamma "γ"> <!-- U+03B3 ISOgrk3 - greek small letter gamma -->
+<!ENTITY delta "δ"> <!-- U+03B4 ISOgrk3 - greek small letter delta -->
+<!ENTITY epsilon "ε"> <!-- U+03B5 ISOgrk3 - greek small letter epsilon -->
+<!ENTITY zeta "ζ"> <!-- U+03B6 ISOgrk3 - greek small letter zeta -->
+<!ENTITY eta "η"> <!-- U+03B7 ISOgrk3 - greek small letter eta -->
+<!ENTITY theta "θ"> <!-- U+03B8 ISOgrk3 - greek small letter theta -->
+<!ENTITY iota "ι"> <!-- U+03B9 ISOgrk3 - greek small letter iota -->
+<!ENTITY kappa "κ"> <!-- U+03BA ISOgrk3 - greek small letter kappa -->
+<!ENTITY lambda "λ"> <!-- U+03BB ISOgrk3 - greek small letter lambda -->
+<!ENTITY mu "μ"> <!-- U+03BC ISOgrk3 - greek small letter mu -->
+<!ENTITY nu "ν"> <!-- U+03BD ISOgrk3 - greek small letter nu -->
+<!ENTITY xi "ξ"> <!-- U+03BE ISOgrk3 - greek small letter xi -->
+<!ENTITY omicron "ο"> <!-- U+03BF NEW - greek small letter omicron -->
+<!ENTITY pi "π"> <!-- U+03C0 ISOgrk3 - greek small letter pi -->
+<!ENTITY rho "ρ"> <!-- U+03C1 ISOgrk3 - greek small letter rho -->
+<!ENTITY sigmaf "ς"> <!-- U+03C2 ISOgrk3 - greek small letter final sigma -->
+<!ENTITY sigma "σ"> <!-- U+03C3 ISOgrk3 - greek small letter sigma -->
+<!ENTITY tau "τ"> <!-- U+03C4 ISOgrk3 - greek small letter tau -->
+<!ENTITY upsilon "υ"> <!-- U+03C5 ISOgrk3 - greek small letter upsilon -->
+<!ENTITY phi "φ"> <!-- U+03C6 ISOgrk3 - greek small letter phi -->
+<!ENTITY chi "χ"> <!-- U+03C7 ISOgrk3 - greek small letter chi -->
+<!ENTITY psi "ψ"> <!-- U+03C8 ISOgrk3 - greek small letter psi -->
+<!ENTITY omega "ω"> <!-- U+03C9 ISOgrk3 - greek small letter omega -->
+<!ENTITY thetasym "ϑ"> <!-- U+03D1 NEW - greek small letter theta symbol -->
+<!ENTITY upsih "ϒ"> <!-- U+03D2 NEW - greek upsilon with hook symbol -->
+<!ENTITY piv "ϖ"> <!-- U+03D6 ISOgrk3 - greek pi symbol -->
+
+<!-- General Punctuation -->
+<!ENTITY bull "•"> <!-- U+2022 ISOpub - bullet = black small circle -->
+<!ENTITY hellip "…"> <!-- U+2026 ISOpub - horizontal ellipsis = three dot leader -->
+<!ENTITY prime "′"> <!-- U+2032 ISOtech - prime = minutes = feet -->
+<!ENTITY Prime "″"> <!-- U+2033 ISOtech - double prime = seconds = inches -->
+<!ENTITY oline "‾"> <!-- U+203E NEW - overline = spacing overscore -->
+<!ENTITY frasl "⁄"> <!-- U+2044 NEW - fraction slash -->
+
+<!-- Letterlike Symbols -->
+<!ENTITY weierp "℘"> <!-- U+2118 ISOamso - script capital P = power set = Weierstrass p -->
+<!ENTITY image "ℑ"> <!-- U+2111 ISOamso - blackletter capital I = imaginary part -->
+<!ENTITY real "ℜ"> <!-- U+211C ISOamso - blackletter capital R = real part symbol -->
+<!ENTITY trade "™"> <!-- U+2122 ISOnum - trade mark sign -->
+<!ENTITY alefsym "ℵ"> <!-- U+2135 NEW - alef symbol = first transfinite cardinal -->
+
+<!-- Arrows -->
+<!ENTITY larr "←"> <!-- U+2190 ISOnum - leftwards arrow -->
+<!ENTITY uarr "↑"> <!-- U+2191 ISOnum - upwards arrow -->
+<!ENTITY rarr "→"> <!-- U+2192 ISOnum - rightwards arrow -->
+<!ENTITY darr "↓"> <!-- U+2193 ISOnum - downwards arrow -->
+<!ENTITY harr "↔"> <!-- U+2194 ISOamsa - left right arrow -->
+<!ENTITY crarr "↵"> <!-- U+21B5 NEW - downwards arrow with corner leftwards = carriage return -->
+<!ENTITY lArr "⇐"> <!-- U+21D0 ISOtech - leftwards double arrow -->
+<!ENTITY uArr "⇑"> <!-- U+21D1 ISOamsa - upwards double arrow -->
+<!ENTITY rArr "⇒"> <!-- U+21D2 ISOtech - rightwards double arrow -->
+<!ENTITY dArr "⇓"> <!-- U+21D3 ISOamsa - downwards double arrow -->
+<!ENTITY hArr "⇔"> <!-- U+21D4 ISOamsa - left right double arrow -->
+
+<!-- Mathematical Operators -->
+<!ENTITY forall "∀"> <!-- U+2200 ISOtech - for all -->
+<!ENTITY part "∂"> <!-- U+2202 ISOtech - partial differential -->
+<!ENTITY exist "∃"> <!-- U+2203 ISOtech - there exists -->
+<!ENTITY empty "∅"> <!-- U+2205 ISOamso - empty set = null set = diameter -->
+<!ENTITY nabla "∇"> <!-- U+2207 ISOtech - nabla = backward difference -->
+<!ENTITY isin "∈"> <!-- U+2208 ISOtech - element of -->
+<!ENTITY notin "∉"> <!-- U+2209 ISOtech - not an element of -->
+<!ENTITY ni "∋"> <!-- U+220B ISOtech - contains as member -->
+<!ENTITY prod "∏"> <!-- U+220F ISOamsb - n-ary product = product sign -->
+<!ENTITY sum "∑"> <!-- U+2211 ISOamsb - n-ary sumation -->
+<!ENTITY minus "−"> <!-- U+2212 ISOtech - minus sign -->
+<!ENTITY lowast "∗"> <!-- U+2217 ISOtech - asterisk operator -->
+<!ENTITY radic "√"> <!-- U+221A ISOtech - square root = radical sign -->
+<!ENTITY prop "∝"> <!-- U+221D ISOtech - proportional to -->
+<!ENTITY infin "∞"> <!-- U+221E ISOtech - infinity -->
+<!ENTITY ang "∠"> <!-- U+2220 ISOamso - angle -->
+<!ENTITY and "∧"> <!-- U+2227 ISOtech - logical and = wedge -->
+<!ENTITY or "∨"> <!-- U+2228 ISOtech - logical or = vee -->
+<!ENTITY cap "∩"> <!-- U+2229 ISOtech - intersection = cap -->
+<!ENTITY cup "∪"> <!-- U+222A ISOtech - union = cup -->
+<!ENTITY int "∫"> <!-- U+222B ISOtech - integral -->
+<!ENTITY there4 "∴"> <!-- U+2234 ISOtech - therefore -->
+<!ENTITY sim "∼"> <!-- U+223C ISOtech - tilde operator = varies with = similar to -->
+<!ENTITY cong "≅"> <!-- U+2245 ISOtech - approximately equal to -->
+<!ENTITY asymp "≈"> <!-- U+2248 ISOamsr - almost equal to = asymptotic to -->
+<!ENTITY ne "≠"> <!-- U+2260 ISOtech - not equal to -->
+<!ENTITY equiv "≡"> <!-- U+2261 ISOtech - identical to -->
+<!ENTITY le "≤"> <!-- U+2264 ISOtech - less-than or equal to -->
+<!ENTITY ge "≥"> <!-- U+2265 ISOtech - greater-than or equal to -->
+<!ENTITY sub "⊂"> <!-- U+2282 ISOtech - subset of -->
+<!ENTITY sup "⊃"> <!-- U+2283 ISOtech - superset of -->
+<!ENTITY nsub "⊄"> <!-- U+2284 ISOamsn - not a subset of -->
+<!ENTITY sube "⊆"> <!-- U+2286 ISOtech - subset of or equal to -->
+<!ENTITY supe "⊇"> <!-- U+2287 ISOtech - superset of or equal to -->
+<!ENTITY oplus "⊕"> <!-- U+2295 ISOamsb - circled plus = direct sum -->
+<!ENTITY otimes "⊗"> <!-- U+2297 ISOamsb - circled times = vector product -->
+<!ENTITY perp "⊥"> <!-- U+22A5 ISOtech - up tack = orthogonal to = perpendicular -->
+<!ENTITY sdot "⋅"> <!-- U+22C5 ISOamsb - dot operator -->
+
+<!-- Miscellaneous Technical -->
+<!ENTITY lceil "⌈"> <!-- U+2308 ISOamsc - left ceiling = apl upstile -->
+<!ENTITY rceil "⌉"> <!-- U+2309 ISOamsc - right ceiling -->
+<!ENTITY lfloor "⌊"> <!-- U+230A ISOamsc - left floor = apl downstile -->
+<!ENTITY rfloor "⌋"> <!-- U+230B ISOamsc - right floor -->
+<!ENTITY lang "〈"> <!-- U+2329 ISOtech - left-pointing angle bracket = bra -->
+<!ENTITY rang "〉"> <!-- U+232A ISOtech - right-pointing angle bracket = ket -->
+
+<!-- Geometric Shapes -->
+<!ENTITY loz "◊"> <!-- U+25CA ISOpub - lozenge -->
+
+<!-- Miscellaneous Symbols -->
+<!ENTITY spades "♠"> <!-- U+2660 ISOpub - black spade suit -->
+<!ENTITY clubs "♣"> <!-- U+2663 ISOpub - black club suit = shamrock -->
+<!ENTITY hearts "♥"> <!-- U+2665 ISOpub - black heart suit = valentine -->
+<!ENTITY diams "♦"> <!-- U+2666 ISOpub - black diamond suit -->
+
+<!-- CVS $Revision: 313243 $ $Date: 1999-12-25 09:29:50 +0100 (lör, 25 dec 1999) $ -->
+
+<!-- Portions (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies. -->
diff --git a/styles/christmas/dtd/document.dtd b/styles/christmas/dtd/document.dtd
new file mode 100644
index 0000000..fdb0de2
--- /dev/null
+++ b/styles/christmas/dtd/document.dtd
@@ -0,0 +1,19 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- STYLEBOOK DOCUMENT DTD -->
+
+<!-- import the external blocks.ent dtd -->
+<!ENTITY % blocksEntity SYSTEM "blocks.ent">
+%blocksEntity;
+
+<!ELEMENT s1 (s2|%blocks;)*>
+<!ELEMENT s2 (s3|%blocks;)*>
+<!ELEMENT s3 (s4|%blocks;)*>
+<!ELEMENT s4 (%blocks;)*>
+
+<!ATTLIST s1 title CDATA #REQUIRED>
+<!ATTLIST s2 title CDATA #REQUIRED>
+<!ATTLIST s3 title CDATA #REQUIRED>
+<!ATTLIST s4 title CDATA #REQUIRED>
+
+<!-- CVS $Revision: 313243 $ $Date: 1999-12-25 09:29:50 +0100 (lör, 25 dec 1999) $ -->
\ No newline at end of file
diff --git a/styles/christmas/dtd/document1.dtd b/styles/christmas/dtd/document1.dtd
new file mode 100644
index 0000000..e92c486
--- /dev/null
+++ b/styles/christmas/dtd/document1.dtd
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!ENTITY xslt4j "Xalan-Java">
+<!ENTITY xml4j "Xerces-Java">
+<!ENTITY xslt4c "Xalan-C++">
+<!ENTITY xml4c "Xerces-C++">
+<!ENTITY resources SYSTEM "sbk:/sources/xalan/resources.xml">
+<!ENTITY done SYSTEM "DONE">
+<!ENTITY status SYSTEM "STATUS">
+<!ENTITY bugs SYSTEM "BUGS">
+
+<!ENTITY % blocksEntity SYSTEM "blocks1.ent">
+%blocksEntity;
+
+
+<!ELEMENT s1 (resources?,(s2|%blocks;)*)*>
+<!ELEMENT s2 (s3|%blocks;)*>
+<!ELEMENT s3 (s4|%blocks;)*>
+<!ELEMENT s4 (%blocks;)*>
+
+
+<!ATTLIST s1 title CDATA #REQUIRED>
+<!ATTLIST s2 title CDATA #REQUIRED>
+<!ATTLIST s3 title CDATA #REQUIRED>
+<!ATTLIST s4 title CDATA #REQUIRED>
+
+<!ELEMENT resources (resource|human-resource)+>
+<!ELEMENT resource EMPTY>
+<!ATTLIST resource id ID #IMPLIED
+ name CDATA #IMPLIED
+ long-title CDATA #IMPLIED
+ name-is-abrev CDATA #IMPLIED
+ location CDATA #IMPLIED>
+<!ELEMENT human-resource (#PCDATA)>
+<!ATTLIST human-resource id ID #IMPLIED
+ name CDATA #IMPLIED
+ short-name CDATA #IMPLIED
+ mailto CDATA #IMPLIED>
+
+
diff --git a/styles/christmas/dtd/faqs.dtd b/styles/christmas/dtd/faqs.dtd
new file mode 100644
index 0000000..9138e22
--- /dev/null
+++ b/styles/christmas/dtd/faqs.dtd
@@ -0,0 +1,19 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- STYLEBOOK FAQS DTD -->
+
+<!-- import the external blocks.ent dtd -->
+<!ENTITY % blocksEntity SYSTEM "blocks.ent">
+%blocksEntity;
+
+<!ELEMENT faqs (faq)+>
+<!ATTLIST faqs title CDATA #REQUIRED>
+
+<!ELEMENT faq (q,a)>
+<!ATTLIST faq title CDATA #IMPLIED>
+
+
+<!ELEMENT q (#PCDATA)>
+<!ELEMENT a (%blocks;)+>
+
+<!-- CVS $Revision: 313243 $ $Date: 1999-12-25 09:29:50 +0100 (lör, 25 dec 1999) $ -->
\ No newline at end of file
diff --git a/styles/christmas/dtd/links.ent b/styles/christmas/dtd/links.ent
new file mode 100644
index 0000000..793c256
--- /dev/null
+++ b/styles/christmas/dtd/links.ent
@@ -0,0 +1,20 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- LINKS ENTITY -->
+<!ENTITY % links "link|anchor|jump|img">
+
+<!ELEMENT anchor EMPTY>
+<!ATTLIST anchor name NMTOKEN #REQUIRED>
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img src CDATA #REQUIRED
+ alt CDATA #REQUIRED>
+
+<!ELEMENT link (#PCDATA|img)*>
+<!ATTLIST link idref NMTOKEN #IMPLIED
+ anchor CDATA #IMPLIED>
+
+<!ELEMENT jump (#PCDATA|img)*>
+<!ATTLIST jump href CDATA #REQUIRED>
+
+<!-- CVS $Revision: 313243 $ $Date: 1999-12-25 09:29:50 +0100 (lör, 25 dec 1999) $ -->
\ No newline at end of file
diff --git a/styles/christmas/dtd/links1.ent b/styles/christmas/dtd/links1.ent
new file mode 100644
index 0000000..efe4ea0
--- /dev/null
+++ b/styles/christmas/dtd/links1.ent
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!-- LINKS ENTITY -->
+
+<!ENTITY % links "link|anchor|jump|img|section-ref|resource-ref|human-resource-ref">
+
+<!ELEMENT anchor EMPTY>
+<!ATTLIST anchor id NMTOKEN #REQUIRED>
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img src CDATA #REQUIRED>
+
+<!ELEMENT link (#PCDATA|img)*>
+<!ATTLIST link idref CDATA #REQUIRED
+ anchor CDATA #IMPLIED
+ target CDATA "_self">
+
+<!ELEMENT jump (#PCDATA|img)*>
+<!ATTLIST jump href CDATA #REQUIRED>
+
+<!-- cross-reference elements -->
+<!ELEMENT section-ref EMPTY>
+<!ATTLIST section-ref idref IDREF #REQUIRED>
+<!ELEMENT resource-ref EMPTY>
+<!ATTLIST resource-ref idref IDREF #REQUIRED
+ use-short CDATA #IMPLIED>
+<!ELEMENT human-resource-ref EMPTY>
+<!ATTLIST human-resource-ref idref IDREF #REQUIRED>
+
diff --git a/styles/christmas/dtd/markup.ent b/styles/christmas/dtd/markup.ent
new file mode 100644
index 0000000..7cf6154
--- /dev/null
+++ b/styles/christmas/dtd/markup.ent
@@ -0,0 +1,21 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- MARKUP ENTITY -->
+<!ENTITY % markup "em|ref|code|br">
+
+<!-- import the external source-specific dtd -->
+<!ENTITY % externalEntity SYSTEM "sbk:/sources/entities.ent">
+%externalEntity;
+<!-- import the external charecters.ent dtd -->
+<!ENTITY % charEntity SYSTEM "characters.ent">
+%charEntity;
+<!-- import the external links.ent dtd -->
+<!ENTITY % linksEntity SYSTEM "links.ent">
+%linksEntity;
+
+<!ELEMENT em (#PCDATA|%links;)*>
+<!ELEMENT ref (#PCDATA|%links;)*>
+<!ELEMENT code (#PCDATA|%links;)*>
+<!ELEMENT br EMPTY>
+
+<!-- CVS $Revision: 313243 $ $Date: 1999-12-25 09:29:50 +0100 (lör, 25 dec 1999) $ -->
\ No newline at end of file
diff --git a/styles/christmas/dtd/markup1.ent b/styles/christmas/dtd/markup1.ent
new file mode 100644
index 0000000..74d24c1
--- /dev/null
+++ b/styles/christmas/dtd/markup1.ent
@@ -0,0 +1,21 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- MARKUP ENTITY -->
+<!ENTITY % markup "em|ref|code|br">
+
+<!-- import the external source-specific dtd -->
+<!ENTITY % externalEntity SYSTEM "sbk:/sources/entities.ent">
+%externalEntity;
+<!-- import the external charecters.ent dtd -->
+<!ENTITY % charEntity SYSTEM "characters.ent">
+%charEntity;
+<!-- import the external links.ent dtd -->
+<!ENTITY % linksEntity SYSTEM "links1.ent">
+%linksEntity;
+
+<!ELEMENT em (#PCDATA|%links;)*>
+<!ELEMENT ref (#PCDATA|%links;)*>
+<!ELEMENT code (#PCDATA|%links;)*>
+<!ELEMENT br EMPTY>
+
+<!-- CVS $Revision: 313246 $ $Date: 1999-12-28 23:12:57 +0100 (tis, 28 dec 1999) $ -->
\ No newline at end of file
diff --git a/styles/christmas/graphics/label-1.gif b/styles/christmas/graphics/label-1.gif
new file mode 100644
index 0000000..98ac7e3
Binary files /dev/null and b/styles/christmas/graphics/label-1.gif differ
diff --git a/styles/christmas/graphics/label-2.gif b/styles/christmas/graphics/label-2.gif
new file mode 100644
index 0000000..1a8dba1
Binary files /dev/null and b/styles/christmas/graphics/label-2.gif differ
diff --git a/styles/christmas/graphics/label-3.gif b/styles/christmas/graphics/label-3.gif
new file mode 100644
index 0000000..d29f2c1
Binary files /dev/null and b/styles/christmas/graphics/label-3.gif differ
diff --git a/styles/christmas/loader.xml b/styles/christmas/loader.xml
new file mode 100644
index 0000000..5937900
--- /dev/null
+++ b/styles/christmas/loader.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+
+<!-- CVS $Revision: 313243 $ $Date: 1999-12-25 09:29:50 +0100 (lör, 25 dec 1999) $ -->
+
+<loader>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/book2project.xsl"/>
+ </processor>
+</loader>
diff --git a/styles/christmas/loader1.xml b/styles/christmas/loader1.xml
new file mode 100644
index 0000000..6d99c64
--- /dev/null
+++ b/styles/christmas/loader1.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+
+<!-- CVS $Revision: 313247 $ $Date: 1999-12-28 23:13:31 +0100 (tis, 28 dec 1999) $ -->
+
+<loader>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/book2project1.xsl"/>
+ </processor>
+</loader>
diff --git a/styles/christmas/resources/green-bar-1.gif b/styles/christmas/resources/green-bar-1.gif
new file mode 100644
index 0000000..cb6f509
Binary files /dev/null and b/styles/christmas/resources/green-bar-1.gif differ
diff --git a/styles/christmas/resources/green-bar-2.gif b/styles/christmas/resources/green-bar-2.gif
new file mode 100644
index 0000000..1a77881
Binary files /dev/null and b/styles/christmas/resources/green-bar-2.gif differ
diff --git a/styles/christmas/resources/green-bar.gif b/styles/christmas/resources/green-bar.gif
new file mode 100644
index 0000000..cd65efc
Binary files /dev/null and b/styles/christmas/resources/green-bar.gif differ
diff --git a/styles/christmas/resources/green-hi.gif b/styles/christmas/resources/green-hi.gif
new file mode 100644
index 0000000..9641ea1
Binary files /dev/null and b/styles/christmas/resources/green-hi.gif differ
diff --git a/styles/christmas/resources/green-lo.gif b/styles/christmas/resources/green-lo.gif
new file mode 100644
index 0000000..1d0c7aa
Binary files /dev/null and b/styles/christmas/resources/green-lo.gif differ
diff --git a/styles/christmas/resources/logo-1.gif b/styles/christmas/resources/logo-1.gif
new file mode 100644
index 0000000..ad7119a
Binary files /dev/null and b/styles/christmas/resources/logo-1.gif differ
diff --git a/styles/christmas/resources/logo-2.gif b/styles/christmas/resources/logo-2.gif
new file mode 100644
index 0000000..c524eec
Binary files /dev/null and b/styles/christmas/resources/logo-2.gif differ
diff --git a/styles/christmas/resources/logo-3.gif b/styles/christmas/resources/logo-3.gif
new file mode 100644
index 0000000..645902d
Binary files /dev/null and b/styles/christmas/resources/logo-3.gif differ
diff --git a/styles/christmas/resources/note.gif b/styles/christmas/resources/note.gif
new file mode 100644
index 0000000..3394222
Binary files /dev/null and b/styles/christmas/resources/note.gif differ
diff --git a/styles/christmas/resources/red-hi.gif b/styles/christmas/resources/red-hi.gif
new file mode 100644
index 0000000..4128eab
Binary files /dev/null and b/styles/christmas/resources/red-hi.gif differ
diff --git a/styles/christmas/resources/red-lo.gif b/styles/christmas/resources/red-lo.gif
new file mode 100644
index 0000000..75eb812
Binary files /dev/null and b/styles/christmas/resources/red-lo.gif differ
diff --git a/styles/christmas/resources/script.js b/styles/christmas/resources/script.js
new file mode 100644
index 0000000..1bf24c7
--- /dev/null
+++ b/styles/christmas/resources/script.js
@@ -0,0 +1,17 @@
+rolloverImagesOn=new Array();
+rolloverImagesOff=new Array();
+
+function rolloverOn(name) {
+ document.images[name].src=rolloverImagesOn[name].src;
+}
+
+function rolloverOff(name) {
+ document.images[name].src=rolloverImagesOff[name].src;
+}
+
+function rolloverLoad(name,on,off) {
+ rolloverImagesOn[name]=new Image();
+ rolloverImagesOn[name].src=on;
+ rolloverImagesOff[name]=new Image();
+ rolloverImagesOff[name].src=off;
+}
diff --git a/styles/christmas/resources/separator.gif b/styles/christmas/resources/separator.gif
new file mode 100644
index 0000000..83e8ea1
Binary files /dev/null and b/styles/christmas/resources/separator.gif differ
diff --git a/styles/christmas/resources/void.gif b/styles/christmas/resources/void.gif
new file mode 100644
index 0000000..75b945d
Binary files /dev/null and b/styles/christmas/resources/void.gif differ
diff --git a/styles/christmas/resources/www.apache.org.gif b/styles/christmas/resources/www.apache.org.gif
new file mode 100644
index 0000000..31e3a35
Binary files /dev/null and b/styles/christmas/resources/www.apache.org.gif differ
diff --git a/styles/christmas/resources/www.w3.org.gif b/styles/christmas/resources/www.w3.org.gif
new file mode 100644
index 0000000..3ecc0e2
Binary files /dev/null and b/styles/christmas/resources/www.w3.org.gif differ
diff --git a/styles/christmas/resources/www.xml.org.gif b/styles/christmas/resources/www.xml.org.gif
new file mode 100644
index 0000000..beb94be
Binary files /dev/null and b/styles/christmas/resources/www.xml.org.gif differ
diff --git a/styles/christmas/resources/xml.apache.org.gif b/styles/christmas/resources/xml.apache.org.gif
new file mode 100644
index 0000000..6fa4e5b
Binary files /dev/null and b/styles/christmas/resources/xml.apache.org.gif differ
diff --git a/styles/christmas/stylesheets/any2header.xsl b/styles/christmas/stylesheets/any2header.xsl
new file mode 100644
index 0000000..7c04545
--- /dev/null
+++ b/styles/christmas/stylesheets/any2header.xsl
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="label"/>
+
+ <xsl:template match="/">
+ <image width="583" height="60" bgcolor="ff0000">
+ <xsl:apply-templates/>
+ </image>
+ </xsl:template>
+
+ <xsl:template match="s1|faqs|changes">
+ <xsl:variable name="title">
+ <xsl:if test="string-length(@title)=0">
+ <xsl:value-of select="$label"/>
+ </xsl:if>
+ <xsl:if test="string-length(@title)>0">
+ <xsl:value-of select="@title"/>
+ </xsl:if>
+ </xsl:variable>
+
+ <text font="Viner Hand ITC" size="34" x="572" y="12" halign="right" valign="top" color="990000"
+ text="{$title}"/>
+ <text font="Viner Hand ITC" size="34" x="571" y="11" halign="right" valign="top" color="990000"
+ text="{$title}"/>
+ <text font="Viner Hand ITC" size="34" x="570" y="10" halign="right" valign="top" color="ffffff"
+ text="{$title}"/>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/stylesheets/any2project.xsl b/styles/christmas/stylesheets/any2project.xsl
new file mode 100644
index 0000000..d1253f1
--- /dev/null
+++ b/styles/christmas/stylesheets/any2project.xsl
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="label"/>
+
+ <xsl:template match="/">
+ <project>
+ <xsl:apply-templates/>
+ </project>
+ </xsl:template>
+
+ <xsl:template match="img">
+ <resource source="{@src}" target="images/{@src}"/>
+ </xsl:template>
+
+ <xsl:template match="node()">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/stylesheets/book2group.xsl b/styles/christmas/stylesheets/book2group.xsl
new file mode 100644
index 0000000..1c1f049
--- /dev/null
+++ b/styles/christmas/stylesheets/book2group.xsl
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="id"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="book">
+ <group title="{group[attribute::id=$id]/@label}">
+ <xsl:apply-templates select="group[attribute::id=$id]/entry"/>
+ </group>
+ </xsl:template>
+
+ <xsl:template match="entry">
+ <entry id="{@id}" title="{document(concat('sbk:/sources/', at source))/faqs/@title}">
+ <xsl:apply-templates select="document(concat('sbk:/sources/', at source))/faqs/faq"/>
+ </entry>
+ </xsl:template>
+
+ <xsl:template match="faq">
+ <voice>
+ <xsl:if test="string-length(@title)=0">
+ <xsl:value-of select="q"/>
+ </xsl:if>
+ <xsl:if test="string-length(@title)>0">
+ <xsl:value-of select="@title"/>
+ </xsl:if>
+ </voice>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/stylesheets/book2project.xsl b/styles/christmas/stylesheets/book2project.xsl
new file mode 100644
index 0000000..41933b0
--- /dev/null
+++ b/styles/christmas/stylesheets/book2project.xsl
@@ -0,0 +1,290 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <!-- match the root book element -->
+ <xsl:template match="book">
+ <project>
+
+ <parameter name="copyright" value="{@copyright}"/>
+
+ <!-- copy all resources to the targets -->
+ <process source="sbk:/style/resources/" producer="directory">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/directory2project.xsl"/>
+ <parameter name="base" value="resources/"/>
+ </processor>
+ </process>
+
+ <xsl:apply-templates/>
+
+ </project>
+ </xsl:template>
+
+<!-- ********************************************************************** -->
+<!-- CREATE THE TARGET HTML -->
+<!-- ********************************************************************** -->
+
+ <xsl:template match="document">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+ <xsl:template match="hidden">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+ <xsl:template match="faqs">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/faqs2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="changes">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/changes2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="group">
+ <xsl:apply-templates/>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="" target="{@id}.html" producer="project" printer="html">
+ <parameter name="id" value="{@id}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/book2group.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/group2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+
+ <xsl:template match="container">
+
+ <xsl:apply-templates/>
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="entry">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/faqs2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="external">
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="concat('ext-',position())"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ </xsl:template>
+<!-- ********************************************************************** -->
+<!-- NAMED TEMPLATES -->
+<!-- ********************************************************************** -->
+
+<!-- Generate the doument header image -->
+ <xsl:template name="header">
+ <xsl:param name="id"/>
+ <xsl:param name="source"/>
+ <xsl:param name="label"/>
+
+ <create source="{$source}" target="graphics/{$id}-header.jpg" producer="parser" printer="image">
+ <processor name="xslt">
+ <parameter name="label" value="{$label}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2header.xsl"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+<!-- Generate the three rollover label images -->
+ <xsl:template name="labels">
+ <xsl:param name="id"/>
+ <xsl:param name="label"/>
+
+ <create source="" target="graphics/{$id}-label-1.jpg" producer="context" printer="image">
+ <parameter name="label" value="{$label}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2label.xsl"/>
+ <parameter name="image" value="sbk:/style/graphics/label-1.gif"/>
+ <parameter name="color" value="00ff00"/>
+ </processor>
+ </create>
+
+ <create source="" target="graphics/{$id}-label-2.jpg" producer="context" printer="image">
+ <parameter name="label" value="{$label}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2label.xsl"/>
+ <parameter name="image" value="sbk:/style/graphics/label-2.gif"/>
+ <parameter name="color" value="00ffff"/>
+ </processor>
+ </create>
+
+ <create source="" target="graphics/{$id}-label-3.jpg" producer="context" printer="image">
+ <parameter name="label" value="{$label}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2label.xsl"/>
+ <parameter name="image" value="sbk:/style/graphics/label-3.gif"/>
+ <parameter name="color" value="ff0000"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/stylesheets/book2project1.xsl b/styles/christmas/stylesheets/book2project1.xsl
new file mode 100644
index 0000000..c0b7d1f
--- /dev/null
+++ b/styles/christmas/stylesheets/book2project1.xsl
@@ -0,0 +1,289 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <!-- match the root book element -->
+ <xsl:template match="book">
+ <project>
+
+ <parameter name="copyright" value="{@copyright}"/>
+
+ <!-- copy all resources to the targets -->
+ <process source="sbk:/style/resources/" producer="directory">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/directory2project.xsl"/>
+ <parameter name="base" value="resources/"/>
+ </processor>
+ </process>
+
+ <xsl:apply-templates/>
+
+ </project>
+ </xsl:template>
+
+<!-- ********************************************************************** -->
+<!-- CREATE THE TARGET HTML -->
+<!-- ********************************************************************** -->
+
+ <xsl:template match="document">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html1.xsl"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+ <xsl:template match="hidden">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+ <xsl:template match="faqs">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/faqs2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="changes">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/changes2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="group">
+ <xsl:apply-templates/>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="" target="{@id}.html" producer="project" printer="html">
+ <parameter name="id" value="{@id}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/book2group.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/group2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+
+<xsl:template match="container">
+
+ <xsl:apply-templates/>
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+ <xsl:template match="entry">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/faqs2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="external">
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="concat('ext-',position())"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ </xsl:template>
+<!-- ********************************************************************** -->
+<!-- NAMED TEMPLATES -->
+<!-- ********************************************************************** -->
+
+<!-- Generate the doument header image -->
+ <xsl:template name="header">
+ <xsl:param name="id"/>
+ <xsl:param name="source"/>
+ <xsl:param name="label"/>
+
+ <create source="{$source}" target="graphics/{$id}-header.jpg" producer="parser" printer="image">
+ <processor name="xslt">
+ <parameter name="label" value="{$label}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2header.xsl"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+<!-- Generate the three rollover label images -->
+ <xsl:template name="labels">
+ <xsl:param name="id"/>
+ <xsl:param name="label"/>
+
+ <create source="" target="graphics/{$id}-label-1.jpg" producer="context" printer="image">
+ <parameter name="label" value="{$label}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2label.xsl"/>
+ <parameter name="image" value="sbk:/style/graphics/label-1.gif"/>
+ <parameter name="color" value="ffffff"/>
+ </processor>
+ </create>
+
+ <create source="" target="graphics/{$id}-label-2.jpg" producer="context" printer="image">
+ <parameter name="label" value="{$label}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2label.xsl"/>
+ <parameter name="image" value="sbk:/style/graphics/label-2.gif"/>
+ <parameter name="color" value="ffff00"/>
+ </processor>
+ </create>
+
+ <create source="" target="graphics/{$id}-label-3.jpg" producer="context" printer="image">
+ <parameter name="label" value="{$label}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2label.xsl"/>
+ <parameter name="image" value="sbk:/style/graphics/label-3.gif"/>
+ <parameter name="color" value="ffffff"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/stylesheets/changes2document.xsl b/styles/christmas/stylesheets/changes2document.xsl
new file mode 100644
index 0000000..ed1f3f3
--- /dev/null
+++ b/styles/christmas/stylesheets/changes2document.xsl
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="changes">
+ <s1 title="{@title}">
+ <xsl:apply-templates/>
+ </s1>
+ </xsl:template>
+
+ <xsl:template match="release">
+ <s2 title="Release {@version} {@date}">
+ <br/><xsl:apply-templates/>
+ </s2>
+ </xsl:template>
+
+ <xsl:template match="features">
+ <s3 title="Features">
+ <ul><xsl:apply-templates/></ul>
+ </s3>
+ </xsl:template>
+
+ <xsl:template match="fixes">
+ <s3 title="Bugs fixed">
+ <ul><xsl:apply-templates/></ul>
+ </s3>
+ </xsl:template>
+
+ <xsl:template match="feat|fix">
+ <li><xsl:apply-templates/></li>
+ </xsl:template>
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/stylesheets/context2footer.xsl b/styles/christmas/stylesheets/context2footer.xsl
new file mode 100644
index 0000000..2fc8d5f
--- /dev/null
+++ b/styles/christmas/stylesheets/context2footer.xsl
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="context">
+ <image source="sbk:/style/graphics/footer.gif">
+ <xsl:apply-templates/>
+ </image>
+ </xsl:template>
+
+ <xsl:template match="parameter">
+ <xsl:if test="@name='copyright'">
+ <text font="Arial Bold" size="11" x="124" y="6" style="plain"
+ halign="left" valign="top" color="666699"
+ text="Copyright © {@value}. All Rights Reserved."/>
+ <text font="Arial Bold" size="11" x="123" y="5" style="plain"
+ halign="left" valign="top" color="333366"
+ text="Copyright © {@value}. All Rights Reserved."/>
+ <text font="Arial Bold" size="11" x="122" y="4" style="plain"
+ halign="left" valign="top" color="ffffff"
+ text="Copyright © {@value}. All Rights Reserved."/>
+ </xsl:if>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/stylesheets/context2label.xsl b/styles/christmas/stylesheets/context2label.xsl
new file mode 100644
index 0000000..9bad040
--- /dev/null
+++ b/styles/christmas/stylesheets/context2label.xsl
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="image"/>
+ <xsl:param name="color"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="context">
+ <image source="{$image}">
+ <xsl:apply-templates/>
+ </image>
+ </xsl:template>
+
+ <xsl:template match="parameter">
+ <xsl:if test="@name='label'">
+ <text font="Viner Hand ITC" size="14" x="13" y="12" halign="left"
+ valign="top" style="bold" color="{$color}" text="{@value}"/>
+ <text font="Viner Hand ITC" size="14" x="12" y="11" halign="left"
+ valign="top" style="bold" color="000000" text="{@value}"/>
+ </xsl:if>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/stylesheets/directory2project.xsl b/styles/christmas/stylesheets/directory2project.xsl
new file mode 100644
index 0000000..4995828
--- /dev/null
+++ b/styles/christmas/stylesheets/directory2project.xsl
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="base"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="directory">
+ <project>
+ <xsl:apply-templates/>
+ </project>
+ </xsl:template>
+
+ <xsl:template match="entry">
+
+ <xsl:if test="@directory!='true'">
+ <resource source="{@href}" target="{$base}{@href}"/>
+ </xsl:if>
+<!-- don't copy subdir to avoid copying proprietary CVS files
+ <xsl:if test="@directory='true'">
+ <process source="{@href}" producer="directory">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/directory2project.xsl"/>
+ <parameter name="base" value="{$base}{@href}"/>
+ </processor>
+ </process>
+ </xsl:if>
+-->
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/stylesheets/document2html.xsl b/styles/christmas/stylesheets/document2html.xsl
new file mode 100644
index 0000000..56d131e
--- /dev/null
+++ b/styles/christmas/stylesheets/document2html.xsl
@@ -0,0 +1,403 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="stylebook.project"/>
+ <xsl:param name="copyright"/>
+ <xsl:param name="id"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="s1">
+ <html>
+ <head>
+ <script language="JavaScript" type="text/javascript" src="resources/script.js"/>
+ <title><xsl:value-of select="@title"/></title>
+ </head>
+ <body text="#000000" link="#990000" vlink="#660000" alink="#ff0000"
+ topmargin="0" leftmargin="0" marginwidth="0" marginheight="0"
+ bgcolor="#ffffff">
+ <!-- THE TOP BAR (HEADER) -->
+ <table border="0" cellspacing="0" cellpadding="0" width="725">
+ <tr height="60">
+ <td width="137" rowspan="2">
+ <img src="resources/logo-1.gif" width="137" height="65" border="0" vspace="0" hspace="0" align="left"/></td>
+ <td width="583">
+ <img src="graphics/{$id}-header.jpg" width="583" height="60" border="0" vspace="0" hspace="0" align="left"/></td>
+ <td width="5">
+ <img src="resources/red-lo.gif" width="5" height="60" border="0" vspace="0" hspace="0" align="left"/></td>
+ </tr>
+ <tr height="5">
+ <td width="588" colspan="2">
+ <img src="resources/red-lo.gif" width="588" height="5" border="0" vspace="0" hspace="0" align="left"/></td>
+ </tr>
+ <tr height="16">
+ <td width="137" rowspan="2">
+ <img src="resources/logo-2.gif" width="137" height="16" border="0" vspace="0" hspace="0" align="left"/></td>
+ <td width="588" colspan="2">
+ <img src="resources/green-bar.gif" width="173" height="16" border="0" vspace="0" hspace="0" align="left"/>
+ <img src="resources/green-bar-1.gif" width="8" height="16" border="0" vspace="0" hspace="0" align="left"/>
+ <a href="http://www.xml.org/" target="new">
+ <img src="resources/www.xml.org.gif" width="100" height="16" border="0" vspace="0" hspace="0" align="left"/></a>
+ <a href="http://www.w3.org/" target="new">
+ <img src="resources/www.w3.org.gif" width="100" height="16" border="0" vspace="0" hspace="0" align="left"/></a>
+ <a href="http://www.apache.org/" target="new">
+ <img src="resources/www.apache.org.gif" width="100" height="16" border="0" vspace="0" hspace="0" align="left"/></a>
+ <a href="http://xml.apache.org/" target="new">
+ <img src="resources/xml.apache.org.gif" width="100" height="16" border="0" vspace="0" hspace="0" align="left"/></a>
+ <img src="resources/green-bar-2.gif" width="7" height="16" border="0" vspace="0" hspace="0" align="left"/></td>
+ </tr>
+ </table>
+ <!-- THE MAIN PANEL (SIDEBAR AND CONTENT) -->
+ <table border="0" cellspacing="0" cellpadding="0" width="725">
+ <tr>
+ <!-- THE SIDE BAR -->
+ <td width="130" valign="top" align="left">
+ <img src="resources/logo-3.gif" width="130" height="33" border="0" vspace="0" hspace="0"/><br/>
+ <xsl:apply-templates select="document($stylebook.project)"/>
+ </td>
+ <!-- THE CONTENT PANEL -->
+ <td width="595" valign="top" align="left">
+ <table border="0" cellspacing="0" cellpadding="3">
+ <tr><td><font face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font></td></tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ <!-- THE COPYRIGHT NOTICE -->
+ <table border="0" cellspacing="0" cellpadding="0" width="725">
+ <tr>
+ <td align="center" width="725">
+ <img src="resources/green-hi.gif" width="715" height="1" border="0" vspace="0" hspace="0"/><br/>
+ <img src="resources/green-lo.gif" width="715" height="1" border="0" vspace="0" hspace="0"/>
+ </td>
+ </tr>
+ <tr>
+ <td align="center" width="725"><font size="-1"><i>
+ Copyright © <xsl:value-of select="$copyright"/>.
+ All Rights Reserved.
+ </i><br/></font></td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- book -->
+
+ <xsl:template match="book">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="document|faqs|changes|group|container">
+ <xsl:if test="@id=$id">
+ <img src="graphics/{@id}-label-1.jpg" width="130" height="30" hspace="0" vspace="0" border="0" alt="{@label}"/>
+ </xsl:if>
+ <xsl:if test="@id!=$id">
+ <a href="{@id}.html" onMouseOver="rolloverOn('side-{@id}');" onMouseOut="rolloverOff('side-{@id}');">
+ <img onLoad="rolloverLoad('side-{@id}','graphics/{@id}-label-2.jpg','graphics/{@id}-label-3.jpg');"
+ name="side-{@id}" src="graphics/{@id}-label-3.jpg" width="130" height="30" hspace="0" vspace="0" border="0" alt="{@label}"/>
+ </a>
+ </xsl:if>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="external">
+ <xsl:variable name="extid" select="concat('ext-',position())"/>
+ <a href="{@href}" onMouseOver="rolloverOn('side-{$extid}');" onMouseOut="rolloverOff('side-{$extid}');">
+ <img onLoad="rolloverLoad('side-{$extid}','graphics/{$extid}-label-2.jpg','graphics/{$extid}-label-3.jpg');"
+ name="side-{$extid}" src="graphics/{$extid}-label-3.jpg" width="130" height="30" hspace="0" vspace="0" border="0" alt="{@label}"/>
+ </a>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="separator">
+ <img src="resources/separator.gif" width="130" height="20" hspace="0" vspace="0" border="0"/><br/>
+ </xsl:template>
+
+
+<!-- ###################################################################### -->
+<!-- document -->
+
+ <xsl:template match="s2">
+ <table width="589" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="ffffff" colspan="2" width="589">
+ <table width="589" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="587" height="1"><img src="resources/green-lo.gif" width="587" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void-lo.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="00cc00" width="587">
+ <font size="+1" face="arial,helvetica,sanserif" color="#ffffff">
+ <img src="resources/void.gif" width="2" height="2" vspace="0" hspace="0" border="0"/>
+ <b><xsl:value-of select="@title"/></b>
+ </font>
+ </td>
+ <td bgcolor="009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="587" height="1"><img src="resources/green-lo.gif" width="587" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="10"> </td>
+ <td width="579">
+ <font face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="s3">
+ <table width="579" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="ffffff" colspan="2" width="579">
+ <table width="579" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="577" height="1"><img src="resources/green-lo.gif" width="577" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void-lo.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="00cc00" width="577">
+ <font face="arial,helvetica,sanserif" color="#ffffff">
+ <img src="resources/void.gif" width="2" height="2" vspace="0" hspace="0" border="0"/>
+ <b><xsl:value-of select="@title"/></b>
+ </font>
+ </td>
+ <td bgcolor="009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="577" height="1"><img src="resources/green-lo.gif" width="577" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="10"> </td>
+ <td width="569">
+ <font size="-1" face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="s4">
+ <table width="569" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="ffffff" colspan="2" width="569">
+ <table width="569" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="567" height="1"><img src="resources/green-lo.gif" width="567" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void-lo.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="00cc00" width="567">
+ <font size="-1" face="arial,helvetica,sanserif" color="#ffffff">
+ <img src="resources/void.gif" width="2" height="2" vspace="0" hspace="0" border="0"/>
+ <b><xsl:value-of select="@title"/></b>
+ </font>
+ </td>
+ <td bgcolor="009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="567" height="1"><img src="resources/green-lo.gif" width="567" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="10"> </td>
+ <td width="559">
+ <font size="-1" face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- blocks -->
+
+ <xsl:template match="p">
+ <p><xsl:apply-templates/></p>
+ </xsl:template>
+
+ <xsl:template match="note">
+ <table width="100%" cellspacing="3" cellpadding="0" border="0">
+ <tr>
+ <td width="20" valign="top">
+ <img src="resources/note.gif" width="20" height="24" vspace="0" hspace="0" border="0" alt="Note"/>
+ </td>
+ <td valign="top">
+ <font size="-1" face="arial,helvetica,sanserif" color="#000000">
+ <i>
+ <xsl:apply-templates/>
+ </i>
+ </font>
+ </td>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="ul">
+ <ul><xsl:apply-templates/></ul>
+ </xsl:template>
+
+ <xsl:template match="ol">
+ <ol><xsl:apply-templates/></ol>
+ </xsl:template>
+
+ <xsl:template match="li">
+ <li><xsl:apply-templates/></li>
+ </xsl:template>
+
+ <xsl:template match="source">
+ <div align="right">
+ <table width="464" cellspacing="4" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="#009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#009900" width="462" height="1"><img src="resources/void.gif" width="462" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#ffffff" width="462">
+ <font size="-1"><pre><xsl:apply-templates/></pre></font>
+ </td>
+ <td bgcolor="#009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#009900" width="462" height="1"><img src="resources/void.gif" width="462" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="table">
+ <table width="100%" border="0" cellspacing="2" cellpadding="2">
+ <xsl:apply-templates/>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="tr">
+ <tr><xsl:apply-templates/></tr>
+ </xsl:template>
+
+ <xsl:template match="th">
+ <td bgcolor="#006600" colspan="{@colspan}" rowspan="{@rowspan}" valign="center" align="center">
+ <font color="#ffffff" size="-1" face="arial,helvetica,sanserif">
+ <b><xsl:apply-templates/></b>
+ </font>
+ </td>
+ </xsl:template>
+
+ <xsl:template match="td">
+ <td bgcolor="#009900" colspan="{@colspan}" rowspan="{@rowspan}" valign="top" align="left">
+ <font color="#000000" size="-1" face="arial,helvetica,sanserif">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </xsl:template>
+
+ <xsl:template match="tn">
+ <td bgcolor="#ffffff" colspan="{@colspan}" rowspan="{@rowspan}">
+
+ </td>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- markup -->
+
+ <xsl:template match="em">
+ <b><xsl:apply-templates/></b>
+ </xsl:template>
+
+ <xsl:template match="ref">
+ <i><xsl:apply-templates/></i>
+ </xsl:template>
+
+ <xsl:template match="code">
+ <code><font face="courier, monospaced"><xsl:apply-templates/></font></code>
+ </xsl:template>
+
+ <xsl:template match="br">
+ <br/>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- links -->
+
+ <xsl:template match="link">
+ <xsl:if test="string-length(@anchor)=0">
+ <xsl:if test="string-length(@idref)=0">
+ <xsl:apply-templates/>
+ </xsl:if>
+ <xsl:if test="string-length(@idref)>0">
+ <a href="{@idref}.html"><xsl:apply-templates/></a>
+ </xsl:if>
+ </xsl:if>
+
+ <xsl:if test="string-length(@anchor)>0">
+ <xsl:if test="string-length(@idref)=0">
+ <a href="#{@anchor}"><xsl:apply-templates/></a>
+ </xsl:if>
+ <xsl:if test="string-length(@idref)>0">
+ <a href="{@idref}.html#{@anchor}"><xsl:apply-templates/></a>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="anchor">
+ <a name="{@name}"><xsl:comment>anchor</xsl:comment></a>
+ </xsl:template>
+
+ <xsl:template match="jump">
+ <a href="{@href}"><xsl:apply-templates/></a>
+ </xsl:template>
+
+ <xsl:template match="img">
+ <img src="images/{@src}" border="0" vspace="4" hspace="4" align="right"/>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- copy
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+-->
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/stylesheets/document2html1.xsl b/styles/christmas/stylesheets/document2html1.xsl
new file mode 100644
index 0000000..c4dd9a8
--- /dev/null
+++ b/styles/christmas/stylesheets/document2html1.xsl
@@ -0,0 +1,404 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="stylebook.project"/>
+ <xsl:param name="copyright"/>
+ <xsl:param name="id"/>
+ <xsl:key name="id" match="*" use="@id"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="s1">
+ <html>
+ <head>
+ <script language="JavaScript" type="text/javascript" src="resources/script.js"/>
+ <title><xsl:value-of select="@title"/></title>
+ </head>
+ <body text="#000000" link="#990000" vlink="#660000" alink="#ff0000"
+ topmargin="0" leftmargin="0" marginwidth="0" marginheight="0"
+ bgcolor="#ffffff">
+ <!-- THE TOP BAR (HEADER) -->
+ <table border="0" cellspacing="0" cellpadding="0" width="725">
+ <tr height="60">
+ <td width="137" rowspan="2">
+ <img src="resources/logo-1.gif" width="137" height="65" border="0" vspace="0" hspace="0" align="left"/></td>
+ <td width="583">
+ <img src="graphics/{$id}-header.jpg" width="583" height="60" border="0" vspace="0" hspace="0" align="left"/></td>
+ <td width="5">
+ <img src="resources/red-lo.gif" width="5" height="60" border="0" vspace="0" hspace="0" align="left"/></td>
+ </tr>
+ <tr height="5">
+ <td width="588" colspan="2">
+ <img src="resources/red-lo.gif" width="588" height="5" border="0" vspace="0" hspace="0" align="left"/></td>
+ </tr>
+ <tr height="16">
+ <td width="137" rowspan="2">
+ <img src="resources/logo-2.gif" width="137" height="16" border="0" vspace="0" hspace="0" align="left"/></td>
+ <td width="588" colspan="2">
+ <img src="resources/green-bar.gif" width="173" height="16" border="0" vspace="0" hspace="0" align="left"/>
+ <img src="resources/green-bar-1.gif" width="8" height="16" border="0" vspace="0" hspace="0" align="left"/>
+ <a href="http://www.xml.org/" target="new">
+ <img src="resources/www.xml.org.gif" width="100" height="16" border="0" vspace="0" hspace="0" align="left"/></a>
+ <a href="http://www.w3.org/" target="new">
+ <img src="resources/www.w3.org.gif" width="100" height="16" border="0" vspace="0" hspace="0" align="left"/></a>
+ <a href="http://www.apache.org/" target="new">
+ <img src="resources/www.apache.org.gif" width="100" height="16" border="0" vspace="0" hspace="0" align="left"/></a>
+ <a href="http://xml.apache.org/" target="new">
+ <img src="resources/xml.apache.org.gif" width="100" height="16" border="0" vspace="0" hspace="0" align="left"/></a>
+ <img src="resources/green-bar-2.gif" width="7" height="16" border="0" vspace="0" hspace="0" align="left"/></td>
+ </tr>
+ </table>
+ <!-- THE MAIN PANEL (SIDEBAR AND CONTENT) -->
+ <table border="0" cellspacing="0" cellpadding="0" width="725">
+ <tr>
+ <!-- THE SIDE BAR -->
+ <td width="130" valign="top" align="left">
+ <img src="resources/logo-3.gif" width="130" height="33" border="0" vspace="0" hspace="0"/><br/>
+ <xsl:apply-templates select="document($stylebook.project)"/>
+ </td>
+ <!-- THE CONTENT PANEL -->
+ <td width="595" valign="top" align="left">
+ <table border="0" cellspacing="0" cellpadding="3">
+ <tr><td><font face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates select="s2"/>
+ </font></td></tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ <!-- THE COPYRIGHT NOTICE -->
+ <table border="0" cellspacing="0" cellpadding="0" width="725">
+ <tr>
+ <td align="center" width="725">
+ <img src="resources/green-hi.gif" width="715" height="1" border="0" vspace="0" hspace="0"/><br/>
+ <img src="resources/green-lo.gif" width="715" height="1" border="0" vspace="0" hspace="0"/>
+ </td>
+ </tr>
+ <tr>
+ <td align="center" width="725"><font size="-1"><i>
+ Copyright © <xsl:value-of select="$copyright"/>.
+ All Rights Reserved.
+ </i><br/></font></td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- book -->
+
+ <xsl:template match="book">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="document|faqs|changes|group">
+ <xsl:if test="@id=$id">
+ <img src="graphics/{@id}-label-1.jpg" width="130" height="30" hspace="0" vspace="0" border="0" alt="{@label}"/>
+ </xsl:if>
+ <xsl:if test="@id!=$id">
+ <a href="{@id}.html" onMouseOver="rolloverOn('side-{@id}');" onMouseOut="rolloverOff('side-{@id}');">
+ <img onLoad="rolloverLoad('side-{@id}','graphics/{@id}-label-2.jpg','graphics/{@id}-label-3.jpg');"
+ name="side-{@id}" src="graphics/{@id}-label-3.jpg" width="130" height="30" hspace="0" vspace="0" border="0" alt="{@label}"/>
+ </a>
+ </xsl:if>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="external">
+ <xsl:variable name="extid" select="concat('ext-',position())"/>
+ <a href="{@href}" onMouseOver="rolloverOn('side-{$extid}');" onMouseOut="rolloverOff('side-{$extid}');">
+ <img onLoad="rolloverLoad('side-{$extid}','graphics/{$extid}-label-2.jpg','graphics/{$extid}-label-3.jpg');"
+ name="side-{$extid}" src="graphics/{$extid}-label-3.jpg" width="130" height="30" hspace="0" vspace="0" border="0" alt="{@label}"/>
+ </a>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="separator">
+ <img src="resources/separator.gif" width="130" height="20" hspace="0" vspace="0" border="0"/><br/>
+ </xsl:template>
+
+
+<!-- ###################################################################### -->
+<!-- document -->
+
+ <xsl:template match="s2">
+ <table width="589" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="ffffff" colspan="2" width="589">
+ <table width="589" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="587" height="1"><img src="resources/green-lo.gif" width="587" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void-lo.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="00cc00" width="587">
+ <font size="+1" face="arial,helvetica,sanserif" color="#ffffff">
+ <img src="resources/void.gif" width="2" height="2" vspace="0" hspace="0" border="0"/>
+ <b><xsl:value-of select="@title"/></b>
+ </font>
+ </td>
+ <td bgcolor="009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="587" height="1"><img src="resources/green-lo.gif" width="587" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="10"> </td>
+ <td width="579">
+ <font face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="s3">
+ <table width="579" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="ffffff" colspan="2" width="579">
+ <table width="579" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="577" height="1"><img src="resources/green-lo.gif" width="577" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void-lo.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="00cc00" width="577">
+ <font face="arial,helvetica,sanserif" color="#ffffff">
+ <img src="resources/void.gif" width="2" height="2" vspace="0" hspace="0" border="0"/>
+ <b><xsl:value-of select="@title"/></b>
+ </font>
+ </td>
+ <td bgcolor="009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="577" height="1"><img src="resources/green-lo.gif" width="577" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="10"> </td>
+ <td width="569">
+ <font size="-1" face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="s4">
+ <table width="569" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="ffffff" colspan="2" width="569">
+ <table width="569" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="567" height="1"><img src="resources/green-lo.gif" width="567" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void-lo.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="00cc00" width="567">
+ <font size="-1" face="arial,helvetica,sanserif" color="#ffffff">
+ <img src="resources/void.gif" width="2" height="2" vspace="0" hspace="0" border="0"/>
+ <b><xsl:value-of select="@title"/></b>
+ </font>
+ </td>
+ <td bgcolor="009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="567" height="1"><img src="resources/green-lo.gif" width="567" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="10"> </td>
+ <td width="559">
+ <font size="-1" face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- blocks -->
+
+ <xsl:template match="p">
+ <p><xsl:apply-templates/></p>
+ </xsl:template>
+
+ <xsl:template match="note">
+ <table width="100%" cellspacing="3" cellpadding="0" border="0">
+ <tr>
+ <td width="20" valign="top">
+ <img src="resources/note.gif" width="20" height="24" vspace="0" hspace="0" border="0" alt="Note"/>
+ </td>
+ <td valign="top">
+ <font size="-1" face="arial,helvetica,sanserif" color="#000000">
+ <i>
+ <xsl:apply-templates/>
+ </i>
+ </font>
+ </td>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="ul">
+ <ul><xsl:apply-templates/></ul>
+ </xsl:template>
+
+ <xsl:template match="ol">
+ <ol><xsl:apply-templates/></ol>
+ </xsl:template>
+
+ <xsl:template match="li">
+ <li><xsl:apply-templates/></li>
+ </xsl:template>
+
+ <xsl:template match="source">
+ <div align="right">
+ <table width="464" cellspacing="4" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="#009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#009900" width="462" height="1"><img src="resources/void.gif" width="462" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#ffffff" width="462">
+ <font size="-1"><pre><xsl:apply-templates/></pre></font>
+ </td>
+ <td bgcolor="#009900" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#009900" width="462" height="1"><img src="resources/void.gif" width="462" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#009900" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="table">
+ <table width="100%" border="0" cellspacing="2" cellpadding="2">
+ <xsl:apply-templates/>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="tr">
+ <tr><xsl:apply-templates/></tr>
+ </xsl:template>
+
+ <xsl:template match="th">
+ <td bgcolor="#006600" colspan="{@colspan}" rowspan="{@rowspan}" valign="center" align="center">
+ <font color="#ffffff" size="-1" face="arial,helvetica,sanserif">
+ <b><xsl:apply-templates/></b>
+ </font>
+ </td>
+ </xsl:template>
+
+ <xsl:template match="td">
+ <td bgcolor="#009900" colspan="{@colspan}" rowspan="{@rowspan}" valign="top" align="left">
+ <font color="#000000" size="-1" face="arial,helvetica,sanserif">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </xsl:template>
+
+ <xsl:template match="tn">
+ <td bgcolor="#ffffff" colspan="{@colspan}" rowspan="{@rowspan}">
+
+ </td>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- markup -->
+
+ <xsl:template match="em">
+ <b><xsl:apply-templates/></b>
+ </xsl:template>
+
+ <xsl:template match="ref">
+ <i><xsl:apply-templates/></i>
+ </xsl:template>
+
+ <xsl:template match="code">
+ <code><font face="courier, monospaced"><xsl:apply-templates/></font></code>
+ </xsl:template>
+
+ <xsl:template match="br">
+ <br/>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- links -->
+
+ <xsl:template match="link">
+ <xsl:if test="string-length(@anchor)=0">
+ <xsl:if test="string-length(@idref)=0">
+ <xsl:apply-templates/>
+ </xsl:if>
+ <xsl:if test="string-length(@idref)>0">
+ <a href="{@idref}.html"><xsl:apply-templates/></a>
+ </xsl:if>
+ </xsl:if>
+
+ <xsl:if test="string-length(@anchor)>0">
+ <xsl:if test="string-length(@idref)=0">
+ <a href="#{@anchor}"><xsl:apply-templates/></a>
+ </xsl:if>
+ <xsl:if test="string-length(@idref)>0">
+ <a href="{@idref}.html#{@anchor}"><xsl:apply-templates/></a>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="anchor">
+ <a name="{@name}"><xsl:comment>anchor</xsl:comment></a>
+ </xsl:template>
+
+ <xsl:template match="jump">
+ <a href="{@href}"><xsl:apply-templates/></a>
+ </xsl:template>
+
+ <xsl:template match="img">
+ <img src="images/{@src}" border="0" vspace="4" hspace="4" align="right"/>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- copy
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+-->
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/stylesheets/faqs2document.xsl b/styles/christmas/stylesheets/faqs2document.xsl
new file mode 100644
index 0000000..4a9d393
--- /dev/null
+++ b/styles/christmas/stylesheets/faqs2document.xsl
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="faqs">
+ <s1 title="{@title}">
+ <s2 title="Questions">
+ <ul>
+ <xsl:apply-templates select="faq" mode="index"/>
+ </ul>
+ </s2>
+ <s2 title="Answers">
+ <br/>
+ <xsl:apply-templates select="faq"/>
+ </s2>
+ </s1>
+ </xsl:template>
+
+ <xsl:template match="faq" mode="index">
+ <li>
+ <link anchor="faq-{position()}">
+ <xsl:if test="string-length(@title)=0">
+ <xsl:value-of select="q"/>
+ </xsl:if>
+ <xsl:if test="string-length(@title)>0">
+ <xsl:value-of select="@title"/>
+ </xsl:if>
+ </link>
+ </li>
+ </xsl:template>
+
+ <xsl:template match="faq">
+ <anchor name="faq-{position()}"/>
+ <s3 title="{q}">
+ <xsl:apply-templates select="a"/>
+ </s3>
+ </xsl:template>
+
+ <xsl:template match="a">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/stylesheets/group2document.xsl b/styles/christmas/stylesheets/group2document.xsl
new file mode 100644
index 0000000..533fa92
--- /dev/null
+++ b/styles/christmas/stylesheets/group2document.xsl
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="group">
+ <s1 title="{@title}">
+ <xsl:apply-templates/>
+ </s1>
+ </xsl:template>
+
+ <xsl:template match="entry">
+ <s2 title="{@title}">
+ <p>
+ Read the <link idref="{@id}"><xsl:value-of select="@title"/></link>
+ document or jump directly to:
+ </p>
+ <ul>
+ <xsl:apply-templates/>
+ </ul>
+ </s2>
+ </xsl:template>
+
+ <xsl:template match="voice">
+ <li><link idref="{ancestor::*/@id}" anchor="faq-{position()}"><xsl:apply-templates/></link></li>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/christmas/vineritc.ttf b/styles/christmas/vineritc.ttf
new file mode 100644
index 0000000..f73fadb
Binary files /dev/null and b/styles/christmas/vineritc.ttf differ
diff --git a/styles/ibm-style/dtd/blocks.ent b/styles/ibm-style/dtd/blocks.ent
new file mode 100644
index 0000000..37ef587
--- /dev/null
+++ b/styles/ibm-style/dtd/blocks.ent
@@ -0,0 +1,42 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- BLOCKS ENTITY -->
+<!ENTITY % blocks "p|note|ul|ol|gloss|table|source|anchor">
+
+<!-- import the external markup.ent dtd -->
+<!ENTITY % markupEntity SYSTEM "markup.ent">
+%markupEntity;
+
+<!ENTITY % content "(#PCDATA|%markup;|%links;)*">
+
+<!ELEMENT p %content;>
+<!ELEMENT note %content;>
+
+<!ELEMENT ul (li|ol|ul)+>
+<!ELEMENT ol (li|ol|ul)+>
+<!ELEMENT li %content;>
+
+<!ELEMENT gloss (label|item)+>
+<!ELEMENT label %content;>
+<!ELEMENT item %content;>
+
+<!ELEMENT source (#PCDATA)>
+
+<!ELEMENT table (tr)+>
+<!ATTLIST table title CDATA #IMPLIED>
+
+<!ELEMENT tr (tn|th|td)+>
+
+<!ELEMENT tn EMPTY>
+<!ATTLIST tn colspan CDATA "1"
+ rowspan CDATA "1">
+
+<!ELEMENT th %content;>
+<!ATTLIST th colspan CDATA "1"
+ rowspan CDATA "1">
+
+<!ELEMENT td %content;>
+<!ATTLIST td colspan CDATA "1"
+ rowspan CDATA "1"
+ align (left|center|right) "left">
+
\ No newline at end of file
diff --git a/styles/ibm-style/dtd/book.dtd b/styles/ibm-style/dtd/book.dtd
new file mode 100644
index 0000000..35fc143
--- /dev/null
+++ b/styles/ibm-style/dtd/book.dtd
@@ -0,0 +1,47 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- STYLEBOOK BOOK DTD -->
+
+<!-- import the external source-specific dtd -->
+<!ENTITY % externalEntity SYSTEM "sbk:/sources/entities.ent">
+%externalEntity;
+
+<!ELEMENT book (document|hidden|faqs|changes|group|external|separator)+>
+<!ATTLIST book title CDATA #REQUIRED
+ copyright CDATA #IMPLIED>
+
+
+<!ELEMENT document EMPTY>
+<!ATTLIST document id ID #REQUIRED
+ source CDATA #REQUIRED
+ label CDATA #REQUIRED>
+
+<!ELEMENT hidden EMPTY>
+<!ATTLIST hidden id ID #REQUIRED
+ source CDATA #REQUIRED>
+
+<!ELEMENT faqs EMPTY>
+<!ATTLIST faqs id ID #REQUIRED
+ source CDATA #REQUIRED
+ label CDATA #REQUIRED>
+
+<!ELEMENT changes EMPTY>
+<!ATTLIST changes id ID #REQUIRED
+ source CDATA #REQUIRED
+ label CDATA #REQUIRED>
+
+<!ELEMENT group (entry)+>
+<!ATTLIST group id ID #IMPLIED
+ label CDATA #REQUIRED>
+
+<!ELEMENT entry EMPTY>
+<!ATTLIST entry id ID #REQUIRED
+ source CDATA #REQUIRED>
+
+<!ELEMENT external EMPTY>
+<!ATTLIST external label CDATA #REQUIRED
+ href CDATA #REQUIRED>
+
+<!ELEMENT separator EMPTY>
+
+<!-- CVS $Revision: 313264 $ $Date: 2000-05-24 23:41:43 +0200 (ons, 24 maj 2000) $ -->
\ No newline at end of file
diff --git a/styles/ibm-style/dtd/changes.dtd b/styles/ibm-style/dtd/changes.dtd
new file mode 100644
index 0000000..b24d447
--- /dev/null
+++ b/styles/ibm-style/dtd/changes.dtd
@@ -0,0 +1,24 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- STYLEBOOK CHANGES DTD -->
+
+<!-- import the external markup.ent dtd -->
+<!ENTITY % markupEntity SYSTEM "markup.ent">
+%markupEntity;
+
+<!ENTITY % content "(#PCDATA|%markup;|%links;)*">
+
+<!ELEMENT changes (release)+>
+<!ATTLIST changes title CDATA #REQUIRED>
+
+<!ELEMENT release ((features,fixes)|(features)|(fixes))>
+<!ATTLIST release version CDATA #REQUIRED
+ date CDATA #IMPLIED>
+
+<!ELEMENT features (feat)+>
+<!ELEMENT fixes (fix)+>
+
+<!ELEMENT feat %content;>
+<!ELEMENT fix %content;>
+
+<!-- CVS $Revision: 313264 $ $Date: 2000-05-24 23:41:43 +0200 (ons, 24 maj 2000) $ -->
\ No newline at end of file
diff --git a/styles/ibm-style/dtd/characters.ent b/styles/ibm-style/dtd/characters.ent
new file mode 100644
index 0000000..7053fe4
--- /dev/null
+++ b/styles/ibm-style/dtd/characters.ent
@@ -0,0 +1,297 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- CHARACTERS ENTITY -->
+
+<!-- Latin A -->
+<!ENTITY nbsp " "> <!-- U+00A0 ISOnum - no-break space = non-breaking space -->
+<!ENTITY iexcl "¡"> <!-- U+00A1 ISOnum - inverted exclamation mark -->
+<!ENTITY cent "¢"> <!-- U+00A2 ISOnum - cent sign -->
+<!ENTITY pound "£"> <!-- U+00A3 ISOnum - pound sign -->
+<!ENTITY curren "¤"> <!-- U+00A4 ISOnum - currency sign -->
+<!ENTITY yen "¥"> <!-- U+00A5 ISOnum - yen sign = yuan sign -->
+<!ENTITY brvbar "¦"> <!-- U+00A6 ISOnum - broken bar = broken vertical bar -->
+<!ENTITY sect "§"> <!-- U+00A7 ISOnum - section sign -->
+<!ENTITY uml "¨"> <!-- U+00A8 ISOdia - diaeresis = spacing diaeresis -->
+<!ENTITY copy "©"> <!-- U+00A9 ISOnum - copyright sign -->
+<!ENTITY ordf "ª"> <!-- U+00AA ISOnum - feminine ordinal indicator -->
+<!ENTITY laquo "«"> <!-- U+00AB ISOnum - left-pointing double angle quotation mark = left pointing guillemet -->
+<!ENTITY not "¬"> <!-- U+00AC ISOnum - not sign -->
+<!ENTITY shy ""> <!-- U+00AD ISOnum - soft hyphen = discretionary hyphen -->
+<!ENTITY reg "®"> <!-- U+00AE ISOnum - registered sign = registered trade mark sign -->
+<!ENTITY macr "¯"> <!-- U+00AF ISOdia - macron = spacing macron = overline = APL overbar -->
+<!ENTITY deg "°"> <!-- U+00B0 ISOnum - degree sign -->
+<!ENTITY plusmn "±"> <!-- U+00B1 ISOnum - plus-minus sign = plus-or-minus sign -->
+<!ENTITY sup2 "²"> <!-- U+00B2 ISOnum - superscript two = superscript digit two = squared -->
+<!ENTITY sup3 "³"> <!-- U+00B3 ISOnum - superscript three = superscript digit three = cubed -->
+<!ENTITY acute "´"> <!-- U+00B4 ISOdia - acute accent = spacing acute -->
+<!ENTITY micro "µ"> <!-- U+00B5 ISOnum - micro sign -->
+<!ENTITY para "¶"> <!-- U+00B6 ISOnum - pilcrow sign = paragraph sign -->
+<!ENTITY middot "·"> <!-- U+00B7 ISOnum - middle dot = Georgian comma = Greek middle dot -->
+<!ENTITY cedil "¸"> <!-- U+00B8 ISOdia - cedilla = spacing cedilla -->
+<!ENTITY sup1 "¹"> <!-- U+00B9 ISOnum - superscript one = superscript digit one -->
+<!ENTITY ordm "º"> <!-- U+00BA ISOnum - masculine ordinal indicator -->
+<!ENTITY raquo "»"> <!-- U+00BB ISOnum - right-pointing double angle quotation mark = right pointing guillemet -->
+<!ENTITY frac14 "¼"> <!-- U+00BC ISOnum - vulgar fraction one quarter = fraction one quarter -->
+<!ENTITY frac12 "½"> <!-- U+00BD ISOnum - vulgar fraction one half = fraction one half -->
+<!ENTITY frac34 "¾"> <!-- U+00BE ISOnum - vulgar fraction three quarters = fraction three quarters -->
+<!ENTITY iquest "¿"> <!-- U+00BF ISOnum - inverted question mark = turned question mark -->
+<!ENTITY Agrave "À"> <!-- U+00C0 ISOlat1 - latin capital letter A with grave = latin capital letter A grave -->
+<!ENTITY Aacute "Á"> <!-- U+00C1 ISOlat1 - latin capital letter A with acute -->
+<!ENTITY Acirc "Â"> <!-- U+00C2 ISOlat1 - latin capital letter A with circumflex -->
+<!ENTITY Atilde "Ã"> <!-- U+00C3 ISOlat1 - latin capital letter A with tilde -->
+<!ENTITY Auml "Ä"> <!-- U+00C4 ISOlat1 - latin capital letter A with diaeresis -->
+<!ENTITY Aring "Å"> <!-- U+00C5 ISOlat1 - latin capital letter A with ring above = latin capital letter A ring -->
+<!ENTITY AElig "Æ"> <!-- U+00C6 ISOlat1 - latin capital letter AE = latin capital ligature AE -->
+<!ENTITY Ccedil "Ç"> <!-- U+00C7 ISOlat1 - latin capital letter C with cedilla -->
+<!ENTITY Egrave "È"> <!-- U+00C8 ISOlat1 - latin capital letter E with grave -->
+<!ENTITY Eacute "É"> <!-- U+00C9 ISOlat1 - latin capital letter E with acute -->
+<!ENTITY Ecirc "Ê"> <!-- U+00CA ISOlat1 - latin capital letter E with circumflex -->
+<!ENTITY Euml "Ë"> <!-- U+00CB ISOlat1 - latin capital letter E with diaeresis -->
+<!ENTITY Igrave "Ì"> <!-- U+00CC ISOlat1 - latin capital letter I with grave -->
+<!ENTITY Iacute "Í"> <!-- U+00CD ISOlat1 - latin capital letter I with acute -->
+<!ENTITY Icirc "Î"> <!-- U+00CE ISOlat1 - latin capital letter I with circumflex -->
+<!ENTITY Iuml "Ï"> <!-- U+00CF ISOlat1 - latin capital letter I with diaeresis -->
+<!ENTITY ETH "Ð"> <!-- U+00D0 ISOlat1 - latin capital letter ETH -->
+<!ENTITY Ntilde "Ñ"> <!-- U+00D1 ISOlat1 - latin capital letter N with tilde -->
+<!ENTITY Ograve "Ò"> <!-- U+00D2 ISOlat1 - latin capital letter O with grave -->
+<!ENTITY Oacute "Ó"> <!-- U+00D3 ISOlat1 - latin capital letter O with acute -->
+<!ENTITY Ocirc "Ô"> <!-- U+00D4 ISOlat1 - latin capital letter O with circumflex -->
+<!ENTITY Otilde "Õ"> <!-- U+00D5 ISOlat1 - latin capital letter O with tilde -->
+<!ENTITY Ouml "Ö"> <!-- U+00D6 ISOlat1 - latin capital letter O with diaeresis -->
+<!ENTITY times "×"> <!-- U+00D7 ISOnum - multiplication sign -->
+<!ENTITY Oslash "Ø"> <!-- U+00D8 ISOlat1 - latin capital letter O with stroke = latin capital letter O slash -->
+<!ENTITY Ugrave "Ù"> <!-- U+00D9 ISOlat1 - latin capital letter U with grave -->
+<!ENTITY Uacute "Ú"> <!-- U+00DA ISOlat1 - latin capital letter U with acute -->
+<!ENTITY Ucirc "Û"> <!-- U+00DB ISOlat1 - latin capital letter U with circumflex -->
+<!ENTITY Uuml "Ü"> <!-- U+00DC ISOlat1 - latin capital letter U with diaeresis -->
+<!ENTITY Yacute "Ý"> <!-- U+00DD ISOlat1 - latin capital letter Y with acute -->
+<!ENTITY THORN "Þ"> <!-- U+00DE ISOlat1 - latin capital letter THORN -->
+<!ENTITY szlig "ß"> <!-- U+00DF ISOlat1 - latin small letter sharp s = ess-zed -->
+<!ENTITY agrave "à"> <!-- U+00E0 ISOlat1 - latin small letter a with grave = latin small letter a grave -->
+<!ENTITY aacute "á"> <!-- U+00E1 ISOlat1 - latin small letter a with acute -->
+<!ENTITY acirc "â"> <!-- U+00E2 ISOlat1 - latin small letter a with circumflex -->
+<!ENTITY atilde "ã"> <!-- U+00E3 ISOlat1 - latin small letter a with tilde -->
+<!ENTITY auml "ä"> <!-- U+00E4 ISOlat1 - latin small letter a with diaeresis -->
+<!ENTITY aring "å"> <!-- U+00E5 ISOlat1 - latin small letter a with ring above = latin small letter a ring -->
+<!ENTITY aelig "æ"> <!-- U+00E6 ISOlat1 - latin small letter ae = latin small ligature ae -->
+<!ENTITY ccedil "ç"> <!-- U+00E7 ISOlat1 - latin small letter c with cedilla -->
+<!ENTITY egrave "è"> <!-- U+00E8 ISOlat1 - latin small letter e with grave -->
+<!ENTITY eacute "é"> <!-- U+00E9 ISOlat1 - latin small letter e with acute -->
+<!ENTITY ecirc "ê"> <!-- U+00EA ISOlat1 - latin small letter e with circumflex -->
+<!ENTITY euml "ë"> <!-- U+00EB ISOlat1 - latin small letter e with diaeresis -->
+<!ENTITY igrave "ì"> <!-- U+00EC ISOlat1 - latin small letter i with grave -->
+<!ENTITY iacute "í"> <!-- U+00ED ISOlat1 - latin small letter i with acute -->
+<!ENTITY icirc "î"> <!-- U+00EE ISOlat1 - latin small letter i with circumflex -->
+<!ENTITY iuml "ï"> <!-- U+00EF ISOlat1 - latin small letter i with diaeresis -->
+<!ENTITY eth "ð"> <!-- U+00F0 ISOlat1 - latin small letter eth -->
+<!ENTITY ntilde "ñ"> <!-- U+00F1 ISOlat1 - latin small letter n with tilde -->
+<!ENTITY ograve "ò"> <!-- U+00F2 ISOlat1 - latin small letter o with grave -->
+<!ENTITY oacute "ó"> <!-- U+00F3 ISOlat1 - latin small letter o with acute -->
+<!ENTITY ocirc "ô"> <!-- U+00F4 ISOlat1 - latin small letter o with circumflex -->
+<!ENTITY otilde "õ"> <!-- U+00F5 ISOlat1 - latin small letter o with tilde -->
+<!ENTITY ouml "ö"> <!-- U+00F6 ISOlat1 - latin small letter o with diaeresis -->
+<!ENTITY divide "÷"> <!-- U+00F7 ISOnum - division sign -->
+<!ENTITY oslash "ø"> <!-- U+00F8 ISOlat1 - latin small letter o with stroke = latin small letter o slash -->
+<!ENTITY ugrave "ù"> <!-- U+00F9 ISOlat1 - latin small letter u with grave -->
+<!ENTITY uacute "ú"> <!-- U+00FA ISOlat1 - latin small letter u with acute -->
+<!ENTITY ucirc "û"> <!-- U+00FB ISOlat1 - latin small letter u with circumflex -->
+<!ENTITY uuml "ü"> <!-- U+00FC ISOlat1 - latin small letter u with diaeresis -->
+<!ENTITY yacute "ý"> <!-- U+00FD ISOlat1 - latin small letter y with acute -->
+<!ENTITY thorn "þ"> <!-- U+00FE ISOlat1 - latin small letter thorn -->
+<!ENTITY yuml "ÿ"> <!-- U+00FF ISOlat1 - latin small letter y with diaeresis -->
+
+
+<!-- C0 Controls and Basic Latin -->
+<!ENTITY quot """> <!-- U+0022 ISOnum - quotation mark = APL quote -->
+<!ENTITY amp "&"> <!-- U+0026 ISOnum - ampersand -->
+<!ENTITY lt "<"> <!-- U+003C ISOnum - less-than sign -->
+<!ENTITY gt ">"> <!-- U+003E ISOnum - greater-than sign -->
+
+<!-- Latin Extended-A -->
+<!ENTITY OElig "Œ"> <!-- U+0152 ISOlat2 - latin capital ligature OE -->
+<!ENTITY oelig "œ"> <!-- U+0153 ISOlat2 - latin small ligature oe -->
+
+<!-- ligature is a misnomer, this is a separate character in some languages -->
+<!ENTITY Scaron "Š"> <!-- U+0160 ISOlat2 - latin capital letter S with caron -->
+<!ENTITY scaron "š"> <!-- U+0161 ISOlat2 - latin small letter s with caron -->
+<!ENTITY Yuml "Ÿ"> <!-- U+0178 ISOlat2 - latin capital letter Y with diaeresis -->
+
+<!-- Spacing Modifier Letters -->
+<!ENTITY circ "ˆ" > <!-- U+02C6 ISOpub - modifier letter circumflex accent -->
+<!ENTITY tilde "˜" > <!-- U+02DC ISOdia - small tilde -->
+
+<!-- General Punctuation -->
+<!ENTITY ensp " "> <!-- U+2002 ISOpub - en space -->
+<!ENTITY emsp " "> <!-- U+2003 ISOpub - em space -->
+<!ENTITY thinsp " "> <!-- U+2009 ISOpub - thin space -->
+<!ENTITY zwnj ""> <!-- U+200C RFC 2070 - zero width non-joiner -->
+<!ENTITY zwj ""> <!-- U+200D RFC 2070 - zero width joiner -->
+<!ENTITY lrm ""> <!-- U+200E RFC 2070 - left-to-right mark -->
+<!ENTITY rlm ""> <!-- U+200F RFC 2070 - right-to-left mark -->
+<!ENTITY ndash "–"> <!-- U+2013 ISOpub - en dash -->
+<!ENTITY mdash "—"> <!-- U+2014 ISOpub - em dash -->
+<!ENTITY lsquo "‘"> <!-- U+2018 ISOnum - left single quotation mark -->
+<!ENTITY rsquo "’"> <!-- U+2019 ISOnum - right single quotation mark -->
+<!ENTITY sbquo "‚"> <!-- U+201A NEW - single low-9 quotation mark -->
+<!ENTITY ldquo "“"> <!-- U+201C ISOnum - left double quotation mark -->
+<!ENTITY rdquo "”"> <!-- U+201D ISOnum - right double quotation mark, -->
+<!ENTITY bdquo "„"> <!-- U+201E NEW - double low-9 quotation mark -->
+<!ENTITY dagger "†"> <!-- U+2020 ISOpub - dagger -->
+<!ENTITY Dagger "‡"> <!-- U+2021 ISOpub - double dagger -->
+<!ENTITY permil "‰"> <!-- U+2030 ISOtech - per mille sign -->
+<!ENTITY lsaquo "‹"> <!-- U+2039 ISO prop. - single left-pointing angle quotation mark -->
+
+<!-- lsaquo is proposed but not yet ISO standardized -->
+<!ENTITY rsaquo "›"> <!-- U+203A ISO prop. - single right-pointing angle quotation mark -->
+
+<!-- rsaquo is proposed but not yet ISO standardized -->
+<!ENTITY euro "€"> <!-- U+20AC NEW - euro sign -->
+
+<!-- Latin Extended-B -->
+<!ENTITY fnof "ƒ"> <!-- U+0192 ISOtech - latin small f with hook = function = florin -->
+
+<!-- Greek -->
+<!ENTITY Alpha "Α"> <!-- U+0391 - greek capital letter alpha -->
+<!ENTITY Beta "Β"> <!-- U+0392 - greek capital letter beta -->
+<!ENTITY Gamma "Γ"> <!-- U+0393 ISOgrk3 - greek capital letter gamma -->
+<!ENTITY Delta "Δ"> <!-- U+0394 ISOgrk3 - greek capital letter delta -->
+<!ENTITY Epsilon "Ε"> <!-- U+0395 - greek capital letter epsilon -->
+<!ENTITY Zeta "Ζ"> <!-- U+0396 - greek capital letter zeta -->
+<!ENTITY Eta "Η"> <!-- U+0397 - greek capital letter eta -->
+<!ENTITY Theta "Θ"> <!-- U+0398 ISOgrk3 - greek capital letter theta -->
+<!ENTITY Iota "Ι"> <!-- U+0399 - greek capital letter iota -->
+<!ENTITY Kappa "Κ"> <!-- U+039A - greek capital letter kappa -->
+<!ENTITY Lambda "Λ"> <!-- U+039B ISOgrk3 - greek capital letter lambda -->
+<!ENTITY Mu "Μ"> <!-- U+039C - greek capital letter mu -->
+<!ENTITY Nu "Ν"> <!-- U+039D - greek capital letter nu -->
+<!ENTITY Xi "Ξ"> <!-- U+039E ISOgrk3 - greek capital letter xi -->
+<!ENTITY Omicron "Ο"> <!-- U+039F - greek capital letter omicron -->
+<!ENTITY Pi "Π"> <!-- U+03A0 ISOgrk3 - greek capital letter pi -->
+<!ENTITY Rho "Ρ"> <!-- U+03A1 - greek capital letter rho -->
+<!ENTITY Sigma "Σ"> <!-- U+03A3 ISOgrk3 - greek capital letter sigma -->
+<!ENTITY Tau "Τ"> <!-- U+03A4 - greek capital letter tau -->
+<!ENTITY Upsilon "Υ"> <!-- U+03A5 ISOgrk3 - greek capital letter upsilon -->
+<!ENTITY Phi "Φ"> <!-- U+03A6 ISOgrk3 - greek capital letter phi -->
+<!ENTITY Chi "Χ"> <!-- U+03A7 - greek capital letter chi -->
+<!ENTITY Psi "Ψ"> <!-- U+03A8 ISOgrk3 - greek capital letter psi -->
+<!ENTITY Omega "Ω"> <!-- U+03A9 ISOgrk3 - greek capital letter omega -->
+<!ENTITY alpha "α"> <!-- U+03B1 ISOgrk3 - greek small letter alpha -->
+<!ENTITY beta "β"> <!-- U+03B2 ISOgrk3 - greek small letter beta -->
+<!ENTITY gamma "γ"> <!-- U+03B3 ISOgrk3 - greek small letter gamma -->
+<!ENTITY delta "δ"> <!-- U+03B4 ISOgrk3 - greek small letter delta -->
+<!ENTITY epsilon "ε"> <!-- U+03B5 ISOgrk3 - greek small letter epsilon -->
+<!ENTITY zeta "ζ"> <!-- U+03B6 ISOgrk3 - greek small letter zeta -->
+<!ENTITY eta "η"> <!-- U+03B7 ISOgrk3 - greek small letter eta -->
+<!ENTITY theta "θ"> <!-- U+03B8 ISOgrk3 - greek small letter theta -->
+<!ENTITY iota "ι"> <!-- U+03B9 ISOgrk3 - greek small letter iota -->
+<!ENTITY kappa "κ"> <!-- U+03BA ISOgrk3 - greek small letter kappa -->
+<!ENTITY lambda "λ"> <!-- U+03BB ISOgrk3 - greek small letter lambda -->
+<!ENTITY mu "μ"> <!-- U+03BC ISOgrk3 - greek small letter mu -->
+<!ENTITY nu "ν"> <!-- U+03BD ISOgrk3 - greek small letter nu -->
+<!ENTITY xi "ξ"> <!-- U+03BE ISOgrk3 - greek small letter xi -->
+<!ENTITY omicron "ο"> <!-- U+03BF NEW - greek small letter omicron -->
+<!ENTITY pi "π"> <!-- U+03C0 ISOgrk3 - greek small letter pi -->
+<!ENTITY rho "ρ"> <!-- U+03C1 ISOgrk3 - greek small letter rho -->
+<!ENTITY sigmaf "ς"> <!-- U+03C2 ISOgrk3 - greek small letter final sigma -->
+<!ENTITY sigma "σ"> <!-- U+03C3 ISOgrk3 - greek small letter sigma -->
+<!ENTITY tau "τ"> <!-- U+03C4 ISOgrk3 - greek small letter tau -->
+<!ENTITY upsilon "υ"> <!-- U+03C5 ISOgrk3 - greek small letter upsilon -->
+<!ENTITY phi "φ"> <!-- U+03C6 ISOgrk3 - greek small letter phi -->
+<!ENTITY chi "χ"> <!-- U+03C7 ISOgrk3 - greek small letter chi -->
+<!ENTITY psi "ψ"> <!-- U+03C8 ISOgrk3 - greek small letter psi -->
+<!ENTITY omega "ω"> <!-- U+03C9 ISOgrk3 - greek small letter omega -->
+<!ENTITY thetasym "ϑ"> <!-- U+03D1 NEW - greek small letter theta symbol -->
+<!ENTITY upsih "ϒ"> <!-- U+03D2 NEW - greek upsilon with hook symbol -->
+<!ENTITY piv "ϖ"> <!-- U+03D6 ISOgrk3 - greek pi symbol -->
+
+<!-- General Punctuation -->
+<!ENTITY bull "•"> <!-- U+2022 ISOpub - bullet = black small circle -->
+<!ENTITY hellip "…"> <!-- U+2026 ISOpub - horizontal ellipsis = three dot leader -->
+<!ENTITY prime "′"> <!-- U+2032 ISOtech - prime = minutes = feet -->
+<!ENTITY Prime "″"> <!-- U+2033 ISOtech - double prime = seconds = inches -->
+<!ENTITY oline "‾"> <!-- U+203E NEW - overline = spacing overscore -->
+<!ENTITY frasl "⁄"> <!-- U+2044 NEW - fraction slash -->
+
+<!-- Letterlike Symbols -->
+<!ENTITY weierp "℘"> <!-- U+2118 ISOamso - script capital P = power set = Weierstrass p -->
+<!ENTITY image "ℑ"> <!-- U+2111 ISOamso - blackletter capital I = imaginary part -->
+<!ENTITY real "ℜ"> <!-- U+211C ISOamso - blackletter capital R = real part symbol -->
+<!ENTITY trade "™"> <!-- U+2122 ISOnum - trade mark sign -->
+<!ENTITY alefsym "ℵ"> <!-- U+2135 NEW - alef symbol = first transfinite cardinal -->
+
+<!-- Arrows -->
+<!ENTITY larr "←"> <!-- U+2190 ISOnum - leftwards arrow -->
+<!ENTITY uarr "↑"> <!-- U+2191 ISOnum - upwards arrow -->
+<!ENTITY rarr "→"> <!-- U+2192 ISOnum - rightwards arrow -->
+<!ENTITY darr "↓"> <!-- U+2193 ISOnum - downwards arrow -->
+<!ENTITY harr "↔"> <!-- U+2194 ISOamsa - left right arrow -->
+<!ENTITY crarr "↵"> <!-- U+21B5 NEW - downwards arrow with corner leftwards = carriage return -->
+<!ENTITY lArr "⇐"> <!-- U+21D0 ISOtech - leftwards double arrow -->
+<!ENTITY uArr "⇑"> <!-- U+21D1 ISOamsa - upwards double arrow -->
+<!ENTITY rArr "⇒"> <!-- U+21D2 ISOtech - rightwards double arrow -->
+<!ENTITY dArr "⇓"> <!-- U+21D3 ISOamsa - downwards double arrow -->
+<!ENTITY hArr "⇔"> <!-- U+21D4 ISOamsa - left right double arrow -->
+
+<!-- Mathematical Operators -->
+<!ENTITY forall "∀"> <!-- U+2200 ISOtech - for all -->
+<!ENTITY part "∂"> <!-- U+2202 ISOtech - partial differential -->
+<!ENTITY exist "∃"> <!-- U+2203 ISOtech - there exists -->
+<!ENTITY empty "∅"> <!-- U+2205 ISOamso - empty set = null set = diameter -->
+<!ENTITY nabla "∇"> <!-- U+2207 ISOtech - nabla = backward difference -->
+<!ENTITY isin "∈"> <!-- U+2208 ISOtech - element of -->
+<!ENTITY notin "∉"> <!-- U+2209 ISOtech - not an element of -->
+<!ENTITY ni "∋"> <!-- U+220B ISOtech - contains as member -->
+<!ENTITY prod "∏"> <!-- U+220F ISOamsb - n-ary product = product sign -->
+<!ENTITY sum "∑"> <!-- U+2211 ISOamsb - n-ary sumation -->
+<!ENTITY minus "−"> <!-- U+2212 ISOtech - minus sign -->
+<!ENTITY lowast "∗"> <!-- U+2217 ISOtech - asterisk operator -->
+<!ENTITY radic "√"> <!-- U+221A ISOtech - square root = radical sign -->
+<!ENTITY prop "∝"> <!-- U+221D ISOtech - proportional to -->
+<!ENTITY infin "∞"> <!-- U+221E ISOtech - infinity -->
+<!ENTITY ang "∠"> <!-- U+2220 ISOamso - angle -->
+<!ENTITY and "∧"> <!-- U+2227 ISOtech - logical and = wedge -->
+<!ENTITY or "∨"> <!-- U+2228 ISOtech - logical or = vee -->
+<!ENTITY cap "∩"> <!-- U+2229 ISOtech - intersection = cap -->
+<!ENTITY cup "∪"> <!-- U+222A ISOtech - union = cup -->
+<!ENTITY int "∫"> <!-- U+222B ISOtech - integral -->
+<!ENTITY there4 "∴"> <!-- U+2234 ISOtech - therefore -->
+<!ENTITY sim "∼"> <!-- U+223C ISOtech - tilde operator = varies with = similar to -->
+<!ENTITY cong "≅"> <!-- U+2245 ISOtech - approximately equal to -->
+<!ENTITY asymp "≈"> <!-- U+2248 ISOamsr - almost equal to = asymptotic to -->
+<!ENTITY ne "≠"> <!-- U+2260 ISOtech - not equal to -->
+<!ENTITY equiv "≡"> <!-- U+2261 ISOtech - identical to -->
+<!ENTITY le "≤"> <!-- U+2264 ISOtech - less-than or equal to -->
+<!ENTITY ge "≥"> <!-- U+2265 ISOtech - greater-than or equal to -->
+<!ENTITY sub "⊂"> <!-- U+2282 ISOtech - subset of -->
+<!ENTITY sup "⊃"> <!-- U+2283 ISOtech - superset of -->
+<!ENTITY nsub "⊄"> <!-- U+2284 ISOamsn - not a subset of -->
+<!ENTITY sube "⊆"> <!-- U+2286 ISOtech - subset of or equal to -->
+<!ENTITY supe "⊇"> <!-- U+2287 ISOtech - superset of or equal to -->
+<!ENTITY oplus "⊕"> <!-- U+2295 ISOamsb - circled plus = direct sum -->
+<!ENTITY otimes "⊗"> <!-- U+2297 ISOamsb - circled times = vector product -->
+<!ENTITY perp "⊥"> <!-- U+22A5 ISOtech - up tack = orthogonal to = perpendicular -->
+<!ENTITY sdot "⋅"> <!-- U+22C5 ISOamsb - dot operator -->
+
+<!-- Miscellaneous Technical -->
+<!ENTITY lceil "⌈"> <!-- U+2308 ISOamsc - left ceiling = apl upstile -->
+<!ENTITY rceil "⌉"> <!-- U+2309 ISOamsc - right ceiling -->
+<!ENTITY lfloor "⌊"> <!-- U+230A ISOamsc - left floor = apl downstile -->
+<!ENTITY rfloor "⌋"> <!-- U+230B ISOamsc - right floor -->
+<!ENTITY lang "〈"> <!-- U+2329 ISOtech - left-pointing angle bracket = bra -->
+<!ENTITY rang "〉"> <!-- U+232A ISOtech - right-pointing angle bracket = ket -->
+
+<!-- Geometric Shapes -->
+<!ENTITY loz "◊"> <!-- U+25CA ISOpub - lozenge -->
+
+<!-- Miscellaneous Symbols -->
+<!ENTITY spades "♠"> <!-- U+2660 ISOpub - black spade suit -->
+<!ENTITY clubs "♣"> <!-- U+2663 ISOpub - black club suit = shamrock -->
+<!ENTITY hearts "♥"> <!-- U+2665 ISOpub - black heart suit = valentine -->
+<!ENTITY diams "♦"> <!-- U+2666 ISOpub - black diamond suit -->
+
+<!-- CVS $Revision: 313264 $ $Date: 2000-05-24 23:41:43 +0200 (ons, 24 maj 2000) $ -->
+
+<!-- Portions (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies. -->
diff --git a/styles/ibm-style/dtd/document.dtd b/styles/ibm-style/dtd/document.dtd
new file mode 100644
index 0000000..49e031e
--- /dev/null
+++ b/styles/ibm-style/dtd/document.dtd
@@ -0,0 +1,19 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- STYLEBOOK DOCUMENT DTD -->
+
+<!-- import the external blocks.ent dtd -->
+<!ENTITY % blocksEntity SYSTEM "blocks.ent">
+%blocksEntity;
+
+<!ELEMENT s1 (s2|%blocks;)*>
+<!ELEMENT s2 (s3|%blocks;)*>
+<!ELEMENT s3 (s4|%blocks;)*>
+<!ELEMENT s4 (%blocks;)*>
+
+<!ATTLIST s1 title CDATA #REQUIRED>
+<!ATTLIST s2 title CDATA #REQUIRED>
+<!ATTLIST s3 title CDATA #REQUIRED>
+<!ATTLIST s4 title CDATA #REQUIRED>
+
+<!-- CVS $Revision: 313264 $ $Date: 2000-05-24 23:41:43 +0200 (ons, 24 maj 2000) $ -->
\ No newline at end of file
diff --git a/styles/ibm-style/dtd/faqs.dtd b/styles/ibm-style/dtd/faqs.dtd
new file mode 100644
index 0000000..f6727c7
--- /dev/null
+++ b/styles/ibm-style/dtd/faqs.dtd
@@ -0,0 +1,19 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- STYLEBOOK FAQS DTD -->
+
+<!-- import the external blocks.ent dtd -->
+<!ENTITY % blocksEntity SYSTEM "blocks.ent">
+%blocksEntity;
+
+<!ELEMENT faqs (faq)+>
+<!ATTLIST faqs title CDATA #REQUIRED>
+
+<!ELEMENT faq (q,a)>
+<!ATTLIST faq title CDATA #IMPLIED>
+
+
+<!ELEMENT q (#PCDATA)>
+<!ELEMENT a (%blocks;)+>
+
+<!-- CVS $Revision: 313264 $ $Date: 2000-05-24 23:41:43 +0200 (ons, 24 maj 2000) $ -->
\ No newline at end of file
diff --git a/styles/ibm-style/dtd/links.ent b/styles/ibm-style/dtd/links.ent
new file mode 100644
index 0000000..98b9ab8
--- /dev/null
+++ b/styles/ibm-style/dtd/links.ent
@@ -0,0 +1,20 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- LINKS ENTITY -->
+<!ENTITY % links "link|anchor|jump|img">
+
+<!ELEMENT anchor EMPTY>
+<!ATTLIST anchor name NMTOKEN #REQUIRED>
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img src CDATA #REQUIRED
+ alt CDATA #REQUIRED>
+
+<!ELEMENT link (#PCDATA|img)*>
+<!ATTLIST link idref NMTOKEN #IMPLIED
+ anchor CDATA #IMPLIED>
+
+<!ELEMENT jump (#PCDATA|img)*>
+<!ATTLIST jump href CDATA #REQUIRED>
+
+<!-- CVS $Revision: 313264 $ $Date: 2000-05-24 23:41:43 +0200 (ons, 24 maj 2000) $ -->
\ No newline at end of file
diff --git a/styles/ibm-style/dtd/markup.ent b/styles/ibm-style/dtd/markup.ent
new file mode 100644
index 0000000..8ffb843
--- /dev/null
+++ b/styles/ibm-style/dtd/markup.ent
@@ -0,0 +1,21 @@
+<?xml encoding='US-ASCII'?>
+
+<!-- MARKUP ENTITY -->
+<!ENTITY % markup "em|ref|code|br">
+
+<!-- import the external source-specific dtd -->
+<!ENTITY % externalEntity SYSTEM "sbk:/sources/entities.ent">
+%externalEntity;
+<!-- import the external charecters.ent dtd -->
+<!ENTITY % charEntity SYSTEM "characters.ent">
+%charEntity;
+<!-- import the external links.ent dtd -->
+<!ENTITY % linksEntity SYSTEM "links.ent">
+%linksEntity;
+
+<!ELEMENT em (#PCDATA|%links;)*>
+<!ELEMENT ref (#PCDATA|%links;)*>
+<!ELEMENT code (#PCDATA|%links;)*>
+<!ELEMENT br EMPTY>
+
+<!-- CVS $Revision: 313264 $ $Date: 2000-05-24 23:41:43 +0200 (ons, 24 maj 2000) $ -->
\ No newline at end of file
diff --git a/styles/ibm-style/graphics/footer.gif b/styles/ibm-style/graphics/footer.gif
new file mode 100644
index 0000000..999015d
Binary files /dev/null and b/styles/ibm-style/graphics/footer.gif differ
diff --git a/styles/ibm-style/graphics/header.gif b/styles/ibm-style/graphics/header.gif
new file mode 100644
index 0000000..fbe4a1c
Binary files /dev/null and b/styles/ibm-style/graphics/header.gif differ
diff --git a/styles/ibm-style/graphics/label-1.gif b/styles/ibm-style/graphics/label-1.gif
new file mode 100644
index 0000000..879f79d
Binary files /dev/null and b/styles/ibm-style/graphics/label-1.gif differ
diff --git a/styles/ibm-style/graphics/label-2.gif b/styles/ibm-style/graphics/label-2.gif
new file mode 100644
index 0000000..8adbd07
Binary files /dev/null and b/styles/ibm-style/graphics/label-2.gif differ
diff --git a/styles/ibm-style/graphics/label-3.gif b/styles/ibm-style/graphics/label-3.gif
new file mode 100644
index 0000000..5d41d36
Binary files /dev/null and b/styles/ibm-style/graphics/label-3.gif differ
diff --git a/styles/ibm-style/loader.xml b/styles/ibm-style/loader.xml
new file mode 100644
index 0000000..3efa3c5
--- /dev/null
+++ b/styles/ibm-style/loader.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+
+<!-- CVS $Revision: 313264 $ $Date: 2000-05-24 23:41:43 +0200 (ons, 24 maj 2000) $ -->
+
+<loader>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/book2project.xsl"/>
+ </processor>
+</loader>
diff --git a/styles/ibm-style/resources/button-awk-0.gif b/styles/ibm-style/resources/button-awk-0.gif
new file mode 100644
index 0000000..0023491
Binary files /dev/null and b/styles/ibm-style/resources/button-awk-0.gif differ
diff --git a/styles/ibm-style/resources/button-awk-1.gif b/styles/ibm-style/resources/button-awk-1.gif
new file mode 100644
index 0000000..7784478
Binary files /dev/null and b/styles/ibm-style/resources/button-awk-1.gif differ
diff --git a/styles/ibm-style/resources/button-dev-0.gif b/styles/ibm-style/resources/button-dev-0.gif
new file mode 100644
index 0000000..0a65a18
Binary files /dev/null and b/styles/ibm-style/resources/button-dev-0.gif differ
diff --git a/styles/ibm-style/resources/button-dev-1.gif b/styles/ibm-style/resources/button-dev-1.gif
new file mode 100644
index 0000000..8d66448
Binary files /dev/null and b/styles/ibm-style/resources/button-dev-1.gif differ
diff --git a/styles/ibm-style/resources/button-ibm-0.gif b/styles/ibm-style/resources/button-ibm-0.gif
new file mode 100644
index 0000000..7878669
Binary files /dev/null and b/styles/ibm-style/resources/button-ibm-0.gif differ
diff --git a/styles/ibm-style/resources/button-ibm-1.gif b/styles/ibm-style/resources/button-ibm-1.gif
new file mode 100644
index 0000000..c87309a
Binary files /dev/null and b/styles/ibm-style/resources/button-ibm-1.gif differ
diff --git a/styles/ibm-style/resources/note.gif b/styles/ibm-style/resources/note.gif
new file mode 100644
index 0000000..3394222
Binary files /dev/null and b/styles/ibm-style/resources/note.gif differ
diff --git a/styles/ibm-style/resources/script.js b/styles/ibm-style/resources/script.js
new file mode 100644
index 0000000..1bf24c7
--- /dev/null
+++ b/styles/ibm-style/resources/script.js
@@ -0,0 +1,17 @@
+rolloverImagesOn=new Array();
+rolloverImagesOff=new Array();
+
+function rolloverOn(name) {
+ document.images[name].src=rolloverImagesOn[name].src;
+}
+
+function rolloverOff(name) {
+ document.images[name].src=rolloverImagesOff[name].src;
+}
+
+function rolloverLoad(name,on,off) {
+ rolloverImagesOn[name]=new Image();
+ rolloverImagesOn[name].src=on;
+ rolloverImagesOff[name]=new Image();
+ rolloverImagesOff[name].src=off;
+}
diff --git a/styles/ibm-style/resources/separator.gif b/styles/ibm-style/resources/separator.gif
new file mode 100644
index 0000000..178294d
Binary files /dev/null and b/styles/ibm-style/resources/separator.gif differ
diff --git a/styles/ibm-style/resources/topbar.gif b/styles/ibm-style/resources/topbar.gif
new file mode 100644
index 0000000..7e8d016
Binary files /dev/null and b/styles/ibm-style/resources/topbar.gif differ
diff --git a/styles/ibm-style/resources/void.gif b/styles/ibm-style/resources/void.gif
new file mode 100644
index 0000000..75b945d
Binary files /dev/null and b/styles/ibm-style/resources/void.gif differ
diff --git a/styles/ibm-style/stylesheets/any2header.xsl b/styles/ibm-style/stylesheets/any2header.xsl
new file mode 100644
index 0000000..ff338ca
--- /dev/null
+++ b/styles/ibm-style/stylesheets/any2header.xsl
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="label"/>
+
+ <xsl:template match="/">
+ <image source="sbk:/style/graphics/header.gif">
+ <xsl:apply-templates/>
+ </image>
+ </xsl:template>
+
+ <xsl:template match="s1|faqs|changes">
+ <xsl:variable name="title">
+ <xsl:if test="string-length(@title)=0">
+ <xsl:value-of select="$label"/>
+ </xsl:if>
+ <xsl:if test="string-length(@title)>0">
+ <xsl:value-of select="@title"/>
+ </xsl:if>
+ </xsl:variable>
+ <text font="Times New Roman Bold" size="40" x="607" y="12" style="plain"
+ halign="right" valign="top" color="000000" text="{$title}"/>
+ <text font="Times New Roman Bold" size="40" x="606" y="11" style="plain"
+ halign="right" valign="top" color="000000" text="{$title}"/>
+ <text font="Times New Roman Bold" size="40" x="605" y="10" style="plain"
+ halign="right" valign="top" color="ffffff" text="{$title}"/>
+ </xsl:template>
+
+<!--
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+-->
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/ibm-style/stylesheets/any2project.xsl b/styles/ibm-style/stylesheets/any2project.xsl
new file mode 100644
index 0000000..d1253f1
--- /dev/null
+++ b/styles/ibm-style/stylesheets/any2project.xsl
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="label"/>
+
+ <xsl:template match="/">
+ <project>
+ <xsl:apply-templates/>
+ </project>
+ </xsl:template>
+
+ <xsl:template match="img">
+ <resource source="{@src}" target="images/{@src}"/>
+ </xsl:template>
+
+ <xsl:template match="node()">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/ibm-style/stylesheets/book2group.xsl b/styles/ibm-style/stylesheets/book2group.xsl
new file mode 100644
index 0000000..1c1f049
--- /dev/null
+++ b/styles/ibm-style/stylesheets/book2group.xsl
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="id"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="book">
+ <group title="{group[attribute::id=$id]/@label}">
+ <xsl:apply-templates select="group[attribute::id=$id]/entry"/>
+ </group>
+ </xsl:template>
+
+ <xsl:template match="entry">
+ <entry id="{@id}" title="{document(concat('sbk:/sources/', at source))/faqs/@title}">
+ <xsl:apply-templates select="document(concat('sbk:/sources/', at source))/faqs/faq"/>
+ </entry>
+ </xsl:template>
+
+ <xsl:template match="faq">
+ <voice>
+ <xsl:if test="string-length(@title)=0">
+ <xsl:value-of select="q"/>
+ </xsl:if>
+ <xsl:if test="string-length(@title)>0">
+ <xsl:value-of select="@title"/>
+ </xsl:if>
+ </voice>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/ibm-style/stylesheets/book2project.xsl b/styles/ibm-style/stylesheets/book2project.xsl
new file mode 100644
index 0000000..b0a0769
--- /dev/null
+++ b/styles/ibm-style/stylesheets/book2project.xsl
@@ -0,0 +1,303 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <!-- match the root book element -->
+ <xsl:template match="book">
+ <project>
+
+ <!-- create the footer image stating the copyright -->
+ <create source="" target="graphics/footer.jpg" producer="context" printer="image">
+ <parameter name="copyright" value="{@copyright}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2footer.xsl"/>
+ </processor>
+ </create>
+
+ <!-- copy all resources to the targets -->
+ <process source="sbk:/style/resources/" producer="directory">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/directory2project.xsl"/>
+ <parameter name="base" value="resources/"/>
+ </processor>
+ </process>
+
+ <xsl:apply-templates/>
+
+ </project>
+ </xsl:template>
+
+<!-- ********************************************************************** -->
+<!-- CREATE THE TARGET HTML -->
+<!-- ********************************************************************** -->
+
+ <xsl:template match="document">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="hidden">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="faqs">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/faqs2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="changes">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/changes2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="group">
+ <xsl:apply-templates/>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="" target="{@id}.html" producer="project" printer="html">
+ <parameter name="id" value="{@id}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/book2group.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/group2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+ <xsl:template match="container">
+
+ <xsl:apply-templates/>
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="entry">
+
+ <process source="{@source}" producer="parser">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2project.xsl"/>
+ </processor>
+ </process>
+
+ <xsl:call-template name="header">
+ <xsl:with-param name="id" select="@id"/>
+ <xsl:with-param name="source" select="@source"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ <create source="{@source}" target="{@id}.html" producer="parser" printer="html">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/faqs2document.xsl"/>
+ </processor>
+ <processor name="xslt">
+ <parameter name="id" value="{@id}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/document2html.xsl"/>
+ </processor>
+ </create>
+
+ </xsl:template>
+
+ <xsl:template match="external">
+
+ <xsl:call-template name="labels">
+ <xsl:with-param name="id" select="concat('ext-',position())"/>
+ <xsl:with-param name="label" select="@label"/>
+ </xsl:call-template>
+
+ </xsl:template>
+
+<!-- ********************************************************************** -->
+<!-- NAMED TEMPLATES -->
+<!-- ********************************************************************** -->
+
+<!-- Generate the doument header image -->
+ <xsl:template name="header">
+ <xsl:param name="id"/>
+ <xsl:param name="source"/>
+ <xsl:param name="label"/>
+
+ <create source="{$source}" target="graphics/{$id}-header.jpg" producer="parser" printer="image">
+ <processor name="xslt">
+ <parameter name="label" value="{$label}"/>
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/any2header.xsl"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+<!-- Generate the three rollover label images -->
+ <xsl:template name="labels">
+ <xsl:param name="id"/>
+ <xsl:param name="label"/>
+
+ <create source="" target="graphics/{$id}-label-1.jpg" producer="context" printer="image">
+ <parameter name="label" value="{$label}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2label.xsl"/>
+ <parameter name="image" value="sbk:/style/graphics/label-1.gif"/>
+ <parameter name="highlight" value="ffffff"/>
+ <parameter name="shadow1" value="333366"/>
+ <parameter name="shadow2" value="666699"/>
+ </processor>
+ </create>
+
+ <create source="" target="graphics/{$id}-label-2.jpg" producer="context" printer="image">
+ <parameter name="label" value="{$label}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2label.xsl"/>
+ <parameter name="image" value="sbk:/style/graphics/label-2.gif"/>
+ <parameter name="highlight" value="ffffff"/>
+ <parameter name="shadow1" value="333333"/>
+ <parameter name="shadow2" value="666666"/>
+ </processor>
+ </create>
+
+ <create source="" target="graphics/{$id}-label-3.jpg" producer="context" printer="image">
+ <parameter name="label" value="{$label}"/>
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/context2label.xsl"/>
+ <parameter name="image" value="sbk:/style/graphics/label-3.gif"/>
+ <parameter name="highlight" value="ffffff"/>
+ <parameter name="shadow1" value="333366"/>
+ <parameter name="shadow2" value="666699"/>
+ </processor>
+ </create>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/ibm-style/stylesheets/changes2document.xsl b/styles/ibm-style/stylesheets/changes2document.xsl
new file mode 100644
index 0000000..ed1f3f3
--- /dev/null
+++ b/styles/ibm-style/stylesheets/changes2document.xsl
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="changes">
+ <s1 title="{@title}">
+ <xsl:apply-templates/>
+ </s1>
+ </xsl:template>
+
+ <xsl:template match="release">
+ <s2 title="Release {@version} {@date}">
+ <br/><xsl:apply-templates/>
+ </s2>
+ </xsl:template>
+
+ <xsl:template match="features">
+ <s3 title="Features">
+ <ul><xsl:apply-templates/></ul>
+ </s3>
+ </xsl:template>
+
+ <xsl:template match="fixes">
+ <s3 title="Bugs fixed">
+ <ul><xsl:apply-templates/></ul>
+ </s3>
+ </xsl:template>
+
+ <xsl:template match="feat|fix">
+ <li><xsl:apply-templates/></li>
+ </xsl:template>
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/ibm-style/stylesheets/context2footer.xsl b/styles/ibm-style/stylesheets/context2footer.xsl
new file mode 100644
index 0000000..2fc8d5f
--- /dev/null
+++ b/styles/ibm-style/stylesheets/context2footer.xsl
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="context">
+ <image source="sbk:/style/graphics/footer.gif">
+ <xsl:apply-templates/>
+ </image>
+ </xsl:template>
+
+ <xsl:template match="parameter">
+ <xsl:if test="@name='copyright'">
+ <text font="Arial Bold" size="11" x="124" y="6" style="plain"
+ halign="left" valign="top" color="666699"
+ text="Copyright © {@value}. All Rights Reserved."/>
+ <text font="Arial Bold" size="11" x="123" y="5" style="plain"
+ halign="left" valign="top" color="333366"
+ text="Copyright © {@value}. All Rights Reserved."/>
+ <text font="Arial Bold" size="11" x="122" y="4" style="plain"
+ halign="left" valign="top" color="ffffff"
+ text="Copyright © {@value}. All Rights Reserved."/>
+ </xsl:if>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/ibm-style/stylesheets/context2label.xsl b/styles/ibm-style/stylesheets/context2label.xsl
new file mode 100644
index 0000000..5dea068
--- /dev/null
+++ b/styles/ibm-style/stylesheets/context2label.xsl
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="image"/>
+ <xsl:param name="highlight"/>
+ <xsl:param name="shadow1"/>
+ <xsl:param name="shadow2"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="context">
+ <image source="{$image}">
+ <xsl:apply-templates/>
+ </image>
+ </xsl:template>
+
+ <xsl:template match="parameter">
+ <xsl:if test="@name='label'">
+ <text font="Arial Bold" size="11" x="20" y="6" style="plain"
+ halign="left" valign="top" color="{$shadow2}"
+ text="{@value}"/>
+ <text font="Arial Bold" size="11" x="19" y="5" style="plain"
+ halign="left" valign="top" color="{$shadow1}"
+ text="{@value}"/>
+ <text font="Arial Bold" size="11" x="18" y="4" style="plain"
+ halign="left" valign="top" color="{$highlight}"
+ text="{@value}"/>
+ </xsl:if>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/ibm-style/stylesheets/directory2project.xsl b/styles/ibm-style/stylesheets/directory2project.xsl
new file mode 100644
index 0000000..4995828
--- /dev/null
+++ b/styles/ibm-style/stylesheets/directory2project.xsl
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="base"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="directory">
+ <project>
+ <xsl:apply-templates/>
+ </project>
+ </xsl:template>
+
+ <xsl:template match="entry">
+
+ <xsl:if test="@directory!='true'">
+ <resource source="{@href}" target="{$base}{@href}"/>
+ </xsl:if>
+<!-- don't copy subdir to avoid copying proprietary CVS files
+ <xsl:if test="@directory='true'">
+ <process source="{@href}" producer="directory">
+ <processor name="xslt">
+ <parameter name="stylesheet" value="sbk:/style/stylesheets/directory2project.xsl"/>
+ <parameter name="base" value="{$base}{@href}"/>
+ </processor>
+ </process>
+ </xsl:if>
+-->
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/ibm-style/stylesheets/document2html.xsl b/styles/ibm-style/stylesheets/document2html.xsl
new file mode 100644
index 0000000..7641852
--- /dev/null
+++ b/styles/ibm-style/stylesheets/document2html.xsl
@@ -0,0 +1,387 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:param name="stylebook.project"/>
+ <xsl:param name="id"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="s1">
+ <html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
+ <script language="JavaScript" type="text/javascript" src="resources/script.js"/>
+ <title><xsl:value-of select="@title"/></title>
+ </head>
+ <body bgcolor="#000000" text="#000000" link="#0000ff" vlink="#0000ff" alink="#ff0000"
+ topmargin="5" leftmargin="5" marginwidth="5" marginheight="5">
+ <table width="620" bgcolor="#000000" cellspacing="0" cellpadding="0" border="0">
+ <!-- THE TOP BAR (HEADER) -->
+ <tr>
+ <td colspan="2">
+ <img src="graphics/{$id}-header.jpg" width="620" height="50" vspace="0" hspace="0" border="0" align="left" alt="{s1/@title}"/>
+ </td>
+ </tr>
+ <!-- THE LINK BUTTONS BAR (IBM LINKS) -->
+ <tr>
+ <td colspan="2">
+ <img src="resources/topbar.gif" width="200" height="17" vspace="0" hspace="0" border="0" align="left" alt=""/>
+ <a href="http://www.alphaworks.ibm.com/" onMouseOver="rolloverOn('awk');" onMouseOut="rolloverOff('awk');" target="new">
+ <img alt="www.alphaworks.ibm.com" onLoad="rolloverLoad('awk','resources/button-awk-1.gif','resources/button-awk-0.gif');"
+ name="awk" src="resources/button-awk-0.gif" width="140" height="17" vspace="0" hspace="0" border="0" align="left"/>
+ </a>
+ <a href="http://www.ibm.com/developer/" onMouseOver="rolloverOn('dev');" onMouseOut="rolloverOff('dev');" target="new">
+ <img alt="www.ibm.com/developer" onLoad="rolloverLoad('dev','resources/button-dev-1.gif','resources/button-dev-0.gif');"
+ name="dev" src="resources/button-dev-0.gif" width="140" height="17" vspace="0" hspace="0" border="0" align="left"/>
+ </a>
+ <a href="http://www.ibm.com/" onMouseOver="rolloverOn('ibm');" onMouseOut="rolloverOff('ibm');" target="new">
+ <img alt="www.ibm.com" onLoad="rolloverLoad('ibm','resources/button-ibm-1.gif','resources/button-ibm-0.gif');"
+ name="ibm" src="resources/button-ibm-0.gif" width="140" height="17" vspace="0" hspace="0" border="0" align="left"/>
+ </a>
+ </td>
+ </tr>
+ <!-- THE MAIN PANEL (SIDEBAR AND CONTENT) -->
+ <tr>
+ <!-- THE SIDE BAR -->
+ <td width="120" bgcolor="#999999" valign="top">
+ <img src="resources/void.gif" width="114" height="2" vspace="0" hspace="3" border="0" alt=""/><br/>
+ <xsl:apply-templates select="document($stylebook.project)"/>
+ <img src="resources/void.gif" width="114" height="2" vspace="0" hspace="3" border="0" alt=""/><br/>
+ </td>
+ <!-- THE CONTENT -->
+ <td width="500" bgcolor="#ffffff" valign="top">
+ <table width="500" cellspacing="3" cellpadding="0" border="0">
+ <tr>
+ <td>
+ <font face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" bgcolor="#9999cc"><img src="graphics/footer.jpg" vspace="0" hspace="0" border="0" align="left"/></td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- book -->
+
+ <xsl:template match="book">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="document|faqs|changes|group|container">
+ <xsl:if test="@id=$id">
+ <img src="graphics/{@id}-label-1.jpg" width="114" height="17" vspace="0" hspace="3" border="0" alt="{@label}"/>
+ </xsl:if>
+ <xsl:if test="@id!=$id">
+ <a href="{@id}.html" onMouseOver="rolloverOn('side-{@id}');" onMouseOut="rolloverOff('side-{@id}');">
+ <img onLoad="rolloverLoad('side-{@id}','graphics/{@id}-label-2.jpg','graphics/{@id}-label-3.jpg');"
+ name="side-{@id}" src="graphics/{@id}-label-3.jpg" vspace="0" hspace="3" border="0" alt="{@label}"/>
+ </a>
+ </xsl:if>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="external">
+ <xsl:variable name="extid" select="concat('ext-',position())"/>
+ <a href="{@href}" onMouseOver="rolloverOn('side-{$extid}');" onMouseOut="rolloverOff('side-{$extid}');">
+ <img onLoad="rolloverLoad('side-{$extid}','graphics/{$extid}-label-2.jpg','graphics/{$extid}-label-3.jpg');"
+ name="side-{$extid}" src="graphics/{$extid}-label-3.jpg" vspace="0" hspace="3" border="0" alt="{@label}"/>
+ </a>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="separator">
+ <img src="resources/separator.gif" width="114" height="9" vspace="0" hspace="3" border="0"/><br/>
+ </xsl:template>
+
+
+<!-- ###################################################################### -->
+<!-- document -->
+
+ <xsl:template match="s2">
+ <table width="494" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="666699" colspan="2" width="494">
+ <table width="494" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="#ccccff" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#ccccff" width="492" height="1"><img src="resources/void.gif" width="492" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#666699" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ccccff" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#666699" width="492">
+ <font size="+1" face="arial,helvetica,sanserif" color="#ffffff">
+ <img src="resources/void.gif" width="2" height="2" vspace="0" hspace="0" border="0"/>
+ <b><xsl:value-of select="@title"/></b>
+ </font>
+ </td>
+ <td bgcolor="#333366" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#666699" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#333366" width="492" height="1"><img src="resources/void.gif" width="492" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#333366" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="10"> </td>
+ <td width="484">
+ <font face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="s3">
+ <table width="484" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="666699" colspan="2" width="484">
+ <table width="484" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="#ccccff" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#ccccff" width="482" height="1"><img src="resources/void.gif" width="482" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#666699" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ccccff" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#666699" width="482">
+ <font face="arial,helvetica,sanserif" color="#ffffff">
+ <img src="resources/void.gif" width="2" height="2" vspace="0" hspace="0" border="0"/>
+ <b><xsl:value-of select="@title"/></b>
+ </font>
+ </td>
+ <td bgcolor="#333366" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#666699" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#333366" width="482" height="1"><img src="resources/void.gif" width="482" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#333366" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="10"> </td>
+ <td width="474">
+ <font size="-1" face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:template>
+
+ <xsl:template match="s4">
+ <table width="474" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="666699" colspan="2" width="484">
+ <table width="474" cellspacing="0" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="#ccccff" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#ccccff" width="472" height="1"><img src="resources/void.gif" width="472" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#666699" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ccccff" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#666699" width="472">
+ <font size="-1" face="arial,helvetica,sanserif" color="#ffffff">
+ <img src="resources/void.gif" width="2" height="2" vspace="0" hspace="0" border="0"/>
+ <b><xsl:value-of select="@title"/></b>
+ </font>
+ </td>
+ <td bgcolor="#333366" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#666699" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#333366" width="472" height="1"><img src="resources/void.gif" width="472" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#333366" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="10"> </td>
+ <td width="464">
+ <font size="-1" face="arial,helvetica,sanserif" color="#000000">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- blocks -->
+
+ <xsl:template match="p">
+ <p><xsl:apply-templates/></p>
+ </xsl:template>
+
+ <xsl:template match="note">
+ <table width="100%" cellspacing="3" cellpadding="0" border="0">
+ <tr>
+ <td width="20" valign="top">
+ <img src="resources/note.gif" width="20" height="24" vspace="0" hspace="0" border="0" alt="Note"/>
+ </td>
+ <td valign="top">
+ <font size="-1" face="arial,helvetica,sanserif" color="#000000">
+ <i>
+ <xsl:apply-templates/>
+ </i>
+ </font>
+ </td>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="ul">
+ <ul><xsl:apply-templates/></ul>
+ </xsl:template>
+
+ <xsl:template match="ol">
+ <ol><xsl:apply-templates/></ol>
+ </xsl:template>
+
+ <xsl:template match="li">
+ <li><xsl:apply-templates/></li>
+ </xsl:template>
+
+ <xsl:template match="source">
+ <div align="right">
+ <table width="464" cellspacing="4" cellpadding="0" border="0">
+ <tr>
+ <td bgcolor="#666699" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#666699" width="462" height="1"><img src="resources/void.gif" width="462" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#666699" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#666699" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#ffffff" width="462">
+ <font size="-1"><pre><xsl:apply-templates/></pre></font>
+ </td>
+ <td bgcolor="#666699" width="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ <tr>
+ <td bgcolor="#666699" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#666699" width="462" height="1"><img src="resources/void.gif" width="462" height="1" vspace="0" hspace="0" border="0"/></td>
+ <td bgcolor="#666699" width="1" height="1"><img src="resources/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
+ </tr>
+ </table>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="table">
+ <table width="100%" border="0" cellspacing="2" cellpadding="2">
+ <xsl:apply-templates/>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="tr">
+ <tr><xsl:apply-templates/></tr>
+ </xsl:template>
+
+ <xsl:template match="th">
+ <td bgcolor="#9999cc" colspan="{@colspan}" rowspan="{@rowspan}" valign="center" align="center">
+ <font color="#ffffff" size="-1" face="arial,helvetica,sanserif">
+ <b><xsl:apply-templates/></b>
+ </font>
+ </td>
+ </xsl:template>
+
+ <xsl:template match="td">
+ <td bgcolor="#ccccff" colspan="{@colspan}" rowspan="{@rowspan}" valign="top" align="{@align}">
+ <font color="#000000" size="-1" face="arial,helvetica,sanserif">
+ <xsl:apply-templates/>
+ </font>
+ </td>
+ </xsl:template>
+
+ <xsl:template match="tn">
+ <td bgcolor="#ffffff" colspan="{@colspan}" rowspan="{@rowspan}">
+
+ </td>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- markup -->
+
+ <xsl:template match="em">
+ <b><xsl:apply-templates/></b>
+ </xsl:template>
+
+ <xsl:template match="ref">
+ <i><xsl:apply-templates/></i>
+ </xsl:template>
+
+ <xsl:template match="code">
+ <code><font face="courier, monospaced"><xsl:apply-templates/></font></code>
+ </xsl:template>
+
+ <xsl:template match="br">
+ <br/>
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- links -->
+
+ <xsl:template match="link">
+ <xsl:if test="string-length(@anchor)=0">
+ <xsl:if test="string-length(@idref)=0">
+ <xsl:apply-templates/>
+ </xsl:if>
+ <xsl:if test="string-length(@idref)>0">
+ <a href="{@idref}.html"><xsl:apply-templates/></a>
+ </xsl:if>
+ </xsl:if>
+
+ <xsl:if test="string-length(@anchor)>0">
+ <xsl:if test="string-length(@idref)=0">
+ <a href="#{@anchor}"><xsl:apply-templates/></a>
+ </xsl:if>
+ <xsl:if test="string-length(@idref)>0">
+ <a href="{@idref}.html#{@anchor}"><xsl:apply-templates/></a>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="anchor">
+ <a name="{@name}"><xsl:comment>anchor</xsl:comment></a>
+ </xsl:template>
+
+ <xsl:template match="jump">
+ <a href="{@href}"><xsl:apply-templates/></a>
+ </xsl:template>
+
+ <xsl:template match="img">
+ <img src="images/{@src}" alt="{@alt}" align="{@align}" border="0" vspace="4" hspace="4" />
+ </xsl:template>
+
+<!-- ###################################################################### -->
+<!-- copy
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+-->
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/ibm-style/stylesheets/faqs2document.xsl b/styles/ibm-style/stylesheets/faqs2document.xsl
new file mode 100644
index 0000000..4a9d393
--- /dev/null
+++ b/styles/ibm-style/stylesheets/faqs2document.xsl
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="faqs">
+ <s1 title="{@title}">
+ <s2 title="Questions">
+ <ul>
+ <xsl:apply-templates select="faq" mode="index"/>
+ </ul>
+ </s2>
+ <s2 title="Answers">
+ <br/>
+ <xsl:apply-templates select="faq"/>
+ </s2>
+ </s1>
+ </xsl:template>
+
+ <xsl:template match="faq" mode="index">
+ <li>
+ <link anchor="faq-{position()}">
+ <xsl:if test="string-length(@title)=0">
+ <xsl:value-of select="q"/>
+ </xsl:if>
+ <xsl:if test="string-length(@title)>0">
+ <xsl:value-of select="@title"/>
+ </xsl:if>
+ </link>
+ </li>
+ </xsl:template>
+
+ <xsl:template match="faq">
+ <anchor name="faq-{position()}"/>
+ <s3 title="{q}">
+ <xsl:apply-templates select="a"/>
+ </s3>
+ </xsl:template>
+
+ <xsl:template match="a">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/styles/ibm-style/stylesheets/group2document.xsl b/styles/ibm-style/stylesheets/group2document.xsl
new file mode 100644
index 0000000..533fa92
--- /dev/null
+++ b/styles/ibm-style/stylesheets/group2document.xsl
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="group">
+ <s1 title="{@title}">
+ <xsl:apply-templates/>
+ </s1>
+ </xsl:template>
+
+ <xsl:template match="entry">
+ <s2 title="{@title}">
+ <p>
+ Read the <link idref="{@id}"><xsl:value-of select="@title"/></link>
+ document or jump directly to:
+ </p>
+ <ul>
+ <xsl:apply-templates/>
+ </ul>
+ </s2>
+ </xsl:template>
+
+ <xsl:template match="voice">
+ <li><link idref="{ancestor::*/@id}" anchor="faq-{position()}"><xsl:apply-templates/></link></li>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/stylebook.git
More information about the pkg-java-commits
mailing list