home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2004 May
/
PCWorld_2004-05_cd.bin
/
akce
/
openoffice
/
f_0397
/
MsWordXMLImport.xsl
Wrap
Extensible Markup Language
|
2004-03-27
|
79KB
|
1,557 lines
<?xml version="1.0" encoding="UTF-8"?>
<!--
# The Contents of this file are made available subject to the terms of
# either of the following licenses
#
# - GNU Lesser General Public License Version 2.1
# - Sun Industry Standards Source License Version 1.1
#
# Sun Microsystems Inc., October, 2000
#
# GNU Lesser General Public License Version 2.1
# =============================================
# Copyright 2000 by Sun Microsystems, Inc.
# 901 San Antonio Road, Palo Alto, CA 94303, USA
#
# 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
#
#
# Sun Industry Standards Source License Version 1.1
# =================================================
# The contents of this file are subject to the Sun Industry Standards
# Source License Version 1.1 (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.openoffice.org/license.html.
#
# Software provided under this License is provided on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
# See the License for the specific provisions governing your rights and
# obligations concerning the Software.
#
# The Initial Developer of the Original Code is: Sun Microsystems, Inc.
#
# Copyright: 2000 by Sun Microsystems, Inc.
#
# All Rights Reserved.
#
# Contributor(s): _______________________________________
#
#
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:SL="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:office="http://openoffice.org/2000/office" xmlns:table="http://openoffice.org/2000/table" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:meta="http://openoffice.org/2000/meta" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" xmlns:config="http://openoffice.org/2001/config" office:version="1.0">
<xsl:output method="xml" indent="no" encoding="UTF-8" version="1.0"/>
<xsl:template match="w:wordDocument">
<office:document xmlns:office="http://openoffice.org/2000/office" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:meta="http://openoffice.org/2000/meta" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" xmlns:config="http://openoffice.org/2001/config" office:class="text" office:version="1.0">
<xsl:apply-templates select="o:DocumentProperties"/>
<xsl:apply-templates select="w:docPr"/>
<xsl:apply-templates select="w:fonts"/>
<xsl:apply-templates select="w:styles"/>
<xsl:apply-templates select="w:body"/>
</office:document>
</xsl:template>
<xsl:template match="o:DocumentProperties">
<office:meta>
<meta:generator>Microsoft Word 2003</meta:generator>
<dc:title>
<xsl:value-of select="o:Title"/>
</dc:title>
<dc:description>
<xsl:value-of select="o:Description"/>
</dc:description>
<dc:subject>
<xsl:value-of select="o:Subject"/>
</dc:subject>
<meta:initial-creator>
<xsl:value-of select="o:Author"/>
</meta:initial-creator>
<meta:creation-date>
<xsl:value-of select="substring-before( o:Created, 'Z')"/>
</meta:creation-date>
<dc:creator>
<xsl:value-of select="o:LastAuthor"/>
</dc:creator>
<dc:date>
<xsl:value-of select="substring-before( o:LastSaved, 'Z')"/>
</dc:date>
<meta:printed-by/>
<meta:print-date/>
<meta:keywords>
<meta:keyword>
<xsl:value-of select="o:Keywords"/>
</meta:keyword>
</meta:keywords>
<dc:language/>
<meta:editing-cycles>
<xsl:value-of select="o:Revision"/>
</meta:editing-cycles>
<meta:editing-duration>
<xsl:if test="o:TotalTime">
<xsl:value-of select="concat('PT', floor(o:TotalTime div 60), 'H', o:TotalTime mod 60, 'M0S')"/>
</xsl:if>
</meta:editing-duration>
<meta:user-defined meta:name="Category">
<xsl:value-of select="o:Category"/>
</meta:user-defined>
<meta:user-defined meta:name="Manager">
<xsl:value-of select="o:Manager"/>
</meta:user-defined>
<meta:user-defined meta:name="Company">
<xsl:value-of select="o:Company"/>
</meta:user-defined>
<meta:user-defined meta:name="Version">
<xsl:value-of select="o:Version"/>
</meta:user-defined>
<meta:user-defined meta:name="HyperlinkBase">
<xsl:value-of select="o:HyperlinkBase"/>
</meta:user-defined>
<xsl:apply-templates select="../o:CustomDocumentProperties"/>
<meta:document-statistic/>
</office:meta>
</xsl:template>
<xsl:template match="o:CustomDocumentProperties">
<xsl:for-each select="node()[@dt:dt]">
<meta:user-defined meta:name="{name()}">
<xsl:value-of select="."/>
</meta:user-defined>
</xsl:for-each>
</xsl:template>
<xsl:template match="w:docPr">
<office:settings>
<config:config-item-set config:name="view-settings">
<config:config-item config:name="InBrowseMode" config:type="boolean">
<xsl:choose>
<xsl:when test="w:view/@w:val = 'outline'">true</xsl:when>
<xsl:when test="w:view/@w:val = 'print'">false</xsl:when>
<!-- others: web, reading, normal, master-pages, none. glu -->
<xsl:otherwise>true</xsl:otherwise>
</xsl:choose>
</config:config-item>
<config:config-item-map-indexed config:name="Views">
<config:config-item-map-entry>
<xsl:if test="w:zoom">
<!-- VisibleRight and VisibleBottom are arbitrary positive numbers. ;) glu -->
<config:config-item config:name="VisibleRight" config:type="int">1</config:config-item>
<config:config-item config:name="VisibleBottom" config:type="int">1</config:config-item>
<xsl:choose>
<xsl:when test="w:zoom/@w:val = 'best-fit'">
<config:config-item config:name="ZoomType" config:type="short">3</config:config-item>
</xsl:when>
<xsl:when test="w:zoom/@w:val = 'full-page'">
<config:config-item config:name="ZoomType" config:type="short">2</config:config-item>
</xsl:when>
<xsl:when test="w:zoom/@w:val = 'text-fit'">
<config:config-item config:name="ZoomType" config:type="short">1</config:config-item>
</xsl:when>
<xsl:otherwise>
<config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
</xsl:otherwise>
</xsl:choose>
<config:config-item config:name="ZoomFactor" config:type="short">
<xsl:value-of select="w:zoom/@w:percent"/>
</config:config-item>
</xsl:if>
</config:config-item-map-entry>
</config:config-item-map-indexed>
</config:config-item-set>
</office:settings>
</xsl:template>
<xsl:template match="w:fonts">
<xsl:element name="office:font-decls">
<!-- MS Word's default font declaration, added for Writer automatically. glu -->
<style:font-decl style:name="Arial" fo:font-family="Arial" style:font-family-generic="roman" style:font-pitch="variable"/>
<style:font-decl style:name="Times New Roman" fo:font-family="'Times New Roman'" style:font-family-generic="roman" style:font-pitch="variable"/>
<style:font-decl style:name="Symbol" fo:font-family="Symbol" style:font-family-generic="roman" style:font-pitch="variable" style:font-charset="x-symbol"/>
<style:font-decl style:name="Courier New" fo:font-family="'Courier New'" style:font-family-generic="modern" style:font-pitch="fixed"/>
<xsl:if test="not(w:font[@w:name='StarSymbol'])">
<style:font-decl style:name="StarSymbol" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
</xsl:if>
<xsl:for-each select="w:font">
<xsl:element name="style:font-decl">
<xsl:attribute name="style:name"><xsl:value-of select="@w:name"/></xsl:attribute>
<xsl:attribute name="fo:font-family"><xsl:value-of select="@w:name"/></xsl:attribute>
<!-- added by glu, for process special fonts e.g. Marlett, -->
<xsl:if test="w:charset/@w:val = '02'">
<xsl:attribute name="style:font-charset">x-symbol</xsl:attribute>
</xsl:if>
<xsl:if test="w:family">
<xsl:choose>
<xsl:when test="w:family/@w:val = 'Swiss'">
<xsl:attribute name="style:font-family-generic">swiss</xsl:attribute>
</xsl:when>
<xsl:when test="w:family/@w:val='Modern'">
<xsl:attribute name="style:font-family-generic">modern</xsl:attribute>
</xsl:when>
<xsl:when test="w:family/@w:val='Roman'">
<xsl:attribute name="style:font-family-generic">roman</xsl:attribute>
</xsl:when>
<xsl:when test="w:family/@w:val='Script'">
<xsl:attribute name="style:font-family-generic">script</xsl:attribute>
</xsl:when>
<xsl:when test="w:family/@w:val='Decorative'">
<xsl:attribute name="style:font-family-generic">decorative</xsl:attribute>
</xsl:when>
<xsl:when test="w:family/@w:val='System'">
<xsl:attribute name="style:font-family-generic">system</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="style:font-family-generic">system</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test="w:pitch">
<xsl:attribute name="style:font-pitch"><xsl:value-of select="w:pitch/@w:val"/></xsl:attribute>
</xsl:if>
</xsl:element>
</xsl:for-each>
<xsl:apply-templates select="w:font"/>
</xsl:element>
</xsl:template>
<xsl:template match="w:styles">
<xsl:variable name="default_paragraph_style" select="w:style[@w:default = 'on' and @w:type = 'paragraph']"/>
<xsl:variable name="default_character_style" select="w:style[@w:default = 'on' and @w:type = 'character']"/>
<xsl:variable name="default_table_style" select="w:style[@w:default = 'on' and @w:type = 'table']"/>
<office:styles>
<!-- make default paragarph and other styles. glu -->
<xsl:if test="$default_paragraph_style">
<style:default-style style:family="paragraph">
<xsl:element name="style:properties">
<xsl:choose>
<xsl:when test="/w:wordDocument/w:fonts/w:defaultFonts">
<xsl:attribute name="style:font-name"><xsl:value-of select="/w:wordDocument/w:fonts/w:defaultFonts/@w:ascii"/></xsl:attribute>
<xsl:attribute name="style:font-name-asian"><xsl:value-of select="/w:wordDocument/w:fonts/w:defaultFonts/@w:fareast"/></xsl:attribute>
<xsl:attribute name="style:font-name-complex"><xsl:value-of select="/w:wordDocument/w:fonts/w:defaultFonts/@w:cs"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="style:font-name">Times New Roman</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="$default_paragraph_style/w:rPr/w:sz"/>
<xsl:apply-templates select="$default_paragraph_style/w:rPr/w:sz-cs"/>
<!-- if not defined default font size in Word, make it out as 10pt. glu -->
<xsl:if test="not($default_paragraph_style/w:rPr/w:sz or w:rPr/w:sz-cs)">
<xsl:attribute name="fo:font-size">10pt</xsl:attribute>
<xsl:attribute name="fo:font-size-asian">10pt</xsl:attribute>
<xsl:attribute name="fo:font-size-complex">10pt</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="$default_paragraph_style/w:rPr/w:lang"/>
<xsl:attribute name="style:tab-stop-distance"><xsl:value-of select="concat( number(/w:wordDocument/w:docPr/w:defaultTabStop/@w:val)div 1440 *2.54, 'cm')"/></xsl:attribute>
</xsl:element>
</style:default-style>
</xsl:if>
<style:style style:name="ColumnBreakPara" style:family="paragraph">
<style:properties fo:break-after="column"/>
</style:style>
<xsl:if test="$default_character_style">
<style:default-style style:family="text"/>
</xsl:if>
<style:style style:name="Numbering Symbols" style:family="text"/>
<style:style style:name="Bullet Symbols" style:family="text">
<style:properties style:font-name="StarSymbol" fo:font-size="9pt" style:font-name-asian="StarSymbol" style:font-size-asian="9pt" style:font-name-complex="StarSymbol" style:font-size-complex="9pt"/>
</style:style>
<xsl:if test="$default_table_style">
<style:default-style style:family="table">
<xsl:element name="style:properties">
<xsl:apply-templates select="$default_table_style/w:rPr/wx:font"/>
</xsl:element>
</style:default-style>
</xsl:if>
<!-- StarWriter has no default style family 'list'. glu -->
<xsl:apply-templates select="w:style"/>
</office:styles>
<xsl:element name="office:automatic-styles">
<style:style style:name="PageBreak" style:family="paragraph">
<style:properties fo:break-before="page"/>
</style:style>
<xsl:for-each select="/w:wordDocument/w:body//w:p">
<xsl:choose>
<xsl:when test="w:pPr">
<xsl:element name="style:style">
<xsl:attribute name="style:family">paragraph</xsl:attribute>
<xsl:attribute name="style:name">P<xsl:number from="/w:wordDocument/w:body" level="any" count="w:p[w:pPr]"/></xsl:attribute>
<xsl:if test="w:pPr/w:pStyle">
<xsl:attribute name="style:parent-style-name"><xsl:value-of select="w:pPr/w:pStyle/@w:val"/></xsl:attribute>
</xsl:if>
<!-- We don't want to change the page style if there are columns being created. The Columns will be handled by using in-line sections.-->
<xsl:if test="not(ancestor::wx:sect/descendant::w:sectPr/w:cols[@w:num > 1])">
<xsl:variable name="section-property-number">
<xsl:number count="wx:sect" from="/w:wordDocument/w:body" level="any"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="generate-id(ancestor::wx:sect/descendant::w:p[1]) = generate-id(.)">
<xsl:attribute name="style:master-page-name"><xsl:value-of select="concat('Standard', $section-property-number)"/></xsl:attribute>
</xsl:when>
<xsl:when test="descendant::w:br[@w:type = 'page'] and following::w:sectPr">
<xsl:attribute name="style:master-page-name"><xsl:value-of select="concat('Standard', $section-property-number)"/></xsl:attribute>
</xsl:when>
</xsl:choose>
</xsl:if>
<xsl:element name="style:properties">
<xsl:apply-templates select="w:rPr/*"/>
<xsl:apply-templates select="w:pPr/*"/>
<xsl:call-template name="paragraph-properties"/>
</xsl:element>
</xsl:element>
</xsl:when>
<xsl:when test="generate-id(ancestor::wx:sect/descendant::w:p[1]) = generate-id(.)">
<xsl:element name="style:style">
<xsl:attribute name="style:family">paragraph</xsl:attribute>
<xsl:attribute name="style:name">P<xsl:number from="/w:wordDocument/w:body" level="any" count="w:pPr"/>_1</xsl:attribute>
<xsl:attribute name="style:master-page-name">Standard<xsl:number count="wx:sect" from="/w:wordDocument/w:body" level="any"/></xsl:attribute>
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:for-each select="/w:wordDocument/w:body//w:rPr">
<xsl:element name="style:style">
<xsl:attribute name="style:name">T<xsl:value-of select="count(preceding::w:rPr)"/></xsl:attribute>
<xsl:if test="w:rStyle">
<xsl:attribute name="style:parent-style-name"><xsl:value-of select="w:rStyle/@w:val"/></xsl:attribute>
</xsl:if>
<xsl:choose>
<xsl:when test="ancestor::w:pPr">
<xsl:attribute name="style:family">paragraph</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="style:family">text</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:element name="style:properties">
<xsl:apply-templates select="*"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="/w:wordDocument/w:body//w:tblPr">
<xsl:element name="style:style">
<xsl:attribute name="style:name">Table<xsl:value-of select="count(preceding::w:tblPr)"/></xsl:attribute>
<xsl:attribute name="style:family">table</xsl:attribute>
<xsl:if test="w:tblStyle/@w:val">
<xsl:attribute name="style:parent-style-name"><xsl:value-of select="w:tblStyle/@w:val"/></xsl:attribute>
</xsl:if>
<xsl:element name="style:properties">
<xsl:choose>
<xsl:when test="w:jc/@w:val = 'left' or w:jc/@w:val = 'center' or w:jc/@w:val = 'right'">
<xsl:attribute name="table:align"><xsl:value-of select="w:jc/@w:val"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="table:align">margins</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="w:bidiVisual">
<xsl:attribute name="style:writing-mode">rl-tb</xsl:attribute>
</xsl:if>
<!-- Setting table margins using cell padding-->
<xsl:if test="w:tblStyle/@w:val">
<xsl:variable name="rootStyle" select="w:tblStyle/@w:val"/>
<xsl:variable name="rootStyleNode" select="/w:wordDocument/w:styles/w:style[@w:styleId = $rootStyle]"/>
<xsl:variable name="paddingleft">
<xsl:value-of select="$rootStyleNode/w:tblPr/w:tblCellMar/w:left/@w:w"/>
</xsl:variable>
<xsl:variable name="paddingright">
<xsl:value-of select="$rootStyleNode/w:tblPr/w:tblCellMar/w:right/@w:w"/>
</xsl:variable>
<xsl:variable name="paddingtop">
<xsl:value-of select="$rootStyleNode/w:tblPr/w:tblCellMar/w:top/@w:w"/>
</xsl:variable>
<xsl:variable name="paddingbottom">
<xsl:value-of select="$rootStyleNode/w:tblPr/w:tblCellMar/w:bottom/@w:w"/>
</xsl:variable>
<xsl:if test="$rootStyleNode/w:tblPr/w:tblCellMar/w:left">
<xsl:attribute name="fo:margin-left">-<xsl:value-of select="(number($paddingleft) div 1440) *2.54"/>cm</xsl:attribute>
</xsl:if>
<!--
<xsl:if test="$rootStyleNode/w:tblPr/w:tblCellMar/w:right">
<xsl:attribute name="fo:margin-right">-<xsl:value-of select="(number($paddingright) div 1440) *2.54"/>cm</xsl:attribute>
</xsl:if>
-->
</xsl:if>
<xsl:choose>
<xsl:when test="w:tblW/@w:type ='pct'">
<xsl:variable name="sectPr" select="/descendant::wx:sect/w:sectPr"/>
<xsl:variable name="pageSize" select="number($sectPr/w:pgSz/@w:w)"/>
<xsl:variable name="pageLeftMar" select="number($sectPr/w:pgMar/@w:left)"/>
<xsl:variable name="pageRightMar" select="number($sectPr/w:pgMar/@w:right)"/>
<xsl:attribute name="style:width"><xsl:value-of select="concat( (( (number($sectPr/w:pgSz/@w:w) - number($pageLeftMar + $pageRightMar) +(113 *2))div 1440)*2.54)*(number(w:tblW/@w:w) div 5000), 'cm')"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="colwidth" select="parent::w:tbl"/>
<xsl:variable name="gridcols" select="$colwidth/w:tblGrid/w:gridCol"/>
<xsl:variable name="tblsize" select="sum($gridcols/@w:w)"/>
<xsl:if test="not($tblsize='0')">
<xsl:choose>
<xsl:when test="w:tblInd">
<xsl:attribute name="style:width"><xsl:value-of select="concat( (number($tblsize - w:tblInd/@w:w) div 1440)*2.54, 'cm')"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="style:width"><xsl:value-of select="concat( (number($tblsize ) div 1440)*2.54, 'cm')"/></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<!-- If previous w:p has a page break, the table must have the page break attribute applied to it -->
<!-- May need this for tables starting on new pages-->
<!-- <xsl:if test="parent::w:tbl/preceding-sibling::w:p[1][descendant::w:br/@w:type='page']">
<xsl:attribute name="fo:break-before">page</xsl:attribute></xsl:if> -->
</xsl:otherwise>
</xsl:choose>
<!-- initial values for tables-->
<xsl:apply-templates/>
</xsl:element>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="/w:wordDocument/w:body//w:gridCol ">
<xsl:element name="style:style">
<xsl:attribute name="style:family">table-column</xsl:attribute>
<xsl:attribute name="style:name">TColumn<xsl:value-of select="count(preceding::w:gridCol)"/></xsl:attribute>
<xsl:variable name="tableRoot" select="ancestor::w:tbl"/>
<xsl:element name="style:properties">
<xsl:choose>
<xsl:when test="$tableRoot/w:tblPr/w:tblW/@w:type = 'pct'">
<xsl:variable name="pageWidth" select="number(ancestor::wx:sect/w:sectPr/w:pgSz/@w:w)"/>
<xsl:variable name="pageLeftMar" select="number(ancestor::wx:sect/w:sectPr/w:pgMar/@w:left)"/>
<xsl:variable name="pageRightMar" select="number(ancestor::wx:sect/w:sectPr/w:pgMar/@w:right)"/>
<xsl:variable name="pctTotal" select="$tableRoot/w:tblPr/w:tblW/@w:w"/>
<xsl:variable name="prevCols" select="count(preceding-sibling::w:gridCol)"/>
<xsl:variable name="relSize" select="$tableRoot/w:tr[1]/w:tc[$prevCols+1]/w:tcPr/w:tcW/@w:w"/>
<xsl:attribute name="style:column-width"><xsl:value-of select="concat( (number(($relSize div $pctTotal) * ($pageWidth - ($pageLeftMar + $pageRightMar))) div 1440) *2.54, 'cm')"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="style:column-width"><xsl:value-of select="concat( (number(@w:w) div 1440) *2.54, 'cm')"/></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="/w:wordDocument/w:body//w:tcPr">
<style:style>
<xsl:attribute name="style:name">TCell<xsl:value-of select="count(preceding::w:tcPr)"/></xsl:attribute>
<xsl:attribute name="style:family">table-cell</xsl:attribute>
<xsl:element name="style:properties">
<xsl:if test="ancestor::w:tbl/w:tblPr/w:tblStyle/@w:val">
<xsl:variable name="rootStyle" select="ancestor::w:tbl/w:tblPr/w:tblStyle/@w:val"/>
<xsl:variable name="rootStyleNode" select="/descendant::w:style[@w:styleId = $rootStyle]"/>
<xsl:if test="$rootStyleNode/w:tcPr/w:shd/@wx:bgcolor">
<xsl:attribute name="fo:background-color">#<xsl:value-of select="$rootStyleNode/w:tcPr/w:shd/@wx:bgcolor"/></xsl:attribute>
</xsl:if>
<xsl:variable name="tblpropsright" select="$rootStyleNode/w:tblPr/w:tblCellMar/w:right"/>
<xsl:variable name="tblpropsleft" select="$rootStyleNode/w:tblPr/w:tblCellMar/w:left"/>
<xsl:variable name="tblpropstop" select="$rootStyleNode/w:tblPr/w:tblCellMar/w:top"/>
<xsl:variable name="tblpropsbottom" select="$rootStyleNode/w:tblPr/w:tblCellMar/w:bottom"/>
<xsl:variable name="paddingright">
<xsl:value-of select="$tblpropsright/@w:w"/>
</xsl:variable>
<xsl:variable name="paddingleft">
<xsl:value-of select="$tblpropsleft/@w:w"/>
</xsl:variable>
<xsl:variable name="paddingtop">
<xsl:value-of select="$tblpropstop/@w:w"/>
</xsl:variable>
<xsl:variable name="paddingbottom">
<xsl:value-of select="$tblpropsbottom/@w:w"/>
</xsl:variable>
<xsl:if test="$rootStyleNode/w:tblPr/w:tblCellMar/w:left">
<xsl:attribute name="fo:padding-left"><xsl:value-of select="(number($paddingleft) div 1440) *2.54"/>cm</xsl:attribute>
</xsl:if>
<xsl:if test="$rootStyleNode/w:tblPr/w:tblCellMar/w:right">
<xsl:attribute name="fo:padding-right"><xsl:value-of select="(number($paddingright) div 1440) *2.54"/>cm</xsl:attribute>
</xsl:if>
<xsl:if test="$rootStyleNode/w:tblPr/w:tblCellMar/w:top">
<xsl:attribute name="fo:padding-top"><xsl:value-of select="(number($paddingtop) div 1440) *2.54"/>cm</xsl:attribute>
</xsl:if>
<xsl:if test="$rootStyleNode/w:tblPr/w:tblCellMar/w:bottom">
<xsl:attribute name="fo:padding-bottom"><xsl:value-of select="(number($paddingbottom) div 1440) *2.54"/>cm</xsl:attribute>
</xsl:if>
</xsl:if>
<xsl:variable name="cellbefore">
<xsl:value-of select="count(ancestor::w:tc/preceding-sibling::w:tc)"/>
</xsl:variable>
<xsl:variable name="cellafter">
<xsl:value-of select="count(ancestor::w:tc/following-sibling::w:tc)"/>
</xsl:variable>
<xsl:variable name="rowbefore">
<xsl:value-of select="count(ancestor::w:tr/preceding-sibling::w:tr)"/>
</xsl:variable>
<xsl:variable name="table" select="ancestor::w:tbl/w:tblPr"/>
<xsl:choose>
<xsl:when test="$table/w:tblBorders">
<xsl:variable name="Borders" select="$table/w:tblBorders"/>
<xsl:attribute name="fo:border-top"><xsl:choose><xsl:when test="number($rowbefore) > 0"><xsl:text>none</xsl:text></xsl:when><xsl:otherwise><xsl:value-of select="(number($Borders/w:top/@wx:bdrwidth)div 1440)*2.54"/><xsl:text>cm </xsl:text></xsl:otherwise></xsl:choose><xsl:if test="not(number($rowbefore) > 0)"><xsl:choose><xsl:when test="$Borders/w:top/@w:color ='auto'"><xsl:text>solid #000000</xsl:text></xsl:when><xsl:otherwise><xsl:text>solid #</xsl:text><xsl:value-of select="$Borders/w:top/@w:color"/></xsl:otherwise></xsl:choose></xsl:if></xsl:attribute>
<xsl:attribute name="fo:border-bottom"><xsl:value-of select="(number($Borders/w:bottom/@wx:bdrwidth)div 1440)*2.54"/><xsl:text>cm </xsl:text><xsl:choose><xsl:when test="$Borders/w:bottom/@w:color ='auto'"><xsl:text>solid #000000</xsl:text></xsl:when><xsl:otherwise><xsl:text>solid #</xsl:text><xsl:value-of select="$Borders/w:bottom/@w:color"/></xsl:otherwise></xsl:choose></xsl:attribute>
<xsl:attribute name="text:aidan"><xsl:value-of select="$cellafter"/></xsl:attribute>
<xsl:attribute name="fo:border-right"><xsl:choose><xsl:when test="number($cellafter) > 0"><xsl:text>none</xsl:text></xsl:when><xsl:otherwise><xsl:value-of select="(number($Borders/w:right/@wx:bdrwidth)div 1440)*2.54"/><xsl:text>cm </xsl:text></xsl:otherwise></xsl:choose><xsl:if test="not(number($cellafter) > 0)"><xsl:choose><xsl:when test="$Borders/w:right/@w:color ='auto'"><xsl:text>solid #000000</xsl:text></xsl:when><xsl:otherwise><xsl:text>solid #</xsl:text><xsl:value-of select="$Borders/w:right/@w:color"/></xsl:otherwise></xsl:choose></xsl:if></xsl:attribute>
<xsl:attribute name="fo:border-left"><xsl:value-of select="(number($Borders/w:left/@wx:bdrwidth)div 1440)*2.54"/><xsl:text>cm </xsl:text><xsl:choose><xsl:when test="$Borders/w:left/@w:color ='auto'"><xsl:text>solid #000000</xsl:text></xsl:when><xsl:otherwise><xsl:text>solid #</xsl:text><xsl:value-of select="$Borders/w:left/@w:color"/></xsl:otherwise></xsl:choose></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="number($cellafter) > 0">
<xsl:attribute name="fo:border-right">none</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="fo:border-right">0.002cm solid #000000</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:attribute name="fo:border-left">0.002cm solid #000000</xsl:attribute>
<xsl:choose>
<xsl:when test="number($rowbefore) > 0">
<xsl:attribute name="fo:border-top">none</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="fo:border-top">0.002cm solid #000000</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:attribute name="fo:border-bottom">0.002cm solid #000000</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:attribute name="fo:vertical-align">top</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</style:style>
</xsl:for-each>
<xsl:for-each select="/w:wordDocument/w:body//w:listPr">
<xsl:variable name="currlistid" select="w:ilfo/@w:val"/>
<xsl:variable name="currlist" select="."/>
<xsl:variable name="rootlistid" select="/w:wordDocument/w:lists/w:list[@w:ilfo=$currlistid]/w:ilst/@w:val"/>
<xsl:variable name="rootlist" select="/w:wordDocument/w:lists/w:listDef[@w:listDefId =$rootlistid ]"/>
<xsl:if test="not(ancestor::w:p/preceding-sibling::w:p[1]/w:pPr/w:listPr/w:ilfo/@w:val= $currlistid) ">
<xsl:element name="text:list-style">
<!--<xsl:attribute name="style:name">List<xsl:number from="w:wordDocument/w:body" level="any"/></xsl:attribute>-->
<xsl:attribute name="style:name">List<xsl:value-of select="count(preceding::w:listPr)"/></xsl:attribute>
<xsl:for-each select="$rootlist/w:lvl">
<xsl:variable name="listtype" select="w:nfc/@w:val"/>
<xsl:choose>
<xsl:when test="$listtype =23">
<!-- nfcBullet: Bullet character. glu -->
<xsl:element name="text:list-level-style-bullet">
<xsl:call-template name="list-styles-common">
<xsl:with-param name="listtype" select="$listtype"/>
<xsl:with-param name="rootlist" select="$rootlist"/>
<xsl:with-param name="currlist" select="$currlist"/>
</xsl:call-template>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<!-- all kinds of numbering characters. glu :( -->
<xsl:element name="text:list-level-style-number">
<xsl:call-template name="list-styles-common">
<xsl:with-param name="listtype" select="$listtype"/>
<xsl:with-param name="rootlist" select="$rootlist"/>
<xsl:with-param name="currlist" select="$currlist"/>
</xsl:call-template>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:element>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="/w:wordDocument/w:body//w:sectPr">
<xsl:element name="style:page-master">
<xsl:attribute name="style:name">pm<xsl:number from="/w:wordDocument/w:body" level="any"/></xsl:attribute>
<xsl:element name="style:properties">
<xsl:attribute name="fo:page-width"><xsl:value-of select="(number(w:pgSz/@w:w) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="fo:page-height"><xsl:value-of select="(number(w:pgSz/@w:h) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:choose>
<xsl:when test="/w:wordDocument/w:docPr/w:gutterAtTop">
<xsl:attribute name="fo:margin-top"><xsl:value-of select="(number(w:pgMar/@w:top + w:pgMar/@w:gutter) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="fo:margin-left"><xsl:value-of select="(number(w:pgMar/@w:left) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="fo:margin-right"><xsl:value-of select="(number(w:pgMar/@w:right) div 1440)*2.54"/>cm</xsl:attribute>
</xsl:when>
<xsl:when test="w:rtlGutter">
<xsl:attribute name="fo:margin-top"><xsl:value-of select="(number(w:pgMar/@w:top) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="fo:margin-left"><xsl:value-of select="(number(w:pgMar/@w:left) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="fo:margin-right"><xsl:value-of select="(number(w:pgMar/@w:right + w:pgMar/@w:gutter) div 1440)*2.54"/>cm</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="fo:margin-top"><xsl:value-of select="(number(w:pgMar/@w:top) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="fo:margin-left"><xsl:value-of select="(number(w:pgMar/@w:left + w:pgMar/@w:gutter) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="fo:margin-right"><xsl:value-of select="(number(w:pgMar/@w:right) div 1440)*2.54"/>cm</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:attribute name="fo:margin-bottom"><xsl:value-of select="(number(w:pgMar/@w:bottom) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="style:footnote-max-height"><xsl:value-of select="(number(w:pgMar/@w:footer) div 1440)*2.54"/></xsl:attribute>
<xsl:if test="w:pgSz/@w:orient">
<xsl:attribute name="style:print-orientation"><xsl:value-of select="w:pgSz/@w:orient"/></xsl:attribute>
</xsl:if>
</xsl:element>
</xsl:element>
<xsl:if test="w:cols/@w:num">
<!-- create sction property-->
<xsl:element name="style:style">
<xsl:attribute name="style:name">sect<xsl:value-of select="count(preceding::w:sectPr[w:cols/@w:num])"/></xsl:attribute>
<xsl:attribute name="style:family">section</xsl:attribute>
<xsl:element name="style:properties">
<xsl:element name="style:columns">
<xsl:attribute name="fo:column-count"><xsl:value-of select="number(w:cols/@w:num)"/></xsl:attribute>
<xsl:attribute name="fo:column-gap"><xsl:value-of select="(number(w:cols/@w:space)div 1440)*2.54"/>cm</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:element>
<office:master-styles>
<xsl:for-each select="/w:wordDocument/w:body//w:sectPr">
<!-- style:page-master style:style-->
<xsl:element name="style:master-page">
<xsl:variable name="master-page-name">
<xsl:number count="w:sectPr" from="/w:wordDocument/w:body" level="any"/>
</xsl:variable>
<xsl:attribute name="style:name"><xsl:value-of select="concat('Standard',$master-page-name)"/></xsl:attribute>
<xsl:attribute name="style:page-master-name"><xsl:value-of select="concat('pm', $master-page-name)"/></xsl:attribute>
<xsl:if test="following::w:sectPr">
<xsl:attribute name="style:next-style-name">Standard<xsl:value-of select="$master-page-name +1"/></xsl:attribute>
</xsl:if>
<!-- Headers and footers-->
<xsl:element name="style:header-style">
<xsl:element name="style:properties">
<xsl:attribute name="fo:min-height"><xsl:value-of select="(number(w:pgMar/@w:header)div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="fo:margin-bottom">0.792cm</xsl:attribute>
<xsl:attribute name="style:dynamic-spacing">true</xsl:attribute>
</xsl:element>
</xsl:element>
<xsl:element name="style:footer-style">
<xsl:element name="style:properties">
<xsl:attribute name="fo:min-height"><xsl:value-of select="(number(w:pgMar/@w:footer)div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="fo:margin-top">0.792cm</xsl:attribute>
<xsl:attribute name="style:dynamic-spacing">true</xsl:attribute>
</xsl:element>
</xsl:element>
<xsl:if test="w:hdr and not(w:titlePg)">
<xsl:element name="style:header">
<xsl:apply-templates select="w:hdr[@w:type='odd']/*"/>
</xsl:element>
<xsl:element name="style:header-left">
<xsl:apply-templates select="w:hdr[@w:type='even']/*"/>
</xsl:element>
</xsl:if>
<xsl:if test="w:ftr and not(w:titlePg)">
<xsl:element name="style:footer">
<xsl:apply-templates select="w:ftr[@w:type='odd']/*"/>
</xsl:element>
<xsl:element name="style:footer-left">
<xsl:apply-templates select="w:ftr[@w:type='even']/*"/>
</xsl:element>
</xsl:if>
</xsl:element>
</xsl:for-each>
</office:master-styles>
</xsl:template>
<xsl:template match="w:style">
<xsl:element name="style:style">
<xsl:attribute name="style:name"><xsl:value-of select="@w:styleId"/></xsl:attribute>
<xsl:if test="w:basedOn">
<xsl:attribute name="style:parent-style-name"><xsl:value-of select="w:basedOn/@w:val"/></xsl:attribute>
</xsl:if>
<xsl:if test="w:next">
<xsl:attribute name="style:next-style-name"><xsl:value-of select="w:next/@w:val"/></xsl:attribute>
</xsl:if>
<xsl:choose>
<xsl:when test="@w:type = 'character' ">
<xsl:attribute name="style:family">text</xsl:attribute>
</xsl:when>
<xsl:when test="@w:type = 'list' ">
<xsl:attribute name="style:family">text</xsl:attribute>
</xsl:when>
<!-- table, paragraph are the same as in Writer . glu -->
<xsl:when test="@w:type">
<xsl:attribute name="style:family"><xsl:value-of select="@w:type"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="style:family">text</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:element name="style:properties">
<xsl:apply-templates select="w:rPr/*"/>
<xsl:apply-templates select="w:pPr/*"/>
<xsl:call-template name="paragraph-properties"/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template name="list-styles-common">
<xsl:param name="listtype"/>
<xsl:param name="rootlist"/>
<xsl:param name="currlist"/>
<xsl:variable name="currlevel" select="number(@w:ilvl)"/>
<xsl:variable name="startval" select="w:start/@w:val"/>
<xsl:attribute name="text:level"><xsl:value-of select="$currlevel+1"/></xsl:attribute>
<xsl:choose>
<xsl:when test="$listtype = 23">
<!-- bullet character. glu -->
<xsl:attribute name="text:style-name">Bullet Symbols</xsl:attribute>
<xsl:attribute name="text:bullet-char"><xsl:value-of select="w:lvlText/@w:val"/></xsl:attribute>
</xsl:when>
<xsl:when test="($listtype > 0) and ($listtype < 6)">
<xsl:attribute name="text:style-name">Numbering Symbols</xsl:attribute>
<xsl:if test="$startval">
<xsl:attribute name="text:start-value"><xsl:value-of select="$startval"/></xsl:attribute>
</xsl:if>
<xsl:attribute name="text:display-levels"><xsl:value-of select="string-length(w:lvlText/@w:val) - string-length(translate(w:lvlText/@w:val,'%','') )"/></xsl:attribute>
<xsl:choose>
<xsl:when test="$listtype = 1">
<!-- nfcUCRoman: Uppercase roman -->
<xsl:attribute name="style:num-format">I</xsl:attribute>
</xsl:when>
<xsl:when test="$listtype = 2">
<!-- nfcLCRoman: Lowercase roman -->
<xsl:attribute name="style:num-format">i</xsl:attribute>
</xsl:when>
<xsl:when test="$listtype = 3">
<!-- nfcUCLetter: Uppercase alpha -->
<xsl:attribute name="style:num-format">A</xsl:attribute>
</xsl:when>
<xsl:when test="$listtype = 4">
<!-- nfcLCLetter: Lowercase alpah -->
<xsl:attribute name="style:num-format">a</xsl:attribute>
</xsl:when>
<xsl:when test="$listtype = 5">
<!-- nfcOrdinal: Ordinal -->
<xsl:attribute name="style:num-format">1</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:attribute name="style:num-suffix">.</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="text:style-name">Numbering Symbols</xsl:attribute>
<xsl:if test="$startval">
<xsl:attribute name="text:start-value"><xsl:value-of select="$startval"/></xsl:attribute>
</xsl:if>
<xsl:attribute name="text:display-levels"><xsl:value-of select="string-length(w:lvlText/@w:val) - string-length(translate(w:lvlText/@w:val,'%','') )"/></xsl:attribute>
<!-- can't support so many list types (totally 56) as in Word 2003. :( glu -->
<xsl:attribute name="style:num-format">1</xsl:attribute>
<xsl:attribute name="style:num-suffix">.</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:element name="style:properties">
<!-- Find the node that corresponds to the level being processed. We can use this to determine the indentation to be used-->
<xsl:variable name="currNode" select="/w:wordDocument/w:body//w:listPr[w:ilvl/@w:val = $currlevel][w:ilfo/@w:val = $currlist/w:ilfo/@w:val]"/>
<xsl:choose>
<xsl:when test="($currNode/wx:t/@wx:wTabBefore ) and ($currNode/wx:t/@wx:wTabAfter ) ">
<xsl:attribute name="text:space-before"><xsl:value-of select="(number($currNode/wx:t/@wx:wTabBefore)div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="text:min-label-distance"><xsl:value-of select="(number($currNode/wx:t/@wx:wTabAfter)div 1440)*2.54"/>cm</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="text:space-before"><xsl:value-of select="((number(w:pPr/w:ind/@w:left) div 1440)*2.54) "/>cm</xsl:attribute>
<xsl:attribute name="text:min-label-distance"><xsl:value-of select="(number($currlist/wx:t/@wx:wTabAfter) div 1440)*2.54"/>cm</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="w:rPr/w:rFonts">
<xsl:if test="w:rPr/w:rFonts/@w:ascii">
<xsl:attribute name="style:font-name"><xsl:value-of select="w:rPr/w:rFonts/@w:ascii"/></xsl:attribute>
</xsl:if>
<xsl:if test="w:rPr/w:rFonts/@w:fareast">
<xsl:attribute name="style:font-name-asian"><xsl:value-of select="w:rPr/w:rFonts/@w:fareast"/></xsl:attribute>
</xsl:if>
<xsl:if test="w:rPr/w:rFonts/@w:cs">
<xsl:attribute name="style:font-name-complex"><xsl:value-of select="w:rPr/w:rFonts/@w:cs"/></xsl:attribute>
</xsl:if>
</xsl:if>
</xsl:element>
</xsl:template>
<xsl:template match="w:body">
<xsl:element name="office:body">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<!-- avoid listPr in textbox. :( glu -->
<xsl:template match="w:p[w:pPr/w:listPr[w:ilvl and w:ilfo]]">
<xsl:call-template name="genlist"/>
</xsl:template>
<xsl:template match="w:hlink">
<xsl:element name="text:a">
<xsl:attribute name="xlink:type">simple</xsl:attribute>
<xsl:choose>
<xsl:when test="@w:dest and @w:bookmark">
<xsl:attribute name="xlink:href"><xsl:value-of select="concat( @w:dest, concat('#', @w:bookmark) )"/></xsl:attribute>
</xsl:when>
<xsl:when test="@w:dest">
<xsl:attribute name="xlink:href"><xsl:value-of select="@w:dest"/></xsl:attribute>
</xsl:when>
<xsl:when test="@w:bookmark">
<xsl:attribute name="xlink:href"><xsl:value-of select="concat('#', @w:bookmark)"/></xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:if test="@w:target">
<xsl:attribute name="office:target-frame-name"><xsl:value-of select="@w:target"/></xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="w:p">
<xsl:choose>
<!-- because word treats page breaks as separate tags, we must split some paragraphs up so that we can
give the sub para a fo:break-before ="page" attribute -->
<xsl:when test="w:r[w:br/@w:type='page'] ">
<xsl:call-template name="processPageBreaks"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="commonParagraph"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="processPageBreaks">
<xsl:variable name="pageBreak" select="w:r[w:br/@w:type='page']"/>
<xsl:call-template name="createSubParagraph">
<xsl:with-param name="list" select="$pageBreak[1]/preceding-sibling::w:r"/>
<xsl:with-param name="pageBreak"/>
<xsl:with-param name="needsPageBreak">false</xsl:with-param>
</xsl:call-template>
<xsl:for-each select="$pageBreak">
<xsl:call-template name="createSubParagraph">
<xsl:with-param name="list" select="./following-sibling::w:r[preceding::w:r/w:br = '.']"/>
<xsl:with-param name="pageBreak" select="."/>
<xsl:with-param name="needsPageBreak">true</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="createSubParagraph">
<xsl:param name="list"/>
<xsl:param name="pageBreak"/>
<xsl:param name="needsPageBreak"/>
<xsl:if test="(count($list) > 0) or ($needsPageBreak ='true') ">
<xsl:element name="text:p">
<xsl:choose>
<xsl:when test="$needsPageBreak = 'true'">
<xsl:choose>
<xsl:when test="ancestor::w:p/w:pPr">
<xsl:attribute name="text:style-name">P<xsl:number from="/w:wordDocument/w:body" level="any" count="w:pPr"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="text:style-name">PageBreak</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose>
<xsl:if test="$pageBreak">
<xsl:apply-templates select="$pageBreak"/>
</xsl:if>
<xsl:apply-templates select="$list"/>
</xsl:element>
</xsl:if>
</xsl:template>
<!-- strange enough, WordML allows bookmarks out of w:p, but this isn't supported by StarWriter. To be patched. :( glu -->
<xsl:template match="aml:annotation[@w:type = 'Word.Bookmark.Start']">
<text:bookmark-start text:name="{@w:name}"/>
</xsl:template>
<xsl:template match="aml:annotation[@w:type = 'Word.Bookmark.End']">
<xsl:variable name="id" select="@aml:id"/>
<text:bookmark-end text:name="{preceding::aml:annotation[@aml:id = $id]/@w:name}"/>
</xsl:template>
<xsl:template name="commonParagraph">
<!-- Heading 1 to 9 or normal paragraph-->
<xsl:choose>
<xsl:when test="starts-with(w:pPr/w:pStyle/@w:val, 'Heading')">
<xsl:variable name="styleid" select="w:pPr/w:pStyle/@w:val"/>
<xsl:element name="text:h">
<xsl:variable name="outlinelevel" select="number(/w:wordDocument/w:styles/w:style[@w:styleId = $styleid]/w:pPr/w:outlineLvl/@w:val)+1"/>
<xsl:if test="$outlinelevel">
<xsl:attribute name="text:level"><xsl:value-of select="$outlinelevel"/></xsl:attribute>
</xsl:if>
<xsl:call-template name="commonParagraphAttributes"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
<xsl:when test="w:r/w:instrText and contains(w:r/w:instrText , 'HYPERLINK')">
<!-- handling another type of Hyperlink address in w:body.cp tom chen. Acutally they're from Field features, a complex one. glu -->
<xsl:variable name="hyper-str" select="normalize-space(w:r/w:instrText)"/>
<xsl:variable name="hyper-dest" select="substring-before( substring($hyper-str, 12), '"')"/>
<xsl:variable name="hyper-bookmark">
<xsl:choose>
<xsl:when test="contains( $hyper-str, ' \l ')">
<xsl:value-of select="concat( '#', substring-before( substring-after( substring-after( $hyper-str, ' \l '), '"'), '"') )"/>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:element name="text:p">
<xsl:element name="text:a">
<xsl:attribute name="xlink:type">simple</xsl:attribute>
<xsl:attribute name="xlink:href"><xsl:value-of select="concat( $hyper-dest, $hyper-bookmark)"/></xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="text:p">
<xsl:call-template name="commonParagraphAttributes"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="commonParagraphAttributes">
<xsl:choose>
<xsl:when test="w:pPr">
<!-- count="w:pPr" doesn't work well, don't know the reason actually. glu :( -->
<xsl:attribute name="text:style-name">P<xsl:number from="/w:wordDocument/w:body" level="any" count="w:p[w:pPr]"/></xsl:attribute>
</xsl:when>
<xsl:when test="generate-id(ancestor::wx:sect/descendant::w:p[1]) = generate-id(.)">
<!-- create the leading paragraph style name in one section for master page style application, glu -->
<xsl:variable name="paragraph-number">
<xsl:number from="/w:wordDocument/w:body" level="any" count="w:p[w:pPr]"/>
</xsl:variable>
<xsl:attribute name="text:style-name">P<xsl:value-of select="number($paragraph-number)"/>_1</xsl:attribute>
</xsl:when>
<xsl:when test="not(w:pPr) and (descendant::w:br[@w:type = 'column'] or ancestor::wx:sect/descendant::w:sectPr[w:cols/@w:num > 1])">
<xsl:attribute name="text:style-name">ColumnBreakPara</xsl:attribute>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="w:pPr"/>
<xsl:template match="w:rPr"/>
<xsl:template match="wx:sub-section">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="w:t">
<xsl:choose>
<xsl:when test="string(.) = ' ' ">
<xsl:element name="text:s"/>
</xsl:when>
<xsl:when test="contains(.,' ')">
<xsl:call-template name="replace-spaces">
<xsl:with-param name="curr-string" select="."/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="replace-spaces">
<xsl:param name="curr-string"/>
<xsl:if test="contains($curr-string,' ')">
<xsl:value-of select="substring-before($curr-string,' ')"/>
<text:s text:c="2"/>
<xsl:variable name="next-string" select="substring-after($curr-string,' ')"/>
<xsl:choose>
<xsl:when test="contains($next-string, ' ')">
<xsl:call-template name="replace-spaces">
<xsl:with-param name="curr-string" select="$next-string"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$next-string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
<xsl:template match="w:tab[parent::w:r]">
<xsl:element name="text:tab-stop"/>
</xsl:template>
<xsl:template match="w:hdr">
<!-- empty template to ignore inline processing of header. These are handled as part of the master style in styles.xsl -->
</xsl:template>
<xsl:template match="w:ftr">
<!-- empty template to ignore inline processing of header. These are handled as part of the master style in styles.xsl -->
</xsl:template>
<!-- WordML contains multiple w:t within one w:r, so in Star Writer text:span should correspond to w:t glu -->
<xsl:template match="w:r">
<xsl:if test="w:br[@w:type='text-wrapping' or not(@w:type)]">
<xsl:element name="text:line-break"/>
</xsl:if>
<xsl:choose>
<xsl:when test="w:rPr/w:vanish">
<text:hidden-text text:is-hidden="true" text:condition="" text:string-value="{.}"/>
</xsl:when>
<xsl:when test="aml:annotation/@w:type = 'Word.Comment'">
<office:annotation office:author="{aml:annotation/@aml:author}" office:create-date="{substring(aml:annotation/@aml:createdate,1,10)}" office:display="true">
<xsl:apply-templates/>
</office:annotation>
</xsl:when>
<xsl:when test="(preceding-sibling::w:r) or (w:rPr)">
<xsl:element name="text:span">
<xsl:choose>
<xsl:when test="w:rPr/w:rStyle">
<xsl:attribute name="text:style-name"><xsl:value-of select="w:rPr/w:rStyle/@w:val"/></xsl:attribute>
</xsl:when>
<xsl:when test="w:rPr">
<xsl:attribute name="text:style-name">T<xsl:value-of select="count(preceding::w:rPr)"/></xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--
<xsl:template match="w:br[@w:type='text-wrapping' or not(@w:type)]">
<text:line-break/>
</xsl:template>
<xsl:template match="aml:annotation[@w:type = 'Word.Comment']">
<office:annotation office:author="{@aml:author}" office:create-date="{substring(@aml:createdate,1,10)}" office:display="true">
<xsl:apply-templates/>
</office:annotation>
</xsl:template>
<xsl:template match="w:rPr/w:vanish">
<text:hidden-text text:is-hidden="true" text:condition="" text:string-value="{../..}"/>
</xsl:template>
<xsl:template match="w:t">
<xsl:element name="text:span">
<xsl:if test="preceding-sibling::w:rPr">
<xsl:attribute name="text:style-name">T<xsl:value-of select="count(preceding::w:rPr)"/></xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
-->
<xsl:template match="node()[name() = 'w:vertAlign' or name() = 'w:position']">
<xsl:variable name="height">
<xsl:choose>
<xsl:when test="parent::w:rPr/w:vertAlign[@w:val = 'superscript' or @w:val = 'subscript']">58%</xsl:when>
<xsl:otherwise>100%</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="position">
<xsl:choose>
<xsl:when test="parent::w:rPr/w:position">
<!-- con't get font height easily, so just set w:val as percentage. glu -->
<xsl:value-of select="concat( parent::w:rPr/w:position/@w:val, '%')"/>
</xsl:when>
<xsl:when test="parent::w:rPr/w:vertAlign[@w:val = 'superscript']">super</xsl:when>
<xsl:when test="parent::w:rPr/w:vertAlign[@w:val = 'subscript']">sub</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:attribute name="style:text-position"><xsl:value-of select="concat(concat( $position, ' '), $height)"/></xsl:attribute>
</xsl:template>
<xsl:template match="w:sz">
<xsl:attribute name="fo:font-size"><xsl:value-of select="concat( number(@w:val) div 2, 'pt')"/></xsl:attribute>
<xsl:attribute name="fo:font-size-asian"><xsl:value-of select="concat( number(@w:val) div 2, 'pt')"/></xsl:attribute>
</xsl:template>
<xsl:template match="w:sz-cs">
<xsl:attribute name="fo:font-size-complex"><xsl:value-of select="concat( number(@w:val) div 2, 'pt')"/></xsl:attribute>
</xsl:template>
<xsl:template match="w:i">
<xsl:attribute name="fo:font-style">italic</xsl:attribute>
<xsl:attribute name="fo:font-style-asian">italic</xsl:attribute>
</xsl:template>
<xsl:template match="w:i-cs">
<xsl:attribute name="fo:font-style-complex">italic</xsl:attribute>
</xsl:template>
<xsl:template match="w:b">
<xsl:attribute name="fo:font-weight">bold</xsl:attribute>
<xsl:attribute name="fo:font-weight-asian">bold</xsl:attribute>
</xsl:template>
<xsl:template match="w:b-cs">
<xsl:attribute name="fo:font-weight-complex">bold</xsl:attribute>
</xsl:template>
<xsl:template match="w:u">
<xsl:choose>
<xsl:when test="@w:val = 'words'">
<xsl:attribute name="style:text-underline">single</xsl:attribute>
<xsl:attribute name="fo:score-spaces">false</xsl:attribute>
</xsl:when>
<xsl:when test="@w:val = 'thick'">
<xsl:attribute name="style:text-underline">bold</xsl:attribute>
</xsl:when>
<xsl:when test="@w:val = 'dotted-heavy'">
<xsl:attribute name="style:text-underline">bold-dotted</xsl:attribute>
</xsl:when>
<xsl:when test="@w:val = 'dashed-heavy'">
<xsl:attribute name="style:text-underline">bold-dash</xsl:attribute>
</xsl:when>
<xsl:when test="@w:val = 'dash-long'">
<xsl:attribute name="style:text-underline">long-dash</xsl:attribute>
</xsl:when>
<xsl:when test="@w:val = 'dash-long-heavy'">
<xsl:attribute name="style:text-underline">bold-long-dash</xsl:attribute>
</xsl:when>
<xsl:when test="@w:val = 'dash-dot-heavy'">
<xsl:attribute name="style:text-underline">bold-dot-dash</xsl:attribute>
</xsl:when>
<xsl:when test="@w:val = 'dash-dot-dot-heavy'">
<xsl:attribute name="style:text-underline">bold-dot-dot-dash</xsl:attribute>
</xsl:when>
<xsl:when test="@w:val = 'wavy-heavy'">
<xsl:attribute name="style:text-underline">bold-wave</xsl:attribute>
</xsl:when>
<xsl:when test="@w:val = 'wavy-double'">
<xsl:attribute name="style:text-underline">double-wave</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="style:text-underline"><xsl:value-of select="@w:val"/></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="@w:color and not(@w:color = 'auto')">
<xsl:attribute name="style:text-underline-color"><xsl:value-of select="concat( '#', @w:color)"/></xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template match="w:shadow">
<xsl:attribute name="style:text-shadow">1pt 1pt</xsl:attribute>
<xsl:attribute name="fo:text-shadow">1pt 1pt</xsl:attribute>
</xsl:template>
<xsl:template match="w:strike">
<xsl:attribute name="style:text-crossing-out">single-line</xsl:attribute>
</xsl:template>
<xsl:template match="w:dstrike">
<xsl:attribute name="style:text-crossing-out">double-line</xsl:attribute>
</xsl:template>
<xsl:template match="w:color[not(@w:val = 'auto')]">
<xsl:attribute name="fo:color">#<xsl:value-of select="@w:val"/></xsl:attribute>
</xsl:template>
<xsl:template match="w:smallCaps">
<xsl:attribute name="fo:font-variant">small-caps</xsl:attribute>
</xsl:template>
<xsl:template match="w:caps">
<xsl:attribute name="fo:text-transform">uppercase</xsl:attribute>
</xsl:template>
<xsl:template match="w:imprint">
<xsl:attribute name="style:font-relief">engraved</xsl:attribute>
</xsl:template>
<xsl:template match="w:emboss">
<xsl:attribute name="style:font-relief">embossed</xsl:attribute>
</xsl:template>
<xsl:template match="w:outline">
<xsl:attribute name="style:text-outline">true</xsl:attribute>
</xsl:template>
<xsl:template match="w:w[@w:val]">
<xsl:attribute name="style:text-scale"><xsl:value-of select="@w:val"/></xsl:attribute>
</xsl:template>
<xsl:template match="w:em">
<xsl:choose>
<xsl:when test="@w:val = 'comma'">
<xsl:attribute name="style:text-emphasize">accent below</xsl:attribute>
</xsl:when>
<xsl:when test="@w:val = 'under-dot'">
<xsl:attribute name="style:text-emphasize">disc below</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="style:text-emphasize"><xsl:value-of select="concat( @w:val, ' below')"/></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="w:spacing[parent::w:rPr]">
<xsl:attribute name="fo:letter-spacing"><xsl:value-of select="concat( floor(number(@w:val div 1440) * 2540) div 1000, 'cm')"/></xsl:attribute>
</xsl:template>
<xsl:template match="w:effect[@w:val = 'blink-background']">
<xsl:attribute name="style:text-blinking">true</xsl:attribute>
<xsl:attribute name="style:text-background-color">#000000</xsl:attribute>
</xsl:template>
<xsl:template match="w:lang">
<xsl:if test="@w:val">
<xsl:attribute name="fo:language"><xsl:value-of select="substring-before( @w:val, '-')"/></xsl:attribute>
<xsl:attribute name="fo:country"><xsl:value-of select="substring-after( @w:val, '-')"/></xsl:attribute>
</xsl:if>
<xsl:if test="@w:fareast">
<xsl:attribute name="fo:language-asian"><xsl:value-of select="substring-before( @w:fareast, '-')"/></xsl:attribute>
<xsl:attribute name="fo:country-asian"><xsl:value-of select="substring-after( @w:fareast, '-')"/></xsl:attribute>
</xsl:if>
<xsl:if test="@w:bidi">
<xsl:attribute name="fo:language-complex"><xsl:value-of select="substring-before( @w:bidi, '-')"/></xsl:attribute>
<xsl:attribute name="fo:country-complex"><xsl:value-of select="substring-after( @w:bidi, '-')"/></xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template match="wx:font[not(parent::w:listPr)]">
<xsl:attribute name="style:font-name"><xsl:value-of select="@wx:val"/></xsl:attribute>
<xsl:attribute name="style:font-name-asian"><xsl:value-of select="@wx:val"/></xsl:attribute>
<xsl:attribute name="style:font-name-complex"><xsl:value-of select="@wx:val"/></xsl:attribute>
</xsl:template>
<xsl:template match="wx:sect">
<!-- We handle Columns as seperate Sections to allow for different numbers of columns on the same page-->
<xsl:choose>
<xsl:when test="descendant::w:sectPr[w:cols/@w:num > 1]">
<xsl:element name="text:section">
<xsl:attribute name="text:style-name">sect<xsl:value-of select="count(preceding::w:sectPr[w:cols/@w:num >1])"/></xsl:attribute>
<xsl:attribute name="text:name">sect<xsl:value-of select="count(preceding::w:sectPr[w:cols/@w:num >1])"/></xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="paragraph-properties">
<xsl:choose>
<xsl:when test="descendant::w:ind[@w:left]">
<xsl:attribute name="fo:margin-left"><xsl:value-of select="number(((descendant::w:ind/@w:left)div 1440) *2.54)"/>cm</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="fo:margin-left">0cm</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="descendant::w:ind[@w:right]">
<xsl:attribute name="fo:margin-right"><xsl:value-of select="number(((descendant::w:ind/@w:right)div 1440) *2.54)"/>cm</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="fo:margin-right">0cm</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="descendant::w:ind[@w:first-line]">
<xsl:attribute name="fo:text-indent"><xsl:value-of select="number(((descendant::w:ind/@w:first-line)div 1440) *2.54)"/>cm</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="fo:text-indent">0cm</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="bidi"/>
<!-- line spacing-->
<xsl:if test="descendant::w:spacing">
<xsl:choose>
<xsl:when test="descendant::w:spacing/@w:line-rule='at-least'">
<xsl:attribute name="style:line-height-at-least"><xsl:value-of select="number(((descendant::w:spacing/@w:line) div 1440)*2.54)"/>cm</xsl:attribute>
</xsl:when>
<xsl:when test="descendant::w:spacing/@w:line-rule='auto'">
<xsl:attribute name="fo:line-height"><xsl:value-of select="(number((descendant::w:spacing/@w:line) div 240) * 100)"/>%</xsl:attribute>
</xsl:when>
<xsl:when test="descendant::w:spacing/@w:line-rule='exact'">
<xsl:attribute name="fo:line-height"><xsl:value-of select="number(((descendant::w:spacing/@w:line) div 1440)*2.54)"/>cm</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:if test="descendant::w:spacing/@w:before">
<xsl:attribute name="fo:margin-top"><xsl:value-of select="(number(descendant::w:spacing/@w:before) div 1440 )*2.54"/>cm</xsl:attribute>
</xsl:if>
<xsl:if test="descendant::w:spacing/@w:after">
<xsl:attribute name="fo:margin-bottom"><xsl:value-of select="(number(descendant::w:spacing/@w:after) div 1440 )*2.54"/>cm</xsl:attribute>
</xsl:if>
</xsl:if>
<xsl:if test="descendant::w:shd">
<xsl:variable name="background-color">
<xsl:choose>
<xsl:when test="string-length(descendant::w:shd/@w:fill) = 6">
<xsl:value-of select="concat('#', descendant::w:shd/@w:fill)"/>
</xsl:when>
<xsl:otherwise>#000000</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="descendant::w:shd/@w:val = 'solid'">
<xsl:attribute name="fo:background-color"><xsl:value-of select="$background-color"/></xsl:attribute>
</xsl:when>
<!-- patterns are necessary in the future. glu -->
<xsl:otherwise/>
</xsl:choose>
</xsl:if>
<!-- MS Word & Star Writer has different default font size, MS 10pt, Star 12pt. glu -->
<xsl:attribute name="style:auto-text-indent">false</xsl:attribute>
<xsl:if test="descendant::w:tabs">
<xsl:element name="style:tab-stops">
<xsl:for-each select="descendant::w:tabs/w:tab">
<xsl:element name="style:tab-stop">
<xsl:attribute name="style:position"><xsl:value-of select="(number(@w:pos)div 1440)*2.54"/>cm</xsl:attribute>
<xsl:choose>
<xsl:when test="@w:val = 'decimal'">
<xsl:attribute name="style:type">char</xsl:attribute>
<xsl:attribute name="style:char"/>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="style:type"><xsl:value-of select="@w:val"/></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:if>
</xsl:template>
<xsl:template name="bidi">
<!-- bi-directional support-->
<xsl:if test="descendant::w:bidi">
<xsl:attribute name="style:writing-mode">rl-tb</xsl:attribute>
<xsl:attribute name="fo:text-align">end</xsl:attribute>
</xsl:if>
<xsl:choose>
<xsl:when test="descendant::w:jc[@w:val = 'center']">
<xsl:attribute name="fo:text-align">center</xsl:attribute>
</xsl:when>
<xsl:when test="descendant::w:jc[@w:val = 'left']">
<xsl:choose>
<xsl:when test="descendant::w:bidi">
<xsl:attribute name="fo:text-align">end</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="fo:text-align">start</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="descendant::w:jc[@w:val = 'right']">
<xsl:choose>
<xsl:when test="descendant::w:bidi">
<xsl:attribute name="fo:text-align">start</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="fo:text-align">end</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="descendant::w:jc[@w:val = 'both']">
<xsl:attribute name="fo:text-align">justify</xsl:attribute>
<xsl:attribute name="style:justify-single-word">false</xsl:attribute>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="w:pict">
<xsl:choose>
<xsl:when test="descendant::w:binData">
<!-- Cannot load zipped Wmf file. glu <xsl:if test="not(contains(w:binData/@w:name,'.wmz'))"> -->
<xsl:element name="draw:image">
<xsl:if test="v:shape/@style">
<xsl:if test="contains( v:shape/@style, 'margin-left:')">
<xsl:attribute name="svg:x"><xsl:value-of select="concat( number(substring-before( substring-after( v:shape/@style, 'margin-left:'), 'pt'))*0.0353, 'cm')"/></xsl:attribute>
</xsl:if>
<xsl:if test="contains( v:shape/@style, 'margin-top:')">
<xsl:attribute name="svg:y"><xsl:value-of select="concat( number(substring-before( substring-after( v:shape/@style, 'margin-top:'), 'pt'))*0.0353, 'cm')"/></xsl:attribute>
</xsl:if>
<xsl:attribute name="svg:width"><xsl:value-of select="concat( number(substring-before( substring-after( v:shape/@style, 'width:'), 'pt'))*0.0353, 'cm')"/></xsl:attribute>
<xsl:attribute name="svg:height"><xsl:value-of select="concat( number(substring-before( substring-after( v:shape/@style, 'height:'), 'pt'))*0.0353, 'cm')"/></xsl:attribute>
<xsl:variable name="anchor-type">
<xsl:if test="contains( v:shape/@style, 'mso-position-horizontal-relative')">
<xsl:value-of select="substring-before( substring-after( v:shape/@style, 'mso-position-horizontal-relative:'), ';')"/>
</xsl:if>
</xsl:variable>
<xsl:choose>
<xsl:when test="$anchor-type = 'margin'">
<xsl:attribute name="text:anchor-type">frame</xsl:attribute>
</xsl:when>
<xsl:when test="$anchor-type = 'page'">
<xsl:attribute name="text:anchor-type">page</xsl:attribute>
</xsl:when>
<xsl:when test="$anchor-type = 'char'">
<xsl:attribute name="text:anchor-type">as-char</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="text:anchor-type">paragraph</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="v:shape/v:imagedata/@o:title">
<xsl:attribute name="draw:name"><xsl:value-of select="v:shape/v:imagedata/@o:title"/></xsl:attribute>
</xsl:if>
<xsl:element name="office:binary-data">
<xsl:value-of select="w:binData"/>
</xsl:element>
</xsl:if>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="w:binData">
<xsl:element name="office:binary-data">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template match="v:group">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="v:oval">
<xsl:element name="draw:ellipse">
<xsl:variable name="style" select="@style"/>
<xsl:variable name="position" select="substring-after($style,'position:')"/>
<xsl:variable name="positionval" select="substring-before($position,';')"/>
<xsl:variable name="left" select="substring-after($style,'left:')"/>
<xsl:variable name="leftval" select="substring-before($left,';')"/>
<xsl:variable name="top" select="substring-after($style,'top:')"/>
<xsl:variable name="topval" select="substring-before($top,';')"/>
<xsl:variable name="width" select="substring-after($style,'width:')"/>
<xsl:variable name="widthval" select="substring-before($width,';')"/>
<xsl:variable name="height" select="substring-after($style,'height:')"/>
<xsl:variable name="heightval" select="$height"/>
<xsl:if test="$positionval = 'absolute'">
<xsl:variable name="parentgroup" select="parent::v:group"/>
<xsl:variable name="origin" select="$parentgroup/@coordorigin"/>
<xsl:variable name="groupleft" select="substring-before($origin,',')"/>
<xsl:variable name="grouptop" select="substring-after($origin,',')"/>
<xsl:variable name="currsect" select="ancestor::wx:sect"/>
<xsl:variable name="currsectPr" select="$currsect/descendant::w:sectPr/w:pgMar"/>
<xsl:variable name="leftmar" select="$currsectPr/@w:left"/>
<xsl:variable name="topmar" select="$currsectPr/@w:top"/>
<xsl:attribute name="text:anchor-type">page</xsl:attribute>
<xsl:attribute name="svg:width"><xsl:value-of select="(number($widthval) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="svg:height"><xsl:value-of select="(number($heightval) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="svg:x"><xsl:value-of select="(number($topval + $topmar) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="svg:y"><xsl:value-of select="(number($leftval + $leftmar) div 1440)*2.54"/>cm</xsl:attribute>
</xsl:if>
</xsl:element>
</xsl:template>
<xsl:template match="v:rect">
<xsl:element name="draw:rect">
<xsl:variable name="style" select="@style"/>
<xsl:variable name="position" select="substring-after($style,'position:')"/>
<xsl:variable name="positionval" select="substring-before($position,';')"/>
<xsl:variable name="left" select="substring-after($style,'left:')"/>
<xsl:variable name="leftval" select="substring-before($left,';')"/>
<xsl:variable name="top" select="substring-after($style,'top:')"/>
<xsl:variable name="topval" select="substring-before($top,';')"/>
<xsl:variable name="width" select="substring-after($style,'width:')"/>
<xsl:variable name="widthval" select="substring-before($width,';')"/>
<xsl:variable name="height" select="substring-after($style,'height:')"/>
<xsl:variable name="heightval" select="$height"/>
<xsl:if test="$positionval = 'absolute'">
<xsl:variable name="parentgroup" select="parent::v:group"/>
<xsl:variable name="origin" select="$parentgroup/@coordorigin"/>
<xsl:variable name="groupleft" select="substring-before($origin,',')"/>
<xsl:variable name="grouptop" select="substring-after($origin,',')"/>
<xsl:variable name="currsect" select="ancestor::wx:sect"/>
<xsl:variable name="currsectPr" select="$currsect/descendant::w:sectPr/w:pgMar"/>
<xsl:variable name="leftmar" select="$currsectPr/@w:left"/>
<xsl:variable name="topmar" select="$currsectPr/@w:top"/>
<xsl:attribute name="text:anchor-type">page</xsl:attribute>
<xsl:attribute name="svg:width"><xsl:value-of select="(number($widthval) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="svg:height"><xsl:value-of select="(number($heightval) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="svg:x"><xsl:value-of select="(number($topval + $topmar) div 1440)*2.54"/>cm</xsl:attribute>
<xsl:attribute name="svg:y"><xsl:value-of select="(number($leftval + $leftmar) div 1440)*2.54"/>cm</xsl:attribute>
</xsl:if>
</xsl:element>
</xsl:template>
<xsl:template match="w:tbl">
<xsl:element name="table:table">
<xsl:if test="w:tblPr">
<xsl:attribute name="table:style-name">Table<xsl:value-of select="count(preceding::w:tblPr)"/></xsl:attribute>
</xsl:if>
<xsl:apply-templates select="./*"/>
</xsl:element>
</xsl:template>
<xsl:template match="w:tblPr">
<!-- commented tempararily by glu -->
<!-- <xsl:attribute name="table:style-name">Table<xsl:value-of select="count(preceding::w:tblPr)"/></xsl:attribute> -->
</xsl:template>
<xsl:template match="w:tblGrid">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="w:gridCol">
<xsl:element name="table:table-column">
<xsl:attribute name="table:style-name">TColumn<xsl:value-of select="count(preceding::w:gridCol)"/></xsl:attribute>
</xsl:element>
</xsl:template>
<xsl:template match="w:tr">
<xsl:element name="table:table-row">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="w:tc">
<xsl:element name="table:table-cell">
<xsl:attribute name="table:style-name">TCell<xsl:value-of select="count(preceding::w:tcPr)"/></xsl:attribute>
<xsl:if test="w:tcPr/w:gridSpan">
<xsl:attribute name="table:number-columns-spanned"><xsl:value-of select="w:tcPr/w:gridSpan/@w:val"/></xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="w:tcBorders">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="w:top">
<xsl:choose>
<xsl:when test="@w:val='nil' ">
<xsl:attribute name="fo:border-top">none</xsl:attribute>
</xsl:when>
<xsl:when test="@wx:bdrwidth and @w:color">
<xsl:attribute name="fo:border-top"><xsl:value-of select="(number(@wx:bdrwidth) div 1440 )*2.54"/><xsl:text>cm </xsl:text><xsl:choose><xsl:when test="@w:color ='auto'"><xsl:text>solid #000000</xsl:text></xsl:when><xsl:otherwise><xsl:text>solid #</xsl:text><xsl:value-of select="@w:color"/></xsl:otherwise></xsl:choose></xsl:attribute>
</xsl:when>
<xsl:when test="@wx:bdrwidth">
<xsl:attribute name="fo:border-top"><xsl:value-of select="(number(@wx:bdrwidth) div 1440 )*2.54"/>cm</xsl:attribute>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="w:bottom">
<xsl:choose>
<xsl:when test="@w:val='nil' ">
<xsl:attribute name="fo:border-bottom">none</xsl:attribute>
</xsl:when>
<xsl:when test="@wx:bdrwidth and @w:color">
<xsl:attribute name="fo:border-bottom"><xsl:value-of select="(number(@wx:bdrwidth) div 1440 )*2.54"/><xsl:text>cm </xsl:text><xsl:choose><xsl:when test="@w:color ='auto'"><xsl:text>solid #000000</xsl:text></xsl:when><xsl:otherwise><xsl:text>solid #</xsl:text><xsl:value-of select="@w:color"/></xsl:otherwise></xsl:choose></xsl:attribute>
</xsl:when>
<xsl:when test="@wx:bdrwidth">
<xsl:attribute name="fo:border-bottom"><xsl:value-of select="(number(@wx:bdrwidth) div 1440 )*2.54"/>cm</xsl:attribute>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="w:left">
<xsl:choose>
<xsl:when test="@w:val='nil' ">
<xsl:attribute name="fo:border-left">none</xsl:attribute>
</xsl:when>
<xsl:when test="@wx:bdrwidth and @w:color">
<xsl:attribute name="fo:border-left"><xsl:value-of select="(number(@wx:bdrwidth) div 1440 )*2.54"/><xsl:text>cm </xsl:text><xsl:choose><xsl:when test="@w:color ='auto'"><xsl:text>solid #000000</xsl:text></xsl:when><xsl:otherwise><xsl:text>solid #</xsl:text><xsl:value-of select="@w:color"/></xsl:otherwise></xsl:choose></xsl:attribute>
</xsl:when>
<xsl:when test="@wx:bdrwidth">
<xsl:attribute name="fo:border-left"><xsl:value-of select="(number(@wx:bdrwidth) div 1440 )*2.54"/>cm</xsl:attribute>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="w:right">
<xsl:choose>
<xsl:when test="@w:val='nil' ">
<xsl:attribute name="fo:border-right">none</xsl:attribute>
</xsl:when>
<xsl:when test="@wx:bdrwidth and @w:color">
<xsl:attribute name="fo:border-right"><xsl:value-of select="(number(@wx:bdrwidth) div 1440 )*2.54"/><xsl:text>cm </xsl:text><xsl:choose><xsl:when test="@w:color ='auto'"><xsl:text>solid #000000</xsl:text></xsl:when><xsl:otherwise><xsl:text>solid #</xsl:text><xsl:value-of select="@w:color"/></xsl:otherwise></xsl:choose></xsl:attribute>
</xsl:when>
<xsl:when test="@wx:bdrwidth">
<xsl:attribute name="fo:border-right"><xsl:value-of select="(number(@wx:bdrwidth) div 1440 )*2.54"/>cm</xsl:attribute>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="w:tblBorders">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="w:tcBorders">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="w:tblInd">
<!-- commented tempararily by glu -->
<!-- <xsl:attribute name="fo:margin-left"><xsl:value-of select="(number(@w:w) div 1440)*2.54"/>cm</xsl:attribute> -->
</xsl:template>
<xsl:template match="w:tcPr"/>
<xsl:template name="genlist">
<xsl:variable name="currlistid" select="w:pPr/w:listPr/w:ilfo/@w:val"/>
<xsl:variable name="currlistlvl" select="w:pPr/w:listPr/w:ilvl/@w:val"/>
<xsl:variable name="firstoccur" select="/descendant::w:pPr[w:listPr/w:ilfo/@w:val = $currlistid][1]"/>
<xsl:element name="text:ordered-list">
<xsl:attribute name="text:style-name">List<xsl:value-of select="count($firstoccur/preceding::w:listPr)"/></xsl:attribute>
<xsl:choose>
<xsl:when test="preceding::w:pPr/w:listPr/w:ilfo/@w:val = w:pPr/w:listPr/w:ilfo/@w:val">
<xsl:attribute name="text:continue-numbering">true</xsl:attribute>
<xsl:element name="text:list-item">
<xsl:call-template name="levels">
<xsl:with-param name="level" select="$currlistlvl"/>
</xsl:call-template>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="text:list-item">
<xsl:call-template name="levels">
<xsl:with-param name="level" select="$currlistlvl"/>
</xsl:call-template>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:template>
<xsl:template name="levels">
<xsl:param name="level"/>
<xsl:choose>
<xsl:when test="$level = '0'">
<xsl:call-template name="commonParagraph"/>
</xsl:when>
<xsl:otherwise>
<xsl:element name="text:ordered-list">
<xsl:element name="text:list-item">
<xsl:call-template name="levels">
<xsl:with-param name="level" select="$level -1"/>
</xsl:call-template>
</xsl:element>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="w:instrText"/>
<xsl:template match="w:fldChar"/>
</xsl:stylesheet>