The attached, fully tested patch fixes several things in tex2lyx:
- interpret relative filenames the same way as tex
- don't convert verbatim files
- recognize files without extension

I'll commit this unless somebody objects.


Georg
diff -p -r -U 3 -X excl.tmp lyx-1.4-clean/src/tex2lyx/ChangeLog lyx-1.4-cvs/src/tex2lyx/ChangeLog
--- lyx-1.4-clean/src/tex2lyx/ChangeLog	2005-03-31 20:49:20.000000000 +0200
+++ lyx-1.4-cvs/src/tex2lyx/ChangeLog	2005-04-10 17:55:48.000000000 +0200
@@ -1,3 +1,11 @@
+2005-04-10  Georg Baum  <[EMAIL PROTECTED]>
+
+	* text.C (normalize_filename): new, split off from parse_text
+	* text.C (parse_text): Don't convert \verbatiminput files
+	* text.C (parse_text): Interpret relative file names in \include,
+	\input and \verbatiminput correctly and replace \lyxdot and \space
+	* text.C (parse_text): Recognize \input files without extension
+
 2005-03-31  Georg Baum  <[EMAIL PROTECTED]>
 
 	* text.C (parse_text): Really fix \start_of_appendix output
diff -p -r -U 3 -X excl.tmp lyx-1.4-clean/src/tex2lyx/text.C lyx-1.4-cvs/src/tex2lyx/text.C
--- lyx-1.4-clean/src/tex2lyx/text.C	2005-03-31 20:49:21.000000000 +0200
+++ lyx-1.4-cvs/src/tex2lyx/text.C	2005-04-10 17:41:06.000000000 +0200
@@ -29,6 +29,7 @@
 #include <sstream>
 #include <vector>
 
+using lyx::support::ChangeExtension;
 using lyx::support::MakeAbsPath;
 using lyx::support::rtrim;
 using lyx::support::suffixIs;
@@ -170,11 +185,16 @@ char const * const known_dvips_graphics_
 
 /*!
  * Graphics file extensions known by the pdftex driver of the graphics package.
- * \see known_dvips_graphics_formats
+ * \sa known_dvips_graphics_formats
  */
 char const * const known_pdftex_graphics_formats[] = {"png", "pdf", "jpg",
 "mps", "tif", 0};
 
+/*!
+ * Known file extensions for TeX files as used by \\include.
+ */
+char const * const known_tex_extensions[] = {"tex", 0};
+
 
 /// splits "x=z, y=b" into a map
 map<string, string> split_map(string const & s)
@@ -868,6 +1207,18 @@ std::pair<string, string> getCiteArgumen
 	return std::make_pair(before, after);
 }
 
+
+/// Convert filenames with TeX macros and/or quotes to something LyX can understand
+string const normalize_filename(string const & name)
+{
+	string f = subst(name, "\\lyxdot ", ".");
+	f = subst(f, "\\lyxdot", ".");
+	f = subst(f, "\\space ", " ");
+	f = subst(f, "\\space", " ");
+	f = trim(f, "\"");
+	return f;
+}
+
 } // anonymous namespace
 
 
@@ -1195,7 +1609,7 @@ void parse_text(Parser & p, ostream & os
 			map<string, string> opts = split_map(p.getArg('[', ']'));
 			if (clip)
 				opts["clip"] = string();
-			string name = subst(p.verbatim_item(), "\\lyxdot ", ".");
+			string name = normalize_filename(p.verbatim_item());
 
 			string const path = getMasterFilePath();
 			// We want to preserve relative / absolute filenames,
@@ -1829,11 +2302,36 @@ void parse_text(Parser & p, ostream & os
 				name += p.get_token().asInput();
 			context.check_layout(os);
 			begin_inset(os, "Include ");
-			string filename(p.getArg('{', '}'));
-			string lyxname(lyx::support::ChangeExtension(filename, ".lyx"));
-			if (tex2lyx(filename, lyxname)) {
-				os << name << '{' << lyxname << "}\n";
+			string filename(normalize_filename(p.getArg('{', '}')));
+			string const path = getMasterFilePath();
+			// We want to preserve relative / absolute filenames,
+			// therefore path is only used for testing
+			if (t.cs() == "include" &&
+			    !fs::exists(MakeAbsPath(filename, path))) {
+				// The file extension is probably missing.
+				// Now try to find it out.
+				string const tex_name =
+					find_file(filename, path,
+					          known_tex_extensions);
+				if (!tex_name.empty())
+					filename = tex_name;
+			}
+			if (fs::exists(MakeAbsPath(filename, path))) {
+				string const abstexname(
+					MakeAbsPath(filename, path));
+				string const abslyxname(
+					ChangeExtension(abstexname, ".lyx"));
+				string const lyxname(
+					ChangeExtension(filename, ".lyx"));
+				if (t.cs() != "verbatiminput" &&
+				    tex2lyx(abstexname, abslyxname)) {
+					os << name << '{' << lyxname << "}\n";
+				} else {
+					os << name << '{' << filename << "}\n";
+				}
 			} else {
+				cerr << "Warning: Could not find included file '"
+				     << filename << "'." << endl;
 				os << name << '{' << filename << "}\n";
 			}
 			os << "preview false\n";

Reply via email to