diff --git a/src/tex2lyx/preamble.cpp b/src/tex2lyx/preamble.cpp index 6c5cf89665..6939004ed7 100644 --- a/src/tex2lyx/preamble.cpp +++ b/src/tex2lyx/preamble.cpp @@ -22,8 +22,6 @@ #include "support/filetools.h" #include "support/lstrings.h" -#include - #include #include #include @@ -31,8 +29,6 @@ #include #include -using boost::regex; -using boost::smatch; namespace lyx { @@ -241,8 +237,7 @@ string const scale_as_percentage(string const & scale) } -void handle_package(string const & name, string const & opts, - bool in_lyx_preamble) +void handle_package(string const & name, string const & opts) { vector options = split_options(opts); add_package(name, options); @@ -383,16 +378,13 @@ void handle_package(string const & name, string const & opts, } else if (name == "jurabib") h_cite_engine = "jurabib"; - else if (!in_lyx_preamble) { - if (options.empty()) - h_preamble << "\\usepackage{" << name << "}\n"; - else { - h_preamble << "\\usepackage[" << opts << "]{" - << name << "}\n"; - options.clear(); - } - } + else if (options.empty()) + h_preamble << "\\usepackage{" << name << "}\n"; + else { + h_preamble << "\\usepackage[" << opts << "]{" << name << "}\n"; + options.clear(); + } // We need to do something with the options... if (!options.empty()) cerr << "Ignoring options '" << join(options, ",") @@ -454,8 +446,6 @@ TextClass const parse_preamble(Parser & p, ostream & os, string const & forcecla // initialize fixed types special_columns['D'] = 3; bool is_full_document = false; - bool is_lyx_file = false; - bool in_lyx_preamble = true; // determine whether this is a full document or a fragment for inclusion while (p.good()) { @@ -478,57 +468,35 @@ TextClass const parse_preamble(Parser & p, ostream & os, string const & forcecla // // cat codes // - if (!in_lyx_preamble && - (t.cat() == catLetter || - t.cat() == catSuper || - t.cat() == catSub || - t.cat() == catOther || - t.cat() == catMath || - t.cat() == catActive || - t.cat() == catBegin || - t.cat() == catEnd || - t.cat() == catAlign || - t.cat() == catParameter)) - h_preamble << t.character(); + if (t.cat() == catLetter || + t.cat() == catSuper || + t.cat() == catSub || + t.cat() == catOther || + t.cat() == catMath || + t.cat() == catActive || + t.cat() == catBegin || + t.cat() == catEnd || + t.cat() == catAlign || + t.cat() == catParameter) + h_preamble << t.character(); - else if (!in_lyx_preamble && - (t.cat() == catSpace || t.cat() == catNewline)) + else if (t.cat() == catSpace || t.cat() == catNewline) h_preamble << t.asInput(); - else if (t.cat() == catComment) { - // regex to parse comments - static regex const islyxfile("%% LyX .* created this file"); - static regex const usercommands("User specified LaTeX commands"); - - string const comment = t.asInput(); - cerr << "Seen comment: " << comment << std::endl; - smatch sub; - if (regex_search(comment, sub, islyxfile)) - is_lyx_file = true; - else if (is_lyx_file - && regex_search(comment, sub, usercommands)) - in_lyx_preamble = false; - else if (!in_lyx_preamble) - h_preamble << t.asInput(); - cerr << "lyx_file: " << is_lyx_file << ", lyx_preamble " - << in_lyx_preamble << std::endl; - } + else if (t.cat() == catComment) + h_preamble << t.asInput(); else if (t.cs() == "pagestyle") h_paperpagestyle = p.verbatim_item(); else if (t.cs() == "makeatletter") { - if (!is_lyx_file || !in_lyx_preamble - || p.getCatCode('@') != catLetter) - h_preamble << "\\makeatletter"; p.setCatCode('@', catLetter); + h_preamble << "\\makeatletter"; } - + else if (t.cs() == "makeatother") { - if (!is_lyx_file || !in_lyx_preamble - || p.getCatCode('@') != catOther) - h_preamble << "\\makeatother"; p.setCatCode('@', catOther); + h_preamble << "\\makeatother"; } else if (t.cs() == "newcommand" || t.cs() == "renewcommand" @@ -561,7 +529,19 @@ TextClass const parse_preamble(Parser & p, ostream & os, string const & forcecla h_font_default_family = family.erase(0,1); } // only non-lyxspecific stuff - if (!in_lyx_preamble) { + if ( name != "\\noun" + && name != "\\tabularnewline" + && name != "\\LyX" + && name != "\\lyxline" + && name != "\\lyxaddress" + && name != "\\lyxrightaddress" + && name != "\\lyxdot" + && name != "\\boldsymbol" + && name != "\\lyxarrow" + && name != "\\rmdefault" + && name != "\\sfdefault" + && name != "\\ttdefault" + && name != "\\familydefault") { ostringstream ss; ss << '\\' << t.cs(); if (star) @@ -644,10 +624,9 @@ TextClass const parse_preamble(Parser & p, ostream & os, string const & forcecla vector::const_iterator it = vecnames.begin(); vector::const_iterator end = vecnames.end(); for (; it != end; ++it) - handle_package(trim(*it), string(), - in_lyx_preamble); + handle_package(trim(*it), string()); } else { - handle_package(name, options, in_lyx_preamble); + handle_package(name, options); } } @@ -659,7 +638,9 @@ TextClass const parse_preamble(Parser & p, ostream & os, string const & forcecla ss << p.getOpt(); ss << '{' << p.verbatim_item() << '}'; ss << '{' << p.verbatim_item() << '}'; - if (!in_lyx_preamble) + if (name != "lyxcode" && name != "lyxlist" && + name != "lyxrightadress" && + name != "lyxaddress" && name != "lyxgreyedout") h_preamble << ss.str(); } @@ -667,9 +648,8 @@ TextClass const parse_preamble(Parser & p, ostream & os, string const & forcecla string name = p.get_token().cs(); while (p.next_token().cat() != catBegin) name += p.get_token().asString(); - if (!in_lyx_preamble) - h_preamble << "\\def\\" << name << '{' - << p.verbatim_item() << "}"; + h_preamble << "\\def\\" << name << '{' + << p.verbatim_item() << "}"; } else if (t.cs() == "newcolumntype") { @@ -746,7 +726,7 @@ TextClass const parse_preamble(Parser & p, ostream & os, string const & forcecla } } - else if (!t.cs().empty() && !in_lyx_preamble) + else if (!t.cs().empty()) h_preamble << '\\' << t.cs(); } p.skip_spaces();