SOURCES: odtransform-ooo2xslfo.xslt (NEW) - odt xslfo stylesheet - initial

pawelz pawelz at pld-linux.org
Tue Jan 27 14:40:23 CET 2009


Author: pawelz                       Date: Tue Jan 27 13:40:23 2009 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- odt xslfo stylesheet
- initial

---- Files affected:
SOURCES:
   odtransform-ooo2xslfo.xslt (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/odtransform-ooo2xslfo.xslt
diff -u /dev/null SOURCES/odtransform-ooo2xslfo.xslt:1.1
--- /dev/null	Tue Jan 27 14:40:23 2009
+++ SOURCES/odtransform-ooo2xslfo.xslt	Tue Jan 27 14:40:17 2009
@@ -0,0 +1,934 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   The Contents of this file are made available subject to the terms of
+   of the following license
+
+          - GNU Lesser General Public License Version 2.1
+
+   System Concept GmbH, April, 2005
+
+   GNU Lesser General Public License Version 2.1
+   =============================================
+   Copyright 2005 by System Concept GmbH
+   Freiheitstrasse 124-126, 15745 Wildau, Germany
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License version 2.1, as published by the Free Software Foundation.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+   MA  02111-1307  USA
+
+   Copyright (c) 2005 by System Concept GmbH
+
+   All Rights Reserved.
+
+   Contributor(s): Holger Hees hhees ( at ) systemconcept.de
+   
+ -->
+<xsl:stylesheet version="1.0"
+		xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"  
+		xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"  
+    	xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+		xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+		xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+
+		xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+		xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+
+		xmlns:xlink="http://www.w3.org/1999/xlink"
+		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+
+		xmlns:fop="http://www.w3.org/1999/XSL/Format"
+
+		xmlns:xt="http://www.jclark.com/xt"
+		xmlns:common="http://exslt.org/common"
+		xmlns:xalan="http://xml.apache.org/xalan"
+
+		exclude-result-prefixes="office style table draw xlink fo xsl xalan common xt svg">
+
+    <!-- Es wird zunächst XSL-FO erzeugt, dass dann zu PDF weiterverarbeitet wird -->	
+	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
+
+	<xsl:variable name="officeDoc" select="/office:document"/>
+
+	<xsl:param name="styleName"/>
+	<xsl:param name="styleNode"/>
+
+	<!-- Basis Template, dass für das Seitenlayout zuständig ist -->
+    <xsl:template match="/office:document">
+		<fop:root xmlns:fop="http://www.w3.org/1999/XSL/Format" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0">
+    		<xsl:variable name="pageMaster" select="$officeDoc/office:automatic-styles/style:page-layout[1]"/>
+	     	<xsl:variable name="styleMaster" select="$officeDoc/office:master-styles/style:master-page[1]"/>
+
+    		<fop:layout-master-set>	<!-- XSL-FO funtioniert wie ein DTP-Programm, zuerst werden die Page Master definiert, anschließend kommen die Inhalte -->
+				<fop:simple-page-master master-name="{$pageMaster/@style:name}"
+										margin-top="{$pageMaster/style:page-layout-properties/@fo:margin-top}"  
+										margin-bottom="{$pageMaster/style:page-layout-properties/@fo:margin-bottom}"
+										margin-left="{$pageMaster/style:page-layout-properties/@fo:margin-left}"  
+										margin-right="{$pageMaster/style:page-layout-properties/@fo:margin-right}"
+										page-width="{$pageMaster/style:page-layout-properties/@fo:page-width}" 
+										page-height="{$pageMaster/style:page-layout-properties/@fo:page-height}"
+										border="{$pageMaster/style:page-layout-properties/@fo:border}">
+	
+				<fop:region-body>
+					<xsl:if test="$pageMaster/style:header-style/child::*">
+						<xsl:attribute name="margin-top">
+							<xsl:value-of select="$pageMaster/style:header-style/style:header-footer-properties/@fo:margin-bottom"/>
+							<xsl:if test="$pageMaster/style:header-style/style:header-footer-properties/@style:dynamic-spacing='false'">*2</xsl:if>
+						</xsl:attribute>
+					</xsl:if>
+					<xsl:if test="$pageMaster/style:footer-style/child::*">
+						<xsl:attribute name="margin-bottom">
+							<xsl:value-of select="$pageMaster/style:footer-style/style:header-footer-properties/@fo:margin-top"/>
+							<xsl:if test="$pageMaster/style:footer-style/style:header-footer-properties/@style:dynamic-spacing='false'">*2</xsl:if>
+						</xsl:attribute>
+					</xsl:if>
+				</fop:region-body>
+
+				<xsl:if test="$pageMaster/style:header-style/child::*">
+					<fop:region-before display-align="before">
+						<xsl:call-template name="applyStyle">
+							<xsl:with-param name="styleNode" select="$pageMaster/style:header-style"/>
+							<xsl:with-param name="styleType" select="'header:footer'"/>
+						</xsl:call-template>
+					</fop:region-before>
+				</xsl:if>
+
+				<xsl:if test="$pageMaster/style:footer-style/child::*">
+					<fop:region-after display-align="after">
+						<xsl:call-template name="applyStyle">
+							<xsl:with-param name="styleNode" select="$pageMaster/style:footer-style"/>
+							<xsl:with-param name="styleType" select="'header:footer'"/>
+						</xsl:call-template>
+					</fop:region-after>
+				</xsl:if>
+
+				</fop:simple-page-master>
+      		</fop:layout-master-set>
+
+		     <fop:page-sequence master-reference="{$pageMaster/@style:name}">	<!-- Den Page Master mit Inhalten fülle -->
+				<!-- Die Kopfzeile einfügen. Static content erscheint auf jeder Seite -->
+		     	<xsl:if test="$styleMaster/style:header">
+	     		<fop:static-content flow-name="xsl-region-before">
+     				<xsl:apply-templates select="$styleMaster/style:header/child::*"/>
+				</fop:static-content>
+	     		</xsl:if>
+
+				<!-- Die Fußzeile einfügen. Static content erscheint auf jeder Seite -->
+		     	<xsl:if test="$styleMaster/style:footer">
+	     		<fop:static-content flow-name="xsl-region-after">
+    				<xsl:apply-templates select="$styleMaster/style:footer/child::*"/>
+				</fop:static-content>
+	     		</xsl:if>
+
+				<fop:static-content flow-name="xsl-footnote-separator">
+					<fop:block>
+						<fop:leader leader-pattern="rule" leader-length="100%" rule-style="solid" rule-thickness="0.5pt"/>
+					</fop:block>
+				</fop:static-content>
+
+				<!-- Die übrigen Inhalte einfügen -->
+				<fop:flow flow-name="xsl-region-body">
+					<fop:block><xsl:for-each select="office:body/child::*">
+						<xsl:apply-templates select="."/>
+					</xsl:for-each>
+					</fop:block>
+					<fop:block id="last-page"/>
+				</fop:flow>
+			</fop:page-sequence>
+
+	    </fop:root>
+	</xsl:template>
+
+	<!-- Tabulatoren -->
+	<xsl:template name="text:tab">
+		<xsl:param name="styleName"/>
+		<xsl:param name="aktNode"/>
+		<xsl:param name="styleNodes"/>
+		<xsl:param name="styleType"/>
+		<xsl:param name="stylePosition"/>
+
+		<xsl:variable name="tabStyle">
+			<text:tab>
+			<xsl:call-template name="applyStyle">
+				<xsl:with-param name="styleName" select="ancestor-or-self::*[@text:style-name]/@text:style-name"/>
+				<xsl:with-param name="styleType" select="'text:tab'"/>
+				<xsl:with-param name="stylePosition" select="count(preceding-sibling::text:tab)"/>
+			</xsl:call-template>
+			</text:tab>
+		</xsl:variable>
+		
+		<xsl:choose>
+			<xsl:when test="function-available('xalan:nodeset')">
+				<xsl:call-template name="getTabStyleValues">
+					<xsl:with-param name="styleNode" select="xalan:nodeset($tabStyle)" />
+					<xsl:with-param name="aktNode" select="." />
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:when test="function-available('xt:node-set')">
+				<xsl:call-template name="getTabStyleValues">
+					<xsl:with-param name="styleNode" select="xt:node-set($tabStyle)" />
+					<xsl:with-param name="aktNode" select="." />
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:when test="function-available('common:node-set')">
+				<xsl:call-template name="getTabStyleValues">
+					<xsl:with-param name="styleNode" select="common:node-set($tabStyle)" />
+					<xsl:with-param name="aktNode" select="." />
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:message terminate="yes">ERROR: Function not found: nodeset</xsl:message>
+			</xsl:otherwise>
+		</xsl:choose>
+
+	</xsl:template>
+
+	<xsl:template name="getTabStyleValues">
+		<xsl:param name="styleNode"/>
+		<xsl:param name="aktNode"/>
+		
+		<xsl:for-each select="$styleNode/child::*">
+			<xsl:choose>		
+				<xsl:when test="./@type and normalize-space($aktNode/preceding-sibling::text())=''">
+					<xsl:attribute name="text-align"><xsl:value-of select="./@type"/></xsl:attribute>
+				</xsl:when>
+				<xsl:when test="./@type and ./@leader-style">
+					<fop:leader>
+						<xsl:choose>
+							<xsl:when test="./@leader-style='dotted'">
+								<xsl:attribute name="leader-pattern">dots</xsl:attribute>
+							</xsl:when>
+							<xsl:otherwise>
+								<xsl:attribute name="leader-pattern">space</xsl:attribute>
+							</xsl:otherwise>
+						</xsl:choose>				
+					</fop:leader>
+				</xsl:when>
+				<xsl:otherwise>
+					<fop:leader leader-pattern="space">
+						<xsl:attribute name="leader-length"><xsl:value-of select="./@tab-stop-distance"/></xsl:attribute>
+					</fop:leader>
+				</xsl:otherwise>
+			</xsl:choose>
+		</xsl:for-each>
+	</xsl:template>
+
+	<!-- Bilder -->
+	<xsl:template match="draw:image">
+		<fop:block>
+			<fop:external-graphic src="url({translate(./@xlink:href, '#', '')})"/>
+		</fop:block>
+	</xsl:template>
+
+	<!-- Textbox -->
+	<xsl:template match="draw:text-box">
+		<fop:block>
+			<xsl:if test="./@fo:min-height">
+				<xsl:attribute name="min-height"><xsl:value-of select="./@fo:min-height"/></xsl:attribute>
+			</xsl:if>
+	
+			<xsl:call-template name="applyStyle"><xsl:with-param name="styleName" select="./@text:style-name"/></xsl:call-template>
+			<xsl:for-each select="./child::*">
+				<xsl:apply-templates select="."/>
+			</xsl:for-each>
+		</fop:block>
+	</xsl:template>
+
+	<!-- Floatelement -->
+	<xsl:template match="draw:frame">
+		<!--<fop:float>-->
+		<fop:block-container>
+			<xsl:choose>
+				<xsl:when test="./@text:anchor-type='char'">
+					<xsl:attribute name="position">absolute</xsl:attribute>
+					<xsl:if test="./@svg:x or ./@svg:y">
+						<xsl:attribute name="margin-left"><xsl:value-of select="number(substring-before(./@svg:x,'cm'))-2"/>cm</xsl:attribute>
+						<xsl:attribute name="margin-right">0cm</xsl:attribute>
+						<!--<xsl:attribute name="margin-top"><xsl:value-of select="./@svg:y"/></xsl:attribute>-->
+					</xsl:if>
+					<xsl:attribute name="width"><xsl:value-of select="./@svg:width"/></xsl:attribute>
+				</xsl:when>
+			</xsl:choose>				
+
+			<xsl:call-template name="applyStyle"><xsl:with-param name="styleName" select="./@draw:style-name"/></xsl:call-template>
+
+			<fop:block>
+				<xsl:choose>
+					<xsl:when test="./@text:anchor-type='char'">
+						<xsl:attribute name="margin-left">-<xsl:value-of select="number(substring-before(./@svg:x,'cm'))-2"/>cm</xsl:attribute>
+					</xsl:when>
+				</xsl:choose>				
+
+				<xsl:for-each select="./child::*">
+					<xsl:apply-templates select="."/>
+				</xsl:for-each>
+			</fop:block>
+		</fop:block-container>
+ 		<!--</fop:float>-->
+	</xsl:template>
+
+	<!-- Text ausgeben und eventuelle Unterelemente weiterverfolgen -->
+	<xsl:template name="processText">
+		<xsl:choose>		
+			<xsl:when test="node()">
+				<xsl:for-each select="node()">
+					<xsl:choose>
+						<xsl:when test="name(.)='text:tab'">
+							<xsl:call-template name="text:tab"/>
+						</xsl:when>
+						<xsl:otherwise>
+							<!-- without leeding whitespace -->
+							<xsl:if test="string-length(.)>1 or normalize-space(string(.))!='' or normalize-space(preceding-sibling::text())!='' or name(.)!=''">
+								<xsl:apply-templates select="."/>
+							</xsl:if>
+						</xsl:otherwise>
+					</xsl:choose>
+				</xsl:for-each>
+			</xsl:when>
+			<xsl:otherwise><fop:leader/></xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+
+
+
+
+
+
+	<!-- TABLE -->
+	<xsl:template name="calcTableColumn">
+		<xsl:param name="columnStyle"/>
+		<xsl:param name="columnRepeated"/>
+		<fop:table-column column-width="{$columnStyle/style:table-column-properties/@style:column-width}"/>
+		<xsl:if test="$columnRepeated>1">
+			<xsl:call-template name="calcTableColumn">
+				<xsl:with-param name="columnStyle" select="$columnStyle"/>
+				<xsl:with-param name="columnRepeated" select="$columnRepeated - 1"/>
+			</xsl:call-template>
+		</xsl:if>
+	</xsl:template>
+
+	<!-- Tabellen -->
+	<xsl:template match="table:table">
+		<fop:table>
+			<!--<xsl:variable name="tableStyleName" select="@table:style-name"/>
+			<xsl:variable name="tableStyle" select="$officeDoc/office:automatic-styles/style:style[@style:name=$tableStyleName]"/>-->
+			<!--<xsl:variable name="columnStyle" select="$officeDoc/office:automatic-styles/style:style[@style:name=$columnStyleName]"/>-->
+			
+			<xsl:call-template name="applyStyle">
+				<xsl:with-param name="styleName" select="ancestor-or-self::table:table[@table:style-name][1]/@table:style-name"/>
+			</xsl:call-template>
+
+			<!-- Spaltenbreiten feststellen -->
+			<xsl:for-each select="table:table-column">
+				<xsl:variable name="columnStyleName" select="@table:style-name"/>
+				<xsl:call-template name="calcTableColumn">
+					<xsl:with-param name="columnStyle" select="$officeDoc/office:automatic-styles/style:style[@style:name=$columnStyleName]"/>
+					<xsl:with-param name="columnRepeated" select="@table:number-columns-repeated"/>
+				</xsl:call-template>
+			</xsl:for-each>
+
+			<xsl:choose>
+				<xsl:when test="table:table-header-rows and table:table-row">
+					<fop:table-header>	<!-- Der Header ist in OO explizit ausgewiesen -->
+						<xsl:call-template name="tableRow">
+							<xsl:with-param name="row" select="table:table-header-rows/table:table-row"/>
+						</xsl:call-template>
+					</fop:table-header>
+					<fop:table-body>
+						<xsl:call-template name="tableRow">
+							<xsl:with-param name="row" select="table:table-row"/>
+						</xsl:call-template>
+					</fop:table-body>
+				</xsl:when>
+				<xsl:when test="table:table-row">
+					<fop:table-body>
+						<xsl:call-template name="tableRow">
+							<xsl:with-param name="row" select="table:table-row"/>
+						</xsl:call-template>
+					</fop:table-body>
+				</xsl:when>
+				<xsl:otherwise>
+					<fop:table-body>	<!-- Der Header ist in OO explizit ausgewiesen -->
+						<xsl:call-template name="tableRow">
+							<xsl:with-param name="row" select="table:table-header-rows/table:table-row"/>
+						</xsl:call-template>
+					</fop:table-body>
+				</xsl:otherwise>
+			</xsl:choose>
+
+		</fop:table>
+	</xsl:template>
+
+	<xsl:template name="tableRow">
+		<xsl:param name="row"/>
+
+		<xsl:for-each select="$row">	<!-- Die restlichen Zeilen, der Einfachheit halber mit festen Font und Abstandsgrößen -->
+			<fop:table-row keep-together.within-column="always">
+				<!--<xsl:if test="./@table:number-rows-spanned">
+					<xsl:attribute name="number-rows-spanned"><xsl:value-of select="./@table:number-rows-spanned"/></xsl:attribute>
+				</xsl:if>-->
+
+				<xsl:call-template name="applyStyle">
+					<xsl:with-param name="styleName" select="ancestor-or-self::table:table-row[1][@table:style-name]/@table:style-name"/>
+				</xsl:call-template>
+				<xsl:for-each select="./table:table-cell">
+					<fop:table-cell>
+
+						<!--<xsl:if test="./@table:number-columns-spanned">
+							<xsl:attribute name="number-columns-spanned"><xsl:value-of select="./@table:number-columns-spanned"/></xsl:attribute>
+						</xsl:if>-->
+
+						<xsl:call-template name="applyStyle">
+							<xsl:with-param name="styleName" select="ancestor-or-self::table:table-cell[1][@table:style-name]/@table:style-name"/>
+						</xsl:call-template>
+						<xsl:for-each select="node()"><xsl:apply-templates select="."/></xsl:for-each>
+					</fop:table-cell>
+				</xsl:for-each>
+			</fop:table-row>
+		</xsl:for-each>
+	</xsl:template>
+
+
+
+	<!-- TEXT -->
+	<!-- dynamische Platzhalter -->
+	<xsl:template match="text:placeholder">
+		<text:placeholder><xsl:copy-of select="./text()"/></text:placeholder>
+	</xsl:template>
+
+	<!-- Seitennummer -->
+	<xsl:template match="text:page-number">
+		<fop:page-number/>
+	</xsl:template>
+
+	<!-- Seitennummer -->
+	<xsl:template match="text:page-count">
+		<!--<xsl:value-of select="."/>-->
+		<fop:page-number-citation ref-id="last-page"/>
+	</xsl:template>
+
+	<!-- Zeilenumbruch -->
+	<xsl:template match="text:line-break">
+		<fop:block/>
+	</xsl:template>
+
+	<!-- Fussnoten -->
+	<!--<text:note text:id="ftn2" text:note-class="footnote">
+	<text:note-citation>2</text:note-citation>
+	<text:note-body>
+	<text:p text:style-name="P48">
+	<text:a xlink:type="simple" xlink:href="http://www.microsoft.com/myservices/services/userexperiences.asp">URL: http://www.microsoft.com/myservices/services/userexperiences.asp</text:a>
+	</text:p>
+	</text:note-body>
+	</text:note>-->
+	<xsl:template match="text:note">
+		<fop:footnote>
+			<xsl:variable name="noteClass" select="./@text:note-class"/>
+			<xsl:variable name="noteConfig" select ="$officeDoc/office:styles/text:notes-configuration[@text:note-class=$noteClass]"/>
+
+			<fop:inline>
+				<xsl:call-template name="applyStyle">
+					<xsl:with-param name="styleName" select="$noteConfig/@text:default-style-name"/>
+				</xsl:call-template>
+				<xsl:call-template name="applyStyle">
+					<xsl:with-param name="styleName" select="$noteConfig/@text:citation-style-name"/>
+				</xsl:call-template>
+				<xsl:value-of select="./text:note-citation"/>
+			</fop:inline>
+			<fop:footnote-body>
+				<xsl:call-template name="applyStyle">
+					<xsl:with-param name="styleName" select="$noteConfig/@text:citation-body-style-name"/>
+				</xsl:call-template>
+				<xsl:apply-templates select="./text:note-body"/>
+			</fop:footnote-body>
+		</fop:footnote>
+	</xsl:template>
+
+	<!-- Beschriftungen -->
+	<xsl:template match="text:sequence">
+		<fop:inline>
+			<xsl:variable name="format" select="./@style:num-format"/>
+			<xsl:call-template name="applyStyle">
+				<xsl:with-param name="styleNode" select="$officeDoc/office:styles/text:notes-configuration[@style:num-format=$format]"/>
+			</xsl:call-template>
+			<xsl:call-template name="processText"/>
+		</fop:inline>
+	</xsl:template>
+
+	<!-- Inline-Formatierungen -->
+	<xsl:template match="text:span">
+		<fop:inline>
+			<xsl:call-template name="applyStyle"><xsl:with-param name="styleName" select="./@text:style-name"/></xsl:call-template>
+			<xsl:call-template name="processText"/>
+		</fop:inline>
+	</xsl:template>
+
+	<!-- Kapitelnummerierung -->
+	<xsl:template name="calcOutlineStyle">
+		<xsl:param name="levelStyle"/>
+		<xsl:param name="endLevel"/>
+		<xsl:param name="startLevel"/>
+
+		<xsl:choose>
+			<xsl:when test="$endLevel >= $startLevel">
+				<xsl:choose>
+					<xsl:when test="$levelStyle[@text:level=$startLevel]/@style:num-format!='' and ($levelStyle[@text:level=$startLevel]/@text:display-levels!='' or $startLevel=1)">
+						<xsl:choose>
+							<xsl:when test="$startLevel > 1 ">.</xsl:when>
+							<xsl:otherwise><xsl:value-of select="$levelStyle[@text:level=$endLevel]/@style:num-prefix"/></xsl:otherwise>
+						</xsl:choose>
+		
+						<xsl:number format="{$levelStyle[@text:level=$startLevel]/@style:num-format}" level="any" count="text:h[@text:outline-level=$startLevel]"/>
+					</xsl:when>
+					<xsl:when test="$levelStyle[@text:level=$startLevel]/@text:bullet-char">
+						<xsl:value-of select="$levelStyle/@text:bullet-char"/>
+					</xsl:when>
+				</xsl:choose>
+	
+				<xsl:call-template name="calcOutlineStyle">
+					<xsl:with-param name="levelStyle" select="$levelStyle"/>
+					<xsl:with-param name="endLevel" select="$endLevel"/>
+					<xsl:with-param name="startLevel" select="$startLevel + 1"/>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:value-of select="$levelStyle[@text:level=$endLevel]/@style:num-suffix"/>
+				<xsl:if test="name(.)!='text:list-item'">
+					<fop:leader leader-pattern="space">
+						<xsl:choose>
+							<xsl:when test="$levelStyle[@text:level=$endLevel]/style:list-level-properties/@text:min-label-distance">
+								<xsl:attribute name="leader-length"><xsl:value-of select="$levelStyle[@text:level=$endLevel]/style:list-level-properties/@text:min-label-distance"/></xsl:attribute>
+							</xsl:when>
+							<xsl:otherwise>
+								<xsl:attribute name="leader-length">0.3cm</xsl:attribute>
+							</xsl:otherwise>
+						</xsl:choose>
+					</fop:leader>
+				</xsl:if>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<!-- Texte, Überschriften, Bereiche -->
+	<xsl:template match="text:p|text:h|text:section">
+		<fop:block>
+			<xsl:call-template name="applyStyle"><xsl:with-param name="styleName" select="./@text:style-name"/></xsl:call-template>
+
+			<xsl:variable name="endLevel" select="./@text:outline-level"/>
+			<xsl:if test="$endLevel">
+				<xsl:variable name="levelStyle" select="$officeDoc/office:styles/text:outline-style/text:outline-level-style"/>
+				<xsl:if test="$levelStyle[@text:level=$endLevel] and ($levelStyle[@text:level=$endLevel]/@style:num-format!='' or $levelStyle[@text:level=$endLevel]/@text:bullet-char)">
+
+					<xsl:choose>
+						<xsl:when test="$levelStyle[@text:level=$endLevel]/@text:bullet-char">
+							<xsl:call-template name="calcOutlineStyle">
+								<xsl:with-param name="levelStyle" select="$levelStyle"/>
+								<xsl:with-param name="endLevel" select="$endLevel"/>
+								<xsl:with-param name="startLevel" select="$endLevel"/>
+							</xsl:call-template>
+						</xsl:when>
+						<xsl:otherwise>
+							<xsl:call-template name="calcOutlineStyle">
+								<xsl:with-param name="levelStyle" select="$levelStyle"/>
+								<xsl:with-param name="endLevel" select="$endLevel"/>
+								<xsl:with-param name="startLevel" select="1"/>
+							</xsl:call-template>
+						</xsl:otherwise>
+					</xsl:choose>
+
+				</xsl:if>
+			</xsl:if>
+			<xsl:call-template name="processText"/>
+		</fop:block>
+	</xsl:template>
+
+	<!-- Aufzählung -->
+	<xsl:template match="text:list">
+		<xsl:variable name="listStyleID" select="ancestor-or-self::text:list[@text:style-name][1]/@text:style-name" />
+		<xsl:variable name="endLevel" select="count(ancestor-or-self::text:list)"/>
+
+		<xsl:variable name="levelStyle" select="$officeDoc/office:automatic-styles/text:list-style[@style:name=$listStyleID]/text:list-level-style-number|$officeDoc/office:automatic-styles/text:list-style[@style:name=$listStyleID]/text:list-level-style-bullet|$officeDoc/office:automatic-styles/text:list-style[@style:name=$listStyleID]/text:list-level-style-image"/>
+
+		<xsl:if test="./text:list-item">
+			<fop:list-block provisional-label-separation="1cm">
+				<xsl:choose>
+					<xsl:when test="$levelStyle[@text:level=$endLevel]/style:list-level-properties/@text:space-before">
+						<xsl:attribute name="start-indent"><xsl:value-of select="$levelStyle[@text:level=$endLevel]/style:list-level-properties/@text:space-before"/></xsl:attribute>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:attribute name="start-indent">0cm</xsl:attribute>
+					</xsl:otherwise>
+				</xsl:choose>
+			
+				<!--$pStyle/@text:style-name-->
+				<xsl:for-each select = "./text:list-item">
+					<fop:list-item>
+						<fop:list-item-label end-indent="label-end()">
+							<fop:block>
+								<xsl:call-template name="applyStyle"><xsl:with-param name="styleName" select="./text:p/@text:style-name"/></xsl:call-template>
+
+								<xsl:if test="$levelStyle[@text:level=$endLevel] and ($levelStyle[@text:level=$endLevel]/@style:num-format!='' or $levelStyle[@text:level=$endLevel]/@text:bullet-char)">
+
+									<xsl:choose>		
+										<xsl:when test="$levelStyle[@text:level=$endLevel]/@text:bullet-char">
+											<xsl:value-of select="$levelStyle[@text:level=$endLevel]/@text:bullet-char"/>
+										</xsl:when>
+										<xsl:otherwise>
+											<xsl:value-of select="$levelStyle[@text:level=$endLevel]/@style:num-prefix"/>
+											
+											<xsl:choose>
+												<xsl:when test="$levelStyle[@text:level=$endLevel]/@text:display-levels!=''">
+													<xsl:number format="{$levelStyle[@text:level=$endLevel]/@style:num-format}" level="multiple" count="text:list-item"/>
<<Diff was trimmed, longer than 597 lines>>


More information about the pld-cvs-commit mailing list