Introduce a return value for mathmlize(). We will need this to be able

to defer labels.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@32684 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2009-12-31 03:50:12 +00:00
parent 28e9474f7a
commit 8a0134cc8c
59 changed files with 197 additions and 135 deletions

View File

@ -52,37 +52,36 @@ These insets work but still need work:
Math Math
We have a fair bit of math now working via MathML output, but there are still some We have a fair bit of math now working via MathML output, but there are still some
isues, and not all the insets work. Here are the ones I know still need work: isues, and not all the insets work. Here are the ones I know still need work:
- AMSArray - AMSArray
- Array - Array
- Big: Not sure if we can actually do anything here. Probably they should - Big: Not sure if we can actually do anything here. Probably they should
just be treated as delimiters. just be treated as delimiters.
- BoldSymbol: Should be easy. - BoldSymbol: Should be easy.
- Box - Box
- Cases - Cases
- Diff: Code exists, but I do not know if it is right. - Diff: Code exists, but I do not know if it is right.
- Font - Font
- Binom (in Frac): None of these tags exist in MathML 2.0. We'll - Binom (in Frac): None of these tags exist in MathML 2.0. We'll
just output a fraction with delimiters. just output a fraction with delimiters.
- Lefteqn - Lefteqn
- MBox: Use <mtext>. - MBox: Use <mtext>.
- Overset: Use <mover>. - Overset: Use <mover>.
- Par? - Par?
- Phantom: There is some support for this in MathML.... - Phantom: There is some support for this in MathML....
- Ref: Probably needs to be deferred somehow, which is a hassle, because it - Ref: Needs to be deferred.
means the whole MathML output business needs a new argument. - Size: Unclear if we want to do anything here, though we could. See
- Size: Unclear if we want to do anything here, though we could. See lib/symbols for the commands supported, of course.
lib/symbols for the commands supported, of course. - Space: Needs checking.
- Space: Needs checking. - SpecialChar: Needs checking.
- SpecialChar: Needs checking. - Split
- Split - Stackrel: Use <mover>, probably.
- Stackrel: Use <mover>, probably. - Substack: This is a stack of however many cells, all in a smaller style.
- Substack: This is a stack of however many cells, all in a smaller style. Probably do something with <mover>, again.
Probably do something with <mover>, again. - Tabular: This is more or less a text-like table in math. Probably output it
- Tabular: This is more or less a text-like table in math. Probably output it as a table, but set the font.
as a table, but set the font. - Underset: Use <munder>.
- Underset: Use <munder>. - XArrow: Contents above and below an arrow. Use...?
- XArrow: Contents above and below an arrow. Use...? - XYMatrix: Not sure how this differs from ordinary ones.
- XYMatrix: Not sure how this differs from ordinary ones.
These insets do not work and are not yet scheduled to work: These insets do not work and are not yet scheduled to work:

View File

@ -120,12 +120,13 @@ void InsetMath::mathematica(MathematicaStream & os) const
} }
void InsetMath::mathmlize(MathStream & os) const docstring InsetMath::mathmlize(MathStream & os) const
{ {
os << MTag("mi"); os << MTag("mi");
NormalStream ns(os.os()); NormalStream ns(os.os());
normalize(ns); normalize(ns);
os << ETag("mi"); os << ETag("mi");
return docstring();
} }

View File

@ -187,7 +187,7 @@ public:
/// write content as something readable by Mathematica /// write content as something readable by Mathematica
virtual void mathematica(MathematicaStream &) const; virtual void mathematica(MathematicaStream &) const;
/// write content as something resembling MathML /// write content as something resembling MathML
virtual void mathmlize(MathStream &) const; virtual docstring mathmlize(MathStream &) const;
/// write content as something readable by Octave /// write content as something readable by Octave
virtual void octave(OctaveStream &) const; virtual void octave(OctaveStream &) const;

View File

@ -52,7 +52,7 @@ void InsetMathBox::normalize(NormalStream & os) const
} }
void InsetMathBox::mathmlize(MathStream & ms) const docstring InsetMathBox::mathmlize(MathStream & ms) const
{ {
// FIXME This doesn't actually work yet. We need to be able to signal // FIXME This doesn't actually work yet. We need to be able to signal
// that we are in text mode and then just call ms << cell(0). So we // that we are in text mode and then just call ms << cell(0). So we
@ -60,6 +60,7 @@ void InsetMathBox::mathmlize(MathStream & ms) const
ms << MTag("mtext"); ms << MTag("mtext");
ms.os() << cell(0); ms.os() << cell(0);
ms << ETag("mtext"); ms << ETag("mtext");
return docstring();
} }

View File

