summaryrefslogtreecommitdiff
path: root/writerfilter/source/dmapper/DomainMapper_Impl.cxx
diff options
context:
space:
mode:
authorVasily Melenchuk <vasily.melenchuk@cib.de>2023-07-06 12:45:11 +0300
committerThorsten Behrens <thorsten.behrens@allotropia.de>2023-07-17 15:56:14 +0200
commitda2e7b1e0b58aed20d44b7c588ee86d922d614a8 (patch)
tree54af8d96d251b76032c91f25b965a194c51ae848 /writerfilter/source/dmapper/DomainMapper_Impl.cxx
parente73b2bc4e6fdaba3098fa2c701342e1df112514c (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.cxx30
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 :