[LyX/master] LyXHTML: switch the doctype to (X)HTML5 and only output XML entities.

Thibaut Cuvelier tcuvelier at lyx.org
Sun Dec 25 18:51:22 UTC 2022


commit bc73a85778ffb1432bdc510d9a710e7394f42163
Author: Thibaut Cuvelier <tcuvelier at lyx.org>
Date:   Fri Dec 23 02:16:08 2022 +0100

    LyXHTML: switch the doctype to (X)HTML5 and only output XML entities.
    
    This is a new take on c8e2c17a that was reverted at da67bde61af due to entities no more recognised by the browsers. Corresponding thread on the mailing list: https://www.mail-archive.com/lyx-devel@lists.lyx.org/msg213179.html
    
    This patch is a huge cleanup overall, by removing the distinction between HTML and XML entities (the latter arrived due to the DocBook support).
    
    In InsetListingParams, I also changed the mechanism that relied on " to use an XML entity to be consistent with the rest of the code, mostly in case someone looks for HTML entities and wonders why they are still there.
---
 lib/RELEASE-NOTES                  |    6 ++-
 src/Buffer.cpp                     |   20 +++---
 src/LaTeXFeatures.cpp              |   31 ---------
 src/LaTeXFeatures.h                |    4 -
 src/Layout.cpp                     |    4 +-
 src/Paragraph.cpp                  |    2 +-
 src/insets/InsetLayout.cpp         |    2 +-
 src/insets/InsetListingsParams.cpp |   12 ++--
 src/insets/InsetQuotes.cpp         |   82 +-----------------------
 src/insets/InsetQuotes.h           |    4 +-
 src/insets/InsetSpace.cpp          |    6 +-
 src/insets/InsetSpecialChar.cpp    |  119 ++++++++++++------------------------
 src/mathed/InsetMathBig.cpp        |    4 +-
 src/mathed/InsetMathChar.cpp       |    7 +--
 src/mathed/InsetMathDecoration.cpp |   67 ++++++++++----------
 src/mathed/InsetMathDelim.cpp      |    8 +-
 src/mathed/InsetMathDots.cpp       |   68 ++++++--------------
 src/mathed/InsetMathHull.cpp       |    4 +-
 src/mathed/InsetMathMacro.cpp      |    4 +-
 src/mathed/InsetMathMatrix.cpp     |    4 +-
 src/mathed/InsetMathRoot.cpp       |    2 +-
 src/mathed/InsetMathSpace.cpp      |    6 +-
 src/mathed/InsetMathSqrt.cpp       |    2 +-
 src/mathed/InsetMathSymbol.cpp     |   12 ++--
 src/mathed/InsetMathXArrow.cpp     |   34 ++---------
 src/mathed/MacroTable.cpp          |    8 ---
 src/mathed/MacroTable.h            |    2 -
 src/mathed/MathFactory.cpp         |   12 ++--
 src/mathed/MathParser.h            |    2 -
 src/mathed/MathStream.cpp          |   10 +--
 src/mathed/MathStream.h            |    8 +--
 31 files changed, 167 insertions(+), 389 deletions(-)

diff --git a/lib/RELEASE-NOTES b/lib/RELEASE-NOTES
index 2c6f80e..39d5e8f 100644
--- a/lib/RELEASE-NOTES
+++ b/lib/RELEASE-NOTES
@@ -64,11 +64,15 @@
 * Documents that use TeX fonts can only be compiled with XeTeX if the input
   encoding is set to "utf8-plain" or "ascii".
 
-* With LyXHTML output, there are now different CSS classees generated for
+* With LyXHTML output, there are now different CSS classes generated for
   different depths: enumi, enumii, enumiii, and enumiv, and similarly for
   itemize: lyxitemi, etc. There is also a new HTMLClass tag, which makes it
   easier to provide specific classes for paragraphs.
 
