diff software/mpdl-services/mpiwg-mpdl-cms/src/de/mpg/mpiwg/berlin/mpdl/cms/transform/toc.xsl @ 23:e845310098ba

diverse Korrekturen
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Tue, 27 Nov 2012 12:35:19 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/software/mpdl-services/mpiwg-mpdl-cms/src/de/mpg/mpiwg/berlin/mpdl/cms/transform/toc.xsl	Tue Nov 27 12:35:19 2012 +0100
@@ -0,0 +1,153 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet 
+  version="2.0" 
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:xlink="http://www.w3.org/1999/xlink"
+  xmlns:xhtml="http://www.w3.org/1999/xhtml"
+  exclude-result-prefixes="xsl xlink xhtml"
+>
+
+<xsl:output method="xml" encoding="utf-8" indent="yes"/>
+
+<xsl:template match="/">
+  <xsl:variable name="toc" select="//*:div[@type = 'section' or @type = 'chapter' or @type = 'part']"/>
+  <xsl:variable name="figures" select="//*:figure"/>
+  <xsl:variable name="notes" select="//*:note"/>
+  <xsl:variable name="notesHandwritten" select="//*:handwritten"/>
+  <xsl:variable name="pages" select="//*:pb"/>
+  <xsl:variable name="places" select="//*:place"/>
+  <list>
+    <xsl:if test="not(empty($toc))">
+      <list type ="toc">
+        <xsl:attribute name="count"><xsl:value-of select="count($toc)"/></xsl:attribute>
+        <head>Table of contents</head>
+        <xsl:apply-templates select="$toc"/>
+      </list>
+    </xsl:if>
+    <xsl:if test="not(empty($figures))">
+      <list type="figures">
+        <xsl:attribute name="count"><xsl:value-of select="count($figures)"/></xsl:attribute>
+        <head>Figures</head>
+        <xsl:apply-templates select="$figures"/>
+      </list>
+    </xsl:if>
+    <xsl:if test="not(empty($notes))">
+      <list type="notes">
+        <xsl:attribute name="count"><xsl:value-of select="count($notes)"/></xsl:attribute>
+        <head>Notes</head>
+        <xsl:apply-templates select="$notes"/>
+      </list>
+    </xsl:if>
+    <xsl:if test="not(empty($notesHandwritten))">
+      <list type="notesHandwritten">
+        <xsl:attribute name="count"><xsl:value-of select="count($notesHandwritten)"/></xsl:attribute>
+        <head>Handwritten notes</head>
+        <xsl:apply-templates select="$notesHandwritten"/>
+      </list>
+    </xsl:if>
+    <xsl:if test="not(empty($pages))">
+      <list type="pages">
+        <xsl:attribute name="count"><xsl:value-of select="count($pages)"/></xsl:attribute>
+        <head>Pages</head>
+        <xsl:apply-templates select="$pages"/>
+      </list>
+    </xsl:if>
+    <xsl:if test="not(empty($places))">
+      <list type="places">
+        <xsl:attribute name="count"><xsl:value-of select="count($places)"/></xsl:attribute>
+        <head>Places</head>
+        <xsl:apply-templates select="$places"/>
+      </list>
+    </xsl:if>
+  </list>
+</xsl:template>
+
+<xsl:template match="*:figure">
+  <xsl:variable name="page" select="count(./preceding::*:pb)"/>
+  <xsl:variable name="number" select="@number"/>
+  <item>
+    <xsl:if test="not(empty($number))"><xsl:attribute name="n"><xsl:value-of select="$number"/></xsl:attribute></xsl:if>
+    <xsl:apply-templates select="*:caption"/>
+    <xsl:apply-templates select="*:description"/>
+    <xsl:apply-templates select="*:variables"/>
+    <xsl:if test="not(empty($page))"><ref><xsl:value-of select="$page"/></ref></xsl:if>
+  </item>
+</xsl:template>
+
+<xsl:template match="*:caption"><xsl:value-of select="' '"/>
+  <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="*:description">
+  <xsl:apply-templates/><xsl:value-of select="' '"/>
+</xsl:template>
+
+<xsl:template match="*:variables">
+  <xsl:apply-templates/><xsl:value-of select="' '"/>
+</xsl:template>
+
+<xsl:template match="*:note">
+  <xsl:variable name="page" select="count(./preceding::*:pb)"/>
+  <xsl:variable name="number" select="@number"/>
+  <item>
+    <xsl:if test="not(empty($number))"><xsl:attribute name="n"><xsl:value-of select="$number"/></xsl:attribute></xsl:if>
+    <xsl:if test="not(empty($page))"><ref><xsl:value-of select="$page"/></ref></xsl:if>
+  </item>
+</xsl:template>
+
+<xsl:template match="*:handwritten">
+  <xsl:variable name="page" select="count(./preceding::*:pb)"/>
+  <xsl:variable name="number" select="@number"/>
+  <item>
+    <xsl:if test="not(empty($number))"><xsl:attribute name="n"><xsl:value-of select="$number"/></xsl:attribute></xsl:if>
+    <xsl:if test="not(empty($page))"><ref><xsl:value-of select="$page"/></ref></xsl:if>
+  </item>
+</xsl:template>
+
+<xsl:template match="*:place">
+  <xsl:variable name="page" select="count(./preceding::*:pb)"/>
+  <xsl:variable name="id" select="@id"/>
+  <item>
+    <xsl:if test="not(empty($id))"><xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute></xsl:if>
+    <xsl:if test="not(empty($page))"><ref><xsl:value-of select="$page"/></ref></xsl:if>
+  </item>
+</xsl:template>
+
+<xsl:template match="*:div">
+  <xsl:variable name="level"><xsl:number level="multiple" count="*:div[@type = 'section' or @type = 'chapter' or @type = 'part']" format="1."/></xsl:variable>
+  <xsl:variable name="depth" select="string-length(replace($level, '[^\\.]', ''))"/>
+  <xsl:variable name="pb" select="./preceding::*:pb[1]"/>
+  <xsl:variable name="o" select="$pb/@o"/>
+  <xsl:variable name="oNorm" select="$pb/@o-norm"/>
+  <xsl:variable name="page" select="count(./preceding::*:pb)"/>
+  <item>
+    <xsl:if test="not(empty($level))"><xsl:attribute name="n"><xsl:value-of select="$level"/></xsl:attribute></xsl:if>
+    <xsl:if test="not(empty($level))"><xsl:attribute name="lv"><xsl:value-of select="$depth"/></xsl:attribute></xsl:if>
+    <xsl:apply-templates select="*:head"/>
+    <xsl:if test="not(empty($page))">
+      <ref>
+        <xsl:if test="not(empty($o))"><xsl:attribute name="o"><xsl:value-of select="$o"/></xsl:attribute></xsl:if>
+        <xsl:if test="not(empty($oNorm))"><xsl:attribute name="o-norm"><xsl:value-of select="$oNorm"/></xsl:attribute></xsl:if>
+        <xsl:value-of select="$page"/>
+      </ref>
+    </xsl:if>
+  </item>
+</xsl:template>
+
+<xsl:template match="*:head">
+  <xsl:apply-templates/><xsl:value-of select="' '"/>
+</xsl:template>
+
+<xsl:template match="*:pb">
+  <xsl:variable name="page" select="count(./preceding::*:pb) + 1"/>
+  <item>
+    <xsl:attribute name="n"><xsl:value-of select="$page"/></xsl:attribute>
+    <xsl:if test="not(empty(@o))"><xsl:attribute name="o"><xsl:value-of select="@o"/></xsl:attribute></xsl:if>
+    <xsl:if test="not(empty(@o-norm))"><xsl:attribute name="o-norm"><xsl:value-of select="@o-norm"/></xsl:attribute></xsl:if>
+    <xsl:if test="not(empty(@file))"><xsl:attribute name="file"><xsl:value-of select="@file"/></xsl:attribute></xsl:if>
+    <xsl:if test="not(empty(@facs))"><xsl:attribute name="file"><xsl:value-of select="@facs"/></xsl:attribute></xsl:if>
+  </item>
+</xsl:template>
+
+</xsl:stylesheet>