X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftex2lyx%2Fmath.C;h=ea3cc9d4e03374e0718bf74127466452b611aa73;hb=d68ec289063394f24296ee098f5113e9242f2b0b;hp=b6ca81070934b95f2eca2dca9e9786469fbf3034;hpb=0e9bd2e87dbf1f2791cead146f114b555d2ca86d;p=lyx.git diff --git a/src/tex2lyx/math.C b/src/tex2lyx/math.C index b6ca810709..ea3cc9d4e0 100644 --- a/src/tex2lyx/math.C +++ b/src/tex2lyx/math.C @@ -1,27 +1,36 @@ -/** The .tex to .lyx converter - \author André Pönitz (2003) +/** + * \file math.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author André Pönitz + * + * Full author contact details are available in file CREDITS. */ // {[( #include -#include "Lsstream.h" #include "tex2lyx.h" #include -#include using std::cerr; using std::endl; + using std::ostream; -using std::vector; +using std::string; bool is_math_env(string const & name) { static char const * known_math_envs[] = { "equation", "equation*", - "eqnarray", "eqnarray*", "align", "align*", 0}; + "eqnarray", "eqnarray*", "align", "align*", "gather", "gather*", + "multline", "multline*", "math", "displaymath", "flalign", "flalign*", + // These require extra args + "alignat", "alignat*", "xalignat", "xalignat*", "xxalignat", + 0}; for (char const ** what = known_math_envs; *what; ++what) if (*what == name) @@ -91,7 +100,6 @@ void parse_math(Parser & p, ostream & os, unsigned flags, const mode_type mode) } else if (t.cat() == catLetter || - t.cat() == catSpace || t.cat() == catSuper || t.cat() == catSub || t.cat() == catOther || @@ -100,15 +108,6 @@ void parse_math(Parser & p, ostream & os, unsigned flags, const mode_type mode) t.cat() == catParameter) os << t.character(); - else if (t.cat() == catNewline) { - //if (p.next_token().cat() == catNewline) { - // p.get_token(); - // handle_par(os); - //} else { - os << "\n "; // note the space - //} - } - else if (t.cat() == catBegin) { os << '{'; parse_math(p, os, FLAG_BRACE_LAST, mode); @@ -121,8 +120,13 @@ void parse_math(Parser & p, ostream & os, unsigned flags, const mode_type mode) os << "unexpected '}' in math\n"; } - else if (t.cat() == catComment) - handle_comment(p); + else if (t.cat() == catComment) { + if (!t.cs().empty()) + cerr << "Ignoring comment: " << t.asInput(); + else + // "%\n" combination + p.skip_spaces(); + } // // control sequences @@ -137,7 +141,7 @@ void parse_math(Parser & p, ostream & os, unsigned flags, const mode_type mode) else if (t.cs() == "[") { // special handling of a few common SW user quirks p.skip_spaces(); - //if (p.next_token().cs() == + //if (p.next_token().cs() == os << "\\["; parse_math(p, os, FLAG_EQUATION, MATH_MODE); os << "\\]"; @@ -156,6 +160,7 @@ void parse_math(Parser & p, ostream & os, unsigned flags, const mode_type mode) else parse_math(p, os, FLAG_END, mode); os << "\\end{" << name << "}"; + active_environments.pop_back(); } else if (t.cs() == "end") { @@ -165,7 +170,6 @@ void parse_math(Parser & p, ostream & os, unsigned flags, const mode_type mode) if (name != active_environment()) p.error("\\end{" + name + "} does not match \\begin{" + active_environment() + "}"); - active_environments.pop_back(); return; } p.error("found 'end' unexpectedly"); @@ -184,14 +188,15 @@ void parse_math(Parser & p, ostream & os, unsigned flags, const mode_type mode) } else if (t.cs() == "textrm" || t.cs() == "textsf" || t.cs() == "textbf" - || t.cs() == "texttt" || t.cs() == "textsc") { + || t.cs() == "texttt" || t.cs() == "textsc" + || t.cs() == "text" || t.cs() == "intertext") { os << '\\' << t.cs() << '{'; parse_math(p, os, FLAG_ITEM, MATHTEXT_MODE); os << '}'; } - else if (t.cs() == "mbox") { - os << "\\mbox{"; + else if (t.cs() == "mbox" || t.cs() == "fbox") { + os << "\\" << t.cs() << '{'; parse_math(p, os, FLAG_ITEM, MATHTEXT_MODE); os << '}'; } @@ -210,7 +215,7 @@ void parse_math(Parser & p, ostream & os, unsigned flags, const mode_type mode) else if (t.cs() == "ss") os << "ß"; - else + else os << t.asInput(); if (flags & FLAG_LEAVE) {