[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("&sup2;");   break;
+                case 179: out.write("&sup3;");   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("&sup1;");   break;
+                case 186: out.write("º");   break;
+                case 187: out.write("»");  break;
+                case 188: out.write("&frac14;"); break;
+                case 189: out.write("&frac12;"); break;
+                case 190: out.write("&frac34;"); 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