[LyX/master] InsetMathFont: harden the new switches against unexpected values.

Thibaut Cuvelier tcuvelier at lyx.org
Wed Oct 30 00:59:14 UTC 2024


commit 110e654b67cdc7399defa38b32810cf9e78ff95b
Author: Thibaut Cuvelier <tcuvelier at lyx.org>
Date:   Wed Oct 30 01:55:22 2024 +0100

    InsetMathFont: harden the new switches against unexpected values.
---
 src/mathed/InsetMathFont.cpp | 56 +++++++++++++++++++++++++++-----------------
 1 file changed, 35 insertions(+), 21 deletions(-)

diff --git a/src/mathed/InsetMathFont.cpp b/src/mathed/InsetMathFont.cpp
index 97c250c2d7..93f8b5ca0e 100644
--- a/src/mathed/InsetMathFont.cpp
+++ b/src/mathed/InsetMathFont.cpp
@@ -88,6 +88,7 @@ public:
 			font.family_ = MATH_MONOSPACE_FAMILY;
 		else if (tag == "textipa" || tag == "textsc" || tag == "noun")
 			font.family_ = MATH_SMALL_CAPS;
+		// Otherwise, the tag is not recognised, use the default font.
 
 		return font;
 	}
@@ -106,26 +107,33 @@ public:
 	{
 		std::string span_class;
 		switch (family_) {
-			case MATH_NORMAL_FAMILY:
-				break;
-			case MATH_FRAKTUR_FAMILY:
-				span_class = "fraktur";
-				break;
-			case MATH_SANS_FAMILY:
-				span_class = "sans";
-				break;
-			case MATH_MONOSPACE_FAMILY:
-				span_class = "monospace";
-				break;
-			case MATH_DOUBLE_STRUCK_FAMILY:
-				// This style does not exist in HTML and cannot be implemented in CSS.
-				break;
-			case MATH_SCRIPT_FAMILY:
-				span_class = "script";
-				break;
-			case MATH_SMALL_CAPS:
-				span_class = "noun";
-				break;
+		case MATH_NORMAL_FAMILY:
+			break;
+		case MATH_FRAKTUR_FAMILY:
+			span_class = "fraktur";
+			break;
+		case MATH_SANS_FAMILY:
+			span_class = "sans";
+			break;
+		case MATH_MONOSPACE_FAMILY:
+			span_class = "monospace";
+			break;
+		case MATH_DOUBLE_STRUCK_FAMILY:
+			// This style does not exist in HTML and cannot be implemented in CSS.
+			break;
+		case MATH_SCRIPT_FAMILY:
+			span_class = "script";
+			break;
+		case MATH_SMALL_CAPS:
+			span_class = "noun";
+			break;
+		}
+		// Explicitly match the cases with an empty output. This ensures that we catch at runtime
+		// invalid values for the enum while keeping compile-time warnings.
+		if (span_class.empty() && (family_ != MATH_NORMAL_FAMILY || family_ != MATH_DOUBLE_STRUCK_FAMILY)) {
+			LYXERR(Debug::MATHED,
+				"Unexpected case in MathFontInfo::toHTMLSpanClass: family_ = " << family_
+					<< ", series = " << series_ << ", shape = " << shape_);
 		}
 
 		if (series_ == MATH_BOLD_SERIES) {
@@ -175,8 +183,14 @@ private:
 			return shape_ == MATH_UP_SHAPE ? "bold" : "bold-italic";
 		case MATH_SMALL_CAPS:
 			// No valid value...
-				return "";
+			return "";
 		}
+
+		// Better safe than sorry.
+		LYXERR(Debug::MATHED,
+			"Unexpected case in MathFontInfo::toMathVariantForMathML3: family_ = " << family_
+				<< ", series = " << series_ << ", shape = " << shape_);
+		return "";
 	}
 
 	std::string toMathVariantForMathMLCore() const


More information about the lyx-cvs mailing list