forrest-svn mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rgard...@apache.org
Subject svn commit: rev 57347 - in forrest/trunk/plugins/IMSManifest: . resources resources/stylesheets src src/documentation src/documentation/classes src/documentation/content src/documentation/content/xdocs src/documentation/content/xdocs/images src/resources src/resources/schema
Date Wed, 10 Nov 2004 18:40:11 GMT
Author: rgardler
Date: Wed Nov 10 10:40:11 2004
New Revision: 57347

Added:
   forrest/trunk/plugins/IMSManifest/
   forrest/trunk/plugins/IMSManifest/README.txt   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/forrest.properties   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/resources/
   forrest/trunk/plugins/IMSManifest/resources/stylesheets/
   forrest/trunk/plugins/IMSManifest/resources/stylesheets/imsmanifest2site.xsl   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/resources/stylesheets/imsmanifest2tabs.xsl   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/resources/stylesheets/pathutils.xsl   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/resources/stylesheets/repositoryUtils.xsl   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/sitemap.xmap   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/src/
   forrest/trunk/plugins/IMSManifest/src/documentation/
   forrest/trunk/plugins/IMSManifest/src/documentation/classes/
   forrest/trunk/plugins/IMSManifest/src/documentation/classes/CatalogManager.properties   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/src/documentation/content/
   forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/
   forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/images/
   forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/images/group.svg   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/images/icon.png   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/images/project.svg   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/imsmanifest.xml   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/index.xml   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/src/documentation/skinconf.xml   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/src/resources/
   forrest/trunk/plugins/IMSManifest/src/resources/schema/
   forrest/trunk/plugins/IMSManifest/src/resources/schema/ims_xml.xsd   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/src/resources/schema/imscp_rootv1p1p2.xsd   (contents, props changed)
   forrest/trunk/plugins/IMSManifest/status.xml   (contents, props changed)
Log:
Initial code donation from http://www.burrokeet.org

Added: forrest/trunk/plugins/IMSManifest/README.txt
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/README.txt	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,28 @@
+IMSManifest Plugin
+===================
+
+This plugin allows IMS SCORM Manifest files to be used as an alternative to the 
+site.xml and tabs.xml files. If a file named imsmanifest.xml is found in 
+the xdocs directory of a project this will be used to generate the reqruied
+files for Forrest to run.
+
+Also allows content from another Content Package defiend with an IMS Manifest 
+to be included within a second Content Package.
+
+Known Issues
+============
+
+
+Version
+=======
+
+0.1-dev
+
+Code, interfaces and functionality are likely to change. Use at your own risk.
+
+ToDo
+====
+
+- documentation
+  
+

Added: forrest/trunk/plugins/IMSManifest/forrest.properties
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/forrest.properties	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,108 @@
+# Copyright 2002-2004 The Apache Software Foundation
+#
+# 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.
+
+##############
+# Properties used by forrest.build.xml for building the website
+# These are the defaults, un-comment them if you need to change them.
+##############
+
+# Prints out a summary of Forrest settings for this project
+#forrest.echo=true 
+
+# Project name (used to name .war file)
+#project.name=my-project
+
+# Specifies name of Forrest skin to use
+#project.skin=tigris
+#project.skin=pelt
+
+# comma separated list, file:// is supported
+#forrest.skins.descriptors=http://forrest.apache.org/skins/skins.xml,file:///c:/myskins/skins.xml
+
+##############
+# behavioural properties
+#project.menu-scheme=tab_attributes
+#project.menu-scheme=directories
+
+##############
+# layout properties
+
+# Properties that can be set to override the default locations
+#
+# Parent properties must be set. This usually means uncommenting
+# project.content-dir if any other property using it is uncommented
+
+#project.status=status.xml
+#project.content-dir=src/documentation
+#project.raw-content-dir=${project.content-dir}/content
+#project.conf-dir=${project.content-dir}/conf
+#project.sitemap-dir=${project.content-dir}
+#project.xdocs-dir=${project.content-dir}/content/xdocs
+#project.resources-dir=${project.content-dir}/resources
+#project.stylesheets-dir=${project.resources-dir}/stylesheets
+#project.images-dir=${project.resources-dir}/images
+#project.schema-dir=${project.resources-dir}/schema
+#project.skins-dir=${project.content-dir}/skins
+#project.skinconf=${project.content-dir}/skinconf.xml
+#project.lib-dir=${project.content-dir}/lib
+#project.classes-dir=${project.content-dir}/classes
+#project.translations-dir=${project.content-dir}/translations
+
+##############
+# validation properties
+
+# This set of properties determine if validation is performed
+# Values are inherited unless overridden.
+# e.g. if forrest.validate=false then all others are false unless set to true.
+#forrest.validate=true
+#forrest.validate.xdocs=${forrest.validate}
+#forrest.validate.skinconf=${forrest.validate}
+#forrest.validate.sitemap=${forrest.validate}
+#forrest.validate.stylesheets=${forrest.validate}
+#forrest.validate.skins=${forrest.validate}
+#forrest.validate.skins.stylesheets=${forrest.validate.skins}
+
+# *.failonerror=(true|false) - stop when an XML file is invalid
+#forrest.validate.failonerror=true
+
+# *.excludes=(pattern) - comma-separated list of path patterns to not validate
+# e.g.
+#forrest.validate.xdocs.excludes=samples/subdir/**, samples/faq.xml
+#forrest.validate.xdocs.excludes=
+
+
+##############
+# General Forrest properties
+
+# The URL to start crawling from
+#project.start-uri=linkmap.html
+# Set logging level for messages printed to the console
+# (DEBUG, INFO, WARN, ERROR, FATAL_ERROR)
+#project.debuglevel=ERROR
+# Max memory to allocate to Java
+#forrest.maxmemory=64m
+# Any other arguments to pass to the JVM. For example, to run on an X-less
+# server, set to -Djava.awt.headless=true
+#forrest.jvmargs=
+# The bugtracking URL - the issue number will be appended
+#project.bugtracking-url=http://issues.apache.org/bugzilla/show_bug.cgi?id=
+#project.bugtracking-url=http://issues.apache.org/jira/browse/
+# The issues list as rss
+#project.issues-rss-url=
+#I18n Property only works for the "forrest run" target.
+#project.i18n=true
+
+# The names of plugins that are required to build the project
+# comma separated list (no spaces)
+project.required.plugins=IMSManifest

