X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FMathData.cpp;h=8fcf7466e34c825cfbe07f7badab5ca09befa1ee;hb=55a3dd7b346d29a52ba305a4558e9e380ef50f47;hp=fe0be267a52e53c0a12ad4c635dcc2a75c6df4e2;hpb=a2d888496b895f772f3c58fdd6eeaca50f629f67;p=lyx.git diff --git a/src/mathed/MathData.cpp b/src/mathed/MathData.cpp index fe0be267a5..8fcf7466e3 100644 --- a/src/mathed/MathData.cpp +++ b/src/mathed/MathData.cpp @@ -252,7 +252,7 @@ void MathData::metrics(MetricsInfo & mi, Dimension & dim) const } Cursor & cur = mi.base.bv->cursor(); - const_cast(this)->updateMacros(&cur, mi.macrocontext); + const_cast(this)->updateMacros(&cur, mi.macrocontext, InternalUpdate); DocIterator const & inlineCompletionPos = mi.base.bv->inlineCompletionPos(); MathData const * inlineCompletionData = 0; @@ -387,7 +387,8 @@ void MathData::updateBuffer(ParIterator const & it, UpdateType utype) } -void MathData::updateMacros(Cursor * cur, MacroContext const & mc) +void MathData::updateMacros(Cursor * cur, MacroContext const & mc, + UpdateType utype) { // If we are editing a macro, we cannot update it immediately, // otherwise wrong undo steps will be recorded (bug 6208). @@ -484,7 +485,7 @@ void MathData::updateMacros(Cursor * cur, MacroContext const & mc) if (inset->asScriptInset()) inset = inset->asScriptInset()->nuc()[0].nucleus(); LASSERT(inset->asMacro(), /**/); - inset->asMacro()->updateRepresentation(); + inset->asMacro()->updateRepresentation(cur, mc, utype); } } @@ -646,9 +647,17 @@ void MathData::attachMacroParameters(Cursor * cur, // found tail script? E.g. \foo{a}b^x if (scriptToPutAround.nucleus()) { + InsetMathScript * scriptInset = + scriptToPutAround.nucleus()->asScriptInset(); + // In the math parser we remove empty braces in the base + // of a script inset, but we have to restore them here. + if (scriptInset->nuc().empty()) { + MathData ar; + scriptInset->nuc().push_back( + MathAtom(new InsetMathBrace(ar))); + } // put macro into a script inset - scriptToPutAround.nucleus()->asScriptInset()->nuc()[0] - = operator[](macroPos); + scriptInset->nuc()[0] = operator[](macroPos); operator[](macroPos) = scriptToPutAround; // go into the script inset nucleus @@ -656,8 +665,7 @@ void MathData::attachMacroParameters(Cursor * cur, cur->append(0, 0); // get pointer to "deep" copied macro inset - InsetMathScript * scriptInset - = operator[](macroPos).nucleus()->asScriptInset(); + scriptInset = operator[](macroPos).nucleus()->asScriptInset(); macroInset = scriptInset->nuc()[0].nucleus()->asMacro(); }