]> git.lyx.org Git - features.git/commitdiff
Fix bug #6170 (Latex Compiler error when lyx file is located in a path which contains...
authorEnrico Forestieri <forenr@lyx.org>
Tue, 30 Aug 2011 00:13:29 +0000 (00:13 +0000)
committerEnrico Forestieri <forenr@lyx.org>
Tue, 30 Aug 2011 00:13:29 +0000 (00:13 +0000)
This removes \input@path handling.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_2_0_X@39568 a592a061-630c-0410-9148-cb99ea01b6c8

src/Buffer.cpp
src/Buffer.h
src/BufferList.cpp
src/graphics/PreviewLoader.cpp
src/insets/InsetInclude.cpp
status.20x

index 8151cc5128a719fad5ec4673c3d517cbe0884448..c6a819afcec95e609b2b089540cb608061577d63 100644 (file)
@@ -1239,7 +1239,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
 {
@@ -1272,8 +1271,7 @@ bool Buffer::makeLaTeXFile(FileName const & fname,
        otexstream os(ofs, d->texrow);
        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;
@@ -1316,7 +1314,6 @@ bool Buffer::makeLaTeXFile(FileName const & fname,
 
 
 void Buffer::writeLaTeXSource(otexstream & os,
-                          string const & original_path,
                           OutputParams const & runparams_in,
                           bool const output_preamble, bool const output_body) const
 {
@@ -1352,57 +1349,12 @@ void Buffer::writeLaTeXSource(otexstream & os,
        // macros will be put in the prefix anyway.
        updateMacroInstances(OutputUpdate);
 
-       // 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.
@@ -1646,7 +1598,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..."));
@@ -1656,7 +1607,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());
@@ -3071,7 +3022,7 @@ void Buffer::getSourceCode(odocstream & os, string const format,
                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;
@@ -3469,7 +3420,7 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
        // 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"];
@@ -3483,7 +3434,7 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
                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"];
index 0c99e1feb85afcc84eb7dbd51b06d4f21239304e..5472f741dee80801eb9fc9cbc25f9e2ea3d23c96 100644 (file)
@@ -268,7 +268,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;
@@ -295,7 +294,6 @@ public:
            \endcode
         */
        void writeLaTeXSource(otexstream & os,
-                          std::string const & original_path,
                           OutputParams const &,
                           bool output_preamble = true,
                           bool output_body = true) const;
index e19c8aa63d3f86523e7da5f4609fef018c28cb82..01b344f039d85920aee497935fd01a4ddd245326 100644 (file)
@@ -212,8 +212,7 @@ void BufferList::updateIncludedTeXfiles(string const & masterTmpDir,
        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 c7c55d2aabfbdadc37cccb73e154b6be513bb536..d2b15eb9516052d79ecc3752465efdac9d7b9344 100644 (file)
@@ -710,7 +710,7 @@ void PreviewLoader::Impl::dumpPreamble(otexstream & os) const
        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 c74ec631aa1a5d0197f37f06f65ea1768926c395..e5d01f68487d56e2a95c663df0249619cb445240 100644 (file)
@@ -605,10 +605,6 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const
                        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, OutputParams const & runparams) const
                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, OutputParams const & runparams) const
                // 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 30892d2532c809f75571bb0f984e01a7e359bfe6..8394a633cc8b5752af6c766a40f0b6bdfc0473eb 100644 (file)
@@ -41,6 +41,9 @@ What's new
 
 - Allow LaTeX import of \uline (bug 7640).
 
+- Fix compilation error occurring when a LyX document resides in a directory
+  whose name contains characters that are special to LaTeX (bug 6170).
+
 
 * USER INTERFACE