X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathChar.cpp;h=2e62ffcd6073d8732edcada6e45e50c60fbf68c7;hb=f6d505c1ee494ab0d30eebba86082c86a915e1df;hp=7949c230991a1ea4de5310d8fefeca36103984cd;hpb=13b88d6166c24666007768672cf78fb9855db797;p=lyx.git diff --git a/src/mathed/InsetMathChar.cpp b/src/mathed/InsetMathChar.cpp index 7949c23099..2e62ffcd60 100644 --- a/src/mathed/InsetMathChar.cpp +++ b/src/mathed/InsetMathChar.cpp @@ -140,7 +140,7 @@ void InsetMathChar::write(WriteStream & os) const void InsetMathChar::validate(LaTeXFeatures & features) const { - if (char_ >= 0x80) + if (!isASCII(char_)) encodings.validate(char_, features, true); } @@ -167,21 +167,75 @@ void InsetMathChar::octave(OctaveStream & os) const // Worst case: We get bad spacing, or bad italics. void InsetMathChar::mathmlize(MathStream & ms) const { + std::string entity; switch (char_) { - case '<': ms << "<"; return; - case '>': ms << ">"; return; - case '&': ms << "&"; return; + 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 << "" << from_ascii(entity) << ""; + return; + } + char const * type = - (isalpha(char_) || Encodings::isMathAlpha(char_)) + (isAlphaASCII(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_) << ""; } +void InsetMathChar::htmlize(HtmlStream & ms) const +{ + std::string entity; + switch (char_) { + case '<': entity = "<"; break; + case '>': entity = ">"; break; + case '&': entity = "&"; break; + case ' ': entity = " "; break; + default: break; + } + + bool have_entity = !entity.empty(); + + if (ms.inText()) { + if (have_entity) + ms << from_ascii(entity); + else + ms.os().put(char_); + return; + } + + if (have_entity) { + // an operator, so give some space + ms << ' ' << from_ascii(entity) << ' '; + return; + } + + if (isAlphaASCII(char_) || Encodings::isMathAlpha(char_)) + // we don't use MTag and ETag because we do not want the spacing + ms << MTag("i") << char_type(char_) << ETag("i"); + else + // an operator, so give some space + ms << " " << char_type(char_) << " "; +} + + bool InsetMathChar::isRelOp() const { return char_ == '=' || char_ == '<' || char_ == '>';