]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeX.cpp
\\spellchecker_ignore: use LyX language name rather than langcode
[lyx.git] / src / LaTeX.cpp
index be9465495417c17b22e5904a0d0ad5e1b7af897c..6e7fe921b8fa6f9f30a14a6e9900dc4551f3941b 100644 (file)
 
 #include <config.h>
 
+#include "LaTeX.h"
+
 #include "Buffer.h"
 #include "BufferList.h"
 #include "BufferParams.h"
-#include "LaTeX.h"
 #include "LyXRC.h"
 #include "LyX.h"
 #include "DepTable.h"
 #include "Encoding.h"
+#include "Language.h"
 
 #include "support/debug.h"
+#include "support/docstring.h"
 #include "support/convert.h"
 #include "support/FileName.h"
 #include "support/filetools.h"
@@ -33,9 +36,8 @@
 #include "support/Systemcall.h"
 #include "support/os.h"
 
-#include "support/regex.h"
-
 #include <fstream>
+#include <regex>
 #include <stack>
 
 
@@ -133,6 +135,7 @@ LaTeX::LaTeX(string const & latex, OutputParams const & rp,
 
 void LaTeX::removeAuxiliaryFiles() const
 {
+       LYXERR(Debug::LATEX, "Removing auxiliary files");
        // 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
        // still would like to output (export/view) the file.
@@ -238,7 +241,7 @@ int LaTeX::run(TeXErrors & terr)
                        // Also remove all children which are included
                        Buffer const * buf = theBufferList().getBufferFromTmp(file.absFileName());
                        if (buf && buf->params().maintain_unincluded_children == BufferParams::CM_Mostly) {
-                               for (auto const incfile : buf->params().getIncludedChildren()) {
+                               for (auto const incfile : buf->params().getIncludedChildren()) {
                                        string const incm =
                                                DocFileName(changeExtension(makeAbsPath(incfile, path)
                                                                            .absFileName(), ".tex")).mangledFileName();
@@ -281,16 +284,16 @@ int LaTeX::run(TeXErrors & terr)
        message(runMessage(count));
 
        int exit_code = startscript();
-       if (exit_code == Systemcall::KILLED)
-               return Systemcall::KILLED;
+       if (exit_code == Systemcall::KILLED || exit_code == Systemcall::TIMEOUT)
+               return exit_code;
 
        scanres = scanLogFile(terr);
        if (scanres & ERROR_RERUN) {
                LYXERR(Debug::LATEX, "Rerunning LaTeX");
                terr.clearErrors();
                exit_code = startscript();
-               if (exit_code == Systemcall::KILLED)
-                       return Systemcall::KILLED;
+               if (exit_code == Systemcall::KILLED || exit_code == Systemcall::TIMEOUT)
+                       return exit_code;
                scanres = scanLogFile(terr);
        }
 
@@ -322,8 +325,8 @@ int LaTeX::run(TeXErrors & terr)
                // onlyFileName() is needed for cygwin
                int const ret = 
                                runMakeIndex(onlyFileName(idxfile.absFileName()), runparams);
-               if (ret == Systemcall::KILLED)
-                       return Systemcall::KILLED;
+               if (ret == Systemcall::KILLED || ret == Systemcall::TIMEOUT)
+                       return ret;
                FileName const ilgfile(changeExtension(file.absFileName(), ".ilg"));
                if (ilgfile.exists())
                        iscanres = scanIlgFile(terr);
@@ -338,8 +341,8 @@ int LaTeX::run(TeXErrors & terr)
        // FIXME: Sort out the real problem in DepTable.
        if (head.haschanged(nlofile) || (nlofile.exists() && nlofile.isFileEmpty())) {
                int const ret = runMakeIndexNomencl(file, ".nlo", ".nls");
-               if (ret == Systemcall::KILLED)
-                       return Systemcall::KILLED;
+               if (ret == Systemcall::KILLED || ret == Systemcall::TIMEOUT)
+                       return ret;
                rerun = true;
        }
 
@@ -375,8 +378,8 @@ int LaTeX::run(TeXErrors & terr)
                updateBibtexDependencies(head, bibtex_info);
                int exit_code;
                rerun |= runBibTeX(bibtex_info, runparams, exit_code);
-               if (exit_code == Systemcall::KILLED)
-                       return Systemcall::KILLED;
+               if (exit_code == Systemcall::KILLED || exit_code == Systemcall::TIMEOUT)
+                       return exit_code;
                FileName const blgfile(changeExtension(file.absFileName(), ".blg"));
                if (blgfile.exists())
                        bscanres = scanBlgFile(head, terr);
@@ -406,8 +409,8 @@ int LaTeX::run(TeXErrors & terr)
                LYXERR(Debug::LATEX, "Run #" << count);
                message(runMessage(count));
                int exit_code = startscript();
-               if (exit_code == Systemcall::KILLED)
-                       return Systemcall::KILLED;
+               if (exit_code == Systemcall::KILLED || exit_code == Systemcall::TIMEOUT)
+                       return exit_code;
                scanres = scanLogFile(terr);
 
                // update the depedencies
@@ -436,8 +439,8 @@ int LaTeX::run(TeXErrors & terr)
                updateBibtexDependencies(head, bibtex_info);
                int exit_code;
                rerun |= runBibTeX(bibtex_info, runparams, exit_code);
-               if (exit_code == Systemcall::KILLED)
-                       return Systemcall::KILLED;
+               if (exit_code == Systemcall::KILLED || exit_code == Systemcall::TIMEOUT)
+                       return exit_code;
                FileName const blgfile(changeExtension(file.absFileName(), ".blg"));
                if (blgfile.exists())
                        bscanres = scanBlgFile(head, terr);
@@ -459,8 +462,8 @@ int LaTeX::run(TeXErrors & terr)
                // onlyFileName() is needed for cygwin
                int const ret = runMakeIndex(onlyFileName(changeExtension(
                                file.absFileName(), ".idx")), runparams);
-               if (ret == Systemcall::KILLED)
-                       return Systemcall::KILLED;
+               if (ret == Systemcall::KILLED || ret == Systemcall::TIMEOUT)
+                       return ret;
                FileName const ilgfile(changeExtension(file.absFileName(), ".ilg"));
                if (ilgfile.exists())
                        iscanres = scanIlgFile(terr);
@@ -541,13 +544,15 @@ int LaTeX::runMakeIndex(string const & f, OutputParams const & rp,
 
        if (!rp.index_command.empty())
                tmp = rp.index_command;
+
+       Language const * doc_lang = languages.getLanguage(rp.document_language);
        
        if (contains(tmp, "$$x")) {
                // This adds appropriate [te]xindy options
                // such as language and codepage (for the
                // main document language/encoding) as well
                // as input markup (latex or xelatex)
-               string xdyopts = rp.xindy_language;
+               string xdyopts = doc_lang ? doc_lang->xindy() : string();
                if (!xdyopts.empty())
                        xdyopts = "-L " + xdyopts;
                if (rp.isFullUnicode() && rp.encoding->package() == Encoding::none) {
@@ -580,7 +585,10 @@ int LaTeX::runMakeIndex(string const & f, OutputParams const & rp,
                "idx file has been made, running index processor ("
                << tmp << ") on file " << f);
 
-       tmp = subst(tmp, "$$lang", rp.document_language);
+       if (doc_lang) {
+               tmp = subst(tmp, "$$lang", doc_lang->babel());
+               tmp = subst(tmp, "$$lcode", doc_lang->code());
+       }
        if (rp.use_indices) {
                tmp = lyxrc.splitindex_command + " -m " + quoteName(tmp);
                LYXERR(Debug::LATEX,
@@ -1619,10 +1627,9 @@ int LaTeX::scanBlgFile(DepTable & dep, TeXErrors & terr)
                } else if (regex_match(token, sub, biberError)) {
                        retval |= BIBTEX_ERROR;
                        string errstr = N_("Biber error: ") + sub.str(2);
-                       string msg = token;
                        terr.insertError(0,
                                         from_local8bit(errstr),
-                                        from_local8bit(msg));
+                                        from_local8bit(token));
                }
                prevtoken = token;
        }
@@ -1642,7 +1649,6 @@ int LaTeX::scanIlgFile(TeXErrors & terr)
        string prevtoken;
        while (getline(ifs, token)) {
                token = rtrim(token, "\r");
-               smatch sub;
                if (prefixIs(token, "!! "))
                        prevtoken = token;
                else if (!prevtoken.empty()) {
@@ -1657,10 +1663,9 @@ int LaTeX::scanIlgFile(TeXErrors & terr)
                } else if (prefixIs(token, "ERROR: ")) {
                        retval |= BIBTEX_ERROR;
                        string errstr = N_("Xindy error: ") + token.substr(6);
-                       string msg = token;
                        terr.insertError(0,
                                         from_local8bit(errstr),
-                                        from_local8bit(msg));
+                                        from_local8bit(token));
                }
        }
        return retval;