@ -35,7 +35,7 @@ public:
/// ///
void normalize(NormalStream & ns) const; void normalize(NormalStream & ns) const;
/// ///
void mathmlize(MathStream & ms) const; docstring mathmlize(MathStream & ms) const;
/// ///
void infoize(odocstream & os) const; void infoize(odocstream & os) const;
/// ///
@ -66,7 +66,7 @@ public:
/// write normalized content /// write normalized content
void normalize(NormalStream & ns) const; void normalize(NormalStream & ns) const;
/// ///
//void mathmlize(MathStream & ms) const; //docstring mathmlize(MathStream & ms) const;
/// ///
void infoize(odocstream & os) const; void infoize(odocstream & os) const;
private: private:
@ -89,7 +89,7 @@ public:
/// write normalized content /// write normalized content
void normalize(NormalStream & ns) const; void normalize(NormalStream & ns) const;
/// ///
//void mathmlize(MathStream & ms) const; //docstring mathmlize(MathStream & ms) const;
/// ///
mode_type currentMode() const { return TEXT_MODE; } mode_type currentMode() const { return TEXT_MODE; }
/// ///
@ -116,7 +116,7 @@ public:
/// ///
void write(WriteStream & os) const; void write(WriteStream & os) const;
/// ///
//void mathmlize(MathStream & ms) const; //docstring mathmlize(MathStream & ms) const;
/// write normalized content /// write normalized content
void normalize(NormalStream & ns) const; void normalize(NormalStream & ns) const;
/// ///

View File

@ -13,6 +13,7 @@
#include "InsetMathBrace.h" #include "InsetMathBrace.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathStream.h" #include "MathStream.h"
#include "MathSupport.h" #include "MathSupport.h"
#include "MetricsInfo.h" #include "MetricsInfo.h"
@ -94,9 +95,12 @@ void InsetMathBrace::octave(OctaveStream & os) const
} }
void InsetMathBrace::mathmlize(MathStream & os) const docstring InsetMathBrace::mathmlize(MathStream & os) const
{ {
os << MTag("mrow") << cell(0) << ETag("mrow"); os << MTag("mrow");
docstring const rv = lyx::mathmlize(cell(0), os);
os << ETag("mrow");
return rv;
} }

View File

@ -46,7 +46,7 @@ public:
/// ///
void octave(OctaveStream &) const; void octave(OctaveStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void infoize(odocstream & os) const; void infoize(odocstream & os) const;
/// ///

View File

@ -165,12 +165,12 @@ void InsetMathChar::octave(OctaveStream & os) const
// mathalpha, then we'll treat it as an identifier, otherwise as an // mathalpha, then we'll treat it as an identifier, otherwise as an
// operator. // operator.
// Worst case: We get bad spacing, or bad italics. // Worst case: We get bad spacing, or bad italics.
void InsetMathChar::mathmlize(MathStream & ms) const docstring InsetMathChar::mathmlize(MathStream & ms) const
{ {
switch (char_) { switch (char_) {
case '<': ms << "<mo>&lt;</mo>"; return; case '<': ms << "<mo>&lt;</mo>"; return docstring();
case '>': ms << "<mo>&gt;</mo>"; return; case '>': ms << "<mo>&gt;</mo>"; return docstring();
case '&': ms << "<mo>&amp;</mo>"; return; case '&': ms << "<mo>&amp;</mo>"; return docstring();
default: break; default: break;
} }
@ -179,6 +179,7 @@ void InsetMathChar::mathmlize(MathStream & ms) const
? "mi" : "mo"; ? "mi" : "mo";
// we don't use MTag and ETag because we do not want the spacing // we don't use MTag and ETag because we do not want the spacing
ms << "<" << type << ">" << char(char_) << "</" << type << ">"; ms << "<" << type << ">" << char(char_) << "</" << type << ">";
return docstring();
} }

View File

@ -41,7 +41,7 @@ public:
/// ///
void octave(OctaveStream & os) const; void octave(OctaveStream & os) const;
/// ///
void mathmlize(MathStream & ms) const; docstring mathmlize(MathStream & ms) const;
/// identifies Charinsets /// identifies Charinsets
InsetMathChar const * asCharInset() const { return this; } InsetMathChar const * asCharInset() const { return this; }
/// ///

View File

@ -86,9 +86,10 @@ void InsetMathComment::octave(OctaveStream &) const
{} {}
void InsetMathComment::mathmlize(MathStream & os) const docstring InsetMathComment::mathmlize(MathStream & os) const
{ {
os << MTag("comment") << cell(0) << cell(1) << ETag("comment"); os << MTag("comment") << cell(0) << cell(1) << ETag("comment");
return docstring();
} }

View File

@ -44,7 +44,7 @@ public:
/// ///
void octave(OctaveStream &) const; void octave(OctaveStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void infoize(odocstream & os) const; void infoize(odocstream & os) const;
/// ///

View File

@ -14,6 +14,7 @@
#include "InsetMathDecoration.h" #include "InsetMathDecoration.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathParser.h" #include "MathParser.h"
#include "MathSupport.h" #include "MathSupport.h"
#include "MathStream.h" #include "MathStream.h"
@ -205,16 +206,18 @@ namespace {
} }
} }
void InsetMathDecoration::mathmlize(MathStream & os) const docstring InsetMathDecoration::mathmlize(MathStream & os) const
{ {
Translator const & t = translator(); Translator const & t = translator();
Translator::const_iterator cur = t.find(to_utf8(key_->name)); Translator::const_iterator cur = t.find(to_utf8(key_->name));
LASSERT(cur != t.end(), return); LASSERT(cur != t.end(), return docstring());
char const * const outag = cur->second.over ? "mover" : "munder"; char const * const outag = cur->second.over ? "mover" : "munder";
os << MTag(outag) os << MTag(outag) << MTag("mrow");
<< MTag("mrow") << cell(0) << ETag("mrow") docstring const rv = lyx::mathmlize(cell(0), os);
os << ETag("mrow")
<< from_ascii("<mo stretchy=\"true\">" + cur->second.tag + "</mo>") << from_ascii("<mo stretchy=\"true\">" + cur->second.tag + "</mo>")
<< ETag(outag); << ETag(outag);
return rv;
} }

