summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2017-12-11 18:21:32 +0100
committerChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>2017-12-12 18:39:27 +0100
commit51bb22f7a8f1d9fe02243aa58427d63916226793 (patch)
tree60030db29227964a071e8ce72e7ec943bf2895fe /sc
parentfd989b76221beeaa7528e86ca74e075274c9d3d6 (diff)
Resolves: tdf#114406 treat % as the operator that it is
Regression from commit 73c7e0921d752df53004ed55735f3e8888cc592f Date: Tue Sep 20 21:39:10 2016 +0200 sc-perf: tdf#79023 for ODFF do not call SvNumberFormatter to determine numeric for ODFF, and for OOXML commit a8a8ff59c5749bbe1f2f58ea8fd42d66e6ae2a81 Date: Tue Sep 20 22:37:59 2016 +0200 sc-perf: tdf#79023 do not call SvNumberFormatter also for numbers in OOXML Numbers followed by a percent operator like 100% were always (wrongly) treated as one entity (by '%' having ScCharFlags::Value) and incidentally handled by the number formatter's parser, which so far "worked" in the sense that the correct constant number was produced (i.e. 1 here), but the expression detail was lost. The commits above for performance reasons when reading ODF or OOXML files don't let a symbol pass through the number formatter's parser anymore and the "100%" does not represent a strict number, so lead to #NAME? error at the end. Set the proper flags in the compiler's character table to treat '%' as operator in all circumstances. Change-Id: I266beb74a313c779370e5fac42f45d0fb5cdba0c (cherry picked from commit f6b2349e880afa82f9267087fb48b6e4f8a9aa05) Reviewed-on: https://gerrit.libreoffice.org/46255 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
Diffstat (limited to 'sc')
-rw-r--r--sc/source/core/tool/compiler.cxx2
1 files changed, 1 insertions, 1 deletions
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index b795802affb6..6c3e7af0c9bf 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -325,7 +325,7 @@ ScCompiler::Convention::Convention( FormulaGrammar::AddressConvention eConv )
/* $ */ t[36] = ScCharFlags::CharWord | ScCharFlags::Word | ScCharFlags::CharIdent | ScCharFlags::Ident;
if (FormulaGrammar::CONV_ODF == meConv)
/* $ */ t[36] |= ScCharFlags::OdfNameMarker;
-/* % */ t[37] = ScCharFlags::Value;
+/* % */ t[37] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep;
/* & */ t[38] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep;
/* ' */ t[39] = ScCharFlags::NameSep;
/* ( */ t[40] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep;