[LyX/master] Revert "Improve structure of updateMacros"
Richard Kimberly Heck
rikiheck at lyx.org
Wed Nov 11 16:13:51 UTC 2020
commit fdd0a6f84923f1d4a1f82457a3e256a2ee706f6b
Author: Richard Kimberly Heck <rikiheck at lyx.org>
Date: Wed Nov 11 11:24:59 2020 -0500
Revert "Improve structure of updateMacros"
The problem here is that the check against TEXT_CODE only
catches InsetText, and not its subclasses. Same for the check
against MATH_HULL_CODE. So there is reason not to check codes
here.
This reverts commit 5a54ccfa87057fd3220d7193b40ac2dd37a9e6e1.
---
src/Buffer.cpp | 79 +++++++++++++++++++++++------------------------
src/mathed/MathData.cpp | 4 +-
2 files changed, 41 insertions(+), 42 deletions(-)
diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index acda58f..23f6315 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -3730,11 +3730,10 @@ 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?
- case TEXT_CODE: {
- InsetText const * itext = insit.inset->asInsetText();
+ if (insit.inset->asInsetText()) {
// Inset needs its own scope?
+ InsetText const * itext = insit.inset->asInsetText();
bool newScope = itext->isMacroScope();
// scope which ends just behind the inset
@@ -3745,9 +3744,10 @@ void Buffer::Impl::updateMacros(DocIterator & it, DocIterator & scope)
it.push_back(CursorSlice(*insit.inset));
updateMacros(it, newScope ? insetScope : scope);
it.pop_back();
- break;
+ continue;
}
- case TABULAR_CODE: {
+
+ if (insit.inset->asInsetTabular()) {
CursorSlice slice(*insit.inset);
size_t const numcells = slice.nargs();
for (; slice.idx() < numcells; slice.forwardIdx()) {
@@ -3755,10 +3755,11 @@ void Buffer::Impl::updateMacros(DocIterator & it, DocIterator & scope)
updateMacros(it, scope);
it.pop_back();
}
- break;
+ continue;
}
+
// is it an external file?
- case INCLUDE_CODE: {
+ if (insit.inset->lyxCode() == INCLUDE_CODE) {
// get buffer of external file
InsetInclude const & incinset =
static_cast<InsetInclude const &>(*insit.inset);
@@ -3766,7 +3767,7 @@ void Buffer::Impl::updateMacros(DocIterator & it, DocIterator & scope)
Buffer * child = incinset.loadIfNeeded();
macro_lock = false;
if (!child)
- break;
+ continue;
// register its position, but only when it is
// included first in the buffer
@@ -3774,40 +3775,38 @@ void Buffer::Impl::updateMacros(DocIterator & it, DocIterator & scope)
// register child with its scope
position_to_children[it] = Impl::ScopeBuffer(scope, child);
- break;
- }
- 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(owner_, it));
- break;
+ continue;
}
- default:
- break;
+
+ InsetMath * im = insit.inset->asInsetMath();
+ if (doing_export && im) {
+ InsetMathHull * hull = im->asHullInset();
+ if (hull)
+ hull->recordLocation(it);
}
+
+ 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<Buffer *>(owner_), it));
}
// next paragraph
diff --git a/src/mathed/MathData.cpp b/src/mathed/MathData.cpp
index ce1f4b5..39d5f80 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() : nullptr;
- InsetMathMacro const * inmacro = inmath ? inmath->asMacro() : nullptr;
+ InsetMath const * inmath = cur ? cur->inset().asInsetMath() : 0;
+ InsetMathMacro const * inmacro = inmath ? inmath->asMacro() : 0;
docstring const edited_name = inmacro ? inmacro->name() : docstring();
// go over the array and look for macros
More information about the lyx-cvs
mailing list