View File

@ -42,7 +42,7 @@ public:
/// ///
InsetCode lyxCode() const { return MATH_DECORATION_CODE; } InsetCode lyxCode() const { return MATH_DECORATION_CODE; }
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
private: private:
virtual Inset * clone() const; virtual Inset * clone() const;

View File

@ -14,6 +14,7 @@
#include "InsetMathDelim.h" #include "InsetMathDelim.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathStream.h" #include "MathStream.h"
#include "MathSupport.h" #include "MathSupport.h"
#include "MetricsInfo.h" #include "MetricsInfo.h"
@ -161,10 +162,12 @@ void InsetMathDelim::mathematica(MathematicaStream & os) const
} }
void InsetMathDelim::mathmlize(MathStream & os) const docstring InsetMathDelim::mathmlize(MathStream & os) const
{ {
os << "<mo form='prefix' fence='true' stretchy='true' symmetric='true'>" << left_ << "</mo>" os << "<mo form='prefix' fence='true' stretchy='true' symmetric='true'>" << left_ << "</mo>";
<< cell(0) << "<mo form='postfix' fence='true' stretchy='true' symmetric='true'>" << right_ << "</mo>"; docstring const rv = lyx::mathmlize(cell(0),os);
os << "<mo form='postfix' fence='true' stretchy='true' symmetric='true'>" << right_ << "</mo>";
return rv;
} }

View File

@ -56,7 +56,7 @@ public:
/// ///
void mathematica(MathematicaStream &) const; void mathematica(MathematicaStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void octave(OctaveStream &) const; void octave(OctaveStream &) const;
/// ///

View File

@ -12,6 +12,7 @@
#include "InsetMathDiff.h" #include "InsetMathDiff.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathStream.h" #include "MathStream.h"
#include "support/debug.h" #include "support/debug.h"
@ -95,15 +96,17 @@ void InsetMathDiff::mathematica(MathematicaStream & os) const
} }
void InsetMathDiff::mathmlize(MathStream & os) const docstring InsetMathDiff::mathmlize(MathStream & os) const
{ {
os << "diff("; os << "diff(";
docstring rv;
for (idx_type idx = 0; idx < nargs(); ++idx) { for (idx_type idx = 0; idx < nargs(); ++idx) {
if (idx != 0) if (idx != 0)
os << ','; os << ',';
os << cell(idx); rv += lyx::mathmlize(cell(idx), os);
} }
os << ')'; os << ')';
return rv;
} }

View File

@ -39,7 +39,7 @@ public:
/// ///
void mathematica(MathematicaStream &) const; void mathematica(MathematicaStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void maxima(MaximaStream &) const; void maxima(MaximaStream &) const;
/// ///

View File

@ -85,7 +85,7 @@ void InsetMathDots::validate(LaTeXFeatures & features) const
} }
void InsetMathDots::mathmlize(MathStream & os) const docstring InsetMathDots::mathmlize(MathStream & os) const
{ {
// which symbols we support is decided by what is listed in // which symbols we support is decided by what is listed in
// lib/symbols as generating a dots inset // lib/symbols as generating a dots inset
@ -106,6 +106,7 @@ void InsetMathDots::mathmlize(MathStream & os) const
else else
LASSERT(false, ent = "&hellip;"); LASSERT(false, ent = "&hellip;");
os << MTag("mi") << from_ascii(ent) << ETag("mi"); os << MTag("mi") << from_ascii(ent) << ETag("mi");
return docstring();
} }
} // namespace lyx } // namespace lyx

View File

@ -35,7 +35,7 @@ public:
/// ///
InsetCode lyxCode() const { return MATH_DOTS_CODE; } InsetCode lyxCode() const { return MATH_DOTS_CODE; }
/// ///
void mathmlize(MathStream & os) const; docstring mathmlize(MathStream & os) const;
protected: protected:
/// cache for the thing's height /// cache for the thing's height
mutable int dh_; mutable int dh_;

View File

@ -13,8 +13,9 @@
#include "InsetMathEnsureMath.h" #include "InsetMathEnsureMath.h"
#include "MathStream.h" #include "MathExtern.h"
#include "MathData.h" #include "MathData.h"
#include "MathStream.h"
#include <ostream> #include <ostream>
@ -67,9 +68,9 @@ void InsetMathEnsureMath::write(WriteStream & os) const
} }
void InsetMathEnsureMath::mathmlize(MathStream & os) const docstring InsetMathEnsureMath::mathmlize(MathStream & os) const
{ {
os << cell(0); return lyx::mathmlize(cell(0), os);
} }

View File

@ -36,7 +36,7 @@ public:
/// ///
void write(WriteStream & os) const; void write(WriteStream & os) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void infoize(odocstream & os) const; void infoize(odocstream & os) const;
/// ///

View File

@ -13,6 +13,7 @@
#include "InsetMathExFunc.h" #include "InsetMathExFunc.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathStream.h" #include "MathStream.h"
#include "MathSupport.h" #include "MathSupport.h"
#include "MetricsInfo.h" #include "MetricsInfo.h"
@ -122,10 +123,10 @@ void InsetMathExFunc::mathematica(MathematicaStream & os) const
} }
void InsetMathExFunc::mathmlize(MathStream & os) const docstring InsetMathExFunc::mathmlize(MathStream & os) const
{ {
os << "<mi>" << name_ << "</mi><mo>&af;</mo>"; os << "<mi>" << name_ << "</mi><mo>&af;</mo>";
os << cell(0); return lyx::mathmlize(cell(0), os);
} }

View File

@ -43,7 +43,7 @@ public:
/// ///
void mathematica(MathematicaStream &) const; void mathematica(MathematicaStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void octave(OctaveStream &) const; void octave(OctaveStream &) const;
/// ///

View File

@ -12,6 +12,7 @@
#include "InsetMathExInt.h" #include "InsetMathExInt.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathStream.h" #include "MathStream.h"
#include "MathStream.h" #include "MathStream.h"
#include "InsetMathSymbol.h" #include "InsetMathSymbol.h"
@ -122,7 +123,7 @@ void InsetMathExInt::mathematica(MathematicaStream & os) const
} }
void InsetMathExInt::mathmlize(MathStream & os) const docstring InsetMathExInt::mathmlize(MathStream & os) const
{ {
// At the moment, we are not extracting sums and the like for MathML. // At the moment, we are not extracting sums and the like for MathML.
// If we should decide to do so later, then we'll need to re-merge // If we should decide to do so later, then we'll need to re-merge
@ -150,9 +151,11 @@ void InsetMathExInt::mathmlize(MathStream & os) const
os << ETag("msub"); os << ETag("msub");
else if (upper) else if (upper)
os << ETag("msup"); os << ETag("msup");
os << cell(0) << "<mo> &InvisibleTimes; </mo>" docstring rv = lyx::mathmlize(cell(0), os);
os << "<mo> &InvisibleTimes; </mo>"
<< MTag("mrow") << "<mo> &DifferentialD; </mo>" << MTag("mrow") << "<mo> &DifferentialD; </mo>"
<< cell(1) << ETag("mrow"); << cell(1) << ETag("mrow");
return rv;
} }

View File

@ -52,7 +52,7 @@ public:
/// ///
void mathematica(MathematicaStream &) const; void mathematica(MathematicaStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void write(WriteStream & os) const; void write(WriteStream & os) const;
/// ///

View File

@ -17,6 +17,7 @@
#include "Cursor.h" #include "Cursor.h"
#include "LaTeXFeatures.h" #include "LaTeXFeatures.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathStream.h" #include "MathStream.h"
#include "MathSupport.h" #include "MathSupport.h"
#include "MetricsInfo.h" #include "MetricsInfo.h"
@ -384,12 +385,14 @@ void InsetMathFrac::octave(OctaveStream & os) const
} }
void InsetMathFrac::mathmlize(MathStream & os) const docstring InsetMathFrac::mathmlize(MathStream & os) const
{ {
os << MTag("mfrac") os << MTag("mfrac") << MTag("mrow");
<< MTag("mrow") << cell(0) << ETag("mrow") docstring rv = lyx::mathmlize(cell(0), os);
<< MTag("mrow") << cell(1) << ETag("mrow") os << ETag("mrow") << MTag("mrow");
<< ETag("mfrac"); rv += lyx::mathmlize(cell(1), os);
os << ETag("mrow") << ETag("mfrac");
return rv;
} }
@ -533,8 +536,9 @@ void InsetMathBinom::normalize(NormalStream & os) const
} }
void InsetMathBinom::mathmlize(MathStream & os) const docstring InsetMathBinom::mathmlize(MathStream & os) const
{ {
// FIXME This all needs fixing
switch (kind_) { switch (kind_) {
case BINOM: case BINOM:
os << MTag("mbinom") << cell(0) << cell(1) << ETag("mbinom"); os << MTag("mbinom") << cell(0) << cell(1) << ETag("mbinom");
@ -547,6 +551,7 @@ void InsetMathBinom::mathmlize(MathStream & os) const
os << MTag("mdbinom") << cell(0) << cell(1) << ETag("mdbinom"); os << MTag("mdbinom") << cell(0) << cell(1) << ETag("mdbinom");
break; break;
} }
return docstring();
} }

