revert. This is not doublechecked yet

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_5_X@25518 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2008-07-09 10:53:49 +00:00
parent a229ba95df
commit f1ceb1fec0

View File

@ -22,8 +22,6 @@
#include "support/filetools.h" #include "support/filetools.h"
#include "support/lstrings.h" #include "support/lstrings.h"
#include <boost/regex.hpp>
#include <algorithm> #include <algorithm>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
@ -31,8 +29,6 @@
#include <vector> #include <vector>
#include <map> #include <map>
using boost::regex;
using boost::smatch;
namespace lyx { namespace lyx {
@ -241,8 +237,7 @@ string const scale_as_percentage(string const & scale)
} }
void handle_package(string const & name, string const & opts, void handle_package(string const & name, string const & opts)
bool in_lyx_preamble)
{ {
vector<string> options = split_options(opts); vector<string> options = split_options(opts);
add_package(name, options); add_package(name, options);
@ -383,16 +378,13 @@ void handle_package(string const & name, string const & opts,
} }
else if (name == "jurabib") else if (name == "jurabib")
h_cite_engine = "jurabib"; h_cite_engine = "jurabib";
else if (!in_lyx_preamble) {
if (options.empty()) else if (options.empty())
h_preamble << "\\usepackage{" << name << "}\n"; h_preamble << "\\usepackage{" << name << "}\n";
else { else {
h_preamble << "\\usepackage[" << opts << "]{" h_preamble << "\\usepackage[" << opts << "]{" << name << "}\n";
<< name << "}\n";
options.clear(); options.clear();
} }
}
// We need to do something with the options... // We need to do something with the options...
if (!options.empty()) if (!options.empty())
cerr << "Ignoring options '" << join(options, ",") cerr << "Ignoring options '" << join(options, ",")
@ -454,8 +446,6 @@ TextClass const parse_preamble(Parser & p, ostream & os, string const & forcecla
// initialize fixed types // initialize fixed types
special_columns['D'] = 3; special_columns['D'] = 3;
bool is_full_document = false; 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 // determine whether this is a full document or a fragment for inclusion
while (p.good()) { while (p.good()) {
@ -478,8 +468,7 @@ TextClass const parse_preamble(Parser & p, ostream & os, string const & forcecla
// //
// cat codes // cat codes
// //
if (!in_lyx_preamble && if (t.cat() == catLetter ||
(t.cat() == catLetter ||
t.cat() == catSuper || t.cat() == catSuper ||
t.cat() == catSub || t.cat() == catSub ||
t.cat() == catOther || t.cat() == catOther ||
@ -488,47 +477,26 @@ TextClass const parse_preamble(Parser & p, ostream & os, string const & forcecla
t.cat() == catBegin || t.cat() == catBegin ||
t.cat() == catEnd || t.cat() == catEnd ||
t.cat() == catAlign || t.cat() == catAlign ||
t.cat() == catParameter)) t.cat() == catParameter)
h_preamble << t.character(); h_preamble << t.character();
else if (!in_lyx_preamble && else if (t.cat() == catSpace || t.cat() == catNewline)
(t.cat() == catSpace || t.cat() == catNewline))
h_preamble << t.asInput(); h_preamble << t.asInput();
else if (t.cat() == catComment) { 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(); h_preamble << t.asInput();
cerr << "lyx_file: " << is_lyx_file << ", lyx_preamble "
<< in_lyx_preamble << std::endl;
}
else if (t.cs() == "pagestyle") else if (t.cs() == "pagestyle")
h_paperpagestyle = p.verbatim_item(); h_paperpagestyle = p.verbatim_item();
else if (t.cs() == "makeatletter") { else if (t.cs() == "makeatletter") {
if (!is_lyx_file || !in_lyx_preamble
|| p.getCatCode('@') != catLetter)
h_preamble << "\\makeatletter";
p.setCatCode('@', catLetter); p.setCatCode('@', catLetter);
h_preamble << "\\makeatletter";
} }
else if (t.cs() == "makeatother") { else if (t.cs() == "makeatother") {
if (!is_lyx_file || !in_lyx_preamble
|| p.getCatCode('@') != catOther)
h_preamble << "\\makeatother";
p.setCatCode('@', catOther); p.setCatCode('@', catOther);
h_preamble << "\\makeatother";
} }
else if (t.cs() == "newcommand" || t.cs() == "renewcommand" 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); h_font_default_family = family.erase(0,1);
} }
// only non-lyxspecific stuff // 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; ostringstream ss;
ss << '\\' << t.cs(); ss << '\\' << t.cs();
if (star) if (star)
@ -644,10 +624,9 @@ TextClass const parse_preamble(Parser & p, ostream & os, string const & forcecla
vector<string>::const_iterator it = vecnames.begin(); vector<string>::const_iterator it = vecnames.begin();
vector<string>::const_iterator end = vecnames.end(); vector<string>::const_iterator end = vecnames.end();
for (; it != end; ++it) for (; it != end; ++it)
handle_package(trim(*it), string(), handle_package(trim(*it), string());
in_lyx_preamble);
} else { } 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.getOpt();
ss << '{' << p.verbatim_item() << '}'; ss << '{' << p.verbatim_item() << '}';
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(); h_preamble << ss.str();
} }
@ -667,7 +648,6 @@ TextClass const parse_preamble(Parser & p, ostream & os, string const & forcecla
string name = p.get_token().cs(); string name = p.get_token().cs();
while (p.next_token().cat() != catBegin) while (p.next_token().cat() != catBegin)
name += p.get_token().asString(); name += p.get_token().asString();
if (!in_lyx_preamble)
h_preamble << "\\def\\" << name << '{' h_preamble << "\\def\\" << name << '{'
<< p.verbatim_item() << "}"; << p.verbatim_item() << "}";
} }
@ -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(); h_preamble << '\\' << t.cs();
} }
p.skip_spaces(); p.skip_spaces();