char const * const tag_;
};
+
class MathStream {
public:
///
int & tab() { return tab_; }
///
friend MathStream & operator<<(MathStream &, char const *);
+ ///
+ void defer(docstring const &);
+ ///
+ void defer(std::string const &);
+ ///
+ docstring deferred() const;
+ ///
+ bool inText() const { return in_text_; }
private:
+ ///
+ void setTextMode() { in_text_ = true; }
+ ///
+ void setMathMode() { in_text_ = false; }
///
odocstream & os_;
///
int line_;
///
char lastchar_;
+ ///
+ bool in_text_;
+ ///
+ odocstringstream deferred_;
+ ///
+ friend class SetMode;
};
///
///
MathStream & operator<<(MathStream &, char);
///
+MathStream & operator<<(MathStream &, char_type);
+///
MathStream & operator<<(MathStream &, MTag const &);
///
MathStream & operator<<(MathStream &, ETag const &);
+/// A simpler version of ModeSpecifier, for MathML
+// FIXME There are still problems here with nesting, at least
+// potentially. The problem is that true nesting of text mode isn't
+// actually possible. I.e., we can't have:
+// <mtext><mtext></mtext></mtext>
+// So we have to have:
+// <mtext></mtext><mtext></mtext><mtext></mtext>
+// instead, where the last is really a continuation of the first.
+// We'll need some kind of stack to remember all that.
+class SetMode {
+public:
+ ///
+ explicit SetMode(MathStream & os, bool text, docstring attrs);
+ ///
+ explicit SetMode(MathStream & os, bool text);
+ ///
+ ~SetMode();
+private:
+ ///
+ void init(bool, docstring);
+ ///
+ MathStream & os_;
+ ///
+ bool opened_;
+ ///
+ bool was_text_;
+};
+
//
// Debugging