return bformat(_("Waiting for LaTeX run number %1$d"), count);
}
-} // anon namespace
+} // namespace
/*
* CLASS TEXERRORS
onlyFileName(changeExtension(file.absFileName(), ".log"));
LYXERR(Debug::LATEX, "Log file: " << tmp);
FileName const fn = FileName(makeAbsPath(tmp));
+ // FIXME we should use an ifdocstream here and a docstring for token
+ // below. The encoding of the log file depends on the _output_ (font)
+ // encoding of the TeX file (T1, TU etc.). See #10728.
ifstream ifs(fn.toFilesystemEncoding().c_str());
bool fle_style = false;
static regex const file_line_error(".+\\.\\D+:[0-9]+: (.+)");
- static regex const child_file(".*([0-9]+[A-Za-z]*_.+\\.tex).*");
+ static regex const child_file("[^0-9]*([0-9]+[A-Za-z]*_.+\\.tex).*");
// Flag for 'File ended while scanning' message.
// We need to wait for subsequent processing.
string wait_for_error;
string const substr = token.substr(i + 1, len);
if (regex_match(substr, sub, child_file)) {
string const name = sub.str(1);
- child.push(make_pair(name, pnest));
- children.push_back(name);
+ // Sometimes also masters have a name that matches
+ // (if their name starts with a number and _)
+ if (name != file.onlyFileName()) {
+ child.push(make_pair(name, pnest));
+ children.push_back(name);
+ }
i += len;
}
} else if (token[i] == ')') {
} while (!contains(tmp, "(job aborted"));
terr.insertError(0,
- from_local8bit("Emergency stop"),
+ from_ascii("Emergency stop"),
from_local8bit(errstr),
child_name);
}
// !pdfTeX error: pdflatex (file feyn10): Font feyn10 at 600 not found
retval |= ERRORS;
terr.insertError(0,
- from_local8bit("pdfTeX Error"),
+ from_ascii("pdfTeX Error"),
from_local8bit(token),
child_name);
} else if (!ignore_missing_glyphs
// Warning about missing glyph in selected font
// may be dataloss (bug 9610)
// but can be ignored for 'nullfont' (bug 10394).
- retval |= LATEX_ERROR;
- terr.insertError(0,
- from_local8bit("Missing glyphs!"),
- from_local8bit(token),
- child_name);
+ // as well as for ZERO WIDTH NON-JOINER (0x200C) which is
+ // missing in many fonts and output for ligature break (bug 10727).
+ // Since this error only occurs with utf8 output, we can safely assume
+ // that the log file is utf8-encoded
+ docstring const utoken = from_utf8(token);
+ if (!contains(utoken, 0x200C)) {
+ retval |= LATEX_ERROR;
+ terr.insertError(0,
+ from_ascii("Missing glyphs!"),
+ utoken,
+ child_name);
+ }
} else if (!wait_for_error.empty()) {
// We collect information until we know we have an error.
wait_for_error += token + '\n';
}
-int iterateLine(string const & token, regex const & reg, string const & closing,
- int fragment_pos, DepTable & head)
+int iterateLine(string const & token, regex const & reg, string const & opening,
+ string const & closing, int fragment_pos, DepTable & head)
{
smatch what;
string::const_iterator first = token.begin();
// since we had a closing bracket,
// do not investigate further
fragment = false;
+ } else if (what.str(2) == opening) {
+ // if we have another opening bracket,
+ // we might have a nested file chain
+ // as is (file.ext (subfile.ext))
+ fragment = !handleFoundFile(rtrim(what.str(1)), head);
+ // decrease first position by one in order to
+ // consider the opening delimiter on next iteration
+ if (first > token.begin())
+ --first;
} else
// if we have no closing bracket,
// try to handle as file nevertheless
return result;
}
-} // anon namespace
+} // namespace
void LaTeX::deplog(DepTable & head)
if (regex_match(token, sub, reg5)) {
// search for strings in <...>
static regex const reg5_1("<([^>]+)(.)");
- fragment_pos = iterateLine(token, reg5_1, ">",
+ fragment_pos = iterateLine(token, reg5_1, "<", ">",
fragment_pos, head);
fragment = (fragment_pos != -1);
}
if (regex_match(token, sub, reg6)) {
// search for strings in (...)
static regex const reg6_1("\\(([^()]+)(.)");
- fragment_pos = iterateLine(token, reg6_1, ")",
+ fragment_pos = iterateLine(token, reg6_1, "(", ")",
fragment_pos, head);
fragment = (fragment_pos != -1);
}