diff options
author | Tünde Tóth <tundeth@gmail.com> | 2019-10-08 13:58:44 +0200 |
---|---|---|
committer | László Németh <nemeth@numbertext.org> | 2019-10-12 10:00:20 +0200 |
commit | 576611895e51186d38ddefa10ed8d66075d9de37 (patch) | |
tree | aa26c1878238bb6802cb403d9f68e98548bdaa1c /writerfilter/source/dmapper | |
parent | d416250f4f1766e2d596ea3feef6a94b7adf29f4 (diff) |
tdf#127741 DOCX import: format hyperlink with Default character style
according to correct hyperlink handling, avoiding various editing
and layout problems; "sticky" and not easily removable character style
around the hyperlink and multiple blue hyperlink colors.
Set also Visited/Unvisited link character styles when the style of
the hyperlink is not the requested "Internet Link".
Change-Id: I3d7ba8dd225c693cc9f521b37767cf1e1e09d7c0
Reviewed-on: https://gerrit.libreoffice.org/80449
Reviewed-by: László Németh <nemeth@numbertext.org>
Tested-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'writerfilter/source/dmapper')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 24 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.hxx | 3 |
2 files changed, 12 insertions, 15 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index f69b53fbf2fe..c2d087fe4d59 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1784,15 +1784,6 @@ void DomainMapper_Impl::appendTextPortion( const OUString& rString, const Proper } else { - if (IsOpenField() && GetTopFieldContext()->GetFieldId() == FIELD_HYPERLINK) - { - // It is content of hyperlink field. We need to create and remember - // character style for later applying to hyperlink - PropertyValueVector_t aProps = comphelper::sequenceToContainer< PropertyValueVector_t >(GetTopContext()->GetPropertyValues()); - OUString sHyperlinkStyleName = GetStyleSheetTable()->getOrCreateCharStyle(aProps, /*bAlwaysCreate=*/false); - GetTopFieldContext()->SetHyperlinkStyle(sHyperlinkStyleName); - } - #if !defined(MACOSX) // TODO: check layout differences and support all platforms, if needed sal_Int32 nPos; OUString sDoubleSpace(" "); @@ -5385,10 +5376,19 @@ void DomainMapper_Impl::PopFieldContext() } else { - if (!pContext->GetHyperlinkStyle().isEmpty()) + uno::Any aAny = xCrsrProperties->getPropertyValue("CharStyleName"); + OUString charStyle; + if (css::uno::fromAny(aAny, &charStyle)) { - xCrsrProperties->setPropertyValue("VisitedCharStyleName", uno::makeAny(pContext->GetHyperlinkStyle())); - xCrsrProperties->setPropertyValue("UnvisitedCharStyleName", uno::makeAny(pContext->GetHyperlinkStyle())); + if(!charStyle.isEmpty() && charStyle.equalsIgnoreAsciiCase("Internet Link")) + { + xCrsrProperties->setPropertyValue("CharStyleName", uno::makeAny(OUString("Default Style"))); + } + else + { + xCrsrProperties->setPropertyValue("VisitedCharStyleName", aAny); + xCrsrProperties->setPropertyValue("UnvisitedCharStyleName", aAny); + } } } } diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index fb4fcaf03349..6f5aaedd1fed 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -149,7 +149,6 @@ class FieldContext : public virtual SvRefBase OUString m_sHyperlinkURL; /// A frame for the hyperlink when one exists. OUString m_sHyperlinkTarget; - OUString m_sHyperlinkStyle; FFDataHandler::Pointer_t m_pFFDataHandler; FormControlHelper::Pointer_t m_pFormControlHelper; @@ -194,8 +193,6 @@ public: const OUString& GetHyperlinkURL() const { return m_sHyperlinkURL; } void SetHyperlinkTarget(const OUString& rTarget) { m_sHyperlinkTarget = rTarget; } const OUString& GetHyperlinkTarget() const { return m_sHyperlinkTarget; } - void SetHyperlinkStyle(const OUString& rStyle) { m_sHyperlinkStyle = rStyle; } - const OUString& GetHyperlinkStyle() const { return m_sHyperlinkStyle; } void setFFDataHandler(FFDataHandler::Pointer_t pFFDataHandler) { m_pFFDataHandler = pFFDataHandler; } const FFDataHandler::Pointer_t& getFFDataHandler() const { return m_pFFDataHandler; } |