filter/Library_xsltfilter.mk                                  |    1 
 filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl |  976 ++++------
 filter/source/xsltfilter/LibXSLTTransformer.cxx               |    6 
 libxslt/libxsltversion.mk                                     |    3 
 libxslt/makefile.mk                                           |    1 
 libxslt/prj/d.lst                                             |    2 
 scp2/source/ooo/file_library_ooo.scp                          |   18 
 scp2/source/ooo/module_hidden_ooo.scp                         |   11 
 solenv/inc/libs.mk                                            |    6 
 9 files changed, 530 insertions(+), 494 deletions(-)

New commits:
commit 1c467763f4ca4bc1caaa3111f0ed85f388e6fe01
Author: Peter Jentsch <pj...@guineapics.de>
Date:   Sat Sep 8 22:26:50 2012 +0200

    build and deliver internal libexslt. Use LIBEXSLT_LIBS is system xslt is 
used
    
    Change-Id: I7ab624bc4877af51d4182ab213ef49cd8c5bb2a4

diff --git a/filter/Library_xsltfilter.mk b/filter/Library_xsltfilter.mk
index 9688d59..94fca81 100644
--- a/filter/Library_xsltfilter.mk
+++ b/filter/Library_xsltfilter.mk
@@ -43,6 +43,7 @@ $(eval $(call gb_Library_use_libraries,xsltfilter,\
 $(eval $(call gb_Library_use_externals,xsltfilter,\
        libxml2 \
        libxslt \
+       libexslt \
 ))
 
 $(eval $(call gb_Library_add_exception_objects,xsltfilter,\
diff --git a/libxslt/libxsltversion.mk b/libxslt/libxsltversion.mk
index c80c0e9..e7fe5e5 100644
--- a/libxslt/libxsltversion.mk
+++ b/libxslt/libxsltversion.mk
@@ -26,8 +26,11 @@
 #*************************************************************************
 # major 
 LIBXSLT_MAJOR=1
+LIBEXSLT_MAJOR=0
 # minor 
 LIBXSLT_MINOR=1
+LIBEXSLT_MINOR=8
 # micro 
 LIBXSLT_MICRO=26
+LIBEXSLT_MICRO=15
 
diff --git a/libxslt/makefile.mk b/libxslt/makefile.mk
index 670ebb9..9d4deff 100644
--- a/libxslt/makefile.mk
+++ b/libxslt/makefile.mk
@@ -159,6 +159,7 @@ BUILD_DIR=$(CONFIGURE_DIR)
 .ENDIF
 
 OUT2INC=libxslt$/*.h
+OUT2INC+=libexslt$/*.h
 
 .IF "$(OS)"=="MACOSX"
 OUT2LIB+=libxslt$/.libs$/libxslt.*.dylib
diff --git a/libxslt/prj/d.lst b/libxslt/prj/d.lst
index f3613b0..892df7b 100644
--- a/libxslt/prj/d.lst
+++ b/libxslt/prj/d.lst
@@ -1,5 +1,7 @@
 mkdir: %_DEST%\inc\external\libxslt
+mkdir: %_DEST%\inc\external\libexslt
 ..\%__SRC%\inc\*.h %_DEST%\inc\external\libxslt\*.h
+..\%__SRC%\inc\exslt*.h %_DEST%\inc\external\libexslt\*.h
 ..\%__SRC%\lib\libxslt.1.dylib %_DEST%\lib\libxslt.1.dylib
 symlink: %_DEST%\lib\libxslt.1.dylib %_DEST%\lib\libxslt.dylib
 ...\%__SRC%\lib\libexslt.so %_DEST%\lib\libexslt.so
diff --git a/scp2/source/ooo/file_library_ooo.scp 
b/scp2/source/ooo/file_library_ooo.scp
index 928174b..8a20d07 100644
--- a/scp2/source/ooo/file_library_ooo.scp
+++ b/scp2/source/ooo/file_library_ooo.scp
@@ -1470,6 +1470,24 @@ File gid_File_Lib_Xslt
    #endif
   #endif
 End
+File gid_File_Lib_eXslt
+    LIB_FILE_BODY;
+    Styles = (PACKED);
+    Dir = SCP2_OOO_BIN_DIR;
+  #ifdef UNX
+    #ifdef MACOSX
+       Name = STRING(CONCAT4(libexslt,.,0,UNXSUFFIX));
+    #else
+       Name = STRING(CONCAT4(libexslt,UNXSUFFIX,.,0));
+    #endif
+  #else
+   #ifdef _gcc3
+    Name = "libexslt-0.dll";
+   #else
+    Name = "libexslt.dll";
+   #endif
+  #endif
+End
 #endif
 
 
diff --git a/scp2/source/ooo/module_hidden_ooo.scp 
b/scp2/source/ooo/module_hidden_ooo.scp
index 26ec6d6..aa4ff72 100644
--- a/scp2/source/ooo/module_hidden_ooo.scp
+++ b/scp2/source/ooo/module_hidden_ooo.scp
@@ -70,6 +70,13 @@ Unixlink gid_Unixlink_File_Lib_Xslt
     Styles = (PACKED, VERSION_INDEPENDENT_COMP_ID);
     Target = STRING(CONCAT3(libxslt,UNXSUFFIX,.1));
 End
+Unixlink gid_Unixlink_File_Lib_eXslt
+    BIN_FILE_BODY;
+    Dir = SCP2_OOO_BIN_DIR;
+    Name = STRING(CONCAT2(libexslt,UNXSUFFIX));
+    Styles = (PACKED, VERSION_INDEPENDENT_COMP_ID);
+    Target = STRING(CONCAT3(libexslt,UNXSUFFIX,.0));
+End
 #endif
 #endif
 
@@ -431,6 +438,7 @@ Module gid_Module_Root_Files_5
        gid_File_Lib_Ucppkg1,
        gid_File_Lib_Xslt,
        gid_Unixlink_File_Lib_Xslt,
+       gid_Unixlink_File_Lib_eXslt,
        gid_File_Lib_LibXMLSec_xmlsecnss,
        gid_File_Lib_LibXMLSec_xmlseccore,
        gid_File_Lib_LibXMLSec_xmlsecmscrypto,
@@ -499,7 +507,8 @@ Module gid_Module_Root_Files_5
        gid_Unixlink_File_Lib_Raptor,
        gid_Unixlink_File_Lib_Rasqal,
        gid_Unixlink_File_Lib_Rdf,
-       gid_Unixlink_File_Lib_Xslt);
+       gid_Unixlink_File_Lib_Xslt,
+       gid_Unixlink_File_Lib_eXslt);
 End
 
 Module gid_Module_Root_Files_6
diff --git a/solenv/inc/libs.mk b/solenv/inc/libs.mk
index 1efcd22..b9e2a5d 100644
--- a/solenv/inc/libs.mk
+++ b/solenv/inc/libs.mk
@@ -252,9 +252,9 @@ CPPUNITLIB = $(CPPUNIT_LIBS)
 CPPUNITLIB = -lcppunit
 .ENDIF
 .IF "$(SYSTEM_LIBXSLT)"=="YES"
-XSLTLIB=$(LIBXSLT_LIBS)
+XSLTLIB=$(LIBEXSLT_LIBS)
 .ELSE
-XSLTLIB=-lxslt $(LIBXML2LIB)
+XSLTLIB=-lexslt -lxslt $(LIBXML2LIB)
 .ENDIF
 JVMFWKLIB = -ljvmfwk
 .IF "$(SYSTEM_REDLAND)"=="YES"
@@ -491,7 +491,7 @@ PKGCHKLIB=ipkgchk.lib
 HELPLINKERLIB=ihelplinker.lib
 JVMACCESSLIB = ijvmaccess.lib
 CPPUNITLIB = icppunit_dll.lib
-XSLTLIB = libxslt.lib $(LIBXML2LIB)
+XSLTLIB = libexslt.lib libxslt.lib $(LIBXML2LIB)
 REDLANDLIB = librdf.lib
 
 JVMFWKLIB = ijvmfwk.lib
commit eadb83f281b596e441a82798660f1a27c177b2c6
Author: Peter Jentsch <pj...@guineapics.de>
Date:   Sat May 5 23:45:56 2012 +0200

    register exslt functions for libxslt filter
    
    Change-Id: I23bb8a3cf00a9152362794281a617ad4a780faee

diff --git a/filter/source/xsltfilter/LibXSLTTransformer.cxx 
b/filter/source/xsltfilter/LibXSLTTransformer.cxx
index ff57fc1..aa1411f 100644
--- a/filter/source/xsltfilter/LibXSLTTransformer.cxx
+++ b/filter/source/xsltfilter/LibXSLTTransformer.cxx
@@ -44,6 +44,7 @@
 #include <libxslt/xsltutils.h>
 #include <libxslt/variables.h>
 #include <libxslt/extensions.h>
+#include <libexslt/exslt.h>
 
 #include <cppuhelper/factory.hxx>
 #include <cppuhelper/servicefactory.hxx>
@@ -323,7 +324,12 @@ namespace XSLT
                 (const xmlChar *) m_transformer->getStyleSheetURL().getStr());
         xmlDocPtr result = NULL;
         xsltTransformContextPtr tcontext = NULL;
+        exsltRegisterAll();
         registerExtensionModule();
+#if OSL_DEBUG_LEVEL > 1
+        xsltSetGenericDebugFunc(stderr, NULL);
+        xsltDebugDumpExtensions(NULL);
+#endif
         OleHandler* oh = new OleHandler(m_transformer->getServiceFactory());
         if (styleSheet)
             {
commit b5107faa150aab3c5480708219fc8d392a97f718
Author: Peter Jentsch <pj...@guineapics.de>
Date:   Tue May 1 00:26:25 2012 +0200

    add for exslt:set:distinct template
    
    ..for processors not supporting it natively, namely Saxon &gt; 8.2
    
    Change-Id: I33ceedd7f70f0469c039b8e90aa8d492d5c27ce2

diff --git a/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl 
b/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
index 15874f2..6258668 100644
--- a/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
+++ b/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
@@ -9145,4 +9145,25 @@
                <xsl:param name="string"/>
                <xsl:value-of select="translate($string, '.%()/\+[]', '')"/>
        </xsl:template>
+       
+       <xsl:template name="set:distinct">
+               <xsl:param name="nodes" select="/.."/>
+               <xsl:param name="distinct" select="/.."/>
+               <xsl:choose>
+                       <xsl:when test="$nodes">
+                               <xsl:call-template name="set:distinct">
+                                       <xsl:with-param name="distinct" 
select="$distinct | $nodes[1][not(. = $distinct)]"/>
+                                       <xsl:with-param name="nodes" 
select="$nodes[position() > 1]"/>
+                               </xsl:call-template>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:apply-templates select="$distinct" 
mode="set:distinct"/>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <xsl:template match="node()|@*" mode="set:distinct">
+               <xsl:copy-of select="." />
+       </xsl:template>
+       
 </xsl:stylesheet>
commit 9f29890d4e4fa916d46eeae081ef6e04eb1bfe81
Author: Peter Jentsch <pj...@guineapics.de>
Date:   Tue May 1 00:24:51 2012 +0200

    fix a problem when handling style named for conditional formatting.
    
    Change-Id: Ia8deda31dc4624b1d05d2388c90dbcb17d033269

diff --git a/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl 
b/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
index 32e4259..15874f2 100644
--- a/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
+++ b/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
@@ -6981,23 +6981,29 @@
                                <xsl:with-param name="param-str" 
select="substring-before($condition-pos-str,$current-pos-str)"/>
                        </xsl:call-template>
                </xsl:variable>
+               <xsl:variable name="base-style-name">
+                       <xsl:choose>
+                               <xsl:when test="@ss:StyleID">
+                                       <xsl:value-of select="@ss:StyleID"/>
+                               </xsl:when>
+                               <xsl:when test="../@ss:StyleID">
+                                       <xsl:value-of select="../@ss:StyleID"/>
+                               </xsl:when>
+                               <xsl:when test="../../@ss:StyleID">
+                                       <xsl:value-of 
select="../../@ss:StyleID"/>
+                               </xsl:when>
+                       </xsl:choose>
+               </xsl:variable>
                <xsl:variable name="style-name">
                        <xsl:choose>
                                <xsl:when test="contains($condition-pos-str, 
$current-pos-str) and starts-with($temp-str, 'c')">
-                                       <xsl:value-of 
select="concat(@ss:StyleID, '-ce', substring-after($temp-str, 'c'))"/>
-                               </xsl:when>
-                               <xsl:otherwise>
                                        <xsl:choose>
-                                               <xsl:when test="@ss:StyleID">
-                                                       <xsl:value-of 
select="@ss:StyleID"/>
-                                               </xsl:when>
-                                               <xsl:when test="../@ss:StyleID">
-                                                       <xsl:value-of 
select="../@ss:StyleID"/>
-                                               </xsl:when>
-                                               <xsl:when 
test="../../@ss:StyleID">
-                                                       <xsl:value-of 
select="../../@ss:StyleID"/>
-                                               </xsl:when>
+                                               <xsl:when 
test="string-length($base-style-name) &gt; 0"><xsl:value-of 
select="concat($base-style-name, '-ce', substring-after($temp-str, 
'c'))"/></xsl:when>
+                                               <xsl:otherwise><xsl:value-of 
select="concat('Default-ce', substring-after($temp-str, 'c'))"/></xsl:otherwise>
                                        </xsl:choose>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:value-of 
select="$base-style-name"/>
                                </xsl:otherwise>
                        </xsl:choose>
                </xsl:variable>
commit 3420be984986bcff03d6d127b913fc07372fe89f
Author: Peter Jentsch <pj...@guineapics.de>
Date:   Tue May 1 00:24:01 2012 +0200

    fixed problem with template recursion in spreadsheetml import.
    
    Changed recursion to iteration in various places (creating column styles 
and both row styles and rows)
    Recursion when creating cells/columns remains.
    
    Change-Id: Ie5d27c576069b79225e7901671227c0ff8dce75d

diff --git a/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl 
b/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
index cd223f8..32e4259 100644
--- a/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
+++ b/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
@@ -5048,17 +5048,15 @@
                <style:style style:family="table-column" 
style:name="{concat('co', $table-pos)}">
                        <style:table-column-properties fo:break-before="auto" 
style:column-width="{$default-column-width}"/>
                </style:style>
-               <xsl:choose>
-                       <xsl:when test="ss:Column">
-                               <xsl:call-template name="get-column-style-name">
-                                       <xsl:with-param name="finishedColumns" 
select="0"/>
-                                       <xsl:with-param name="columnCount" 
select="count(./ss:Column)"/>
-                                       <xsl:with-param name="currentCount" 
select="1"/>
-                                       <xsl:with-param name="table-pos" 
select="$table-pos"/>
-                                       <xsl:with-param 
name="default-column-width" select="$default-column-width"/>
-                               </xsl:call-template>
-                       </xsl:when>
-               </xsl:choose>
+               <xsl:variable name="columnCount" select="count(ss:Column)"/>
+               <xsl:for-each select="ss:Column">
+                       <xsl:apply-templates select="." 
mode="create-column-style">
+                               <xsl:with-param name="columnCount" 
select="$columnCount"/>
+                               <xsl:with-param name="currentCount" 
select="position()"/>
+                               <xsl:with-param name="table-pos" 
select="$table-pos"/>
+                               <xsl:with-param name="default-column-width" 
select="$default-column-width"/>
+                       </xsl:apply-templates>
+               </xsl:for-each>
                <xsl:if test="../x:PageBreaks/x:ColBreaks">
                        <style:style style:name="{concat('cob',$table-pos)}" 
style:family="table-column">
                                <xsl:element 
name="style:table-column-properties">
@@ -5085,15 +5083,15 @@
                <style:style style:family="table-row" style:name="{concat('ro', 
$table-pos)}">
                        <style:table-row-properties 
style:row-height="{$default-row-height}" style:use-optimal-row-height="false"/>
                </style:style>
-               <xsl:if test="ss:Row">
-                       <xsl:call-template name="get-row-style-name">
-                               <xsl:with-param name="earlierRowNo" select="0"/>
-                               <xsl:with-param name="rowNodeCount" 
select="count(./ss:Row)"/>
-                               <xsl:with-param name="rowNodeIndex" select="1"/>
+               <xsl:variable name="rowCount" select="count(ss:Row)"/>
+               <xsl:for-each select="ss:Row">
+                       <xsl:apply-templates select="." mode="create-row-style">
+                               <xsl:with-param name="rowNodeCount" 
select="$rowCount"/>
+                               <xsl:with-param name="rowNodeIndex" 
select="position()"/>
                                <xsl:with-param name="table-pos" 
select="$table-pos"/>
                                <xsl:with-param name="default-row-height" 
select="$default-row-height"/>
-                       </xsl:call-template>
-               </xsl:if>
+                       </xsl:apply-templates>
+               </xsl:for-each>
                <xsl:if test="../x:PageBreaks/x:RowBreaks">
                        <style:style style:name="{concat('rob',$table-pos)}" 
style:family="table-row">
                                <xsl:element name="style:table-row-properties">
@@ -5129,98 +5127,82 @@
                        </xsl:element>
                </xsl:element>
        </xsl:template>
-       <xsl:template name="get-column-style-name">
+       <xsl:template match="ss:Column" mode="create-column-style">
                <!-- generate stylename of colbreak after matching the column 
number and the colbreak number -->
-               <xsl:param name="finishedColumns"/>
                <xsl:param name="columnCount"/>
                <xsl:param name="currentCount"/>
                <xsl:param name="table-pos"/>
                <xsl:param name="default-column-width"/>
-               <xsl:if test="$currentCount &lt; ($columnCount + 1)">
-                       <xsl:variable name="span-value">
-                               <xsl:choose>
-                                       <xsl:when test="./ss:Column[position() 
= $currentCount]/@ss:Span">
-                                               <xsl:value-of 
select="./ss:Column[position() = $currentCount]/@ss:Span + 1"/>
-                                       </xsl:when>
-                                       <xsl:otherwise>
-                                               <xsl:value-of select="0"/>
-                                       </xsl:otherwise>
-                               </xsl:choose>
-                       </xsl:variable>
-                       <xsl:variable name="current-index">
-                               <xsl:choose>
-                                       <xsl:when test="./ss:Column[position() 
= $currentCount]/@ss:Index">
-                                               <xsl:value-of 
select="./ss:Column[position() = $currentCount]/@ss:Index - 1"/>
-                                       </xsl:when>
-                                       <xsl:otherwise>
-                                               <xsl:value-of 
select="$finishedColumns"/>
-                                       </xsl:otherwise>
-                               </xsl:choose>
-                       </xsl:variable>
-                       <xsl:variable name="column-break">
-                               <xsl:choose>
-                                       <xsl:when test="$span-value = 0">
-                                               <xsl:if 
test="../x:PageBreaks/x:ColBreaks/x:ColBreak/x:Column = $current-index">
-                                                       <xsl:value-of 
select="1"/>
-                                               </xsl:if>
-                                       </xsl:when>
-                                       <xsl:otherwise>
-                                               <xsl:if 
test="../x:PageBreaks/x:ColBreaks[(x:ColBreak/x:Column &gt; $finishedColumns) 
and (x:ColBreak/x:Column &lt; ($finishedColumns + $span-value))]">
-                                                       <xsl:value-of 
select="1"/>
-                                               </xsl:if>
-                                       </xsl:otherwise>
-                               </xsl:choose>
-                       </xsl:variable>
-                       <xsl:if test="$column-break = 1">
-                               <xsl:element name="style:style">
-                                       <xsl:attribute name="style:name">
-                                               <xsl:call-template 
name="encode-as-nc-name">
-                                                       <xsl:with-param 
name="string" select="concat('cob', $table-pos, '-',$currentCount)"/>
-                                               </xsl:call-template>
-                                       </xsl:attribute>
-                                       <xsl:attribute 
name="style:family">table-column</xsl:attribute>
-                                       <xsl:element 
name="style:table-column-properties">
-                                               <xsl:choose>
-                                                       <xsl:when 
test="./ss:Column[position() = $currentCount]/@ss:Width">
-                                                               <xsl:attribute 
name="style:column-width">
-                                                                       
<xsl:call-template name="convert2cm">
-                                                                               
<xsl:with-param name="value" select="concat(./ss:Column[position() = 
$currentCount]/@ss:Width,'pt')"/>
-                                                                       
</xsl:call-template>
-                                                                       
<xsl:text>cm</xsl:text>
-                                                               </xsl:attribute>
-                                                       </xsl:when>
-                                                       <xsl:otherwise>
-                                                               <xsl:attribute 
name="style:column-width">
-                                                                       
<xsl:value-of select="$default-column-width"/>
-                                                               </xsl:attribute>
-                                                       </xsl:otherwise>
-                                               </xsl:choose>
-                                               <xsl:choose>
-                                                       <xsl:when 
test="./ss:Column[position() = $currentCount]/@ss:AutoFitWidth = '0'">
-                                                               <xsl:attribute 
name="style:use-optimal-column-width">false</xsl:attribute>
-                                                       </xsl:when>
-                                                       <xsl:otherwise>
-                                                               <xsl:choose>
-                                                                       
<xsl:when test="./ss:Column[position() = $currentCount]/@ss:Width &gt; 0">
-                                                                               
<xsl:attribute name="style:use-optimal-column-width">false</xsl:attribute>
-                                                                       
</xsl:when>
-                                                                       
<xsl:otherwise>
-                                                                               
<xsl:attribute name="style:use-optimal-column-width">true</xsl:attribute>
-                                                                       
</xsl:otherwise>
-                                                               </xsl:choose>
-                                                       </xsl:otherwise>
-                                               </xsl:choose>
-                                               <xsl:attribute 
name="fo:break-before">page</xsl:attribute>
-                                       </xsl:element>
-                               </xsl:element>
-                       </xsl:if>
-                       <style:style style:name="{concat('co', $table-pos, 
'-',$currentCount)}" style:family="table-column">
+               <xsl:variable name="span-value" select="@ss:Span + 
count(@ss:Span)"/>
+               <xsl:variable name="finishedColumns">
+                       <xsl:choose>
+                               <xsl:when test="@ss:Index">
+                                       <xsl:value-of select="@ss:Index -1 + 
$span-value"/>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:variable name="recent-index"
+                                               
select="preceding-sibling::*[@ss:Index][last()]"/>
+                                       <xsl:choose>
+                                               <xsl:when test="$recent-index">
+                                                       <xsl:variable 
name="nodes-up-to-current"
+                                                               
select="set:intersection(preceding-sibling::*, 
$recent-index/following-sibling::*)"/>
+                                                       <xsl:variable 
name="allSpans" select="$nodes-up-to-current/@ss:Span"/>
+                                                       <xsl:value-of
+                                                               
select="$recent-index/@ss:Index + count($nodes-up-to-current) + sum($allSpans) 
+ count($allSpans)"
+                                                       />
+                                               </xsl:when>
+                                               <xsl:otherwise>
+                                                       <xsl:variable 
name="allSpans" select="preceding-sibling::*/@ss:Span"/>
+
+                                                       <xsl:value-of 
select="$currentCount + sum($allSpans) + count($allSpans)"/>
+                                               </xsl:otherwise>
+                                       </xsl:choose>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:variable>
+               <xsl:variable name="current-index">
+                       <xsl:choose>
+                               <xsl:when test="@ss:Index">
+                                       <xsl:value-of select="@ss:Index - 1"/>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:value-of 
select="$finishedColumns"/>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:variable>
+
+               <xsl:variable name="column-break">
+                       <xsl:choose>
+                               <xsl:when test="$span-value = 0">
+                                       <xsl:if 
test="../x:PageBreaks/x:ColBreaks/x:ColBreak/x:Column = $current-index">
+                                               <xsl:value-of select="1"/>
+                                       </xsl:if>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:if
+                                               
test="../x:PageBreaks/x:ColBreaks[(x:ColBreak/x:Column &gt; $finishedColumns) 
and (x:ColBreak/x:Column &lt; ($finishedColumns + $span-value))]">
+                                               <xsl:value-of select="1"/>
+                                       </xsl:if>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:variable>
+               <xsl:if test="$column-break = 1">
+                       <xsl:element name="style:style">
+                               <xsl:attribute name="style:name">
+                                       <xsl:call-template 
name="encode-as-nc-name">
+                                               <xsl:with-param name="string"
+                                                       select="concat('cob', 
$table-pos, '-',$currentCount)"/>
+                                       </xsl:call-template>
+                               </xsl:attribute>
+                               <xsl:attribute 
name="style:family">table-column</xsl:attribute>
                                <xsl:element 
name="style:table-column-properties">
                                        <xsl:choose>
-                                               <xsl:when 
test="./ss:Column[position() = $currentCount]/@ss:Width">
+                                               <xsl:when test="@ss:Width">
                                                        <xsl:attribute 
name="style:column-width">
                                                                
<xsl:call-template name="convert2cm">
-                                                                       
<xsl:with-param name="value" select="concat(./ss:Column[position() = 
$currentCount]/@ss:Width,'pt')"/>
+                                                                       
<xsl:with-param name="value"
+                                                                               
select="concat(@ss:Width,'pt')"
+                                                                       />
                                                                