Added: forrest/trunk/plugins/IMSManifest/resources/stylesheets/imsmanifest2site.xsl
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/resources/stylesheets/imsmanifest2site.xsl	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,179 @@
+<?xml version="1.0"?>
+<!--
+  Copyright 2002-2004 The Apache Software Foundation
+
+  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.
+-->
+<!--
+Stylesheet for generating site.xml from a IMS Manifest file.
+-->
+
+<xsl:stylesheet version="1.0" 
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:ims="http://www.imsproject.org/xsd/imscp_rootv1p1p2"
+  xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_rootv1p2">
+  
+  <xsl:import href="pathutils.xsl"/>
+  <xsl:import href="repositoryUtils.xsl"/>
+  
+  <xsl:output doctype-system="http://apache.org/forrest/dtd/tab-cocoon-v11.dtd"
+    doctype-public="-//APACHE//DTD Cocoon Documentation Tab V1.1//EN"/>
+
+  <xsl:template match="/">
+    <site label="MyProj" 
+      href="" 
+      xmlns="http://apache.org/forrest/linkmap/1.0"
+      tab="">
+      
+      <xsl:apply-templates/>
+      
+    </site>
+  </xsl:template>
+  
+  <xsl:template match="ims:manifest">
+    <xsl:param name="asset_base"/>
+    <xsl:apply-templates>
+      <xsl:with-param name="asset_base"><xsl:value-of select="$asset_base"/></xsl:with-param>
+    </xsl:apply-templates>
+  </xsl:template>
+  
+  <xsl:template match="ims:organizations">
+    <xsl:param name="asset_base"/>
+    <xsl:apply-templates select="ims:organization">
+      <xsl:with-param name="asset_base"><xsl:value-of select="$asset_base"/></xsl:with-param>
+    </xsl:apply-templates>
+  </xsl:template>
+  
+  <xsl:template match="ims:organization">
+    <xsl:param name="asset_base"/>
+    <xsl:variable name="title">
+      <xsl:choose>
+        <xsl:when test="./ims:title">
+          <xsl:value-of select="./ims:title"/>
+        </xsl:when>
+        <xsl:otherwise>
+          FIXME: Organisation Title Missing
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:variable>
+    <xsl:variable name="element_name">organisation</xsl:variable>
+    <xsl:element name="{$element_name}">
+      <xsl:attribute name="label"><xsl:value-of select="$title"/></xsl:attribute>
+      <xsl:apply-templates select="ims:item">
+        <xsl:with-param name="asset_base"><xsl:value-of select="$asset_base"/></xsl:with-param>
+      </xsl:apply-templates>
+    </xsl:element>
+  </xsl:template>
+    
+  <xsl:template match="ims:item[@identifierref]">
+    <xsl:param name="asset_base"/>
+    <xsl:variable name="idref"><xsl:value-of select="@identifierref"/></xsl:variable>
+    <xsl:variable name="repositoryCommand">
+      <xsl:call-template name="getRepositoryCommand">
+        <xsl:with-param name="path"><xsl:value-of select="//ims:resources/ims:resource[@identifier=$idref]/@href"/></xsl:with-param>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="scoName">
+      <xsl:call-template name="getSCOName">
+        <xsl:with-param name="path"><xsl:value-of select="//ims:resources/ims:resource[@identifier=$idref]/@href"/></xsl:with-param>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="repositoryURI">
+      <xsl:call-template name="getRepositoryURI">
+        <xsl:with-param name="path"><xsl:value-of select="//ims:resources/ims:resource[@identifier=$idref]/@href"/></xsl:with-param>
+      </xsl:call-template>
+    </xsl:variable>
+<sco><xsl:value-of select="$scoName"/></sco>
+<repository><xsl:value-of select="$repositoryURI"/></repository>
+    <xsl:choose>
+      <xsl:when test="$repositoryCommand='getSCO'">
+        <xsl:variable name="scoName"><xsl:call-template name="getSCOName"><xsl:with-param name="path"><xsl:value-of select="//ims:resources/ims:resource[@identifier=$idref]/@href"/></xsl:with-param></xsl:call-template></xsl:variable>
+        <xsl:variable name="sco">http://<xsl:value-of select="$repositoryURI"/>/<xsl:value-of select="$scoName"/>/src/documentation/content/xdocs/imsmanifest.xml</xsl:variable>
+        <xsl:apply-templates select="document($sco)/ims:manifest">
+          <xsl:with-param name="asset_base">repositoryCommand/getSCO/<xsl:value-of select="$scoName"/>/repositoryURI/<xsl:value-of select="$repositoryURI"/>/</xsl:with-param>
+        </xsl:apply-templates>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:variable name="title"><xsl:value-of select="ims:title"/></xsl:variable>
+        <xsl:variable name="package_base"><xsl:value-of select="$asset_base"/><xsl:value-of select="//ims:resources/ims:resource[@identifier=$idref]/../../@xml:base"/></xsl:variable>
+        <xsl:variable name="path_href">
+          <xsl:choose>
+            <xsl:when test="//ims:resources/ims:resource[@identifier=$idref]/ims:file">
+              <xsl:value-of select="//ims:resources/ims:resource[@identifier=$idref]/ims:file/@href"/>
+      			</xsl:when>
+			      <xsl:otherwise>
+			        <xsl:value-of select="//ims:resources/ims:resource[@identifier=$idref]/@href"/>
+			      </xsl:otherwise>
+	        </xsl:choose>
+        </xsl:variable>
+        <xsl:variable name="href_ext">
+          <xsl:call-template name="ext">
+            <xsl:with-param name="path"><xsl:value-of select="$path_href"/></xsl:with-param>
+          </xsl:call-template>
+        </xsl:variable>
+        <xsl:variable name="path_href_noext">
+          <xsl:call-template name="path-noext">
+            <xsl:with-param name="path"><xsl:value-of select="$path_href"/></xsl:with-param>
+          </xsl:call-template>
+        </xsl:variable>
+        <xsl:variable name="mimeType"><xsl:value-of select="//ims:resources/ims:resource[@identifier=$idref]/@type"/></xsl:variable>
+        <xsl:variable name="href">
+          <xsl:choose>
+            <xsl:when test="$mimeType='text/xml'"><xsl:value-of select="$package_base"/><xsl:value-of select="$path_href_noext"/>.html</xsl:when>                        <xsl:when test="$mimeType='text/xml'"><xsl:value-of select="$package_base"/><xsl:value-of select="$path_href_noext"/>.html</xsl:when>
+            <xsl:when test="$mimeType='application/vnd-sun-xml-impress'"><xsl:value-of select="$package_base"/><xsl:value-of select="$path_href_noext"/>.html</xsl:when>
+            <xsl:when test="$mimeType='application/vnd-sun-xml-writer'"><xsl:value-of select="$package_base"/><xsl:value-of select="$path_href_noext"/>.html</xsl:when>                        
+          	<xsl:otherwise>
+          	  <xsl:value-of select="$package_base"/><xsl:value-of select="$path_href"/>
+          	</xsl:otherwise>
+         </xsl:choose>
+        </xsl:variable>
+        <xsl:variable name="element_name">item</xsl:variable>
+        
+        <xsl:element name="{$element_name}">
+          <xsl:attribute name="id"><xsl:value-of select="@identifier"/></xsl:attribute>
+          <xsl:attribute name="identifierref"><xsl:value-of select="$idref"/></xsl:attribute>
+          <xsl:attribute name="label"><xsl:value-of select="$title"/></xsl:attribute>   
+          <xsl:attribute name="href"><xsl:value-of select="$href"/></xsl:attribute>
+          
+          <xsl:apply-templates select="ims:item"/>
+        </xsl:element>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  
+  <xsl:template match="ims:item[not(@identifierref)]">
+    <xsl:variable name="title"><xsl:value-of select="ims:title"/></xsl:variable>
+    <xsl:variable name="element_name">itemGroup</xsl:variable>
+    
+    <xsl:element name="{$element_name}">
+      <xsl:attribute name="id"><xsl:value-of select="@identifier"/></xsl:attribute>
+      <xsl:attribute name="label"><xsl:value-of select="$title"/></xsl:attribute>
+      
+      <xsl:apply-templates select="ims:item"/>
+    </xsl:element>
+    
+  </xsl:template>
+  
+  <xsl:template match="adlcp:prerequisites">
+    <xsl:variable name="idref"><xsl:value-of select="."/></xsl:variable>
+    <xsl:variable name="title"><xsl:value-of select="//ims:item[@identifier=$idref]/ims:title"/></xsl:variable>
+    <xsl:variable name="resource_idref"><xsl:value-of select="//ims:item[@identifier=$idref]/@identifierref"/></xsl:variable>
+    <xsl:variable name="href"><xsl:value-of select="//ims:resources/ims:resource[@identifier=$resource_idref]/ims:file/@href"/></xsl:variable>
+    
+    <xsl:element name="prerequisite">
+      <xsl:attribute name="label"><xsl:value-of select="$title"/></xsl:attribute>
+      <xsl:attribute name="href"><xsl:value-of select="$href"/></xsl:attribute>
+    </xsl:element>
+  </xsl:template>
+  
+</xsl:stylesheet>

Added: forrest/trunk/plugins/IMSManifest/resources/stylesheets/imsmanifest2tabs.xsl
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/resources/stylesheets/imsmanifest2tabs.xsl	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,98 @@
+<?xml version="1.0"?>
+<!--
+  Copyright 2002-2004 The Apache Software Foundation
+
+  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.
+-->
+<!--
+Stylesheet for generating site.xml from a IMS Manifest file.
+-->
+
+<xsl:stylesheet version="1.0" 
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:ims="http://www.imsproject.org/xsd/imscp_rootv1p1p2"
+  xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_rootv1p2">
+  
+  <xsl:import href="pathutils.xsl"/>
+  <xsl:import href="repositoryUtils.xsl"/>
+
+  <xsl:output doctype-system="http://apache.org/forrest/dtd/tab-cocoon-v11.dtd"
+    doctype-public="-//APACHE//DTD Cocoon Documentation Tab V1.1//EN"/>
+
+  <xsl:template match="/">
+    <tabs software="MyProj"
+      title="MyProj"
+      copyright="foo">
+
+      <xsl:apply-templates select="ims:manifest"/>
+    </tabs>
+  </xsl:template>
+  
+  <xsl:template match="ims:manifest">
+    <xsl:apply-templates/>
+  </xsl:template>
+  
+  <xsl:template match="ims:organizations">
+    <xsl:apply-templates select="ims:organization"/>
+  </xsl:template>
+  
+  <xsl:template match="ims:organization">
+    <xsl:variable name="title"><xsl:value-of select="./ims:title"/></xsl:variable>
+    <xsl:variable name="default_file_id"><xsl:value-of select=".//ims:item[@identifierref][1]/@identifierref"/></xsl:variable>
+    <xsl:variable name="repositoryCommand">
+      <xsl:call-template name="getRepositoryCommand">
+        <xsl:with-param name="path"><xsl:value-of select="//ims:resources/ims:resource[@identifier=$default_file_id]/@href"/></xsl:with-param>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="scoName">
+      <xsl:call-template name="getSCOName">
+        <xsl:with-param name="path"><xsl:value-of select="//ims:resources/ims:resource[@identifier=$default_file_id]/@href"/></xsl:with-param>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="full_path">
+      <xsl:choose>
+        <xsl:when test="$repositoryCommand='getSCO'">getSCO/<xsl:call-template name="getSCOName"><xsl:with-param name="path"><xsl:value-of select="//ims:resources/ims:resource[@identifier=$default_file_id]/@href"/></xsl:with-param></xsl:call-template></xsl:when>
+        <xsl:otherwise><xsl:value-of select="//ims:resources/ims:resource[@identifier=$default_file_id]/@href"/></xsl:otherwise>
+      </xsl:choose>
+    </xsl:variable>
+    <xsl:variable name="href">
+      <xsl:call-template name="dirname-nz">
+        <xsl:with-param name="path"><xsl:value-of select="$full_path"/></xsl:with-param>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="filename_noext">
+      <xsl:choose>
+        <xsl:when test="$repositoryCommand='getSCO'"><xsl:value-of select="$scoName"/>/index</xsl:when>
+        <xsl:otherwise>
+          <xsl:call-template name="filename-noext">
+            <xsl:with-param name="path"><xsl:value-of select="$full_path"/></xsl:with-param>
+          </xsl:call-template>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:variable>
+    
+    <tab>
+      <xsl:attribute name="id"><xsl:value-of select="$title"/></xsl:attribute>
+      <xsl:attribute name="label"><xsl:value-of select="$title"/></xsl:attribute>
+      <xsl:attribute name="href"><xsl:value-of select="$href"/></xsl:attribute>
+      <xsl:attribute name="indexfile">
+        <xsl:choose>
+          <xsl:when test="not($filename_noext='')"><xsl:value-of select="$filename_noext"/>.html</xsl:when>
+          <xsl:otherwise>index.html</xsl:otherwise>
+        </xsl:choose>
+      </xsl:attribute>
+      <xsl:apply-templates select="ims:item"/>
+    </tab>
+  </xsl:template>
+  
+</xsl:stylesheet>

