void KstEquation::save(QTextStream &ts, const QString& indent) { QString l2 = indent + " "; ts << indent << "<equationobject>" << endl; ts << l2 << "<tag>" << QStyleSheet::escape(tag().tagString()) << "</tag>" << endl; // Reparse the equation, then write it back out in text so that we can update // any vectors or scalars that had name changes, but we don't get affected by // the optimizer if (!_equation.isEmpty()) { QMutexLocker ml(&Equation::mutex()); yy_scan_string(_equation.latin1()); ParsedEquation = 0L; int rc = yyparse(); Equation::Node *en = static_cast<Equation::Node*>(ParsedEquation); if (rc == 0 && en) { if (!en->takeVectors(VectorsUsed)) { KstDebug::self()->log(i18n("Equation [%1] failed to find its vectors when saving. Resulting Kst file may have issues.").arg(_equation), KstDebug::Warning); } QString etext = en->text(); ts << l2 << "<equation>" << QStyleSheet::escape(etext) << "</equation>" << endl; } delete en; ParsedEquation = 0L; } ts << l2 << "<xvector>" << QStyleSheet::escape((*_xInVector)->tag().tagString()) << "</xvector>" << endl; if (_doInterp) { ts << l2 << "<interpolate/>" << endl; } ts << indent << "</equationobject>" << endl; }
void testText(const char *equation, const char *expect) { bool failure = false; QString txt; yy_scan_string(equation); int rc = yyparse(); if (rc == 0) { vectorsUsed.clear(); Equation::Node *eq = static_cast<Equation::Node*>(ParsedEquation); assert(eq); ParsedEquation = 0L; //eq->collectVectors(vectorsUsed); txt = eq->text(); failure = txt != expect; delete eq; } else { // Parse error delete (Equation::Node*)ParsedEquation; ParsedEquation = 0L; failure = true; } if (failure) { if (!Equation::errorStack.isEmpty()) { printf("Failures on [%s] -------------------------\n", equation); for (QStringList::ConstIterator i = Equation::errorStack.constBegin(); i != Equation::errorStack.constEnd(); ++i) { printf("%s\n", (*i).latin1()); } printf("------------------------------------------\n"); } else { printf("Got [%s], expected [%s]\n", txt.latin1(), expect); } --rc; } }