</xsl:call-template>
                                                                
<xsl:text>cm</xsl:text>
                                                        </xsl:attribute>
@@ -5231,172 +5213,150 @@
                                                        </xsl:attribute>
                                                </xsl:otherwise>
                                        </xsl:choose>
-                                       <xsl:attribute 
name="fo:break-before">auto</xsl:attribute>
+                                       <xsl:choose>
+                                               <xsl:when
+                                                       test="@ss:AutoFitWidth 
= '0'">
+                                                       <xsl:attribute 
name="style:use-optimal-column-width"
+                                                               
>false</xsl:attribute>
+                                               </xsl:when>
+                                               <xsl:otherwise>
+                                                       <xsl:choose>
+                                                               <xsl:when
+                                                                       
test="@ss:Width &gt; 0">
+                                                                       
<xsl:attribute name="style:use-optimal-column-width"
+                                                                               
>false</xsl:attribute>
+                                                               </xsl:when>
+                                                               <xsl:otherwise>
+                                                                       
<xsl:attribute name="style:use-optimal-column-width"
+                                                                               
>true</xsl:attribute>
+                                                               </xsl:otherwise>
+                                                       </xsl:choose>
+                                               </xsl:otherwise>
+                                       </xsl:choose>
+                                       <xsl:attribute 
name="fo:break-before">page</xsl:attribute>
                                </xsl:element>
