X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeX.C;h=a8106ccf2fd5f4ff3f811f22d8e967b8834441c5;hb=15a0218c0fbd310587456f1342f051a663a69d64;hp=2a70e096df653da3d2519e42c7e6a0a851e9a961;hpb=db2a04226738a236fddabeb3c5eb57610835ba5f;p=lyx.git diff --git a/src/LaTeX.C b/src/LaTeX.C index 2a70e096df..a8106ccf2f 100644 --- a/src/LaTeX.C +++ b/src/LaTeX.C @@ -3,9 +3,9 @@ * * LyX, The Document Processor * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. + * Copyright 1995-2001 The LyX Team. * - * This file is Copyright 1996-2000 + * This file is Copyright 1996-2001 * Lars Gullik Bjønnes * * ====================================================== @@ -29,9 +29,9 @@ #include "support/LRegex.h" #include "support/LSubstring.h" #include "bufferlist.h" -#include "minibuffer.h" #include "gettext.h" #include "lyx_gui_misc.h" +#include "lyxfunc.h" using std::ifstream; using std::getline; @@ -106,14 +106,14 @@ void LaTeX::deleteFilesOnError() const } -int LaTeX::run(TeXErrors & terr, MiniBuffer * minib) +int LaTeX::run(TeXErrors & terr, LyXFunc * lfun) // We know that this function will only be run if the lyx buffer // has been changed. We also know that a newly written .tex file // is always different from the previous one because of the date // in it. However it seems safe to run latex (at least) on time each // time the .tex file changes. { - int scanres = LaTeX::NO_ERRORS; + int scanres = NO_ERRORS; unsigned int count = 0; // number of times run num_errors = 0; // just to make sure. const unsigned int MAX_RUN = 6; @@ -154,7 +154,7 @@ int LaTeX::run(TeXErrors & terr, MiniBuffer * minib) head.update(); if (!head.sumchange()) { lyxerr[Debug::DEPEND] << "return no_change" << endl; - return LaTeX::NO_CHANGE; + return NO_CHANGE; } lyxerr[Debug::DEPEND] << "Dependency file has changed" << endl; @@ -173,17 +173,24 @@ int LaTeX::run(TeXErrors & terr, MiniBuffer * minib) bibtex_info_old = scanAuxFiles(aux_file); ++count; - lyxerr[Debug::LATEX] << "Run #" << count << endl; - WriteStatus(minib, string(_("LaTeX run number ")) + tostr(count)); + lyxerr[Debug::LATEX] << "Run #" << count << endl; + if (lfun) { + ostringstream str; + str << _("LaTeX run number") << ' ' << count; + lfun->Dispatch(LFUN_MESSAGE, str.str().c_str()); + } + + + //WriteStatus(lfun, string(_("LaTeX run number ")) + tostr(count)); this->operator()(); scanres = scanLogFile(terr); - if (scanres & LaTeX::ERROR_RERUN) { + if (scanres & ERROR_RERUN) { lyxerr[Debug::LATEX] << "Rerunning LaTeX" << endl; this->operator()(); scanres = scanLogFile(terr); } - if (scanres & LaTeX::ERRORS) { + if (scanres & ERRORS) { deleteFilesOnError(); return scanres; // return on error } @@ -207,20 +214,21 @@ int LaTeX::run(TeXErrors & terr, MiniBuffer * minib) if (head.haschanged(OnlyFilename(ChangeExtension(file, ".idx")))) { // no checks for now lyxerr[Debug::LATEX] << "Running MakeIndex." << endl; - WriteStatus(minib, _("Running MakeIndex.")); + if (lfun) lfun->Dispatch(LFUN_MESSAGE, _("Running MakeIndex.")); +// WriteStatus(minib, _("Running MakeIndex.")); rerun = runMakeIndex(OnlyFilename(ChangeExtension(file, ".idx"))); } // run bibtex - if (scanres & LaTeX::UNDEF_CIT - || scanres & LaTeX::RERUN - || run_bibtex) { + // if (scanres & UNDEF_CIT || scanres & RERUN || run_bibtex) + if (scanres & UNDEF_CIT || run_bibtex) { // Here we must scan the .aux file and look for // "\bibdata" and/or "\bibstyle". If one of those // tags is found -> run bibtex and set rerun = true; // no checks for now lyxerr[Debug::LATEX] << "Running BibTeX." << endl; - WriteStatus(minib, _("Running BibTeX.")); + if (lfun) lfun->Dispatch(LFUN_MESSAGE, _("Running BibTeX.")); + //WriteStatus(minib, _("Running BibTeX.")); updateBibtexDependencies(head, bibtex_info); rerun |= runBibTeX(bibtex_info); } else if (!had_depfile) @@ -248,11 +256,17 @@ int LaTeX::run(TeXErrors & terr, MiniBuffer * minib) << "Dep. file has changed or rerun requested" << endl; lyxerr[Debug::LATEX] << "Run #" << count << endl; - WriteStatus(minib, - string(_("LaTeX run number ")) + tostr(count)); + if (lfun) { + ostringstream str; + str << _("LaTeX run number") << ' ' << count; + lfun->Dispatch(LFUN_MESSAGE, str.str().c_str()); + } + +// WriteStatus(minib, +// string(_("LaTeX run number ")) + tostr(count)); this->operator()(); scanres = scanLogFile(terr); - if (scanres & LaTeX::ERRORS) { + if (scanres & ERRORS) { deleteFilesOnError(); return scanres; // return on error } @@ -276,7 +290,8 @@ int LaTeX::run(TeXErrors & terr, MiniBuffer * minib) if (head.haschanged(OnlyFilename(ChangeExtension(file, ".idx")))) { // no checks for now lyxerr[Debug::LATEX] << "Running MakeIndex." << endl; - WriteStatus(minib, _("Running MakeIndex.")); + if (lfun) lfun->Dispatch(LFUN_MESSAGE, _("Running MakeIndex.")); + //WriteStatus(minib, _("Running MakeIndex.")); rerun = runMakeIndex(OnlyFilename(ChangeExtension(file, ".idx"))); } @@ -290,17 +305,23 @@ int LaTeX::run(TeXErrors & terr, MiniBuffer * minib) // -> rerun not asked for: // just return (fall out of bottom of func) // - while ((head.sumchange() || rerun || (scanres & LaTeX::RERUN)) + while ((head.sumchange() || rerun || (scanres & RERUN)) && count < MAX_RUN) { // Yes rerun until message goes away, or until // MAX_RUNS are reached. rerun = false; ++count; lyxerr[Debug::LATEX] << "Run #" << count << endl; - WriteStatus(minib, string(_("LaTeX run number ")) + tostr(count)); + if (lfun) { + ostringstream str; + str << _("LaTeX run number") << ' ' << count; + lfun->Dispatch(LFUN_MESSAGE, str.str().c_str()); + } + +// WriteStatus(minib, string(_("LaTeX run number ")) + tostr(count)); this->operator()(); scanres = scanLogFile(terr); - if (scanres & LaTeX::ERRORS) { + if (scanres & ERRORS) { deleteFilesOnError(); return scanres; // return on error } @@ -585,7 +606,7 @@ int LaTeX::scanLogFile(TeXErrors & terr) retval |= TEX_WARNING; } else if (contains(token, "Rerun to get citations")) { // Natbib seems to use this. - retval |= RERUN; + retval |= UNDEF_CIT; } else if (contains(token, "No pages of output")) { // A dvi file was not created retval |= NO_OUTPUT; @@ -606,9 +627,9 @@ void LaTeX::deplog(DepTable & head) // files used by the LaTeX run. The files are then entered into the // dependency file. - string logfile = OnlyFilename(ChangeExtension(file, ".log")); + string const logfile = OnlyFilename(ChangeExtension(file, ".log")); - LRegex reg1(")* *\\(([^ \\)]+).*"); + LRegex reg1("\\)* *\\(([^ )]+).*"); LRegex reg2("File: ([^ ]+).*"); LRegex reg3("No file ([^ ]+)\\..*"); LRegex reg4("\\\\openout[0-9]+.*=.*`([^ ]+)'\\..*"); @@ -664,13 +685,13 @@ void LaTeX::deplog(DepTable & head) // On initial insert we want to do the update at once // since this file can not be a file generated by // the latex run. - head.insert(foundfile, true); - continue; + if (FileInfo(foundfile).exist()) + head.insert(foundfile, true); } // (2) foundfile is in the tmpdir // insert it into head - if (FileInfo(OnlyFilename(foundfile)).exist()) { + else if (FileInfo(OnlyFilename(foundfile)).exist()) { if (unwanted.exact_match(foundfile)) { lyxerr[Debug::DEPEND] << "We don't want " @@ -693,10 +714,12 @@ void LaTeX::deplog(DepTable & head) << endl; head.insert(OnlyFilename(foundfile)); } - continue; - } - lyxerr[Debug::DEPEND] - << "Not a file or we are unable to find it." - << endl; + } else + lyxerr[Debug::DEPEND] + << "Not a file or we are unable to find it." + << endl; } + + // Make sure that the main .tex file is in the dependancy file. + head.insert(OnlyFilename(file), true); }