svn commit: r591293 - in /lenya/sandbox/modules/forrest: ./ config/cocoon-xconf/ java/src/org/apache/lenya/modules/forrest/ java/test/org/apache/lenya/modules/forrest/ resources/samples/ xslt/

[email protected]
Newsgroups gmane.comp.cms.lenya.cvs
Message-ID <[email protected]>
Author: andreas
Date: Fri Nov  2 03:20:16 2007
New Revision: 591293

URL: http://svn.apache.org/viewvc?rev=591293&view=rev
Log:
Added support for ToC and FAQ

Added:
    lenya/sandbox/modules/forrest/config/cocoon-xconf/resourcetype-forrestFaq20.xconf
    lenya/sandbox/modules/forrest/resources/samples/forrestFaq20.xml
    lenya/sandbox/modules/forrest/xslt/copyover.xsl
    lenya/sandbox/modules/forrest/xslt/forrestFaq202document.xsl
    lenya/sandbox/modules/forrest/xslt/toc.xsl
Modified:
    lenya/sandbox/modules/forrest/java/src/org/apache/lenya/modules/forrest/Importer.java
    lenya/sandbox/modules/forrest/java/test/org/apache/lenya/modules/forrest/ImportTest.java
    lenya/sandbox/modules/forrest/sitemap.xmap
    lenya/sandbox/modules/forrest/xslt/forrestDocument202xhtml.xsl

Added: lenya/sandbox/modules/forrest/config/cocoon-xconf/resourcetype-forrestFaq20.xconf
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/forrest/config/cocoon-xconf/resourcetype-forrestFaq20.xconf?rev=591293&view=auto
==============================================================================
--- lenya/sandbox/modules/forrest/config/cocoon-xconf/resourcetype-forrestFaq20.xconf (added)
+++ lenya/sandbox/modules/forrest/config/cocoon-xconf/resourcetype-forrestFaq20.xconf Fri Nov  2 03:20:16 2007
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+  
+  http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!-- $Id: doctypes.xconf 164635 2005-04-25 20:01:43Z tschlabach $ -->
+
+<xconf xpath="/cocoon/resource-types" unless="/cocoon/resource-types/component-instance[@name = 'forrestFaq20']">
+  
+  <component-instance name="forrestFaq20"
+    logger="lenya.resourcetypes.forrestFaq20"
+    class="org.apache.lenya.cms.publication.ResourceTypeImpl">
+    
+    <!--
+    <schema 
+      namespace="http://relaxng.org/ns/structure/0.9"
+      uri="fallback://lenya/modules/forrest/resources/schemas/faq-v20.rng"/>
+    -->
+    
+    <!-- Default time in seconds until the resource-type has expired -->  
+    <expires seconds="3600" />
+    
+    <sample 
+      mime-type="application/xml" 
+      uri="fallback://lenya/modules/forrest/resources/samples/forrestFaq20.xml"
+    />
+    
+    <link-attribute xpath="//*/@href"/>
+    <link-attribute xpath="//*/@src"/>
+    <format name="xhtml" uri="cocoon://modules/forrest/xhtml.xml"/>
+    <format name="webdavGET" uri="cocoon://modules/forrest/davget.xml"/>
+    <format name="luceneIndex" uri="cocoon://modules/forrest/lucene-index"/>
+    <!-- "xslt-clean" format is used by webDAV (and other editors?) to "clean" xml content before it is validated/saved --> 
+    <format name="xslt-clean" uri="fallback://lenya/modules/forrest/xslt/clean-xhtml.xsl"/>
+    <format name="icon" uri="cocoon://modules/forrest/icon"/>
+    
+  </component-instance>
+  
+</xconf>