-                       </style:style>
-                       <xsl:if test="$currentCount &lt; $columnCount">
-                               <xsl:call-template name="get-column-style-name">
-                                       <xsl:with-param name="finishedColumns">
-                                               <xsl:choose>
-                                                       <xsl:when 
test="./ss:Column[position() = $currentCount]/@ss:Index">
-                                                               <xsl:choose>
-                                                                       
<xsl:when test="./ss:Column[position() = $currentCount]/@ss:Span">
-                                                                               
<xsl:value-of select="./ss:Column[position() = $currentCount]/@ss:Index + 
./ss:Column[position() = $currentCount]/@ss:Span"/>
-                                                                       
</xsl:when>
-                                                                       
<xsl:otherwise>
-                                                                               
<xsl:value-of select="./ss:Column[position() = $currentCount]/@ss:Index"/>
-                                                                       
</xsl:otherwise>
-                                                               </xsl:choose>
-                                                       </xsl:when>
-                                                       <xsl:otherwise>
-                                                               <xsl:choose>
-                                                                       
<xsl:when test="./ss:Column[position() = $currentCount]/@ss:Span">
-                                                                               
<xsl:value-of select="$finishedColumns + ./ss:Column[position() = 
$currentCount]/@ss:Span + 1"/>
-                                                                       
</xsl:when>
-                                                                       
<xsl:otherwise>
-                                                                               
<xsl:value-of select="$finishedColumns + 1"/>
-                                                                       
</xsl:otherwise>
-                                                               </xsl:choose>
-                                                       </xsl:otherwise>
-                                               </xsl:choose>
-                                       </xsl:with-param>
-                                       <xsl:with-param name="columnCount" 
select="$columnCount"/>
-                                       <xsl:with-param name="currentCount" 
select="$currentCount + 1"/>
-                                       <xsl:with-param name="table-pos" 
select="$table-pos"/>
-                                       <xsl:with-param 
name="default-column-width" select="$default-column-width"/>
-                               </xsl:call-template>
-                       </xsl:if>
+                       </xsl:element>
                </xsl:if>
-       </xsl:template>
-       <xsl:template name="get-row-style-name">
-               <!-- generate stylename of rowbreak after matching the row 
number and the rowbreak number -->
-               <xsl:param name="earlierRowNo"/>
-               <xsl:param name="rowNodeCount"/>
-               <xsl:param name="rowNodeIndex"/>
-               <xsl:param name="table-pos"/>
-               <xsl:param name="default-row-height"/>
-               <xsl:if test="$rowNodeIndex &lt; ($rowNodeCount + 1)">
-                       <xsl:variable name="span-value">
-                               <xsl:choose>
-                                       <xsl:when test="./ss:Row[position() = 
$rowNodeIndex]/@ss:Index">
-                                               <xsl:choose>
-                                                       <xsl:when 
test="./ss:Row[position() = $rowNodeIndex]/@ss:Span">
-                                                               <xsl:value-of 
select="./ss:Row[position() = $rowNodeIndex]/@ss:Index - $earlierRowNo+ 
./ss:Row[position() = $rowNodeIndex]/@ss:Span"/>
-                                                       </xsl:when>
-                                                       <xsl:otherwise>
-                                                               <xsl:value-of 
select="0"/>
-                                                       </xsl:otherwise>
-                                               </xsl:choose>
-                                       </xsl:when>
-                                       <xsl:otherwise>
-                                               <xsl:choose>
-                                                       <xsl:when 
test="./ss:Row[position() = $rowNodeIndex]/@ss:Span">
-                                                               <xsl:value-of 
select="./ss:Row[position() = $rowNodeIndex]/@ss:Span + 1"/>
-                                                       </xsl:when>
-                                                       <xsl:otherwise>
-                                                               <xsl:value-of 
select="0"/>
-                                                       </xsl:otherwise>
-                                               </xsl:choose>
-                                       </xsl:otherwise>
-                               </xsl:choose>
-                       </xsl:variable>
-                       <xsl:variable name="current-index">
+               <style:style style:name="{concat('co', $table-pos, 
'-',$currentCount)}"
+                       style:family="table-column">
+                       <xsl:element name="style:table-column-properties">
                                <xsl:choose>
-                                       <xsl:when test="./ss:Row[position() = 
$rowNodeIndex]/@ss:Index">
-                                               <xsl:value-of 
select="./ss:Row[position() = $rowNodeIndex]/@ss:Index - 1"/>
-                                       </xsl:when>
-                                       <xsl:otherwise>
-                                               <xsl:value-of 
select="$earlierRowNo"/>
-                                       </xsl:otherwise>
-                               </xsl:choose>
-                       </xsl:variable>
-                       <xsl:variable name="row-break">
-                               <xsl:choose>
-                                       <xsl:when test="$span-value = 0">
-                                               <xsl:if 
test="../x:PageBreaks/x:RowBreaks/x:RowBreak/x:Row = $current-index">
-                                                       <xsl:value-of 
select="1"/>
-                                               </xsl:if>
+                                       <xsl:when test="@ss:Width">
+                                               <xsl:attribute 
name="style:column-width">
+                                                       <xsl:call-template 
name="convert2cm">
+                                                               <xsl:with-param 
name="value"
+                                                                       
select="concat(@ss:Width,'pt')"
+                                                               />
+                                                       </xsl:call-template>
+                                                       <xsl:text>cm</xsl:text>
+                                               </xsl:attribute>
                                        </xsl:when>
                                        <xsl:otherwise>
-                                               <xsl:if 
test="../x:PageBreaks/x:RowBreaks[(x:RowBreak/x:Row &gt; $earlierRowNo) and 
(x:RowBreak/x:Row &lt; ($earlierRowNo + $span-value))]">
-                                                       <xsl:value-of 
select="1"/>
-                                               </xsl:if>
+                                               <xsl:attribute 
name="style:column-width">
+                                                       <xsl:value-of 
select="$default-column-width"/>
+                                               </xsl:attribute>
                                        </xsl:otherwise>
                                </xsl:choose>
-                       </xsl:variable>
-                       <xsl:if test="$row-break = 1">
-                               <xsl:element name="style:style">
+                               <xsl:attribute 
name="fo:break-before">auto</xsl:attribute>
+                       </xsl:element>
+               </style:style>
+       </xsl:template>
+       
+       <xsl:template match="ss:Row" mode="create-row-style">
+               <!-- generate stylename of rowbreak after matching the row 
number and the rowbreak number -->
+               <xsl:param name="rowNodeCount"/>
+               <xsl:param name="rowNodeIndex" select="position()"/>
+               <xsl:param name="table-pos"/>
+               <xsl:param name="default-row-height"/>
+               <xsl:variable name="simple-span-value" select="@ss:Span + 
count(@ss:Span)"/>
+               
+               <xsl:variable name="earlierRowNo">
+                       <xsl:choose>
+                               <xsl:when test="@ss:Index"><xsl:value-of 
select="@ss:Index -1 + $simple-span-value"/></xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:variable name="recent-index" 
select="preceding-sibling::*[@ss:Index][last()]"></xsl:variable>
                                        <xsl:choose>
-                                               <xsl:when 
test="./ss:Row[position() = $rowNodeIndex]/@ss:StyleID">
-                                                       <xsl:attribute 
name="style:name"><xsl:value-of select="concat('ro', $table-pos, 
'-',$rowNodeIndex,'-',ss:Row[position() = 
$rowNodeIndex]/@ss:StyleID)"/></xsl:attribute>
+                                               <xsl:when test="$recent-index">
+                                                       <xsl:variable 
name="nodes-up-to-current" select="set:intersection(preceding-sibling::*, 
$recent-index/following-sibling::*)"></xsl:variable>
+                                                       <xsl:variable 
name="allSpans" select="$nodes-up-to-current/@ss:Span"/>
+                                                       <xsl:value-of 
select="$recent-index/@ss:Index + count($nodes-up-to-current) + sum($allSpans) 
+ count($allSpans)"/>
                                                </xsl:when>
                                                <xsl:otherwise>
-                                                       <xsl:attribute 
name="style:name"><xsl:value-of select="concat('ro', $table-pos, 
'-',$rowNodeIndex)"/></xsl:attribute>
+                                                       <xsl:variable 
name="allSpans" select="preceding-sibling::*/@ss:Span"/>
+                                                       <xsl:value-of 
select="position() + sum($allSpans) + count($allSpans)"/>
                                                </xsl:otherwise>
                                        </xsl:choose>
-                                       <xsl:attribute 
name="style:family">table-row</xsl:attribute>
-
-
-                                       <xsl:element 
name="style:table-row-properties">
-                                               <xsl:choose>
-                                                       <xsl:when 
test="./ss:Row[position() = $rowNodeIndex]/@ss:Height">
-                                                               <xsl:attribute 
name="style:row-height">
-                                                                       
<xsl:call-template name="convert2cm">
-                                                                               
<xsl:with-param name="value" select="concat(./ss:Row[position() = 
$rowNodeIndex]/@ss:Height,'pt')"/>
-                                                                       
</xsl:call-template>
-                                                                       
<xsl:text>cm</xsl:text>
-                                                               </xsl:attribute>
-                                                       </xsl:when>
-                                                       <xsl:otherwise>
-                                                               <xsl:attribute 
name="style:row-height">
-                                                                       
<xsl:value-of select="$default-row-height"/>
-                                                               </xsl:attribute>
-                                                       </xsl:otherwise>
-                                               </xsl:choose>
-                                               <xsl:choose>
-                                                       <xsl:when 
test="./ss:Row[position() = $rowNodeIndex]/@ss:AutoFitHeight = '0'">
-                                                               <xsl:attribute 
name="style:use-optimal-row-height">false</xsl:attribute>
-                                                       </xsl:when>
-                                                       <xsl:otherwise>
-                                                               <xsl:choose>
-                                                                       
<xsl:when test="./ss:Row[position() = $rowNodeIndex]/@ss:Height &gt; 0">
-                                                                               
<xsl:attribute name="style:use-optimal-row-height">false</xsl:attribute>
-                                                                       
</xsl:when>
-                                                                       
<xsl:otherwise>
-                                                                               
<xsl:attribute name="style:use-optimal-row-height">true</xsl:attribute>
-                                                                       
</xsl:otherwise>
-                                                               </xsl:choose>
-                                                       </xsl:otherwise>
-                                               </xsl:choose>
-                                               <xsl:attribute 
name="fo:break-before">page</xsl:attribute>
-                                               <xsl:apply-templates 
select="key('Style', ss:Row[position() = 
$rowNodeIndex]/@ss:StyleID)/ss:Interior" mode="style-style-content"/>
-                                       </xsl:element>
-                                       <!--
-                                               <xsl:apply-templates 
select="key('Style', ss:Row[position() = $rowNodeIndex]/@ss:StyleID)" 
mode="style-style-content" />
-                                       -->
-                               </xsl:element>
-                       </xsl:if>
-                       <!--
-                       <style:style style:name="{concat('ro', $table-pos, 
'-',$rowNodeIndex)}" style:family="table-row">
-                       -->
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:variable>
+               <xsl:variable name="span-value">
+                       <xsl:choose>
+                               <xsl:when test="@ss:Index">
+                                       <xsl:choose>
+                                               <xsl:when test="@ss:Span">
+                                                       <xsl:value-of 
select="@ss:Index - $earlierRowNo + @ss:Span"/>
+                                               </xsl:when>
+                                               <xsl:otherwise>
+                                                       <xsl:value-of 
select="0"/>
+                                               </xsl:otherwise>
+                                       </xsl:choose>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:choose>
+                                               <xsl:when test="@ss:Span">
+                                                       <xsl:value-of 
select="@ss:Span + 1"/>
+                                               </xsl:when>
+                                               <xsl:otherwise>
+                                                       <xsl:value-of 
select="0"/>
+                                               </xsl:otherwise>
+                                       </xsl:choose>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:variable>
+                       
+               <xsl:variable name="current-index">
+                       <xsl:choose>
+                               <xsl:when test="@ss:Index">
+                                       <xsl:value-of select="@ss:Index - 1"/>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:value-of select="$earlierRowNo"/>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:variable>
+               <xsl:variable name="row-break">
+                       <xsl:choose>
+                               <xsl:when test="$span-value = 0">
+                                       <xsl:if 
test="../x:PageBreaks/x:RowBreaks/x:RowBreak/x:Row = $current-index">
+                                               <xsl:value-of select="1"/>
+                                       </xsl:if>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:if 
test="../x:PageBreaks/x:RowBreaks[(x:RowBreak/x:Row &gt; $earlierRowNo) and 
(x:RowBreak/x:Row &lt; ($earlierRowNo + $span-value))]">
+                                               <xsl:value-of select="1"/>
+                                       </xsl:if>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:variable>
+               <xsl:if test="$row-break = 1">
                        <xsl:element name="style:style">
                                <xsl:choose>
