From bb59a80ee6000d3922fa95262f67e291fd9d8ee2 Mon Sep 17 00:00:00 2001 From: Mohammed Abdul Azeem Date: Sun, 24 Dec 2017 23:40:39 +0530 Subject: Modifying the impl. of startUnknownElement of FastParser: Modifying it to emit the namespace URI instead of prefix and qualified name instead of local name. This will be useful for handling arbitrary elements in the fast contexts. Change-Id: I0f150b862574612e97491f6c335f3f4c9966da0a Reviewed-on: https://gerrit.libreoffice.org/47055 Tested-by: Jenkins Reviewed-by: Michael Meeks --- xmloff/source/core/xmlictxt.cxx | 41 +++++++++++++---------------------------- xmloff/source/core/xmlimp.cxx | 2 ++ 2 files changed, 15 insertions(+), 28 deletions(-) (limited to 'xmloff') diff --git a/xmloff/source/core/xmlictxt.cxx b/xmloff/source/core/xmlictxt.cxx index a00539afce6b..b0494250316f 100644 --- a/xmloff/source/core/xmlictxt.cxx +++ b/xmloff/source/core/xmlictxt.cxx @@ -70,15 +70,14 @@ void SvXMLImportContext::Characters( const OUString& ) void SAL_CALL SvXMLImportContext::startFastElement(sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList > & Attribs) { mrImport.isFastContext = false; - startUnknownElement( SvXMLImport::getNamespacePrefixFromToken( nElement ), - SvXMLImport::getNameFromToken( nElement ), Attribs ); + const OUString& rPrefix = SvXMLImport::getNamespacePrefixFromToken( nElement ); + const OUString& rLocalName = SvXMLImport::getNameFromToken( nElement ); + startUnknownElement( SvXMLImport::aDefaultNamespace, (rPrefix.isEmpty())? rLocalName : rPrefix + SvXMLImport::aNamespaceSeparator + rLocalName, Attribs ); } -void SAL_CALL SvXMLImportContext::startUnknownElement(const OUString & rPrefix, const OUString & rLocalName, +void SAL_CALL SvXMLImportContext::startUnknownElement(const OUString & /*rNamespace*/, const OUString & rElementName, const uno::Reference< xml::sax::XFastAttributeList > & Attribs) { - OUString elementName; - if ( mrImport.maAttrList.is() ) mrImport.maAttrList->Clear(); else @@ -86,11 +85,6 @@ void SAL_CALL SvXMLImportContext::startUnknownElement(const OUString & rPrefix, mrImport.maNamespaceHandler->addNSDeclAttributes( mrImport.maAttrList ); - if ( !rPrefix.isEmpty() ) - elementName = rPrefix + ":" + rLocalName; - else - elementName = rLocalName; - if ( Attribs.is() ) { sax_fastparser::FastAttributeList *pAttribList = @@ -102,7 +96,7 @@ void SAL_CALL SvXMLImportContext::startUnknownElement(const OUString & rPrefix, const OUString& rAttrNamespacePrefix = SvXMLImport::getNamespacePrefixFromToken( nToken ); OUString sAttrName = SvXMLImport::getNameFromToken( nToken ); if ( !rAttrNamespacePrefix.isEmpty() ) - sAttrName = rAttrNamespacePrefix + ":" + sAttrName; + sAttrName = rAttrNamespacePrefix + SvXMLImport::aNamespaceSeparator + sAttrName; mrImport.maAttrList->AddAttribute( sAttrName, "CDATA", it.toString() ); } @@ -112,33 +106,24 @@ void SAL_CALL SvXMLImportContext::startUnknownElement(const OUString & rPrefix, for ( sal_Int32 i = 0; i < len; i++ ) { const OUString& rAttrValue = unknownAttribs[i].Value; - OUString sAttrName = unknownAttribs[i].Name; - const OUString& rAttrNamespacePrefix = unknownAttribs[i].NamespaceURL; - if ( !rAttrNamespacePrefix.isEmpty() ) - sAttrName = rAttrNamespacePrefix + ":" + sAttrName; - - mrImport.maAttrList->AddAttribute( sAttrName, "CDATA", rAttrValue ); + const OUString& rAttrName = unknownAttribs[i].Name; + mrImport.maAttrList->AddAttribute( rAttrName, "CDATA", rAttrValue ); } } - - mrImport.startElement( elementName, mrImport.maAttrList.get() ); + mrImport.startElement( rElementName, mrImport.maAttrList.get() ); } void SAL_CALL SvXMLImportContext::endFastElement(sal_Int32 nElement) { mrImport.isFastContext = false; - endUnknownElement( SvXMLImport::getNamespacePrefixFromToken( nElement ), - SvXMLImport::getNameFromToken( nElement ) ); + const OUString& rPrefix = SvXMLImport::getNamespacePrefixFromToken( nElement ); + const OUString& rLocalName = SvXMLImport::getNameFromToken( nElement ); + endUnknownElement( SvXMLImport::aDefaultNamespace, (rPrefix.isEmpty())? rLocalName : rPrefix + SvXMLImport::aNamespaceSeparator + rLocalName ); } -void SAL_CALL SvXMLImportContext::endUnknownElement (const OUString & rPrefix, const OUString & rLocalName) +void SAL_CALL SvXMLImportContext::endUnknownElement (const OUString & /*rNamespace*/, const OUString & rElementName) { - OUString elementName; - if ( !rPrefix.isEmpty() ) - elementName = rPrefix + ":" + rLocalName; - else - elementName = rLocalName; - mrImport.endElement( elementName ); + mrImport.endElement( rElementName ); } uno::Reference< xml::sax::XFastContextHandler > SAL_CALL SvXMLImportContext::createFastChildContext diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx index 0718e7af65e6..c8a2417603c9 100644 --- a/xmloff/source/core/xmlimp.cxx +++ b/xmloff/source/core/xmlimp.cxx @@ -76,6 +76,8 @@ using namespace ::xmloff::token; css::uno::Reference< css::xml::sax::XFastTokenHandler > SvXMLImport::xTokenHandler( new FastTokenHandler() ); std::unordered_map< sal_Int32, std::pair< OUString, OUString > > SvXMLImport::aNamespaceMap; +const OUString SvXMLImport::aDefaultNamespace = OUString(""); +const OUString SvXMLImport::aNamespaceSeparator = OUString(":"); bool SvXMLImport::bIsNSMapsInitialized = false; class SvXMLImportEventListener : public cppu::WeakImplHelper< css::lang::XEventListener > -- cgit