Modified: lenya/sandbox/modules/forrest/java/src/org/apache/lenya/modules/forrest/Importer.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/forrest/java/src/org/apache/lenya/modules/forrest/Importer.java?rev=591293&r1=591292&r2=591293&view=diff
==============================================================================
--- lenya/sandbox/modules/forrest/java/src/org/apache/lenya/modules/forrest/Importer.java (original)
+++ lenya/sandbox/modules/forrest/java/src/org/apache/lenya/modules/forrest/Importer.java Fri Nov  2 03:20:16 2007
@@ -51,6 +51,7 @@
 
 public class Importer extends AbstractLogEnabled {
 
+    protected static final String ELEMENT_FAQS = "faqs";
     private ServiceManager manager;
 
     public Importer(ServiceManager manager, Logger logger) {
@@ -64,6 +65,7 @@
     protected static final String ATTR_HREF = "href";
     protected static final String ATTR_LABEL = "label";
     protected static final Object RESOURCE_TYPE_NAME_FORREST = "forrestDocument20";
+    protected static final Object RESOURCE_TYPE_NAME_FAQ = "forrestFaq20";
     protected static final Object RESOURCE_TYPE_NAME_MEDIA = "resource";
     protected static final String LANGUAGE = "en";
     protected static final String EXTENSION = "xml";
@@ -84,16 +86,19 @@
         ServiceSelector selector = null;
         ResourceType forrestResourceType = null;
         ResourceType mediaResourceType = null;
+        ResourceType faqResourceType = null;
         DocumentManager docMgr = null;
         try {
             selector = (ServiceSelector) this.manager.lookup(ResourceType.ROLE + "Selector");
             forrestResourceType = (ResourceType) selector.select(RESOURCE_TYPE_NAME_FORREST);
+            faqResourceType = (ResourceType) selector.select(RESOURCE_TYPE_NAME_FAQ);
             mediaResourceType = (ResourceType) selector.select(RESOURCE_TYPE_NAME_MEDIA);
             docMgr = (DocumentManager) this.manager.lookup(DocumentManager.ROLE);
 
             ImportInfo info = new ImportInfo();
             info.area = area;
             info.forrestResourceType = forrestResourceType;
+            info.faqResourceType = faqResourceType;
             info.mediaResourceType = mediaResourceType;
             info.helper = helper;
             info.docMgr = docMgr;
@@ -113,6 +118,9 @@
                 if (forrestResourceType != null) {
                     selector.release(forrestResourceType);
                 }
+                if (faqResourceType != null) {
+                    selector.release(faqResourceType);
+                }
                 if (mediaResourceType != null) {
                     selector.release(mediaResourceType);
                 }
@@ -147,12 +155,10 @@
         if (href.startsWith("http:")) {
             info.links.put(linkName, href);
             /*
-            String path = concatPath(basePath, nodeName);
-            SiteNode node = info.area.getSite().add(path);
-            node.setHref(href);
-            */
-        }
-        else if (sourceUri.endsWith(".png") || sourceUri.endsWith(".gif")) {
+             * String path = concatPath(basePath, nodeName); SiteNode node =
+             * info.area.getSite().add(path); node.setHref(href);
+             */
+        } else if (sourceUri.endsWith(".png") || sourceUri.endsWith(".gif")) {
             createDocument(info, info.mediaResourceType, sourceUri, basePath, nodeName, linkName,
                     title);
         } else {
@@ -169,8 +175,14 @@
                 createDocument(info, info.forrestResourceType,
                         getSampleUri(info.forrestResourceType), basePath, nodeName, linkName, title);
             } else {
-                createDocument(info, info.forrestResourceType, sourceUri, basePath, nodeName,
-                        linkName, title);
+                String localName = xml.getDocumentElement().getLocalName();
+                ResourceType type = null;
+                if (localName.equals(ELEMENT_FAQS)) {
+                    type = info.faqResourceType;
+                } else {
+                    type = info.forrestResourceType;
+                }
+                createDocument(info, type, sourceUri, basePath, nodeName, linkName, title);
             }
         }
 
@@ -213,7 +225,8 @@
             Link link = new Link();
             link.setUuid(doc.getUUID());
             info.links.put(linkName, link.getUri());
-            log("Created " + extension.toUpperCase() + " document (" + info.counterToString() + ") [" + path + "]");
+            log("Created " + extension.toUpperCase() + " document (" + info.counterToString()
+                    + ") [" + path + "]");
         } catch (Exception e) {
             log("A problem occured:");
             log("Path: '" + path + "'");
@@ -236,13 +249,14 @@
         protected int counter = 0;
         protected ResourceType mediaResourceType;
         protected ResourceType forrestResourceType;
+        protected ResourceType faqResourceType;
         protected DocumentManager docMgr;
         protected NamespaceHelper helper;
         protected Area area;
         protected Map links;
         protected long startTime;
         protected Calendar startCal;
-        
+
         protected static final String dateFormat = "HH:mm:ss";
 
         protected int next() {
@@ -254,7 +268,7 @@
             this.startTime = new Date().getTime();
             this.startCal = new GregorianCalendar();
         }
-        
+
         protected String counterToString() {
             int c = next();
             String count = Integer.toString(c);
@@ -273,7 +287,7 @@
             Date date = new Date(remaining);
             date.setHours(date.getHours() - 1);
             buf.append(new SimpleDateFormat(dateFormat).format(date));
-            
+
             return buf.toString();
         }
     }
@@ -288,7 +302,7 @@
                 docsToConvert.add(docs[i]);
             }
         }