-                                       <xsl:when test="./ss:Row[position() = 
$rowNodeIndex]/@ss:StyleID">
-                                               <xsl:attribute 
name="style:name"><xsl:value-of select="concat('ro', $table-pos, 
'-',$rowNodeIndex,'-',ss:Row[position() = 
$rowNodeIndex]/@ss:StyleID)"/></xsl:attribute>
+                                       <xsl:when test="@ss:StyleID">
+                                               <xsl:attribute 
name="style:name"><xsl:value-of select="concat('ro', $table-pos, 
'-',$rowNodeIndex,'-',@ss:StyleID)"/></xsl:attribute>
                                        </xsl:when>
                                        <xsl:otherwise>
                                                <xsl:attribute 
name="style:name"><xsl:value-of select="concat('ro', $table-pos, 
'-',$rowNodeIndex)"/></xsl:attribute>
                                        </xsl:otherwise>
                                </xsl:choose>
                                <xsl:attribute 
name="style:family">table-row</xsl:attribute>
-
-
+                               
+                               
                                <xsl:element name="style:table-row-properties">
                                        <xsl:choose>
-                                               <xsl:when 
test="./ss:Row[position() = $rowNodeIndex]/@ss:Height">
+                                               <xsl:when test="@ss:Height">
                                                        <xsl:attribute 
name="style:row-height">
                                                                
<xsl:call-template name="convert2cm">
-                                                                       
<xsl:with-param name="value" select="concat(./ss:Row[position() = 
$rowNodeIndex]/@ss:Height,'pt')"/>
+                                                                       
<xsl:with-param name="value" select="concat(@ss:Height,'pt')"/>
                                                                
</xsl:call-template>
                                                                
<xsl:text>cm</xsl:text>
                                                        </xsl:attribute>
@@ -5408,19 +5368,12 @@
                                                </xsl:otherwise>
                                        </xsl:choose>
                                        <xsl:choose>
-                                               <xsl:when 
test="./ss:Row[position() = $rowNodeIndex]/@ss:AutoFitHeight">
-                                                       <xsl:choose>
-                                                               <xsl:when 
test="./ss:Row[position() = $rowNodeIndex]/@ss:AutoFitHeight = '0'">
-                                                                       
<xsl:attribute name="style:use-optimal-row-height">false</xsl:attribute>
-                                                               </xsl:when>
-                                                               <xsl:otherwise>
-                                                                       
<xsl:attribute name="style:use-optimal-row-height">true</xsl:attribute>
-                                                               </xsl:otherwise>
-                                                       </xsl:choose>
+                                               <xsl:when 
test="@ss:AutoFitHeight = '0'">
+                                                       <xsl:attribute 
name="style:use-optimal-row-height">false</xsl:attribute>
                                                </xsl:when>
                                                <xsl:otherwise>
                                                        <xsl:choose>
-                                                               <xsl:when 
test="./ss:Row[position() = $rowNodeIndex]/@ss:Height &gt; 0">
+                                                               <xsl:when 
test="@ss:Height &gt; 0">
                                                                        
<xsl:attribute name="style:use-optimal-row-height">false</xsl:attribute>
                                                                </xsl:when>
                                                                <xsl:otherwise>
@@ -5429,48 +5382,79 @@
                                                        </xsl:choose>
                                                </xsl:otherwise>
                                        </xsl:choose>
-                                       <xsl:attribute 
name="fo:break-before">auto</xsl:attribute>
-                                       <!-- apply to background  -->
-                                       <xsl:apply-templates 
select="key('Style', ss:Row[position() = 
$rowNodeIndex]/@ss:StyleID)/ss:Interior" mode="style-style-content"/>
+                                       <xsl:attribute 
name="fo:break-before">page</xsl:attribute>
+                                       <xsl:apply-templates 
select="key('Style', @ss:StyleID)/ss:Interior" mode="style-style-content"/>
                                </xsl:element>
                                <!--
-                               <xsl:apply-templates select="key('Style', 
ss:Row[position() = $rowNodeIndex]/@ss:StyleID)" mode="style-style-content" />
+                                       <xsl:apply-templates 
select="key('Style', @ss:StyleID)" mode="style-style-content" />
                                -->
                        </xsl:element>
-                       <xsl:if test="$rowNodeIndex &lt; $rowNodeCount">
-                               <xsl:call-template name="get-row-style-name">
-                                       <xsl:with-param name="earlierRowNo">
+               </xsl:if>
+               <!--
+                       <style:style style:name="{concat('ro', $table-pos, 
'-',$rowNodeIndex)}" style:family="table-row">
+               -->
+               <xsl:element name="style:style">
+                       <xsl:choose>
+                               <xsl:when test="@ss:StyleID">
+                                       <xsl:attribute 
name="style:name"><xsl:value-of select="concat('ro', $table-pos, 
'-',$rowNodeIndex,'-',@ss:StyleID)"/></xsl:attribute>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:attribute 
name="style:name"><xsl:value-of select="concat('ro', $table-pos, 
'-',$rowNodeIndex)"/></xsl:attribute>
+                               </xsl:otherwise>
+                       </xsl:choose>
+                       <xsl:attribute 
name="style:family">table-row</xsl:attribute>
+                       
+                       
+                       <xsl:element name="style:table-row-properties">
+                               <xsl:choose>
+                                       <xsl:when test="@ss:Height">
+                                               <xsl:attribute 
name="style:row-height">
+                                                       <xsl:call-template 
name="convert2cm">
+                                                               <xsl:with-param 
name="value" select="concat(@ss:Height,'pt')"/>
+                                                       </xsl:call-template>
+                                                       <xsl:text>cm</xsl:text>
+                                               </xsl:attribute>
+                                       </xsl:when>
+                                       <xsl:otherwise>
+                                               <xsl:attribute 
name="style:row-height">
+                                                       <xsl:value-of 
select="$default-row-height"/>
+                                               </xsl:attribute>
+                                       </xsl:otherwise>
+                               </xsl:choose>
+                               <xsl:choose>
+                                       <xsl:when test="@ss:AutoFitHeight">
                                                <xsl:choose>
-                                                       <xsl:when 
test="./ss:Row[position() = $rowNodeIndex]/@ss:Index">
-                                                               <xsl:choose>
-                                                                       
<xsl:when test="./ss:Row[position() = $rowNodeIndex]/@ss:Span">
-                                                                               
<xsl:value-of select="./ss:Row[position() = $rowNodeIndex]/@ss:Index + 
./ss:Row[position() = $rowNodeIndex]/@ss:Span"/>
-                                                                       
</xsl:when>
-                                                                       
<xsl:otherwise>
-                                                                               
<xsl:value-of select="./ss:Row[position() = $rowNodeIndex]/@ss:Index"/>
-                                                                       
</xsl:otherwise>
-                                                               </xsl:choose>
+                                                       <xsl:when 
test="@ss:AutoFitHeight = '0'">
+                                                               <xsl:attribute 
name="style:use-optimal-row-height">false</xsl:attribute>
                                                        </xsl:when>
                                                        <xsl:otherwise>
-                                                               <xsl:choose>
-                                                                       
<xsl:when test="./ss:Row[position() = $rowNodeIndex]/@ss:Span">
-                                                                               
<xsl:value-of select="$earlierRowNo + ./ss:Row[position() = 
$rowNodeIndex]/@ss:Span + 1"/>
-                                                                       
</xsl:when>
-                                                                       
<xsl:otherwise>
-                                                                               
<xsl:value-of select="$earlierRowNo + 1"/>
-                                                                       
</xsl:otherwise>
-                                                               </xsl:choose>
+                                                               <xsl:attribute 
name="style:use-optimal-row-height">true</xsl:attribute>
                                                        </xsl:otherwise>
                                                </xsl:choose>
