}
-int LaTeX::runMakeIndex(string const & f, OutputParams const & runparams,
+int LaTeX::runMakeIndex(string const & f, OutputParams const & rp,
string const & params)
{
- string tmp = runparams.use_japanese ?
+ string tmp = rp.use_japanese ?
lyxrc.jindex_command : lyxrc.index_command;
- if (!runparams.index_command.empty())
- tmp = runparams.index_command;
+ if (!rp.index_command.empty())
+ tmp = rp.index_command;
LYXERR(Debug::LATEX,
"idx file has been made, running index processor ("
<< tmp << ") on file " << f);
- tmp = subst(tmp, "$$lang", runparams.document_language);
- if (runparams.use_indices) {
+ tmp = subst(tmp, "$$lang", rp.document_language);
+ if (rp.use_indices) {
tmp = lyxrc.splitindex_command + " -m " + quoteName(tmp);
LYXERR(Debug::LATEX,
"Multiple indices. Using splitindex command: " << tmp);
}
-int LaTeX::runMakeIndexNomencl(FileName const & file,
+int LaTeX::runMakeIndexNomencl(FileName const & fname,
string const & nlo, string const & nls)
{
LYXERR(Debug::LATEX, "Running MakeIndex for nomencl.");
message(_("Running MakeIndex for nomencl."));
string tmp = lyxrc.nomencl_command + ' ';
// onlyFileName() is needed for cygwin
- tmp += quoteName(onlyFileName(changeExtension(file.absFileName(), nlo)));
+ tmp += quoteName(onlyFileName(changeExtension(fname.absFileName(), nlo)));
tmp += " -o "
- + onlyFileName(changeExtension(file.toFilesystemEncoding(), nls));
+ + onlyFileName(changeExtension(fname.toFilesystemEncoding(), nls));
Systemcall one;
Systemcall::Starttype const starttype =
allow_cancel ? Systemcall::WaitLoop : Systemcall::Wait;
vector<AuxInfo> const
-LaTeX::scanAuxFiles(FileName const & file, bool const only_childbibs)
+LaTeX::scanAuxFiles(FileName const & fname, bool const only_childbibs)
{
vector<AuxInfo> result;
if (only_childbibs) {
for (string const &s: children) {
FileName fn =
- makeAbsPath(s, file.onlyPath().realPath());
+ makeAbsPath(s, fname.onlyPath().realPath());
fn.changeExtension("aux");
if (fn.exists())
result.push_back(scanAuxFile(fn));
return result;
}
- result.push_back(scanAuxFile(file));
+ result.push_back(scanAuxFile(fname));
// This is for bibtopic
- string const basename = removeExtension(file.absFileName());
+ string const basename = removeExtension(fname.absFileName());
for (int i = 1; i < 1000; ++i) {
FileName const file2(basename
+ '.' + convert<string>(i)
}
-AuxInfo const LaTeX::scanAuxFile(FileName const & file)
+AuxInfo const LaTeX::scanAuxFile(FileName const & fname)
{
AuxInfo result;
- result.aux_file = file;
- scanAuxFile(file, result);
+ result.aux_file = fname;
+ scanAuxFile(fname, result);
return result;
}
-void LaTeX::scanAuxFile(FileName const & file, AuxInfo & aux_info)
+void LaTeX::scanAuxFile(FileName const & fname, AuxInfo & aux_info)
{
- LYXERR(Debug::LATEX, "Scanning aux file: " << file);
+ LYXERR(Debug::LATEX, "Scanning aux file: " << fname);
- ifstream ifs(file.toFilesystemEncoding().c_str());
+ ifstream ifs(fname.toFilesystemEncoding().c_str());
string token;
static regex const reg1("\\\\citation\\{([^}]+)\\}");
static regex const reg2("\\\\bibdata\\{([^}]+)\\}");
bool LaTeX::runBibTeX(vector<AuxInfo> const & bibtex_info,
- OutputParams const & runparams, int & exit_code)
+ OutputParams const & rp, int & exit_code)
{
bool result = false;
exit_code = 0;
continue;
result = true;
- string tmp = runparams.bibtex_command;
+ string tmp = rp.bibtex_command;
tmp += " ";
// onlyFileName() is needed for cygwin
tmp += quoteName(onlyFileName(removeExtension(
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] == ')') {
}
// get the next line
- string tmp;
int count = 0;
do {
if (!getline(ifs, tmp))
}
-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
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);
}
|| regex_match(token, sub, bibtexError5)) {
retval |= BIBTEX_ERROR;
string errstr = N_("BibTeX error: ") + token;
- string message;
+ string msg;
if ((prefixIs(token, "while executing---line")
|| prefixIs(token, "---line ")
|| prefixIs(token, "*Please notify the BibTeX"))
&& !prevtoken.empty()) {
errstr = N_("BibTeX error: ") + prevtoken;
- message = prevtoken + '\n';
+ msg = prevtoken + '\n';
}
- message += token;
+ msg += token;
terr.insertError(0,
from_local8bit(errstr),
- from_local8bit(message));
+ from_local8bit(msg));
} else if (regex_match(prevtoken, sub, bibtexError3)) {
retval |= BIBTEX_ERROR;
string errstr = N_("BibTeX error: ") + prevtoken;
- string message = prevtoken + '\n' + token;
+ string msg = prevtoken + '\n' + token;
terr.insertError(0,
from_local8bit(errstr),
- from_local8bit(message));
+ from_local8bit(msg));
} else if (regex_match(token, sub, biberError)) {
retval |= BIBTEX_ERROR;
string errstr = N_("Biber error: ") + sub.str(2);
- string message = token;
+ string msg = token;
terr.insertError(0,
from_local8bit(errstr),
- from_local8bit(message));
+ from_local8bit(msg));
}
prevtoken = token;
}