#include <fstream>
+using boost::regex;
+using boost::smatch;
+
+#ifndef CXX_GLOBAL_CSTD
+using std::sscanf;
+#endif
+
+using std::endl;
+using std::getline;
+using std::string;
+using std::ifstream;
+using std::set;
+using std::vector;
+
namespace lyx {
namespace os = support::os;
namespace fs = boost::filesystem;
-using boost::regex;
-using boost::smatch;
-
-
-#ifndef CXX_GLOBAL_CSTD
-using std::sscanf;
-#endif
-
-using std::endl;
-using std::getline;
-using std::string;
-using std::ifstream;
-using std::set;
-using std::vector;
-
// TODO: in no particular order
// - get rid of the call to
// BufferList::updateIncludedTeXfiles, this should either
LYXERR(Debug::LATEX) << "Log file: " << tmp << endl;
FileName const fn = FileName(makeAbsPath(tmp));
ifstream ifs(fn.toFilesystemEncoding().c_str());
+ bool fle_style = false;
+ static regex file_line_error(".+\\.\\D+:[0-9]+: (.+)");
string token;
while (getline(ifs, token)) {
// \r's afterwards, since we need to remove them anyway.
token = subst(token, '\0', '\r');
token = subst(token, "\r", "");
+ smatch sub;
LYXERR(Debug::LATEX) << "Log line: " << token << endl;
if (token.empty())
continue;
+ if (contains(token, "file:line:error style messages enabled"))
+ fle_style = true;
+
if (prefixIs(token, "LaTeX Warning:") ||
prefixIs(token, "! pdfTeX warning")) {
// Here shall we handle different
<< "We should rerun." << endl;
retval |= RERUN;
}
- } else if (prefixIs(token, "! ")) {
- // Ok, we have something that looks like a TeX Error
- // but what do we really have.
+ } else if (prefixIs(token, "! ") ||
+ fle_style && regex_match(token, sub, file_line_error)) {
+ // Ok, we have something that looks like a TeX Error
+ // but what do we really have.
// Just get the error description:
- string desc(token, 2);
+ string desc;
+ if (prefixIs(token, "! "))
+ desc = string(token, 2);
+ else if (fle_style)
+ desc = sub.str();
if (contains(token, "LaTeX Error:"))
retval |= LATEX_ERROR;
// get the next line
// we have a latex error
retval |= TEX_ERROR;
if (contains(desc,
- "Package babel Error: You haven't defined the language"))
+ "Package babel Error: You haven't defined the language") ||
+ contains(desc,
+ "Package babel Error: You haven't loaded the option"))
retval |= ERROR_RERUN;
// get the line number:
int line = 0;