X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathChar.cpp;h=2e62ffcd6073d8732edcada6e45e50c60fbf68c7;hb=f6d505c1ee494ab0d30eebba86082c86a915e1df;hp=d4df4c300cc83266cc7253dbfa3f1bd8ea8ab258;hpb=ff7d0d5c6ea0d94be2c3c39bec3f0671410b851f;p=lyx.git
diff --git a/src/mathed/InsetMathChar.cpp b/src/mathed/InsetMathChar.cpp
index d4df4c300c..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,18 +167,72 @@ 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 << "<"; break;
- case '>': ms << ">"; break;
- case '&': ms << "&"; break;
+ 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 << ">";
+ ms << "<" << type << ">" << char_type(char_) << "" << type << ">";
+}
+
+
+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_) << " ";
}