summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2020-08-22 17:22:04 +0200
committerLászló Németh <nemeth@numbertext.org>2020-08-23 13:07:03 +0200
commitf1f27b2487ccfb7a03190ff68eadbfb611dd9749 (patch)
treedc6bffe8fa118ee797d5f14f51ea26ad1555836c /writerfilter
parent886c2e35fadc7813498da041fc4ea8a8ba2fb358 (diff)
tdf#123356 DOCX import: fix COUNT formula
Convert COUNT(x) to the equivalent, but portable Writer formula SUM(x)/MEAN(x). Note: this is a temporary conversion, which supports only 1-level nesting of function calls. Adding COUNT to Writer core, it will be possible to remove portable conversion later. Change-Id: I4b4019aadad52e6d1cf3b2d18d80b1d2c7485c6a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101185 Tested-by: Jenkins Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx4
1 files changed, 4 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index b5a8f124c142..a482a3231551 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -4272,6 +4272,10 @@ OUString DomainMapper_Impl::convertFieldFormula(const OUString& input) {
icu::RegexMatcher rmatch7("\\bSIGN\\s*(\\(([^()]*|([^()])*\\([^()]*\\)[^()]*)*\\))", usInput, rMatcherFlags, status);
usInput = rmatch7.replaceAll(icu::UnicodeString("((0 L $1) - ($1 L 0))"), status);
+ /* Fix up COUNT(x) using SUM(x)/MEAN(x) (it supports only 1-level nesting) */
+ icu::RegexMatcher rmatch8("\\bCOUNT\\s*(\\(([^()]*|([^()])*\\([^()]*\\)[^()]*)*\\))", usInput, rMatcherFlags, status);
+ usInput = rmatch8.replaceAll(icu::UnicodeString("(SUM$1/MEAN$1)"), status);
+
return OUString(usInput.getTerminatedBuffer());
}