View File

@ -82,7 +82,7 @@ public:
/// ///
void octave(OctaveStream &) const; void octave(OctaveStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void validate(LaTeXFeatures & features) const; void validate(LaTeXFeatures & features) const;
public: public:
@ -121,7 +121,7 @@ public:
/// ///
bool extraBraces() const; bool extraBraces() const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void validate(LaTeXFeatures & features) const; void validate(LaTeXFeatures & features) const;
/// ///

View File

@ -14,6 +14,7 @@
#include "InsetMathGrid.h" #include "InsetMathGrid.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathParser.h" #include "MathParser.h"
#include "MathStream.h" #include "MathStream.h"
#include "MetricsInfo.h" #include "MetricsInfo.h"
@ -967,19 +968,21 @@ void InsetMathGrid::normalize(NormalStream & os) const
} }
void InsetMathGrid::mathmlize(MathStream & os) const docstring InsetMathGrid::mathmlize(MathStream & os) const
{ {
bool const havetable = nrows() > 1; bool const havetable = nrows() > 1;
if (havetable) if (havetable)
os << MTag("mtable"); os << MTag("mtable");
docstring rv;
for (row_type row = 0; row < nrows(); ++row) { for (row_type row = 0; row < nrows(); ++row) {
os << MTag("mrow"); os << MTag("mrow");
for (col_type col = 0; col < ncols(); ++col) for (col_type col = 0; col < ncols(); ++col)
os << cell(index(row, col)); rv += lyx::mathmlize(cell(index(row, col)), os);
os << ETag("mrow"); os << ETag("mrow");
} }
if (havetable) if (havetable)
os << ETag("mtable"); os << ETag("mtable");
return rv;
} }

View File

@ -219,7 +219,7 @@ public:
/// ///
//void maple(MapleStream &) const; //void maple(MapleStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
//void octave(OctaveStream &) const; //void octave(OctaveStream &) const;

View File

@ -1092,9 +1092,9 @@ void InsetMathHull::normalize(NormalStream & os) const
} }
void InsetMathHull::mathmlize(MathStream & os) const docstring InsetMathHull::mathmlize(MathStream & os) const
{ {
InsetMathGrid::mathmlize(os); return InsetMathGrid::mathmlize(os);
} }
@ -1782,9 +1782,9 @@ docstring InsetMathHull::xhtml(XHTMLStream & xs, OutputParams const &) const
xs << StartTag("math", xs << StartTag("math",
"display=\"block\" xmlns=\"http://www.w3.org/1998/Math/MathML\"", true); "display=\"block\" xmlns=\"http://www.w3.org/1998/Math/MathML\"", true);
MathStream ms(xs.os()); MathStream ms(xs.os());
InsetMathGrid::mathmlize(ms); docstring const rv = InsetMathGrid::mathmlize(ms);
xs << EndTag("math"); xs << EndTag("math");
return docstring(); return rv;
} }

View File

@ -102,7 +102,7 @@ public:
/// ///
void write(WriteStream & os) const; void write(WriteStream & os) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void normalize(NormalStream &) const; void normalize(NormalStream &) const;
/// ///

View File

@ -73,4 +73,10 @@ void InsetMathKern::normalize(NormalStream & os) const
} }
docstring InsetMathKern::mathmlize(MathStream &) const
{
return docstring();
}
} // namespace lyx } // namespace lyx

View File

@ -39,7 +39,7 @@ public:
/// ///
void normalize(NormalStream & ns) const; void normalize(NormalStream & ns) const;
/// ///
void mathmlize(MathStream &) const { } docstring mathmlize(MathStream &) const;
/// ///
InsetCode lyxCode() const { return MATH_KERN_CODE; } InsetCode lyxCode() const { return MATH_KERN_CODE; }

View File

@ -12,6 +12,7 @@
#include "InsetMathLim.h" #include "InsetMathLim.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathStream.h" #include "MathStream.h"
#include "support/debug.h" #include "support/debug.h"
@ -71,13 +72,16 @@ void InsetMathLim::mathematica(MathematicaStream & os) const
} }
void InsetMathLim::mathmlize(MathStream & os) const docstring InsetMathLim::mathmlize(MathStream & os) const
{ {
// FIXME XHTML We need a form of MTag that takes attributes. // FIXME XHTML We need a form of MTag that takes attributes.
os << "<munder>" os << "<munder>"
<< "<mo form='prefix'>" << "lim" << "</mo>" << "<mo form='prefix'>" << "lim" << "</mo>"
<< "<mrow>" << cell(1) << "<mo>&rarr;</mo>" << cell(2) << "</mrow></munder>" << "<mrow>" << cell(1) << "<mo>&rarr;</mo>" << cell(2)
<< "<mo>(</mo>" << cell(0) << "<mo>)</mo>" ; << "</mrow></munder>" << "<mo>(</mo>";
docstring const rv = lyx::mathmlize(cell(0), os);
os << "<mo>)</mo>";
return rv;
} }

