diff options
author | Vasily Melenchuk <Vasily.Melenchuk@cib.de> | 2017-08-18 22:14:08 +0300 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2017-11-10 02:01:57 +0100 |
commit | eaa9cf6a3069fba3d82c046f0041bfb537d9e648 (patch) | |
tree | 55806b023e2f7c380a877d0df6b0bd5bb53ad46e /writerfilter/source/dmapper/DomainMapper_Impl.cxx | |
parent | 7f603dd111afcc30eec8bbec97efc16ad8b4c4d1 (diff) |
tdf#43017: Support for DOCX hyperlinks character properties
Here goes a bunch of related changes:
1. Create new character style based on current character properties
2. Apply created style to hyperlink object
3. Fixes to predefined style names usage in w:rPr
4. Disable style usage for hyperlinks in TOC: they will receive later
anoter styles
Change-Id: I1a228992eb7c1e259a6a811aa7f959debaae4f35
Reviewed-on: https://gerrit.libreoffice.org/41784
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'writerfilter/source/dmapper/DomainMapper_Impl.cxx')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 823450f2aab8..9bc53f2f4b90 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1383,7 +1383,18 @@ 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); + } + xTextRange = xTextAppend->appendTextPortion(rString, aValues); + } } CheckRedline( xTextRange ); @@ -3708,6 +3719,8 @@ void DomainMapper_Impl::CloseFieldCommand() aFieldConversionMap.find(std::get<0>(field)); if(aIt != aFieldConversionMap.end()) { + pContext->SetFieldId(aIt->second.eFieldId); + bool bCreateEnhancedField = false; uno::Reference< beans::XPropertySet > xFieldProperties; bool bCreateField = true; @@ -4753,6 +4766,14 @@ void DomainMapper_Impl::PopFieldContext() xCrsrProperties->setPropertyValue("VisitedCharStyleName",uno::makeAny(sDisplayName)); xCrsrProperties->setPropertyValue("UnvisitedCharStyleName",uno::makeAny(sDisplayName)); } + else + { + if (!pContext->GetHyperlinkStyle().isEmpty()) + { + xCrsrProperties->setPropertyValue("VisitedCharStyleName", uno::makeAny(pContext->GetHyperlinkStyle())); + xCrsrProperties->setPropertyValue("UnvisitedCharStyleName", uno::makeAny(pContext->GetHyperlinkStyle())); + } + } } else if(m_bStartGenericField) { |