diff options
author | Vasily Melenchuk <vasily.melenchuk@cib.de> | 2023-07-06 12:45:11 +0300 |
---|---|---|
committer | Thorsten Behrens <thorsten.behrens@allotropia.de> | 2023-07-17 15:56:14 +0200 |
commit | da2e7b1e0b58aed20d44b7c588ee86d922d614a8 (patch) | |
tree | 54af8d96d251b76032c91f25b965a194c51ae848 /writerfilter/source/dmapper/DomainMapper_Impl.cxx | |
parent | e73b2bc4e6fdaba3098fa2c701342e1df112514c (diff) |
tdf#156030: sw: better import of IF field for RTF and DOCX
Since long time IF field was converted to ConditionalText, but no
parameters were given. So condition, then text and else text were
lost during import.
Change-Id: I9b45e8ab394f3c53bb34370bf3ea15a939a400fe
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154101
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
Diffstat (limited to 'writerfilter/source/dmapper/DomainMapper_Impl.cxx')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 491c755206b7..bf433e2b8d33 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -7447,7 +7447,35 @@ void DomainMapper_Impl::CloseFieldCommand() pContext->SetHyperlinkTarget(sTarget); } break; - case FIELD_IF : break; + case FIELD_IF: + { + if (vArguments.size() < 3) + { + SAL_WARN("writerfilter.dmapper", "IF field requires at lest 3 parameters!"); + break; + } + + if (xFieldProperties.is()) + { + // Following code assumes that last argument in field is false value + // before it - true value and everything before them is a condition + OUString sCondition; + size_t i = 0; + while (i < vArguments.size() - 2) { + if (!sCondition.isEmpty()) + sCondition += " "; + sCondition += vArguments[i++]; + } + + xFieldProperties->setPropertyValue( + "TrueContent", uno::Any(vArguments[vArguments.size() - 2])); + xFieldProperties->setPropertyValue( + "FalseContent", uno::Any(vArguments[vArguments.size() - 1])); + xFieldProperties->setPropertyValue( + "Condition", uno::Any(sCondition)); + } + } + break; case FIELD_INFO : break; case FIELD_INCLUDEPICTURE: break; case FIELD_KEYWORDS : |