+* HTML support has been updated to output XHTML5 files. A major change is the
+  use of XML entities instead of HTML ones (e.g., LyX now outputs -
+  instead of ").
+
 * DocBook support has been revamped and now targets DocBook 5 (i.e.
   only XML, SGML is gone). Some supporting files for the previous
   implementation have been removed: all examples (lib/examples),
diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index c7e479a..b1d14d2 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -2173,14 +2173,14 @@ Buffer::ExportStatus Buffer::writeDocBookSource(odocstream & os,
 		}
 
 		// Directly output the root tag, based on the current type of document.
-		string params = "xml:lang=\"" + params().language->code() + '"'
-						+ " xmlns=\"http://docbook.org/ns/docbook\""
-						+ " xmlns:xlink=\"http://www.w3.org/1999/xlink\""
-						+ mathmlNamespace
-						+ " xmlns:xi=\"http://www.w3.org/2001/XInclude\""
-						+ " version=\"5.2\"";
+		string attributes = "xml:lang=\"" + params().language->code() + '"'
+						    + " xmlns=\"http://docbook.org/ns/docbook\""
+						    + " xmlns:xlink=\"http://www.w3.org/1999/xlink\""
+						    + mathmlNamespace
+						    + " xmlns:xi=\"http://www.w3.org/2001/XInclude\""
+						    + " version=\"5.2\"";
 
-		os << "<" << from_ascii(tclass.docbookroot()) << " " << from_ascii(params) << ">\n";
+		os << "<" << from_ascii(tclass.docbookroot()) << " " << from_ascii(attributes) << ">\n";
 	}
 
 	if (output_body) {
@@ -2238,11 +2238,11 @@ Buffer::ExportStatus Buffer::writeLyXHTMLSource(odocstream & os,
 	  output == FullSource || output == OnlyBody || output == IncludedFile;
 
 	if (output_preamble) {
-		os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-		   << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN\" \"http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd\">\n"
+		os << "<!DOCTYPE html>\n"
 		   << "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"" << from_ascii(params().language->code()) << "\">\n"
 		   << "<head>\n"
 		   << "<meta name=\"GENERATOR\" content=\"" << PACKAGE_STRING << "\" />\n"
+		   << "<meta charset=\"UTF-8\" />\n"
 		   // FIXME Presumably need to set this right
 		   << "<meta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\" />\n";
 
diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp
index 0bed75a..364a492 100644
--- a/src/LaTeXFeatures.cpp
+++ b/src/LaTeXFeatures.cpp
@@ -2164,37 +2164,6 @@ docstring const LaTeXFeatures::getTClassI18nPreamble(bool use_babel,
 }
 
 
-docstring const LaTeXFeatures::getLyXSGMLEntities() const
-{
-	// Definition of entities used in the document that are LyX related.
-	odocstringstream entities;
-
-	if (mustProvide("lyxarrow")) {
-		entities << "<!ENTITY lyxarrow \"->\">" << '\n';
-	}
-
-	return entities.str();
-}
-
-
-docstring const LaTeXFeatures::getIncludedFiles(string const & fname) const
-{
-	odocstringstream sgmlpreamble;
-	// FIXME UNICODE
-	docstring const basename(from_utf8(onlyPath(fname)));
-
-	FileMap::const_iterator end = IncludedFiles_.end();
-	for (FileMap::const_iterator fi = IncludedFiles_.begin();
-	     fi != end; ++fi)
-		// FIXME UNICODE
-		sgmlpreamble << "\n<!ENTITY " << fi->first
-			     << (isSGMLFileName(fi->second) ? " SYSTEM \"" : " \"")
-			     << makeRelPath(from_utf8(fi->second), basename) << "\">";
-
-	return sgmlpreamble.str();
-}
-
-
 void LaTeXFeatures::showStruct() const
 {
 	lyxerr << "LyX needs the following commands when LaTeXing:"
diff --git a/src/LaTeXFeatures.h b/src/LaTeXFeatures.h
index a19d2ab..10f7c32 100644
--- a/src/LaTeXFeatures.h
+++ b/src/LaTeXFeatures.h
@@ -79,10 +79,6 @@ public:
 	docstring const getTClassHTMLStyles() const;
 	///
 	docstring const getTClassHTMLPreamble() const;
-	/// The sgml definitions needed by the document (docbook)
-	docstring const getLyXSGMLEntities() const;
-	/// The SGML Required to include the files added with includeFile();
-	docstring const getIncludedFiles(std::string const & fname) const;
 	/// Include a file for use with the SGML entities
 	void includeFile(docstring const & key, std::string const & name);
 	/// The float definitions.
diff --git a/src/Layout.cpp b/src/Layout.cpp
index 515226d..716da3f 100644
--- a/src/Layout.cpp
+++ b/src/Layout.cpp
@@ -515,7 +515,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass,
 
 		case LT_LATEXPARAM:
 			lex >> latexparam_;
-			latexparam_ = subst(latexparam_, """, "\"");
+			latexparam_ = subst(latexparam_, """, "\"");
 			break;
 
 		case LT_LEFTDELIM:
@@ -1455,7 +1455,7 @@ void Layout::write(ostream & os) const
 	if (!latexname_.empty())
 		os << "\tLatexName \"" << latexname_ << "\"\n";
 	if (!latexparam_.empty())
-		os << "\tLatexParam \"" << subst(latexparam_, "\"", """)
+		os << "\tLatexParam \"" << subst(latexparam_, "\"", """)
 		   << "\"\n";
 	if (!leftdelim_.empty())
 		os << "\tLeftDelim "
diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp
index 8f5f6f3..e2338ba 100644
--- a/src/Paragraph.cpp
+++ b/src/Paragraph.cpp
@@ -4046,7 +4046,7 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
 			char_type c = getUChar(buf.masterBuffer()->params(),
 					       runparams, i);
 			if (c == ' ' && (style.free_spacing || runparams.free_spacing))
-				xs << XMLStream::ESCAPE_NONE << " ";
+				xs << XMLStream::ESCAPE_NONE << " ";
 			else if (c == '\'')
 				xs << XMLStream::ESCAPE_NONE << "’";
 			else
diff --git a/src/insets/InsetLayout.cpp b/src/insets/InsetLayout.cpp
index 0d1322a..6c4c028 100644
--- a/src/insets/InsetLayout.cpp
+++ b/src/insets/InsetLayout.cpp
@@ -312,7 +312,7 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass,
 			break;
 		case IL_LATEXPARAM:
 			lex >> tmp;
-			latexparam_ = subst(tmp, """, "\"");
+			latexparam_ = subst(tmp, """, "\"");
 			break;
 		case IL_LEFTDELIM:
 			lex >> leftdelim_;
diff --git a/src/insets/InsetListingsParams.cpp b/src/insets/InsetListingsParams.cpp
index 9390d6b..e017d52 100644
--- a/src/insets/InsetListingsParams.cpp
+++ b/src/insets/InsetListingsParams.cpp
@@ -1139,10 +1139,10 @@ string InsetListingsParams::encodedString() const
 	// '"' is handled differently because it will
 	// terminate a lyx token.
 	string par = params();
-	// '"' is now "  ==> '"' is now &quot;
+	// '"' is now "  ==> '"' is now &#34;
 	par = subst(par, "&", "&");
-	// '"' is now &quot; ==> '"' is now &quot;
-	par = subst(par, "\"", """);
+	// '"' is now &#34; ==> '"' is now &#34;
+	par = subst(par, "\"", """);
 	return par;
 }
 
@@ -1160,9 +1160,9 @@ void InsetListingsParams::fromEncodedString(string const & in)
 {
 	// Decode string! Reversal of encodedString
 	string par = in;
-	// '"' is now &quot; ==> '"' is now &quot;
-	par = subst(par, """, "\"");
-	//  '"' is now &quot; ==> '"' is now "
+	// '"' is now &#34; ==> '"' is now &#34;
+	par = subst(par, """, "\"");
+	//  '"' is now &#34; ==> '"' is now "
 	par = subst(par, "&", "&");
 	setParams(par);
 }
diff --git a/src/insets/InsetQuotes.cpp b/src/insets/InsetQuotes.cpp
index 19eb846..6fcc755 100644
--- a/src/insets/InsetQuotes.cpp
+++ b/src/insets/InsetQuotes.cpp
@@ -470,79 +470,6 @@ docstring InsetQuotesParams::getLaTeXQuote(char_type c, string const & op,
 }
 
 
-docstring InsetQuotesParams::getHTMLQuote(char_type c) const
-{
-	string res;
-
-	switch (c){
-	case 0x201a: // ,
-		res = "‚";
-		break;
-	case 0x2019: // '
-		res = "’";
-		break;
-	case 0x2018: // `
-		res = "‘";
-		break;
-	case 0x2039: // <
-		res = "‹";
-		break;
-	case 0x203a: // >
-		res = "›";
-		break;
-	case 0x0027: // ' (plain)
-		res = "&#x27;";
-		break;
-	case 0x201e: // ,,
-		res = "„";
-		break;
-	case 0x201d: // ''
-		res = "”";
-		break;
-	case 0x201c: // ``
-		res = "“";
-		break;
-	case 0x00ab: // <<
-		res = "«";
-		break;
-	case 0x00bb: // >>
-		res = "»";
-		break;
-	case 0x0022: // "
-		res = """;
-		break;
-	case 0x300c: // LEFT CORNER BRACKET
-		res = "&#x300c;";
-		break;
-	case 0x300d: // RIGHT CORNER BRACKET
-		res = "&#x300d;";
-		break;
-	case 0x300e: // LEFT WHITE CORNER BRACKET
-		res = "&#x300e;";
-		break;
-	case 0x300f: // RIGHT WHITE CORNER BRACKET
-		res = "&#x300f;";
-		break;
-	case 0x300a: // LEFT DOUBLE ANGLE BRACKET
-		res = "&#x300a;";
-		break;
-	case 0x300b: // RIGHT DOUBLE ANGLE BRACKET
-		res = "&#x300b;";
-		break;
-	case 0x3008: // LEFT ANGLE BRACKET
-		res = "&#x3008;";
-		break;
-	case 0x3009: // RIGHT ANGLE BRACKET
-		res = "&#x3009;";
-		break;
-	default:
-		break;
-	}
-
-	return from_ascii(res);
-}
-
-
 docstring InsetQuotesParams::getXMLQuote(char_type c) const
 {
 	// Directly output the character Unicode form.
@@ -959,11 +886,10 @@ int InsetQuotes::plaintext(odocstringstream & os,
 }
 
 
-docstring InsetQuotes::getQuoteEntity(bool isHTML) const {
+docstring InsetQuotes::getQuoteXMLEntity() const {
 	QuoteStyle style =
 			(style_ == QuoteStyle::Dynamic) ? global_style_ : style_;
-	docstring res = isHTML ? quoteparams.getHTMLQuote(quoteparams.getQuoteChar(style, level_, side_)) :
-					quoteparams.getXMLQuote(quoteparams.getQuoteChar(style, level_, side_));
+	docstring res = quoteparams.getXMLQuote(quoteparams.getQuoteChar(style, level_, side_));
 
 	// in French, thin spaces are added inside double guillemets
 	if (prefixIs(context_lang_, "fr")
@@ -984,13 +910,13 @@ docstring InsetQuotes::getQuoteEntity(bool isHTML) const {
 
 void InsetQuotes::docbook(XMLStream & xs, OutputParams const &) const
 {
-	xs << XMLStream::ESCAPE_NONE << getQuoteEntity(false);
+	xs << XMLStream::ESCAPE_NONE << getQuoteXMLEntity();
 }
 
 
 docstring InsetQuotes::xhtml(XMLStream & xs, OutputParams const &) const
 {
-	xs << XMLStream::ESCAPE_NONE << getQuoteEntity(true);
+	xs << XMLStream::ESCAPE_NONE << getQuoteXMLEntity();
 	return docstring();
 }
 
diff --git a/src/insets/InsetQuotes.h b/src/insets/InsetQuotes.h
index c4b525c..5541af4 100644
--- a/src/insets/InsetQuotes.h
+++ b/src/insets/InsetQuotes.h
@@ -87,8 +87,6 @@ public:
 	docstring getLaTeXQuote(char_type c, std::string const &,
 				bool const rtl = false) const;
 	///
-	docstring getHTMLQuote(char_type c) const;
-	///
 	docstring getXMLQuote(char_type c) const;
 	/// Returns a descriptive label of a style suitable for dialog and menu
 	docstring const getGuiLabel(QuoteStyle const & qs,
@@ -188,7 +186,7 @@ private:
 	///
 	docstring displayString() const;
 	///
-	docstring getQuoteEntity(bool isHTML) const;
+	docstring getQuoteXMLEntity() const;
 	///
 	QuoteStyle getStyle(std::string const &);
 
diff --git a/src/insets/InsetSpace.cpp b/src/insets/InsetSpace.cpp
index b7323b6..71c7395 100644
--- a/src/insets/InsetSpace.cpp
+++ b/src/insets/InsetSpace.cpp
@@ -860,9 +860,9 @@ docstring InsetSpace::xhtml(XMLStream & xs, OutputParams const &) const
 	case InsetSpaceParams::NEGTHIN:
 	case InsetSpaceParams::NEGMEDIUM:
 	case InsetSpaceParams::NEGTHICK:
-		output =" ";
+		output =" ";
 		break;
-	// no XHTML entity, only unicode code for space character exists
+	// no XML entity, only Unicode code for space character exists
 	case InsetSpaceParams::VISIBLE:
 		output ="&#x2423;";
 		break;
@@ -884,7 +884,7 @@ docstring InsetSpace::xhtml(XMLStream & xs, OutputParams const &) const
 	case InsetSpaceParams::CUSTOM_PROTECTED:
 		// FIXME XHTML
 		// Probably we could do some sort of blank span?
-		output =" ";
+		output =" ";
 		break;
 	}
 	// don't escape the entities!
diff --git a/src/insets/InsetSpecialChar.cpp b/src/insets/InsetSpecialChar.cpp
index 88af653..1dcc3da 100644
--- a/src/insets/InsetSpecialChar.cpp
+++ b/src/insets/InsetSpecialChar.cpp
@@ -530,96 +530,55 @@ int InsetSpecialChar::plaintext(odocstringstream & os,
 }
 
 
-void InsetSpecialChar::docbook(XMLStream & xs, OutputParams const &) const
-{
-	switch (kind_) {
-    case HYPHENATION:
-    	// Soft hyphen.
-        xs << XMLStream::ESCAPE_NONE << "&#xAD;";
-        break;
-    case ALLOWBREAK:
-    	// Zero-width space
-        xs << XMLStream::ESCAPE_NONE << "&#x200B;";
-        break;
-	case LIGATURE_BREAK:
+namespace {
+string specialCharKindToXMLEntity(InsetSpecialChar::Kind kind) {
+	switch (kind) {
+	case InsetSpecialChar::Kind::HYPHENATION:
+		// Soft hyphen.
+		return "&#xAD;";
+	case InsetSpecialChar::Kind::ALLOWBREAK:
+		// Zero-width space
+		return "&#x200B;";
+	case InsetSpecialChar::Kind::LIGATURE_BREAK:
 		// Zero width non-joiner
-		xs << XMLStream::ESCAPE_NONE << "&#x200C;";
-		break;
-	case END_OF_SENTENCE:
-		xs << '.';
-		break;
-	case LDOTS:
+		return "&#x200C;";
+	case InsetSpecialChar::Kind::END_OF_SENTENCE:
+		return ".";
+	case InsetSpecialChar::Kind::LDOTS:
 		// …
-		xs << XMLStream::ESCAPE_NONE << "&#x2026;";
-		break;
-	case MENU_SEPARATOR:
+		return "&#x2026;";
+	case InsetSpecialChar::Kind::MENU_SEPARATOR:
 		// ⇒, right arrow.
-		xs << XMLStream::ESCAPE_NONE << "&#x21D2;";
-		break;
-	case SLASH:
+		return "&#x21D2;";
+	case InsetSpecialChar::Kind::SLASH:
 		// ⁄, fractional slash.
-		xs << XMLStream::ESCAPE_NONE << "&#x2044;";
-		break;
+		return "&#x2044;";
+	case InsetSpecialChar::Kind::NOBREAKDASH:
 		// Non-breaking hyphen.
-	case NOBREAKDASH:
-		xs << XMLStream::ESCAPE_NONE << "&#x2011;";
-		break;
-	case PHRASE_LYX:
-		xs << "LyX";
-		break;
-	case PHRASE_TEX:
-		xs << "TeX";
-		break;
-	case PHRASE_LATEX2E:
+		return "&#x2011;";
+	case InsetSpecialChar::Kind::PHRASE_LYX:
+		return "LyX";
+	case InsetSpecialChar::Kind::PHRASE_TEX:
+		return "TeX";
+	case InsetSpecialChar::Kind::PHRASE_LATEX2E:
 		// Lower-case epsilon.
-		xs << "LaTeX2" << XMLStream::ESCAPE_NONE << "&#x03b5;";
-		break;
-	case PHRASE_LATEX:
-		xs << "LaTeX";
-		break;
+		return "LaTeX2&#x03b5;";
+	case InsetSpecialChar::Kind::PHRASE_LATEX:
+		return "LaTeX";
 	}
 }
+}
+
+
+void InsetSpecialChar::docbook(XMLStream & xs, OutputParams const &) const
+{
+	xs << XMLStream::ESCAPE_NONE << from_ascii(specialCharKindToXMLEntity(kind_));
+}
 
 
 docstring InsetSpecialChar::xhtml(XMLStream & xs, OutputParams const &) const
 {
-	switch (kind_) {
-	case HYPHENATION:
-		break;
-	case ALLOWBREAK:
-		xs << XMLStream::ESCAPE_NONE << "​";
-		break;
-	case LIGATURE_BREAK:
-		xs << XMLStream::ESCAPE_NONE << "‌";
-		break;
-	case END_OF_SENTENCE:
-		xs << '.';
-		break;
-	case LDOTS:
-		xs << XMLStream::ESCAPE_NONE << "…";
-		break;
-	case MENU_SEPARATOR:
-		xs << XMLStream::ESCAPE_NONE << "⇒";
-		break;
-	case SLASH:
-		xs << XMLStream::ESCAPE_NONE << "⁄";
-		break;
-	case NOBREAKDASH:
-		xs << XMLStream::ESCAPE_NONE << "‑";
-		break;
-	case PHRASE_LYX:
-		xs << "LyX";
-		break;
-	case PHRASE_TEX:
-		xs << "TeX";
-		break;
-	case PHRASE_LATEX2E:
-		xs << "LaTeX2" << XMLStream::ESCAPE_NONE << "&#x3b5;";
-		break;
-	case PHRASE_LATEX:
-		xs << "LaTeX";
-		break;
-	}
+	xs << XMLStream::ESCAPE_NONE << from_ascii(specialCharKindToXMLEntity(kind_));
 	return docstring();
 }
 
@@ -636,7 +595,7 @@ void InsetSpecialChar::toString(odocstream & os) const
 		break;
 	}
 	odocstringstream ods;
-	plaintext(ods, OutputParams(0));
+	plaintext(ods, OutputParams(nullptr));
 	os << ods.str();
 }
 
@@ -645,7 +604,7 @@ void InsetSpecialChar::forOutliner(docstring & os, size_t const,
 								   bool const) const
 {
 	odocstringstream ods;
-	plaintext(ods, OutputParams(0));
+	plaintext(ods, OutputParams(nullptr));
 	os += ods.str();
 }
 
diff --git a/src/mathed/InsetMathBig.cpp b/src/mathed/InsetMathBig.cpp
index 0ddb6c8..4972911 100644
--- a/src/mathed/InsetMathBig.cpp
+++ b/src/mathed/InsetMathBig.cpp
@@ -138,7 +138,7 @@ void InsetMathBig::normalize(NormalStream & os) const
 void InsetMathBig::mathmlize(MathMLStream & ms) const
 {
 	ms << MTagInline("mo", "fence='true' stretchy='true' symmetric='true'")
-	   << convertDelimToXMLEscape(delim_, ms.xmlMode())
+	   << convertDelimToXMLEscape(delim_)
 	   << ETagInline("mo");
 }
 
@@ -153,7 +153,7 @@ void InsetMathBig::htmlize(HtmlStream & os) const
 	default: name  = "big"; break;
 	}
 	os << MTag("span", "class='" + name + "symbol'")
-	   << convertDelimToXMLEscape(delim_, false)
+	   << convertDelimToXMLEscape(delim_)
 	   << ETag("span");
 }
 
diff --git a/src/mathed/InsetMathChar.cpp b/src/mathed/InsetMathChar.cpp
index 57bd816..a5001fc 100644
--- a/src/mathed/InsetMathChar.cpp
+++ b/src/mathed/InsetMathChar.cpp
@@ -234,10 +234,7 @@ void InsetMathChar::mathmlize(MathMLStream & ms) const
 		case '>': entity = ">"; break;
 		case '&': entity = "&"; break;
 		case ' ': {
-			if (ms.xmlMode())
-				ms << from_ascii(" ");
-			else
-				ms << from_ascii(" ");
+			ms << from_ascii(" ");
 			return;
 		}
 		default: break;
@@ -278,7 +275,7 @@ void InsetMathChar::htmlize(HtmlStream & ms) const
 		case '<': entity = "<"; break;
 		case '>': entity = ">"; break;
 		case '&': entity = "&"; break;
-		case ' ': entity = " "; break;
+		case ' ': entity = " "; break;
 		default: break;
 	}
 
diff --git a/src/mathed/InsetMathDecoration.cpp b/src/mathed/InsetMathDecoration.cpp
index 2bd52f4..616d1f3 100644
--- a/src/mathed/InsetMathDecoration.cpp
+++ b/src/mathed/InsetMathDecoration.cpp
@@ -188,10 +188,9 @@ void InsetMathDecoration::infoize(odocstream & os) const
 namespace {
 	struct Attributes {
 		Attributes() : over(false) {}
-		Attributes(bool o, string const & t, string const & entity)
-			: over(o), tag(t), entity(entity) {}
+		Attributes(bool o, string_view entity)
+			: over(o), entity(entity) {}
 		bool over;
-		string tag;
 		string entity;
 	};
 
@@ -199,35 +198,35 @@ namespace {
 
 	void buildTranslationMap(TranslationMap & t) {
 		// the decorations we need to support are listed in lib/symbols
-		t["acute"] = Attributes(true, "´", "&#x00B4;");
-		t["bar"]   = Attributes(true, "‾", "&#x00AF;");
-		t["breve"] = Attributes(true, "˘", "&#x02D8;");
-		t["check"] = Attributes(true, "ˇ", "&#x02C7;");
-		t["ddddot"] = Attributes(true, "⃜", "&#x20DC;");
-		t["dddot"] = Attributes(true, "⃛", "&#x20DB;");
-		t["ddot"] = Attributes(true, "¨", "&#x00A8;");
-		t["dot"] = Attributes(true, "˙", "&#x02D9;");
-		t["grave"] = Attributes(true, "`", "&#x0060;");
-		t["hat"] = Attributes(true, "ˆ", "&#x02C6;");
-		t["mathring"] = Attributes(true, "˚", "&#x02DA;");
-		t["overbrace"] = Attributes(true, "⏞", "&#x23DE;");
-		t["overleftarrow"] = Attributes(true, "⟵", "&#x27F5;");
-		t["overleftrightarrow"] = Attributes(true, "⟷", "&#x27F7;");
-		t["overline"] = Attributes(true, "¯", "&#x00AF;");
-		t["overrightarrow"] = Attributes(true, "⟶", "&#x27F6;");
-		t["tilde"] = Attributes(true, "˜", "&#x02DC;");
-		t["underbar"] = Attributes(false, "_", "&#x0332;");
-		t["underbrace"] = Attributes(false, "⏟", "&#x23DF;");
-		t["underleftarrow"] = Attributes(false, "⟵", "&#x27F5;");
-		t["underleftrightarrow"] = Attributes(false, "⟷", "&#x27F7;");
+		t["acute"] = Attributes(true, "&#x00B4;");
+		t["bar"]   = Attributes(true, "&#x00AF;");
+		t["breve"] = Attributes(true, "&#x02D8;");
+		t["check"] = Attributes(true, "&#x02C7;");
+		t["ddddot"] = Attributes(true, "&#x20DC;");
+		t["dddot"] = Attributes(true, "&#x20DB;");
+		t["ddot"] = Attributes(true, "&#x00A8;");
+		t["dot"] = Attributes(true, "&#x02D9;");
+		t["grave"] = Attributes(true, "&#x0060;");
+		t["hat"] = Attributes(true, "&#x02C6;");
+		t["mathring"] = Attributes(true, "&#x02DA;");
+		t["overbrace"] = Attributes(true, "&#x23DE;");
+		t["overleftarrow"] = Attributes(true, "&#x27F5;");
+		t["overleftrightarrow"] = Attributes(true, "&#x27F7;");
+		t["overline"] = Attributes(true, "&#x00AF;");
+		t["overrightarrow"] = Attributes(true, "&#x27F6;");
+		t["tilde"] = Attributes(true, "&#x02DC;");
+		t["underbar"] = Attributes(false, "&#x0332;");
+		t["underbrace"] = Attributes(false, "&#x23DF;");
+		t["underleftarrow"] = Attributes(false, "&#x27F5;");
+		t["underleftrightarrow"] = Attributes(false, "&#x27F7;");
 		// this is the macron, again, but it works
-		t["underline"] = Attributes(false, "¯", "&#x00AF;");
-		t["underrightarrow"] = Attributes(false, "⟶", "&#x27F6;");
-		t["undertilde"] = Attributes(false, "∼", "&#x223C;");
-		t["utilde"] = Attributes(false, "∼", "&#x223C;");
-		t["vec"] = Attributes(true, "→", "&#x2192;");
-		t["widehat"] = Attributes(true, "^", "&#x005E;");
-		t["widetilde"] = Attributes(true, "∼", "&#x223C;");
+		t["underline"] = Attributes(false, "&#x00AF;");
+		t["underrightarrow"] = Attributes(false, "&#x27F6;");
+		t["undertilde"] = Attributes(false, "&#x223C;");
+		t["utilde"] = Attributes(false, "&#x223C;");
+		t["vec"] = Attributes(true, "&#x2192;");
+		t["widehat"] = Attributes(true, "&#x005E;");
+		t["widetilde"] = Attributes(true, "&#x223C;");
 	}
 
 	TranslationMap const & translationMap() {
@@ -244,7 +243,7 @@ void InsetMathDecoration::mathmlize(MathMLStream & ms) const
 	TranslationMap::const_iterator cur = t.find(to_utf8(key_->name));
 	LASSERT(cur != t.end(), return);
 	char const * const outag = cur->second.over ? "mover" : "munder";
-	std::string decoration = ms.xmlMode() ? cur->second.entity : cur->second.tag;
+	std::string decoration = cur->second.entity;
 	ms << MTag(outag)
 	   << cell(0)
 	   << "<" << from_ascii(ms.namespacedTag("mo")) << " stretchy=\"true\">"
@@ -277,14 +276,14 @@ void InsetMathDecoration::htmlize(HtmlStream & os) const
 	   << '\n';
 
 	if (symontop)
-		os << MTag("span", "class='symbol'") << from_ascii(cur->second.tag);
+		os << MTag("span", "class='symbol'") << from_ascii(cur->second.entity);
 	else
 		os << MTag("span", "class='base'") << cell(0);
 	os << ETag("span") << '\n';
 	if (symontop)
 		os << MTag("span", "class='base'") << cell(0);
 	else
-		os << MTag("span", "class='symbol'") << from_ascii(cur->second.tag);
+		os << MTag("span", "class='symbol'") << from_ascii(cur->second.entity);
 	os << ETag("span") << '\n' << ETag("span") << '\n';
 }
 
diff --git a/src/mathed/InsetMathDelim.cpp b/src/mathed/InsetMathDelim.cpp
index cd4f8aa..486ed97 100644
--- a/src/mathed/InsetMathDelim.cpp
+++ b/src/mathed/InsetMathDelim.cpp
@@ -183,11 +183,11 @@ void InsetMathDelim::mathmlize(MathMLStream & ms) const
 {
 	ms << MTag("mrow")
 	   << MTagInline("mo", "form='prefix' fence='true' stretchy='true' symmetric='true'")
-	   << convertDelimToXMLEscape(left_, ms.xmlMode())
+	   << convertDelimToXMLEscape(left_)
 	   << ETagInline("mo")
 	   << cell(0)
 	   << MTagInline("mo", "form='postfix' fence='true' stretchy='true' symmetric='true'")
-	   << convertDelimToXMLEscape(right_, ms.xmlMode())
+	   << convertDelimToXMLEscape(right_)
 	   << ETagInline("mo")
 	   << ETag("mrow");
 }
@@ -195,9 +195,9 @@ void InsetMathDelim::mathmlize(MathMLStream & ms) const
 
 void InsetMathDelim::htmlize(HtmlStream & os) const
 {
-	os << convertDelimToXMLEscape(left_, false)
+	os << convertDelimToXMLEscape(left_)
 	   << cell(0)
-	   << convertDelimToXMLEscape(right_, false);
+	   << convertDelimToXMLEscape(right_);
 }
 
 
diff --git a/src/mathed/InsetMathDots.cpp b/src/mathed/InsetMathDots.cpp
index 63c54c9..ed0db97 100644
--- a/src/mathed/InsetMathDots.cpp
+++ b/src/mathed/InsetMathDots.cpp
@@ -74,60 +74,34 @@ void InsetMathDots::validate(LaTeXFeatures & features) const
 }
 
 
-void InsetMathDots::mathmlize(MathMLStream & ms) const
-{
-	// which symbols we support is decided by what is listed in
-	// lib/symbols as generating a dots inset
-	docstring const & n = key_->name;
-	std::string ent;
-	if (ms.xmlMode()) {
-		if (n == "dots" || n == "dotsc" || n == "dotso" || n == "ldots")
-			ent = "&#x2026;";
-		else if (n == "adots" || n == "iddots")
-			ent = "&#x22F0;";
-		else if (n == "cdots" || n == "dotsb" || n == "dotsi" || n == "dotsm")
-			ent = "&#x22EF;";
-		else if (n == "ddots")
-			ent = "&#x22F1;";
-		else if (n == "vdots")
-			ent = "&#x22EE;";
-		else LASSERT(false, ent = "&#x2026;");
-	} else {
-		if (n == "dots" || n == "dotsc" || n == "dotso" || n == "ldots")
-			ent = "…";
-		else if (n == "adots" || n == "iddots")
-			ent = "⋰";
-		else if (n == "cdots" || n == "dotsb" || n == "dotsi" || n == "dotsm")
-			ent = "⋯";
-		else if (n == "ddots")
-			ent = "⋱";
-		else if (n == "vdots")
-			ent = "⋮";
-		else LASSERT(false, ent = "…");
-	}
-	ms << MTagInline("mi") << from_ascii(ent) << ETagInline("mi");
-}
-
-
-void InsetMathDots::htmlize(HtmlStream & os) const
-{
+namespace {
+std::string symbolToXMLEntity(docstring const & n) {
 	// which symbols we support is decided by what is listed in
 	// lib/symbols as generating a dots inset
-	docstring const & n = key_->name;
-	std::string ent;
 	if (n == "dots" || n == "dotsc" || n == "dotso" || n == "ldots")
-		ent = "&#x02026;";
+		return "&#x2026;";
 	else if (n == "adots" || n == "iddots")
-		ent = "&#x022F0;";
+		return "&#x22F0;";
 	else if (n == "cdots" || n == "dotsb" || n == "dotsi" || n == "dotsm")
-		ent = "&#x022EF;";
+		return "&#x22EF;";
 	else if (n == "ddots")
-		ent = "&#x022F1;";
+		return "&#x22F1;";
 	else if (n == "vdots")
-		ent = "&#x022EE;";
-	else
-		LASSERT(false, ent = "#x02026;");
-	os << from_ascii(ent);
+		return "&#x22EE;";
+	else LASSERT(false, return "&#x2026;");
+}
+}
+
+
+void InsetMathDots::mathmlize(MathMLStream & ms) const
+{
+	ms << MTagInline("mi") << from_ascii(symbolToXMLEntity(key_->name)) << ETagInline("mi");
+}
+
+
+void InsetMathDots::htmlize(HtmlStream & os) const
+{
+	os << from_ascii(symbolToXMLEntity(key_->name));
 }
 
 } // namespace lyx
diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp
index 0ab06d2..746da1d 100644
--- a/src/mathed/InsetMathHull.cpp
+++ b/src/mathed/InsetMathHull.cpp
@@ -2419,7 +2419,7 @@ void InsetMathHull::docbook(XMLStream & xs, OutputParams const & runparams) cons
 	}
 
 	odocstringstream osmath;
-	MathMLStream ms(osmath, mathmlNamespacePrefix, true);
+	MathMLStream ms(osmath, mathmlNamespacePrefix);
 
 	// Output the MathML subtree.
 	// TeX transcription. Avoid MTag/ETag so that there are no extraneous spaces.
@@ -2442,7 +2442,7 @@ void InsetMathHull::docbook(XMLStream & xs, OutputParams const & runparams) cons
 		// First, generate the MathML expression. If there is an error in the generation, this block is not fully
 		// executed, and the formula is not output to the DocBook stream.
 		odocstringstream ostmp;
-		MathMLStream mstmp(ostmp, ms.xmlns(), ms.xmlMode());
+		MathMLStream mstmp(ostmp, ms.xmlns());
 		mathmlize(mstmp);
 
 		// Choose the display style for the formula, to be output as an attribute near the formula root.
diff --git a/src/mathed/InsetMathMacro.cpp b/src/mathed/InsetMathMacro.cpp
index 6a23abf..8204aaa 100644
--- a/src/mathed/InsetMathMacro.cpp
+++ b/src/mathed/InsetMathMacro.cpp
@@ -1303,7 +1303,7 @@ void InsetMathMacro::mathmlize(MathMLStream & ms) const
 	// macro_ is 0 if this is an unknown macro
 	LATTEST(d->macro_ || d->displayMode_ != DISPLAY_NORMAL);
 	if (d->macro_) {
-		docstring const xmlname = (ms.xmlMode()) ? d->macro_->xmlname() : d->macro_->htmlname();
+		docstring const xmlname = d->macro_->xmlname();
 		if (!xmlname.empty()) {
 			char const * type = d->macro_->MathMLtype();
 			ms << "<" << from_ascii(ms.namespacedTag(type)) << ">"
@@ -1325,7 +1325,7 @@ void InsetMathMacro::htmlize(HtmlStream & os) const
 	// macro_ is 0 if this is an unknown macro
 	LATTEST(d->macro_ || d->displayMode_ != DISPLAY_NORMAL);
 	if (d->macro_) {
-		docstring const xmlname = d->macro_->htmlname();
+		docstring const xmlname = d->macro_->xmlname();
 		if (!xmlname.empty()) {
 			os << ' ' << xmlname << ' ';
 			return;
diff --git a/src/mathed/InsetMathMatrix.cpp b/src/mathed/InsetMathMatrix.cpp
index 72d58d3..b3cbcdc 100644
--- a/src/mathed/InsetMathMatrix.cpp
+++ b/src/mathed/InsetMathMatrix.cpp
@@ -95,7 +95,7 @@ void InsetMathMatrix::mathematica(MathematicaStream & os) const
 void InsetMathMatrix::mathmlize(MathMLStream & ms) const
 {
 	ms << "<" << from_ascii(ms.namespacedTag("mo")) << " form='prefix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
-	   << convertDelimToXMLEscape(left_, ms.xmlMode())
+	   << convertDelimToXMLEscape(left_)
 	   << "</" << from_ascii(ms.namespacedTag("mo")) << ">"
 	   << MTag("mtable");
 	for (row_type row = 0; row < nrows(); ++row) {
@@ -114,7 +114,7 @@ void InsetMathMatrix::mathmlize(MathMLStream & ms) const
 	}
 	ms << ETag("mtable")
 	   << "<" << from_ascii(ms.namespacedTag("mo")) << " form='postfix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
-	   << convertDelimToXMLEscape(right_, ms.xmlMode())
+	   << convertDelimToXMLEscape(right_)
 	   << "</" << from_ascii(ms.namespacedTag("mo")) << ">";
 }
 
diff --git a/src/mathed/InsetMathRoot.cpp b/src/mathed/InsetMathRoot.cpp
index 6de085f..3ce50f7 100644
--- a/src/mathed/InsetMathRoot.cpp
+++ b/src/mathed/InsetMathRoot.cpp
@@ -231,7 +231,7 @@ void InsetMathRoot::htmlize(HtmlStream & os) const
 {
 	os << MTag("span", "class='root'")
 	   << MTag("sup") << cell(1) << ETag("sup")
-	   << from_ascii("√")
+	   << from_ascii("√")
 	   << MTag("span", "class='rootof'")	<< cell(0) << ETag("span")
 		 << ETag("span");
 }
diff --git a/src/mathed/InsetMathSpace.cpp b/src/mathed/InsetMathSpace.cpp
index f4c4d25..874012d 100644
--- a/src/mathed/InsetMathSpace.cpp
+++ b/src/mathed/InsetMathSpace.cpp
@@ -225,7 +225,7 @@ void InsetMathSpace::htmlize(HtmlStream & ms) const
 		ms << from_ascii(" ");
 		break;
 	case InsetSpaceParams::MEDIUM:
-		ms << from_ascii(" ");
+		ms << from_ascii(" ");
 		break;
 	case InsetSpaceParams::THICK:
 		ms << from_ascii(" ");
@@ -248,12 +248,12 @@ void InsetMathSpace::htmlize(HtmlStream & ms) const
 	case InsetSpaceParams::CUSTOM_PROTECTED: {
 		string l = length_.asHTMLString();
 		ms << MTag("span", "width='" + l + "'")
-		   << from_ascii(" ") << ETag("span");
+		   << from_ascii(" ") << ETag("span");
 		break;
 	}
 	case InsetSpaceParams::NORMAL:
 	case InsetSpaceParams::PROTECTED:
-		ms << from_ascii(" ");
+		ms << from_ascii(" ");
 		break;
 	default:
 		break;
diff --git a/src/mathed/InsetMathSqrt.cpp b/src/mathed/InsetMathSqrt.cpp
index 7cfe028..7a9db4a 100644
--- a/src/mathed/InsetMathSqrt.cpp
+++ b/src/mathed/InsetMathSqrt.cpp
@@ -107,7 +107,7 @@ void InsetMathSqrt::mathmlize(MathMLStream & ms) const
 void InsetMathSqrt::htmlize(HtmlStream & os) const
 {
 	os << MTag("span", "class='sqrt'")
-	   << from_ascii("√")
+	   << from_ascii("√")
 	   << MTag("span", "class='sqrtof'")	<< cell(0) << ETag("span")
 		 << ETag("span");
 }
diff --git a/src/mathed/InsetMathSymbol.cpp b/src/mathed/InsetMathSymbol.cpp
index 291dabb..10fb087 100644
--- a/src/mathed/InsetMathSymbol.cpp
+++ b/src/mathed/InsetMathSymbol.cpp
@@ -162,13 +162,11 @@ void InsetMathSymbol::mathmlize(MathMLStream & ms) const
 	// with MathMLtype.
 	docstring tag = from_ascii(ms.namespacedTag(sym_->MathMLtype()));
 	ms << '<' << tag << ">";
-	if ((ms.xmlMode() && sym_->xmlname == "x") || (!ms.xmlMode() && sym_->htmlname == "x"))
+	if (sym_->xmlname == "x")
 		// unknown so far
 		ms << name();
-	else if (ms.xmlMode())
-		ms << sym_->xmlname;
 	else
-		ms << sym_->htmlname;
+		ms << sym_->xmlname;
 	ms << "</" << tag << '>';
 }
 
@@ -180,13 +178,13 @@ void InsetMathSymbol::htmlize(HtmlStream & os, bool spacing) const
 	char const * type = sym_->MathMLtype();
 	bool op = (std::string(type) == "mo");
 
-	if (sym_->htmlname == "x")
+	if (sym_->xmlname == "x")
 		// unknown so far
 		os << ' ' << name() << ' ';
 	else if (op && spacing)
-		os << ' ' << sym_->htmlname << ' ';
+		os << ' ' << sym_->xmlname << ' ';
 	else
-		os << sym_->htmlname;
+		os << sym_->xmlname;
 }
 
 
diff --git a/src/mathed/InsetMathXArrow.cpp b/src/mathed/InsetMathXArrow.cpp
index cd36fe1..f9b215d 100644
--- a/src/mathed/InsetMathXArrow.cpp
+++ b/src/mathed/InsetMathXArrow.cpp
@@ -84,25 +84,6 @@ void InsetMathXArrow::normalize(NormalStream & os) const
 }
 
 
-static std::map<string, string> latex_to_html_entities = {
-		{"xleftarrow", "←"},
-		{"xrightarrow", "→"},
-		{"xhookleftarrow", "↩"},
-		{"xhookrightarrow", "↪"},
-		{"xLeftarrow", "⇐"},
-		{"xRightarrow", "⇒"},
-		{"xleftrightarrow", "↔"},
-		{"xLeftrightarrow", "⇔"},
-		{"xleftharpoondown", "↽"},
-		{"xleftharpoonup", "↼"},
-		{"xleftrightharpoons", "⇋"},
-		{"xrightharpoondown", "⇁"},
-		{"xrightharpoonup", "⇀"},
-		{"xrightleftharpoons", "⇌"},
-		{"xmapsto", "↦"},
-};
-
-
 static std::map<string, string> latex_to_xml_entities = {
 		{"xleftarrow", "&#x2190;"},
 		{"xrightarrow", "&#x2192;"},
@@ -122,17 +103,14 @@ static std::map<string, string> latex_to_xml_entities = {
 };
 
 
-docstring map_latex_to(docstring latex, bool xml = false)
+docstring map_latex_to(docstring latex)
 {
-	auto dict = (xml) ? latex_to_xml_entities : latex_to_html_entities;
-
-	auto mapping = dict.find(to_ascii(latex));
-	if (mapping != dict.end()) {
+	auto mapping = latex_to_xml_entities.find(to_ascii(latex));
+	if (mapping != latex_to_xml_entities.end()) {
 		return from_ascii(mapping->second);
 	} else {
-		std::string format = (xml) ? "XML" : "HTML";
-		lyxerr << "mathmlize " << format << " conversion for '" << latex << "' not implemented" << endl;
-		LASSERT(false, return from_ascii(dict["xrightarrow"]));
+		lyxerr << "mathmlize conversion for '" << latex << "' not implemented" << endl;
+		LASSERT(false, return from_ascii(latex_to_xml_entities["xrightarrow"]));
 		return docstring();
 	}
 }
@@ -140,7 +118,7 @@ docstring map_latex_to(docstring latex, bool xml = false)
 
 void InsetMathXArrow::mathmlize(MathMLStream & ms) const
 {
-	docstring arrow = map_latex_to(name_, ms.xmlMode());
+	docstring arrow = map_latex_to(name_);
 	ms << "<" << from_ascii(ms.namespacedTag("munderover")) << " accent='false' accentunder='false'>"
 	   << MTagInline("mo") << arrow << ETagInline("mo")
 	   << cell(1) << cell(0)
diff --git a/src/mathed/MacroTable.cpp b/src/mathed/MacroTable.cpp
index 1cc5a15..2793728 100644
--- a/src/mathed/MacroTable.cpp
+++ b/src/mathed/MacroTable.cpp
@@ -121,14 +121,6 @@ bool MacroData::hidden() const
 }
 
 
-docstring const MacroData::htmlname() const
-{
-	if (sym_)
-		return sym_->htmlname;
-	return docstring();
-}
-
-
 docstring const MacroData::xmlname() const
 {
 	if (sym_)
diff --git a/src/mathed/MacroTable.h b/src/mathed/MacroTable.h
index 77b306f..6c17d63 100644
--- a/src/mathed/MacroTable.h
+++ b/src/mathed/MacroTable.h
@@ -63,8 +63,6 @@ public:
 	///
 	bool hidden() const;
 	///
-	docstring const htmlname() const;
-	///
 	docstring const xmlname() const;
 	///
 	char const * MathMLtype() const;
diff --git a/src/mathed/MathFactory.cpp b/src/mathed/MathFactory.cpp
index 08f0b01..f16b623 100644
--- a/src/mathed/MathFactory.cpp
+++ b/src/mathed/MathFactory.cpp
@@ -188,11 +188,12 @@ void initSymbols()
 			// \def\macroname{definition} requires
 			// or
 			// \def\macroname{definition} extra htmlname xmlname requires
+			// TODO: remove htmlname
 			istringstream is(line);
 			string macro;
 			string required;
 			string extra;
-			string htmlname;
+			string htmlname; // Ignored. TODO: remove.
 			string xmlname;
 			bool hidden = false;
 			is >> setw(65536) >> macro >> required;
@@ -201,10 +202,10 @@ void initSymbols()
 				if (!(is >> required))
 					required = "";
 			} else
-				htmlname = xmlname = "";
+				xmlname = "";
 			MacroTable::iterator it = MacroTable::globalMacros().insert(
 					nullptr, from_utf8(macro));
-			if (!extra.empty() || !htmlname.empty() || !xmlname.empty() || !required.empty()) {
+			if (!extra.empty() || !xmlname.empty() || !required.empty()) {
 				MathWordList::iterator wit = theMathWordList.find(it->first);
 				if (wit != theMathWordList.end())
 					LYXERR(Debug::MATHED, "readSymbols: inset "
@@ -214,7 +215,6 @@ void initSymbols()
 					tmp.inset = "macro";
 					tmp.name = it->first;
 					tmp.extra = from_utf8(extra);
-					tmp.htmlname = from_utf8(htmlname);
 					tmp.xmlname = from_utf8(xmlname);
 					if (required == "hiddensymbol") {
 						required = "";
@@ -232,7 +232,6 @@ void initSymbols()
 			    << "  inset: macro"
 			    << "  draw: 0"
 			    << "  extra: " << extra
-			    << "  html: " << htmlname
 			    << "  xml: " << xmlname
 				<< "  requires: " << required
 				<< "  hidden: " << hidden << '\'');
@@ -245,7 +244,7 @@ void initSymbols()
 		is >> tmp.name >> help;
 		tmp.inset = to_ascii(help);
 		if (isFontName(tmp.inset)) {
-			is >> help >> fallbackid >> tmp.extra >> tmp.htmlname >> tmp.xmlname;
+			is >> help >> fallbackid >> tmp.extra >> tmp.xmlname;
 			docstring cid, dsp_cid;
 			idocstringstream is2(subst(help, '|', ' '));
 			is2 >> charid >> dsp_charid;
@@ -338,7 +337,6 @@ void initSymbols()
 			<< "  inset: " << tmp.inset
 			<< "  draw: " << int(tmp.draw.empty() ? 0 : tmp.draw[0])
 			<< "  extra: " << to_utf8(tmp.extra)
-			<< "  html: " << to_utf8(tmp.htmlname)
 			<< "  xml: " << to_utf8(tmp.xmlname)
 			<< "  requires: " << tmp.required
 			<< "  hidden: " << tmp.hidden << '\'');
diff --git a/src/mathed/MathParser.h b/src/mathed/MathParser.h
index 20403de..d69c78a 100644
--- a/src/mathed/MathParser.h
+++ b/src/mathed/MathParser.h
@@ -57,8 +57,6 @@ public:
 	docstring dsp_draw;
 	/// operator/..., fontname e
 	docstring extra;
-	/// how is this called as HTML entity in MathML?
-	docstring htmlname;
 	/// how is this called as XML entity in MathML?
 	docstring xmlname;
 	/// required LaTeXFeatures
diff --git a/src/mathed/MathStream.cpp b/src/mathed/MathStream.cpp
index a05e54a..4a006e4 100644
--- a/src/mathed/MathStream.cpp
+++ b/src/mathed/MathStream.cpp
@@ -288,8 +288,8 @@ TeXMathStream & operator<<(TeXMathStream & ws, unsigned int i)
 //////////////////////////////////////////////////////////////////////
 
 
-MathMLStream::MathMLStream(odocstream & os, std::string const & xmlns, bool xmlMode)
-	: os_(os), tab_(0), line_(0), in_text_(false), xmlns_(xmlns), xml_mode_(xmlMode)
+MathMLStream::MathMLStream(odocstream & os, std::string const & xmlns)
+	: os_(os), tab_(0), line_(0), in_text_(false), xmlns_(xmlns)
 {
 	if (in_text_)
 		font_math_style_ = TEXT_STYLE;
@@ -751,9 +751,8 @@ OctaveStream & operator<<(OctaveStream & os, string const & s)
 }
 
 
-docstring convertDelimToXMLEscape(docstring const & name, bool xmlmode)
+docstring convertDelimToXMLEscape(docstring const & name)
 {
-	// For the basic symbols, no difference between XML and HTML.
 	if (name.size() == 1) {
 		char_type const c = name[0];
 		if (c == '<')
@@ -772,8 +771,7 @@ docstring convertDelimToXMLEscape(docstring const & name, bool xmlmode)
 	MathWordList const & words = mathedWordList();
 	MathWordList::const_iterator it = words.find(name);
 	if (it != words.end()) {
-		// Only difference between XML and HTML, based on the contents read by MathFactory.
-		docstring const escape = xmlmode ? it->second.xmlname : it->second.htmlname;
+		docstring const escape = it->second.xmlname;
 		return escape;
 	}
 	LYXERR0("Unable to find `" << name <<"' in the mathWordList.");
diff --git a/src/mathed/MathStream.h b/src/mathed/MathStream.h
index 6d0399e..ca75431 100644
--- a/src/mathed/MathStream.h
+++ b/src/mathed/MathStream.h
@@ -377,7 +377,7 @@ class MathExportException : public std::exception {};
 class MathMLStream {
 public:
 	/// Builds a stream proxy for os; the MathML namespace is given by xmlns (supposed to be already defined elsewhere in the document).
-	explicit MathMLStream(odocstream & os, std::string const & xmlns = "", bool xmlMode = false);
+	explicit MathMLStream(odocstream & os, std::string const & xmlns = "");
 	///
 	void cr();
 	///
@@ -398,8 +398,6 @@ public:
 	bool inText() const { return in_text_; }
 	///
 	std::string xmlns() const { return xmlns_; }
-	///
-	bool xmlMode() const { return xml_mode_; }
 	/// Returns the tag name prefixed by the name space if needed.
 	std::string namespacedTag(std::string const & tag) const {
 		return (xmlns().empty() ? "" : xmlns() + ":") + tag;
@@ -423,8 +421,6 @@ private:
 	odocstringstream deferred_;
 	///
 	std::string xmlns_;
-	///
-	bool xml_mode_;
 	/// The only important part of a FontInfo object.
 	MathStyle font_math_style_;
 	///
@@ -699,7 +695,7 @@ OctaveStream & operator<<(OctaveStream &, char);
 OctaveStream & operator<<(OctaveStream &, int);
 
 
-docstring convertDelimToXMLEscape(docstring const & name, bool xmlmode);
+docstring convertDelimToXMLEscape(docstring const & name);
 
 } // namespace lyx
 


More information about the lyx-cvs mailing list