// or \sum, \prod... for interfacing external programs
#include "InsetMathNest.h"
-#include "support/strfwd.h"
+
namespace lyx {
void write(WriteStream & os) const;
///
InsetCode lyxCode() const { return MATH_EXINT_CODE; }
- /// is this a sum, product, or whatever that we can handle?
- /// note that this does not include integrals.
- static bool isExIntOperator(docstring const &);
private:
virtual Inset * clone() const;
///
bool hasScripts() const;
+
///
docstring symbol_;
};
typedef MathAtom ReplaceArgumentFunc(const MathData & ar);
+
// try to extract a super/subscript
// modify iterator position to point behind the thing
bool extractScript(MathData & ar,
// leave alone sums and integrals
InsetMathSymbol const * sym =
script->nuc().front()->asSymbolInset();
- if (sym && (InsetMathExInt::isExIntOperator(sym->name()) || sym->name() == "int"))
+ if (sym && (sym->name() == "sum" || sym->name() == "int"))
continue;
}
}
-bool testSumLikeSymbol(MathAtom const & p)
+bool testSumSymbol(MathAtom const & p)
{
- return InsetMathExInt::isExIntOperator(p->name());
+ return testSymbol(p, from_ascii("sum"));
}
-docstring testSumLike(MathAtom const & at)
+bool testSum(MathAtom const & at)
{
- if (testSumLikeSymbol(at))
- return at->name();
- if ( at->asScriptInset()
+ return
+ testSumSymbol(at) ||
+ ( at->asScriptInset()
&& at->asScriptInset()->nuc().size()
- && testSumLikeSymbol(at->asScriptInset()->nuc().back()) )
- return at->asScriptInset()->nuc().back()->name();
- return docstring();
+ && testSumSymbol(at->asScriptInset()->nuc().back()) );
}
// replace '\sum' ['_^'] f(x) sequences by a real InsetMathExInt
-// and similar things, like \prod. The things we extract are
-// determined by InsetMathExInt::isExIntOperator().
// assume 'extractDelims' ran before
-void extractSumLike(MathData & ar)
+void extractSums(MathData & ar)
{
// we need at least two items...
if (ar.size() < 2)
MathData::iterator it = ar.begin() + i;
// is this a sum name?
- docstring const opname = testSumLike(ar[i]);
- if (opname.empty())
+ if (!testSum(ar[i]))
continue;
// create a proper inset as replacement
- auto_ptr<InsetMathExInt> p(new InsetMathExInt(buf, opname));
+ auto_ptr<InsetMathExInt> p(new InsetMathExInt(buf, from_ascii("sum")));
// collect lower bound and summation index
InsetMathScript const * sub = ar[i]->asScriptInset();
splitScripts(ar);
extractDelims(ar);
extractIntegrals(ar, kind);
- extractSumLike(ar);
+ extractSums(ar);
extractNumbers(ar);
extractMatrices(ar);
extractFunctions(ar, kind);