-                                       </xsl:with-param>
-                                       <xsl:with-param name="rowNodeCount" 
select="$rowNodeCount"/>
-                                       <xsl:with-param name="rowNodeIndex" 
select="$rowNodeIndex + 1"/>
-                                       <xsl:with-param name="table-pos" 
select="$table-pos"/>
-                                       <xsl:with-param 
name="default-row-height" select="$default-row-height"/>
-                               </xsl:call-template>
-                       </xsl:if>
-               </xsl:if>
+                                       </xsl:when>
+                                       <xsl:otherwise>
+                                               <xsl:choose>
+                                                       <xsl:when 
test="@ss:Height &gt; 0">
+                                                               <xsl:attribute 
name="style:use-optimal-row-height">false</xsl:attribute>
+                                                       </xsl:when>
+                                                       <xsl:otherwise>
+                                                               <xsl:attribute 
name="style:use-optimal-row-height">true</xsl:attribute>
+                                                       </xsl:otherwise>
+                                               </xsl:choose>
+                                       </xsl:otherwise>
+                               </xsl:choose>
+                               <xsl:attribute 
name="fo:break-before">auto</xsl:attribute>
+                               <!-- apply to background  -->
+                               <xsl:apply-templates select="key('Style', 
@ss:StyleID)/ss:Interior" mode="style-style-content"/>
+                       </xsl:element>
+                       <!--
+                               <xsl:apply-templates select="key('Style', 
ss:Row[position() = $rowNodeIndex]/@ss:StyleID)" mode="style-style-content" />
+                       -->
+               </xsl:element>
+
+               
        </xsl:template>
+
        <xsl:template name="count-spanned-columns">
                <xsl:param name="expandedColumnCount" select="0"/>
                <xsl:param name="columns"/>
@@ -5582,9 +5566,25 @@
                                <xsl:variable name="condition-pos-str" 
select="concat($condition-pos-str1, $condition-pos-str2)"/>
                                <xsl:choose>
                                        <xsl:when test="./ss:Table/ss:Row">
-                                               <xsl:call-template 
name="create-rows">
-                                                       <xsl:with-param 
name="condition-pos-str" select="$condition-pos-str"/>
-                                               </xsl:call-template>
+                                               <xsl:variable 
name="worksheetNo" select="count(preceding-sibling::ss:Worksheet)+1"/>
+                                               <xsl:variable 
name="rowNodeCount" select="count(ss:Table/ss:Row)"/>
+                                               <xsl:variable 
name="expandedRowCount">
+                                                       <xsl:call-template 
name="get-expanded-row-count"/>
+                                               </xsl:variable>
+                                               <xsl:variable 
name="expandedColumnCount">
+                                                       <xsl:call-template 
name="get-expanded-column-count"/>
+                                               </xsl:variable>
+                                               <xsl:for-each 
select="ss:Table/ss:Row">
+                                                       <xsl:apply-templates 
select="." mode="create-rows">
+                                                               <xsl:with-param 
name="condition-pos-str" select="$condition-pos-str"/>
+                                                               <xsl:with-param 
name="worksheetNo" select="$worksheetNo"/>
+                                                               <xsl:with-param 
name="rowNodeCount" select="$rowNodeCount"/>
+                                                               <xsl:with-param 
name="rowNodeIndex" select="position()"/>
+                                                               <xsl:with-param 
name="expandedRowCount" select="$expandedRowCount"/>
+                                                               <xsl:with-param 
name="expandedRowCountIndex" select="1"/>
+                                                               <xsl:with-param 
name="expandedColumnCount" select="$expandedColumnCount"/>
+                                                       </xsl:apply-templates>
+                                               </xsl:for-each>
                                        </xsl:when>
                                        <xsl:otherwise>
                                                <xsl:choose>
@@ -5970,11 +5970,30 @@
        <xsl:template match="ss:Row" mode="create-rows">
                <xsl:param name="worksheetNo"/>
                <xsl:param name="rowNodeCount"/>
-               <xsl:param name="rowNodeIndex" select="1"/>
+               <xsl:param name="rowNodeIndex"/>
                <xsl:param name="expandedRowCount"/>
-               <xsl:param name="expandedRowCountIndex" select="1"/>
                <xsl:param name="expandedColumnCount"/>
                <xsl:param name="condition-pos-str"/>
+               <xsl:variable name="simple-span-value" select="@ss:Span + 
count(@ss:Span)"/>
+               <xsl:variable name="expandedRowCountIndex">
+                               <xsl:choose>
+                                       <xsl:when 
test="@ss:Index"><xsl:value-of select="@ss:Index -1 + 
$simple-span-value"/></xsl:when>
+                                       <xsl:otherwise>
+                                               <xsl:variable 
name="recent-index" 
select="preceding-sibling::*[@ss:Index][last()]"></xsl:variable>
+                                               <xsl:choose>
+                                                       <xsl:when 
test="$recent-index">
+                                                               <xsl:variable 
name="nodes-up-to-current" select="set:intersection(preceding-sibling::*, 
$recent-index/following-sibling::*)"></xsl:variable>
+                                                               <xsl:variable 
name="allSpans" select="$nodes-up-to-current/@ss:Span"/>
+                                                               <xsl:value-of 
select="$recent-index/@ss:Index + count($nodes-up-to-current) + sum($allSpans) 
+ count($allSpans)"/>
+                                                       </xsl:when>
+                                                       <xsl:otherwise>
+                                                               <xsl:variable 
name="allSpans" select="preceding-sibling::*/@ss:Span"/>
+                                                               <xsl:value-of 
select="$rowNodeIndex + sum($allSpans) + count($allSpans)"/>
+                                                       </xsl:otherwise>
+                                               </xsl:choose>
+                                       </xsl:otherwise>
+                               </xsl:choose>
+               </xsl:variable>
                <xsl:variable name="currentRowNo">
                        <xsl:choose>
                                <xsl:when test="@ss:Index">
@@ -6026,16 +6045,16 @@
                                <!-- Excel row without content -->
                                <xsl:when test="not(*)">
                                        <!-- OASIS OpenDocument Format does not 
allow rows without a cell -->
-                               <xsl:choose>
-                                       <xsl:when test="$expandedColumnCount != 
0">
-                                               <table:table-cell 
table:number-columns-repeated="{$expandedColumnCount}"/>
-                                       </xsl:when>
-                                       <xsl:otherwise>
-                                               <!-- OASIS XML row can not be 
empty -->
-                                               <table:table-cell 
table:number-columns-repeated="256"/>
-                                       </xsl:otherwise>
-                               </xsl:choose>
-
+                                       <xsl:choose>
+                                               <xsl:when 
test="$expandedColumnCount != 0">
+                                                       <table:table-cell 
table:number-columns-repeated="{$expandedColumnCount}"/>
+                                               </xsl:when>
+                                               <xsl:otherwise>
+                                                       <!-- OASIS XML row can 
not be empty -->
+                                                       <table:table-cell 
table:number-columns-repeated="256"/>
+                                               </xsl:otherwise>
+                                       </xsl:choose>
+                                       
                                </xsl:when>
                                <xsl:otherwise>
                                        <xsl:call-template name="create-cells">
@@ -6046,53 +6065,9 @@
                                </xsl:otherwise>
                        </xsl:choose>
                </xsl:element>
-               <!-- columns are painting over the expanded RowCount -->
-               <xsl:choose>
-                       <xsl:when test="count(following-sibling::ss:Row) != 0">
-                               <xsl:apply-templates 
select="following-sibling::ss:Row[1]" mode="create-rows">
-                                       <xsl:with-param name="worksheetNo" 
select="$worksheetNo"/>
-                                       <xsl:with-param name="rowNodeCount" 
select="$rowNodeCount"/>
-                                       <xsl:with-param name="rowNodeIndex" 
select="$rowNodeIndex + 1"/>
-                                       <xsl:with-param name="expandedRowCount" 
select="$expandedRowCount"/>
-                                       <xsl:with-param 
name="expandedRowCountIndex">
-                                               <xsl:choose>
-                                                       <xsl:when 
test="@ss:Index and @ss:Span">
-                                                               <xsl:value-of 
select="@ss:Index + @ss:Span + 1"/>
-                                                       </xsl:when>
-                                                       <xsl:when 
test="@ss:Index">
-                                                               <xsl:value-of 
select="@ss:Index + 1"/>
-                                                       </xsl:when>
-                                                       <xsl:when 
test="@ss:Span">
-                                                               <xsl:value-of 
select="$expandedRowCountIndex + @ss:Span + 1"/>
-                                                       </xsl:when>
-                                                       <xsl:otherwise>
-                                                               <xsl:value-of 
select="$expandedRowCountIndex + 1"/>
-                                                       </xsl:otherwise>
-                                               </xsl:choose>
-                                       </xsl:with-param>
-                                       <xsl:with-param 
name="expandedColumnCount" select="$expandedColumnCount"/>
-                                       <xsl:with-param 
name="condition-pos-str" select="$condition-pos-str"/>
-                               </xsl:apply-templates>
-                       </xsl:when>
-                       <xsl:when test="$currentRowNo &lt; 65536">
-                               <xsl:element name="table:table-row">
-                                       <!-- fill the preceding gap with rows 
without a cell -->
-                                       <xsl:attribute 
name="table:number-rows-repeated">
-                                               <xsl:value-of select="65536 - 
$currentRowNo"/>
-                                       </xsl:attribute>
-                                       <xsl:choose>
-                                               <xsl:when 
test="$expandedColumnCount != 0">
-                                                       <table:table-cell 
table:number-columns-repeated="{$expandedColumnCount}"/>
-                                               </xsl:when>
-                                               <xsl:otherwise>
-                                                       <!-- OASIS XML row can 
not be empty -->
-                                                       <table:table-cell 
table:number-columns-repeated="256"/>
-                                               </xsl:otherwise>
-                                       </xsl:choose>
-                               </xsl:element>
-                       </xsl:when>
-               </xsl:choose>
+               
        </xsl:template>
+
        <xsl:template name="get-expanded-column-count">
                <xsl:choose>
                        <xsl:when test="ss:Table/@ss:ExpandedColumnCount">
commit 8fdef3e8d8ead3903795df87cbf66256691542b1
Author: Peter Jentsch <pj...@guineapics.de>
Date:   Tue May 1 00:16:34 2012 +0200

    optimized handling of ConditionalFormatting elements
    
    Removed ill-performing key definitions.
    Also fixes bug with bogus expression quoting within formatting conditions.
    
    Change-Id: Iab9b26f30ac7f780acb8a4e1397aaf2f4fa490f4

diff --git a/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl 
b/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
index 71f1baa..cd223f8 100644
--- a/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
+++ b/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
@@ -764,117 +764,122 @@
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
-       <xsl:key match="/ss:Workbook/ss:Worksheet/ss:Table" 
name="tableWithConditional" use="following-sibling::x:ConditionalFormatting"/>
-       <xsl:key match="ss:Table/ss:Row/ss:Cell/@ss:StyleID" 
name="tableStyleIDs" use="ancestor::ss:Table"/>
+       
+       <xsl:key name="definedStyleIds" 
match="/ss:Workbook/ss:Styles/ss:Style/@ss:ID" use="string(.)"/>
+       <xsl:variable name="defaultStyle" 
select="/ss:Workbook/ss:Styles/ss:Style[@ss:ID='Default']/@ss:ID"></xsl:variable>
        <xsl:key name="styleId" match="@ss:StyleID" use="."/>
        <xsl:template name="CondFormat_automatic_style">
                <!-- For each conditionalFormatting We inject a new style, 
which is a child of the current found style -->
-               <xsl:for-each 
select="/ss:Workbook/ss:Worksheet/x:ConditionalFormatting">
-                       <xsl:variable name="table-pos" 
select="count(../preceding-sibling::ss:Worksheet)+1"/>
-                       <xsl:variable name="conditions" 
select="count(preceding-sibling::x:ConditionalFormatting)+1"/>
-                       <xsl:variable name="conditionalFormatting" select="."/>
-                       <!-- for all 'ssStyle/@ss:ID's, which are in tables 
connected within this conditional formatting  -->
-                       <xsl:for-each select="key('tableStyleIDs', 
key('tableWithConditional', .)) [generate-id(.) = generate-id(key('styleId', 
.)[1])] ">
-                               <!-- sort the style ID by their naming -->
-                               <xsl:sort select="."/>
-                               <xsl:element name="style:style">
-                                       <xsl:attribute name="style:name">
-                                               <xsl:call-template 
name="encode-as-nc-name">
-                                                       <xsl:with-param 
name="string" select="concat(.,'-ce',$table-pos,'-',$conditions)"/>
-                                               </xsl:call-template>
-                                       </xsl:attribute>
-                                       <xsl:attribute 
name="style:family">table-cell</xsl:attribute>
-                                       <xsl:variable name="style" 
select="key('Style', .)" />
-                                       <xsl:choose>
-                                               <xsl:when 
test="$style/@ss:Name">
-                                                       <xsl:attribute 
name="style:parent-style-name">
-                                                               
<xsl:call-template name="encode-as-nc-name">
-                                                                       
<xsl:with-param name="string" select="."/>
+               <xsl:for-each 
select="/ss:Workbook/ss:Worksheet[x:ConditionalFormatting]">
+                       <xsl:variable name="table-pos" 
select="count(preceding-sibling::ss:Worksheet)+1"/>
+                       <xsl:variable name="styleIdsUsedByTable" 
select="$defaultStyle | key('definedStyleIds', 
ss:Table/ss:Row/ss:Cell/@ss:StyleID)"/>
+                       <xsl:for-each select="x:ConditionalFormatting">
+                               <xsl:variable name="conditions" 
select="position()"/>
+                               <xsl:variable name="conditionalFormatting" 
select="."/>
+                               <!-- we want to loop over the distinct styleId 
attribute values of all cells within the table related to the current 
conditional formatting. -->
+                               <!-- We'd need to add the anonymous style id 
"Default" to the mix. -->
+                               <!-- for all 'ssStyle/@ss:ID's, which are in 
tables connected within this conditional formatting  -->
+                               <!-- <xsl:for-each select="key('tableStyleIDs', 
generate-id(preceding-sibling::ss:Table)) [generate-id(.) = 
generate-id(key('styleId', .)[1])] "> -->
+                               <xsl:for-each select="$styleIdsUsedByTable">
+                                       <xsl:element name="style:style">
+                                               <xsl:attribute 
name="style:name">
+                                                       <xsl:call-template 
name="encode-as-nc-name">
+                                                               <xsl:with-param 
name="string" select="concat(.,'-ce',$table-pos,'-',$conditions)"/>
+                                                       </xsl:call-template>
+                                               </xsl:attribute>
+                                               <xsl:attribute 
name="style:family">table-cell</xsl:attribute>
+                                               <xsl:variable name="style" 
select="key('Style', .)" />
+                                               <xsl:choose>
+                                                       <xsl:when 
test="$style/@ss:Name">
+                                                               <xsl:attribute 
name="style:parent-style-name">
+                                                                       
<xsl:call-template name="encode-as-nc-name">
+                                                                               
<xsl:with-param name="string" select="."/>
+                                                                       
</xsl:call-template>
+                                                               </xsl:attribute>
+                                                       </xsl:when>
+                                                       <!-- as we create an 
automatic style, the parent is not allowed to be an automatic style as well
+                                                               if the parent 
would be a automatic (unnamed) style, the style information have to be embedded 
to this style -->
+                                                       <xsl:otherwise>
+                                                               <xsl:attribute 
name="style:parent-style-name">
+                                                                       
<xsl:call-template name="encode-as-nc-name">
+                                                                               
<xsl:with-param name="string" select="$style/@ss:Parent"/>
+                                                                       
</xsl:call-template>
+                                                               </xsl:attribute>
+                                                               <xsl:if 
test="$style/ss:NumberFormat/@ss:Format">
+                                                                       
<xsl:attribute name="style:data-style-name">
+                                                                               
<xsl:value-of select="concat($style/@ss:ID, 'F')"/>
+                                                                       
</xsl:attribute>
+                                                               </xsl:if>
+                                                               
<xsl:apply-templates select="$style" mode="style-style-content"/>
+                                                       </xsl:otherwise>
+                                               </xsl:choose>
+                                               <xsl:for-each 
select="$conditionalFormatting/x:Condition">
+                                                       <xsl:variable 
name="condition-number" select="count(preceding-sibling::x:Condition)+1"/>
+                                                       <xsl:variable 
name="base-address">
+                                                               <xsl:choose>
+                                                                       
<xsl:when test="contains(../x:Range,',')">
+                                                                               
<xsl:choose>
+                                                                               
        <xsl:when test="contains(substring-before(../x:Range,','),':')">
+                                                                               
                <xsl:value-of 
select="substring-before(substring-after(../x:Range,':'),',')"/>
+                                                                               
        </xsl:when>
+                                                                               
        <xsl:otherwise>
+                                                                               
                <xsl:value-of select="substring-before(../x:Range,',')"/>
+                                                                               
        </xsl:otherwise>
+                                                                               
</xsl:choose>
+                                                                       
</xsl:when>
+                                                                       
<xsl:otherwise>
+                                                                               
<xsl:value-of select="../x:Range"/>
+                                                                       
</xsl:otherwise>
+                                                               </xsl:choose>
+                                                       </xsl:variable>
+                                                       <xsl:variable 
name="columnNumber">
+                                                               <xsl:choose>
+                                                                       
<xsl:when test="contains($base-address, ':')">
+                                                                               
<xsl:value-of select="substring-after(substring-after($base-address, 
':'),'C')"/>
+                                                                       
</xsl:when>
+                                                                       
<xsl:otherwise>
+                                                                               
<xsl:value-of select="substring-after($base-address,'C')"/>
+                                                                       
</xsl:otherwise>
+                                                               </xsl:choose>
+                                                       </xsl:variable>
+                                                       <xsl:variable 
name="rowNumber">
+                                                               <xsl:choose>
+                                                                       
<xsl:when test="contains($base-address, ':')">
+                                                                               
<xsl:value-of 
select="substring-before(substring-after(substring-after($base-address, 
':'),'R'),'C')"/>
+                                                                       
</xsl:when>
+                                                                       
<xsl:otherwise>
+                                                                               
<xsl:value-of 
select="substring-before(substring-after($base-address,'R'),'C')"/>
+                                                                       
</xsl:otherwise>
+                                                               </xsl:choose>
+                                                       </xsl:variable>
+                                                       <xsl:variable 
name="base-cell-address">
+                                                               
<xsl:call-template name="translate-unit">
+                                                                       
<xsl:with-param name="column-number" select="$columnNumber"/>
+                                                                       
<xsl:with-param name="row-number" select="$rowNumber"/>
+                                                                       
<xsl:with-param name="column-pos-style" select="'relative'"/>
+                                                                       
<xsl:with-param name="row-pos-style" select="'relative'"/>
                                                                
</xsl:call-template>
-                                                       </xsl:attribute>
-                                               </xsl:when>
-                                               <!-- as we create an automatic 
style, the parent is not allowed to be an automatic style as well
-                                                        if the parent would be 
a automatic (unnamed) style, the style information have to be embedded to this 
style -->
-                                               <xsl:otherwise>
-                                                       <xsl:attribute 
name="style:parent-style-name">
-                                                               
<xsl:call-template name="encode-as-nc-name">
-                                                                       
<xsl:with-param name="string" select="$style/@ss:Parent"/>
+                                                       </xsl:variable>
+                                                       <xsl:variable 
name="condition-value">
+                                                               
<xsl:call-template name="translate-condition">
+                                                                       
<xsl:with-param name="cell-column-pos" select="$columnNumber"/>
+                                                                       
<xsl:with-param name="cell-row-pos" select="$rowNumber"/>
                                                                