Added: forrest/trunk/plugins/IMSManifest/resources/stylesheets/pathutils.xsl
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/resources/stylesheets/pathutils.xsl	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,239 @@
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!--
+  Copyright 2002-2004 The Apache Software Foundation
+
+  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.
+-->
+<!--
+PathUtils.xsl
+
+A set of XSLT templates useful for parsing URI paths:
+
+dirname: return the directory part of a path
+filename: return the file part of a path
+ext: return the last extension of the filename in a path
+filename-noext: return the file part of a path without its last extension
+
+@author Jeff Turner <jefft@apache.org>
+$Id: pathutils.xsl,v 1.1 2004/09/21 14:10:24 rgardler Exp $
+-->
+
+<!-- Returns the directory part of a path.  Equivalent to Unix 'dirname'.
+Examples:
+'' -> ''
+'foo/index.html' -> 'foo/'
+-->
+<xsl:template name="dirname">
+  <xsl:param name="path" />
+  <xsl:if test="contains($path, '/')">
+    <xsl:value-of select="concat(substring-before($path, '/'), '/')" />
+    <xsl:call-template name="dirname">
+      <xsl:with-param name="path"
+        select="substring-after($path, '/')" />
+    </xsl:call-template>
+  </xsl:if>
+</xsl:template>
+
+<!-- Normalized (..'s eliminated) version of 'dirname' -->
+<xsl:template name="dirname-nz">
+  <xsl:param name="path" />
+  <xsl:call-template name="normalize">
+    <xsl:with-param name="path">
+      <xsl:call-template name="dirname">
+        <xsl:with-param name="path" select="$path" />
+      </xsl:call-template>
+    </xsl:with-param>
+  </xsl:call-template>
+</xsl:template>
+
+
+<!-- Returns the filename part of a path.  Equivalent to Unix 'basename'
+Examples:
+'index.html'  ->  'index.html' 
+'foo/bar/'  ->  '' 
+'foo/bar/index.html'  ->  'index.html' 
+-->
+<xsl:template name="filename">
+  <xsl:param name="path"/>
+  <xsl:choose>
+    <xsl:when test="contains($path, '/')">
+      <xsl:call-template name="filename">
+        <xsl:with-param name="path" select="substring-after($path, '/')"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$path"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<!-- Returns the last extension of a filename in a path.
+Examples:
+'index.html'  ->  '.html' 
+'index.dtdx.html'  ->  '.html' 
+'foo/bar/'  ->  '' 
+'foo/bar/index.html'  ->  '.html' 
+'foo/bar/index'  ->  '' 
+-->
+<xsl:template name="ext">
+  <xsl:param name="path"/>
+  <xsl:param name="subflag"/> <!-- Outermost call? -->
+  <xsl:choose>
+    <xsl:when test="contains($path, '.')">
+      <xsl:call-template name="ext">
+        <xsl:with-param name="path" select="substring-after($path, '.')"/>
+        <xsl:with-param name="subflag" select="'sub'"/>
+      </xsl:call-template>
+    </xsl:when>
+    <!-- Handle extension-less filenames by returning '' -->
+    <xsl:when test="not($subflag) and not(contains($path, '.'))">
+      <xsl:text/>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="concat('.', $path)"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<!-- Returns a filename of a path stripped of its last extension.
+Examples:
+'foo/bar/index.dtdx.html' -> 'index.dtdx'
+-->
+<xsl:template name="filename-noext">
+  <xsl:param name="path"/>
+  <xsl:variable name="filename">
+    <xsl:call-template name="filename">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:variable name="ext">
+    <xsl:call-template name="ext">
+      <xsl:with-param name="path" select="$filename"/>
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:value-of select="substring($filename, 1, string-length($filename) - string-length($ext))"/>
+</xsl:template>
+
+<!-- Returns a path with the filename stripped of its last extension.
+Examples:
+'foo/bar/index.dtdx.html' -> 'foo/bar/index.dtdx'
+-->
+<xsl:template name="path-noext">
+  <xsl:param name="path"/>
+  <xsl:variable name="ext">
+    <xsl:call-template name="ext">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:value-of select="substring($path, 1, string-length($path) - string-length($ext))"/>
+</xsl:template>
+
+<!-- Normalized (..'s eliminated) version of 'path-noext' -->
+<xsl:template name="path-noext-nz">
+  <xsl:param name="path" />
+  <xsl:call-template name="normalize">
+    <xsl:with-param name="path">
+      <xsl:call-template name="path-noext">
+        <xsl:with-param name="path" select="$path" />
+      </xsl:call-template>
+    </xsl:with-param>
+  </xsl:call-template>
+</xsl:template>
+
+<!-- Returns a path with any fragment identifier ('#...') stripped off
+Examples:
+'foo/bar/index.dtdx.html#blah' -> 'foo/bar/index.dtdx.html'
+-->
+<xsl:template name="path-nofrag">
+  <xsl:param name="path"/>
+  <xsl:if test="not(contains($path, '#'))">
+    <xsl:value-of select="$path"/>
+  </xsl:if>
+  <xsl:if test="contains($path, '#')">
+    <xsl:value-of select="substring-before($path, '#')"/>
+  </xsl:if>
+</xsl:template>
+
+
+
+<!-- Normalizes a path, converting '/' to '\' and eliminating ..'s
+Examples:
+'foo/bar/../baz/index.html' -> foo/baz/index.html'
+-->
+<xsl:template name="normalize">
+  <xsl:param name="path"/>
+  <xsl:variable name="path-" select="translate($path, '\', '/')"/>
+  <xsl:choose>
+    <xsl:when test="contains($path-, '/../')">
+
+      <xsl:variable name="pa" select="substring-before($path-, '/../')"/>
+      <xsl:variable name="th" select="substring-after($path-, '/../')"/>
+      <xsl:variable name="pa-">
+        <xsl:call-template name="dirname">
+          <xsl:with-param name="path" select="$pa"/>
+        </xsl:call-template>
+      </xsl:variable>
+      <xsl:variable name="pa-th" select="concat($pa-, $th)"/>
+      <xsl:call-template name="normalize">
+        <xsl:with-param name="path" select="$pa-th"/>
+      </xsl:call-template>
+    </xsl:when>
+
+    <xsl:otherwise>
+      <xsl:value-of select="$path-"/>
+    </xsl:otherwise>
+  </xsl:choose>
+
+</xsl:template>
+
+<!--
+Uncomment this to test.
+Usage: saxon pathutils.xsl pathutils.xsl path=foo/bar
+
+<xsl:param name="path" select="'/foo/bar/../baz/index.html'"/>
+<xsl:template match="/">
+  <xsl:message>
+    path           = <xsl:value-of select="$path"/>
+    normalize      = <xsl:call-template name="normalize">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    dirname        = <xsl:call-template name="dirname">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    dirname-nz     = <xsl:call-template name="dirname-nz">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    filename       = <xsl:call-template name="filename">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    ext            = <xsl:call-template name="ext">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    filename-noext = <xsl:call-template name="filename-noext">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    path-noext     = <xsl:call-template name="path-noext">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    path-noext-nz  = <xsl:call-template name="path-noext-nz">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    path-nofrag    = <xsl:call-template name="path-nofrag">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+ 
+  </xsl:message>
+</xsl:template>
+-->
+
+</xsl:stylesheet>

Added: forrest/trunk/plugins/IMSManifest/resources/stylesheets/repositoryUtils.xsl
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/resources/stylesheets/repositoryUtils.xsl	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,84 @@
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<!--
+  Copyright 2002-2004 The Apache Software Foundation
+
+  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.
+-->
+<!--
+
+A set of XSLT templates useful for parsing repository related commands.
+A command for the repository is formated as follows:
+
+http://domain.com/repositoryCommand/[command]/[parametersForCommand]/repositoryURI/[repositoryURI]
+
+where [command] is one of:
+
+* getSCO
+
+(for parameters see below)
+
+and [repositoryURI] is the URI of the repository we wish to access (no protocol)
+
+====================
+Command Descriptions
+====================
+
+getSCO
+======
+
+Retrieves a Sharable Content Object from the indicated repository. This command
+takes the format .../getSCO/[SCOName]
+
+where
+
+[SCOName] is the name of the SCO we wish to retrieve
+
+========
+Examples
+========
+
+/repositoryCommand/getSCO/HowTo/repositoryURI/www.burrokeet.org/repositoryData
+
+will retrive the SCO called HowTo from the repository located at http://www.burrokeet.org/repositoryData
+
+
+-->
+
+<xsl:param name="cmdRepositoryGetSCO">/repositoryCommand/getSCO/</xsl:param>
+
+<xsl:param name="repositoryURILabel">/repositoryURI/</xsl:param>
+
+<!-- Return the burrokeet command in a path that includes one -->
+<xsl:template name="getRepositoryCommand">
+  <xsl:param name="path"/>
+  <xsl:if test="contains($path, $cmdRepositoryGetSCO)">getSCO</xsl:if>
+</xsl:template>
+
+<!-- return the name of the SCO too use -->
+<xsl:template name="getSCOName">
+  <xsl:param name="path"/>
+  <xsl:variable name="fullCommand">
+    <xsl:value-of select="substring-after($path, $cmdRepositoryGetSCO)"/>
+  </xsl:variable>
+  <xsl:value-of select="substring-before($fullCommand, $repositoryURILabel)"/>
+</xsl:template>
+
+<!-- return the URI of the repository to use -->
+<xsl:template name="getRepositoryURI">
+  <xsl:param name="path"/>
+  <xsl:value-of select="substring-after($path, $repositoryURILabel)"/>
+</xsl:template>
+
+
+</xsl:stylesheet>

Added: forrest/trunk/plugins/IMSManifest/sitemap.xmap
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/sitemap.xmap	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,313 @@
+<?xml version="1.0"?>
+<!--
+  Copyright 2002-2004 The Apache Software Foundation
+
+  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.
+-->
+  <!-- ============================================================ -->
+  <!-- IMS Maniifest Plugin                                         -->
+  <!-- This plugin replaces the site.xml and tabs.xml file with     -->
+  <!-- an IMS Manifest file conforming to the IMS specifications    -->
+  <!-- for Content Packages.                                        -->
+  <!--                                                              -->
+  <!-- In the absence of an IMSManifest.xml file the plugin will    -->
+  <!-- fallback to using the standard site.xml and tabs.xml files.  -->
+  <!-- ============================================================ -->
+
+<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
+
+  <map:components>
+    <map:selectors>
+      <map:selector logger="sitemap.selector.config" name="config" src="org.apache.cocoon.selection.SimpleSelector" />
+    </map:selectors>
+    
+    <map:transformers default="xslt">
+      <map:transformer name="i18n" src="org.apache.cocoon.transformation.I18nTransformer">
+        <catalogues default="menu">
+          <catalogue id="menu" name="menu" location="{project:translations}"/>
+        </catalogues>
+        <!-- Commented out to verify your translations
+        <untranslated-text>untranslated</untranslated-text> -->
+        <cache-at-startup>true</cache-at-startup>
+      </map:transformer>
+    </map:transformers>
+    
+    <map:actions>
+      <map:action name="locale" src="org.apache.cocoon.acting.LocaleAction" />
+    </map:actions>
+  </map:components>
+  
+  <map:resources>
+    <map:resource name="skinit">
+        <map:select type="exists">
+          <map:when test="{project:skins-dir}{forrest:skin}/xslt/html/{type}.xsl">
+            <map:transform src="{project:skins-dir}{forrest:skin}/xslt/html/{type}.xsl">
+              <map:parameter name="notoc" value="{notoc}"/>
+              <!-- For backwards-compat with 0.2 - 0.4 skins -->
+              <map:parameter name="isfaq" value="{notoc}"/>
+              <map:parameter name="nopdf" value="{nopdf}"/>
+              <map:parameter name="path" value="{path}"/>
+              <map:parameter name="config-file" value="{project:skinconf}"/>
+            </map:transform>
+          </map:when>
+          <map:otherwise>
+            <map:transform src="{forrest:context}/skins/{forrest:skin}/xslt/html/{type}.xsl">
+              <map:parameter name="notoc" value="{notoc}"/>
+              <!-- For backwards-compat with 0.2 - 0.4 skins -->
+              <map:parameter name="isfaq" value="{notoc}"/>
+              <map:parameter name="nopdf" value="{nopdf}"/>
+              <map:parameter name="path" value="{path}"/>
+              <map:parameter name="config-file" value="{project:skinconf}"/>
+            </map:transform>
+          </map:otherwise>
+        </map:select>
+      <map:serialize/>
+    </map:resource>
+
+  </map:resources>
+
+    
+  <map:pipelines>
+  
+   <!-- ============================================================ -->
+   <!-- Linkmap.xmap overrides                                       -->
+   <!-- ============================================================ -->
+  
+    <map:pipeline>
+      <map:match pattern="abs-linkmap">
+        <map:select type="exists">
+          <map:when test="{project:content.xdocs}imsmanifest.xml">
+            <map:generate src="{project:content.xdocs}imsmanifest.xml" />
+            <map:transform src="{forrest:plugins}/IMSManifest/resources/stylesheets/imsmanifest2site.xsl"/>
+          </map:when>
+          <map:when test="{project:content.xdocs}site.xml">
+            <map:generate src="{project:content.xdocs}site.xml" />
+          </map:when>
+        </map:select>
+        <map:transform src="{forrest:stylesheets}/absolutize-linkmap.xsl" />
+        <map:serialize type="xml" />
+      </map:match>
+
+    </map:pipeline>
+    
+   <!-- ============================================================ -->
+   <!-- tabs.xmap overrides                                          -->
+   <!-- ============================================================ -->
+  
+    <map:pipeline >
+      <map:match pattern="**tab-*.html">
+        <map:select type="exists">
+          <map:when test="{project:content.xdocs}imsmanifest.xml">
+            <map:generate src="{project:content.xdocs}imsmanifest.xml" />
+            <map:transform src="{forrest:plugins}/IMSManifest/resources/stylesheets/imsmanifest2tabs.xsl"/>
+          </map:when>
+          <map:when test="{project:content.xdocs}tabs.xml">
+            <map:generate src="{project:content.xdocs}tabs.xml" />
+          </map:when>
+        </map:select>
+        <map:transform type="linkrewriter" src="cocoon:/{1}linkmap-{2}.html"/>
+        <map:call resource="skinit">
+          <map:parameter name="type" value="tab2menu"/>
+          <map:parameter name="path" value="{1}{2}.html"/>
+        </map:call>
+      </map:match>      
+    </map:pipeline>
+ 
+    
+    <!-- ============================================================ -->
+    <!-- menu.xmap overrides                                          -->
+    <!-- ============================================================ -->
+    
+    <map:pipeline internal-only="false">
+
+      <map:match pattern="abs-menulinks">
+        <map:select type="exists">
+          <map:when test="{project:content.xdocs}imsmanifest.xml">
+            <map:generate src="{project:content.xdocs}imsmanifest.xml" />
+            <map:transform src="{forrest:plugins}/IMSManifest/resources/stylesheets/imsmanifest2site.xsl"/>
+            <map:transform src="{forrest:stylesheets}/absolutize-linkmap.xsl" />
+            <map:transform src="{forrest:stylesheets}/site2site-normalizetabs.xsl" />
+            <map:serialize type="xml"/>
+          </map:when>
+          <map:when test="{project:content.xdocs}site.xml">
+            <map:generate src="{project:content.xdocs}site.xml" />
+            <map:transform src="{forrest:stylesheets}/absolutize-linkmap.xsl" />
+            <map:transform src="{forrest:stylesheets}/site2site-normalizetabs.xsl" />
+            <map:transform src="{forrest:stylesheets}/normalizehrefs.xsl"/>
+            <map:serialize type="xml"/>
+          </map:when>
+        </map:select>
+      </map:match>
+
+      <map:match pattern="**menulinks-*">
+        <map:select type="exists">
+          <map:when test="{project:content.xdocs}imsmanifest.xml">
+            <map:generate src="{project:content.xdocs}imsmanifest.xml" />
+            <map:transform src="{forrest:plugins}/IMSManifest/resources/stylesheets/imsmanifest2site.xsl"/>
+            <map:transform src="{forrest:stylesheets}/absolutize-linkmap.xsl" />
+          </map:when>
+          <map:when test="{project:content.xdocs}site.xml">
+            <map:generate src="{project:content.xdocs}site.xml" />
+            <map:transform src="{forrest:stylesheets}/absolutize-linkmap.xsl" />
+          </map:when>
+        </map:select>
+
+        <map:select type="config">
+          <map:parameter name="value" value="{defaults:menu-scheme}"/>
+
+          <map:when test="tab_attributes">
+            <map:transform src="{forrest:stylesheets}/site2site-normalizetabs.xsl" />
+            <map:transform src="{forrest:stylesheets}/normalizehrefs.xsl"/>
+            <map:transform src="{forrest:stylesheets}/site2site-selectnode.xsl">
+              <map:parameter name="path" value="{1}{2}"/>
+            </map:transform>
+          </map:when>
+
+        </map:select>
+
+        <map:transform src="{forrest:stylesheets}/relativize-linkmap.xsl">
+          <map:parameter name="path" value="{1}{2}" />
+        </map:transform>
+        <map:serialize type="xml" />
+      </map:match>
+      
+      <map:match pattern="**book-*">
+
+        <map:select type="exists">
+
+          <map:when test="{project:content.xdocs}{1}book.xml">
+            <!-- If a hand-created book.xml exists, use it -->
+            <map:parameter name="url" value="{project:content.xdocs}{1}book.xml" />
+            <map:generate src="{project:content.xdocs}{1}book.xml" />
+          </map:when>
+
+          <map:otherwise>
+            <!-- If no book.xml, generate it from the linkmap. -->
+            <map:generate src="cocoon:/{1}menulinks-{2}" />
+            <!-- The above generates the subset of the linkmap relevant to our directory. -->
+            <map:transform src="{forrest:stylesheets}/site2book.xsl" />
+          </map:otherwise>
+
+        </map:select>
+
+        <map:select type="config">
+          <map:parameter name="value" value="{defaults:i18n}"/>
+          <map:when test="true">
+
+            <map:act type="locale">
+              <map:transform src="{forrest:stylesheets}/i18n.xsl"/>
+              <map:transform type="i18n">
+                <!-- We can use a default locale attribute or Request Parameter
+                <map:parameter name="locale" value="{defaults:locale}"/>
+                <map:parameter name="locale" value="{request-param:locale}"/>
+                -->
+                <map:parameter name="locale" value="{lang}{country}{variant}"/>
+              </map:transform>
+            </map:act>
+
+          </map:when>
+        </map:select>
+
+        <map:serialize type="xml"/>
+
+      </map:match>
+    </map:pipeline>
+     
+    <!-- ============================================================ -->
+    <!-- Repository Commands                                          -->
+    <!-- ============================================================ -->
+    
+    <map:pipeline>
+      <map:match pattern="repositoryCommand/getSCO/**/repositoryURI/**/*.xml">
+        <!-- FIXME: is there any way of preventing the need to copy this stuff manually when it changes in the forrest.xmap file in Forrest -->
+        <map:select type="exists">
+          <map:when test="/{2}/{1}/src/documentation/content/xdocs/{3}.cwiki">
+            <map:match type="regexp" pattern="^(.*?)([^/]*).xml$">
+              <map:generate type="text2xml" src="http://{2}/{1}/src/documentation/content/xdocs/{3}.cwiki" />
+              <map:transform type="lexer"   src="cocoon:/wiki.xlex"/>
+              <map:transform type="parser"  src="cocoon:/wiki.xgrm"/>
+              <map:transform type="xsltc" src="{forrest:home}/context/resources/chaperon/stylesheets/wiki2xdoc.xsl">
+                <map:parameter name="name" value="{2}" />
+              </map:transform>
+              <map:serialize/>
+            </map:match>
+          </map:when>
+
+          <map:when test="/{2}/{1}/src/documentation/content/xdocs/{3}.txt">
+            <map:match type="regexp" pattern="^(.*?)([^/]*).xml$">
+              <map:generate type="text2xml" src="http://{2}/{1}/src/documentation/content/xdocs/{3}.txt" />
+              <map:transform src="{forrest:stylesheets}/text2document.xsl">
+                <map:parameter name="filename" value="{2}" />
+              </map:transform>
+              <map:serialize/>
+            </map:match>
+          </map:when>
+
+          <map:when test="/{2}/{1}/src/documentation/content/xdocs/{3}.sxw">
+            <map:aggregate element="openOffice">
+              <!-- FIXME: on windows we need three / after the protocol, on Linux we need 2 -->
+              <map:part src="jar:http://{2}/{1}/src/documentation/content/xdocs/{3}.sxw!/meta.xml"/>
+              <map:part src="jar:http://{2}/{1}/src/documentation/content/xdocs/{3}.sxw!/styles.xml"/>
+              <map:part src="jar:http://{2}/{1}/src/documentation/content/xdocs/{3}.sxw!/content.xml"/>
+            </map:aggregate>
+            <map:select type="exists">
+              <map:when test="{project:resources.stylesheets}/openoffice-writer2forrest.xsl">
+                <map:transform src="{project:resources.stylesheets}/openoffice-writer2forrest.xsl">
+                  <map:parameter name="filename" value="{2}" />
+                  <map:parameter name="extension" value="sxw" />
+                </map:transform>
+              </map:when>
+              <map:otherwise>
+                <map:transform src="{forrest:stylesheets}/openoffice-writer2forrest.xsl">
+                  <map:parameter name="filename" value="{2}" />
+                  <map:parameter name="extension" value="sxw" />
+                </map:transform>
+              </map:otherwise>
+            </map:select>
+            <map:serialize/>
+          </map:when>     
+          
+          <map:when test="/{2}/{1}/src/documentation/content/xdocs/{3}.sxi">
+            <map:aggregate element="openOffice">
+              <!-- FIXME: on windows we need three / after the protocol, on LInux we need 2 -->
+              <map:part src="jar:http://{2}/{1}/src/documentation/content/xdocs/{3}.sxi!/meta.xml"/>
+              <map:part src="jar:http://{2}/{1}/src/documentation/content/xdocs/{3}.sxi!/styles.xml"/>
+              <map:part src="jar:http://{2}/{1}/src/documentation/content/xdocs/{3}.sxi!/content.xml"/>
+            </map:aggregate>
+            <map:select type="exists">
+              <map:when test="{project:resources.stylesheets}/openoffice-impress2forrest.xsl">
+                <map:transform src="{project:resources.stylesheets}/openoffice-impress2forrest.xsl">
+                  <map:parameter name="filename" value="{2}" />
+                  <map:parameter name="extension" value="sxi" />
+                </map:transform>
+              </map:when>
+              <map:otherwise>
+                <map:transform src="{forrest:stylesheets}/openoffice-impress2forrest.xsl">
+                  <map:parameter name="filename" value="{2}" />
+                  <map:parameter name="extension" value="sxi" />
+                </map:transform>
+              </map:otherwise>
+            </map:select>
+            <map:serialize/>
+          </map:when>
+     
+          <map:otherwise>
+            <map:generate src="http://{2}/{1}/src/documentation/content/xdocs/{3}.xml"/>
+            <map:serialize/>
+          </map:otherwise>
+        </map:select>
+      </map:match>
+    </map:pipeline>
+    
+  </map:pipelines>    
+</map:sitemap>

Added: forrest/trunk/plugins/IMSManifest/src/documentation/classes/CatalogManager.properties
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/src/documentation/classes/CatalogManager.properties	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,37 @@
+# Copyright 2002-2004 The Apache Software Foundation
+#
+# 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.
+
+#=======================================================================
+# CatalogManager.properties
+#
+# This is the default properties file for Apache Forrest.
+# This facilitates local configuration of application-specific catalogs.
+#
+# See the Apache Forrest documentation:
+# http://forrest.apache.org/docs/your-project.html
+# http://forrest.apache.org/docs/validation.html
+
+# verbosity ... level of messages for status/debug
+# See forrest/src/core/context/WEB-INF/cocoon.xconf
+
+# catalogs ... list of additional catalogs to load
+#  (Note that Apache Forrest will automatically load its own default catalog
+#  from src/core/context/resources/schema/catalog.xcat)
+# use full pathnames
+# pathname separator is always semi-colon (;) regardless of operating system
+# directory separator is always slash (/) regardless of operating system
+#
+#catalogs=/home/me/forrest/my-site/src/documentation/resources/schema/catalog.xcat
+catalogs=
+

Added: forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/images/group.svg
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/images/group.svg	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,81 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+  Copyright 2002-2004 The Apache Software Foundation
+
+  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.
+-->
+
+<!--
+       SVG Anteater logo
+
+To get started with SVG, I'd recommend getting the Adobe SVG plugin, and the
+xml-batik CVS module. Then have a look at the xml-batik/samples files. Use the
+SVG spec (http://www.w3.org/TR/SVG/) as a reference.
+-->
+
+<!-- See Forrest Issue: FOR-229
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
+[
+ <!ATTLIST svg xmlns:for CDATA #FIXED "http://apache.org/forrest">
+ <!ENTITY % textExt "|for:group-name">
+ <!ELEMENT for:group-name (#PCDATA)>
+]>
+-->
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:xlink="http://www.w3.org/1999/xlink"
+     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+     xsl:version="1.0"
+     xmlns:for="http://apache.org/forrest"
+     width="220" height="65" >
+  <title>Anteater logo</title>
+
+  <defs>
+
+    <!--
+    <radialGradient id="radialGradient">
+      <stop style="stop-color:gold" offset="0"/>
+      <stop style="stop-color:orange" offset=".5"/>
+      <stop style="stop-color:crimson" offset="1"/>
+    </radialGradient>
+    <linearGradient id="linearGradient">
+      <stop style="stop-color:gold" offset="0"/>
+      <stop style="stop-color:orange" offset=".5"/>
+      <stop style="stop-color:crimson" offset="1"/>
+    </linearGradient>
+    -->
+
+    <linearGradient id="gradient" x1="0" y1="0" x2="0" y2="1">
+      <stop style="stop-color:white" offset="0"/>
+      <stop style="stop-color:lightgreen" offset="1"/>
+    </linearGradient>
+
+    <filter id="shadowFilter"  filterUnits="objectBoundingBox">
+      <!-- Takes the alpha channel (black outline of the text), blurs it and saves as 'blur' -->
+      <feGaussianBlur in="SourceAlpha" stdDeviation="2 2" result="blur"/>
+      <!-- Takes saved 'blur' and offsets it by 4 pixels, saves as 'offsetBlur' -->
+      <feOffset in="blur" dx="4" dy="4" result="offsetBlur"/>
+      <!-- Merges SourceGraphic (original image) and 'offsetBlur', putting the
+      former 'over' the latter, and using the merged result as the finished
+      image -->
+      <feComposite in="SourceGraphic" in2="offsetBlur" operator="over"/>
+    </filter>
+
+  </defs>
+
+  <g filter="url(#shadowFilter)" fill="url(#gradient)">
+    <text x="40%" y="60%" style="font-size:24pt; font-family:Verdana ; text-anchor: middle">
+    <for:group-name />
+    </text>
+  </g>
+</svg>

Added: forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/images/icon.png
==============================================================================
Binary file. No diff available.

Added: forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/images/project.svg
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/images/project.svg	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,81 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+  Copyright 2002-2004 The Apache Software Foundation
+
+  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.
+-->
+
+<!--
+       SVG Anteater logo
+
+To get started with SVG, I'd recommend getting the Adobe SVG plugin, and the
+xml-batik CVS module. Then have a look at the xml-batik/samples files. Use the
+SVG spec (http://www.w3.org/TR/SVG/) as a reference.
+-->
+
+<!-- See Forrest Issue: FOR-229
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
+[
+ <!ATTLIST svg xmlns:for CDATA #FIXED "http://apache.org/forrest">
+ <!ENTITY % textExt "|for:project-name">
+ <!ELEMENT for:project-name (#PCDATA)>
+]>
+-->
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:xlink="http://www.w3.org/1999/xlink"
+     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+     xsl:version="1.0"
+     xmlns:for="http://apache.org/forrest"
+     width="220" height="65" >
+  <title>Anteater logo</title>
+
+  <defs>
+
+    <!--
+    <radialGradient id="radialGradient">
+      <stop style="stop-color:gold" offset="0"/>
+      <stop style="stop-color:orange" offset=".5"/>
+      <stop style="stop-color:crimson" offset="1"/>
+    </radialGradient>
+    <linearGradient id="linearGradient">
+      <stop style="stop-color:gold" offset="0"/>
+      <stop style="stop-color:orange" offset=".5"/>
+      <stop style="stop-color:crimson" offset="1"/>
+    </linearGradient>
+    -->
+
+    <linearGradient id="gradient" x1="0" y1="0" x2="0" y2="1">
+      <stop style="stop-color:white" offset="0"/>
+      <stop style="stop-color:lightgreen" offset="1"/>
+    </linearGradient>
+
+    <filter id="shadowFilter"  filterUnits="objectBoundingBox">
+      <!-- Takes the alpha channel (black outline of the text), blurs it and saves as 'blur' -->
+      <feGaussianBlur in="SourceAlpha" stdDeviation="2 2" result="blur"/>
+      <!-- Takes saved 'blur' and offsets it by 4 pixels, saves as 'offsetBlur' -->
+      <feOffset in="blur" dx="4" dy="4" result="offsetBlur"/>
+      <!-- Merges SourceGraphic (original image) and 'offsetBlur', putting the
+      former 'over' the latter, and using the merged result as the finished
+      image -->
+      <feComposite in="SourceGraphic" in2="offsetBlur" operator="over"/>
+    </filter>
+
+  </defs>
+
+  <g filter="url(#shadowFilter)" fill="url(#gradient)">
+    <text x="51%" y="75%" style="font-size:32pt; font-family:Verdana ; text-anchor: middle" >
+    <for:project-name />
+    </text>
+  </g>
+</svg>

Added: forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/imsmanifest.xml
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/imsmanifest.xml	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Generated by Burrokeet (see http://www.burrokeet.org)-->
+<manifest xmlns="http://www.imsproject.org/xsd/imscp_rootv1p1p2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_rootv1p2" xsi:schemaLocation="http://www.imsproject.org/xsd/imscp_rootv1p1p2 schema/imscp_rootv1p1p2.xsd" identifier="@manifest.id@">
+  <organizations default="ORG-6C075DE6-EFBA-2928-6EAD-A3DE1359F9FF">
+    <organization identifier="ORG-6C075DE6-EFBA-2928-6EAD-A3DE1359F9FF" structure="hierarchical">
+      <title>Index</title>
+      <item identifier="ITEM-76A6AAAA-269B-51B6-B84D-99521C8AB2A4" isvisible="true" identifierref="RES-606A9253-43B2-3DC8-D6FC-7BCBA47B3CA0">
+        <title>Index</title>
+      </item>
+      <item identifier="ITEM-5BBDC722-935D-5376-A8E7-87C7881A9208" identifierref="RES-747E82F0-EC92-4EBC-C562-0F67B20D619C" isvisible="true">
+        <title>Burrokeet HowTo</title>
+      </item>
+    </organization>
+  </organizations>
+  <resources>
+    <resource type="text/xml" adlcp:scormtype="asset" identifier="RES-606A9253-43B2-3DC8-D6FC-7BCBA47B3CA0" href="index.xml">
+      <file href="index.xml" />
+    </resource>
+    <resource type="text/html" adlcp:scormtype="asset" identifier="RES-747E82F0-EC92-4EBC-C562-0F67B20D619C" href="/repositoryCommand/getSCO/HowTo/repositoryURI/www.burrokeet.org/repositoryData" />
+  </resources>
+</manifest>
+

Added: forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/index.xml
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/src/documentation/content/xdocs/index.xml	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
+<document> 
+  <header> 
+    <title>Burrokeet Seed Project</title> 
+  </header> 
+  <body>
+  	<section>
+  		<title>Welcome to Burrokeet</title>
+  		<p>Congratulations, you have created new Burrokeet Content Package.</p>
+  	</section>
+  </body>
+</document>
\ No newline at end of file

Added: forrest/trunk/plugins/IMSManifest/src/documentation/skinconf.xml
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/src/documentation/skinconf.xml	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,354 @@
+<?xml version="1.0"?>
+<!--
+  Copyright 2002-2004 The Apache Software Foundation
+
+  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.
+-->
+
+<!--
+Skin configuration file. This file contains details of your project,
+which will be used to configure the chosen Forrest skin.
+-->
+
+<!DOCTYPE skinconfig PUBLIC "-//APACHE//DTD Skin Configuration V0.6-3//EN" "http://forrest.apache.org/dtd/skinconfig-v06-3.dtd">
+<skinconfig>
+  <!-- To enable lucene search add provider="lucene" (default is google).
+    Add box-location="alt" to move the search box to an alternate location
+    (if the skin supports it) and box-location="all" to show it in all
+    available locations on the page.  Remove the <search> element to show
+    no search box. @domain will enable sitesearch for the specific domain with google.
+    In other words google will search the @domain for the query string.
+  -->
+  <search name="MyProject" domain="mydomain" provider="google"/>
+
+  <!-- Disable the print link? If enabled, invalid HTML 4.0.1 -->
+  <disable-print-link>true</disable-print-link>  
+  <!-- Disable the PDF link? -->
+  <disable-pdf-link>false</disable-pdf-link>
+  <!-- Disable the POD link? -->
+  <disable-pod-link>true</disable-pod-link>
+  <!-- Disable the Text link? FIXME: NOT YET IMPLEMENETED. -->
+  <disable-txt-link>true</disable-txt-link>
+  <!-- Disable the xml source link? -->
+  <!-- The xml source link makes it possible to access the xml rendition
+    of the source frim the html page, and to have it generated statically.
+    This can be used to enable other sites and services to reuse the
+    xml format for their uses. Keep this disabled if you don't want other
+    sites to easily reuse your pages.-->
+  <disable-xml-link>true</disable-xml-link>
+
+  <!-- Disable navigation icons on all external links? -->
+  <disable-external-link-image>false</disable-external-link-image>
+
+  <!-- Disable w3c compliance links? 
+    Use e.g. align="center" to move the compliance links logos to 
+    an alternate location default is left.
+    (if the skin supports it) -->
+  <disable-compliance-links>false</disable-compliance-links>
+
+  <!-- Render mailto: links unrecognisable by spam harvesters? -->
+  <obfuscate-mail-links>true</obfuscate-mail-links>
+  <obfuscate-mail-value>.at.</obfuscate-mail-value>
+
+  <!-- Disable the javascript facility to change the font size -->
+  <disable-font-script>true</disable-font-script>
+
+  <!-- mandatory project logo
+       default skin: renders it at the top -->
+  <project-name>MyProject</project-name>
+  <project-description>MyProject Description</project-description>
+  <project-url>http://myproj.mygroup.org/</project-url>
+  <project-logo>images/project.png</project-logo>
+  <!-- Alternative static image:
+  <project-logo>images/project-logo.gif</project-logo> -->
+
+  <!-- optional group logo
+       default skin: renders it at the top-left corner -->
+  <group-name>MyGroup</group-name>
+  <group-description>MyGroup Description</group-description>
+  <group-url>http://mygroup.org</group-url>
+  <group-logo>images/group.png</group-logo>
+  <!-- Alternative static image:
+  <group-logo>images/group-logo.gif</group-logo> -->
+
+  <!-- optional host logo (e.g. sourceforge logo)
+       default skin: renders it at the bottom-left corner -->
+  <host-url></host-url>
+  <host-logo></host-logo>
+
+  <!-- relative url of a favicon file, normally favicon.ico -->
+  <favicon-url></favicon-url>
+
+  <!-- The following are used to construct a copyright statement -->
+  <year>2004</year>
+  <vendor>The Acme Software Foundation.</vendor>
+  <!-- The optional copyright-link URL will be used as a link in the
+    copyright statement
+  <copyright-link>http://www.apache.org/licenses/</copyright-link>
+  -->
+
+  <!-- Some skins use this to form a 'breadcrumb trail' of links.
+    Use location="alt" to move the trail to an alternate location
+    (if the skin supports it).
+	  Omit the location attribute to display the trail in the default location.
+	  Use location="none" to not display the trail (if the skin supports it).
+    For some skins just set the attributes to blank.
+  -->
+  <trail>
+    <link1 name="myGroup" href="http://www.apache.org/"/>
+    <link2 name="myProject" href="http://forrest.apache.org/"/>
+    <link3 name="" href=""/>
+  </trail>
+
+  <!-- Configure the TOC, i.e. the Table of Contents.
+  @max-depth
+   how many "section" levels need to be included in the
+   generated Table of Contents (TOC). 
+  @min-sections
+   Minimum required to create a TOC.
+  @location ("page","menu","page,menu", "none")
+   Where to show the TOC.
+  -->
+  <toc max-depth="2" min-sections="1" location="page"/>
+
+  <!-- Heading types can be clean|underlined|boxed  -->
+  <headings type="boxed"/>
+  
+  <!-- The optional feedback element will be used to construct a
+    feedback link in the footer with the page pathname appended:
+    <a href="@href">{@to}</a>
+    -->
+  <feedback to="webmaster@foo.com"
+    href="mailto:webmaster@foo.com?subject=Feedback&#160;" >
+    Send feedback about the website to:
+  </feedback>
+  <!--
+    extra-css - here you can define custom css-elements that are 
+    a. overriding the fallback elements or 
+    b. adding the css definition from new elements that you may have 
+       used in your documentation.
+    -->
+  <extra-css>
+    <!--Example of b. 
+        To define the css definition of a new element that you may have used
+        in the class attribute of a <p> node. 
+        e.g. <p class="quote"/>
+    -->
+    p.quote {
+      margin-left: 2em;
+      padding: .5em;
+      background-color: #f0f0f0;
+      font-family: monospace;
+    }
+  </extra-css>
+
+  <colors>
+  <!-- These values are used for the generated CSS files. -->
+
+  <!-- Krysalis -->
+<!--
+    <color name="header"    value="#FFFFFF"/>
+
+    <color name="tab-selected" value="#a5b6c6" link="#000000" vlink="#000000" hlink="#000000"/>
+    <color name="tab-unselected" value="#F7F7F7"  link="#000000" vlink="#000000" hlink="#000000"/>
+    <color name="subtab-selected" value="#a5b6c6"  link="#000000" vlink="#000000" hlink="#000000"/>
+    <color name="subtab-unselected" value="#a5b6c6"  link="#000000" vlink="#000000" hlink="#000000"/>
+
+    <color name="heading" value="#a5b6c6"/>
+    <color name="subheading" value="#CFDCED"/>
+        
+    <color name="navstrip" value="#CFDCED" font="#000000" link="#000000" vlink="#000000" hlink="#000000"/>
+    <color name="toolbox" value="#a5b6c6"/>
+    <color name="border" value="#a5b6c6"/>
+        
+    <color name="menu" value="#F7F7F7" link="#000000" vlink="#000000" hlink="#000000"/>    
+    <color name="dialog" value="#F7F7F7"/>
+            
+    <color name="body"    value="#ffffff" link="#0F3660" vlink="#009999" hlink="#000066"/>
+    
+    <color name="table" value="#a5b6c6"/>    
+    <color name="table-cell" value="#ffffff"/>    
+    <color name="highlight" value="#ffff00"/>
+    <color name="fixme" value="#cc6600"/>
+    <color name="note" value="#006699"/>
+    <color name="warning" value="#990000"/>
+    <color name="code" value="#a5b6c6"/>
+        
+    <color name="footer" value="#a5b6c6"/>
+-->
+  
+  <!-- Forrest -->
+<!--
+    <color name="header"    value="#294563"/>
+
+    <color name="tab-selected" value="#4a6d8c" link="#0F3660" vlink="#0F3660" hlink="#000066"/>
+    <color name="tab-unselected" value="#b5c7e7" link="#0F3660" vlink="#0F3660" hlink="#000066"/>
+    <color name="subtab-selected" value="#4a6d8c" link="#0F3660" vlink="#0F3660" hlink="#000066"/>
+    <color name="subtab-unselected" value="#4a6d8c" link="#0F3660" vlink="#0F3660" hlink="#000066"/>
+
+    <color name="heading" value="#294563"/>
+    <color name="subheading" value="#4a6d8c"/>
+        
+    <color name="navstrip" value="#cedfef" font="#0F3660" link="#0F3660" vlink="#0F3660" hlink="#000066"/>
+    <color name="toolbox" value="#4a6d8c"/>
+    <color name="border" value="#294563"/>
+    
+    <color name="menu" value="#4a6d8c" font="#cedfef" link="#ffffff" vlink="#ffffff" hlink="#ffcf00"/>    
+    <color name="dialog" value="#4a6d8c"/>
+            
+    <color name="body" value="#ffffff"  link="#0F3660" vlink="#009999" hlink="#000066"/>
+    
+    <color name="table" value="#7099C5"/>    
+    <color name="table-cell" value="#f0f0ff"/>    
+    <color name="highlight" value="#ffff00"/>
+    <color name="fixme" value="#cc6600"/>
+    <color name="note" value="#006699"/>
+    <color name="warning" value="#990000"/>
+    <color name="code" value="#CFDCED"/>
+        
+    <color name="footer" value="#cedfef"/>
+-->
+
+  <!-- Collabnet --> 
+<!--
+    <color name="header"    value="#003366"/>
+
+    <color name="tab-selected" value="#dddddd" link="#555555" vlink="#555555" hlink="#555555"/>
+    <color name="tab-unselected" value="#999999" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
+    <color name="subtab-selected" value="#cccccc" link="#000000" vlink="#000000" hlink="#000000"/>
+    <color name="subtab-unselected" value="#cccccc" link="#555555" vlink="#555555" hlink="#555555"/>
+
+    <color name="heading" value="#003366"/>
+    <color name="subheading" value="#888888"/>
+    
+    <color name="navstrip" value="#dddddd" font="#555555"/>
+    <color name="toolbox" value="#dddddd" font="#555555"/>
+    <color name="border" value="#999999"/>
+    
+    <color name="menu" value="#ffffff"/>    
+    <color name="dialog" value="#eeeeee"/>
+            
+    <color name="body"      value="#ffffff"/>
+    
+    <color name="table" value="#ccc"/>    
+    <color name="table-cell" value="#ffffff"/>   
+    <color name="highlight" value="#ffff00"/>
+    <color name="fixme" value="#cc6600"/>
+    <color name="note" value="#006699"/>
+    <color name="warning" value="#990000"/>
+    <color name="code" value="#003366"/>
+        
+    <color name="footer" value="#ffffff"/>
+-->
+ <!-- Lenya using pelt-->
+<!--
+    <color name="header" value="#ffffff"/>
+
+    <color name="tab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
+    <color name="tab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
+    <color name="subtab-selected" value="#000000" link="#000000" vlink="#000000" hlink="#000000"/>
+    <color name="subtab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
+
+    <color name="heading" value="#E5E4D9"/>
+    <color name="subheading" value="#000000"/>
+    <color name="published" value="#4C6C8F" font="#FFFFFF"/>
+    <color name="feedback" value="#4C6C8F" font="#FFFFFF" align="center"/>
+    <color name="navstrip" value="#E5E4D9" font="#000000"/>
+
+    <color name="toolbox" value="#CFDCED" font="#000000"/>
+
+    <color name="border" value="#999999"/>
+    <color name="menu" value="#4C6C8F" font="#ffffff" link="#ffffff" vlink="#ffffff" hlink="#ffffff" current="#FFCC33" />    
+    <color name="menuheading" value="#cfdced" font="#000000" />
+    <color name="searchbox" value="#E5E4D9" font="#000000"/>
+    
+    <color name="dialog" value="#CFDCED"/>
+    <color name="body" value="#ffffff" />            
+    
+    <color name="table" value="#ccc"/>    
+    <color name="table-cell" value="#ffffff"/>   
+    <color name="highlight" value="#ffff00"/>
+    <color name="fixme" value="#cc6600"/>
+    <color name="note" value="#006699"/>
+    <color name="warning" value="#990000"/>
+    <color name="code" value="#003366"/>
+        
+    <color name="footer" value="#E5E4D9"/>
+-->
+  </colors>
+ 
+  <!-- Settings specific to PDF output. -->
+  <pdf>
+    <!-- 
+       Supported page sizes are a0, a1, a2, a3, a4, a5, executive,
+       folio, legal, ledger, letter, quarto, tabloid (default letter).
+       Supported page orientations are portrait, landscape (default
+       portrait).
+       Supported text alignments are left, right, justify (default left).
+    -->
+    <page size="letter" orientation="portrait" text-align="left"/>
+
+    <!--
+       Margins can be specified for top, bottom, inner, and outer
+       edges. If double-sided="false", the inner edge is always left
+       and the outer is always right. If double-sided="true", the
+       inner edge will be left on odd pages, right on even pages,
+       the outer edge vice versa.
+       Specified below are the default settings.
+    -->
+    <margins double-sided="false">
+      <top>1in</top>
+      <bottom>1in</bottom>
+      <inner>1.25in</inner>
+      <outer>1in</outer>
+    </margins>
+
+    <!--
+      Print the URL text next to all links going outside the file
+    -->
+    <show-external-urls>false</show-external-urls>
+
+    <!--
+      Disable the copyright footer on each page of the PDF.
+      A footer is composed for each page. By default, a "credit" with role=pdf
+      will be used, as explained below. Otherwise a copyright statement
+      will be generated. This latter can be disabled.
+    -->
+    <disable-copyright-footer>false</disable-copyright-footer>
+  </pdf>
+
+  <!-- Credits are typically rendered as a set of small clickable
+    images in the page footer.
+    Use box-location="alt" to move the credit to an alternate location
+    (if the skin supports it). 
+  -->
+  <credits>
+    <credit box-location="alt">
+      <name>Built with Apache Forrest</name>
+      <url>http://forrest.apache.org/</url>
+      <image>images/built-with-forrest-button.png</image>
+      <width>88</width>
+      <height>31</height>
+    </credit>
+    <!-- A credit with @role="pdf" will be used to compose a footer
+     for each page in the PDF, using either "name" or "url" or both.
+    -->
+    <!--
+    <credit role="pdf">
+      <name>Built with Apache Forrest</name>
+      <url>http://forrest.apache.org/</url>
+    </credit>
+    -->
+  </credits>
+
+</skinconfig>

Added: forrest/trunk/plugins/IMSManifest/src/resources/schema/ims_xml.xsd
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/src/resources/schema/ims_xml.xsd	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- filename=ims_xml.xsd -->
+<xsd:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns="http://www.w3.org/XML/1998/namespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
+	<!-- 2001-02-22 edited by Thomas Wason IMS Global Learning Consortium, Inc. -->
+	<xsd:annotation>
+		<xsd:documentation>In namespace-aware XML processors, the &quot;xml&quot; prefix is bound to the namespace name http://www.w3.org/XML/1998/namespace.</xsd:documentation>
+		<xsd:documentation>Do not reference this file in XML instances</xsd:documentation>
+	</xsd:annotation>
+	<xsd:attribute name="lang" type="xsd:language">
+		<xsd:annotation>
+			<xsd:documentation>Refers to universal  XML 1.0 lang attribute</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	<xsd:attribute name="base" type="xsd:anyURI">
+		<xsd:annotation>
+			<xsd:documentation>Refers to XML Base: http://www.w3.org/TR/xmlbase</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	<xsd:attribute name="link" type="xsd:anyURI"/>
+</xsd:schema>

Added: forrest/trunk/plugins/IMSManifest/src/resources/schema/imscp_rootv1p1p2.xsd
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/src/resources/schema/imscp_rootv1p1p2.xsd	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,345 @@
+<?xml version="1.0"?>
+
+<!-- edited with XML Spy v3.5 (http://www.xmlspy.com) by Thomas Wason (private) -->
+<!-- filename=ims_cp_rootv1p1p2.xsd -->
+<!-- Copyright (2) 2001 IMS Global Learning Consortium, Inc. -->
+<!-- edited by Thomas Wason  -->
+<!-- Conforms to w3c http://www.w3.org/TR/xmlschema-1/ 2000-10-24-->
+
+<xsd:schema xmlns="http://www.imsproject.org/xsd/imscp_rootv1p1p2" 
+            targetNamespace="http://www.imsproject.org/xsd/imscp_rootv1p1p2" 
+            xmlns:xml="http://www.w3.org/XML/1998/namespace" 
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+            elementFormDefault="unqualified" version="IMS CP 1.1.2">
+
+   <!-- ******************** -->
+   <!-- ** Change History ** -->
+   <!-- ******************** -->
+   <xsd:annotation>
+      <xsd:documentation xml:lang="en">DRAFT XSD for IMS Content Packaging version 1.1 DRAFT</xsd:documentation>
+      <xsd:documentation> Copyright (c) 2001 IMS GLC, Inc. </xsd:documentation>
+      <xsd:documentation>2000-04-21, Adjustments by T.D. Wason from CP 1.0.</xsd:documentation>
+      <xsd:documentation>2001-02-22, T.D.Wason: Modify for 2000-10-24 XML-Schema version.  Modified to support extension.</xsd:documentation>
+      <xsd:documentation>2001-03-12, T.D.Wason: Change filename, target and meta-data namespaces and meta-data fielname.  Add meta-data to itemType, fileType and organizationType.</xsd:documentation>
+      <xsd:documentation>Do not define namespaces for xml in XML instances generated from this xsd.</xsd:documentation>
+      <xsd:documentation>Imports IMS meta-data xsd, lower case element names.         </xsd:documentation>
+      <xsd:documentation>This XSD provides a reference to the IMS meta-data root element as imsmd:record</xsd:documentation>
+      <xsd:documentation>If the IMS meta-data is to be used in the XML instance then the instance must define an IMS meta-data prefix with a namespace.  The meta-data targetNamespace should be used.  </xsd:documentation>
+      <xsd:documentation>2001-03-20, Thor Anderson: Remove manifestref, change resourceref back to identifierref, change manifest back to contained by manifest. --Tom Wason: manifest may contain _none_ or more manifests.</xsd:documentation>
+      <xsd:documentation>2001-04-13 Tom Wason: corrected attirbute name structure.  Was misnamed type.  </xsd:documentation>
+      <xsd:documentation>2001-05-14 Schawn Thropp: Made all complexType extensible with the group.any</xsd:documentation>
+      <xsd:documentation>Added the anyAttribute to all complexTypes. Changed the href attribute on the fileType and resourceType to xsd:string</xsd:documentation>
+      <xsd:documentation>Changed the maxLength of the href, identifierref, parameters, structure attributes to match the Information model.</xsd:documentation>
+      <xsd:documentation>2001-07-25 Schawn Thropp: Changed the namespace for the Schema of Schemas to the 5/2/2001 W3C XML Schema</xsd:documentation> 
+      <xsd:documentation>Recommendation. attributeGroup attr.imsmd deleted, was not used anywhere.  Any attribute declarations that have</xsd:documentation>
+      <xsd:documentation>use = "default" changed to use="optional" - attr.structure.req.</xsd:documentation>
+      <xsd:documentation>Any attribute declarations that have value="somevalue" changed to default="somevalue",</xsd:documentation>
+      <xsd:documentation>attr.structure.req (hierarchical).  Removed references to IMS MD Version 1.1.</xsd:documentation>
+      <xsd:documentation>Modified attribute group "attr.resourcetype.req" to change use from optional</xsd:documentation>
+      <xsd:documentation>to required to match the information model.  As a result the default value also needed to be removed</xsd:documentation> 
+      <xsd:documentation>Name change for XSD.  Changed to match version of CP Spec                                           </xsd:documentation> 
+   </xsd:annotation>
+
+   <xsd:annotation>
+      <xsd:documentation>Inclusions and Imports</xsd:documentation>
+   </xsd:annotation>
+
+   <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="ims_xml.xsd"/>
+
+   <xsd:annotation>
+      <xsd:documentation>Attribute Declarations</xsd:documentation>
+   </xsd:annotation>
+
+   <!-- **************************** -->
+   <!-- ** Attribute Declarations ** -->
+   <!-- **************************** -->
+   <xsd:attributeGroup name="attr.base">
+      <xsd:attribute ref="xml:base" use="optional"/>
+   </xsd:attributeGroup>
+
+   <xsd:attributeGroup name="attr.default">
+      <xsd:attribute name="default" type="xsd:IDREF" use="optional"/>
+   </xsd:attributeGroup>
+
+   <xsd:attributeGroup name="attr.href">
+      <xsd:attribute name="href" use="optional">
+         <xsd:simpleType>
+            <xsd:restriction base="xsd:anyURI">
+               <xsd:maxLength value="2000"/>
+            </xsd:restriction>
+         </xsd:simpleType>
+      </xsd:attribute>
+   </xsd:attributeGroup>
+
+   <xsd:attributeGroup name="attr.href.req">
+      <xsd:attribute name="href" use="required">
+         <xsd:simpleType>
+            <xsd:restriction base="xsd:anyURI">
+               <xsd:maxLength value="2000"/>
+            </xsd:restriction>
+         </xsd:simpleType>
+      </xsd:attribute>
+   </xsd:attributeGroup> 
+
+   <xsd:attributeGroup name="attr.identifier.req">
+      <xsd:attribute name="identifier" type="xsd:ID" use="required"/>
+   </xsd:attributeGroup>
+
+   <xsd:attributeGroup name="attr.identifier">
+      <xsd:attribute name="identifier" type="xsd:ID" use="optional"/>
+   </xsd:attributeGroup>
+
+   <xsd:attributeGroup name="attr.isvisible">
+      <xsd:attribute name="isvisible" type="xsd:boolean" use="optional"/>
+   </xsd:attributeGroup>
+   
+   <xsd:attributeGroup name="attr.parameters">
+      <xsd:attribute name="parameters" use="optional">
+         <xsd:simpleType>
+            <xsd:restriction base="xsd:string">
+               <xsd:maxLength value="1000"/>
+            </xsd:restriction>
+         </xsd:simpleType>
+      </xsd:attribute>
+   </xsd:attributeGroup>
+   
+   <xsd:attributeGroup name="attr.identifierref">
+      <xsd:attribute name="identifierref" use="optional">
+         <xsd:simpleType>
+            <xsd:restriction base="xsd:string">
+               <xsd:maxLength value="2000"/>
+            </xsd:restriction>
+         </xsd:simpleType>
+      </xsd:attribute>
+   </xsd:attributeGroup>
+   
+   <xsd:attributeGroup name="attr.identifierref.req">
+      <xsd:attribute name="identifierref" use="required">
+         <xsd:simpleType>
+            <xsd:restriction base="xsd:string">
+               <xsd:maxLength value="2000"/>
+            </xsd:restriction>
+         </xsd:simpleType>
+      </xsd:attribute>
+   </xsd:attributeGroup>
+                
+   <xsd:attributeGroup name="attr.resourcetype.req">
+      <xsd:attribute name="type" use="required">
+         <xsd:simpleType>
+            <xsd:restriction base="xsd:string">
+               <xsd:maxLength value="1000"/>
+            </xsd:restriction>
+         </xsd:simpleType>
+      </xsd:attribute>
+   </xsd:attributeGroup>
+
+   <xsd:attributeGroup name="attr.structure.req">
+      <xsd:attribute name="structure" use="optional" default="hierarchical">
+         <xsd:simpleType>
+            <xsd:restriction base="xsd:string">
+               <xsd:maxLength value="200"/>
+            </xsd:restriction>
+         </xsd:simpleType>
+      </xsd:attribute>
+   </xsd:attributeGroup>
+
+   <xsd:attributeGroup name="attr.version">
+      <xsd:attribute name="version" use="optional">
+         <xsd:simpleType>
+            <xsd:restriction base="xsd:string">
+               <xsd:maxLength value="20"/>
+            </xsd:restriction>
+         </xsd:simpleType>
+      </xsd:attribute>
+   </xsd:attributeGroup>
+
+   <xsd:annotation>
+       <xsd:documentation>element groups</xsd:documentation>
+   </xsd:annotation>
+
+   <xsd:group name="grp.any">
+      <xsd:annotation>
+         <xsd:documentation>Any namespaced element from any namespace may be included within an &quot;any&quot; element.  The namespace for the imported element must be defined in the instance, and the schema must be imported.  </xsd:documentation>
+      </xsd:annotation>
+      <xsd:sequence>
+         <xsd:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded"/>
+      </xsd:sequence>
+   </xsd:group>
+
+   <!-- ************************** -->
+   <!-- ** Element Declarations ** -->
+   <!-- ************************** -->
+
+   <xsd:element name="dependency" type="dependencyType"/>
+   <xsd:element name="file" type="fileType"/>
+   <xsd:element name="item" type="itemType"/>
+   <xsd:element name="manifest" type="manifestType"/>
+   <xsd:element name="metadata" type="metadataType"/>
+   <xsd:element name="organization" type="organizationType"/>
+   <xsd:element name="organizations" type="organizationsType"/>
+   <xsd:element name="resource" type="resourceType"/>
+   <xsd:element name="resources" type="resourcesType"/>
+   <xsd:element name="schema" type="schemaType"/>
+   <xsd:element name="schemaversion" type="schemaversionType"/>
+   <xsd:element name="title" type="titleType"/>
+
+   <!-- ******************* -->
+   <!-- ** Complex Types ** -->
+   <!-- ******************* -->
+
+   <!-- **************** -->
+   <!-- ** dependency ** -->
+   <!-- **************** -->
+   <xsd:complexType name="dependencyType">
+      <xsd:sequence>
+         <xsd:group ref="grp.any"/>
+      </xsd:sequence>
+      <xsd:attributeGroup ref="attr.identifierref.req"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+   </xsd:complexType>
+   
+   <!-- ********** -->
+   <!-- ** file ** -->
+   <!-- ********** -->
+   <xsd:complexType name="fileType">
+      <xsd:sequence>
+         <xsd:element ref="metadata" minOccurs="0"/>
+         <xsd:group ref="grp.any"/>
+      </xsd:sequence>
+      <xsd:attributeGroup ref="attr.href.req"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+   </xsd:complexType>
+   
+   <!-- ********** -->
+   <!-- ** item ** -->
+   <!-- ********** -->
+   <xsd:complexType name="itemType">
+      <xsd:sequence>
+         <xsd:element ref="title" minOccurs="0"/>
+         <xsd:element ref="item" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element ref="metadata" minOccurs="0"/>
+         <xsd:group ref="grp.any"/>
+      </xsd:sequence>
+      <xsd:attributeGroup ref="attr.identifier.req"/>
+      <xsd:attributeGroup ref="attr.identifierref"/>
+      <xsd:attributeGroup ref="attr.isvisible"/>
+      <xsd:attributeGroup ref="attr.parameters"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+   </xsd:complexType>
+   
+   <!-- ************** -->
+   <!-- ** manifest ** -->
+   <!-- ************** -->
+   <xsd:complexType name="manifestType">
+      <xsd:sequence>
+         <xsd:element ref="metadata" minOccurs="0"/>
+         <xsd:element ref="organizations"/>
+         <xsd:element ref="resources"/>
+         <xsd:element ref="manifest" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:group ref="grp.any"/>
+      </xsd:sequence>
+      <xsd:attributeGroup ref="attr.identifier.req"/>
+      <xsd:attributeGroup ref="attr.version"/>
+      <xsd:attribute ref="xml:base"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+   </xsd:complexType>
+   
+   <!-- ************** -->
+   <!-- ** metadata ** -->
+   <!-- ************** -->
+   <xsd:complexType name="metadataType">
+      <xsd:sequence>
+         <xsd:element ref="schema" minOccurs="0"/>
+         <xsd:element ref="schemaversion" minOccurs="0"/>
+         <xsd:group ref="grp.any"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   
+   <!-- ******************* -->
+   <!-- ** organizations ** -->
+   <!-- ******************* -->
+   <xsd:complexType name="organizationsType">
+      <xsd:sequence>
+         <xsd:element ref="organization" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:group ref="grp.any"/>
+      </xsd:sequence>
+      <xsd:attributeGroup ref="attr.default"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+   </xsd:complexType>
+   
+   <!-- ****************** -->
+   <!-- ** organization ** -->
+   <!-- ****************** -->
+   <xsd:complexType name="organizationType">
+      <xsd:sequence>
+         <xsd:element ref="title" minOccurs="0"/>
+         <xsd:element ref="item" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element ref="metadata" minOccurs="0"/>
+         <xsd:group ref="grp.any"/>
+      </xsd:sequence>
+      <xsd:attributeGroup ref="attr.identifier.req"/>
+      <xsd:attributeGroup ref="attr.structure.req"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+   </xsd:complexType>
+   
+   <!-- *************** -->
+   <!-- ** resources ** -->
+   <!-- *************** -->
+   <xsd:complexType name="resourcesType">
+      <xsd:sequence>
+          <xsd:element ref="resource" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:group ref="grp.any"/>
+      </xsd:sequence>
+      <xsd:attributeGroup ref="attr.base"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+   </xsd:complexType>
+   
+   <!-- ************** -->
+   <!-- ** resource ** -->
+   <!-- ************** -->
+   <xsd:complexType name="resourceType">
+      <xsd:sequence>
+         <xsd:element ref="metadata" minOccurs="0"/>
+         <xsd:element ref="file" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element ref="dependency" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:group ref="grp.any"/>
+      </xsd:sequence>
+      <xsd:attributeGroup ref="attr.identifier.req"/>
+      <xsd:attributeGroup ref="attr.resourcetype.req"/>
+      <xsd:attributeGroup ref="attr.base"/>
+      <xsd:attributeGroup ref="attr.href"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+   </xsd:complexType>
+
+   <!-- ****************** -->
+   <!-- ** Simple Types ** -->
+   <!-- ****************** -->
+
+   <!-- ************ -->
+   <!-- ** schema ** -->
+   <!-- ************ -->
+   <xsd:simpleType name="schemaType">
+      <xsd:restriction base="xsd:string">
+         <xsd:maxLength value="100"/>
+      </xsd:restriction>
+   </xsd:simpleType>
+   
+   <!-- ******************* -->
+   <!-- ** schemaversion ** -->
+   <!-- ******************* -->
+   <xsd:simpleType name="schemaversionType">
+      <xsd:restriction base="xsd:string">
+         <xsd:maxLength value="20"/>
+      </xsd:restriction>
+   </xsd:simpleType>
+   
+   <!-- *********** -->
+   <!-- ** title ** -->
+   <!-- *********** -->
+   <xsd:simpleType name="titleType">
+      <xsd:restriction base="xsd:string">
+         <xsd:maxLength value="200"/>
+      </xsd:restriction>
+   </xsd:simpleType>
+
+</xsd:schema>

Added: forrest/trunk/plugins/IMSManifest/status.xml
==============================================================================
--- (empty file)
+++ forrest/trunk/plugins/IMSManifest/status.xml	Wed Nov 10 10:40:11 2004
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<!--
+  Copyright 2002-2004 The Apache Software Foundation
+
+  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.
+-->
+<status>
+
+  <developers>
+    <person name="Ross Gardler"      email="rgardler@apache.org"      id="RDG" />
+    <!-- Add more people here -->
+  </developers>
+
+  <changes>
+    <!-- Add new releases here -->
+    <release version="0.1" date="unreleased">
+      <!-- Some action types have associated images. By default, images are
+      defined for 'add', 'fix', 'remove', 'update' and 'hack'. If you add
+      src/documentation/resources/images/<foo>.jpg images, these will
+      automatically be used for entries of type <foo>. -->
+
+      <action dev="RDG" type="add" context="code">
+        Initial code contribution from http://www.burrokeet.org
+      </action>
+      <!-- Sample action:
+      <action dev="JB" type="fix" due-to="Joe Contributor"
+          due-to-email="joec@apache.org" fixes-bug="123">
+          Fixed a bug in the Foo class.
+        </action>
+        -->
+    </release>
+  </changes>
+
+  <todo>
+    <actions priority="high">
+    <!-- Add todo items. @context is an arbitrary string. Eg:
+    <actions priority="high">
+      <action context="code" dev="SN">
+      </action>
+    </actions>
+    <actions priority="medium">
+      <action context="docs" dev="open">
+      </action>
+    </actions>
+    -->
+  </todo>
+
+</status>

Mime
View raw message