]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeX.cpp
Cmake tests: macro setmarkedtestlabel() worked only by chance
[lyx.git] / src / LaTeX.cpp
index ce78b14a2592188b2eab9bce820480bcf728ced8..4278a3543c1c0ef70286ba98bdb83f175c727594 100644 (file)
@@ -92,8 +92,9 @@ bool operator!=(AuxInfo const & a, AuxInfo const & o)
  */
 
 LaTeX::LaTeX(string const & latex, OutputParams const & rp,
-            FileName const & f, string const & p)
-       : cmd(latex), file(f), path(p), runparams(rp), biber(false)
+            FileName const & f, string const & p, string const & lp,
+            bool const clean_start)
+       : cmd(latex), file(f), path(p), lpath(lp), runparams(rp), biber(false)
 {
        num_errors = 0;
        if (prefixIs(cmd, "pdf")) { // Do we use pdflatex ?
@@ -105,10 +106,12 @@ LaTeX::LaTeX(string const & latex, OutputParams const & rp,
                output_file =
                        FileName(changeExtension(file.absFileName(), ".dvi"));
        }
+       if (clean_start)
+               removeAuxiliaryFiles();
 }
 
 
-void LaTeX::deleteFilesOnError() const
+void LaTeX::removeAuxiliaryFiles() const
 {
        // Note that we do not always call this function when there is an error.
        // For example, if there is an error but an output file is produced we
@@ -169,8 +172,6 @@ int LaTeX::run(TeXErrors & terr)
        theBufferList().updateIncludedTeXfiles(FileName::getcwd().absFileName(),
                runparams);
 
-       // Never write the depfile if an error was encountered.
-
        // 0
        // first check if the file dependencies exist:
        //     ->If it does exist
@@ -240,13 +241,6 @@ int LaTeX::run(TeXErrors & terr)
                scanres = scanLogFile(terr);
        }
 
-       if (scanres & ERRORS) {
-               // We no longer run deleteFilesOnError() here
-               // because we now show a resulting PDF even if
-               // there was an error.
-               return scanres; // return on error
-       }
-
        vector<AuxInfo> const bibtex_info = scanAuxFiles(aux_file);
        if (!run_bibtex && bibtex_info_old != bibtex_info)
                run_bibtex = true;
@@ -335,8 +329,6 @@ int LaTeX::run(TeXErrors & terr)
                message(runMessage(count));
                startscript();
                scanres = scanLogFile(terr);
-               if (scanres & ERRORS)
-                       return scanres; // return on error
 
                // update the depedencies
                deplog(head); // reads the latex log
@@ -407,8 +399,6 @@ int LaTeX::run(TeXErrors & terr)
                message(runMessage(count));
                startscript();
                scanres = scanLogFile(terr);
-               if (scanres & ERRORS)
-                       return scanres; // return on error
 
                // keep this updated
                head.update();
@@ -417,16 +407,6 @@ int LaTeX::run(TeXErrors & terr)
        // Write the dependencies to file.
        head.write(depfile);
 
-       if (scanres & NO_OUTPUT) {
-               // A previous run could have left a PDF and since
-               // no PDF is created if NO_OUTPUT, we remove any
-               // existing PDF and temporary files so that an
-               // incorrect PDF is not displayed, which could otherwise
-               // happen if View is run again because the checksum will
-               // be the same so any lingering PDF will be viewed.
-               deleteFilesOnError();
-       }
-
        if (exit_code)
                scanres |= NONZERO_ERROR;
 
@@ -446,7 +426,7 @@ int LaTeX::startscript()
                     + quoteName(onlyFileName(file.toFilesystemEncoding()))
                     + " > " + os::nulldev();
        Systemcall one;
-       return one.startscript(Systemcall::Wait, tmp, path);
+       return one.startscript(Systemcall::Wait, tmp, path, lpath);
 }
 
 
@@ -473,7 +453,7 @@ bool LaTeX::runMakeIndex(string const & f, OutputParams const & runparams,
        tmp += quoteName(f);
        tmp += params;
        Systemcall one;
-       one.startscript(Systemcall::Wait, tmp, path);
+       one.startscript(Systemcall::Wait, tmp, path, lpath);
        return true;
 }
 
@@ -489,7 +469,7 @@ bool LaTeX::runMakeIndexNomencl(FileName const & file,
        tmp += " -o "
                + onlyFileName(changeExtension(file.toFilesystemEncoding(), nls));
        Systemcall one;
-       one.startscript(Systemcall::Wait, tmp, path);
+       one.startscript(Systemcall::Wait, tmp, path, lpath);
        return true;
 }
 
@@ -629,7 +609,7 @@ bool LaTeX::runBibTeX(vector<AuxInfo> const & bibtex_info,
                tmp += quoteName(onlyFileName(removeExtension(
                                it->aux_file.absFileName())));
                Systemcall one;
-               one.startscript(Systemcall::Wait, tmp, path);
+               one.startscript(Systemcall::Wait, tmp, path, lpath);
        }
        // Return whether bibtex was run
        return result;
@@ -895,14 +875,22 @@ int LaTeX::scanLogFile(TeXErrors & terr)
                        } else if (contains(token, "That makes 100 errors")) {
                                // More than 100 errors were reprted
                                retval |= TOO_MANY_ERRORS;
-                       } else if (prefixIs(token, "!pdfTeX error:")){
+                       } else if (prefixIs(token, "!pdfTeX error:")) {
                                // otherwise we dont catch e.g.:
                                // !pdfTeX error: pdflatex (file feyn10): Font feyn10 at 600 not found
                                retval |= ERRORS;
-                                       terr.insertError(0,
-                                                        from_local8bit("pdfTeX Error"),
-                                                        from_local8bit(token),
-                                                        child_name);
+                               terr.insertError(0,
+                                                from_local8bit("pdfTeX Error"),
+                                                from_local8bit(token),
+                                                child_name);
+                       } else if (prefixIs(token, "Missing character: There is no ")) {
+                               // XeTeX/LuaTeX error about missing glyph in selected font
+                               // (bug 9610)
+                               retval |= LATEX_ERROR;
+                               terr.insertError(0,
+                                                from_local8bit("Missing glyphs!"),
+                                                from_local8bit(token),
+                                                child_name);
                        }
                }
        }