diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 23f6315f5f..e86450dcda 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -3730,10 +3730,11 @@ void Buffer::Impl::updateMacros(DocIterator & it, DocIterator & scope) for (auto const & insit : par.insetList()) { it.pos() = insit.pos; + switch (insit.inset->lyxCode()) { // is it a nested text inset? - if (insit.inset->asInsetText()) { - // Inset needs its own scope? + case TEXT_CODE: { InsetText const * itext = insit.inset->asInsetText(); + // Inset needs its own scope? bool newScope = itext->isMacroScope(); // scope which ends just behind the inset @@ -3744,10 +3745,9 @@ void Buffer::Impl::updateMacros(DocIterator & it, DocIterator & scope) it.push_back(CursorSlice(*insit.inset)); updateMacros(it, newScope ? insetScope : scope); it.pop_back(); - continue; + break; } - - if (insit.inset->asInsetTabular()) { + case TABULAR_CODE: { CursorSlice slice(*insit.inset); size_t const numcells = slice.nargs(); for (; slice.idx() < numcells; slice.forwardIdx()) { @@ -3755,11 +3755,10 @@ void Buffer::Impl::updateMacros(DocIterator & it, DocIterator & scope) updateMacros(it, scope); it.pop_back(); } - continue; + break; } - // is it an external file? - if (insit.inset->lyxCode() == INCLUDE_CODE) { + case INCLUDE_CODE: { // get buffer of external file InsetInclude const & incinset = static_cast(*insit.inset); @@ -3767,7 +3766,7 @@ void Buffer::Impl::updateMacros(DocIterator & it, DocIterator & scope) Buffer * child = incinset.loadIfNeeded(); macro_lock = false; if (!child) - continue; + break; // register its position, but only when it is // included first in the buffer @@ -3775,38 +3774,40 @@ void Buffer::Impl::updateMacros(DocIterator & it, DocIterator & scope) // register child with its scope position_to_children[it] = Impl::ScopeBuffer(scope, child); - continue; + break; } - - InsetMath * im = insit.inset->asInsetMath(); - if (doing_export && im) { - InsetMathHull * hull = im->asHullInset(); - if (hull) - hull->recordLocation(it); + case MATH_HULL_CODE: { + if (!doing_export) + break; + InsetMathHull * hull = insit.inset->asInsetMath()->asHullInset(); + hull->recordLocation(it); + break; + } + case MATHMACRO_CODE: { + // get macro data + InsetMathMacroTemplate & macroTemplate = + *insit.inset->asInsetMath()->asMacroTemplate(); + MacroContext mc(owner_, it); + macroTemplate.updateToContext(mc); + + // valid? + bool valid = macroTemplate.validMacro(); + // FIXME: Should be fixNameAndCheckIfValid() in fact, + // then the BufferView's cursor will be invalid in + // some cases which leads to crashes. + if (!valid) + break; + + // register macro + // FIXME (Abdel), I don't understand why we pass 'it' here + // instead of 'macroTemplate' defined above... is this correct? + macros[macroTemplate.name()][it] = + Impl::ScopeMacro(scope, MacroData(const_cast(owner_), it)); + break; + } + default: + break; } - - if (insit.inset->lyxCode() != MATHMACRO_CODE) - continue; - - // get macro data - InsetMathMacroTemplate & macroTemplate = - *insit.inset->asInsetMath()->asMacroTemplate(); - MacroContext mc(owner_, it); - macroTemplate.updateToContext(mc); - - // valid? - bool valid = macroTemplate.validMacro(); - // FIXME: Should be fixNameAndCheckIfValid() in fact, - // then the BufferView's cursor will be invalid in - // some cases which leads to crashes. - if (!valid) - continue; - - // register macro - // FIXME (Abdel), I don't understand why we pass 'it' here - // instead of 'macroTemplate' defined above... is this correct? - macros[macroTemplate.name()][it] = - Impl::ScopeMacro(scope, MacroData(const_cast(owner_), it)); } // next paragraph diff --git a/src/mathed/MathData.cpp b/src/mathed/MathData.cpp index 39d5f80184..ce1f4b5edc 100644 --- a/src/mathed/MathData.cpp +++ b/src/mathed/MathData.cpp @@ -403,8 +403,8 @@ void MathData::updateMacros(Cursor * cur, MacroContext const & mc, { // If we are editing a macro, we cannot update it immediately, // otherwise wrong undo steps will be recorded (bug 6208). - InsetMath const * inmath = cur ? cur->inset().asInsetMath() : 0; - InsetMathMacro const * inmacro = inmath ? inmath->asMacro() : 0; + InsetMath const * inmath = cur ? cur->inset().asInsetMath() : nullptr; + InsetMathMacro const * inmacro = inmath ? inmath->asMacro() : nullptr; docstring const edited_name = inmacro ? inmacro->name() : docstring(); // go over the array and look for macros