diff options
author | Michael Stahl <mstahl@redhat.com> | 2013-06-05 16:44:26 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2013-06-05 16:55:51 +0200 |
commit | 350534aba8f82d57782ec22fa4f6b776509beb2d (patch) | |
tree | d53ea31cad6d773d249b479275bcef10d5ba87b2 /sc/source/filter/excel/xepage.cxx | |
parent | be8855ebe4e5b978971d77df3d40e051d09597a7 (diff) |
sc: XLSX export: remove mpAttributes crack:
When there are attributes, XclExpXmlStartElementRecord::SaveXml() would
not call startElement() but instead write the XML element all by itself,
which means there will be an endElement() for which no previous
startElement() was called, which makes checking that these match hard.
Since this silly mpAttributes over-engineering is only used in one place
anyway, give that a separate subclass and use startElement().
There is still an issue with various WriteAttribute methods; if those
are used it's probably not possible to check that for well-formedness.
Change-Id: Id842f000a6fecd77211836705545d58031ebd0f8
Diffstat (limited to 'sc/source/filter/excel/xepage.cxx')
-rw-r--r-- | sc/source/filter/excel/xepage.cxx | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/sc/source/filter/excel/xepage.cxx b/sc/source/filter/excel/xepage.cxx index 8e1ffb114352..370188788a34 100644 --- a/sc/source/filter/excel/xepage.cxx +++ b/sc/source/filter/excel/xepage.cxx @@ -332,17 +332,26 @@ XclExpPageSettings::XclExpPageSettings( const XclExpRoot& rRoot ) : maData.maVerPageBreaks.push_back(*itr); } -static void lcl_WriteHeaderFooter( XclExpXmlStream& rStrm ) +class XclExpXmlStartHeaderFooterElementRecord : public XclExpXmlElementRecord +{ +public: + explicit XclExpXmlStartHeaderFooterElementRecord(sal_Int32 const nElement) + : XclExpXmlElementRecord(nElement) {} + + virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE; +}; + +void XclExpXmlStartHeaderFooterElementRecord::SaveXml(XclExpXmlStream& rStrm) { // OOXTODO: we currently only emit oddHeader/oddFooter elements, and // do not support the first/even/odd page distinction. - rStrm.WriteAttributes( + sax_fastparser::FSHelperPtr& rStream = rStrm.GetCurrentStream(); + rStream->startElement( mnElement, // OOXTODO: XML_alignWithMargins, XML_differentFirst, "false", // OOXTODO XML_differentOddEven, "false", // OOXTODO // OOXTODO: XML_scaleWithDoc FSEND ); - rStrm.GetCurrentStream()->write( ">" ); } void XclExpPageSettings::Save( XclExpStream& rStrm ) @@ -388,7 +397,7 @@ void XclExpPageSettings::SaveXml( XclExpXmlStream& rStrm ) XclExpSetup( maData ).SaveXml( rStrm ); - XclExpXmlStartElementRecord( XML_headerFooter, lcl_WriteHeaderFooter ).SaveXml( rStrm ); + XclExpXmlStartHeaderFooterElementRecord(XML_headerFooter).SaveXml(rStrm); XclExpHeaderFooter( EXC_ID_HEADER, maData.maHeader ).SaveXml( rStrm ); XclExpHeaderFooter( EXC_ID_FOOTER, maData.maFooter ).SaveXml( rStrm ); XclExpXmlEndElementRecord( XML_headerFooter ).SaveXml( rStrm ); |