chart2/qa/extras/chart2export2.cxx | 16 dev/null |binary include/oox/core/xmlfilterbase.hxx | 7 include/oox/export/chartexport.hxx | 16 include/oox/export/drawingml.hxx | 3 include/oox/token/relationship.hxx | 2 oox/inc/drawingml/chart/typegroupcontext.hxx | 3 oox/source/core/xmlfilterbase.cxx | 5 oox/source/drawingml/chart/plotareacontext.cxx | 41 + oox/source/drawingml/chart/seriescontext.cxx | 69 -- oox/source/drawingml/chart/titlecontext.cxx | 7 oox/source/drawingml/chart/typegroupcontext.cxx | 56 - oox/source/export/chartexport.cxx | 785 ++++++------------------ oox/source/export/drawingml.cxx | 7 oox/source/token/namespaces-strict.txt | 4 oox/source/token/namespaces.txt | 6 oox/source/token/relationship.inc | 2 oox/source/token/tokens.txt | 39 - sc/source/filter/excel/excdoc.cxx | 9 sc/source/filter/excel/xestream.cxx | 7 sc/source/filter/inc/xestream.hxx | 4 test/source/xmltesttools.cxx | 2 22 files changed, 297 insertions(+), 793 deletions(-)
New commits: commit ca984b69e2dc66e28b982f8a5bacf41e82d3707e Author: Kurt Nordback <[email protected]> AuthorDate: Thu Jan 22 10:52:37 2026 -0700 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Mon Jan 26 11:57:38 2026 +0100 Revert "tdf#165742 Step 4.3: Establish a narrow export path for chartex" This reverts commit bbccf2291e3758d0dd249eb26bd6c8231cb8f7cd. Change-Id: I68a6b5343ac1f656db1e7a3838f088d77ed6026b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197903 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Tomaž Vajngerl <[email protected]> diff --git a/include/oox/core/xmlfilterbase.hxx b/include/oox/core/xmlfilterbase.hxx index e30146e30227..ee3fecc41627 100644 --- a/include/oox/core/xmlfilterbase.hxx +++ b/include/oox/core/xmlfilterbase.hxx @@ -207,17 +207,12 @@ public: The media type string, used in [Content_Types].xml stream in base storage. - @param bNoHeader - If true, do not include a header line in the output. If false, - potentially include a header line based on the media type string. - @return newly created serializer helper. */ ::sax_fastparser::FSHelperPtr openFragmentStreamWithSerializer( const OUString& rStreamName, - const OUString& rMediaType, - bool bNoHeader = false); + const OUString& rMediaType ); /** Returns new unique ID for exported document. diff --git a/include/oox/export/drawingml.hxx b/include/oox/export/drawingml.hxx index aa08f22c5ee7..1f62c648db0d 100644 --- a/include/oox/export/drawingml.hxx +++ b/include/oox/export/drawingml.hxx @@ -535,8 +535,7 @@ public: const css::uno::Reference< css::io::XOutputStream >& xParentRelation, const OUString& sContentType, const OUString& sRelationshipType, - OUString* pRelationshipId, - bool bNoHeader = false); // Don't write a <?xml... header line + OUString* pRelationshipId ); OOX_DLLPUBLIC std::shared_ptr<GraphicExport> createGraphicExport(); }; diff --git a/include/oox/token/relationship.hxx b/include/oox/token/relationship.hxx index 56640076f854..2879895c3b92 100644 --- a/include/oox/token/relationship.hxx +++ b/include/oox/token/relationship.hxx @@ -20,9 +20,7 @@ enum class Relationship { ACTIVEXCONTROLBINARY, CHART, - CHARTCOLORSTYLE, // for chartex CHARTEX, - CHARTSTYLE, // for chartex CHARTUSERSHAPES, COMMENTS, COMMENTAUTHORS, diff --git a/oox/inc/drawingml/chart/typegroupcontext.hxx b/oox/inc/drawingml/chart/typegroupcontext.hxx index c64f18d74c72..07b45d5c50bd 100644 --- a/oox/inc/drawingml/chart/typegroupcontext.hxx +++ b/oox/inc/drawingml/chart/typegroupcontext.hxx @@ -162,9 +162,6 @@ public: explicit ChartexTypeGroupContext( ::oox::core::ContextHandler2Helper& rParent, TypeGroupModel& rModel ); virtual ~ChartexTypeGroupContext() override; - // Explicitly create a new series - void CreateSeries(); - virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) override; }; diff --git a/oox/source/core/xmlfilterbase.cxx b/oox/source/core/xmlfilterbase.cxx index 82323fe029f6..70ab8fd548e5 100644 --- a/oox/source/core/xmlfilterbase.cxx +++ b/oox/source/core/xmlfilterbase.cxx @@ -513,10 +513,9 @@ Reference< XOutputStream > XmlFilterBase::openFragmentStream( const OUString& rS return xOutputStream; } -FSHelperPtr XmlFilterBase::openFragmentStreamWithSerializer( - const OUString& rStreamName, const OUString& rMediaType, bool bNoHeader /* = false */) +FSHelperPtr XmlFilterBase::openFragmentStreamWithSerializer( const OUString& rStreamName, const OUString& rMediaType ) { - const bool bWriteHeader = !bNoHeader && (rMediaType.indexOf( "vml" ) < 0 || rMediaType.indexOf( "+xml" ) >= 0); + const bool bWriteHeader = rMediaType.indexOf( "vml" ) < 0 || rMediaType.indexOf( "+xml" ) >= 0; return std::make_shared<FastSerializerHelper>( openFragmentStream( rStreamName, rMediaType ), bWriteHeader ); } diff --git a/oox/source/drawingml/chart/seriescontext.cxx b/oox/source/drawingml/chart/seriescontext.cxx index 02fb62a96c6e..867ba684fd2d 100644 --- a/oox/source/drawingml/chart/seriescontext.cxx +++ b/oox/source/drawingml/chart/seriescontext.cxx @@ -49,7 +49,6 @@ ContextHandlerRef lclDataLabelSharedCreateContext( ContextHandler2& rContext, orModel.monLabelPos = rAttribs.getToken( XML_val, XML_TOKEN_INVALID ); return nullptr; case C_TOKEN( numFmt ): - case CX_TOKEN( numFmt ): orModel.maNumberFormat.setAttributes( rAttribs ); return nullptr; case C_TOKEN( showBubbleSize ): @@ -71,25 +70,19 @@ ContextHandlerRef lclDataLabelSharedCreateContext( ContextHandler2& rContext, orModel.mobShowVal = rAttribs.getBool( XML_val ); return nullptr; case C_TOKEN( separator ): - case CX_TOKEN( separator ): // collect separator text in onCharacters() return &rContext; case C_TOKEN( spPr ): - case CX_TOKEN( spPr ): return new ShapePropertiesContext( rContext, orModel.mxShapeProp.create() ); case C_TOKEN( txPr ): - case CX_TOKEN( txPr ): return new TextBodyContext( rContext, orModel.mxTextProp.create() ); - case CX_TOKEN( visibility ): - return nullptr; // TODO } return nullptr; } void lclDataLabelSharedCharacters( ContextHandler2 const & rContext, const OUString& rChars, DataLabelModelBase& orModel ) { - if( rContext.isCurrentElement( C_TOKEN( separator ) ) || - rContext.isCurrentElement( CX_TOKEN( separator ) ) ) + if( rContext.isCurrentElement( C_TOKEN( separator ) ) ) orModel.moaSeparator = rChars; } @@ -139,7 +132,6 @@ ContextHandlerRef DataLabelContext::onCreateContext( sal_Int32 nElement, const A else if (nElement == C15_TOKEN(layout)) return new LayoutContext(*this, mrModel.mxLayout.getOrCreate()); break; - // Not sure how to handle <cx:extLst> and <cx:ext>. TODO } } bool bMSO2007 = getFilter().isMSO2007Document(); diff --git a/oox/source/drawingml/chart/titlecontext.cxx b/oox/source/drawingml/chart/titlecontext.cxx index 77e56ac36ada..04a4ea7069a3 100644 --- a/oox/source/drawingml/chart/titlecontext.cxx +++ b/oox/source/drawingml/chart/titlecontext.cxx @@ -50,7 +50,6 @@ ContextHandlerRef TextContext::onCreateContext( sal_Int32 nElement, const Attrib if( isCurrentElement( C_TOKEN( tx ) ) ) switch( nElement ) { case C_TOKEN( rich ): - case CX_TOKEN( rich ): return new TextBodyContext( *this, mrModel.mxTextBody.create() ); case C_TOKEN( strRef ): @@ -58,14 +57,8 @@ ContextHandlerRef TextContext::onCreateContext( sal_Int32 nElement, const Attrib return new StringSequenceContext( *this, mrModel.mxDataSeq.create() ); case C_TOKEN( v ): - case CX_TOKEN( v ): OSL_ENSURE( !mrModel.mxDataSeq, "TextContext::onCreateContext - multiple data sequences" ); return this; // collect value in onCharacters() - case CX_TOKEN( txData ): - // CT_TextData can have a <cx:v> element or a sequence - // <cx:f> <cx:v>. The former case will be handled through the - // CX_TOKEN(v) above, but the latter is not handled. TODO - return this; } return nullptr; } diff --git a/oox/source/drawingml/chart/typegroupcontext.cxx b/oox/source/drawingml/chart/typegroupcontext.cxx index 632b42711428..d5f97c25cdac 100644 --- a/oox/source/drawingml/chart/typegroupcontext.cxx +++ b/oox/source/drawingml/chart/typegroupcontext.cxx @@ -405,11 +405,6 @@ ChartexTypeGroupContext::~ChartexTypeGroupContext() { } -void ChartexTypeGroupContext::CreateSeries() -{ - mrModel.maSeries.create(false); -} - ContextHandlerRef ChartexTypeGroupContext::onCreateContext( [[maybe_unused]] sal_Int32 nElement, [[maybe_unused]] const AttributeList& rAttribs ) { diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index ded5f714fc1b..fecd8431f770 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -162,75 +162,6 @@ private: OUString m_aRole; }; -void outputStyleEntry(FSHelperPtr pFS, sal_Int32 nElTokenId) -{ - // Just default values for now - pFS->startElement(FSNS(XML_cs, nElTokenId)); - pFS->singleElement(FSNS(XML_cs, XML_lnRef), XML_idx, "0"); - pFS->singleElement(FSNS(XML_cs, XML_fillRef), XML_idx, "0"); - pFS->singleElement(FSNS(XML_cs, XML_effectRef), XML_idx, "0"); - pFS->singleElement(FSNS(XML_cs, XML_fontRef), XML_idx, "minor"); - pFS->endElement(FSNS(XML_cs, nElTokenId)); -} - -void outputChartAreaStyleEntry(FSHelperPtr pFS) -{ - // Just default values for now - pFS->startElement(FSNS(XML_cs, XML_chartArea), XML_mods, "allowNoFillOverride allowNoLineOverride"); - pFS->singleElement(FSNS(XML_cs, XML_lnRef), XML_idx, "0"); - pFS->singleElement(FSNS(XML_cs, XML_fillRef), XML_idx, "0"); - pFS->singleElement(FSNS(XML_cs, XML_effectRef), XML_idx, "0"); - - pFS->startElement(FSNS(XML_cs, XML_fontRef), XML_idx, "minor"); - pFS->singleElement(FSNS(XML_a, XML_schemeClr), XML_val, "tx1"); - pFS->endElement(FSNS(XML_cs, XML_fontRef)); - - pFS->startElement(FSNS(XML_cs, XML_spPr)); - - pFS->startElement(FSNS(XML_a, XML_solidFill)); - pFS->singleElement(FSNS(XML_a, XML_schemeClr), XML_val, "bg1"); - pFS->endElement(FSNS(XML_a, XML_solidFill)); - - pFS->startElement(FSNS(XML_a, XML_ln), XML_w, "9525", XML_cap, "flat", - XML_cmpd, "sng", XML_algn, "ctr"); - pFS->startElement(FSNS(XML_a, XML_solidFill)); - pFS->startElement(FSNS(XML_a, XML_schemeClr), XML_val, "tx1"); - pFS->singleElement(FSNS(XML_a, XML_lumMod), XML_val, "15000"); - pFS->singleElement(FSNS(XML_a, XML_lumOff), XML_val, "85000"); - pFS->endElement(FSNS(XML_a, XML_schemeClr)); - pFS->endElement(FSNS(XML_a, XML_solidFill)); - pFS->singleElement(FSNS(XML_a, XML_round)); - pFS->endElement(FSNS(XML_a, XML_ln)); - - pFS->endElement(FSNS(XML_cs, XML_spPr)); - - pFS->endElement(FSNS(XML_cs, XML_chartArea)); -} - -void outputDataPointStyleEntry(FSHelperPtr pFS) -{ - pFS->startElement(FSNS(XML_cs, XML_dataPoint)); - pFS->singleElement(FSNS(XML_cs, XML_lnRef), XML_idx, "0"); - - pFS->startElement(FSNS(XML_cs, XML_fillRef), XML_idx, "0"); - pFS->singleElement(FSNS(XML_cs, XML_styleClr), XML_val, "auto"); - pFS->endElement(FSNS(XML_cs, XML_fillRef)); - - pFS->singleElement(FSNS(XML_cs, XML_effectRef), XML_idx, "0"); - - pFS->startElement(FSNS(XML_cs, XML_fontRef), XML_idx, "minor"); - pFS->singleElement(FSNS(XML_cs, XML_schemeClr), XML_val, "tx1"); - pFS->endElement(FSNS(XML_cs, XML_fontRef)); - - pFS->startElement(FSNS(XML_cs, XML_spPr)); - pFS->startElement(FSNS(XML_a, XML_solidFill)); - pFS->singleElement(FSNS(XML_a, XML_schemeClr), XML_val, "phClr"); - pFS->endElement(FSNS(XML_a, XML_solidFill)); - pFS->endElement(FSNS(XML_cs, XML_spPr)); - - pFS->endElement(FSNS(XML_cs, XML_dataPoint)); -} - } static Reference< chart2::data::XLabeledDataSequence > lcl_getCategories( const Reference< chart2::XDiagram > & xDiagram, bool& bHasDateCategories ) @@ -1051,114 +982,7 @@ void ChartExport::WriteChartObj( const Reference< XShape >& xShape, sal_Int32 nI SetFS( pChart ); ExportContent(); - - if (bIsChartex) { - SetFS( pChart ); - sRelativePath =""; - - FSHelperPtr pChartFS = GetFS(); - - // output style and colorstyle files - - // first style - static constexpr char sStyleFnamePrefix[] = "style"; - OUStringBuffer sFullStreamBuf; - sFullStreamBuf.appendAscii(sFullPath); - sFullStreamBuf = sFullStreamBuf + sStyleFnamePrefix + OUString::number(nChartCount) + ".xml"; - sFullStream = sFullStreamBuf.makeStringAndClear(); - OUStringBuffer sRelativeStreamBuf; - sRelativeStreamBuf.appendAscii(sRelativePath); - sRelativeStreamBuf = sRelativeStreamBuf + sStyleFnamePrefix + OUString::number(nChartCount) + ".xml"; - sRelativeStream = sRelativeStreamBuf.makeStringAndClear(); - - FSHelperPtr pStyle = CreateOutputStream( - sFullStream, - sRelativeStream, - pChartFS->getOutputStream(), - u"application/vnd.ms-office.chartstyle+xml"_ustr, - oox::getRelationship(Relationship::CHARTSTYLE), - &sId, - true /* for some reason this doesn't have a header line */); - - SetFS( pStyle ); - pFS = GetFS(); - - pFS->startElement(FSNS(XML_cs, XML_chartStyle), - FSNS( XML_xmlns, XML_cs ), pFB->getNamespaceURL(OOX_NS(cs)), - FSNS( XML_xmlns, XML_a ), pFB->getNamespaceURL(OOX_NS(dml)), - XML_id, "419" /* no idea what this number is supposed to be */); - - outputStyleEntry(pFS, XML_axisTitle);; - outputStyleEntry(pFS, XML_categoryAxis); - outputChartAreaStyleEntry(pFS); - outputStyleEntry(pFS, XML_dataLabel); - outputDataPointStyleEntry(pFS); - outputStyleEntry(pFS, XML_dataPoint3D); - outputStyleEntry(pFS, XML_dataPointLine); - outputStyleEntry(pFS, XML_dataPointMarker); - outputStyleEntry(pFS, XML_dataPointWireframe); - outputStyleEntry(pFS, XML_dataTable); - outputStyleEntry(pFS, XML_downBar); - outputStyleEntry(pFS, XML_dropLine); - outputStyleEntry(pFS, XML_errorBar); - outputStyleEntry(pFS, XML_floor); - outputStyleEntry(pFS, XML_gridlineMajor); - outputStyleEntry(pFS, XML_gridlineMinor); - outputStyleEntry(pFS, XML_hiLoLine); - outputStyleEntry(pFS, XML_leaderLine); - outputStyleEntry(pFS, XML_legend); - outputStyleEntry(pFS, XML_plotArea); - outputStyleEntry(pFS, XML_plotArea3D); - outputStyleEntry(pFS, XML_seriesAxis); - outputStyleEntry(pFS, XML_seriesLine); - outputStyleEntry(pFS, XML_title); - outputStyleEntry(pFS, XML_trendline); - outputStyleEntry(pFS, XML_trendlineLabel); - outputStyleEntry(pFS, XML_upBar); - outputStyleEntry(pFS, XML_valueAxis); - outputStyleEntry(pFS, XML_wall); - - pFS->endElement(FSNS(XML_cs, XML_chartStyle)); - - pStyle->endDocument(); - - // now colorstyle - static constexpr char sColorFnamePrefix[] = "colors"; - sFullStreamBuf = OUStringBuffer(); - sFullStreamBuf.appendAscii(sFullPath); - sFullStreamBuf = sFullStreamBuf + sColorFnamePrefix + OUString::number(nChartCount) + ".xml"; - sFullStream = sFullStreamBuf.makeStringAndClear(); - sRelativeStreamBuf = OUStringBuffer(); - sRelativeStreamBuf.appendAscii(sRelativePath); - sRelativeStreamBuf = sRelativeStreamBuf + sColorFnamePrefix + OUString::number(nChartCount) + ".xml"; - sRelativeStream = sRelativeStreamBuf.makeStringAndClear(); - - FSHelperPtr pColorStyle = CreateOutputStream( - sFullStream, - sRelativeStream, - pChartFS->getOutputStream(), - u"application/vnd.ms-office.chartcolorstyle+xml"_ustr, - oox::getRelationship(Relationship::CHARTCOLORSTYLE), - &sId, - true /* also no header line */); - - SetFS( pColorStyle ); - pFS = GetFS(); - - pFS->startElement(FSNS(XML_cs, XML_colorStyle), - FSNS( XML_xmlns, XML_cs ), pFB->getNamespaceURL(OOX_NS(cs)), - FSNS( XML_xmlns, XML_a ), pFB->getNamespaceURL(OOX_NS(dml)), - XML_meth, "cycle", - XML_id, "10" /* no idea what this number is supposed to be */); - - pFS->singleElement(FSNS(XML_a, XML_schemeClr), - XML_val, "accent1"); - - pFS->endElement(FSNS(XML_cs, XML_colorStyle)); - - pColorStyle->endDocument(); - } - + SetFS( pFS ); pChart->endDocument(); } diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index 9790c745150d..0bf735cd48ea 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -5816,9 +5816,7 @@ sax_fastparser::FSHelperPtr DrawingML::CreateOutputStream ( const Reference< XOutputStream >& xParentRelation, const OUString& sContentType, const OUString& sRelationshipType, - OUString* pRelationshipId, - // if bNoHeader is true, don't create a header (<?xml... ) line - bool bNoHeader /* = false */ ) + OUString* pRelationshipId ) { OUString sRelationshipId; if (xParentRelation.is()) @@ -5829,8 +5827,7 @@ sax_fastparser::FSHelperPtr DrawingML::CreateOutputStream ( if( pRelationshipId ) *pRelationshipId = sRelationshipId; - sax_fastparser::FSHelperPtr p = GetFB()->openFragmentStreamWithSerializer( - sFullStream, sContentType, bNoHeader ); + sax_fastparser::FSHelperPtr p = GetFB()->openFragmentStreamWithSerializer( sFullStream, sContentType ); return p; } diff --git a/oox/source/token/namespaces-strict.txt b/oox/source/token/namespaces-strict.txt index e7cd1940def9..a2b5f52e600a 100644 --- a/oox/source/token/namespaces-strict.txt +++ b/oox/source/token/namespaces-strict.txt @@ -92,12 +92,8 @@ p15 http://schemas.microsoft.com/office/powerpoint/2012/main x12ac http://schemas.microsoft.com/office/spreadsheetml/2011/1/ac c15 http://schemas.microsoft.com/office/drawing/2012/chart x15 http://schemas.microsoft.com/office/spreadsheetml/2010/11/main -xr http://schemas.microsoft.com/office/spreadsheetml/2014/revision xr2 http://schemas.microsoft.com/office/spreadsheetml/2015/revision2 -xr6 http://schemas.microsoft.com/office/spreadsheetml/2016/revision6 -xr10 http://schemas.microsoft.com/office/spreadsheetml/2016/revision10 xr16 http://schemas.microsoft.com/office/spreadsheetml/2017/revision16 -cs http://schemas.microsoft.com/office/drawing/2012/chartStyle # MSO 2014 extensions --------------------------------------------------------- diff --git a/oox/source/token/namespaces.txt b/oox/source/token/namespaces.txt index 49adc190f7f8..d24fa7685e5f 100644 --- a/oox/source/token/namespaces.txt +++ b/oox/source/token/namespaces.txt @@ -88,14 +88,10 @@ wpc http://schemas.microsoft.com/office/word/2010/wordproces w15 http://schemas.microsoft.com/office/word/2012/wordml p15 http://schemas.microsoft.com/office/powerpoint/2012/main x12ac http://schemas.microsoft.com/office/spreadsheetml/2011/1/ac -c15 http://schemas.microsoft.com/office/drawing/2012/chart x15 http://schemas.microsoft.com/office/spreadsheetml/2010/11/main -xr http://schemas.microsoft.com/office/spreadsheetml/2014/revision +c15 http://schemas.microsoft.com/office/drawing/2012/chart xr2 http://schemas.microsoft.com/office/spreadsheetml/2015/revision2 -xr6 http://schemas.microsoft.com/office/spreadsheetml/2016/revision6 -xr10 http://schemas.microsoft.com/office/spreadsheetml/2016/revision10 xr16 http://schemas.microsoft.com/office/spreadsheetml/2017/revision16 -cs http://schemas.microsoft.com/office/drawing/2012/chartStyle # MSO 2014 extensions --------------------------------------------------------- diff --git a/oox/source/token/relationship.inc b/oox/source/token/relationship.inc index dee443a5fd6c..a63e1c6e71d2 100644 --- a/oox/source/token/relationship.inc +++ b/oox/source/token/relationship.inc @@ -1,8 +1,6 @@ {Relationship::ACTIVEXCONTROLBINARY, u"http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary"}, {Relationship::CHART, u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"}, -{Relationship::CHARTCOLORSTYLE, u"http://schemas.microsoft.com/office/2011/relationships/chartColorStyle"}, {Relationship::CHARTEX, u"http://schemas.microsoft.com/office/2014/relationships/chartEx"}, -{Relationship::CHARTSTYLE, u"http://schemas.microsoft.com/office/2011/relationships/chartStyle"}, {Relationship::CHARTUSERSHAPES, u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes"}, {Relationship::COMMENTS, u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"}, {Relationship::COMMENTAUTHORS, u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors"}, diff --git a/oox/source/token/tokens.txt b/oox/source/token/tokens.txt index 14ff55990c6a..883e68f12def 100644 --- a/oox/source/token/tokens.txt +++ b/oox/source/token/tokens.txt @@ -755,7 +755,6 @@ axisId axisPage axisPosition axisRow -axisTitle axisValues azure b @@ -1114,7 +1113,6 @@ catAx catLst catalog category -categoryAxis categoryEl categoryIdx ccw @@ -1177,7 +1175,6 @@ characteristic charset chart chartAndTx -chartArea chartData chartFormat chartFormats @@ -1185,7 +1182,6 @@ chartObject chartPlus chartSpace chartStar -chartStyle chartX chartex chartreuse @@ -1315,7 +1311,6 @@ colorMarkers colorNegative colorScale colorSeries -colorStyle colorTemp colorTemperature colormenu @@ -1674,11 +1669,6 @@ dataModel dataModelExt dataOnRows dataOnly -dataPoint -dataPoint3D -dataPointLine -dataPointMarker -dataPointWireframe dataPosition dataPt dataRef @@ -1996,7 +1986,6 @@ doughnutChart down downArrow downArrowCallout -downBar downBars downThenOver dpi @@ -2016,7 +2005,6 @@ drill drop dropCap dropDownList -dropLine dropLines dropauto ds @@ -2167,7 +2155,6 @@ errBars errDir errValType error -errorBar errorCaption errorStyle errorTitle @@ -2578,8 +2565,6 @@ gridLinesSet gridSize gridSpacing gridSpan -gridlineMajor -gridlineMinor group groupBy groupChr @@ -2695,7 +2680,6 @@ hex hexBinary hexagon hf -hiLoLine hiLowLines hidden hiddenButton @@ -3062,7 +3046,6 @@ lc ld le leader -leaderLine leaderLines ledger left @@ -3504,7 +3487,6 @@ modelId modern modified modifyVerifier -mods mongolianVert monospace month @@ -4096,7 +4078,6 @@ plaqueTabs plastic plcHide plotArea -plotArea3D plotAreaRegion plotSurface plotVisOnly @@ -4615,10 +4596,8 @@ ser serAx serLines series -seriesAxis seriesEl seriesIdx -seriesLine serverCommand serverField serverFill @@ -5084,7 +5063,6 @@ strokeok strokeweight sty style -styleClr styleData styleDef styleDefHdr @@ -5492,7 +5470,6 @@ trees trellis trend trendline -trendlineLabel trendlineLbl trendlineType tri @@ -5611,7 +5588,6 @@ unsignedShort up upArrow upArrowCallout -upBar upBars upDiag upDownArrow @@ -5701,7 +5677,6 @@ vacatedStyle val valAx value -valueAxis valueBetween valueColors valueColorPositions @@ -5784,7 +5759,6 @@ wBefore wMode wOff wR -wall warmMatte warning warp @@ -5895,7 +5869,6 @@ x x12ac x14 x15 -x2 xAlign xIllusions xMode @@ -5920,11 +5893,8 @@ xmlDataType xmlPr xmlns xpath -xr -xr10 -xr16 xr2 -xr6 +xr16 xrange xsc xscale diff --git a/sc/source/filter/excel/excdoc.cxx b/sc/source/filter/excel/excdoc.cxx index ad074ee779e7..f11c21b929fc 100644 --- a/sc/source/filter/excel/excdoc.cxx +++ b/sc/source/filter/excel/excdoc.cxx @@ -844,14 +844,7 @@ void ExcDocument::WriteXml( XclExpXmlStream& rStrm ) sax_fastparser::FSHelperPtr& rWorkbook = rStrm.GetCurrentStream(); rWorkbook->startElement( XML_workbook, XML_xmlns, rStrm.getNamespaceURL(OOX_NS(xls)), - FSNS(XML_xmlns, XML_r), rStrm.getNamespaceURL(OOX_NS(officeRel)), - // the following are for chartex - FSNS(XML_xmlns, XML_mc), rStrm.getNamespaceURL(OOX_NS(mce)), - FSNS(XML_xmlns, XML_x15), rStrm.getNamespaceURL(OOX_NS(x15)), - FSNS(XML_xmlns, XML_xr), rStrm.getNamespaceURL(OOX_NS(xr)), - FSNS(XML_xmlns, XML_xr6), rStrm.getNamespaceURL(OOX_NS(xr6)), - FSNS(XML_xmlns, XML_xr10), rStrm.getNamespaceURL(OOX_NS(xr10)), - FSNS(XML_xmlns, XML_xr2), rStrm.getNamespaceURL(OOX_NS(xr2)) ); + FSNS(XML_xmlns, XML_r), rStrm.getNamespaceURL(OOX_NS(officeRel)) ); rWorkbook->singleElement( XML_fileVersion, XML_appName, "Calc" // OOXTODO: XML_codeName diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx index 5a1e65a3faf5..fba4d2d94ba2 100644 --- a/sc/source/filter/excel/xestream.cxx +++ b/sc/source/filter/excel/xestream.cxx @@ -978,9 +978,7 @@ sax_fastparser::FSHelperPtr XclExpXmlStream::CreateOutputStream ( const uno::Reference< XOutputStream >& xParentRelation, const char* sContentType, std::u16string_view sRelationshipType, - OUString* pRelationshipId, - // if bNoHeader is true, don't create a header (<?xml... ) line - bool bNoHeader /* = false */ ) + OUString* pRelationshipId ) { OUString sRelationshipId; if (xParentRelation.is()) @@ -991,8 +989,7 @@ sax_fastparser::FSHelperPtr XclExpXmlStream::CreateOutputStream ( if( pRelationshipId ) *pRelationshipId = sRelationshipId; - sax_fastparser::FSHelperPtr p = openFragmentStreamWithSerializer( - sFullStream, OUString::createFromAscii( sContentType ), bNoHeader ); + sax_fastparser::FSHelperPtr p = openFragmentStreamWithSerializer( sFullStream, OUString::createFromAscii( sContentType ) ); maOpenedStreamMap[ sFullStream ] = std::make_pair( sRelationshipId, p ); diff --git a/sc/source/filter/inc/xestream.hxx b/sc/source/filter/inc/xestream.hxx index 05aa746d85a7..eae62965d92e 100644 --- a/sc/source/filter/inc/xestream.hxx +++ b/sc/source/filter/inc/xestream.hxx @@ -315,9 +315,7 @@ public: const css::uno::Reference< css::io::XOutputStream >& xParentRelation, const char* sContentType, std::u16string_view sRelationshipType, - OUString* pRelationshipId = nullptr, - // if bNoHeader is true, don't create a header (<?xml... ) line - bool bNoHeader = false); + OUString* pRelationshipId = nullptr ); // ignore virtual bool exportDocument() override; commit c48b72aa48123de68087229b7e3b6393e5db9f45 Author: Kurt Nordback <[email protected]> AuthorDate: Wed Jan 21 19:22:10 2026 -0700 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Mon Jan 26 11:57:26 2026 +0100 Revert "tdf#165742 Step 4.4: Establish a narrow export path for chartex" This reverts commit db3f1b0d046b28599a4d8850ad8d9bd23e18b3e0. Change-Id: I8fe5ade0585dde0daed5a4511a8a3701e501ac46 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197902 Reviewed-by: Tomaž Vajngerl <[email protected]> Tested-by: Tomaž Vajngerl <[email protected]> diff --git a/chart2/qa/extras/chart2export2.cxx b/chart2/qa/extras/chart2export2.cxx index 014e2ba600ec..d7012f091194 100644 --- a/chart2/qa/extras/chart2export2.cxx +++ b/chart2/qa/extras/chart2export2.cxx @@ -153,22 +153,6 @@ CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testCrossBetweenODS) u"between"); } -CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testChartexTitleXLSX) -{ - loadFromFile(u"xlsx/funnel1.xlsx"); - save(u"Calc Office Open XML"_ustr); - xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chartEx1.xml"_ustr); - CPPUNIT_ASSERT(pXmlDoc); - - assertXPath(pXmlDoc, "/cx:chartSpace/cx:chart/cx:plotArea/cx:plotAreaRegion/cx:series", - "layoutId", u"funnel"); - assertXPathInsensitive( - pXmlDoc, - "/cx:chartSpace/cx:chart/cx:plotArea/cx:plotAreaRegion/cx:series/cx:spPr/" - "a:solidFill/a:srgbClr", - "val", u"c55a11"); -} - CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testAxisTitleRotationXLSX) { loadFromFile(u"xlsx/axis_title_rotation.xlsx"); diff --git a/chart2/qa/extras/data/xlsx/funnel1.xlsx b/chart2/qa/extras/data/xlsx/funnel1.xlsx deleted file mode 100644 index 7ae3e6c32a59..000000000000 Binary files a/chart2/qa/extras/data/xlsx/funnel1.xlsx and /dev/null differ diff --git a/include/oox/export/chartexport.hxx b/include/oox/export/chartexport.hxx index 4cdc9f748493..9d76e78ab84f 100644 --- a/include/oox/export/chartexport.hxx +++ b/include/oox/export/chartexport.hxx @@ -231,7 +231,7 @@ private: bool& rPrimaryAxes, sal_uInt32& nIdx); void exportSeriesText( - const css::uno::Reference< css::chart2::data::XDataSequence >& xValueSeq, bool bIsChartex ); + const css::uno::Reference< css::chart2::data::XDataSequence >& xValueSeq ); void exportSeriesCategory( const css::uno::Reference< css::chart2::data::XDataSequence >& xValueSeq, sal_Int32 nValueType = XML_cat ); void exportSeriesValues( @@ -258,22 +258,16 @@ private: void exportAxes( bool bIsChartex ); void exportAxis(const AxisIdPair& rAxisIdPair, bool bIsChartex); - void exportOneAxis_chart( + void _exportAxis( const css::uno::Reference< css::beans::XPropertySet >& xAxisProp, const css::uno::Reference< css::drawing::XShape >& xAxisTitle, const css::uno::Reference< css::beans::XPropertySet >& xMajorGrid, const css::uno::Reference< css::beans::XPropertySet >& xMinorGrid, sal_Int32 nAxisType, const char* sAxisPos, - const AxisIdPair& rAxisIdPair); - void exportOneAxis_chartex( - const css::uno::Reference< css::beans::XPropertySet >& xAxisProp, - const css::uno::Reference< css::drawing::XShape >& xAxisTitle, - const css::uno::Reference< css::beans::XPropertySet >& xMajorGrid, - const css::uno::Reference< css::beans::XPropertySet >& xMinorGrid, - sal_Int32 nAxisType, - const AxisIdPair& rAxisIdPair); - void createAxes(bool bPrimaryAxes, bool bCheckCombinedAxes); + const AxisIdPair& rAxisIdPair, + bool bIsChartex); + void exportAxesId(bool bPrimaryAxes, bool bCheckCombinedAxes = false); void exportView3D(); bool isDeep3dChart(); // Determine if (at least one) chart exported is from the 2014 chartex diff --git a/oox/source/drawingml/chart/plotareacontext.cxx b/oox/source/drawingml/chart/plotareacontext.cxx index 4355f8de7a64..29d769ebb251 100644 --- a/oox/source/drawingml/chart/plotareacontext.cxx +++ b/oox/source/drawingml/chart/plotareacontext.cxx @@ -116,7 +116,7 @@ PlotAreaContext::~PlotAreaContext() { } -ContextHandlerRef PlotAreaContext::onCreateContext( sal_Int32 nElement, [[maybe_unused]]const AttributeList& rAttribs) +ContextHandlerRef PlotAreaContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs) { bool bMSO2007Doc = getFilter().isMSO2007Document(); switch( getCurrentElement() ) @@ -170,7 +170,7 @@ ContextHandlerRef PlotAreaContext::onCreateContext( sal_Int32 nElement, [[maybe_ case CX_TOKEN(plotArea) : switch (nElement) { case CX_TOKEN(plotAreaRegion) : - return new ChartexTypeGroupContext(*this, mrModel.maTypeGroups.create(nElement, false)); + return this; case CX_TOKEN(axis) : // TODO return nullptr; @@ -181,6 +181,43 @@ ContextHandlerRef PlotAreaContext::onCreateContext( sal_Int32 nElement, [[maybe_ return nullptr; } break; + case CX_TOKEN(plotAreaRegion) : + switch (nElement) { + case CX_TOKEN(plotSurface) : + // TODO + return nullptr; + case CX_TOKEN(series) : + if (rAttribs.hasAttribute(XML_layoutId)) { + sal_Int32 nChartType = 0; + OUString sChartId = rAttribs.getStringDefaulted(XML_layoutId); + assert(!sChartId.isEmpty()); + + if (sChartId == "boxWhisker") { + nChartType = CX_TOKEN(boxWhisker); + } else if (sChartId == "clusteredColumn") { + nChartType = CX_TOKEN(clusteredColumn); + } else if (sChartId == "funnel") { + nChartType = CX_TOKEN(funnel); + } else if (sChartId == "paretoLine") { + nChartType = CX_TOKEN(paretoLine); + } else if (sChartId == "regionMap") { + nChartType = CX_TOKEN(regionMap); + } else if (sChartId == "sunburst") { + nChartType = CX_TOKEN(sunburst); + } else if (sChartId == "treemap") { + nChartType = CX_TOKEN(treemap); + } else if (sChartId == "waterfall") { + nChartType = CX_TOKEN(waterfall); + } + assert(nChartType != 0); + + return new ChartexTypeGroupContext( *this, + mrModel.maTypeGroups.create( nChartType, false ) ); + } + break; + + } + break; } return nullptr; } diff --git a/oox/source/drawingml/chart/seriescontext.cxx b/oox/source/drawingml/chart/seriescontext.cxx index 4b3d18624c8c..02fb62a96c6e 100644 --- a/oox/source/drawingml/chart/seriescontext.cxx +++ b/oox/source/drawingml/chart/seriescontext.cxx @@ -410,7 +410,6 @@ ContextHandlerRef SeriesContextBase::onCreateContext( sal_Int32 nElement, const switch( getCurrentElement() ) { case C_TOKEN( ser ): - case CX_TOKEN( series ): switch( nElement ) { case C_TOKEN( idx ): @@ -420,13 +419,10 @@ ContextHandlerRef SeriesContextBase::onCreateContext( sal_Int32 nElement, const mrModel.mnOrder = rAttribs.getInteger( XML_val, -1 ); return nullptr; case C_TOKEN( spPr ): - case CX_TOKEN( spPr ): return new ShapePropertiesContext( *this, mrModel.mxShapeProp.create() ); case C_TOKEN( tx ): - case CX_TOKEN( tx ): return new TextContext( *this, mrModel.mxText.create() ); case C_TOKEN( extLst ): - case CX_TOKEN( extLst ): return this; } break; @@ -446,11 +442,9 @@ ContextHandlerRef SeriesContextBase::onCreateContext( sal_Int32 nElement, const break; case C_TOKEN( extLst ): - case CX_TOKEN( extLst ): switch( nElement ) { case C_TOKEN( ext ): - case CX_TOKEN( ext ): if (mrModel.maSources.has( SeriesModel::DATALABELS )) break; @@ -774,29 +768,36 @@ ContextHandlerRef ChartexSeriesContext::onCreateContext( sal_Int32 nElement, con { switch( getCurrentElement() ) { - case CX_TOKEN( series ): - switch( nElement ) - { - case CX_TOKEN( valueColors ): - // TODO - return nullptr; - case CX_TOKEN( valueColorPositions ): - // TODO - return nullptr; - case CX_TOKEN( dataPt ): - return new DataPointContext( *this, mrModel.maPoints.create(false) ); - case CX_TOKEN( dataLabels ): - return new DataLabelsContext( *this, mrModel.mxLabels.create(false) ); - case CX_TOKEN( dataId ): - // TODO - return nullptr; - case CX_TOKEN( layoutPr ): - // This looks complicated. TODO - return nullptr; - case CX_TOKEN( axisId ): - // TODO - return nullptr; - } + case CX_TOKEN( tx ): + // TODO + return nullptr; + case CX_TOKEN( spPr ): + // TODO + return nullptr; + case CX_TOKEN( valueColors ): + // TODO + return nullptr; + case CX_TOKEN( valueColorPositions ): + // TODO + return nullptr; + case CX_TOKEN( dataPt ): + // TODO + return nullptr; + case CX_TOKEN( dataLabels ): + // TODO + return nullptr; + case CX_TOKEN( dataId ): + // TODO + return nullptr; + case CX_TOKEN( layoutPr ): + // TODO + return nullptr; + case CX_TOKEN( axisId ): + // TODO + return nullptr; + case CX_TOKEN( extLst ): + // TODO + return nullptr; } return SeriesContextBase::onCreateContext( nElement, rAttribs ); } diff --git a/oox/source/drawingml/chart/typegroupcontext.cxx b/oox/source/drawingml/chart/typegroupcontext.cxx index f29b42ab42bf..632b42711428 100644 --- a/oox/source/drawingml/chart/typegroupcontext.cxx +++ b/oox/source/drawingml/chart/typegroupcontext.cxx @@ -413,56 +413,7 @@ void ChartexTypeGroupContext::CreateSeries() ContextHandlerRef ChartexTypeGroupContext::onCreateContext( [[maybe_unused]] sal_Int32 nElement, [[maybe_unused]] const AttributeList& rAttribs ) { - if (isRootElement()) switch (nElement) { - case CX_TOKEN(plotSurface) : - // TODO - return nullptr; - case CX_TOKEN(series) : - if (rAttribs.hasAttribute(XML_layoutId)) { - // If this is the first series, then the type ID is currently - // set to <cx:plotAreaRegion>. If this is not the first series - // in a multi-series chart, it should be set to the previous - // chart type in the series (which *should* only be another - // chartex type, not a <c> type). In either case, set it - // to the specific chart type based on the layoutId attribute - assert(mrModel.mnTypeId == CX_TOKEN(plotAreaRegion) || - mrModel.mnTypeId == CX_TOKEN(boxWhisker) || - mrModel.mnTypeId == CX_TOKEN(clusteredColumn) || - mrModel.mnTypeId == CX_TOKEN(funnel) || - mrModel.mnTypeId == CX_TOKEN(paretoLine) || - mrModel.mnTypeId == CX_TOKEN(regionMap) || - mrModel.mnTypeId == CX_TOKEN(sunburst) || - mrModel.mnTypeId == CX_TOKEN(treemap) || - mrModel.mnTypeId == CX_TOKEN(waterfall)); - OUString sChartId = rAttribs.getStringDefaulted(XML_layoutId); - assert(!sChartId.isEmpty()); - - if (sChartId == "boxWhisker") { - mrModel.mnTypeId = CX_TOKEN(boxWhisker); - } else if (sChartId == "clusteredColumn") { - mrModel.mnTypeId = CX_TOKEN(clusteredColumn); - } else if (sChartId == "funnel") { - mrModel.mnTypeId = CX_TOKEN(funnel); - } else if (sChartId == "paretoLine") { - mrModel.mnTypeId = CX_TOKEN(paretoLine); - } else if (sChartId == "regionMap") { - mrModel.mnTypeId = CX_TOKEN(regionMap); - } else if (sChartId == "sunburst") { - mrModel.mnTypeId = CX_TOKEN(sunburst); - } else if (sChartId == "treemap") { - mrModel.mnTypeId = CX_TOKEN(treemap); - } else if (sChartId == "waterfall") { - mrModel.mnTypeId = CX_TOKEN(waterfall); - } else { - assert(false); - } - - return new ChartexSeriesContext(*this, mrModel.maSeries.create(false)); - } - break; - } - - return nullptr; + return new ChartexSeriesContext( *this, mrModel.maSeries.create(false) ); } } // namespace oox::drawingml::chart diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index a5727f919ecb..ded5f714fc1b 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -450,20 +450,6 @@ static OUString lcl_flattenStringSequence( const Sequence< OUString > & rSequenc return aResult.makeStringAndClear(); } -static void lcl_writeChartexString(FSHelperPtr pFS, std::u16string_view sOut) -{ - pFS->startElement(FSNS(XML_cx, XML_tx)); - // cell range doesn't seem to be supported in chartex? - // TODO: also handle <cx:rich> - pFS->startElement(FSNS(XML_cx, XML_txData)); - // TODO: also handle <cx:f> <cx:v> - pFS->startElement(FSNS(XML_cx, XML_v)); - pFS->writeEscaped(sOut); - pFS->endElement( FSNS( XML_cx, XML_v ) ); - pFS->endElement( FSNS( XML_cx, XML_txData ) ); - pFS->endElement( FSNS( XML_cx, XML_tx ) ); -} - static Sequence< OUString > lcl_getLabelSequence( const Reference< chart2::data::XDataSequence > & xLabelSeq ) { Sequence< OUString > aLabels; @@ -1287,6 +1273,7 @@ void ChartExport::exportChartSpace( const Reference< css::chart::XChartDocument // TODO: printSettings // TODO: style // TODO: text properties + // TODO: shape properties Reference< XPropertySet > xPropSet = xChartDoc->getArea(); if( xPropSet.is() ) exportShapeProps( xPropSet, bIsChartex ); @@ -1865,7 +1852,16 @@ void ChartExport::exportTitle( const Reference< XShape >& xShape, bool bIsCharte if (bIsChartex) { pFS->startElement(FSNS(XML_cx, XML_title)); - lcl_writeChartexString(pFS, xFormattedTitle[0]->getString()); + pFS->startElement(FSNS(XML_cx, XML_tx)); + pFS->startElement(FSNS(XML_cx, XML_txData)); + pFS->startElement(FSNS(XML_cx, XML_v)); + + // TODO: this is probably not right? + pFS->writeEscaped( xFormattedTitle[0]->getString() ); + + pFS->endElement(FSNS(XML_cx, XML_v)); + pFS->endElement(FSNS(XML_cx, XML_txData)); + pFS->endElement(FSNS(XML_cx, XML_tx)); } else { pFS->startElement(FSNS(XML_c, XML_title)); pFS->startElement(FSNS(XML_c, XML_tx)); @@ -1963,8 +1959,7 @@ void ChartExport::exportTitle( const Reference< XShape >& xShape, bool bIsCharte if (aManualLayout.hasValue()) { if (bIsChartex) { - // TODO. Chartex doesn't have a manualLayout tag, but does have - // "pos" and "align" attributes. Not sure how these correspond. + // TODO } else { pFS->startElement(FSNS(XML_c, XML_layout)); pFS->startElement(FSNS(XML_c, XML_manualLayout)); @@ -2123,7 +2118,7 @@ void ChartExport::exportPlotArea(const Reference< css::chart::XChartDocument >& pFS->singleElement(FSNS(XML_c, XML_barDir), XML_val, "col"); pFS->singleElement(FSNS(XML_c, XML_grouping), XML_val, "clustered"); pFS->singleElement(FSNS(XML_c, XML_varyColors), XML_val, "0"); - createAxes(true, false); + exportAxesId(true); pFS->endElement(FSNS(XML_c, XML_barChart)); } @@ -2252,11 +2247,10 @@ void ChartExport::exportPlotArea(const Reference< css::chart::XChartDocument >& } //Axis Data - exportAxes(bIsChartex); + exportAxes( bIsChartex ); - if (!bIsChartex) { + if (!bIsChartex) { // not supported in chartex? // Data Table - // not supported in chartex? exportDataTable(); } @@ -2638,7 +2632,7 @@ void ChartExport::exportAreaChart( const Reference< chart2::XChartType >& xChart if (splitDataSeries.hasElements()) exportSeries(xChartType, splitDataSeries, bPrimaryAxes, false); - createAxes(bPrimaryAxes, false); + exportAxesId(bPrimaryAxes); pFS->endElement(FSNS(XML_c, nTypeId)); } @@ -2741,7 +2735,7 @@ void ChartExport::exportBarChart(const Reference< chart2::XChartType >& xChartTy } } - createAxes(bPrimaryAxes, false); + exportAxesId(bPrimaryAxes); pFS->endElement(FSNS(XML_c, nTypeId)); } @@ -2766,7 +2760,7 @@ void ChartExport::exportBubbleChart( const Reference< chart2::XChartType >& xCha if (splitDataSeries.hasElements()) exportSeries(xChartType, splitDataSeries, bPrimaryAxes, false); - createAxes(bPrimaryAxes, false); + exportAxesId(bPrimaryAxes); pFS->endElement(FSNS(XML_c, XML_bubbleChart)); } @@ -2788,6 +2782,9 @@ void ChartExport::exportFunnelChart( const Reference< chart2::XChartType >& xCha bool bPrimaryAxes = false; exportSeries(xChartType, splitDataSeries, bPrimaryAxes, true); + // TODO: in chartex, axis is an element of cx:plotArea + //exportAxesId(bPrimaryAxes); + pFS->endElement(FSNS(XML_cx, XML_series)); } } @@ -2905,7 +2902,7 @@ void ChartExport::exportLineChart( const Reference< chart2::XChartType >& xChart pFS->singleElement(FSNS(XML_c, XML_marker), XML_val, marker); } - createAxes(bPrimaryAxes, true); + exportAxesId(bPrimaryAxes, true); pFS->endElement( FSNS( XML_c, nTypeId ) ); } @@ -2950,7 +2947,7 @@ void ChartExport::exportRadarChart( const Reference< chart2::XChartType >& xChar exportVaryColors(xChartType); bool bPrimaryAxes = true; exportAllSeries(xChartType, bPrimaryAxes); - createAxes(bPrimaryAxes, false); + exportAxesId(bPrimaryAxes); pFS->endElement( FSNS( XML_c, XML_radarChart ) ); } @@ -2980,7 +2977,7 @@ void ChartExport::exportScatterChartSeries( const Reference< chart2::XChartType bool bPrimaryAxes = true; if (pSeries) exportSeries(xChartType, *pSeries, bPrimaryAxes, false); - createAxes(bPrimaryAxes, false); + exportAxesId(bPrimaryAxes); pFS->endElement( FSNS( XML_c, XML_scatterChart ) ); } @@ -3028,7 +3025,7 @@ void ChartExport::exportStockChart( const Reference< chart2::XChartType >& xChar exportUpDownBars(xChartType); } - createAxes(bPrimaryAxes, false); + exportAxesId(bPrimaryAxes); pFS->endElement(FSNS(XML_c, XML_stockChart)); } @@ -3103,7 +3100,7 @@ void ChartExport::exportSurfaceChart( const Reference< chart2::XChartType >& xCh exportVaryColors(xChartType); bool bPrimaryAxes = true; exportAllSeries(xChartType, bPrimaryAxes); - createAxes(bPrimaryAxes, false); + exportAxesId(bPrimaryAxes); pFS->endElement( FSNS( XML_c, nTypeId ) ); } @@ -3186,167 +3183,161 @@ void ChartExport::exportSeries( const Reference<chart2::XChartType>& xChartType, // have found the main sequence, then xValuesSeq and // xLabelSeq contain those. Otherwise both are empty - FSHelperPtr pFS = GetFS(); - - if (!bIsChartex) { - pFS->startElement(FSNS(XML_c, XML_ser)); - - // TODO: idx and order - pFS->singleElement( FSNS( XML_c, XML_idx ), - XML_val, OString::number(mnSeriesCount) ); - pFS->singleElement( FSNS( XML_c, XML_order ), - XML_val, OString::number(mnSeriesCount++) ); - } + { + FSHelperPtr pFS = GetFS(); - // export label - if( xLabelSeq.is() ) - exportSeriesText( xLabelSeq, bIsChartex ); + if (!bIsChartex) { + pFS->startElement(FSNS(XML_c, XML_ser)); - Reference<XPropertySet> xPropSet(xDataSeries, UNO_QUERY_THROW); - if( GetProperty( xPropSet, u"AttachedAxisIndex"_ustr) ) - { - sal_Int32 nLocalAttachedAxis = 0; - mAny >>= nLocalAttachedAxis; - rPrimaryAxes = isPrimaryAxes(nLocalAttachedAxis); - } + // TODO: idx and order + pFS->singleElement( FSNS( XML_c, XML_idx ), + XML_val, OString::number(mnSeriesCount) ); + pFS->singleElement( FSNS( XML_c, XML_order ), + XML_val, OString::number(mnSeriesCount++) ); - // export shape properties - Reference< XPropertySet > xOldPropSet = SchXMLSeriesHelper::createOldAPISeriesPropertySet( - rSeries, getModel() ); - if( xOldPropSet.is() ) - { - exportShapeProps( xOldPropSet, bIsChartex ); - } + // export label + if( xLabelSeq.is() ) + exportSeriesText( xLabelSeq ); - if (!bIsChartex) { - switch( eChartType ) - { - case chart::TYPEID_BUBBLE: - case chart::TYPEID_HORBAR: - case chart::TYPEID_BAR: + Reference<XPropertySet> xPropSet(xDataSeries, UNO_QUERY_THROW); + if( GetProperty( xPropSet, u"AttachedAxisIndex"_ustr) ) { - pFS->singleElement(FSNS(XML_c, XML_invertIfNegative), XML_val, "0"); + sal_Int32 nLocalAttachedAxis = 0; + mAny >>= nLocalAttachedAxis; + rPrimaryAxes = isPrimaryAxes(nLocalAttachedAxis); } - break; - case chart::TYPEID_LINE: + + // export shape properties + Reference< XPropertySet > xOldPropSet = SchXMLSeriesHelper::createOldAPISeriesPropertySet( + rSeries, getModel() ); + if( xOldPropSet.is() ) { - exportMarker(xOldPropSet); - break; + exportShapeProps( xOldPropSet, false ); } - case chart::TYPEID_PIE: - case chart::TYPEID_DOUGHNUT: + + switch( eChartType ) { - if( xOldPropSet.is() && GetProperty( xOldPropSet, u"SegmentOffset"_ustr) ) + case chart::TYPEID_BUBBLE: + case chart::TYPEID_HORBAR: + case chart::TYPEID_BAR: { - sal_Int32 nOffset = 0; - mAny >>= nOffset; - pFS->singleElement( FSNS( XML_c, XML_explosion ), - XML_val, OString::number( nOffset ) ); + pFS->singleElement(FSNS(XML_c, XML_invertIfNegative), XML_val, "0"); } break; + case chart::TYPEID_LINE: + { + exportMarker(xOldPropSet); + break; + } + case chart::TYPEID_PIE: + case chart::TYPEID_DOUGHNUT: + { + if( xOldPropSet.is() && GetProperty( xOldPropSet, u"SegmentOffset"_ustr) ) + { + sal_Int32 nOffset = 0; + mAny >>= nOffset; + pFS->singleElement( FSNS( XML_c, XML_explosion ), + XML_val, OString::number( nOffset ) ); + } + break; + } + case chart::TYPEID_SCATTER: + { + exportMarker(xOldPropSet); + break; + } + case chart::TYPEID_RADARLINE: + { + exportMarker(xOldPropSet); + break; + } } - case chart::TYPEID_SCATTER: - { - exportMarker(xOldPropSet); - break; - } - case chart::TYPEID_RADARLINE: - { - exportMarker(xOldPropSet); - break; - } - } - // export data points - exportDataPoints( uno::Reference< beans::XPropertySet >( rSeries, uno::UNO_QUERY ), nSeriesLength, eChartType ); - } + // export data points + exportDataPoints( uno::Reference< beans::XPropertySet >( rSeries, uno::UNO_QUERY ), nSeriesLength, eChartType ); + } - DataLabelsRange aDLblsRange; - // export data labels - exportDataLabels(rSeries, nSeriesLength, eChartType, aDLblsRange, bIsChartex); + DataLabelsRange aDLblsRange; + // export data labels + exportDataLabels(rSeries, nSeriesLength, eChartType, aDLblsRange, bIsChartex); - if (!bIsChartex) { - exportTrendlines( rSeries ); + if (!bIsChartex) { + exportTrendlines( rSeries ); - if( eChartType != chart::TYPEID_PIE && - eChartType != chart::TYPEID_RADARLINE ) - { - //export error bars here - Reference< XPropertySet > xSeriesPropSet( xSource, uno::UNO_QUERY ); - Reference< XPropertySet > xErrorBarYProps; - xSeriesPropSet->getPropertyValue(u"ErrorBarY"_ustr) >>= xErrorBarYProps; - if(xErrorBarYProps.is()) - exportErrorBar(xErrorBarYProps, true); - if (eChartType != chart::TYPEID_BAR && - eChartType != chart::TYPEID_HORBAR) + if( eChartType != chart::TYPEID_PIE && + eChartType != chart::TYPEID_RADARLINE ) { - Reference< XPropertySet > xErrorBarXProps; - xSeriesPropSet->getPropertyValue(u"ErrorBarX"_ustr) >>= xErrorBarXProps; - if(xErrorBarXProps.is()) - exportErrorBar(xErrorBarXProps, false); + //export error bars here + Reference< XPropertySet > xSeriesPropSet( xSource, uno::UNO_QUERY ); + Reference< XPropertySet > xErrorBarYProps; + xSeriesPropSet->getPropertyValue(u"ErrorBarY"_ustr) >>= xErrorBarYProps; + if(xErrorBarYProps.is()) + exportErrorBar(xErrorBarYProps, true); + if (eChartType != chart::TYPEID_BAR && + eChartType != chart::TYPEID_HORBAR) + { + Reference< XPropertySet > xErrorBarXProps; + xSeriesPropSet->getPropertyValue(u"ErrorBarX"_ustr) >>= xErrorBarXProps; + if(xErrorBarXProps.is()) + exportErrorBar(xErrorBarXProps, false); + } } - } - // export categories - if( eChartType != chart::TYPEID_SCATTER && eChartType != chart::TYPEID_BUBBLE && mxCategoriesValues.is() ) - exportSeriesCategory( mxCategoriesValues ); + // export categories + if( eChartType != chart::TYPEID_SCATTER && eChartType != chart::TYPEID_BUBBLE && mxCategoriesValues.is() ) + exportSeriesCategory( mxCategoriesValues ); - if( (eChartType == chart::TYPEID_SCATTER) - || (eChartType == chart::TYPEID_BUBBLE) ) - { - // export xVal - Reference< chart2::data::XLabeledDataSequence > xSequence( lcl_getDataSequenceByRole( aSeqCnt, u"values-x"_ustr ) ); - if( xSequence.is() ) + if( (eChartType == chart::TYPEID_SCATTER) + || (eChartType == chart::TYPEID_BUBBLE) ) { - Reference< chart2::data::XDataSequence > xValues( xSequence->getValues() ); - if( xValues.is() ) - exportSeriesValues( xValues, XML_xVal ); + // export xVal + Reference< chart2::data::XLabeledDataSequence > xSequence( lcl_getDataSequenceByRole( aSeqCnt, u"values-x"_ustr ) ); + if( xSequence.is() ) + { + Reference< chart2::data::XDataSequence > xValues( xSequence->getValues() ); + if( xValues.is() ) + exportSeriesValues( xValues, XML_xVal ); + } + else if( mxCategoriesValues.is() ) + exportSeriesCategory( mxCategoriesValues, XML_xVal ); } - else if( mxCategoriesValues.is() ) - exportSeriesCategory( mxCategoriesValues, XML_xVal ); - } - if( eChartType == chart::TYPEID_BUBBLE ) - { - // export yVal - Reference< chart2::data::XLabeledDataSequence > xSequence( lcl_getDataSequenceByRole( aSeqCnt, u"values-y"_ustr ) ); - if( xSequence.is() ) + if( eChartType == chart::TYPEID_BUBBLE ) { - Reference< chart2::data::XDataSequence > xValues( xSequence->getValues() ); - if( xValues.is() ) - exportSeriesValues( xValues, XML_yVal ); + // export yVal + Reference< chart2::data::XLabeledDataSequence > xSequence( lcl_getDataSequenceByRole( aSeqCnt, u"values-y"_ustr ) ); + if( xSequence.is() ) + { + Reference< chart2::data::XDataSequence > xValues( xSequence->getValues() ); + if( xValues.is() ) + exportSeriesValues( xValues, XML_yVal ); + } } - } - - // export values - if( xValuesSeq.is() ) - { - sal_Int32 nYValueType = XML_val; - if( eChartType == chart::TYPEID_SCATTER ) - nYValueType = XML_yVal; - else if( eChartType == chart::TYPEID_BUBBLE ) - nYValueType = XML_bubbleSize; - exportSeriesValues( xValuesSeq, nYValueType ); - } - if( eChartType == chart::TYPEID_SCATTER - || eChartType == chart::TYPEID_LINE ) - exportSmooth(); + // export values + if( xValuesSeq.is() ) + { + sal_Int32 nYValueType = XML_val; + if( eChartType == chart::TYPEID_SCATTER ) + nYValueType = XML_yVal; + else if( eChartType == chart::TYPEID_BUBBLE ) + nYValueType = XML_bubbleSize; + exportSeriesValues( xValuesSeq, nYValueType ); + } - // tdf103988: "corrupted" files with Bubble chart opening in MSO - if( eChartType == chart::TYPEID_BUBBLE ) - pFS->singleElement(FSNS(XML_c, XML_bubble3D), XML_val, "0"); + if( eChartType == chart::TYPEID_SCATTER + || eChartType == chart::TYPEID_LINE ) + exportSmooth(); - if (!aDLblsRange.empty()) - writeDataLabelsRange(pFS, GetFB(), aDLblsRange); + // tdf103988: "corrupted" files with Bubble chart opening in MSO + if( eChartType == chart::TYPEID_BUBBLE ) + pFS->singleElement(FSNS(XML_c, XML_bubble3D), XML_val, "0"); - pFS->endElement( FSNS( XML_c, XML_ser ) ); - } else { - // chartex + if (!aDLblsRange.empty()) + writeDataLabelsRange(pFS, GetFB(), aDLblsRange); - // Align the data id here with that in exportData(). - // See DATA_ID_COMMENT - pFS->singleElement(FSNS(XML_cx, XML_dataId), XML_val, "0"); + pFS->endElement( FSNS( XML_c, XML_ser ) ); + } } } } @@ -3388,7 +3379,7 @@ void ChartExport::exportCandleStickSeries( // export label if( xLabelSeq.is() ) - exportSeriesText( xLabelSeq, false ); + exportSeriesText( xLabelSeq ); // TODO:export shape properties @@ -3408,37 +3399,30 @@ void ChartExport::exportCandleStickSeries( } } -void ChartExport::exportSeriesText( const Reference< chart2::data::XDataSequence > & xValueSeq, - bool bIsChartex) +void ChartExport::exportSeriesText( const Reference< chart2::data::XDataSequence > & xValueSeq ) { FSHelperPtr pFS = GetFS(); + pFS->startElement(FSNS(XML_c, XML_tx)); - OUString aLabelString = lcl_flattenStringSequence(lcl_getLabelSequence(xValueSeq)); - - if (bIsChartex) { - lcl_writeChartexString(pFS, aLabelString); - } else { - pFS->startElement(FSNS(XML_c, XML_tx)); - - OUString aCellRange = xValueSeq->getSourceRangeRepresentation(); - aCellRange = parseFormula( aCellRange ); - pFS->startElement(FSNS(XML_c, XML_strRef)); + OUString aCellRange = xValueSeq->getSourceRangeRepresentation(); + aCellRange = parseFormula( aCellRange ); + pFS->startElement(FSNS(XML_c, XML_strRef)); - pFS->startElement(FSNS(XML_c, XML_f)); - pFS->writeEscaped( aCellRange ); - pFS->endElement( FSNS( XML_c, XML_f ) ); + pFS->startElement(FSNS(XML_c, XML_f)); + pFS->writeEscaped( aCellRange ); + pFS->endElement( FSNS( XML_c, XML_f ) ); - pFS->startElement(FSNS(XML_c, XML_strCache)); - pFS->singleElement(FSNS(XML_c, XML_ptCount), XML_val, "1"); - pFS->startElement(FSNS(XML_c, XML_pt), XML_idx, "0"); - pFS->startElement(FSNS(XML_c, XML_v)); - pFS->writeEscaped( aLabelString ); - pFS->endElement( FSNS( XML_c, XML_v ) ); - pFS->endElement( FSNS( XML_c, XML_pt ) ); - pFS->endElement( FSNS( XML_c, XML_strCache ) ); - pFS->endElement( FSNS( XML_c, XML_strRef ) ); - pFS->endElement( FSNS( XML_c, XML_tx ) ); - } + OUString aLabelString = lcl_flattenStringSequence(lcl_getLabelSequence(xValueSeq)); + pFS->startElement(FSNS(XML_c, XML_strCache)); + pFS->singleElement(FSNS(XML_c, XML_ptCount), XML_val, "1"); + pFS->startElement(FSNS(XML_c, XML_pt), XML_idx, "0"); + pFS->startElement(FSNS(XML_c, XML_v)); + pFS->writeEscaped( aLabelString ); + pFS->endElement( FSNS( XML_c, XML_v ) ); + pFS->endElement( FSNS( XML_c, XML_pt ) ); + pFS->endElement( FSNS( XML_c, XML_strCache ) ); + pFS->endElement( FSNS( XML_c, XML_strRef ) ); + pFS->endElement( FSNS( XML_c, XML_tx ) ); } void ChartExport::exportSeriesCategory( const Reference< chart2::data::XDataSequence > & xValueSeq, sal_Int32 nValueType ) @@ -3890,39 +3874,23 @@ void ChartExport::exportAxis(const AxisIdPair& rAxisIdPair, bool bIsChartex) } } - if (bIsChartex) { - exportOneAxis_chartex(xAxisProp, xAxisTitle, xMajorGrid, xMinorGrid, nAxisType, - rAxisIdPair); - } else { - exportOneAxis_chart(xAxisProp, xAxisTitle, xMajorGrid, xMinorGrid, nAxisType, - sAxPos, rAxisIdPair); - } -} - -static const char *getTickMarkLocStr(sal_Int32 nValue) -{ - const bool bInner = nValue & css::chart::ChartAxisMarks::INNER; - const bool bOuter = nValue & css::chart::ChartAxisMarks::OUTER; - if( bInner && bOuter ) { - return "cross"; - } else if( bInner ) { - return "in"; - } else if( bOuter ) { - return "out"; - } else { - return "none"; - } + _exportAxis(xAxisProp, xAxisTitle, xMajorGrid, xMinorGrid, nAxisType, + sAxPos, rAxisIdPair, bIsChartex); } -void ChartExport::exportOneAxis_chart( +void ChartExport::_exportAxis( const Reference< XPropertySet >& xAxisProp, const Reference< drawing::XShape >& xAxisTitle, const Reference< XPropertySet >& xMajorGrid, const Reference< XPropertySet >& xMinorGrid, sal_Int32 nAxisType, const char* sAxisPos, - const AxisIdPair& rAxisIdPair) + const AxisIdPair& rAxisIdPair, + bool bIsChartex) { + // TODO for chartex + if (bIsChartex) return; + FSHelperPtr pFS = GetFS(); pFS->startElement(FSNS(XML_c, nAxisType)); pFS->singleElement(FSNS(XML_c, XML_axId), XML_val, OString::number(rAxisIdPair.nAxisId)); @@ -3991,7 +3959,7 @@ void ChartExport::exportOneAxis_chart( if( xMajorGrid.is()) { pFS->startElement(FSNS(XML_c, XML_majorGridlines)); - exportShapeProps( xMajorGrid, false ); + exportShapeProps( xMajorGrid, bIsChartex ); pFS->endElement( FSNS( XML_c, XML_majorGridlines ) ); } @@ -3999,13 +3967,13 @@ void ChartExport::exportOneAxis_chart( if( xMinorGrid.is()) { pFS->startElement(FSNS(XML_c, XML_minorGridlines)); - exportShapeProps( xMinorGrid, false ); + exportShapeProps( xMinorGrid, bIsChartex ); pFS->endElement( FSNS( XML_c, XML_minorGridlines ) ); } // title if( xAxisTitle.is() ) - exportTitle( xAxisTitle, false ); + exportTitle( xAxisTitle, bIsChartex ); bool bLinkedNumFmt = true; if (GetProperty(xAxisProp, u"LinkNumberFormatToSource"_ustr)) @@ -4028,15 +3996,35 @@ void ChartExport::exportOneAxis_chart( if(GetProperty( xAxisProp, u"Marks"_ustr ) ) { mAny >>= nValue; - pFS->singleElement(FSNS(XML_c, XML_majorTickMark), XML_val, - getTickMarkLocStr(nValue)); + bool bInner = nValue & css::chart::ChartAxisMarks::INNER; + bool bOuter = nValue & css::chart::ChartAxisMarks::OUTER; + const char* majorTickMark = nullptr; + if( bInner && bOuter ) + majorTickMark = "cross"; + else if( bInner ) + majorTickMark = "in"; + else if( bOuter ) + majorTickMark = "out"; + else + majorTickMark = "none"; + pFS->singleElement(FSNS(XML_c, XML_majorTickMark), XML_val, majorTickMark); } // minorTickMark if(GetProperty( xAxisProp, u"HelpMarks"_ustr ) ) { mAny >>= nValue; - pFS->singleElement(FSNS(XML_c, XML_minorTickMark), XML_val, - getTickMarkLocStr(nValue)); + bool bInner = nValue & css::chart::ChartAxisMarks::INNER; + bool bOuter = nValue & css::chart::ChartAxisMarks::OUTER; + const char* minorTickMark = nullptr; + if( bInner && bOuter ) + minorTickMark = "cross"; + else if( bInner ) + minorTickMark = "in"; + else if( bOuter ) + minorTickMark = "out"; + else + minorTickMark = "none"; + pFS->singleElement(FSNS(XML_c, XML_minorTickMark), XML_val, minorTickMark); } // tickLblPos const char* sTickLblPos = nullptr; @@ -4071,9 +4059,9 @@ void ChartExport::exportOneAxis_chart( pFS->singleElement(FSNS(XML_c, XML_tickLblPos), XML_val, sTickLblPos); // shape properties - exportShapeProps( xAxisProp, false ); + exportShapeProps( xAxisProp, bIsChartex ); - exportTextProps(xAxisProp, false); + exportTextProps(xAxisProp, bIsChartex); pFS->singleElement(FSNS(XML_c, XML_crossAx), XML_val, OString::number(rAxisIdPair.nCrossAx)); @@ -4235,183 +4223,6 @@ void ChartExport::exportOneAxis_chart( pFS->endElement( FSNS( XML_c, nAxisType ) ); } -void ChartExport::exportOneAxis_chartex( - const Reference< XPropertySet >& xAxisProp, - const Reference< drawing::XShape >& xAxisTitle, - const Reference< XPropertySet >& xMajorGrid, - const Reference< XPropertySet >& xMinorGrid, - sal_Int32 nAxisType, - const AxisIdPair& rAxisIdPair) -{ - FSHelperPtr pFS = GetFS(); - pFS->startElement(FSNS(XML_cx, XML_axis), XML_id, OString::number(rAxisIdPair.nAxisId)); - - // The following is in the 2010 chart code above: - // bool bVisible = true; - // if( xAxisProp.is() ) - // { - // xAxisProp->getPropertyValue(u"Visible"_ustr) >>= bVisible; - // } - // // only export each axis only once non-deleted - // auto aItInsertedPair = maExportedAxis.insert(rAxisIdPair.nAxisType); - // bool bDeleted = !aItInsertedPair.second; - // - // pFS->singleElement(FSNS(XML_c, XML_delete), XML_val, !bDeleted && bVisible ? "0" : "1"); - // - // Is chartex attribute "hidden" the same as !bVisible? And what to do if - // the axis is deleted, per above? - - // ==== catScaling/valScaling - switch (nAxisType) { - case XML_catAx: - pFS->singleElement(FSNS(XML_cx, XML_catScaling) /* TODO: handle gapWidth */); - break; - case XML_valAx: - { - bool bAutoMax = false; - double dMax = 0; // Make VS happy - bool bMaxSpecified = false; - if(GetProperty( xAxisProp, u"AutoMax"_ustr ) ) - mAny >>= bAutoMax; - - if( !bAutoMax && (GetProperty( xAxisProp, u"Max"_ustr ) ) ) - { - mAny >>= dMax; - bMaxSpecified = true; - } - - bool bAutoMin = false; - double dMin = 0; // Make VS happy - bool bMinSpecified = false; - if(GetProperty( xAxisProp, u"AutoMin"_ustr ) ) - mAny >>= bAutoMin; - - if( !bAutoMin && (GetProperty( xAxisProp, u"Min"_ustr ) ) ) - { - mAny >>= dMin; - bMinSpecified = true; - } - - // TODO: handle majorUnit/minorUnit in the following - if (bMaxSpecified && bMinSpecified) { - pFS->singleElement(FSNS(XML_cx, XML_valScaling), - XML_max, OString::number(dMax), - XML_min, OString::number(dMin)); - } else if (!bMaxSpecified && bMinSpecified) { - pFS->singleElement(FSNS(XML_cx, XML_valScaling), - XML_min, OString::number(dMin)); - } else if (bMaxSpecified && !bMinSpecified) { - pFS->singleElement(FSNS(XML_cx, XML_valScaling), - XML_max, OString::number(dMax)); - } else { - pFS->singleElement(FSNS(XML_cx, XML_valScaling)); - } - - } - break; - default: - // shouldn't happen - assert(false); - } - - // ==== title - if( xAxisTitle.is() ) { - exportTitle( xAxisTitle, true ); - } - - // ==== units - if (GetProperty( xAxisProp, u"DisplayUnits"_ustr ) ) - { - bool bDisplayUnits = false; - mAny >>= bDisplayUnits; - if (bDisplayUnits) - { - if (GetProperty( xAxisProp, u"BuiltInUnit"_ustr )) - { - OUString aVal; - mAny >>= aVal; - if(!aVal.isEmpty()) - { - pFS->startElement(FSNS(XML_cx, XML_units)); - - pFS->startElement(FSNS(XML_cx, XML_unitsLabel)); - - lcl_writeChartexString(pFS, aVal); - - pFS->endElement(FSNS(XML_cx, XML_unitsLabel)); - - pFS->endElement( FSNS( XML_cx, XML_units ) ); - } - } - } - } - - // ==== majorGridlines - if( xMajorGrid.is()) - { - pFS->startElement(FSNS(XML_cx, XML_majorGridlines)); - exportShapeProps( xMajorGrid, true ); - pFS->endElement( FSNS( XML_cx, XML_majorGridlines ) ); - } - - // ==== minorGridlines - if( xMinorGrid.is()) - { - pFS->startElement(FSNS(XML_cx, XML_minorGridlines)); - exportShapeProps( xMinorGrid, true ); - pFS->endElement( FSNS( XML_cx, XML_minorGridlines ) ); - } - - // ==== majorTickMarks - if (GetProperty( xAxisProp, u"Marks"_ustr ) ) - { - sal_Int32 nValue = 0; - mAny >>= nValue; - pFS->singleElement(FSNS(XML_cx, XML_majorTickMarks), XML_type, - getTickMarkLocStr(nValue)); - } - - // ==== minorTickMarks - if (GetProperty( xAxisProp, u"HelpMarks"_ustr ) ) - { - sal_Int32 nValue = 0; - mAny >>= nValue; - pFS->singleElement(FSNS(XML_cx, XML_minorTickMarks), XML_type, - getTickMarkLocStr(nValue)); - } - - // ==== tickLabels consists of nothing but an extLst so I don't know how to - // handle it - - // ==== numFmt - bool bLinkedNumFmt = true; - if (GetProperty(xAxisProp, u"LinkNumberFormatToSource"_ustr)) - mAny >>= bLinkedNumFmt; - - OUString aNumberFormatString(u"General"_ustr); - if (GetProperty(xAxisProp, u"NumberFormat"_ustr)) - { - sal_Int32 nKey = 0; - mAny >>= nKey; - aNumberFormatString = getNumberFormatCode(nKey); - } - - // We're always outputting this, which presumably isn't necessary, but it's - // not clear what the defaults are for determining if an explicit element is - // needed - pFS->singleElement(FSNS(XML_cx, XML_numFmt), - XML_formatCode, aNumberFormatString, - XML_sourceLinked, bLinkedNumFmt ? "1" : "0"); - - // ==== spPr - exportShapeProps( xAxisProp, true ); - - // ==== txPr - exportTextProps(xAxisProp, true); - - pFS->endElement( FSNS( XML_cx, XML_axis ) ); -} - struct LabelPlacementParam { bool mbExport; @@ -5026,8 +4837,7 @@ void ChartExport::exportDataPoints( } } -// Generalized axis output -void ChartExport::createAxes(bool bPrimaryAxes, bool bCheckCombinedAxes) +void ChartExport::exportAxesId(bool bPrimaryAxes, bool bCheckCombinedAxes) { sal_Int32 nAxisIdx, nAxisIdy; bool bPrimaryAxisExists = false; @@ -5053,7 +4863,6 @@ void ChartExport::createAxes(bool bPrimaryAxes, bool bCheckCombinedAxes) maAxes.emplace_back( eXAxis, nAxisIdx, nAxisIdy ); maAxes.emplace_back( eYAxis, nAxisIdy, nAxisIdx ); } - // Export IDs FSHelperPtr pFS = GetFS(); pFS->singleElement(FSNS(XML_c, XML_axId), XML_val, OString::number(nAxisIdx)); pFS->singleElement(FSNS(XML_c, XML_axId), XML_val, OString::number(nAxisIdy)); diff --git a/oox/source/token/tokens.txt b/oox/source/token/tokens.txt index fc8676a16195..14ff55990c6a 100644 --- a/oox/source/token/tokens.txt +++ b/oox/source/token/tokens.txt @@ -1111,7 +1111,6 @@ cardinalText caseSensitive cat catAx -catScaling catLst catalog category @@ -3328,7 +3327,6 @@ majorFont majorGridlines majorHAnsi majorTickMark -majorTickMarks majorTimeUnit majorUnit man @@ -3483,7 +3481,6 @@ minorFont minorGridlines minorHAnsi minorTickMark -minorTickMarks minorTimeUnit minorUnit mintCream @@ -5416,7 +5413,6 @@ threePt thresh through thruBlk -tickLabels tickLblPos tickLblSkip tickMarkSkip @@ -5604,8 +5600,6 @@ uniqueName uniqueParent uniqueTag uniqueValues -units -unitsLabel unknown unknownRelationship unlocked @@ -5706,7 +5700,6 @@ vSpace vacatedStyle val valAx -valScaling value valueAxis valueBetween diff --git a/test/source/xmltesttools.cxx b/test/source/xmltesttools.cxx index 84541419520d..ff6a1f8b68f5 100644 --- a/test/source/xmltesttools.cxx +++ b/test/source/xmltesttools.cxx @@ -461,8 +461,6 @@ void XmlTestTools::registerOOXMLNamespaces(xmlXPathContextPtr& pXmlXpathCtx) BAD_CAST("http://schemas.microsoft.com/office/drawing/2010/main")); xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("c"), BAD_CAST("http://schemas.openxmlformats.org/drawingml/2006/chart")); - xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("cx"), - BAD_CAST("http://schemas.microsoft.com/office/drawing/2014/chartex")); xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("x"), BAD_CAST("http://schemas.openxmlformats.org/spreadsheetml/2006/main")); xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("r"),
