[LyX/master] Improve structure of updateMacros

Yuriy Skalko yuriy.skalko at gmail.com
Fri Nov 6 19:05:10 UTC 2020


commit 5a54ccfa87057fd3220d7193b40ac2dd37a9e6e1
Author: Yuriy Skalko <yuriy.skalko at gmail.com>
Date:   Wed Nov 4 11:27:08 2020 +0200

    Improve structure of updateMacros
---
 src/Buffer.cpp          |   79 ++++++++++++++++++++++++-----------------------
 src/mathed/MathData.cpp |    4 +-
 2 files changed, 42 insertions(+), 41 deletions(-)

diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index 23f6315..e86450d 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<InsetInclude const &>(*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<Buffer *>(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<Buffer *>(owner_), it));
 		}
 
 		// next paragraph
diff --git a/src/mathed/MathData.cpp b/src/mathed/MathData.cpp
index 39d5f80..ce1f4b5 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


More information about the lyx-cvs mailing list