André, here's a patch to get it to work on this little test case. Else it get's lost in an infinite loop in handle_opts (There are none to documentclass...).
-- Angus
\documentclass{article} \usepackage{a4wide, ae} \begin{document} text above \begin{minipage}[c][0.45\textheight][a]{0.45\columnwidth}% foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo\end{minipage}% \hfill\begin{minipage}[t]{4.5 cm}% bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar\end{minipage}% text below \end{document}
Index: src/tex2lyx/ChangeLog =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/tex2lyx/ChangeLog,v retrieving revision 1.4 diff -u -p -r1.4 ChangeLog --- src/tex2lyx/ChangeLog 11 Feb 2003 13:56:50 -0000 1.4 +++ src/tex2lyx/ChangeLog 11 Feb 2003 15:47:59 -0000 @@ -1,5 +1,12 @@ 2003-02-11 Angus Leeming <[EMAIL PROTECTED]> + * tex2lyx.C (handle_opt): prevent infinite loop if opts is empty. + (handle_package): new function, factoring code out of Parser::parse. + (trim): copied across from support/lstrings.C + (Parser::parse): handle '\usepackage{foo, bar}'. + +2003-02-11 Angus Leeming <[EMAIL PROTECTED]> + * .cvsignore: new file. 2003-02-10 Angus Leeming <[EMAIL PROTECTED]> Index: src/tex2lyx/tex2lyx.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/tex2lyx/tex2lyx.C,v retrieving revision 1.4 diff -u -p -r1.4 tex2lyx.C --- src/tex2lyx/tex2lyx.C 11 Feb 2003 13:56:50 -0000 1.4 +++ src/tex2lyx/tex2lyx.C 11 Feb 2003 15:47:59 -0000 @@ -1,4 +1,3 @@ - /** The .tex to .lyx converter \author André Pönitz (2003) */ @@ -88,6 +87,24 @@ stack<string> active_environments; +string const trim(string const & a, char const * p = " ") +{ + // lyx::Assert(p); + + if (a.empty() || !*p) + return a; + + string::size_type r = a.find_last_not_of(p); + string::size_type l = a.find_first_not_of(p); + + // Is this the minimal test? (lgb) + if (r == string::npos && l == string::npos) + return string(); + + return a.substr(l, r - l + 1); +} + + void split(string const & s, vector<string> & result, char delim) { istringstream is(s); @@ -111,6 +128,9 @@ string join(vector<string> const & input void handle_opt(vector<string> & opts, char const ** what, string & target) { + if (opts.empty()) + return; + for ( ; what; ++what) { vector<string>::iterator it = find(opts.begin(), opts.end(), *what); if (it != opts.end()) { @@ -131,6 +151,38 @@ void handle_ert(ostream & os, string con } +void handle_package(string const & name, string const & options) +{ + if (name == "a4wide") { + h_papersize = "a4"; + h_paperpackage = "widemarginsa4"; + } else if (name == "ae") + h_fontscheme = "ae"; + else if (name == "aecompl") + h_fontscheme = "ae"; + else if (name == "amsmath") + h_use_amsmath = "1"; + else if (name == "amssymb") + h_use_amsmath = "1"; + else if (name == "babel") + ; // ignore this + else if (name == "fontenc") + ; // ignore this + else if (name == "inputenc") + h_inputencoding = options; + else if (name == "makeidx") + ; // ignore this + else if (name == "verbatim") + ; // ignore this + else { + if (options.size()) + h_preamble += "\\usepackage[" + options + "]{" + name + "}\n"; + else + h_preamble += "\\usepackage{" + name + "}\n"; + } +} + + string wrap(string const & cmd, string const & str) { return OPEN + cmd + ' ' + str + CLOSE; @@ -811,32 +863,16 @@ string Parser::parse(unsigned flags, mod else if (t.cs() == "usepackage") { string const options = getArg('[', ']'); string const name = getArg('{', '}'); - if (name == "a4wide") { - h_papersize = "a4"; - h_paperpackage = "widemarginsa4"; - } else if (name == "ae") - h_fontscheme = "ae"; - else if (name == "aecompl") - h_fontscheme = "ae"; - else if (name == "amsmath") - h_use_amsmath = "1"; - else if (name == "amssymb") - h_use_amsmath = "1"; - else if (name == "babel") - ; // ignore this - else if (name == "fontenc") - ; // ignore this - else if (name == "inputenc") - h_inputencoding = options; - else if (name == "makeidx") - ; // ignore this - else if (name == "verbatim") - ; // ignore this - else { - if (options.size()) - h_preamble += "\\usepackage[" + options + "]{" + name + "}\n"; - else - h_preamble += "\\usepackage{" + name + "}\n"; + if (options.empty() && name.find(',')) { + vector<string> vecnames; + split(name, vecnames, ','); + vector<string>::const_iterator it = vecnames.begin(); + vector<string>::const_iterator end = vecnames.end(); + for (; it != end; ++it) { + handle_package(trim(*it), string()); + } + } else { + handle_package(name, options); } }