summaryrefslogtreecommitdiff
path: root/sw/source/filter/xml
diff options
context:
space:
mode:
authorNoel <noelgrandin@gmail.com>2020-11-27 15:27:33 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2020-11-28 08:49:59 +0100
commite46be5018d78097f9cd75a36992a2af88652fe4c (patch)
tree41d75d01637baa4d703bf78c156019dd6dcf1f8b /sw/source/filter/xml
parent19382197332ee94b4725160267e987b447b49245 (diff)
fastparser in SwXMLTableContext
Change-Id: I92e70bce3418c415a1855e0dc11c09fb32040e6f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106774 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sw/source/filter/xml')
-rw-r--r--sw/source/filter/xml/xmltbli.cxx128
-rw-r--r--sw/source/filter/xml/xmltbli.hxx4
2 files changed, 54 insertions, 78 deletions
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,