summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@collabora.co.uk>2014-08-16 07:14:28 +0200
committerMarkus Mohrhard <markus.mohrhard@collabora.co.uk>2014-08-16 07:14:28 +0200
commit66c6d1ef204f3507e7663a1b8b1be05b9ec71092 (patch)
treed40d3fd85f558351176a9f6d22ad1d49196385dd
parenta772be514e783e232b13c9ff7cde93fb0529c278 (diff)
prevent invalid ods files with loext:fill-character
ODF specifies that extension elements in a document are removed before the validation. With our old implementation of the number format export this could result in two number:text elements following each other. According to the spec a number:text element may not follow another number:text element. The number:text element before loext:fill is actually not that interesting so it makes more sense to make this one an extension element. Possible documents showing issues: fdo45268-1.xlsx fdo49150-1.xlsx and many more Change-Id: I3ad92b8a61a246b3dbc0132d9a2c367488a766d0
-rw-r--r--include/xmloff/xmlnumfe.hxx3
-rw-r--r--xmloff/source/style/xmlnumfe.cxx8
-rw-r--r--xmloff/source/style/xmlnumfi.cxx1
3 files changed, 7 insertions, 5 deletions
diff --git a/include/xmloff/xmlnumfe.hxx b/include/xmloff/xmlnumfe.hxx
index c6ff37050d65..3c898d770e82 100644
--- a/include/xmloff/xmlnumfe.hxx
+++ b/include/xmloff/xmlnumfe.hxx
@@ -26,6 +26,7 @@
#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
#include <com/sun/star/uno/Sequence.h>
#include <rtl/ustrbuf.hxx>
+#include <boost/ptr_container/ptr_vector.hpp>
#define XML_WRITTENNUMBERSTYLES "WrittenNumberStyles"
@@ -59,7 +60,7 @@ private:
SAL_DLLPRIVATE void AddLanguageAttr_Impl( sal_Int32 nLang );
SAL_DLLPRIVATE void AddToTextElement_Impl( const OUString& rString );
- SAL_DLLPRIVATE void FinishTextElement_Impl();
+ SAL_DLLPRIVATE void FinishTextElement_Impl(bool bUseExtensionNS = false);
SAL_DLLPRIVATE void WriteColorElement_Impl( const Color& rColor );
SAL_DLLPRIVATE void WriteNumberElement_Impl( sal_Int32 nDecimals, sal_Int32 nInteger,
diff --git a/xmloff/source/style/xmlnumfe.cxx b/xmloff/source/style/xmlnumfe.cxx
index f24693a72e33..d0f46fc4dcbf 100644
--- a/xmloff/source/style/xmlnumfe.cxx
+++ b/xmloff/source/style/xmlnumfe.cxx
@@ -46,7 +46,6 @@
#include <xmloff/xmlexp.hxx>
#include <set>
-#include <boost/ptr_container/ptr_vector.hpp>
using namespace ::com::sun::star;
using namespace ::xmloff::token;
@@ -336,11 +335,12 @@ void SvXMLNumFmtExport::AddToTextElement_Impl( const OUString& rString )
sTextContent.append( rString );
}
-void SvXMLNumFmtExport::FinishTextElement_Impl()
+void SvXMLNumFmtExport::FinishTextElement_Impl(bool bUseExtensionNS)
{
if ( !sTextContent.isEmpty() )
{
- SvXMLElementExport aElem( rExport, XML_NAMESPACE_NUMBER, XML_TEXT,
+ sal_uInt16 nNS = bUseExtensionNS ? XML_NAMESPACE_LO_EXT : XML_NAMESPACE_NUMBER;
+ SvXMLElementExport aElem( rExport, nNS, XML_TEXT,
true, false );
rExport.Characters( sTextContent.makeStringAndClear() );
}
@@ -500,7 +500,7 @@ void SvXMLNumFmtExport::WriteMinutesElement_Impl( bool bLong )
void SvXMLNumFmtExport::WriteRepeatedElement_Impl( sal_Unicode nChar )
{
- FinishTextElement_Impl();
+ FinishTextElement_Impl(true);
SvXMLElementExport aElem( rExport, XML_NAMESPACE_LO_EXT, XML_FILL_CHARACTER,
true, false );
rExport.Characters( OUString( nChar ) );
diff --git a/xmloff/source/style/xmlnumfi.cxx b/xmloff/source/style/xmlnumfi.cxx
index 676cd82276a0..35778d4f7a47 100644
--- a/xmloff/source/style/xmlnumfi.cxx
+++ b/xmloff/source/style/xmlnumfi.cxx
@@ -494,6 +494,7 @@ const SvXMLTokenMap& SvXMLNumImpData::GetStyleElemTokenMap()
static const SvXMLTokenMapEntry aStyleElemMap[] =
{
// elements in a style
+ { XML_NAMESPACE_LO_EXT, XML_TEXT, XML_TOK_STYLE_TEXT },
{ XML_NAMESPACE_NUMBER, XML_TEXT, XML_TOK_STYLE_TEXT },
{ XML_NAMESPACE_LO_EXT, XML_FILL_CHARACTER, XML_TOK_STYLE_FILL_CHARACTER },
{ XML_NAMESPACE_NUMBER, XML_FILL_CHARACTER, XML_TOK_STYLE_FILL_CHARACTER },