View File

@ -40,7 +40,7 @@ public:
/// ///
void mathematica(MathematicaStream &) const; void mathematica(MathematicaStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void write(WriteStream & os) const; void write(WriteStream & os) const;
/// ///

View File

@ -12,6 +12,7 @@
#include "InsetMathMatrix.h" #include "InsetMathMatrix.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathStream.h" #include "MathStream.h"
@ -89,20 +90,25 @@ void InsetMathMatrix::mathematica(MathematicaStream & os) const
} }
void InsetMathMatrix::mathmlize(MathStream & os) const docstring InsetMathMatrix::mathmlize(MathStream & os) const
{ {
os << "<mo form='prefix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>" os << "<mo form='prefix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
<< left_ << "</mo>"; << left_ << "</mo>";
os << MTag("mtable"); os << MTag("mtable");
docstring rv;
for (row_type row = 0; row < nrows(); ++row) { for (row_type row = 0; row < nrows(); ++row) {
os << MTag("mtr"); os << MTag("mtr");
for (col_type col = 0; col < ncols(); ++col) for (col_type col = 0; col < ncols(); ++col) {
os << MTag("mtd") << cell(index(row, col)) << ETag("mtd"); os << MTag("mtd");
rv += lyx::mathmlize(cell(index(row, col)), os);
os << ETag("mtd");
}
os << ETag("mtr"); os << ETag("mtr");
} }
os << ETag("mtable"); os << ETag("mtable");
os << "<mo form='postfix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>" os << "<mo form='postfix' fence='true' stretchy='true' symmetric='true' lspace='thinmathspace'>"
<< right_ << "</mo>"; << right_ << "</mo>";
return rv;
} }

View File

@ -40,7 +40,7 @@ public:
/// ///
void mathematica(MathematicaStream &) const; void mathematica(MathematicaStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void octave(OctaveStream &) const; void octave(OctaveStream &) const;
/// ///

View File

@ -67,9 +67,10 @@ void InsetMathNumber::octave(OctaveStream & os) const
} }
void InsetMathNumber::mathmlize(MathStream & os) const docstring InsetMathNumber::mathmlize(MathStream & os) const
{ {
os << "<mn> " << str_ << " </mn>"; os << "<mn> " << str_ << " </mn>";
return docstring();
} }

View File

@ -43,7 +43,7 @@ public:
/// ///
void mathematica(MathematicaStream &) const; void mathematica(MathematicaStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void write(WriteStream & os) const; void write(WriteStream & os) const;
/// ///

View File

@ -13,6 +13,7 @@
#include "InsetMathRoot.h" #include "InsetMathRoot.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathStream.h" #include "MathStream.h"
#include "Cursor.h" #include "Cursor.h"
@ -112,9 +113,13 @@ void InsetMathRoot::octave(OctaveStream & os) const
} }
void InsetMathRoot::mathmlize(MathStream & os) const docstring InsetMathRoot::mathmlize(MathStream & os) const
{ {
os << MTag("mroot") << cell(1) << cell(0) << ETag("mroot"); os << MTag("mroot");
docstring rv = lyx::mathmlize(cell(1), os);
rv += lyx::mathmlize(cell(0), os);
os << ETag("mroot");
return rv;
} }

View File

