// We have a bit of a problem here. MathML wants to know whether the // character represents an "identifier" or an "operator", and we have // no general way of telling. So we shall guess: If it's alpha or // mathalpha, then we'll treat it as an identifier, otherwise as an // operator. // Worst case: We get bad spacing, or bad italics. void InsetMathChar::mathmlize(MathStream & ms) const { std::string entity; switch (char_) { case '<': entity = "<"; break; case '>': entity = ">"; break; case '&': entity = "&"; break; case ' ': { ms << from_ascii(" "); return; } default: break; } if (ms.inText()) { if (entity.empty()) ms.os().put(char_); else ms << from_ascii(entity); return; } if (!entity.empty()) { ms << "<mo>" << from_ascii(entity) << "</mo>"; return; } char const * type = (isalpha(char_) || Encodings::isMathAlpha(char_)) ? "mi" : "mo"; // we don't use MTag and ETag because we do not want the spacing ms << "<" << type << ">" << char_type(char_) << "</" << type << ">"; }
void InsetMathSpecialChar::mathmlize(MathStream & ms) const { switch (char_) { case '&': ms << "&"; break; default: ms.os().put(char_); break; } }