mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-08-21 07:43:08 +02:00
Parser
- Locates mis-parsed SUBSTITUTIONS in FILTER, and downgrades to PATTERN.
This commit is contained in:
parent
963e79696b
commit
03a3b41254
2 changed files with 53 additions and 0 deletions
|
@ -201,6 +201,7 @@ Tree* Parser::parse ()
|
||||||
findStrayModifications ();
|
findStrayModifications ();
|
||||||
|
|
||||||
findPlainArgs ();
|
findPlainArgs ();
|
||||||
|
findFilterSubst ();
|
||||||
findMissingOperators ();
|
findMissingOperators ();
|
||||||
|
|
||||||
validate ();
|
validate ();
|
||||||
|
@ -1670,6 +1671,57 @@ void Parser::findPlainArgs ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Look for FILTER and downgrate SUBSTITUTION --> PATTERN.
|
||||||
|
void Parser::findFilterSubst ()
|
||||||
|
{
|
||||||
|
bool action = true;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
action = false;
|
||||||
|
|
||||||
|
std::vector <Tree*> nodes;
|
||||||
|
collect (nodes, collectTerminated);
|
||||||
|
std::vector <Tree*>::iterator i;
|
||||||
|
for (i = nodes.begin (); i != nodes.end (); ++i)
|
||||||
|
{
|
||||||
|
if ((*i)->hasTag ("FILTER") &&
|
||||||
|
(*i)->hasTag ("SUBSTITUTION"))
|
||||||
|
{
|
||||||
|
std::string raw = (*i)->attribute ("raw");
|
||||||
|
if (raw[0] == '/' && raw[raw.length () - 1] == '/')
|
||||||
|
{
|
||||||
|
std::string pattern = raw.substr (1, raw.length () - 2);
|
||||||
|
|
||||||
|
(*i)->unTag ("SUBSTITUTION");
|
||||||
|
(*i)->removeAttribute ("from");
|
||||||
|
(*i)->removeAttribute ("to");
|
||||||
|
(*i)->removeAttribute ("global");
|
||||||
|
|
||||||
|
(*i)->removeAllBranches ();
|
||||||
|
|
||||||
|
Tree* branch = (*i)->addBranch (new Tree ("argPat"));
|
||||||
|
branch->attribute ("raw", "description");
|
||||||
|
|
||||||
|
branch = (*i)->addBranch (new Tree ("argPat"));
|
||||||
|
branch->attribute ("raw", "~");
|
||||||
|
branch->tag ("OP");
|
||||||
|
|
||||||
|
branch = (*i)->addBranch (new Tree ("argPat"));
|
||||||
|
branch->attribute ("raw", pattern);
|
||||||
|
branch->tag ("STRING");
|
||||||
|
|
||||||
|
(*i)->tag ("PATTERN");
|
||||||
|
|
||||||
|
action = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (action);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void Parser::findMissingOperators ()
|
void Parser::findMissingOperators ()
|
||||||
{
|
{
|
||||||
|
|
|
@ -84,6 +84,7 @@ private:
|
||||||
void findModifications ();
|
void findModifications ();
|
||||||
void findStrayModifications ();
|
void findStrayModifications ();
|
||||||
void findPlainArgs ();
|
void findPlainArgs ();
|
||||||
|
void findFilterSubst ();
|
||||||
void findMissingOperators ();
|
void findMissingOperators ();
|
||||||
bool insertOr ();
|
bool insertOr ();
|
||||||
bool insertAnd ();
|
bool insertAnd ();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue