MCPcopy Create free account
hub / github.com/KDE/labplot / isValid

Method isValid

src/backend/gsl/ExpressionParser.cpp:287–321  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

285}
286
287bool ExpressionParser::isValid(const QString& expr, const QStringList& vars) {
288 QDEBUG(Q_FUNC_INFO << ", expr:" << expr << ", vars:" << vars);
289 if (expr.isEmpty())
290 return true;
291
292 gsl_set_error_handler_off();
293
294 Parser parser(false);
295 parser.setSkipSpecialFunctionEvaluation(true);
296
297 for (const auto& var : vars)
298 parser.assign_symbol(qPrintable(var), 0);
299
300 // Row index
301 parser.assign_symbol("i", 0);
302
303 const auto numberLocale = QLocale();
304 DEBUG(Q_FUNC_INFO << ", number locale: " << STDSTRING(numberLocale.name()))
305 parser.parse(qPrintable(expr), qPrintable(numberLocale.name()));
306
307 // if parsing with number locale fails, try default locale
308 if (parser.parseErrors() > 0) {
309 DEBUG(Q_FUNC_INFO << ", WARNING: failed parsing expr \"" << STDSTRING(expr) << "\" with locale " << numberLocale.name().toStdString()
310 << ", errors = " << parser.parseErrors())
311 parser.parse(qPrintable(expr), "en_US");
312 if (parser.parseErrors() > 0)
313 DEBUG(Q_FUNC_INFO << ", ERROR: parsing FAILED, errors = " << parser.parseErrors())
314 }
315
316 /* remove temporarily defined symbols */
317 for (const auto& var : vars)
318 parser.remove_symbol(qPrintable(var));
319
320 return parser.parseErrors() == 0;
321}
322
323QStringList ExpressionParser::getParameter(const QString& expr, const QStringList& vars) {
324 QDEBUG(Q_FUNC_INFO << ", variables:" << vars);

Callers

nothing calls this directly

Calls 7

parseErrorsMethod · 0.80
toStdStringMethod · 0.80
remove_symbolMethod · 0.80
isEmptyMethod · 0.45
parseMethod · 0.45
nameMethod · 0.45

Tested by

no test coverage detected