mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-07-07 20:06:36 +02:00
Parser
- Improved, but did not fix, ::insertOr, regarding insertion of nodes into _tree and not nodes. There is still a problem.
This commit is contained in:
parent
6635cd9d84
commit
118f930fad
1 changed files with 32 additions and 13 deletions
|
@ -1720,26 +1720,45 @@ bool Parser::insertOr ()
|
||||||
{
|
{
|
||||||
std::vector <Tree*> nodes;
|
std::vector <Tree*> nodes;
|
||||||
collect (nodes, true);
|
collect (nodes, true);
|
||||||
std::vector <Tree*>::iterator prev = nodes.begin ();
|
|
||||||
|
// Subset the nodes to only the FILTER, non-PSEUDO nodes.
|
||||||
|
std::vector <Tree*> filterNodes;
|
||||||
std::vector <Tree*>::iterator i;
|
std::vector <Tree*>::iterator i;
|
||||||
for (i = nodes.begin (); i != nodes.end (); ++i)
|
for (i = nodes.begin (); i != nodes.end (); ++i)
|
||||||
{
|
|
||||||
if ((*i)->hasTag ("FILTER") && ! (*i)->hasTag ("PSEUDO"))
|
if ((*i)->hasTag ("FILTER") && ! (*i)->hasTag ("PSEUDO"))
|
||||||
|
filterNodes.push_back (*i);
|
||||||
|
|
||||||
|
std::vector <Tree*>::iterator prev = filterNodes.begin ();
|
||||||
|
for (i = filterNodes.begin (); i != filterNodes.end (); ++i)
|
||||||
{
|
{
|
||||||
if (prev != nodes.begin () &&
|
// std::cout << "# prev = " << (*prev)->attribute ("raw") << " ... i = " << (*i)->attribute ("raw") << "\n";
|
||||||
|
if (i != prev &&
|
||||||
((*prev)->hasTag ("ID") || (*prev)->hasTag ("UUID")) &&
|
((*prev)->hasTag ("ID") || (*prev)->hasTag ("UUID")) &&
|
||||||
((*i)->hasTag ("ID") || (*i)->hasTag ("UUID")))
|
((*i)->hasTag ("ID") || (*i)->hasTag ("UUID")))
|
||||||
{
|
{
|
||||||
|
// std::cout << "# needs OR\n";
|
||||||
|
|
||||||
Tree* branch = new Tree ("argOp");
|
Tree* branch = new Tree ("argOp");
|
||||||
branch->attribute ("raw", "or");
|
branch->attribute ("raw", "or");
|
||||||
branch->tag ("OP");
|
branch->tag ("OP");
|
||||||
branch->tag ("FILTER");
|
branch->tag ("FILTER");
|
||||||
|
branch->_trunk = (*i)->_trunk;
|
||||||
|
|
||||||
_tree->_branches.insert (i, branch);
|
std::vector <Tree*>::iterator b;
|
||||||
return true;
|
for (b = (*i)->_trunk->_branches.begin ();
|
||||||
|
b != (*i)->_trunk->_branches.end ();
|
||||||
|
++b)
|
||||||
|
{
|
||||||
|
if (*b == *i)
|
||||||
|
{
|
||||||
|
(*i)->_trunk->_branches.insert (b, branch);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
prev = i;
|
prev = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue