]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeX.C
John's Layout Tabular UI improvements and Martins fixes to clearing the
[lyx.git] / src / LaTeX.C
index 824d2970827acde4867267da8fca6429e57b9212..8c812a389fcb00a2d65ec9e4f3885c6cad2da1e2 100644 (file)
@@ -18,8 +18,9 @@
 #endif
 #include <fstream>
 
-#include "support/filetools.h"
 #include "LaTeX.h"
+#include "support/filetools.h"
+#include "support/os.h"
 #include "support/FileInfo.h"
 #include "debug.h"
 #include "support/lyxlib.h"
@@ -75,8 +76,12 @@ LaTeX::LaTeX(string const & latex, string const & f, string const & p)
 {
        num_errors = 0;
        depfile = file + ".dep";
-       if (prefixIs(cmd, "pdf")) // Do we use pdflatex ?
+       if (prefixIs(cmd, "pdf")) // Do we use pdflatex ?
                depfile += "-pdf";
+               output_file = ChangeExtension(file,".pdf");
+       } else {
+               output_file = ChangeExtension(file,".dvi");
+       }
 }
 
 
@@ -153,12 +158,19 @@ int LaTeX::run(TeXErrors & terr, LyXFunc * lfun)
                head.read(depfile);
                // Update the checksums
                head.update();
-               if (!head.sumchange()) {
+               // Can't just check if anything has changed because it might have aborted
+               // on error last time... in which cas we need to re-run latex
+               // and collect the error messages (even if they are the same).
+               if (!FileInfo(output_file).exist()) {
+                       lyxerr[Debug::DEPEND]
+                               << "re-running LaTeX because output file doesn't exist." << endl;
+               } else if (!head.sumchange()) {
                        lyxerr[Debug::DEPEND] << "return no_change" << endl;
                        return NO_CHANGE;
+               } else {
+                       lyxerr[Debug::DEPEND]
+                               << "Dependency file has changed" << endl;
                }
-               lyxerr[Debug::DEPEND]
-                       << "Dependency file has changed" << endl;
 
                if (head.extchanged(".bib") || head.extchanged(".bst"))
                        run_bibtex = true;
@@ -649,6 +661,11 @@ void LaTeX::deplog(DepTable & head)
        LRegex reg2("File: ([^ ]+).*");
        LRegex reg3("No file ([^ ]+)\\..*");
        LRegex reg4("\\\\openout[0-9]+.*=.*`([^ ]+)'\\..*");
+       // If an index should be created, MikTex does not write a line like
+       //    \openout# = 'sample,idx'.
+       // but intstead only a line like this into the log:
+       //   Writing index file sample.idx
+       LRegex reg5("Writing index file ([^ ]+).*");
        LRegex unwanted("^.*\\.(aux|log|dvi|bbl|ind|glo)$");
        
        ifstream ifs(logfile.c_str());
@@ -680,10 +697,17 @@ void LaTeX::deplog(DepTable & head)
                        LRegex::SubMatches const & sub = reg4.exec(token);
                        foundfile = LSubstring(token, sub[1].first,
                                               sub[1].second);
+               } else if (reg5.exact_match(token)) {
+                       LRegex::SubMatches const & sub = reg5.exec(token);
+                       foundfile = LSubstring(token, sub[1].first,
+                                              sub[1].second);
                } else {
                        continue;
                }
 
+               // convert from native os path to unix path
+               foundfile = os::internal_path(foundfile);
+               
                lyxerr[Debug::DEPEND] << "Found file: " 
                                      << foundfile << endl;