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);
 			}
 		}
 

Reply via email to