namespace lyx {
class Encoding;
-class InsetMath;
class MathAtom;
class MathData;
///
explicit WriteStream(otexrowstream & os, bool fragile = false,
bool latex = false, OutputType output = wsDefault,
- Encoding const * encoding = 0);
+ Encoding const * encoding = nullptr);
///
~WriteStream();
///
void ulemCmd(UlemCmdType ulemcmd) { ulemcmd_ = ulemcmd; }
/// tell which ulem command type we are inside
UlemCmdType ulemCmd() const { return ulemcmd_; }
- /// record whether we are in the argument of a math macro
- void insideMacro(bool insidemacro) { insidemacro_ = insidemacro; }
- /// tell whether we are in the argument of a math macro
- bool insideMacro() const { return insidemacro_; }
/// writes space if next thing is isalpha()
void pendingSpace(bool how);
/// writes space if next thing is isalpha()
void asciiOnly(bool ascii);
/// tell whether to use only ascii chars when producing latex code
bool asciiOnly() const { return ascii_; }
+ /// tell whether we are in a MathClass inset
+ void inMathClass(bool mathclass) { mathclass_ = mathclass; };
+ /// tell whether we are in a MathClass inset
+ bool inMathClass() const { return mathclass_; }
/// LaTeX encoding
Encoding const * encoding() const { return encoding_; }
///
otexrowstream & os_;
/// do we have to write \\protect sometimes
- bool fragile_;
+ bool fragile_ = false;
/// are we at the beginning of an MathData?
- bool firstitem_;
+ bool firstitem_ = false;
/// are we writing to .tex?
- int latex_;
+ int latex_ = false;
/// output type (default, source preview, instant preview)?
- OutputType output_;
- /// are we in the argument of a math macro?
- bool insidemacro_;
+ OutputType output_ = wsDefault;
/// do we have a space pending?
- bool pendingspace_;
+ bool pendingspace_ = false;
/// do we have a brace pending?
- bool pendingbrace_;
+ bool pendingbrace_ = false;
/// are we in text mode when producing latex code?
- bool textmode_;
+ bool textmode_ = false;
/// are we allowed to switch mode when producing latex code?
- bool locked_;
+ bool locked_ = false;
/// should we use only ascii chars when producing latex code?
- bool ascii_;
+ bool ascii_ = false;
/// are we allowed to output an immediately following newline?
- bool canbreakline_;
+ bool canbreakline_ = true;
/// should we take care for striking out display math?
- bool mathsout_;
+ bool mathsout_ = false;
/// what ulem command are we inside (none, underline, strikeout)?
- UlemCmdType ulemcmd_;
+ UlemCmdType ulemcmd_ = NONE;
///
- int line_;
+ int line_ = 0;
///
- Encoding const * encoding_;
+ Encoding const * encoding_ = nullptr;
/// Row entry we are in
- TexRow::RowEntry row_entry_;
+ TexRow::RowEntry row_entry_ = TexRow::row_none;
+ /// whether we are in a MathClass inset
+ bool mathclass_ = false;
};
///
*
* A local variable of this type can be used to either ensure math mode
* or delay the writing of a pending brace when outputting LaTeX.
- * A LyX MathMacro is always assumed needing a math mode environment, while
+ * A LyX InsetMathMacro is always assumed needing a math mode environment, while
* no assumption is made for macros defined through \newcommand or \def.
*
* Example 1:
* to be specified. Only the following 3 different cases are handled.
*
* When the needs_mathmode parameter is true the behavior is as in Example 1.
- * This is the case for a LyX MathMacro or a macro not tagged as textmode.
+ * This is the case for a LyX InsetMathMacro or a macro not tagged as textmode.
*
* When the needs_mathmode and textmode_macro parameters are both false the
* macro is left in the same (text or math mode) environment it was entered.
// MathML
//
+
+/// Start tag.
class MTag {
public:
///
- MTag(char const * const tag, std::string attr = "")
+ MTag(char const * const tag, std::string const & attr = std::string())
: tag_(tag), attr_(attr) {}
///
char const * const tag_;
std::string attr_;
};
+
+/// End tag.
class ETag {
public:
///
- ETag(char const * const tag) : tag_(tag) {}
+ explicit ETag(char const * const tag) : tag_(tag) {}
///
char const * const tag_;
};
+/// Compound tag (no content, directly closed).
+class CTag {
+public:
+ ///
+ CTag(char const * const tag, std::string const & attr = "")
+ : tag_(tag), attr_(attr) {}
+ ///
+ char const * const tag_;
+ ///
+ std::string attr_;
+};
+
+
/// Throw MathExportException to signal that the attempt to export
/// some math in the current format did not succeed. E.g., we can't
/// export xymatrix as MathML, so that will throw, and we'll fall back
class MathStream {
public:
- ///
- explicit MathStream(odocstream & os);
+ /// Builds a stream proxy for os; the MathML namespace is given by xmlns (supposed to be already defined elsewhere in the document).
+ explicit MathStream(odocstream & os, std::string const & xmlns = "", bool xmlMode = false);
///
void cr();
///
docstring deferred() const;
///
bool inText() const { return in_text_; }
+ ///
+ std::string xmlns() const { return xmlns_; }
+ ///
+ bool xmlMode() const { return xml_mode_; }
+ /// Returns the tag name prefixed by the name space if needed.
+ std::string namespacedTag(std::string const & tag) const {
+ return (xmlns().empty() ? "" : xmlns() + ":") + tag;
+ }
private:
///
void setTextMode(bool t) { in_text_ = t; }
///
odocstringstream deferred_;
///
+ std::string xmlns_;
+ ///
+ bool xml_mode_;
+ ///
friend class SetMode;
};
MathStream & operator<<(MathStream &, MTag const &);
///
MathStream & operator<<(MathStream &, ETag const &);
+///
+MathStream & operator<<(MathStream &, CTag const &);
/// A simpler version of ModeSpecifier, for MathML
class SetMode {
public:
///
- explicit SetMode(MathStream & os, bool text);
+ explicit SetMode(MathStream & ms, bool text);
///
~SetMode();
private:
///
- MathStream & os_;
+ MathStream & ms_;
///
bool was_text_;
};
OctaveStream & operator<<(OctaveStream &, int);
-docstring convertDelimToXMLEscape(docstring const & name);
+docstring convertDelimToXMLEscape(docstring const & name, bool xmlmode);
} // namespace lyx