commit 1e1800a21aac99bb6e6044e1c1e11e3f88d198dd
Author: Juergen Spitzmueller <[email protected]>
Date: Sat Apr 14 14:33:21 2018 +0200
Consider sub-subfiles on log file parsing.
These are listed as (subfile.ext (sub-subfile.ext))
Fixes: #11112
---
src/LaTeX.cpp | 17 +++++++++++++----
1 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/LaTeX.cpp b/src/LaTeX.cpp
index e3c0397..0144e1c 100644
--- a/src/LaTeX.cpp
+++ b/src/LaTeX.cpp
@@ -1120,8 +1120,8 @@ bool completeFilename(string const & ff, DepTable & head)
}
-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();
@@ -1138,6 +1138,15 @@ int iterateLine(string const & token, regex const & reg,
string const & closing,
// 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
@@ -1321,7 +1330,7 @@ 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);
}
@@ -1334,7 +1343,7 @@ void LaTeX::deplog(DepTable & head)
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);
}