summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2020-08-18 10:54:57 +0200
committerLászló Németh <nemeth@numbertext.org>2020-08-18 12:05:52 +0200
commite1aea22f3f4fbf0cc412a8867165a85a3c55f49c (patch)
tree92a1cbe939f096ab9d6248ce146bf02f71e0e993 /writerfilter
parent3a7a06067e545670ef64367ef602469f507a3df7 (diff)
tdf#123354 DOCX import: fix ABS formula
Convert ABS(x) to the equivalent, but working Writer formula SQRT(x POW 2). Note: this is a temporary conversion, which supports only 1-level nesting of function calls. Change-Id: I96ad01dc5ac26160792e6a4cb050e103c2ad7bca Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100898 Tested-by: Jenkins Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx13
1 files changed, 9 insertions, 4 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 1d23295fd759..333f1170ea09 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -4259,9 +4259,13 @@ OUString DomainMapper_Impl::convertFieldFormula(const OUString& input) {
usInput = rmatch4.replaceAll(icu::UnicodeString("<$1:$2>"), status);
/* Fix up user defined names */
- icu::RegexMatcher rmatch5("DEFINED\\s*\\(<([A-Z]+[0-9]+)>\\)", usInput, rMatcherFlags, status);
+ icu::RegexMatcher rmatch5("\\bDEFINED\\s*\\(<([A-Z]+[0-9]+)>\\)", usInput, rMatcherFlags, status);
usInput = rmatch5.replaceAll(icu::UnicodeString("DEFINED($1)"), status);
+ /* Fix up ABS(x) using SQRT(x POW 2) - it supports only 1-level nesting */
+ icu::RegexMatcher rmatch6("\\bABS\\s*(\\(([^()]*|([^()])*\\([^()]*\\)[^()]*)*\\))", usInput, rMatcherFlags, status);
+ usInput = rmatch6.replaceAll(icu::UnicodeString("SQRT($1 POW 2)"), status);
+
return OUString(usInput.getTerminatedBuffer());
}
@@ -4286,6 +4290,10 @@ void DomainMapper_Impl::handleFieldFormula
// we don't copy the = symbol from the command
OUString formula = convertFieldFormula(command.copy(1));
+ xFieldProperties->setPropertyValue(getPropertyName(PROP_CONTENT), uno::makeAny(formula));
+ xFieldProperties->setPropertyValue(getPropertyName(PROP_NUMBER_FORMAT), uno::makeAny(sal_Int32(0)));
+ xFieldProperties->setPropertyValue("IsShowFormula", uno::makeAny(false));
+
// grab-bag the original and converted formula
if (getTableManager().isInTable())
{
@@ -4294,9 +4302,6 @@ void DomainMapper_Impl::handleFieldFormula
pPropMap->Insert(PROP_CELL_FORMULA_CONVERTED, uno::makeAny(formula), true, CELL_GRAB_BAG);
getTableManager().cellProps(pPropMap);
}
- xFieldProperties->setPropertyValue(getPropertyName(PROP_CONTENT), uno::makeAny(formula));
- xFieldProperties->setPropertyValue(getPropertyName(PROP_NUMBER_FORMAT), uno::makeAny(sal_Int32(0)));
- xFieldProperties->setPropertyValue("IsShowFormula", uno::makeAny(false));
}
void DomainMapper_Impl::handleRubyEQField( const FieldContextPtr& pContext)