sw/source/filter/xml/xmltbli.cxx | 128 ++++++++++++++++----------------------- sw/source/filter/xml/xmltbli.hxx | 4 - 2 files changed, 54 insertions(+), 78 deletions(-)
New commits: commit e46be5018d78097f9cd75a36992a2af88652fe4c Author: Noel <noelgran...@gmail.com> AuthorDate: Fri Nov 27 15:27:33 2020 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Sat Nov 28 08:49:59 2020 +0100 fastparser in SwXMLTableContext Change-Id: I92e70bce3418c415a1855e0dc11c09fb32040e6f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106774 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx index e3061074329d..e26da2ab50b0 100644 --- a/sw/source/filter/xml/xmltbli.cxx +++ b/sw/source/filter/xml/xmltbli.cxx @@ -714,8 +714,8 @@ class SwXMLTableColContext_Impl : public SvXMLImportContext public: SwXMLTableColContext_Impl( - SwXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const Reference< xml::sax::XAttributeList > & xAttrList, + SwXMLImport& rImport, + const Reference< xml::sax::XFastAttributeList > & xAttrList, SwXMLTableContext *pTable ); SwXMLImport& GetSwImport() { return static_cast<SwXMLImport&>(GetImport()); } @@ -724,45 +724,43 @@ public: } SwXMLTableColContext_Impl::SwXMLTableColContext_Impl( - SwXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const Reference< xml::sax::XAttributeList > & xAttrList, + SwXMLImport& rImport, + const Reference< xml::sax::XFastAttributeList > & xAttrList, SwXMLTableContext *pTable ) : - SvXMLImportContext( rImport, nPrfx, rLName ), + SvXMLImportContext( rImport ), xMyTable( pTable ) { sal_uInt32 nColRep = 1; OUString aStyleName, aDfltCellStyleName; - sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - for( sal_Int16 i=0; i < nAttrCount; i++ ) + for( auto &aIter : sax_fastparser::castToFastAttributeList( xAttrList ) ) { - const OUString& rAttrName = xAttrList->getNameByIndex( i ); - - OUString aLocalName; - const sal_uInt16 nPrefix = - GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, - &aLocalName ); - const OUString& rValue = xAttrList->getValueByIndex( i ); - if( XML_NAMESPACE_TABLE == nPrefix ) + OUString sValue = aIter.toString(); + switch (aIter.getToken()) { - if( IsXMLToken( aLocalName, XML_STYLE_NAME ) ) - aStyleName = rValue; - else if( IsXMLToken( aLocalName, XML_NUMBER_COLUMNS_REPEATED ) ) + case XML_ELEMENT(TABLE, XML_STYLE_NAME): + aStyleName = sValue; + break; + case XML_ELEMENT(TABLE, XML_NUMBER_COLUMNS_REPEATED): { - nColRep = static_cast<sal_uInt32>(std::max<sal_Int32>(1, rValue.toInt32())); + nColRep = static_cast<sal_uInt32>(std::max<sal_Int32>(1, sValue.toInt32())); if (nColRep > 256) { SAL_INFO("sw.xml", "ignoring huge table:number-columns-repeated " << nColRep); nColRep = 1; } + break; } - else if( IsXMLToken( aLocalName, XML_DEFAULT_CELL_STYLE_NAME ) ) - aDfltCellStyleName = rValue; - } - else if ( (XML_NAMESPACE_XML == nPrefix) && - IsXMLToken( aLocalName, XML_ID ) ) - { - //FIXME where to put this??? columns do not actually exist in writer... + case XML_ELEMENT(TABLE, XML_DEFAULT_CELL_STYLE_NAME): + aDfltCellStyleName = sValue; + break; + case XML_ELEMENT(XML, XML_ID): + { + //FIXME where to put this??? columns do not actually exist in writer... + break; + } + default: + XMLOFF_WARN_UNKNOWN("sw", aIter); } } @@ -803,13 +801,11 @@ class SwXMLTableColsContext_Impl : public SvXMLImportContext public: SwXMLTableColsContext_Impl( - SwXMLImport& rImport, sal_uInt16 nPrfx, - const OUString& rLName, + SwXMLImport& rImport, SwXMLTableContext *pTable ); - virtual SvXMLImportContextRef CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, - const Reference< xml::sax::XAttributeList > & xAttrList ) override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ) override; SwXMLImport& GetSwImport() { return static_cast<SwXMLImport&>(GetImport()); } }; @@ -817,26 +813,23 @@ public: } SwXMLTableColsContext_Impl::SwXMLTableColsContext_Impl( - SwXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, + SwXMLImport& rImport, SwXMLTableContext *pTable ) : - SvXMLImportContext( rImport, nPrfx, rLName ), + SvXMLImportContext( rImport ), xMyTable( pTable ) { } -SvXMLImportContextRef SwXMLTableColsContext_Impl::CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const Reference< xml::sax::XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > SwXMLTableColsContext_Impl::createFastChildContext( + sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ) { SvXMLImportContext *pContext = nullptr; - if( XML_NAMESPACE_TABLE == nPrefix && - IsXMLToken( rLocalName, XML_TABLE_COLUMN ) && + if( nElement == XML_ELEMENT(TABLE, XML_TABLE_COLUMN) && GetTable()->IsInsertColPossible() ) - pContext = new SwXMLTableColContext_Impl( GetSwImport(), nPrefix, - rLocalName, xAttrList, - GetTable() ); + pContext = new SwXMLTableColContext_Impl( GetSwImport(), xAttrList, GetTable() ); + else + XMLOFF_WARN_UNKNOWN_ELEMENT("sw", nElement); return pContext; } @@ -1005,8 +998,7 @@ class SwXMLDDETableContext_Impl : public SvXMLImportContext public: - SwXMLDDETableContext_Impl( - SwXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName); + SwXMLDDETableContext_Impl(SwXMLImport& rImport); virtual void SAL_CALL startFastElement( sal_Int32 nElement, @@ -1020,9 +1012,8 @@ public: }; -SwXMLDDETableContext_Impl::SwXMLDDETableContext_Impl( - SwXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName) : - SvXMLImportContext(rImport, nPrfx, rLName), +SwXMLDDETableContext_Impl::SwXMLDDETableContext_Impl(SwXMLImport& rImport) : + SvXMLImportContext(rImport), sConnectionName(), sDDEApplication(), sDDEItem(), @@ -1384,44 +1375,33 @@ css::uno::Reference<css::xml::sax::XFastContextHandler> SwXMLTableContext::creat case XML_ELEMENT(TABLE, XML_TABLE_ROWS): return new SwXMLTableRowsContext_Impl( GetSwImport(), this, bHeader ); break; - } - return nullptr; -} - -SvXMLImportContextRef SwXMLTableContext::CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const Reference< xml::sax::XAttributeList > & xAttrList ) -{ - SvXMLImportContext *pContext = nullptr; - - const SvXMLTokenMap& rTokenMap = GetSwImport().GetTableElemTokenMap(); - switch( rTokenMap.Get( nPrefix, rLocalName ) ) - { - case XML_TOK_TABLE_HEADER_COLS: - case XML_TOK_TABLE_COLS: + case XML_ELEMENT(TABLE, XML_TABLE_HEADER_COLUMNS): + case XML_ELEMENT(TABLE, XML_TABLE_COLUMNS): + // There are slight differences between <table:table-columns> and + // <table:table-columns-groups>. However, none of these are + // supported in Writer (they are Calc-only features), so we + // support column groups by simply using the <table:table-columns> + // token for column groups, too. + case XML_ELEMENT(TABLE, XML_TABLE_COLUMN_GROUP): if( IsValid() ) - pContext = new SwXMLTableColsContext_Impl( GetSwImport(), nPrefix, - rLocalName, - this ); + return new SwXMLTableColsContext_Impl( GetSwImport(), this ); break; - case XML_TOK_TABLE_COL: + case XML_ELEMENT(TABLE, XML_TABLE_COLUMN): + case XML_ELEMENT(LO_EXT, XML_TABLE_COLUMN): if( IsValid() && IsInsertColPossible() ) - pContext = new SwXMLTableColContext_Impl( GetSwImport(), nPrefix, - rLocalName, xAttrList, + return new SwXMLTableColContext_Impl( GetSwImport(), xAttrList, this ); break; - case XML_TOK_OFFICE_DDE_SOURCE: + case XML_ELEMENT(OFFICE, XML_DDE_SOURCE): // save context for later processing (discard old context, if approp.) if( IsValid() ) { - m_xDDESource.set(new SwXMLDDETableContext_Impl( GetSwImport(), nPrefix, - rLocalName )); - pContext = m_xDDESource.get(); + m_xDDESource.set(new SwXMLDDETableContext_Impl( GetSwImport() )); + return m_xDDESource.get(); } break; } - - return pContext; + return nullptr; } void SwXMLTableContext::InsertColumn( sal_Int32 nWidth2, bool bRelWidth2, diff --git a/sw/source/filter/xml/xmltbli.hxx b/sw/source/filter/xml/xmltbli.hxx index 31ca7e1ebb3a..d312efd15d6a 100644 --- a/sw/source/filter/xml/xmltbli.hxx +++ b/sw/source/filter/xml/xmltbli.hxx @@ -147,10 +147,6 @@ public: sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ) override; - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; - SwXMLImport& GetSwImport() { return static_cast<SwXMLImport&>(GetImport()); } void InsertColumn( sal_Int32 nWidth, bool bRelWidth, _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits