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";