@ -36,7 +36,7 @@ public:
/// ///
void normalize(NormalStream &) const; void normalize(NormalStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void maple(MapleStream &) const; void maple(MapleStream &) const;
/// ///

View File

@ -18,6 +18,7 @@
#include "InsetMathScript.h" #include "InsetMathScript.h"
#include "InsetMathSymbol.h" #include "InsetMathSymbol.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathStream.h" #include "MathStream.h"
#include "MathSupport.h" #include "MathSupport.h"
@ -616,7 +617,7 @@ void InsetMathScript::mathematica(MathematicaStream & os) const
// It may be worth trying to output munder, mover, and munderover // It may be worth trying to output munder, mover, and munderover
// in certain cases, e.g., for display formulas. But then we would // in certain cases, e.g., for display formulas. But then we would
// need to know if we're in a display formula. // need to know if we're in a display formula.
void InsetMathScript::mathmlize(MathStream & os) const docstring InsetMathScript::mathmlize(MathStream & os) const
{ {
bool d = hasDown() && down().size(); bool d = hasDown() && down().size();
bool u = hasUp() && up().size(); bool u = hasUp() && up().size();
@ -628,9 +629,12 @@ void InsetMathScript::mathmlize(MathStream & os) const
else if (d) else if (d)
os << MTag("msub"); os << MTag("msub");
if (nuc().size()) docstring rv;
os << MTag("mrow") << nuc() << ETag("mrow"); if (nuc().size()) {
else os << MTag("mrow");
rv = lyx::mathmlize(nuc(), os);
os << ETag("mrow");
} else
os << "<mrow />"; os << "<mrow />";
if (u && d) if (u && d)
@ -641,6 +645,7 @@ void InsetMathScript::mathmlize(MathStream & os) const
os << MTag("mrow") << up() << ETag("mrow") << ETag("msup"); os << MTag("mrow") << up() << ETag("mrow") << ETag("msup");
else if (d) else if (d)
os << MTag("mrow") << down() << ETag("mrow") << ETag("msub"); os << MTag("mrow") << down() << ETag("mrow") << ETag("msub");
return rv;
} }

View File

@ -61,7 +61,7 @@ public:
/// write content as something readable by Mathematica /// write content as something readable by Mathematica
void mathematica(MathematicaStream &) const; void mathematica(MathematicaStream &) const;
/// write content as something resembling MathML /// write content as something resembling MathML
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// write content as something readable by Octave /// write content as something readable by Octave
void octave(OctaveStream &) const; void octave(OctaveStream &) const;

View File

@ -192,11 +192,11 @@ void InsetMathSpace::octave(OctaveStream & os) const
} }
void InsetMathSpace::mathmlize(MathStream & ms) const docstring InsetMathSpace::mathmlize(MathStream & ms) const
{ {
SpaceInfo const & si = space_info[space_]; SpaceInfo const & si = space_info[space_];
if (si.negative || !si.visible) if (si.negative || !si.visible)
return; return docstring();
string l; string l;
if (si.custom) if (si.custom)
l = length_.asHTMLString(); l = length_.asHTMLString();
@ -210,6 +210,7 @@ void InsetMathSpace::mathmlize(MathStream & ms) const
if (!l.empty()) if (!l.empty())
ms << " width=\"" << from_ascii(l) << "\""; ms << " width=\"" << from_ascii(l) << "\"";
ms << " />"; ms << " />";
return docstring();
} }

View File

@ -52,7 +52,7 @@ public:
/// ///
void octave(OctaveStream &) const; void octave(OctaveStream &) const;
/// ///
void mathmlize(MathStream & ms) const; docstring mathmlize(MathStream & ms) const;
/// ///
void write(WriteStream & os) const; void write(WriteStream & os) const;
/// generate something that will be understood by the Dialogs. /// generate something that will be understood by the Dialogs.

View File

@ -147,7 +147,7 @@ void InsetMathSpecialChar::octave(OctaveStream & os) const
} }
void InsetMathSpecialChar::mathmlize(MathStream & ms) const docstring InsetMathSpecialChar::mathmlize(MathStream & ms) const
{ {
switch (char_) { switch (char_) {
case '&': case '&':
@ -157,6 +157,7 @@ void InsetMathSpecialChar::mathmlize(MathStream & ms) const
ms.os().put(char_); ms.os().put(char_);
break; break;
} }
return docstring();
} }

View File

@ -45,7 +45,7 @@ public:
/// ///
void mathematica(MathematicaStream &) const; void mathematica(MathematicaStream &) const;
/// ///
void mathmlize(MathStream & ms) const; docstring mathmlize(MathStream & ms) const;
/// identifies SpecialChar insets /// identifies SpecialChar insets
InsetMathSpecialChar const * asSpecialCharInset() const { return this; } InsetMathSpecialChar const * asSpecialCharInset() const { return this; }
/// ///

View File

@ -12,6 +12,7 @@
#include "InsetMathSqrt.h" #include "InsetMathSqrt.h"
#include "MathData.h" #include "MathData.h"
#include "MathExtern.h"
#include "MathStream.h" #include "MathStream.h"
#include "TextPainter.h" #include "TextPainter.h"
#include "frontends/Painter.h" #include "frontends/Painter.h"
@ -107,9 +108,12 @@ void InsetMathSqrt::octave(OctaveStream & os) const
} }
void InsetMathSqrt::mathmlize(MathStream & os) const docstring InsetMathSqrt::mathmlize(MathStream & os) const
{ {
os << MTag("msqrt") << cell(0) << ETag("msqrt"); os << MTag("msqrt");
docstring const rv = lyx::mathmlize(cell(0), os);
os << ETag("msqrt");
return rv;
} }

View File