-        for (Iterator i = docsToConvert.iterator(); i.hasNext(); ) {
+        for (Iterator i = docsToConvert.iterator(); i.hasNext();) {
             Document doc = (Document) i.next();
             log("Converting links (" + info.counterToString() + "): " + doc.getPath());
             org.w3c.dom.Document xml = DocumentHelper.readDocument(doc.getInputStream());

Modified: lenya/sandbox/modules/forrest/java/test/org/apache/lenya/modules/forrest/ImportTest.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/forrest/java/test/org/apache/lenya/modules/forrest/ImportTest.java?rev=591293&r1=591292&r2=591293&view=diff
==============================================================================
--- lenya/sandbox/modules/forrest/java/test/org/apache/lenya/modules/forrest/ImportTest.java (original)
+++ lenya/sandbox/modules/forrest/java/test/org/apache/lenya/modules/forrest/ImportTest.java Fri Nov  2 03:20:16 2007
@@ -18,6 +18,7 @@
 package org.apache.lenya.modules.forrest;
 
 import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.lenya.ac.impl.AbstractAccessControlTest;
 import org.apache.lenya.cms.linking.Link;
 import org.apache.lenya.cms.linking.LinkManager;
@@ -25,10 +26,13 @@
 import org.apache.lenya.cms.metadata.dublincore.DublinCore;
 import org.apache.lenya.cms.publication.Area;
 import org.apache.lenya.cms.publication.Document;
+import org.apache.lenya.cms.publication.DocumentManager;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.PublicationException;
+import org.apache.lenya.cms.publication.ResourceType;
 import org.apache.lenya.cms.repository.Session;
 import org.apache.lenya.cms.site.SiteStructure;
+import org.apache.lenya.xml.DocumentHelper;
 
 /**
  * Import example content into test publication.
@@ -54,7 +58,7 @@
         assertTrue(area.getSite().contains("/project-information"));
     }
     
-    public void testUpdateTitles() throws Exception {
+    public void disabled_testUpdateTitles() throws Exception {
         Session session = login("lenya");
         Publication pub = getPublication(session, PUB_ID);
         Area area = pub.getArea("authoring");
@@ -63,6 +67,36 @@
             String label = docs[i].getLink().getLabel();
             MetaData meta = docs[i].getMetaData(DublinCore.DC_NAMESPACE);
             meta.setValue(DublinCore.ELEMENT_TITLE, label);
+        }
+        session.commit();
+    }
+    
+    public void testUpdateResourceType() throws Exception {
+        Session session = login("lenya");
+        Publication pub = getPublication(session, PUB_ID);
+        Area area = pub.getArea("authoring");
+        Document[] docs = area.getDocuments();
+        ServiceSelector selector = null;
+        ResourceType faqResourceType = null;
+        try {
+            selector = (ServiceSelector) getManager().lookup(ResourceType.ROLE + "Selector");
+            faqResourceType = (ResourceType) selector.select(Importer.RESOURCE_TYPE_NAME_FAQ);
+            for (int i = 0; i < docs.length; i++) {
+                if (docs[i].getResourceType().getName().equals(Importer.RESOURCE_TYPE_NAME_FORREST)) {
+                    org.w3c.dom.Document xml = DocumentHelper.readDocument(docs[i].getInputStream());
+                    if (xml.getDocumentElement().getLocalName().equals(Importer.ELEMENT_FAQS)) {
+                        docs[i].setResourceType(faqResourceType);
+                    }
+                }
+            }
+        }
+        finally {
+            if (selector != null) {
+                if (faqResourceType != null) {
+                    selector.release(faqResourceType);
+                }
+                getManager().release(selector);
+            }
         }
         session.commit();
     }

Added: lenya/sandbox/modules/forrest/resources/samples/forrestFaq20.xml
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/forrest/resources/samples/forrestFaq20.xml?rev=591293&view=auto
==============================================================================
--- lenya/sandbox/modules/forrest/resources/samples/forrestFaq20.xml (added)
+++ lenya/sandbox/modules/forrest/resources/samples/forrestFaq20.xml Fri Nov  2 03:20:16 2007
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright 2002-2005 The Apache Software Foundation or its licensors,
+  as applicable.
+  
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+  http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+--><!DOCTYPE faqs PUBLIC "-//APACHE//DTD FAQ V1.2//EN" "http://forrest.apache.org/dtd/faq-v12.dtd">
+
+<faqs title="Frequently Asked Questions">
+  <part id="samplePart">
+    <title>FAQ Sample Document</title>
+    <faq id="sampleQuestion">
+      <question>
+        Is this a question?
+      </question>
+      <answer>
+        <p>
+          Yes, it is.
+        </p>
+      </answer>
+    </faq>
+  </part>
+</faqs>

Modified: lenya/sandbox/modules/forrest/sitemap.xmap
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/forrest/sitemap.xmap?rev=591293&r1=591292&r2=591293&view=diff
==============================================================================
--- lenya/sandbox/modules/forrest/sitemap.xmap (original)
+++ lenya/sandbox/modules/forrest/sitemap.xmap Fri Nov  2 03:20:16 2007
@@ -85,7 +85,12 @@
       <!-- {format}.xml/{pubId}/{area}/{uuid}/{language} -->
       <map:match pattern="*.xml/*/*/*/*">
         <map:generate src="lenya-document:{4},lang={5}{link:rev}"/>
-        <map:transform src="fallback://lenya/modules/forrest/xslt/{doc-info:{2}:{3}:{4}:{5}:resourceType}2xhtml.xsl">
+        <map:select type="resource-exists">
+          <map:when test="fallback://lenya/modules/forrest/xslt/{doc-info:{2}:{3}:{4}:{5}:resourceType}2document.xsl">
+            <map:transform src="fallback://lenya/modules/forrest/xslt/{doc-info:{2}:{3}:{4}:{5}:resourceType}2document.xsl"/>
+          </map:when>
+        </map:select>
+        <map:transform src="fallback://lenya/modules/forrest/xslt/forrestDocument202xhtml.xsl">
           <map:parameter name="rendertype" value="{request-param:rendertype}"/>
           <map:parameter name="nodeid" value="{doc-info:{2}:{3}:{4}:{5}:nodeName}"/>
           <map:parameter name="language" value="{4}"/>

Added: lenya/sandbox/modules/forrest/xslt/copyover.xsl
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/forrest/xslt/copyover.xsl?rev=591293&view=auto
==============================================================================
--- lenya/sandbox/modules/forrest/xslt/copyover.xsl (added)
+++ lenya/sandbox/modules/forrest/xslt/copyover.xsl Fri Nov  2 03:20:16 2007
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<xsl:stylesheet
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    version="1.0">
+  <xsl:template match="@*|*|text()|processing-instruction()|comment()">
+    <xsl:copy>
+      <xsl:apply-templates select="@*|*|text()|processing-instruction()|comment()"/>
+    </xsl:copy>
+  </xsl:template>
+</xsl:stylesheet>

Modified: lenya/sandbox/modules/forrest/xslt/forrestDocument202xhtml.xsl
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/forrest/xslt/forrestDocument202xhtml.xsl?rev=591293&r1=591292&r2=591293&view=diff
==============================================================================
--- lenya/sandbox/modules/forrest/xslt/forrestDocument202xhtml.xsl (original)
+++ lenya/sandbox/modules/forrest/xslt/forrestDocument202xhtml.xsl Fri Nov  2 03:20:16 2007
@@ -22,6 +22,8 @@
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns="http://www.w3.org/1999/xhtml">
   
+  <xsl:import href="toc.xsl"/>
+  
   <xsl:preserve-space elements="source"/>
   
   <xsl:template match="/">
@@ -34,6 +36,7 @@
       <body>
         <div id="body">
           <h1><xsl:value-of select="document/header/title"/></h1>
+          <xsl:apply-templates select="document/body" mode="toc"/>
           <xsl:choose>
             <xsl:when test="document/body/row">
               <table width="100%">
@@ -44,10 +47,6 @@
               <xsl:apply-templates select="document/body/*"/>
             </xsl:otherwise>
           </xsl:choose>
-          <p class="copyright">
-            Copyright &#169; 1999-2005 <a href="http://www.apache.org/">The Apache
-              Software Foundation</a>. All rights reserved.
-          </p>
         </div>
       </body>
     </html>

Added: lenya/sandbox/modules/forrest/xslt/forrestFaq202document.xsl
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/forrest/xslt/forrestFaq202document.xsl?rev=591293&view=auto
==============================================================================
--- lenya/sandbox/modules/forrest/xslt/forrestFaq202document.xsl (added)
+++ lenya/sandbox/modules/forrest/xslt/forrestFaq202document.xsl Fri Nov  2 03:20:16 2007
@@ -0,0 +1,107 @@
+<?xml version="1.0"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<xsl:stylesheet
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    version="1.0">
+  <xsl:import href="copyover.xsl"/>
+  <xsl:template match="faqs">
+    <document>
+      <header>
+        <title><xsl:value-of select="@title"/></title>
+      </header>
+      <body>
+        <xsl:apply-templates select="faq|part"/>
+      </body>
+    </document>
+  </xsl:template>
+  <xsl:template match="part" mode="index">
+    <li><strong>
+<!-- Rely on <ol> numbering here -->
+<!--<xsl:number level="multiple" count="faq|part" format="1.1. "/> -->
+      <xsl:apply-templates select="title"/></strong>
+      <ul>
+        <xsl:apply-templates select="faq|part" mode="index"/>
+      </ul>
+      <br /></li>
+  </xsl:template>
+  <xsl:template match="faq" mode="index">
+    <li><xsl:attribute name="id">
+        <xsl:call-template name="generate-id"/>
+<xsl:text>-menu</xsl:text>
+      </xsl:attribute><link>
+      <xsl:attribute name="href">
+<xsl:text>#</xsl:text>
+        <xsl:call-template name="generate-id"/>
+      </xsl:attribute>
+<!--
+		  IMHO adding this makes the tightly-packed menu less legible for
+		  little benefit (JT)
+	    <xsl:number level="multiple" count="faq|part" format="1.1. "/>
+		-->
+      <xsl:apply-templates select="question" mode="index"/></link></li>
+  </xsl:template>
+  <xsl:template match="part">
+    <xsl:variable name="id">
+      <xsl:call-template name="generate-id"/>
+    </xsl:variable>
+    <section id="{$id}">
+      <title><xsl:number level="multiple" count="faq|part" format="1.1. "/>
+        <xsl:value-of select="title"/></title>
+      <xsl:apply-templates select="faq|part"/>
+    </section>
+  </xsl:template>
+  <xsl:template match="faq">
+    <xsl:variable name="id">
+      <xsl:call-template name="generate-id"/>
+    </xsl:variable>
+    <section id="{$id}">
+      <title><xsl:number level="multiple" count="faq|part" format="1.1. "/>
+        <xsl:apply-templates select="question"/></title>
+      <xsl:apply-templates select="answer"/>
+    </section>
+  </xsl:template>
+  <xsl:template name="generate-id">
+    <xsl:choose>
+      <xsl:when test="@id">
+        <xsl:value-of select="@id"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="concat(concat(local-name(.), '-'), generate-id(.))"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  <xsl:template match="question" mode="index">
+    <xsl:apply-templates select="node()[not(local-name()='elaboration')]"/>
+  </xsl:template>
+  <xsl:template match="question">
+    <xsl:apply-templates/>
+  </xsl:template>
+  <xsl:template match="answer">
+    <xsl:if test="count(p)>0">
+      <xsl:apply-templates/>
+    </xsl:if>
+    <xsl:if test="count(p)=0">
+      <p>
+        <xsl:apply-templates/>
+      </p>
+    </xsl:if>
+  </xsl:template>
+  <xsl:template match="title">
+    <xsl:apply-templates/>
+  </xsl:template>
+</xsl:stylesheet>

Added: lenya/sandbox/modules/forrest/xslt/toc.xsl
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/forrest/xslt/toc.xsl?rev=591293&view=auto
==============================================================================
--- lenya/sandbox/modules/forrest/xslt/toc.xsl (added)
+++ lenya/sandbox/modules/forrest/xslt/toc.xsl Fri Nov  2 03:20:16 2007
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+  <!--  Templates for "toc" mode.  This will generate a complete
+    Table of Contents for the document.  This will then be used
+    by the site2xhtml to generate a Menu ToC and a Page ToC -->
+  
+  
+  <xsl:template name="generate-id">
+    <xsl:choose>
+      <xsl:when test="@id">
+        <xsl:value-of select="@id"/>
+      </xsl:when>
+      <xsl:when test="@title">
+        <xsl:value-of select="@title"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="generate-id(.)"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  
+  
+  <xsl:template match="body" mode="toc">
+    <xsl:if test="section">
+      <div class="tocTitle">
+        <div>Table of Contents</div>
+      </div>
+      <ul class="toc">
+        <xsl:apply-templates select="section" mode="toc"/>
+      </ul>
+    </xsl:if>
+  </xsl:template>
+  
+  
+  <xsl:template match="section" mode="toc">
+    <xsl:param name="level" select="number(1)"/>
+    <li>
+      <a>
+        <xsl:attribute name="href">#<xsl:call-template name="generate-id"/></xsl:attribute>
+        <xsl:value-of select="title"/>
+      </a>
+      <xsl:if test="section">
+        <ul class="toc">
+          <xsl:apply-templates select="section" mode="toc">
+            <xsl:with-param name="level" select="$level+1"/>
+          </xsl:apply-templates>
+        </ul>
+      </xsl:if>
+    </li>
+  </xsl:template>
+  
+  
+  <xsl:template match="node()|@*" mode="toc"/>
+  
+</xsl:stylesheet>
\ No newline at end of file
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.