home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 June / maximum-cd-2011-06.iso / DiscContents / LibO_3.3.1_Win_x86_install_multi.exe / libreoffice1.cab / style_mapping.xsl < prev    next >
Encoding:
Extensible Markup Language  |  2010-12-01  |  14.7 KB  |  391 lines

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3.  
  4.   DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  5.   
  6.   Copyright 2000, 2010 Oracle and/or its affiliates.
  7.  
  8.   OpenOffice.org - a multi-platform office productivity suite
  9.  
  10.   This file is part of OpenOffice.org.
  11.  
  12.   OpenOffice.org is free software: you can redistribute it and/or modify
  13.   it under the terms of the GNU Lesser General Public License version 3
  14.   only, as published by the Free Software Foundation.
  15.  
  16.   OpenOffice.org is distributed in the hope that it will be useful,
  17.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.   GNU Lesser General Public License version 3 for more details
  20.   (a copy is included in the LICENSE file that accompanied this code).
  21.  
  22.   You should have received a copy of the GNU Lesser General Public License
  23.   version 3 along with OpenOffice.org.  If not, see
  24.   <http://www.openoffice.org/license.html>
  25.   for a copy of the LGPLv3 License.
  26.  
  27. -->
  28. <xsl:stylesheet version="1.0"
  29.     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  30.     xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
  31.     xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
  32.     xmlns:dc="http://purl.org/dc/elements/1.1/"
  33.     xmlns:dom="http://www.w3.org/2001/xml-events"
  34.     xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
  35.     xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
  36.     xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
  37.     xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
  38.     xmlns:math="http://www.w3.org/1998/Math/MathML"
  39.     xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
  40.     xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
  41.     xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
  42.     xmlns:ooo="http://openoffice.org/2004/office"
  43.     xmlns:oooc="http://openoffice.org/2004/calc"
  44.     xmlns:ooow="http://openoffice.org/2004/writer"
  45.     xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
  46.     xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
  47.     xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
  48.     xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
  49.     xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
  50.     xmlns:xlink="http://www.w3.org/1999/xlink"
  51.     xmlns:xt="http://www.jclark.com/xt"
  52.     xmlns:common="http://exslt.org/common"
  53.     xmlns:xalan="http://xml.apache.org/xalan"
  54.     xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  55.     exclude-result-prefixes="chart config dc dom dr3d draw fo form math meta number office ooo oooc ooow script style svg table text xlink xt common xalan">
  56.  
  57.     <xsl:variable name="namespace-html" select="'http://www.w3.org/TR/REC-html40'" />
  58.  
  59.     <xsl:template match="@table:style-name | @table:default-cell-style-name">
  60.         <xsl:if test="not(name() = 'Default')">
  61.             <xsl:attribute name="ss:StyleID">
  62.                 <xsl:value-of  select="." />
  63.             </xsl:attribute>
  64.         </xsl:if>
  65.     </xsl:template>
  66.  
  67.     <xsl:key match="table:table-cell" name="getCellByStyle" use="@table:style-name"/>
  68.     <xsl:template match="@table:style-name" mode="table-row">
  69.         <!-- only row styles used by cells are exported,
  70.             as usual row style properties are already written as row attributes -->
  71.         <xsl:if test="key('getCellByStyle', '.')">
  72.             <xsl:attribute name="ss:StyleID">
  73.                 <xsl:value-of  select="." />
  74.             </xsl:attribute>
  75.         </xsl:if>
  76.     </xsl:template>
  77.  
  78.     <xsl:template name="style-and-contents">
  79.         <xsl:param name="cellStyleName" />
  80.  
  81.         <!-- WorkAround of Excel2003 issue:
  82.             Styles from the CellStyle will not be inherited to HTML content (e.g. Colour style).
  83.         -->
  84.         <xsl:choose>
  85.             <xsl:when test="@text:style-name">
  86.                 <xsl:variable name="styles">
  87.                     <xsl:copy-of select="key('styles', @text:style-name)/*" />
  88.                     <xsl:copy-of select="key('styles', $cellStyleName)/*" />
  89.                 </xsl:variable>
  90.                 <xsl:choose>
  91.                     <xsl:when test="function-available('xalan:nodeset')">
  92.                         <xsl:call-template name="create-nested-format-tags">
  93.                             <xsl:with-param name="styles" select="xalan:nodeset($styles)" />
  94.                             <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  95.                         </xsl:call-template>
  96.                     </xsl:when>
  97.                     <xsl:when test="function-available('xt:node-set')">
  98.                         <xsl:call-template name="create-nested-format-tags">
  99.                             <xsl:with-param name="styles" select="xt:node-set($styles)" />
  100.                             <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  101.                         </xsl:call-template>
  102.                     </xsl:when>
  103.                     <xsl:when test="function-available('common:node-set')">
  104.                         <xsl:call-template name="create-nested-format-tags">
  105.                             <xsl:with-param name="styles" select="common:node-set($styles)" />
  106.                             <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  107.                         </xsl:call-template>
  108.                     </xsl:when>
  109.                     <xsl:otherwise>
  110.                         <xsl:message terminate="yes">The required node-set function was not found!</xsl:message>
  111.                     </xsl:otherwise>
  112.                 </xsl:choose>
  113.             </xsl:when>
  114.             <xsl:when test="@table:style-name">
  115.                 <xsl:variable name="styles">
  116.                     <xsl:copy-of select="key('styles', @text:style-name)/*" />
  117.                     <xsl:copy-of select="key('styles', $cellStyleName)/*" />
  118.                 </xsl:variable>
  119.  
  120.                 <xsl:choose>
  121.                     <xsl:when test="function-available('xalan:nodeset')">
  122.                         <xsl:call-template name="create-nested-format-tags">
  123.                             <xsl:with-param name="styles" select="xalan:nodeset($styles)" />
  124.                             <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  125.                         </xsl:call-template>
  126.                     </xsl:when>
  127.                     <xsl:when test="function-available('xt:node-set')">
  128.                         <xsl:call-template name="create-nested-format-tags">
  129.                             <xsl:with-param name="styles" select="xt:node-set($styles)" />
  130.                             <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  131.                         </xsl:call-template>
  132.                     </xsl:when>
  133.                     <xsl:when test="function-available('common:node-set')">
  134.                         <xsl:call-template name="create-nested-format-tags">
  135.                             <xsl:with-param name="styles" select="common:node-set($styles)" />
  136.                             <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  137.                         </xsl:call-template>
  138.                     </xsl:when>
  139.                     <xsl:otherwise>
  140.                         <xsl:message terminate="yes">The required node-set function was not found!</xsl:message>
  141.                     </xsl:otherwise>
  142.                 </xsl:choose>
  143.             </xsl:when>
  144.             <xsl:otherwise>
  145.                 <xsl:apply-templates>
  146.                     <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  147.                 </xsl:apply-templates>
  148.             </xsl:otherwise>
  149.         </xsl:choose>
  150.     </xsl:template>
  151.  
  152.  
  153.     <!-- *********************************** -->
  154.     <!-- *** creating nested format tags *** -->
  155.     <!-- *********************************** -->
  156.  
  157.     <!-- Bold -->
  158.     <xsl:template name="create-nested-format-tags">
  159.         <xsl:param name="styles" />
  160.         <xsl:param name="cellStyleName" />
  161.  
  162.         <xsl:choose>
  163.             <xsl:when test="$styles/*/@fo:font-weight = 'bold' or $styles/*/@fo:font-weight = 'bolder'">
  164.                 <xsl:element namespace="{$namespace-html}" name="B">
  165.                     <xsl:call-template name="italic">
  166.                         <xsl:with-param name="styles" select="$styles" />
  167.                         <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  168.                     </xsl:call-template>
  169.                 </xsl:element>
  170.             </xsl:when>
  171.             <xsl:otherwise>
  172.                 <xsl:call-template name="italic">
  173.                     <xsl:with-param name="styles" select="$styles" />
  174.                     <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  175.                 </xsl:call-template>
  176.             </xsl:otherwise>
  177.         </xsl:choose>
  178.     </xsl:template>
  179.  
  180.  
  181.     <!-- Italic -->
  182.     <xsl:template name="italic">
  183.         <xsl:param name="styles" />
  184.         <xsl:param name="cellStyleName" />
  185.  
  186.         <xsl:choose>
  187.             <xsl:when test="$styles/*/@fo:font-style = 'italic' or $styles/*/@fo:font-style = 'oblique'">
  188.                 <xsl:element namespace="{$namespace-html}" name="I">
  189.                     <xsl:call-template name="underline">
  190.                         <xsl:with-param name="styles" select="$styles" />
  191.                         <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  192.                     </xsl:call-template>
  193.                 </xsl:element>
  194.             </xsl:when>
  195.             <xsl:otherwise>
  196.                 <xsl:call-template name="underline">
  197.                     <xsl:with-param name="styles" select="$styles" />
  198.                     <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  199.                 </xsl:call-template>
  200.             </xsl:otherwise>
  201.         </xsl:choose>
  202.     </xsl:template>
  203.  
  204.  
  205.     <!-- Underline -->
  206.     <xsl:template name="underline">
  207.         <xsl:param name="styles" />
  208.         <xsl:param name="cellStyleName" />
  209.  
  210.         <xsl:choose>
  211.             <xsl:when test="$styles/*/@style:text-underline-type and not($styles/*/@style:text-underline-type = 'none')">
  212.                 <xsl:element namespace="{$namespace-html}" name="U">
  213.                     <xsl:call-template name="strikethrough">
  214.                         <xsl:with-param name="styles" select="$styles" />
  215.                         <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  216.                     </xsl:call-template>
  217.                 </xsl:element>
  218.             </xsl:when>
  219.             <xsl:otherwise>
  220.                 <xsl:call-template name="strikethrough">
  221.                     <xsl:with-param name="styles" select="$styles" />
  222.                     <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  223.                 </xsl:call-template>
  224.             </xsl:otherwise>
  225.         </xsl:choose>
  226.  
  227.     </xsl:template>
  228.  
  229.  
  230.     <!-- strikethrough -->
  231.     <xsl:template name="strikethrough">
  232.         <xsl:param name="styles" />
  233.         <xsl:param name="cellStyleName" />
  234.  
  235.         <xsl:choose>
  236.             <xsl:when test="$styles/*/@style:text-line-through-style and not($styles/*/@style:text-line-through-style = 'none')">
  237.                 <xsl:element namespace="{$namespace-html}" name="S">
  238.                     <xsl:call-template name="super-subscript">
  239.                         <xsl:with-param name="styles" select="$styles" />
  240.                         <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  241.                     </xsl:call-template>
  242.                 </xsl:element>
  243.             </xsl:when>
  244.             <xsl:otherwise>
  245.                 <xsl:call-template name="super-subscript">
  246.                     <xsl:with-param name="styles" select="$styles" />
  247.                     <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  248.                 </xsl:call-template>
  249.             </xsl:otherwise>
  250.         </xsl:choose>
  251.     </xsl:template>
  252.  
  253.  
  254.  
  255.     <!-- superscript & subscript -->
  256.     <xsl:template name="super-subscript">
  257.         <xsl:param name="styles" />
  258.         <xsl:param name="cellStyleName" />
  259.  
  260.         <xsl:choose>
  261.             <xsl:when test="$styles/*/@style:text-position">
  262.                 <xsl:variable name="textPosition" select="number(substring-before($styles/*/@style:text-position, '% '))" />
  263.                 <xsl:choose>
  264.                     <xsl:when test="$textPosition > 0">
  265.                         <xsl:element namespace="{$namespace-html}" name="Sup">
  266.                             <xsl:call-template name="align">
  267.                                 <xsl:with-param name="styles" select="$styles" />
  268.                                 <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  269.                             </xsl:call-template>
  270.                         </xsl:element>
  271.                     </xsl:when>
  272.                     <xsl:when test="$textPosition < 0">
  273.                         <xsl:element namespace="{$namespace-html}" name="Sub">
  274.                             <xsl:call-template name="align">
  275.                                 <xsl:with-param name="styles" select="$styles" />
  276.                                 <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  277.                             </xsl:call-template>
  278.                         </xsl:element>
  279.                     </xsl:when>
  280.                     <xsl:otherwise>
  281.                         <xsl:call-template name="align">
  282.                             <xsl:with-param name="styles" select="$styles" />
  283.                             <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  284.                         </xsl:call-template>
  285.                     </xsl:otherwise>
  286.                 </xsl:choose>
  287.             </xsl:when>
  288.             <xsl:otherwise>
  289.                 <xsl:call-template name="align">
  290.                     <xsl:with-param name="styles" select="$styles" />
  291.                     <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  292.                 </xsl:call-template>
  293.             </xsl:otherwise>
  294.         </xsl:choose>
  295.     </xsl:template>
  296.  
  297.  
  298.     <!-- Alignment - normally called by strikethrough, but no DIV elements in HTML -->
  299.     <xsl:template name="align">
  300.         <xsl:param name="styles" />
  301.         <xsl:param name="cellStyleName" />
  302.  
  303.         <xsl:choose>
  304.             <xsl:when test="$styles/*/@fo:font-align">
  305.                 <xsl:element namespace="{$namespace-html}" name="DIV">
  306.                     <xsl:attribute name="html:style">
  307.                          <xsl:choose>
  308.                             <xsl:when test="$styles/*/@fo:font-align = 'start'">
  309.                                 <xsl:text>text-align:left;</xsl:text>
  310.                             </xsl:when>
  311.                             <xsl:when test="$styles/*/@fo:font-align = 'end'">
  312.                                 <xsl:text>text-align:right;</xsl:text>
  313.                             </xsl:when>
  314.                             <xsl:otherwise>
  315.                                 <xsl:text>text-align:center;</xsl:text>
  316.                             </xsl:otherwise>
  317.                          </xsl:choose>
  318.                     </xsl:attribute>
  319.                     <xsl:call-template name="font">
  320.                         <xsl:with-param name="styles" select="$styles" />
  321.                         <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  322.                     </xsl:call-template>
  323.                 </xsl:element>
  324.             </xsl:when>
  325.             <xsl:otherwise>
  326.                 <xsl:call-template name="font">
  327.                     <xsl:with-param name="styles" select="$styles" />
  328.                     <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  329.                 </xsl:call-template>
  330.             </xsl:otherwise>
  331.         </xsl:choose>
  332.     </xsl:template>
  333.  
  334.  
  335.     <!-- Font (size and color)  -->
  336.     <xsl:template name="font">
  337.         <xsl:param name="styles" />
  338.         <xsl:param name="cellStyleName" />
  339.  
  340.         <xsl:choose>
  341.             <xsl:when test="$styles/*/@style:font-name or
  342.                             $styles/*/@fo:font-size or
  343.                             $styles/*/@fo:color">
  344.                 <xsl:element namespace="{$namespace-html}" name="Font">
  345.                     <xsl:if test="$styles/*/@style:font-name">
  346.                         <xsl:attribute name="html:Face">
  347.                              <xsl:value-of select="$styles/*/@style:font-name" />
  348.                         </xsl:attribute>
  349.                     </xsl:if>
  350.                     <xsl:if test="$styles/*/@fo:color">
  351.                         <xsl:attribute name="html:Color">
  352.                              <xsl:value-of select="$styles/*/@fo:color" />
  353.                         </xsl:attribute>
  354.                     </xsl:if>
  355.                     <xsl:if test="$styles/*/@fo:font-size">
  356.                         <!-- WORKAROUND TO EXCEL2003 issue where nested FONT elements with size attributes result in unloadable documents -->
  357.                         <!-- Only create size attribute if parent do not have already one -->
  358.  
  359.                         <!--<xsl:choose>
  360.                             <xsl:when test="not(key('styles', parent::*/@text:style-name)/*/@fo:font-size)"> -->
  361.                         <xsl:if test="not(key('styles', parent::*/@text:style-name)/*/@fo:font-size)">
  362.                             <xsl:attribute name="html:Size">
  363.                                 <xsl:call-template name="convert2pt">
  364.                                     <xsl:with-param name="value" select="$styles/*/@fo:font-size" />
  365.                                     <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  366.                                 </xsl:call-template>
  367.                             </xsl:attribute>
  368.                         </xsl:if>
  369.                         <!--</xsl:when>
  370.                             <xsl:otherwise>
  371.                                 <xsl:message>Due Excel issue we have to neglect size from @text:style-name '<xsl:value-of select="@text:style-name"/>'!</xsl:message>
  372.                             </xsl:otherwise>
  373.                         </xsl:choose>-->
  374.                     </xsl:if>
  375.                     <!-- get the embedded content -->
  376.                     <xsl:apply-templates>
  377.                         <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  378.                     </xsl:apply-templates>
  379.                 </xsl:element>
  380.             </xsl:when>
  381.             <xsl:otherwise>
  382.                 <!-- get the embedded content -->
  383.                 <xsl:apply-templates>
  384.                     <xsl:with-param name="cellStyleName" select="$cellStyleName" />
  385.                 </xsl:apply-templates>
  386.             </xsl:otherwise>
  387.         </xsl:choose>
  388.     </xsl:template>
  389.  
  390. </xsl:stylesheet>
  391.