-/* This file is part of
- * ======================================================
+/**
+ * \file LaTeX.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
*
- * LyX, The Document Processor
- * Copyright 1995 Matthias Ettrich
- * Copyright 1995-2001 The LyX Team.
+ * \author Alfredo Braunstein
+ * \author Lars Gullik Bjønnes
+ * \author Jean-Marc Lasgouttes
+ * \author Angus Leeming
+ * \author Dekel Tsur
*
- * This file is Copyright 1996-2001
- * Lars Gullik Bjønnes
- *
- * ======================================================
+ * Full author contact details are available in file CREDITS.
*/
#include <config.h>
#include "LaTeX.h"
#include "bufferlist.h"
#include "gettext.h"
-#include "lyxfunc.h"
#include "debug.h"
-#include "funcrequest.h"
+#include "DepTable.h"
#include "support/filetools.h"
#include "support/FileInfo.h"
+#include "support/tostr.h"
#include "support/lstrings.h"
#include "support/lyxlib.h"
#include "support/systemcall.h"
#include "support/path.h"
#include <boost/regex.hpp>
-#include "BoostFormat.h"
#include <fstream>
#include <cstdio> // sscanf
+using namespace lyx::support;
+
#ifndef CXX_GLOBAL_CSTD
using std::sscanf;
#endif
namespace {
-void showRunMessage(LyXFunc * lf, unsigned int count)
+string runMessage(unsigned int count)
{
- ostringstream str;
-#if USE_BOOST_FORMAT
- str << boost::format(_("Waiting for LaTeX run number %1$d")) % count;
-#else
- str << _("Waiting for LaTeX run number ") << count;
-#endif
- lf->dispatch(FuncRequest(LFUN_MESSAGE, STRCONV(str.str())));
+ return bformat(_("Waiting for LaTeX run number %1$s"), tostr(count));
}
-
};
+
/*
* CLASS TEXERRORS
*/
errors.push_back(newerr);
}
+
+bool operator==(Aux_Info const & a, Aux_Info const & o)
+{
+ return a.aux_file == o.aux_file &&
+ a.citations == o.citations &&
+ a.databases == o.databases &&
+ a.styles == o.styles;
+}
+
+
+bool operator!=(Aux_Info const & a, Aux_Info const & o)
+{
+ return !(a == o);
+}
+
+
/*
* CLASS LaTeX
*/
-LaTeX::LaTeX(string const & latex, string const & f, string const & p)
- : cmd(latex), file(f), path(p)
+LaTeX::LaTeX(string const & latex, LatexRunParams const & rp,
+ string const & f, string const & p)
+ : cmd(latex), file(f), path(p), runparams(rp)
{
num_errors = 0;
depfile = file + ".dep";
// What files do we have to delete?
// This will at least make latex do all the runs
- lyx::unlink(depfile);
+ unlink(depfile);
// but the reason for the error might be in a generated file...
// bibtex file
string const bbl = ChangeExtension(ofname, ".bbl");
- lyx::unlink(bbl);
+ unlink(bbl);
// makeindex file
string const ind = ChangeExtension(ofname, ".ind");
- lyx::unlink(ind);
+ unlink(ind);
// Also remove the aux file
string const aux = ChangeExtension(ofname, ".aux");
- lyx::unlink(aux);
+ unlink(aux);
}
-int LaTeX::run(TeXErrors & terr, LyXFunc * lfun)
+int LaTeX::run(TeXErrors & terr)
// 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
bool rerun = false; // rerun requested
// The class LaTeX does not know the temp path.
- bufferlist.updateIncludedTeXfiles(lyx::getcwd());
+ bufferlist.updateIncludedTeXfiles(getcwd(), runparams);
// Never write the depfile if an error was encountered.
++count;
lyxerr[Debug::LATEX] << "Run #" << count << endl;
- if (lfun) {
- showRunMessage(lfun, count);
- }
-
- this->operator()();
+ message(runMessage(count));
+
+ startscript();
scanres = scanLogFile(terr);
if (scanres & ERROR_RERUN) {
lyxerr[Debug::LATEX] << "Rerunning LaTeX" << endl;
- this->operator()();
+ startscript();
scanres = scanLogFile(terr);
}
if (head.haschanged(OnlyFilename(ChangeExtension(file, ".idx")))) {
// no checks for now
lyxerr[Debug::LATEX] << "Running MakeIndex." << endl;
- if (lfun) {
- lfun->dispatch(FuncRequest(LFUN_MESSAGE, _("Running MakeIndex.")));
- }
-
+ message(_("Running MakeIndex."));
rerun = runMakeIndex(OnlyFilename(ChangeExtension(file, ".idx")));
}
// tags is found -> run bibtex and set rerun = true;
// no checks for now
lyxerr[Debug::LATEX] << "Running BibTeX." << endl;
- if (lfun) {
- lfun->dispatch(FuncRequest(LFUN_MESSAGE, _("Running BibTeX.")));
- }
-
+ message(_("Running BibTeX."));
updateBibtexDependencies(head, bibtex_info);
rerun |= runBibTeX(bibtex_info);
} else if (!had_depfile) {
<< "Dep. file has changed or rerun requested" << endl;
lyxerr[Debug::LATEX]
<< "Run #" << count << endl;
- if (lfun) {
- showRunMessage(lfun, count);
- }
-
- this->operator()();
+ message(runMessage(count));
+ startscript();
scanres = scanLogFile(terr);
if (scanres & ERRORS) {
deleteFilesOnError();
if (head.haschanged(OnlyFilename(ChangeExtension(file, ".idx")))) {
// no checks for now
lyxerr[Debug::LATEX] << "Running MakeIndex." << endl;
- if (lfun) {
- lfun->dispatch(FuncRequest(LFUN_MESSAGE, _("Running MakeIndex.")));
- }
-
+ message(_("Running MakeIndex."));
rerun = runMakeIndex(OnlyFilename(ChangeExtension(file, ".idx")));
}
rerun = false;
++count;
lyxerr[Debug::LATEX] << "Run #" << count << endl;
- if (lfun) {
- showRunMessage(lfun, count);
- }
-
- this->operator()();
+ message(runMessage(count));
+ startscript();
scanres = scanLogFile(terr);
if (scanres & ERRORS) {
deleteFilesOnError();
}
-int LaTeX::operator()()
+int LaTeX::startscript()
{
#ifndef __EMX__
string tmp = cmd + ' ' + QuoteName(file) + " > /dev/null";