>>>>> "Jean-Marc" == Jean-Marc Lasgouttes <[EMAIL PROTECTED]> writes:
I applied all the bits except for this latest patch. I attach the
remaining bits.
Jean-Marc> OK, this new patch fixes this problem too. There are two
Jean-Marc> parts:
Jean-Marc> - easy one: export x^2, but {xy}^2 and {x^{2}}^2 (this last
Jean-Marc> one has only one element in the nucleus, but we want braces
Jean-Marc> nevertheless.
Jean-Marc> - more tricky part: when a ^ or _ is encountered, it the
Jean-Marc> previous inset is a MathBraceInset (which encloses in {}),
Jean-Marc> use only the inside of the inset as nucleus. This is done
Jean-Marc> twice, in the parser (for when reading files or doing undo,
Jean-Marc> cutnpaste) and in mathinset (for interactive entry).
Jean-Marc> I think it works well, and now at least it is possible to
Jean-Marc> enter things like {x'}^2 (although not as easily as one
Jean-Marc> could have hoped).
JMarc
Index: src/mathed/math_scriptinset.C
===================================================================
--- src/mathed/math_scriptinset.C (revision 14795)
+++ src/mathed/math_scriptinset.C (working copy)
@@ -418,7 +418,11 @@ bool MathScriptInset::idxUpDown(LCursor
void MathScriptInset::write(WriteStream & os) const
{
if (nuc().size()) {
- os << nuc();
+ if (nuc().size() == 1
+ && ! nuc().begin()->nucleus()->asScriptInset())
+ os << nuc();
+ else
+ os << '{' << nuc() << '}';
//if (nuc().back()->takesLimits()) {
if (limits_ == -1)
os << "\\nolimits ";
Index: src/mathed/math_parser.C
===================================================================
--- src/mathed/math_parser.C (revision 14789)
+++ src/mathed/math_parser.C (working copy)
@@ -810,10 +810,9 @@ void Parser::parse1(MathGridInset & grid
MathScriptInset * p = cell->back().nucleus()->asScriptInset();
// special handling of {}-bases
// is this always correct?
- // It appears that this is wrong (Dekel)
- //if (p->nuc().size() == 1 && p->nuc().back()->asNestInset() &&
- // p->nuc().back()->extraBraces())
- // p->nuc() = p->nuc().back()->asNestInset()->cell(0);
+ if (p->nuc().size() == 1
+ && p->nuc().back()->asBraceInset())
+ p->nuc() = p->nuc().back()->asNestInset()->cell(0);
parse(p->cell(p->idxOfScript(up)), FLAG_ITEM, mode);
if (limits) {
p->limits(limits);
Index: src/mathed/math_nestinset.C
===================================================================
--- src/mathed/math_nestinset.C (revision 14795)
+++ src/mathed/math_nestinset.C (working copy)
@@ -1272,6 +1272,12 @@ bool MathNestInset::script(LCursor & cur
}
--cur.pos();
MathScriptInset * inset = cur.nextAtom().nucleus()->asScriptInset();
+ // special handling of {}-bases
+ // is this always correct?
+ if (inset->nuc().size() == 1
+ && inset->nuc().back()->asBraceInset())
+ inset->nuc() = inset->nuc().back()->asNestInset()->cell(0);
+
cur.push(*inset);
cur.idx() = 1;
cur.pos() = 0;