diff options
Diffstat (limited to 'filter/source/xslt/export/wordml/ooo2wordml_text.xsl')
-rw-r--r-- | filter/source/xslt/export/wordml/ooo2wordml_text.xsl | 1270 |
1 files changed, 1270 insertions, 0 deletions
diff --git a/filter/source/xslt/export/wordml/ooo2wordml_text.xsl b/filter/source/xslt/export/wordml/ooo2wordml_text.xsl new file mode 100644 index 000000000..406c8cb91 --- /dev/null +++ b/filter/source/xslt/export/wordml/ooo2wordml_text.xsl @@ -0,0 +1,1270 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + --> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:v="urn:schemas-microsoft-com:vml" 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:w10="urn:schemas-microsoft-com:office:word" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" exclude-result-prefixes="office table style text draw svg dc config xlink meta oooc dom ooo chart math dr3d form script ooow draw"> + <xsl:template match="style:paragraph-properties" mode="paragraph"> + <w:pPr> + <w:adjustRightInd w:val="off"/> + <xsl:if test="@fo:break-before = 'page'"> + <w:pageBreakBefore w:val="on"/> + </xsl:if> + <xsl:if test="contains(@style:writing-mode, 'rl')"> + <w:bidi/> + </xsl:if> + <xsl:choose> + <xsl:when test="@fo:text-align-last = 'start'"> + <xsl:choose> + <xsl:when test="contains(@style:writing-mode, 'rl')"> + <w:jc w:val="right"/> + </xsl:when> + <xsl:otherwise> + <w:jc w:val="left"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="@fo:text-align-last = 'justify'"> + <w:jc w:val="distribute"/> + </xsl:when> + <xsl:when test="@fo:text-align-last = 'center'"> + <w:jc w:val="center"/> + </xsl:when> + <xsl:when test="@fo:text-align = 'start'"> + <xsl:choose> + <xsl:when test="contains(@style:writing-mode, 'rl')"> + <w:jc w:val="right"/> + </xsl:when> + <xsl:otherwise> + <w:jc w:val="left"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="@fo:text-align = 'end'"> + <xsl:choose> + <xsl:when test="contains(@style:writing-mode, 'rl')"> + <w:jc w:val="left"/> + </xsl:when> + <xsl:otherwise> + <w:jc w:val="right"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="@fo:text-align = 'justify'"> + <w:jc w:val="distribute"/> + </xsl:when> + <xsl:when test="@fo:text-align = 'center'"> + <w:jc w:val="center"/> + </xsl:when> + </xsl:choose> + <w:spacing> + <xsl:choose> + <xsl:when test="@fo:line-height"> + <xsl:choose> + <xsl:when test="contains(@fo:line-height, '%')"> + <xsl:attribute name="w:line-rule">auto</xsl:attribute> + <xsl:attribute name="w:line"> + <xsl:value-of select="round(substring-before(@fo:line-height, '%') div 100 * 240)"/> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="w:line-rule">exact</xsl:attribute> + <xsl:attribute name="w:line"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="@fo:line-height"/> + </xsl:call-template> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="@style:line-height-at-least"> + <xsl:attribute name="w:line-rule">at-least</xsl:attribute> + <xsl:attribute name="w:line"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="@style:line-height-at-least"/> + </xsl:call-template> + </xsl:attribute> + </xsl:when> + <xsl:when test="@style:line-spacing"> + <xsl:attribute name="w:line-rule">auto</xsl:attribute> + <xsl:variable name="spacing"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="@style:line-spacing"/> + </xsl:call-template> + </xsl:variable> + <xsl:attribute name="w:line"> + <xsl:value-of select="round($spacing div 0.567)"/> + </xsl:attribute> + </xsl:when> + </xsl:choose> + <xsl:if test="@fo:margin-top"> + <xsl:choose> + <xsl:when test="contains(@fo:margin-top, '%')"> + <xsl:if test="../@style:parent-style-name"> + <xsl:variable name="parent-size"> + <xsl:value-of select="key('paragraph-style', ../@style:parent-style-name)/style:paragraph-properties/@fo:margin-top"/> + </xsl:variable> + <xsl:variable name="w-number"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="$parent-size"/> + </xsl:call-template> + </xsl:variable> + <xsl:attribute name="w:before"> + <xsl:value-of select="round($w-number div 100 * substring-before(@fo:margin-top, '%'))"/> + </xsl:attribute> + </xsl:if> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="w:before"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="@fo:margin-top"/> + </xsl:call-template> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + <xsl:if test="@fo:margin-bottom"> + <xsl:choose> + <xsl:when test="contains(@fo:margin-bottom, '%')"> + <xsl:if test="../@style:parent-style-name"> + <xsl:variable name="parent-size"> + <xsl:value-of select="key('paragraph-style', ../@style:parent-style-name)/style:paragraph-properties/@fo:margin-bottom"/> + </xsl:variable> + <xsl:variable name="w-number"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="$parent-size"/> + </xsl:call-template> + </xsl:variable> + <xsl:attribute name="w:after"> + <xsl:value-of select="round($w-number div 100 * substring-before(@fo:margin-bottom, '%'))"/> + </xsl:attribute> + </xsl:if> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="w:after"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="@fo:margin-bottom"/> + </xsl:call-template> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + </w:spacing> + <w:ind> + <xsl:if test="@fo:margin-left"> + <xsl:choose> + <xsl:when test="contains(@fo:margin-left, '%')"> + <xsl:if test="../@style:parent-style-name"> + <xsl:variable name="parent-size"> + <xsl:value-of select="key('paragraph-style', ../@style:parent-style-name)/style:paragraph-properties/@fo:margin-left"/> + </xsl:variable> + <xsl:variable name="w-number"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="$parent-size"/> + </xsl:call-template> + </xsl:variable> + <xsl:attribute name="w:left"> + <xsl:value-of select="round($w-number div 100 * substring-before(@fo:margin-left, '%'))"/> + </xsl:attribute> + </xsl:if> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="w:left"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="@fo:margin-left"/> + </xsl:call-template> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + <xsl:if test="@fo:margin-right"> + <xsl:choose> + <xsl:when test="contains(@fo:margin-right, '%')"> + <xsl:if test="../@style:parent-style-name"> + <xsl:variable name="parent-size"> + <xsl:value-of select="key('paragraph-style', ../@style:parent-style-name)/style:paragraph-properties/@fo:margin-right"/> + </xsl:variable> + <xsl:variable name="w-number"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="$parent-size"/> + </xsl:call-template> + </xsl:variable> + <xsl:attribute name="w:right"> + <xsl:value-of select="round($w-number div 100 * substring-before(@fo:margin-right, '%'))"/> + </xsl:attribute> + </xsl:if> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="w:right"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="@fo:margin-right"/> + </xsl:call-template> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + <xsl:if test="@fo:text-indent"> + <xsl:choose> + <!-- When @style:auto-text-indent='true' @fo:text-indent ignored, use 283 for all font size --> + <xsl:when test="@style:auto-text-indent='true'"> + <xsl:attribute name="w:first-line">283</xsl:attribute> + </xsl:when> + <xsl:when test="contains(@fo:text-indent, '%')"> + <xsl:if test="../@style:parent-style-name"> + <xsl:variable name="parent-size"> + <xsl:value-of select="key('paragraph-style', ../@style:parent-style-name)/style:paragraph-properties/@fo:text-indent"/> + </xsl:variable> + <xsl:variable name="w-number"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="$parent-size"/> + </xsl:call-template> + </xsl:variable> + <xsl:choose> + <xsl:when test="$w-number < 0"> + <xsl:attribute name="w:hanging"> + <xsl:value-of select="round($w-number div -100 * substring-before(@fo:text-indent, '%'))"/> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="w:first-line"> + <xsl:value-of select="round($w-number div 100 * substring-before(@fo:text-indent, '%'))"/> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + </xsl:when> + <xsl:when test="starts-with(@fo:text-indent,'-')"> + <xsl:attribute name="w:hanging"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="substring-after(@fo:text-indent,'-')"/> + </xsl:call-template> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="w:first-line"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="@fo:text-indent"/> + </xsl:call-template> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + </w:ind> + <xsl:if test="contains(@fo:background-color, '#')"> + <w:shd w:val="clear" w:color="auto" w:fill="{substring-after(@fo:background-color, '#')}"/> + </xsl:if> + <xsl:if test="@fo:keep-with-next='true'"> + <w:keepNext/> + </xsl:if> + <xsl:choose> + <xsl:when test="@fo:widows | @fo:orphans"> + <w:widowControl w:val="on"/> + </xsl:when> + <xsl:otherwise> + <w:widowControl w:val="off"/> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="@style:break-inside = 'avoid'"> + <w:keepLines/> + </xsl:if> + <xsl:if test="@fo:hyphenate = 'false'"> + <w:suppressAutoHyphens/> + </xsl:if> + <xsl:if test="@style:snap-to-layout-grid='false'"> + <w:snapToGrid w:val="off"/> + </xsl:if> + <xsl:if test="style:tab-stops"> + <w:tabs> + <xsl:for-each select="style:tab-stops/style:tab-stop"> + <w:tab> + <xsl:choose> + <xsl:when test="@style:type='char'"> + <xsl:attribute name="w:val">decimal</xsl:attribute> + </xsl:when> + <xsl:when test="@style:type"> + <xsl:attribute name="w:val"> + <xsl:value-of select="@style:type"/> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="w:val">left</xsl:attribute> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="@style:leader-char"> + <xsl:choose> + <xsl:when test="@style:leader-char='-'"> + <xsl:attribute name="w:leader">hyphen</xsl:attribute> + </xsl:when> + <xsl:when test="@style:leader-char='_'"> + <xsl:attribute name="w:leader">underscore</xsl:attribute> + </xsl:when> + <xsl:when test="@style:leader-char='.'"> + <xsl:attribute name="w:leader">dot</xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="w:leader">dot</xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + <xsl:if test="@style:position"> + <xsl:attribute name="w:pos"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="@style:position"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + </w:tab> + </xsl:for-each> + </w:tabs> + </xsl:if> + <xsl:if test="@style:line-break='normal'"> + <w:kinsoku w:val="off"/> + </xsl:if> + <xsl:if test="@style:punctuation-wrap='simple'"> + <w:overflowPunct w:val="off"/> + </xsl:if> + <xsl:if test="@style:text-autospace='none'"> + <w:autoSpaceDE w:val="off"/> + <w:autoSpaceDN w:val="off"/> + </xsl:if> + <xsl:if test="@style:vertical-align"> + <xsl:element name="w:textAlignment"> + <xsl:choose> + <xsl:when test="@style:vertical-align='middle'"> + <xsl:attribute name="w:val">center</xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="w:val"> + <xsl:value-of select="@style:vertical-align"/> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + </xsl:if> + <xsl:if test="@text:number-lines='false'"> + <w:suppressLineNumbers/> + </xsl:if> + <xsl:variable name="border-top" select="@fo:border-top | @fo:border"/> + <xsl:variable name="border-bottom" select="@fo:border-bottom | @fo:border"/> + <xsl:variable name="border-left" select="@fo:border-left | @fo:border"/> + <xsl:variable name="border-right" select="@fo:border-right | @fo:border"/> + <xsl:variable name="border-line-width-top" select="@style:border-line-width-top | @style:border-line-width "/> + <xsl:variable name="border-line-width-bottom" select="@style:border-line-width-bottom | @style:border-line-width"/> + <xsl:variable name="border-line-width-left" select="@style:border-line-width-left | @style:border-line-width"/> + <xsl:variable name="border-line-width-right" select="@style:border-line-width-right | @style:border-line-width"/> + <xsl:variable name="padding-top" select="@fo:padding-top | @fo:padding"/> + <xsl:variable name="padding-bottom" select="@fo:padding-bottom | @fo:padding"/> + <xsl:variable name="padding-left" select="@fo:padding-left | @fo:padding"/> + <xsl:variable name="padding-right" select="@fo:padding-right | @fo:padding"/> + <w:pBdr> + <xsl:if test="$border-top"> + <xsl:element name="w:top"> + <xsl:call-template name="get-border"> + <xsl:with-param name="so-border" select="$border-top"/> + <xsl:with-param name="so-border-line-width" select="$border-line-width-top"/> + <xsl:with-param name="so-border-position" select=" 'top' "/> + </xsl:call-template> + <xsl:attribute name="w:space"> + <xsl:call-template name="convert2pt"> + <xsl:with-param name="value" select="$padding-top"/> + </xsl:call-template> + </xsl:attribute> + <xsl:if test="@style:shadow!='none'"> + <xsl:attribute name="w:shadow">on</xsl:attribute> + </xsl:if> + </xsl:element> + </xsl:if> + <xsl:if test="$border-bottom"> + <xsl:element name="w:bottom"> + <xsl:call-template name="get-border"> + <xsl:with-param name="so-border" select="$border-bottom"/> + <xsl:with-param name="so-border-line-width" select="$border-line-width-bottom"/> + <xsl:with-param name="so-border-position" select=" 'bottom' "/> + </xsl:call-template> + <xsl:attribute name="w:space"> + <xsl:call-template name="convert2pt"> + <xsl:with-param name="value" select="$padding-bottom"/> + </xsl:call-template> + </xsl:attribute> + <xsl:if test="@style:shadow!='none'"> + <xsl:attribute name="w:shadow">on</xsl:attribute> + </xsl:if> + </xsl:element> + </xsl:if> + <xsl:if test="$border-left"> + <xsl:element name="w:left"> + <xsl:call-template name="get-border"> + <xsl:with-param name="so-border" select="$border-left"/> + <xsl:with-param name="so-border-line-width" select="$border-line-width-left"/> + <xsl:with-param name="so-border-position" select=" 'left' "/> + </xsl:call-template> + <xsl:attribute name="w:space"> + <xsl:call-template name="convert2pt"> + <xsl:with-param name="value" select="$padding-left"/> + </xsl:call-template> + </xsl:attribute> + <xsl:if test="@style:shadow!='none'"> + <xsl:attribute name="w:shadow">on</xsl:attribute> + </xsl:if> + </xsl:element> + </xsl:if> + <xsl:if test="$border-right"> + <xsl:element name="w:right"> + <xsl:call-template name="get-border"> + <xsl:with-param name="so-border" select="$border-right"/> + <xsl:with-param name="so-border-line-width" select="$border-line-width-right"/> + <xsl:with-param name="so-border-position" select=" 'right' "/> + </xsl:call-template> + <xsl:attribute name="w:space"> + <xsl:call-template name="convert2pt"> + <xsl:with-param name="value" select="$padding-right"/> + </xsl:call-template> + </xsl:attribute> + <xsl:if test="@style:shadow!='none'"> + <xsl:attribute name="w:shadow">on</xsl:attribute> + </xsl:if> + </xsl:element> + </xsl:if> + <xsl:if test="@style:shadow!='none' and not(@fo:border-top | @fo:border-bottom | @fo:border-left | @fo:border-right | @fo:border)"> + <xsl:element name="w:right"> + <xsl:attribute name="w:shadow">on</xsl:attribute> + <xsl:attribute name="w:val">single</xsl:attribute> + <xsl:variable name="shadow-size"> + <xsl:call-template name="convert2cm"> + <xsl:with-param name="value" select="substring-after(substring-after(@style:shadow, ' '), ' ')"/> + </xsl:call-template> + </xsl:variable> + <xsl:attribute name="w:sz"> + <xsl:choose> + <xsl:when test="$shadow-size <= 0.08">12</xsl:when> + <xsl:when test="$shadow-size <= 0.14">18</xsl:when> + <xsl:when test="$shadow-size <= 0.20">24</xsl:when> + <xsl:when test="$shadow-size <= 0.25">36</xsl:when> + <xsl:otherwise>48</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + </xsl:element> + <xsl:element name="w:bottom"> + <xsl:attribute name="w:shadow">on</xsl:attribute> + <xsl:attribute name="w:val">single</xsl:attribute> + <xsl:variable name="shadow-size"> + <xsl:call-template name="convert2cm"> + <xsl:with-param name="value" select="substring-after(substring-after(@style:shadow, ' '), ' ')"/> + </xsl:call-template> + </xsl:variable> + <xsl:attribute name="w:sz"> + <xsl:choose> + <xsl:when test="$shadow-size <= 0.08">12</xsl:when> + <xsl:when test="$shadow-size <= 0.14">18</xsl:when> + <xsl:when test="$shadow-size <= 0.20">24</xsl:when> + <xsl:when test="$shadow-size <= 0.25">36</xsl:when> + <xsl:otherwise>48</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + </xsl:element> + </xsl:if> + </w:pBdr> + <w:ind> + <xsl:if test="$padding-left!=''"> + <xsl:attribute name="w:left"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="$padding-left"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + <xsl:if test="$padding-right!='' "> + <xsl:attribute name="w:right"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="$padding-right"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + </w:ind> + <xsl:variable name="stylename"> + <xsl:value-of select="../@style:name"/> + </xsl:variable> + <xsl:if test="/office:document/office:body//text:h[@text:style-name = $stylename]"> + <xsl:variable name="headinglevel"> + <xsl:value-of select="/office:document/office:body//text:h[@text:style-name = $stylename]/@text:level"/> + </xsl:variable> + <xsl:if test="/office:document/office:styles/text:outline-style/text:outline-level-style[@text:level = $headinglevel]"> + <w:listPr> + <w:ilvl w:val="{$headinglevel -1}"/> + <w:ilfo w:val="1"/> + </w:listPr> + </xsl:if> + </xsl:if> + </w:pPr> + </xsl:template> + <xsl:template match="style:text-properties" mode="character"> + <w:rPr> + <xsl:if test="@svg:font-family | @style:font-name | @style:font-name-asian | @style:font-name-complex"> + <w:rFonts> + <xsl:variable name="fontname"> + <xsl:choose> + <xsl:when test='starts-with(@svg:font-family,"'")'> + <xsl:value-of select='substring-before(substring-after(@svg:font-family,"'"),"'")'/> + </xsl:when> + <xsl:when test="@svg:font-family"> + <xsl:value-of select="@svg:font-family"/> + </xsl:when> + <xsl:when test="@style:font-name"> + <xsl:value-of select="@style:font-name"/> + </xsl:when> + </xsl:choose> + </xsl:variable> + <xsl:if test="string-length($fontname)!=0"> + <xsl:attribute name="w:ascii"> + <xsl:value-of select="$fontname"/> + </xsl:attribute> + <xsl:attribute name="w:h-ansi"> + <xsl:value-of select="$fontname"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@style:font-name-asian"> + <xsl:attribute name="w:fareast"> + <xsl:value-of select="@style:font-name-asian"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@style:font-name-complex"> + <xsl:attribute name="w:cs"> + <xsl:value-of select="@style:font-name-complex"/> + </xsl:attribute> + </xsl:if> + </w:rFonts> + </xsl:if> + <!-- relative font sizes not supported yet. --> + <xsl:if test="contains(@fo:font-size, 'pt')"> + <w:sz w:val="{substring-before(@fo:font-size,'pt') * 2}"/> + </xsl:if> + <xsl:if test="contains(@fo:font-size-complex, 'pt')"> + <w:sz-cs w:val="{substring-before(@fo:font-size-complex, 'pt') * 2}"/> + </xsl:if> + <xsl:if test="@fo:font-style = 'italic' or @fo:font-style-asian = 'italic'"> + <w:i/> + </xsl:if> + <xsl:if test="@fo:font-style-complex = 'italic'"> + <w:i-cs/> + </xsl:if> + <xsl:if test="@fo:font-weight = 'bold' or @fo:font-weight-asian = 'bold'"> + <w:b/> + </xsl:if> + <xsl:if test="@fo:font-weight-complex = 'bold'"> + <w:b-cs/> + </xsl:if> + <xsl:if test="@style:text-underline-style"> + <w:u> + <xsl:variable name="w-u"> + <xsl:choose> + <xsl:when test="@style:text-underline-style = 'solid'"> + <xsl:choose> + <xsl:when test="@style:text-underline-type = 'double'">double</xsl:when> + <xsl:when test="@style:text-underline-width = 'bold'">thick</xsl:when> + <xsl:otherwise>single</xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="@style:text-underline-style = 'dotted'"> + <xsl:choose> + <xsl:when test="@style:text-underline-type = 'double'">dotted-double</xsl:when> + <xsl:when test="@style:text-underline-width = 'bold'">dotted-heavy</xsl:when> + <xsl:otherwise>dotted</xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="@style:text-underline-style = 'dash'"> + <xsl:choose> + <xsl:when test="@style:text-underline-type = 'double'">dashed-double</xsl:when> + <xsl:when test="@style:text-underline-width = 'bold'">dashed-heavy</xsl:when> + <xsl:otherwise>dash</xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="@style:text-underline-style = 'long-dash'"> + <xsl:choose> + <xsl:when test="@style:text-underline-type = 'double'">dash-long-double</xsl:when> + <xsl:when test="@style:text-underline-width = 'bold'">dash-long-heavy</xsl:when> + <xsl:otherwise>dash-long</xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="@style:text-underline-style = 'dot-dash'"> + <xsl:choose> + <xsl:when test="@style:text-underline-type = 'double'">dot-dash-double</xsl:when> + <xsl:when test="@style:text-underline-width = 'bold'">dash-dot-heavy</xsl:when> + <xsl:otherwise>dot-dash</xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="@style:text-underline-style = 'dot-dot-dash'"> + <xsl:choose> + <xsl:when test="@style:text-underline-type = 'double'">dot-dot-dash-double</xsl:when> + <xsl:when test="@style:text-underline-width = 'bold'">dash-dot-dot-heavy</xsl:when> + <xsl:otherwise>dot-dot-dash</xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="@style:text-underline-style = 'wave'"> + <xsl:choose> + <xsl:when test="@style:text-underline-type = 'double'">wavy-double</xsl:when> + <xsl:when test="@style:text-underline-width = 'bold'">wavy-heavy</xsl:when> + <xsl:otherwise>wave</xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="@style:text-underline-style"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:attribute name="w:val"> + <xsl:value-of select="$w-u"/> + </xsl:attribute> + <xsl:if test="contains(@style:text-underline-color,'#')"> + <xsl:attribute name="w:color"> + <xsl:value-of select="substring-after(@style:text-underline-color,'#')"/> + </xsl:attribute> + </xsl:if> + </w:u> + </xsl:if> + <xsl:if test="@style:text-shadow | @fo:text-shadow"> + <w:shadow/> + </xsl:if> + <xsl:if test="string-length(@style:text-line-through-style) > 0"> + <xsl:choose> + <xsl:when test="@style:text-line-through-type = 'double'"> + <w:dstrike/> + </xsl:when> + <xsl:when test="@style:text-line-through-style = 'solid'"> + <w:strike/> + </xsl:when> + <xsl:otherwise> + <w:strike/> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + <xsl:if test="@fo:color"> + <w:color> + <xsl:choose> + <xsl:when test="@fo:color != '#000000'"> + <xsl:attribute name="w:val"> + <xsl:value-of select="substring-after(@fo:color,'#')"/> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="w:val">auto</xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </w:color> + </xsl:if> + <xsl:if test="@fo:font-variant = 'small-caps'"> + <w:smallCaps/> + </xsl:if> + <xsl:if test="@fo:text-transform = 'uppercase'"> + <w:caps/> + </xsl:if> + <xsl:if test="@style:font-relief = 'engraved'"> + <w:imprint/> + </xsl:if> + <xsl:if test="@style:font-relief = 'embossed'"> + <w:emboss/> + </xsl:if> + <xsl:if test="@style:text-outline = 'true'"> + <w:outline/> + </xsl:if> + <xsl:if test="contains(@style:text-scale,'%')"> + <w:w w:val="{substring-before(@style:text-scale,'%')}"/> + </xsl:if> + <xsl:if test="@style:text-emphasize"> + <w:em> + <xsl:choose> + <xsl:when test="contains(@style:text-emphasize, 'accent')"> + <xsl:attribute name="w:val">comma</xsl:attribute> + </xsl:when> + <xsl:when test="contains(@style:text-emphasize, 'disc')"> + <xsl:attribute name="w:val">under-dot</xsl:attribute> + </xsl:when> + <xsl:when test="contains(@style:text-emphasize, 'none')"> + <xsl:attribute name="w:val">none</xsl:attribute> + </xsl:when> + <xsl:when test="contains(@style:text-emphasize, 'dot below')"> + <xsl:attribute name="w:val">under-dot</xsl:attribute> + </xsl:when> + <xsl:when test="contains(@style:text-emphasize, 'dot above')"> + <xsl:attribute name="w:val">dot</xsl:attribute> + </xsl:when> + <xsl:when test="contains(@style:text-emphasize, 'circle')"> + <xsl:attribute name="w:val">dot</xsl:attribute> + </xsl:when> + </xsl:choose> + </w:em> + </xsl:if> + <xsl:if test="@fo:letter-spacing != 'normal'"> + <w:spacing> + <xsl:attribute name="w:val"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="@fo:letter-spacing"/> + </xsl:call-template> + </xsl:attribute> + </w:spacing> + </xsl:if> + <xsl:if test="@style:text-blinking = 'true'"> + <w:effect w:val="blink-background"/> + </xsl:if> + <xsl:if test="@fo:language | @fo:language-asian | @fo:language-complex"> + <w:lang> + <xsl:if test="@fo:language and @fo:country"> + <xsl:attribute name="w:val"> + <xsl:value-of select="concat(@fo:language, '-', @fo:country)"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@fo:language-asian and @fo:country-asian"> + <xsl:attribute name="w:fareast"> + <xsl:value-of select="concat(@fo:language-asian, '-', @fo:country-asian)"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@fo:language-complex and @fo:language-complex"> + <xsl:attribute name="w:bidi"> + <xsl:value-of select="concat(@fo:language-complex, '-', @fo:language-complex)"/> + </xsl:attribute> + </xsl:if> + </w:lang> + </xsl:if> + <xsl:if test="@style:text-position"> + <xsl:variable name="position"> + <xsl:choose> + <xsl:when test="starts-with(@style:text-position, 'super')">superscript_0</xsl:when> + <xsl:when test="starts-with(@style:text-position, 'sub')">subscript_0</xsl:when> + <xsl:when test="starts-with(@style:text-position, '-')"> + <xsl:value-of select="concat('subscript_', substring-before(@style:text-position,'%'))"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat('superscript_', substring-before(@style:text-position,'%'))"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <w:vertAlign> + <xsl:attribute name="w:val"> + <xsl:value-of select="substring-before($position,'_')"/> + </xsl:attribute> + </w:vertAlign> + <!-- Raised/Lowed position is difficult to map to MSWord w:position, Writer use %, but Word use half-point(not relative position). Since it's difficult to get font-size, use 12pt as default font-size --> + <w:position> + <xsl:attribute name="w:val"> + <xsl:choose> + <xsl:when test="substring-after($position, '_') = 0">0</xsl:when> + <xsl:otherwise> + <xsl:value-of select="round(substring-after($position, '_') div 6)"/> + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + </w:position> + </xsl:if> + <xsl:if test="@text:display = 'true'"> + <w:vanish/> + </xsl:if> + <xsl:if test="contains(@fo:background-color, '#')"> + <w:shd w:val="clear" w:color="auto" w:fill="{substring-after(@fo:background-color, '#')}"/> + </xsl:if> + </w:rPr> + </xsl:template> + <xsl:template match="text:p | text:h"> + <w:p> + <w:pPr> + <xsl:if test="@text:style-name"> + <w:pStyle w:val="{@text:style-name}"/> + </xsl:if> + <xsl:if test="@text:level"> + <w:outlineLvl w:val="{@text:level - 1}"/> + </xsl:if> + <xsl:variable name="following-paragraph-heading-table" select="following::*[(name()= 'text:p' or name()= 'text:h' or name()= 'table:table')]"/> + <xsl:variable name="following-section" select="following::text:section[1]"/> + <xsl:variable name="ancestor-section" select="ancestor::text:section"/> + <!-- if the following neighbour paragraph/heading are slave of one master style, or new section starts, + then a new page will start --> + <xsl:variable name="next-is-new-page" select="boolean(key( 'slave-style', $following-paragraph-heading-table[1]/@*[name()='text:style-name' or name()='table:style-name']))"/> + <xsl:variable name="next-is-new-section"> + <xsl:if test="$following-section and generate-id($following-section/descendant::*[(name()= 'text:p' or name()= 'text:h' or name()= 'table:table') and position() =1]) = generate-id($following-paragraph-heading-table[1])"> + <xsl:value-of select="'yes'"/> + </xsl:if> + </xsl:variable> + <xsl:variable name="next-is-section-end"> + <xsl:if test="$ancestor-section and generate-id($ancestor-section[1]/following::*[(name()= 'text:p' or name()= 'text:h' or name()= 'table:table') and position() =1]) = generate-id($following-paragraph-heading-table[1])"> + <xsl:value-of select="'yes'"/> + </xsl:if> + </xsl:variable> + <xsl:if test="ancestor::office:body and not(ancestor::text:footnote or ancestor::text:endnote) and ($next-is-new-page or $next-is-new-section = 'yes' or $next-is-section-end = 'yes')"> + <w:sectPr> + <xsl:apply-templates select="/office:document/office:styles/text:footnotes-configuration"> + <xsl:with-param name="within-section" select="'yes'"/> + </xsl:apply-templates> + <xsl:apply-templates select="/office:document/office:styles/text:endnotes-configuration"> + <xsl:with-param name="within-section" select="'yes'"/> + </xsl:apply-templates> + <xsl:choose> + <xsl:when test="key( 'slave-style', @*[name()='text:style-name' or name()='table:style-name'])"> + <xsl:apply-templates select="key('master-page', key( 'slave-style', @*[name()='text:style-name' or name()='table:style-name'])[1]/@style:master-page-name)"/> + <xsl:if test="$ancestor-section"> + <xsl:apply-templates select="key('section-style',$ancestor-section[1]/@text:style-name)" mode="section"> + <xsl:with-param name="master-page" select="key( 'page-layout', key('master-page', key( 'slave-style', @*[name()='text:style-name' or name()='table:style-name'])[1]/@style:master-page-name)/@style:page-layout-name)"/> + </xsl:apply-templates> + </xsl:if> + <xsl:if test="key( 'slave-style', @*[name()='text:style-name' or name()='table:style-name'])/style:paragraph-properties/@style:page-number"> + <!-- in M$ word the header and footer associate with the w:sectPr, but in StarOffice writer the header and footer associate with the style:master-page --> + <xsl:variable name="pagenumber_start"> + <xsl:value-of select=" key( 'slave-style', @*[name()='text:style-name' or name()='table:style-name'])/style:paragraph-properties/@style:page-number"/> + </xsl:variable> + <xsl:if test=" number($pagenumber_start) > 0 "> + <w:pgNumType w:start="{$pagenumber_start}"/> + </xsl:if> + <!-- comment out the below line to enable the header and footer display normally when style:page-number =0 --> + <!--w:pgNumType w:start="{key( 'slave-style', @*[name()='text:style-name' or name()='table:style-name'])/style:paragraph-properties/@style:page-number}"/ --> + </xsl:if> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="preceding-style" select="preceding::*[(name()= 'text:p' or name()= 'text:h' or name()= 'table:table') and key( 'slave-style', @*[name()='text:style-name' or name()='table:style-name'])]"/> + <xsl:choose> + <xsl:when test="$preceding-style"> + <xsl:apply-templates select="key('master-page', key( 'slave-style', $preceding-style[1]/@*[name()='text:style-name' or name()='table:style-name'])[1]/@style:master-page-name)"/> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="/office:document/office:master-styles/style:master-page[1]"/> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="$ancestor-section"> + <xsl:choose> + <xsl:when test="$preceding-style"> + <xsl:apply-templates select="key('section-style',$ancestor-section[1]/@text:style-name)" mode="section"> + <xsl:with-param name="master-page" select="key( 'page-layout', key('master-page', key( 'slave-style', $preceding-style[1]/@*[name()='text:style-name' or name()='table:style-name'])[1]/@style:master-page-name)/@style:page-layout-name)"/> + </xsl:apply-templates> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="key('section-style',$ancestor-section[1]/@text:style-name)" mode="section"> + <xsl:with-param name="master-page" select="/office:document/office:automatic-styles/style:page-layout[1]"/> + </xsl:apply-templates> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + </xsl:otherwise> + </xsl:choose> + </w:sectPr> + </xsl:if> + <!-- add for office:annotation style G.Y. --> + <xsl:if test="name(..)= 'office:annotation' "> + <w:pStyle w:val="CommentText"/> + </xsl:if> + <!-- add by wym for listPr --> + <xsl:if test="ancestor::text:ordered-list | ancestor::text:unordered-list | ancestor::text:list"> + <xsl:variable name="listname"> + <xsl:value-of select="ancestor::text:ordered-list/@text:style-name | ancestor::text:unordered-list/@text:style-name | ancestor::text:list/@text:style-name"/> + </xsl:variable> + <xsl:variable name="currlevel"> + <xsl:value-of select="count(ancestor::text:list-item|ancestor::text:list-header)"/> + </xsl:variable> + <xsl:choose> + <xsl:when test="string-length($listname)!=0 and $currlevel < 10"> + <xsl:variable name="currlist"> + <xsl:apply-templates select="key('list-style', $listname)" mode="count"/> + </xsl:variable> + <w:listPr> + <w:ilvl w:val="{number($currlevel)-1}"/> + <w:ilfo w:val="{$currlist}"/> + </w:listPr> + </xsl:when> + <xsl:when test="string-length($listname)!=0"> + <xsl:for-each select="key('list-style', $listname)"> + <xsl:variable name="spacebefore"> + <xsl:choose> + <xsl:when test="*[@text:level=$currlevel]/style:list-level-properties/@text:space-before"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="*[@text:level=$currlevel]/style:list-level-properties/@text:space-before"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="space2text"> + <xsl:choose> + <xsl:when test="*[@text:level=$currlevel]/style:list-level-properties/@text:min-label-width"> + <xsl:call-template name="convert2twip"> + <xsl:with-param name="value" select="*[@text:level=$currlevel]/style:list-level-properties/@text:min-label-width"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <w:ind w:left="{number($space2text)+number($spacebefore)}" w:hanging="{$space2text}"/> + </xsl:for-each> + </xsl:when> + <xsl:otherwise> + <w:listPr> + <w:ilvl w:val="{number($currlevel)-1}"/> + <w:ilfo w:val="1"/> + </w:listPr> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + <!-- end of listPr --> + </w:pPr> + <!-- get break column from style --> + <xsl:variable name="style" select="key('paragraph-style', @text:style-name)/style:paragraph-properties"/> + <xsl:if test="$style/@fo:break-before = 'column'"> + <w:r> + <w:br w:type="column"/> + </w:r> + </xsl:if> + <xsl:if test="parent::office:text and not(preceding-sibling::text:p)"> + <xsl:call-template name="PageLevelGraphic"/> + </xsl:if> + <xsl:if test="parent::text:footnote-body and not(preceding-sibling::*)"> + <w:r> + <w:rPr> + <w:rStyle w:val="{/office:document/office:styles/text:footnotes-configuration/@text:citation-style-name}"/> + </w:rPr> + <xsl:choose> + <xsl:when test="../../text:footnote-citation/@text:label"> + <w:t> + <xsl:value-of select="../../text:footnote-citation/@text:label"/> + </w:t> + </xsl:when> + <xsl:otherwise> + <w:footnoteRef/> + </xsl:otherwise> + </xsl:choose> + </w:r> + <w:r> + <w:tab/> + </w:r> + </xsl:if> + <xsl:if test="parent::text:endnote-body and not(preceding-sibling::*)"> + <w:r> + <w:rPr> + <w:rStyle w:val="{/office:document/office:styles/text:endnotes-configuration/@text:citation-style-name}"/> + </w:rPr> + <xsl:choose> + <xsl:when test="../../text:endnote-citation/@text:label"> + <w:t> + <xsl:value-of select="../../text:endnote-citation/@text:label"/> + </w:t> + </xsl:when> + <xsl:otherwise> + <w:endnoteRef/> + </xsl:otherwise> + </xsl:choose> + </w:r> + <w:r> + <w:tab/> + </w:r> + </xsl:if> + <!-- newly added the endnote , footnote templates --> + <xsl:if test="../../@text:note-class='endnote' and not(preceding-sibling::*)"> + <xsl:message> + <xsl:value-of select=" 'enter into ext:note-class= endnote' "/> + </xsl:message> + <w:r> + <w:rPr> + <w:rStyle w:val="Endnote_20_Symbol"/> + </w:rPr> + <xsl:choose> + <xsl:when test="../../text:note-citation/@text:label"> + <w:t> + <xsl:value-of select="../../text:note-citation/@text:label"/> + </w:t> + </xsl:when> + <xsl:otherwise> + <w:footnoteRef/> + </xsl:otherwise> + </xsl:choose> + </w:r> + <w:r> + <w:tab/> + </w:r> + </xsl:if> + <xsl:if test="../../@text:note-class='footnote' and not(preceding-sibling::*)"> + <xsl:message> + <xsl:value-of select=" 'enter into ext:note-class= footnote' "/> + </xsl:message> + <w:r> + <w:rPr> + <w:rStyle w:val="Footnote_20_Symbol"/> + </w:rPr> + <xsl:choose> + <xsl:when test="../../text:note-citation/@text:label"> + <w:t> + <xsl:value-of select="../../text:note-citation/@text:label"/> + </w:t> + </xsl:when> + <xsl:otherwise> + <w:footnoteRef/> + </xsl:otherwise> + </xsl:choose> + </w:r> + <w:r> + <w:tab/> + </w:r> + </xsl:if> + <!-- apply inline-text-elements, many many many ... :( glu --> + <xsl:apply-templates select="text:a | text:span | text() | text:hidden-text | text:line-break | text:tab-stop + | text:s | text:note | draw:* + | text:page-number | text:page-count | text:subject | text:initial-creator | text:title | text:date | text:time + | text:author-name | text:author-initials | text:chapter | text:file-name | text:sender-company + | text:sender-firstname | text:sender-lastname | text:sender-initials | text:sender-street + | text:sender-country | text:sender-postal-code | text:sender-city | text:sender-title | text:sender-position + | text:sender-phone-private | text:sender-phone-work | text:sender-email | text:sender-fax + | text:sender-state-or-province | text:word-count | text:paragraph-count | text:character-count + | text:table-count | text:image-count | text:object-count | text:template-name | text:description + | text:creation-time | text:creation-date | text:editing-cycles | text:editing-duration | text:keywords + | text:print-time | text:print-date | text:creator | text:modification-time | text:modification-date + | text:user-defined | text:printed-by | text:hidden-paragraph | text:placeholder | text:drop-down + | text:conditional-text | text:text-input | text:execute-macro | text:variable-set | text:variable-input + | text:user-field-input | text:variable-get | text:user-field-get | text:sequence | text:page-variable-set + | text:page-variable-get | text:table-formula | text:database-display | text:database-next + | text:database-select | text:database-row-number | text:database-name | text:reference-ref + | text:bookmark-ref | text:footnote-ref | text:endnote-ref | text:sequence-ref | text:expression + | text:measure | text:dde-connection | text:sheet-name | text:bibliography-mark | text:script + | text:page-continuation | office:annotation | text:bookmark-start | text:bookmark-end | text:bookmark + "/> + <!-- comment out the following line to replace the text:footnote , text:endnote with text:note in OASIS format --> + <!--xsl:apply-templates select="text:a | text:span | text() | text:hidden-text | text:line-break | text:tab-stop + | text:s | text:footnote | text:endnote | draw:* + | text:page-number | text:page-count | text:subject | text:initial-creator | text:title | text:date | text:time + | text:author-name | text:author-initials | text:chapter | text:file-name | text:sender-company + | text:sender-firstname | text:sender-lastname | text:sender-initials | text:sender-street + | text:sender-country | text:sender-postal-code | text:sender-city | text:sender-title | text:sender-position + | text:sender-phone-private | text:sender-phone-work | text:sender-email | text:sender-fax + | text:sender-state-or-province | text:word-count | text:paragraph-count | text:character-count + | text:table-count | text:image-count | text:object-count | text:template-name | text:description + | text:creation-time | text:creation-date | text:editing-cycles | text:editing-duration | text:keywords + | text:print-time | text:print-date | text:creator | text:modification-time | text:modification-date + | text:user-defined | text:printed-by | text:hidden-paragraph | text:placeholder | text:drop-down + | text:conditional-text | text:text-input | text:execute-macro | text:variable-set | text:variable-input + | text:user-field-input | text:variable-get | text:user-field-get | text:sequence | text:page-variable-set + | text:page-variable-get | text:table-formula | text:database-display | text:database-next + | text:database-select | text:database-row-number | text:database-name | text:reference-ref + | text:bookmark-ref | text:footnote-ref | text:endnote-ref | text:sequence-ref | text:expression + | text:measure | text:dde-connection | text:sheet-name | text:bibliography-mark | text:script + | text:page-continuation | office:annotation | text:bookmark-start | text:bookmark-end | text:bookmark + "/--> + <xsl:if test="$style/@fo:break-after"> + <w:r> + <w:br w:type="{$style/@fo:break-after}"/> + </w:r> + </xsl:if> + </w:p> + </xsl:template> + <xsl:template match="text:span"> + <!-- apply inline-text-elements, many many many ... :( glu --> + <xsl:apply-templates select="text:a | text() | text:hidden-text | text:line-break | text:tab-stop | text:s + | text:note + | text:page-number | text:page-count | text:subject | text:initial-creator | text:title | text:date | text:time + | text:author-name | text:author-initials | text:chapter | text:file-name | text:sender-company + | text:sender-firstname | text:sender-lastname | text:sender-initials | text:sender-street + | text:sender-country | text:sender-postal-code | text:sender-city | text:sender-title | text:sender-position + | text:sender-phone-private | text:sender-phone-work | text:sender-email | text:sender-fax + | text:sender-state-or-province | text:word-count | text:paragraph-count | text:character-count + | text:table-count | text:image-count | text:object-count | text:template-name | text:description + | text:creation-time | text:creation-date | text:editing-cycles | text:editing-duration | text:keywords + | text:print-time | text:print-date | text:creator | text:modification-time | text:modification-date + | text:user-defined | text:printed-by | text:hidden-paragraph | text:placeholder | text:drop-down + | text:conditional-text | text:text-input | text:execute-macro | text:variable-set | text:variable-input + | text:user-field-input | text:variable-get | text:user-field-get | text:sequence | text:page-variable-set + | text:page-variable-get | text:table-formula | text:database-display | text:database-next + | text:database-select | text:database-row-number | text:database-name | text:reference-ref + | text:bookmark-ref | text:footnote-ref | text:endnote-ref | text:sequence-ref | text:expression + | text:measure | text:dde-connection | text:sheet-name | text:bibliography-mark | text:script + | text:page-continuation | office:annotation | text:bookmark-start | text:bookmark-end | text:bookmark +"/> + <!-- comment out the following line to replace the text:footnote , text:endnote with text:note in OASIS format --> + <!-- xsl:apply-templates select="text:a | text() | text:hidden-text | text:line-break | text:tab-stop | text:s + | text:footnote | text:endnote + | text:page-number | text:page-count | text:subject | text:initial-creator | text:title | text:date | text:time + | text:author-name | text:author-initials | text:chapter | text:file-name | text:sender-company + | text:sender-firstname | text:sender-lastname | text:sender-initials | text:sender-street + | text:sender-country | text:sender-postal-code | text:sender-city | text:sender-title | text:sender-position + | text:sender-phone-private | text:sender-phone-work | text:sender-email | text:sender-fax + | text:sender-state-or-province | text:word-count | text:paragraph-count | text:character-count + | text:table-count | text:image-count | text:object-count | text:template-name | text:description + | text:creation-time | text:creation-date | text:editing-cycles | text:editing-duration | text:keywords + | text:print-time | text:print-date | text:creator | text:modification-time | text:modification-date + | text:user-defined | text:printed-by | text:hidden-paragraph | text:placeholder | text:drop-down + | text:conditional-text | text:text-input | text:execute-macro | text:variable-set | text:variable-input + | text:user-field-input | text:variable-get | text:user-field-get | text:sequence | text:page-variable-set + | text:page-variable-get | text:table-formula | text:database-display | text:database-next + | text:database-select | text:database-row-number | text:database-name | text:reference-ref + | text:bookmark-ref | text:footnote-ref | text:endnote-ref | text:sequence-ref | text:expression + | text:measure | text:dde-connection | text:sheet-name | text:bibliography-mark | text:script + | text:page-continuation | office:annotation | text:bookmark-start | text:bookmark-end | text:bookmark +"/--> + </xsl:template> + <xsl:template match="text()"> + <xsl:if test="string-length(normalize-space(.)) > 0"> + <w:r> + <xsl:if test="parent::text:span"> + <w:rPr> + <w:rStyle w:val="{parent::text:span/@text:style-name}"/> + </w:rPr> + </xsl:if> + <w:t> + <xsl:value-of select="."/> + </w:t> + </w:r> + </xsl:if> + </xsl:template> + <xsl:template match="text:hidden-text"> + <w:r> + <w:rPr> + <xsl:if test="parent::text:span"> + <w:rStyle w:val="{parent::text:span/@text:style-name}"/> + </xsl:if> + <w:vanish/> + </w:rPr> + <w:t> + <xsl:value-of select="@text:string-value"/> + </w:t> + </w:r> + </xsl:template> + <xsl:template match="text:line-break"> + <w:r> + <xsl:if test="parent::text:span"> + <w:rPr> + <w:rStyle w:val="{parent::text:span/@text:style-name}"/> + </w:rPr> + </xsl:if> + <w:br w:type="text-wrapping" w:clear="all"/> + </w:r> + </xsl:template> + <xsl:template match="text:tab-stop"> + <w:r> + <xsl:if test="parent::text:span"> + <w:rPr> + <w:rStyle w:val="{parent::text:span/@text:style-name}"/> + </w:rPr> + </xsl:if> + <w:tab/> + </w:r> + </xsl:template> + <xsl:template match="text:s"> + <w:r> + <xsl:if test="parent::text:span"> + <w:rPr> + <w:rStyle w:val="{parent::text:span/@text:style-name}"/> + </w:rPr> + </xsl:if> + <w:t> + <xsl:if test="@text:c"> + <xsl:call-template name="add-space"> + <xsl:with-param name="number" select="@text:c"/> + </xsl:call-template> + </xsl:if> + <xsl:text> </xsl:text> + </w:t> + </w:r> + </xsl:template> + <xsl:template name="add-space"> + <xsl:param name="number"/> + <xsl:if test="$number > 1"> + <xsl:call-template name="add-space"> + <xsl:with-param name="number" select="$number - 1"/> + </xsl:call-template> + <xsl:text> </xsl:text> + </xsl:if> + </xsl:template> + <xsl:template match="text:footnote"> + <w:r> + <w:rPr> + <w:rStyle w:val="{/office:document/office:styles/text:footnotes-configuration/@text:citation-body-style-name}"/> + </w:rPr> + <xsl:apply-templates select="text:footnote-body"/> + </w:r> + </xsl:template> + <xsl:template match="text:footnote-body"> + <w:footnote> + <xsl:if test="../text:footnote-citation/@text:label"> + <xsl:attribute name="w:suppressRef">on</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="text:h | text:p | text:ordered-list | text:unordered-list | text:list"/> + </w:footnote> + </xsl:template> + <xsl:template match="text:endnote"> + <w:r> + <w:rPr> + <w:rStyle w:val="{/office:document/office:styles/text:endnotes-configuration/@text:citation-body-style-name}"/> + </w:rPr> + <xsl:apply-templates select="text:endnote-body"/> + </w:r> + </xsl:template> + <xsl:template match="text:endnote-body"> + <w:endnote> + <xsl:if test="../text:endnote-citation/@text:label"> + <xsl:attribute name="w:suppressRef">on</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="text:h | text:p | text:ordered-list | text:unordered-list | text:list"/> + </w:endnote> + </xsl:template> + <xsl:template match="text:bookmark-start"> + <xsl:variable name="bookmark-id"> + <xsl:number from="/office:document/office:body" count="text:bookmark | text:bookmark-start" level="any" format="1"/> + </xsl:variable> + <aml:annotation aml:id="{$bookmark-id}" w:type="Word.Bookmark.Start" w:name="{@text:name}"/> + </xsl:template> + <xsl:template match="text:bookmark-end"> + <xsl:variable name="bookmark-id"> + <xsl:number from="/office:document/office:body" count="text:bookmark | text:bookmark-start" level="any" format="1"/> + </xsl:variable> + <aml:annotation aml:id="{$bookmark-id}" w:type="Word.Bookmark.End"/> + </xsl:template> + <xsl:template match="text:bookmark"> + <xsl:variable name="bookmark-id"> + <xsl:number from="/office:document/office:body" count="text:bookmark | text:bookmark-start" level="any" format="1"/> + </xsl:variable> + <aml:annotation aml:id="{$bookmark-id}" w:type="Word.Bookmark.Start" w:name="{@text:name}"/> + <aml:annotation aml:id="{$bookmark-id}" w:type="Word.Bookmark.End"/> + </xsl:template> + <!-- newly added the endnote , footnote templates --> + <xsl:template match="text:note"> + <xsl:choose> + <xsl:when test="@text:note-class = 'endnote' "> + <w:r> + <w:rPr> + <w:rStyle w:val="Endnote"/> + </w:rPr> + <xsl:apply-templates select="text:note-body"/> + </w:r> + </xsl:when> + <xsl:when test="@text:note-class = 'footnote' "> + <w:r> + <w:rPr> + <w:rStyle w:val="Footnote"/> + </w:rPr> + <xsl:apply-templates select="text:note-body"/> + </w:r> + </xsl:when> + </xsl:choose> + </xsl:template> + <xsl:template match="text:note-body"> + <xsl:choose> + <xsl:when test="../@text:note-class='endnote' "> + <w:endnote> + <xsl:if test="../text:note-citation/@text:label"> + <xsl:attribute name="w:suppressRef">on</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="text:h | text:p | text:ordered-list | text:unordered-list | text:list"/> + </w:endnote> + </xsl:when> + <xsl:when test="../@text:note-class='footnote' "> + <w:footnote> + <xsl:if test="../text:note-citation/@text:label"> + <xsl:attribute name="w:suppressRef">on</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="text:h | text:p | text:ordered-list | text:unordered-list | text:list"/> + </w:footnote> + </xsl:when> + </xsl:choose> + </xsl:template> +</xsl:stylesheet> |