</xsl:call-template>
-                                                       </xsl:attribute>
-                                                       <xsl:if 
test="$style/ss:NumberFormat/@ss:Format">
-                                                               <xsl:attribute 
name="style:data-style-name">
-                                                                       
<xsl:value-of select="concat($style/@ss:ID, 'F')"/>
+                                                       </xsl:variable>
+                                                       <xsl:element 
name="style:map">
+                                                               <xsl:attribute 
name="style:condition">
+                                                                       
<xsl:value-of select="$condition-value"/>
                                                                </xsl:attribute>
-                                                       </xsl:if>
-                                                       <xsl:apply-templates 
select="$style" mode="style-style-content"/>
-                                               </xsl:otherwise>
-                                       </xsl:choose>
-                                       <xsl:for-each 
select="$conditionalFormatting/x:Condition">
-                                               <xsl:variable 
name="condition-number" select="count(preceding-sibling::x:Condition)+1"/>
-                                               <xsl:variable 
name="base-address">
-                                                       <xsl:choose>
-                                                               <xsl:when 
test="contains(../x:Range,',')">
-                                                                       
<xsl:choose>
-                                                                               
<xsl:when test="contains(substring-before(../x:Range,','),':')">
-                                                                               
        <xsl:value-of 
select="substring-before(substring-after(../x:Range,':'),',')"/>
-                                                                               
</xsl:when>
-                                                                               
<xsl:otherwise>
-                                                                               
        <xsl:value-of select="substring-before(../x:Range,',')"/>
-                                                                               
</xsl:otherwise>
-                                                                       
</xsl:choose>
-                                                               </xsl:when>
-                                                               <xsl:otherwise>
-                                                                       
<xsl:value-of select="../x:Range"/>
-                                                               </xsl:otherwise>
-                                                       </xsl:choose>
-                                               </xsl:variable>
-                                               <xsl:variable 
name="columnNumber">
-                                                       <xsl:choose>
-                                                               <xsl:when 
test="contains($base-address, ':')">
-                                                                       
<xsl:value-of select="substring-after(substring-after($base-address, 
':'),'C')"/>
-                                                               </xsl:when>
-                                                               <xsl:otherwise>
-                                                                       
<xsl:value-of select="substring-after($base-address,'C')"/>
-                                                               </xsl:otherwise>
-                                                       </xsl:choose>
-                                               </xsl:variable>
-                                               <xsl:variable name="rowNumber">
-                                                       <xsl:choose>
-                                                               <xsl:when 
test="contains($base-address, ':')">
-                                                                       
<xsl:value-of 
select="substring-before(substring-after(substring-after($base-address, 
':'),'R'),'C')"/>
-                                                               </xsl:when>
-                                                               <xsl:otherwise>
-                                                                       
<xsl:value-of 
select="substring-before(substring-after($base-address,'R'),'C')"/>
-                                                               </xsl:otherwise>
-                                                       </xsl:choose>
-                                               </xsl:variable>
-                                               <xsl:variable 
name="base-cell-address">
-                                                       <xsl:call-template 
name="translate-unit">
-                                                               <xsl:with-param 
name="column-number" select="$columnNumber"/>
-                                                               <xsl:with-param 
name="row-number" select="$rowNumber"/>
-                                                               <xsl:with-param 
name="column-pos-style" select="'relative'"/>
-                                                               <xsl:with-param 
name="row-pos-style" select="'relative'"/>
-                                                       </xsl:call-template>
-                                               </xsl:variable>
-                                               <xsl:variable 
name="condition-value">
-                                                       <xsl:call-template 
name="translate-condition">
-                                                               <xsl:with-param 
name="cell-column-pos" select="$columnNumber"/>
-                                                               <xsl:with-param 
name="cell-row-pos" select="$rowNumber"/>
-                                                       </xsl:call-template>
-                                               </xsl:variable>
-                                               <xsl:element name="style:map">
-                                                       <xsl:attribute 
name="style:condition">
-                                                               <xsl:value-of 
select="$condition-value"/>
-                                                       </xsl:attribute>
-                                                       <xsl:attribute 
name="style:apply-style-name">
-                                                               <xsl:value-of 
select="concat('Excel_CondFormat_',$table-pos,'_',$conditions,'_',$condition-number)"/>
-                                                       </xsl:attribute>
-                                                       <xsl:attribute 
name="style:base-cell-address">
-                                                               <xsl:value-of 
select="concat(../../@ss:Name,'.',$base-cell-address)"/>
-                                                       </xsl:attribute>
-                                               </xsl:element>
-                                       </xsl:for-each>
-                               </xsl:element>
+                                                               <xsl:attribute 
name="style:apply-style-name">
+                                                                       
<xsl:value-of 
select="concat('Excel_CondFormat_',$table-pos,'_',$conditions,'_',$condition-number)"/>
+                                                               </xsl:attribute>
+                                                               <xsl:attribute 
name="style:base-cell-address">
+                                                                       
<xsl:value-of select="concat(../../@ss:Name,'.',$base-cell-address)"/>
+                                                               </xsl:attribute>
+                                                       </xsl:element>
+                                               </xsl:for-each>
+                                       </xsl:element>
+                               </xsl:for-each>                         
                        </xsl:for-each>
                </xsl:for-each>
        </xsl:template>
@@ -895,31 +900,6 @@
                                <xsl:variable name="qualifier" 
select="x:Qualifier"/>
                                <xsl:variable name="first-value" 
select="x:Value1"/>
                                <xsl:choose>
-                                       <xsl:when test="$qualifier = 'Equal'">
-                                               <xsl:choose>
-                                                       <xsl:when 
test="starts-with($first-value,'&quot;')">
-                                                               <xsl:value-of 
select="concat('cell-content()=',$address-value)"/>
-                                                       </xsl:when>
-                                                       <xsl:otherwise>
-                                                               <xsl:value-of 
select="concat('cell-content()=[',$address-value,']')"/>
-                                                       </xsl:otherwise>
-                                               </xsl:choose>
-                                       </xsl:when>
-                                       <xsl:when test="$qualifier = 'Less'">
-                                               <xsl:value-of 
select="concat('cell-content()&lt;[',$address-value,']')"/>
-                                       </xsl:when>
-                                       <xsl:when test="$qualifier = 'Greater'">
-                                               <xsl:value-of 
select="concat('cell-content()&gt;[',$address-value,']')"/>
-                                       </xsl:when>
-                                       <xsl:when test="$qualifier = 
'LessOrEqual'">
-                                               <xsl:value-of 
select="concat('cell-content()&lt;=[',$address-value,']')"/>
-                                       </xsl:when>
-                                       <xsl:when test="$qualifier = 
'GreaterOrEqual'">
-                                               <xsl:value-of 
select="concat('cell-content()&gt;=[',$address-value,']')"/>
-                                       </xsl:when>
-                                       <xsl:when test="$qualifier = 
'NotEqual'">
-                                               <xsl:value-of 
select="concat('cell-content()!=[',$address-value,']')"/>
-                                       </xsl:when>
                                        <xsl:when test="$qualifier = 'Between'">
                                                <xsl:variable 
name="second-value">
                                                        <xsl:call-template 
name="translate-expression">
@@ -929,7 +909,7 @@
                                                                <xsl:with-param 
name="return-value" select="''"/>
                                                        </xsl:call-template>
                                                </xsl:variable>
-                                               <xsl:value-of 
select="concat('cell-content-is-between([',$address-value,'],[',$second-value,'])')"/>
+                                               <xsl:value-of 
select="concat('cell-content-is-between(',$address-value,',',$second-value,')')"/>
                                        </xsl:when>
                                        <xsl:when test="$qualifier = 
'NotBetween'">
                                                <xsl:variable 
name="second-value">
@@ -940,8 +920,22 @@
                                                                <xsl:with-param 
name="return-value" select="''"/>
                                                        </xsl:call-template>
                                                </xsl:variable>
-                                               <xsl:value-of 
select="concat('cell-content-is-not-between([',$address-value,'],[',$second-value,'])')"/>
+                                               <xsl:value-of 
select="concat('cell-content-is-not-between(',$address-value,',',$second-value,')')"/>
                                        </xsl:when>
+                                       <xsl:otherwise>
+                                               <xsl:variable 
name="translatedQualifier">
+                                                       <xsl:choose>
+                                                               <xsl:when 
test="$qualifier = 'Equal'">=</xsl:when>
+                                                               <xsl:when 
test="$qualifier = 'Less'">&lt;</xsl:when>
+                                                               <xsl:when 
test="$qualifier = 'Greater'">&gt;</xsl:when>
+                                                               <xsl:when 
test="$qualifier = 'LessOrEqual'">&lt;=</xsl:when>
+                                                               <xsl:when 
test="$qualifier = 'GreaterOrEqual'">&gt;=</xsl:when>
+                                                               <xsl:when 
test="$qualifier = 'NotEqual'">!=</xsl:when>
+                                                       </xsl:choose>
+                                               </xsl:variable>
+                                               <xsl:value-of 
select="concat('cell-content()', $translatedQualifier, $address-value)"/>
+                                       </xsl:otherwise>
+                                       
                                </xsl:choose>
                        </xsl:when>
                        <xsl:otherwise>
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to