void
MathSpaceInset::Write(ostream & os)
-{
+{
+#ifdef USE_OSTREAM_ONLY
+ if (space >= 0 && space < 6) {
+ os << '\\' << latex_mathspace[space] << ' ';
+ }
+#else
if (space >= 0 && space < 6) {
string output;
MathSpaceInset::Write(output);
os << output;
}
+#endif
}
+#ifndef USE_OSTREAM_ONLY
void
MathSpaceInset::Write(string & outf)
{
outf += ' ';
}
}
+#endif
void
MathDotsInset::Write(ostream & os)
{
+#ifdef USE_OSTREAM_ONLY
+ os << '\\' << name << ' ';
+#else
string output;
MathDotsInset::Write(output);
os << output;
+#endif
}
+#ifndef USE_OSTREAM_ONLY
void
MathDotsInset::Write(string & outf)
{
outf += '\\';
outf += name;
outf += ' ';
-}
+}
+#endif
void MathSqrtInset::Write(ostream & os)
-{
+{
+#ifdef USE_OSTREAM_ONLY
+ os << '\\' << name << '{';
+ MathParInset::Write(os);
+ os << '}';
+#else
string output;
MathSqrtInset::Write(output);
os << output;
+#endif
}
+#ifndef USE_OSTREAM_ONLY
void MathSqrtInset::Write(string & outf)
{
outf += '\\';
MathParInset::Write(outf);
outf += '}';
}
+#endif
void MathDelimInset::Write(ostream & os)
-{
+{
+#ifdef USE_OSTREAM_ONLY
+ latexkeys * l = (left != '|') ? lm_get_key_by_id(left, LM_TK_SYM): 0;
+ latexkeys * r = (right != '|') ? lm_get_key_by_id(right, LM_TK_SYM): 0;
+ os << "\\left";
+ if (l) {
+ os << '\\' << l->name << ' ';
+ } else {
+ if (left == '{' || left == '}') {
+ os << '\\' << char(left) << ' ';
+ } else {
+ os << char(left) << ' ';
+ }
+ }
+ MathParInset::Write(os);
+ os << "\\right";
+ if (r) {
+ os << '\\' << r->name << ' ';
+ } else {
+ if (right == '{' || right == '}') {
+ os << '\\' << char(right) << ' ';
+ } else {
+ os << char(right) << ' ';
+ }
+ }
+#else
string output;
MathDelimInset::Write(output);
os << output;
+#endif
}
+#ifndef USE_OSTREAM_ONLY
void MathDelimInset::Write(string & outf)
-{
+{
latexkeys * l = (left != '|') ? lm_get_key_by_id(left, LM_TK_SYM): 0;
latexkeys * r = (right != '|') ? lm_get_key_by_id(right, LM_TK_SYM): 0;
outf += "\\left";
}
}
}
+#endif
void MathDecorationInset::Write(ostream & os)
{
+#ifdef USE_OSTREAM_ONLY
+ latexkeys * l = lm_get_key_by_id(deco, LM_TK_WIDE);
+ os << '\\' << l->name << '{';
+ MathParInset::Write(os);
+ os << '}';
+#else
string output;
MathDecorationInset::Write(output);
os << output;
+#endif
}
+#ifndef USE_OSTREAM_ONLY
void MathDecorationInset::Write(string & outf)
{
latexkeys * l = lm_get_key_by_id(deco, LM_TK_WIDE);
MathParInset::Write(outf);
outf += '}';
}
+#endif
void MathAccentInset::Write(ostream & os)
-{
+{
+#ifdef USE_OSTREAM_ONLY
+ latexkeys * l = lm_get_key_by_id(code, LM_TK_ACCENT);
+ os << '\\' << l->name;
+ if (code!= LM_not)
+ os << '{';
+ else
+ os << ' ';
+
+ if (inset) {
+ inset->Write(os);
+ } else {
+ if (fn>= LM_TC_RM && fn<= LM_TC_TEXTRM) {
+ os << '\\'
+ << math_font_name[fn-LM_TC_RM]
+ << '{';
+ }
+ if (MathIsSymbol(fn)) {
+ latexkeys * l = lm_get_key_by_id(c, LM_TK_SYM);
+ if (l) {
+ os << '\\' << l->name << ' ';
+ }
+ } else
+ os << char(c);
+
+ if (fn>= LM_TC_RM && fn<= LM_TC_TEXTRM)
+ os << '}';
+ }
+
+ if (code!= LM_not)
+ os << '}';
+#else
string output;
MathAccentInset::Write(output);
os << output;
+#endif
}
+#ifndef USE_OSTREAM_ONLY
void MathAccentInset::Write(string & outf)
{
latexkeys * l = lm_get_key_by_id(code, LM_TK_ACCENT);
if (code!= LM_not)
outf += '}';
}
+#endif
void MathBigopInset::Write(ostream & os)
-{
+{
+#ifdef USE_OSTREAM_ONLY
+ bool limp = GetLimits();
+
+ os << '\\' << name;
+
+ if (limp && !(sym != LM_int && sym != LM_oint
+ && (GetStyle() == LM_ST_DISPLAY)))
+ os << "\\limits ";
+ else
+ if (!limp && (sym != LM_int && sym != LM_oint
+ && (GetStyle() == LM_ST_DISPLAY)))
+ os << "\\nolimits ";
+ else
+ os << ' ';
+#else
string output;
MathBigopInset::Write(output);
os << output;
+#endif
}
+#ifndef USE_OSTREAM_ONLY
void MathBigopInset::Write(string & outf)
{
bool limp = GetLimits();
else
outf += ' ';
}
+#endif
void MathFracInset::Write(ostream & os)
-{
+{
+#ifdef USE_OSTREAM_ONLY
+ os << '\\' << name << '{';
+ MathParInset::Write(os);
+ os << "}{";
+ den->Write(os);
+ os << '}';
+#else
string output;
MathFracInset::Write(output);
os << output;
+#endif
}
+#ifndef USE_OSTREAM_ONLY
void MathFracInset::Write(string & outf)
{
outf += '\\';
den->Write(outf);
outf += '}';
}
+#endif
void MathParInset::Write(ostream & os)
{
+#ifdef USE_OSTREAM_ONLY
+ if (!array) return;
+ int brace = 0;
+ latexkeys * l;
+ MathedIter data(array);
+ // hack
+ MathedRowSt const * crow = getRowSt();
+ data.Reset();
+
+ if (!Permit(LMPF_FIXED_SIZE)) {
+ l = lm_get_key_by_id(size, LM_TK_STY);
+ if (l) {
+ os << '\\' << l->name << ' ';
+ }
+ }
+ while (data.OK()) {
+ byte cx = data.GetChar();
+ if (cx >= ' ') {
+ int ls;
+ byte * s = data.GetString(ls);
+
+ if (data.FCode() >= LM_TC_RM && data.FCode() <= LM_TC_TEXTRM) {
+ os << '\\' << math_font_name[data.FCode()-LM_TC_RM] << '{';
+ }
+ while (ls > 0) {
+ if (MathIsSymbol(data.FCode())) {
+ l = lm_get_key_by_id(*s, (data.FCode() == LM_TC_BSYM) ?
+ LM_TK_BIGSYM : LM_TK_SYM);
+ if (l) {
+ os << '\\' << l->name << ' ';
+ } else {
+ lyxerr << "Illegal symbol code[" << *s
+ << " " << ls << " " << data.FCode() << "]";
+ }
+ } else {
+ // Is there a standard logical XOR?
+ if ((data.FCode() == LM_TC_TEX && *s != '{' && *s != '}') ||
+ (data.FCode() == LM_TC_SPECIAL))
+ os << '\\';
+ else {
+ if (*s == '{') ++brace;
+ if (*s == '}') --brace;
+ }
+ if (*s == '}' && data.FCode() == LM_TC_TEX && brace < 0)
+ lyxerr <<"Math warning: Unexpected closing brace."
+ << endl;
+ else
+ os << char(*s);
+ }
+ ++s; --ls;
+ }
+ if (data.FCode()>= LM_TC_RM && data.FCode()<= LM_TC_TEXTRM)
+ os << '}';
+ } else
+ if (MathIsInset(cx)) {
+ MathedInset * p = data.GetInset();
+ if (cx == LM_TC_UP)
+ os << "^{";
+ if (cx == LM_TC_DOWN)
+ os << "_{";
+ p->Write(os);
+ if (cx == LM_TC_UP || cx == LM_TC_DOWN)
+ os << '}';
+ data.Next();
+ } else
+ switch(cx) {
+ case LM_TC_TAB:
+ {
+ os << " & ";
+ data.Next();
+ break;
+ }
+ case LM_TC_CR:
+ {
+ if (crow) {
+ if (!crow->isNumbered()) {
+ os << "\\nonumber ";
+ }
+ if (crow->getLabel()) {
+ os << "\\label{"
+ << crow->getLabel()
+ << "} ";
+ }
+ crow = crow->getNext();
+ }
+ os << "\\\\\n";
+ ++number_of_newlines;
+ data.Next();
+ break;
+ }
+ default:
+ lyxerr << "WMath Error: unrecognized code[" << cx << "]";
+ return;
+ }
+ }
+
+ if (crow) {
+ if (!crow->isNumbered()) {
+ os << "\\nonumber ";
+ }
+ if (crow->getLabel()) {
+ os << "\\label{"
+ << crow->getLabel()
+ << "} ";
+ }
+ }
+#if 1
+ while (brace > 0) {
+ os << '}';
+ --brace;
+ }
+#else
+ // Something like this should work too:
+ os << string(brace, '}'); // not one-off error I hope.
+#endif
+#else
if (!array) return;
string output;
MathParInset::Write(output);
os << output;
+#endif
}
+#ifndef USE_OSTREAM_ONLY
void MathParInset::Write(string & outf)
{
if (!array) return;
--brace;
}
}
+#endif
void MathMatrixInset::Write(ostream & os)
{
+#ifdef USE_OSTREAM_ONLY
+ if (GetType() == LM_OT_MATRIX){
+ os << "\\begin{"
+ << name
+ << '}';
+ if (v_align == 't' || v_align == 'b') {
+ os << '['
+ << char(v_align)
+ << ']';
+ }
+ os << '{'
+ << h_align
+ << "}\n";
+ ++number_of_newlines;
+ }
+ MathParInset::Write(os);
+ if (GetType() == LM_OT_MATRIX){
+ os << "\n\\end{"
+ << name
+ << '}';
+ ++number_of_newlines;
+ }
+#else
string output;
MathMatrixInset::Write(output);
os << output;
+#endif
}
+#ifndef USE_OSTREAM_ONLY
void MathMatrixInset::Write(string & outf)
{
if (GetType() == LM_OT_MATRIX){
++number_of_newlines;
}
}
+#endif
void mathed_write(MathParInset * p, ostream & os, int * newlines,
char fragile, char const * label)
{
+#ifdef USE_OSTREAM_ONLY
+ number_of_newlines = 0;
+ short mathed_env = p->GetType();
+
+ if (mathed_env == LM_EN_INTEXT) {
+ if (fragile) os << "\\protect";
+ os << "\\( "; // changed from " \\( " (Albrecht Dress)
+ }
+ else {
+ // Thinko!
+ // Is this '\n' really needed, what can go wrong
+ //if it is not there?
+#warning Thinko!
+#if 0
+ if (!suffixIs(outf, '\n')) {
+ // in batchmode we need to make sure
+ // a space before an equation doesn't
+ // make the LaTeX output different
+ // compared to "Exported LaTeX" ARRae
+ // Modified to work in a cleaner and hopefully more general way
+ // (JMarc)
+ outf += "\n";
+ ++number_of_newlines;
+ }
+#endif
+ if (mathed_env == LM_EN_DISPLAY){
+ os << "\\[\n";
+ } else {
+ os << "\\begin{"
+ << latex_mathenv[mathed_env]
+ << "}\n";
+ }
+ ++number_of_newlines;
+ }
+
+ if (label && label[0] > ' ' && mathed_env == LM_EN_EQUATION){
+ os << "\\label{"
+ << label
+ << "}\n";
+ ++number_of_newlines;
+ }
+
+ p->Write(os);
+
+ if (mathed_env == LM_EN_INTEXT){
+ if (fragile) os << "\\protect";
+ os << " \\)";
+ }
+ else if (mathed_env == LM_EN_DISPLAY) {
+ os << "\\]\n";
+ ++number_of_newlines;
+ }
+ else {
+ os << "\n\\end{"
+ << latex_mathenv[mathed_env]
+ << "}\n";
+ number_of_newlines += 2;
+ }
+ *newlines = number_of_newlines;
+#else
string output;
mathed_write(p, output, newlines, fragile, label);
os << output;
+#endif
}
-extern int tex_code_break_column;
-
+#ifndef USE_OSTREAM_ONLY
void mathed_write(MathParInset * p, string & outf, int * newlines,
char fragile, char const * label)
-{
+{
number_of_newlines = 0;
short mathed_env = p->GetType();
}
*newlines = number_of_newlines;
}
+#endif