@ -44,7 +44,7 @@ public:
/// ///
void octave(OctaveStream &) const; void octave(OctaveStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
InsetCode lyxCode() const { return MATH_SQRT_CODE; } InsetCode lyxCode() const { return MATH_SQRT_CODE; }

View File

@ -89,13 +89,6 @@ void InsetMathString::octave(OctaveStream & os) const
} }
void InsetMathString::mathmlize(MathStream & /*os*/) const
{
// useless, no doubt, but we should not be here
LASSERT(false, /* */);
}
void InsetMathString::write(WriteStream & os) const void InsetMathString::write(WriteStream & os) const
{ {
if (!os.latex() || os.lockedMode()) { if (!os.latex() || os.lockedMode()) {

View File

@ -47,8 +47,6 @@ public:
/// ///
void mathematica(MathematicaStream &) const; void mathematica(MathematicaStream &) const;
/// ///
void mathmlize(MathStream &) const;
///
void write(WriteStream & os) const; void write(WriteStream & os) const;
/// ///
InsetCode lyxCode() const { return MATH_STRING_CODE; } InsetCode lyxCode() const { return MATH_STRING_CODE; }

View File

@ -184,7 +184,7 @@ char const * MathMLtype(docstring const & s)
} }
void InsetMathSymbol::mathmlize(MathStream & os) const docstring InsetMathSymbol::mathmlize(MathStream & os) const
{ {
// FIXME To get this working properly, we need to do add the // FIXME To get this working properly, we need to do add the
// XML entity definitions to lib/symbols. And probably do more // XML entity definitions to lib/symbols. And probably do more
@ -197,6 +197,7 @@ void InsetMathSymbol::mathmlize(MathStream & os) const
else else
os << sym_->xmlname; os << sym_->xmlname;
os << " </" << type << '>'; os << " </" << type << '>';
return docstring();
} }

View File

@ -61,7 +61,7 @@ public:
/// ///
void mathematica(MathematicaStream &) const; void mathematica(MathematicaStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void octave(OctaveStream &) const; void octave(OctaveStream &) const;
/// ///

View File

@ -86,9 +86,10 @@ void InsetMathUnknown::mathematica(MathematicaStream & os) const
} }
void InsetMathUnknown::mathmlize(MathStream & os) const docstring InsetMathUnknown::mathmlize(MathStream & os) const
{ {
os << MTag("mi") << name_ << ETag("mi"); os << MTag("mi") << name_ << ETag("mi");
return docstring();
} }

View File

@ -50,7 +50,7 @@ public:
/// ///
void mathematica(MathematicaStream &) const; void mathematica(MathematicaStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void octave(OctaveStream &) const; void octave(OctaveStream &) const;
/// ///

View File

@ -1413,20 +1413,22 @@ void mathematica(MathData const & dat, MathematicaStream & os)
} }
void mathmlize(MathData const & dat, MathStream & os) docstring mathmlize(MathData const & dat, MathStream & os)
{ {
MathData ar = dat; MathData ar = dat;
extractStructure(ar, MATHML); extractStructure(ar, MATHML);
docstring retval;
if (ar.size() == 0) if (ar.size() == 0)
os << "<mrow/>"; os << "<mrow/>";
else if (ar.size() == 1) else if (ar.size() == 1)
os << ar.front(); retval = ar.front()->mathmlize(os);
else { else {
os << MTag("mrow"); os << MTag("mrow");
for (MathData::const_iterator it = ar.begin(); it != ar.end(); ++it) for (MathData::const_iterator it = ar.begin(); it != ar.end(); ++it)
(*it)->mathmlize(os); retval += (*it)->mathmlize(os);
os << ETag("mrow"); os << ETag("mrow");
} }
return retval;
} }
// convert this inset somehow to a number // convert this inset somehow to a number

View File

@ -30,7 +30,7 @@ void normalize(MathData const &, NormalStream &);
void maple(MathData const &, MapleStream &); void maple(MathData const &, MapleStream &);
void maxima(MathData const &, MaximaStream &); void maxima(MathData const &, MaximaStream &);
void mathematica(MathData const &, MathematicaStream &); void mathematica(MathData const &, MathematicaStream &);
void mathmlize(MathData const &, MathStream &); docstring mathmlize(MathData const &, MathStream &);
void octave(MathData const &, OctaveStream &); void octave(MathData const &, OctaveStream &);
bool extractNumber(MathData const & ar, int & i); bool extractNumber(MathData const & ar, int & i);

View File

@ -73,7 +73,10 @@ public:
} }
// FIXME Other external things need similar treatment. // FIXME Other external things need similar treatment.
/// ///
void mathmlize(MathStream & ms) const { ms << mathMacro_.cell(idx_); } docstring mathmlize(MathStream & ms) const {
ms << mathMacro_.cell(idx_);
return docstring();
}
/// ///
void draw(PainterInfo & pi, int x, int y) const { void draw(PainterInfo & pi, int x, int y) const {
if (mathMacro_.editMetrics(pi.base.bv)) { if (mathMacro_.editMetrics(pi.base.bv)) {
@ -740,9 +743,10 @@ void MathMacro::maple(MapleStream & os) const
} }
void MathMacro::mathmlize(MathStream & os) const docstring MathMacro::mathmlize(MathStream & os) const
{ {
os << expanded_.cell(0); os << expanded_.cell(0);
return docstring();
} }

View File

@ -71,7 +71,7 @@ public:
/// ///
void maple(MapleStream &) const; void maple(MapleStream &) const;
/// ///
void mathmlize(MathStream &) const; docstring mathmlize(MathStream &) const;
/// ///
void octave(OctaveStream &) const; void octave(OctaveStream &) const;
/// ///