[Libreoffice-commits] core.git: Branch 'libreoffice-7-1' - include/xmloff xmloff/source
Noel (via logerrit)
logerrit at kemper.freedesktop.org
Thu Mar 4 06:46:42 UTC 2021
include/xmloff/xmlictxt.hxx | 4 ++++
xmloff/source/core/XMLEmbeddedObjectImportContext.cxx | 3 +--
xmloff/source/core/xmlimp.cxx | 11 ++++++++++-
3 files changed, 15 insertions(+), 3 deletions(-)
New commits:
commit fed3ed5828eda88f82d97e95b34dfdd1ca0c9dec
Author: Noel <noel.grandin at collabora.co.uk>
AuthorDate: Fri Feb 12 13:02:25 2021 +0200
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Thu Mar 4 07:46:05 2021 +0100
restore namespace unwinding in SvXMLImport
accidentally lost during the fastparser conversion
Change-Id: I7d53e9f32dd8cff650b9ffb6dae493419ce8461f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110813
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
(cherry picked from commit e5f436bc53e0d07654901ef7cc8ff56d04f0686e)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111897
diff --git a/include/xmloff/xmlictxt.hxx b/include/xmloff/xmlictxt.hxx
index 82f4c11632f1..3e6f25329d98 100644
--- a/include/xmloff/xmlictxt.hxx
+++ b/include/xmloff/xmlictxt.hxx
@@ -53,6 +53,10 @@ class XMLOFF_DLLPUBLIC SvXMLImportContext : public css::xml::sax::XFastContextHa
oslInterlockedCount m_nRefCount;
sal_uInt16 mnPrefix;
bool mbPrefixAndLocalNameFilledIn;
+ std::unique_ptr<SvXMLNamespaceMap> m_pRewindMap;
+
+ SAL_DLLPRIVATE std::unique_ptr<SvXMLNamespaceMap> TakeRewindMap() { return std::move(m_pRewindMap); }
+ SAL_DLLPRIVATE void PutRewindMap(std::unique_ptr<SvXMLNamespaceMap> p) { m_pRewindMap = std::move(p); }
protected:
diff --git a/xmloff/source/core/XMLEmbeddedObjectImportContext.cxx b/xmloff/source/core/XMLEmbeddedObjectImportContext.cxx
index a8cc84392627..5f6073d171bc 100644
--- a/xmloff/source/core/XMLEmbeddedObjectImportContext.cxx
+++ b/xmloff/source/core/XMLEmbeddedObjectImportContext.cxx
@@ -82,8 +82,7 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > XMLEmbeddedObjectImpor
sal_Int32 ,
const css::uno::Reference< css::xml::sax::XFastAttributeList >& )
{
- // we carry no state, so just re-use the same instance
- return this;
+ return new XMLEmbeddedObjectImportContext_Impl(GetImport(), mxFastHandler);
}
void XMLEmbeddedObjectImportContext_Impl::startFastElement(
diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx
index c47ad94ceffa..4a8241e4ea69 100644
--- a/xmloff/source/core/xmlimp.cxx
+++ b/xmloff/source/core/xmlimp.cxx
@@ -765,7 +765,7 @@ void SAL_CALL SvXMLImport::startFastElement (sal_Int32 Element,
maNamespaceAttrList->Clear();
maNamespaceHandler->addNSDeclAttributes( maNamespaceAttrList );
- processNSAttributes( maNamespaceAttrList.get() );
+ std::unique_ptr<SvXMLNamespaceMap> pRewindMap = processNSAttributes( maNamespaceAttrList.get() );
SvXMLImportContextRef xContext;
const bool bRootContext = maContexts.empty();
@@ -828,6 +828,10 @@ void SAL_CALL SvXMLImport::startFastElement (sal_Int32 Element,
if ( !xContext )
xContext.set( new SvXMLImportContext( *this ) );
+ // Remember old namespace map.
+ if( pRewindMap )
+ xContext->PutRewindMap(std::move(pRewindMap));
+
// Call a startElement at the new context.
xContext->startFastElement( Element, Attribs );
@@ -917,8 +921,13 @@ void SAL_CALL SvXMLImport::endFastElement (sal_Int32 Element)
return;
}
SvXMLImportContextRef xContext = std::move(maContexts.top());
+ // Get a namespace map to rewind.
+ std::unique_ptr<SvXMLNamespaceMap> pRewindMap = xContext->TakeRewindMap();
maContexts.pop();
xContext->endFastElement( Element );
+ // Rewind a namespace map.
+ if (pRewindMap)
+ mpNamespaceMap = std::move(pRewindMap);
}
void SAL_CALL SvXMLImport::endUnknownElement (const OUString & rPrefix, const OUString & rLocalName)
More information about the Libreoffice-commits
mailing list