summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorSzymon Kłos <szymon.klos@collabora.com>2017-04-28 21:00:23 +0200
committerSzymon Kłos <szymon.klos@collabora.com>2017-05-04 13:19:56 +0200
commitd294c6d749c1f3281df0b384a3793a2ed681e4b4 (patch)
tree48565a90f69c0cf0c07312e7de86f81e174a7b7a /writerfilter
parent463d408f3555b57c4af8cbd006812f269944b092 (diff)
AutoText: Reading multiple entries
+ each entry is placed in a separate section + extended model and dmapper to react on docPart mark Change-Id: I7e5213a09ae7352d1d09369bd0a209b6d4e18e82 Reviewed-on: https://gerrit.libreoffice.org/37107 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/inc/dmapper/resourcemodel.hxx6
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx11
-rw-r--r--writerfilter/source/dmapper/DomainMapper.hxx2
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx5
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx10
-rw-r--r--writerfilter/source/dmapper/LoggedResources.cxx26
-rw-r--r--writerfilter/source/dmapper/LoggedResources.hxx4
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.cxx12
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.hxx2
-rw-r--r--writerfilter/source/ooxml/model.xml5
10 files changed, 82 insertions, 1 deletions
diff --git a/writerfilter/inc/dmapper/resourcemodel.hxx b/writerfilter/inc/dmapper/resourcemodel.hxx
index 252d83375c69..71b967d2db98 100644
--- a/writerfilter/inc/dmapper/resourcemodel.hxx
+++ b/writerfilter/inc/dmapper/resourcemodel.hxx
@@ -292,6 +292,12 @@ public:
*/
virtual void info(const std::string & info) = 0;
+ /// Receives start mark for glossary document entry.
+ virtual void startGlossaryEntry() = 0;
+
+ /// Receives end mark for glossary document entry.
+ virtual void endGlossaryEntry() = 0;
+
protected:
~Stream() {}
};
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index f2dfd37e727c..94116020c8c6 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3427,6 +3427,17 @@ void DomainMapper::lcl_info(const std::string & /*info_*/)
{
}
+void DomainMapper::lcl_startGlossaryEntry()
+{
+ uno::Reference< text::XTextRange > xTextRange = GetCurrentTextRange();
+ m_pImpl->setGlossaryEntryStart(xTextRange);
+}
+
+void DomainMapper::lcl_endGlossaryEntry()
+{
+ m_pImpl->appendGlossaryEntry();
+}
+
void DomainMapper::handleUnderlineType(const Id nId, const ::std::shared_ptr<PropertyMap>& rContext)
{
sal_Int16 nUnderline = awt::FontUnderline::NONE;
diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx
index 4f05118b1190..7a346884d642 100644
--- a/writerfilter/source/dmapper/DomainMapper.hxx
+++ b/writerfilter/source/dmapper/DomainMapper.hxx
@@ -146,6 +146,8 @@ private:
virtual void lcl_substream(Id name,
::writerfilter::Reference<Stream>::Pointer_t ref) override;
virtual void lcl_info(const std::string & info) override;
+ virtual void lcl_startGlossaryEntry() override;
+ virtual void lcl_endGlossaryEntry() override;
// Properties
virtual void lcl_attribute(Id Name, Value & val) override;
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index a9473ef74c68..8e261740a400 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1536,6 +1536,11 @@ uno::Reference< beans::XPropertySet > DomainMapper_Impl::appendTextSectionAfter(
return xRet;
}
+uno::Reference< beans::XPropertySet > DomainMapper_Impl::appendGlossaryEntry()
+{
+ return appendTextSectionAfter(m_xGlossaryEntryStart);
+}
+
void DomainMapper_Impl::PushPageHeaderFooter(bool bHeader, SectionPropertyMap::PageType eType)
{
m_aHeaderFooterStack.push(HeaderFooterContext(m_bTextInserted));
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 7ec425151ee9..b86938df337f 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -464,6 +464,8 @@ private:
std::map<sal_Int32, css::uno::Any> deferredCharacterProperties;
SmartTagHandler m_aSmartTagHandler;
+ css::uno::Reference<css::text::XTextRange> m_xGlossaryEntryStart;
+
public:
css::uno::Reference<css::text::XTextRange> m_xInsertTextRange;
private:
@@ -557,6 +559,14 @@ public:
void appendStarMath( const Value& v );
css::uno::Reference<css::beans::XPropertySet> appendTextSectionAfter(css::uno::Reference<css::text::XTextRange>& xBefore);
+ /// AutoText import: each entry is placed in the separate section
+ css::uno::Reference<css::beans::XPropertySet> appendGlossaryEntry();
+ /// Remember where entry was started
+ void setGlossaryEntryStart( css::uno::Reference<css::text::XTextRange>& xStart )
+ {
+ m_xGlossaryEntryStart = xStart;
+ }
+
// push the new properties onto the stack and make it the 'current' property map
void PushProperties(ContextType eId);
void PushStyleProperties(const PropertyMapPtr& pStyleProperties);
diff --git a/writerfilter/source/dmapper/LoggedResources.cxx b/writerfilter/source/dmapper/LoggedResources.cxx
index 55ade5a41138..33744b9765e7 100644
--- a/writerfilter/source/dmapper/LoggedResources.cxx
+++ b/writerfilter/source/dmapper/LoggedResources.cxx
@@ -301,6 +301,32 @@ void LoggedStream::info(const std::string & _info)
#endif
}
+void LoggedStream::startGlossaryEntry()
+{
+#ifdef DEBUG_WRITERFILTER
+ mHelper.startElement("startGlossaryEntry");
+#endif
+
+ lcl_startGlossaryEntry();
+
+#ifdef DEBUG_WRITERFILTER
+ LoggedResourcesHelper::endElement("startGlossaryEntry");
+#endif
+}
+
+void LoggedStream::endGlossaryEntry()
+{
+#ifdef DEBUG_WRITERFILTER
+ mHelper.startElement("endGlossaryEntry");
+#endif
+
+ lcl_endGlossaryEntry();
+
+#ifdef DEBUG_WRITERFILTER
+ LoggedResourcesHelper::endElement("endGlossaryEntry");
+#endif
+}
+
// class LoggedProperties
LoggedProperties::LoggedProperties(
#ifdef DEBUG_WRITERFILTER
diff --git a/writerfilter/source/dmapper/LoggedResources.hxx b/writerfilter/source/dmapper/LoggedResources.hxx
index 0c466448a85b..c5d59a68a9ec 100644
--- a/writerfilter/source/dmapper/LoggedResources.hxx
+++ b/writerfilter/source/dmapper/LoggedResources.hxx
@@ -69,6 +69,8 @@ public:
void table(Id name, writerfilter::Reference<Table>::Pointer_t ref) override;
void substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref) override;
void info(const std::string & info) override;
+ void startGlossaryEntry() override;
+ void endGlossaryEntry() override;
protected:
virtual void lcl_startSectionGroup() = 0;
@@ -89,6 +91,8 @@ protected:
virtual void lcl_table(Id name, writerfilter::Reference<Table>::Pointer_t ref) = 0;
virtual void lcl_substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref) = 0;
virtual void lcl_info(const std::string & info) = 0;
+ virtual void lcl_startGlossaryEntry() { }
+ virtual void lcl_endGlossaryEntry() { }
#ifdef DEBUG_WRITERFILTER
LoggedResourcesHelper mHelper;
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
index 0715e0ed828f..bb5ff5fa98fb 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -652,6 +652,18 @@ void OOXMLFastContextHandler::positivePercentage(const OUString& rText)
mpStream->positivePercentage(rText);
}
+void OOXMLFastContextHandler::startGlossaryEntry()
+{
+ if (isForwardEvents())
+ mpStream->startGlossaryEntry();
+}
+
+void OOXMLFastContextHandler::endGlossaryEntry()
+{
+ if (isForwardEvents())
+ mpStream->endGlossaryEntry();
+}
+
void OOXMLFastContextHandler::propagateCharacterProperties()
{
mpParserState->setCharacterProperties(getPropertySet());
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
index d0df17fcb30d..f986c76029ae 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
@@ -168,6 +168,8 @@ public:
void alignH(const OUString & sText);
void alignV(const OUString & sText);
void positivePercentage(const OUString& rText);
+ void startGlossaryEntry();
+ void endGlossaryEntry();
void startTxbxContent();
void endTxbxContent();
void propagateCharacterProperties();
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index cfd6d527d4bc..1b9b0933611d 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -19058,7 +19058,10 @@
<resource name="CT_Document" resource="Stream"/>
<resource name="CT_GlossaryDocument" resource="Stream"/>
<resource name="CT_DocParts" resource="Stream"/>
- <resource name="CT_DocPart" resource="Stream"/>
+ <resource name="CT_DocPart" resource="Stream">
+ <action name="start" action="startGlossaryEntry"/>
+ <action name="end" action="endGlossaryEntry"/>
+ </resource>
<resource name="document" resource="Stream"/>
<resource name="glossaryDocument" resource="Stream"/>
<resource name="CT_TxbxContent" resource="Stream">