On Fri, Jun 24, 2011 at 12:46:25AM +0200, Enrico Forestieri wrote:
> On Thu, Jun 23, 2011 at 11:30:39PM +0200, Jean-Marc Lasgouttes wrote:
> > IMO, input@path is a hack that does not work in all cases. So as a
> > fallback solution, it is bad. And it does force to add docdir at the
> > front of texinputs.
> 
> That is true and also invalidates my previous example, so maybe it is
> better to simply get rid of \input@path and educate people to include
> the docdir in the TEXINPUTS prefix if suddenly a file is not found
> anymore.

The attached patch removes \input@path handling. I'll commit it if there
are no objections.

-- 
Enrico
Index: src/insets/InsetInclude.cpp
===================================================================
--- src/insets/InsetInclude.cpp	(revisione 39515)
+++ src/insets/InsetInclude.cpp	(copia locale)
@@ -605,10 +605,6 @@ void InsetInclude::latex(otexstream & os
 			formats.extension(inc_format)));
 
 		// FIXME: handle non existing files
-		// FIXME: Second argument is irrelevant!
-		// since only_body is true, makeLaTeXFile will not look at second
-		// argument. Should we set it to string(), or should makeLaTeXFile
-		// make use of it somehow? (JMarc 20031002)
 		// The included file might be written in a different encoding
 		// and language.
 		Encoding const * const oldEnc = runparams.encoding;
