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