@@ -621,8 +617,7 @@ void InsetInclude::latex(otexstream & os
 		runparams.master_language = buffer().params().language;
 		runparams.par_begin = 0;
 		runparams.par_end = tmp->paragraphs().size();
-		if (!tmp->makeLaTeXFile(tmpwritefile, masterFileName(buffer()).
-				onlyPath().absFileName(), runparams, false)) {
+		if (!tmp->makeLaTeXFile(tmpwritefile, runparams, false)) {
 			docstring msg = bformat(_("Included file `%1$s' "
 					"was not exported correctly.\nWarning: "
 					"LaTeX export is probably incomplete."),
@@ -661,7 +656,8 @@ void InsetInclude::latex(otexstream & os
 		// In this case, it's not a LyX file, so we copy the file
 		// to the temp dir, so that .aux files etc. are not created
 		// in the original dir. Files included by this file will be
-		// found via input@path, see ../Buffer.cpp.
+		// found via the environment variable TEXINPUTS, which may be
+		// set in preferences and by default includes the original dir.
 		unsigned long const checksum_in  = included_file.checksum();
 		unsigned long const checksum_out = writefile.checksum();
 
Index: src/graphics/PreviewLoader.cpp
===================================================================
--- src/graphics/PreviewLoader.cpp	(revisione 39515)
+++ src/graphics/PreviewLoader.cpp	(copia locale)
@@ -710,7 +710,7 @@ void PreviewLoader::Impl::dumpPreamble(o
 	runparams.nice = true;
 	runparams.moving_arg = true;
 	runparams.free_spacing = true;
-	buffer_.writeLaTeXSource(os, buffer_.filePath(), runparams, true, false);
+	buffer_.writeLaTeXSource(os, runparams, true, false);
 
 	// FIXME! This is a HACK! The proper fix is to control the 'true'
 	// passed to WriteStream below:
Index: src/Buffer.h
===================================================================
--- src/Buffer.h	(revisione 39515)
+++ src/Buffer.h	(copia locale)
@@ -276,7 +276,6 @@ public:
 
 	/// Just a wrapper for writeLaTeXSource, first creating the ofstream.
 	bool makeLaTeXFile(support::FileName const & filename,
-			   std::string const & original_path,
 			   OutputParams const &,
 			   bool output_preamble = true,
 			   bool output_body = true) const;
@@ -303,7 +302,6 @@ public:
 	    \endcode
 	 */
 	void writeLaTeXSource(otexstream & os,
-			   std::string const & original_path,
 			   OutputParams const &,
 			   bool output_preamble = true,
 			   bool output_body = true) const;
Index: src/BufferList.cpp
===================================================================
--- src/BufferList.cpp	(revisione 39515)
+++ src/BufferList.cpp	(copia locale)
@@ -212,8 +212,7 @@ void BufferList::updateIncludedTeXfiles(
 	for (; it != end; ++it) {
 		if (!(*it)->isDepClean(masterTmpDir)) {
 			string writefile = addName(masterTmpDir, (*it)->latexName());
-			(*it)->makeLaTeXFile(FileName(writefile), masterTmpDir,
-					     runparams, false);
+			(*it)->makeLaTeXFile(FileName(writefile), runparams, false);
 			(*it)->markDepClean(masterTmpDir);
 		}
 	}
Index: src/Buffer.cpp
===================================================================
--- src/Buffer.cpp	(revisione 39515)
+++ src/Buffer.cpp	(copia locale)
@@ -1300,7 +1300,6 @@ bool Buffer::write(ostream & ofs) const
 
 
 bool Buffer::makeLaTeXFile(FileName const & fname,
-			   string const & original_path,
 			   OutputParams const & runparams_in,
 			   bool output_preamble, bool output_body) const
 {
@@ -1341,8 +1340,7 @@ bool Buffer::makeLaTeXFile(FileName cons
 
 	try {
 		os.texrow().reset();
-		writeLaTeXSource(os, original_path,
-		      runparams, output_preamble, output_body);
+		writeLaTeXSource(os, runparams, output_preamble, output_body);
 	}
 	catch (EncodingException & e) {
 		odocstringstream ods;
@@ -1385,7 +1383,6 @@ bool Buffer::makeLaTeXFile(FileName cons
 
 
 void Buffer::writeLaTeXSource(otexstream & os,
-			   string const & original_path,
 			   OutputParams const & runparams_in,
 			   bool const output_preamble, bool const output_body) const
 {
@@ -1412,57 +1409,12 @@ void Buffer::writeLaTeXSource(otexstream
 	}
 	LYXERR(Debug::INFO, "lyx document header finished");
 
-	// There are a few differences between nice LaTeX and usual files:
-	// usual is \batchmode and has a
-	// special input@path to allow the including of figures
-	// with either \input or \includegraphics (what figinsets do).
-	// input@path is set when the actual parameter
-	// original_path is set. This is done for usual tex-file, but not
-	// for nice-latex-file. (Matthias 250696)
-	// Note that input@path is only needed for something the user does
-	// in the preamble, included .tex files or ERT, files included by
-	// LyX work without it.
+	// With respect to nice LaTeX, usual files have \batchmode
 	if (output_preamble) {
 		if (!runparams.nice) {
 			// code for usual, NOT nice-latex-file
 			os << "\\batchmode\n"; // changed from \nonstopmode
 		}
-		if (!original_path.empty()) {
-			// FIXME UNICODE
-			// We don't know the encoding of inputpath
-			docstring const inputpath = from_utf8(support::latex_path(original_path));
-			docstring uncodable_glyphs;
-			Encoding const * const enc = runparams.encoding;
-			if (enc) {
-				for (size_t n = 0; n < inputpath.size(); ++n) {
-					docstring const glyph =
-						docstring(1, inputpath[n]);
-					if (enc->latexChar(inputpath[n], true) != glyph) {
-						LYXERR0("Uncodable character '"
-							<< glyph
-							<< "' in input path!");
-						uncodable_glyphs += glyph;
-					}
-				}
-			}
-
-			// warn user if we found uncodable glyphs.
-			if (!uncodable_glyphs.empty()) {
-				frontend::Alert::warning(_("Uncodable character in file path"),
-						support::bformat(_("The path of your document\n"
-						  "(%1$s)\n"
-						  "contains glyphs that are unknown in the\n"
-						  "current document encoding (namely %2$s).\n"
-						  "This will likely result in incomplete output.\n\n"
-						  "Choose an appropriate document encoding (such as utf8)\n"
-						  "or change the file path name."), inputpath, uncodable_glyphs));
-			} else {
-				os << "\\makeatletter\n"
-				   << "\\def\\input@path{{"
-				   << inputpath << "/}}\n"
-				   << "\\makeatother\n";
-			}
-		}
 
 		// get parent macros (if this buffer has a parent) which will be
 		// written at the document begin further down.
@@ -1710,7 +1662,6 @@ int Buffer::runChktex()
 	// get LaTeX-Filename
 	FileName const path(temppath());
 	string const name = addName(path.absFileName(), latexName());
-	string const org_path = filePath();
 
 	PathChanger p(path); // path to LaTeX file
 	message(_("Running chktex..."));
@@ -1720,7 +1671,7 @@ int Buffer::runChktex()
 	runparams.flavor = OutputParams::LATEX;
 	runparams.nice = false;
 	runparams.linelen = lyxrc.plaintext_linelen;
-	makeLaTeXFile(FileName(name), org_path, runparams);
+	makeLaTeXFile(FileName(name), runparams);
 
 	TeXErrors terr;
 	Chktex chktex(lyxrc.chktex_command, onlyFileName(name), filePath());
@@ -3143,7 +3094,7 @@ void Buffer::getSourceCode(odocstream &
 		else {
 			// latex or literate
 			otexstream ots(os, d->texrow);
-			writeLaTeXSource(ots, string(), runparams, true, true);
+			writeLaTeXSource(ots, runparams, true, true);
 		}
 	} else {
 		runparams.par_begin = par_begin;
@@ -3526,7 +3477,7 @@ bool Buffer::doExport(string const & for
 	// LaTeX backend
 	else if (backend_format == format) {
 		runparams.nice = true;
-		if (!makeLaTeXFile(FileName(filename), string(), runparams)) {
+		if (!makeLaTeXFile(FileName(filename), runparams)) {
 			if (d->cloned_buffer_) {
 				d->cloned_buffer_->d->errorLists["Export"] =
 					d->errorLists["Export"];
@@ -3540,7 +3491,7 @@ bool Buffer::doExport(string const & for
 		return false;
 	} else {
 		runparams.nice = false;
-		if (!makeLaTeXFile(FileName(filename), filePath(), runparams)) {
+		if (!makeLaTeXFile(FileName(filename), runparams)) {
 			if (d->cloned_buffer_) {
 				d->cloned_buffer_->d->errorLists["Export"] =
 					d->errorLists["Export"];

Reply via email to