Command Location
- Locateѕ, cnaonicalized and categorizes first command.
This commit is contained in:
@@ -80,15 +80,15 @@ The eval needs of this command are:
|
|||||||
The parse tree should be:
|
The parse tree should be:
|
||||||
|
|
||||||
+- add COMMAND
|
+- add COMMAND
|
||||||
+- "one" WORD
|
+- "one" WORD
|
||||||
+- attr
|
+- attr
|
||||||
| +- due ATTRIBUTE
|
| +- due ATTRIBUTE
|
||||||
| +- expr
|
| +- expr
|
||||||
| | + "eoy" LITERAL DATE
|
| | + "eoy" LITERAL DATE
|
||||||
+- attr
|
+- attr
|
||||||
+- wait ATTRIBUTE
|
+- wait ATTRIBUTE
|
||||||
+- expr
|
+- expr
|
||||||
+= "due" DOM DATE
|
+= "due" DOM DATE
|
||||||
+= "-" OP
|
+= "-" OP
|
||||||
+= "2wks" LITERAL DURATION
|
+= "2wks" LITERAL DURATION
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ A3t::A3t (int argc, char** argv)
|
|||||||
{
|
{
|
||||||
Tree* branch = _tree->addBranch (new Tree (format ("arg{1}", i)));
|
Tree* branch = _tree->addBranch (new Tree (format ("arg{1}", i)));
|
||||||
branch->attribute ("raw", argv[i]);
|
branch->attribute ("raw", argv[i]);
|
||||||
branch->tag ("original");
|
branch->tag ("ORIGINAL");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,6 +55,8 @@ A3t::~A3t ()
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
Tree* A3t::parse ()
|
Tree* A3t::parse ()
|
||||||
{
|
{
|
||||||
|
findCommand ();
|
||||||
|
|
||||||
return _tree;
|
return _tree;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +85,55 @@ bool A3t::canonicalize (
|
|||||||
|
|
||||||
// Match against the options, throw away results.
|
// Match against the options, throw away results.
|
||||||
std::vector <std::string> matches;
|
std::vector <std::string> matches;
|
||||||
return autoComplete (canonicalized, options, matches, minimumMatchLength) == 1 ? true : false;
|
if (autoComplete (value, options, matches, minimumMatchLength) == 1)
|
||||||
|
{
|
||||||
|
// for (auto& i: matches)
|
||||||
|
// std::cout << "match: " << i << "\n";
|
||||||
|
|
||||||
|
canonicalized = matches[0];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Walk the top-level tree branches, looking for the first raw value that
|
||||||
|
// autoCompletes to a valid command/report.
|
||||||
|
void A3t::findCommand ()
|
||||||
|
{
|
||||||
|
std::string command;
|
||||||
|
for (int i = 0; i < _tree->branches (); ++i)
|
||||||
|
{
|
||||||
|
if (canonicalize (command, "report", (*_tree)[i]->attribute ("raw")))
|
||||||
|
{
|
||||||
|
(*_tree)[i]->attribute ("canonical", command);
|
||||||
|
(*_tree)[i]->tag ("REPORT");
|
||||||
|
(*_tree)[i]->tag ("CMD");
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (canonicalize (command, "readcmd", (*_tree)[i]->attribute ("raw")))
|
||||||
|
{
|
||||||
|
(*_tree)[i]->attribute ("canonical", command);
|
||||||
|
(*_tree)[i]->tag ("READCMD");
|
||||||
|
(*_tree)[i]->tag ("CMD");
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (canonicalize (command, "writecmd", (*_tree)[i]->attribute ("raw")))
|
||||||
|
{
|
||||||
|
(*_tree)[i]->attribute ("canonical", command);
|
||||||
|
(*_tree)[i]->tag ("WRITECMD");
|
||||||
|
(*_tree)[i]->tag ("CMD");
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (canonicalize (command, "specialcmd", (*_tree)[i]->attribute ("raw")))
|
||||||
|
{
|
||||||
|
(*_tree)[i]->attribute ("canonical", command);
|
||||||
|
(*_tree)[i]->tag ("SPECIALCMD");
|
||||||
|
(*_tree)[i]->tag ("CMD");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ public:
|
|||||||
void identity (const std::string&, const std::string&);
|
void identity (const std::string&, const std::string&);
|
||||||
bool canonicalize (std::string&, const std::string&, const std::string&) const;
|
bool canonicalize (std::string&, const std::string&, const std::string&) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void findCommand ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Tree* _tree;
|
Tree* _tree;
|
||||||
std::multimap <std::string, std::string> _entities;
|
std::multimap <std::string, std::string> _entities;
|
||||||
|
|||||||
@@ -41,9 +41,17 @@ int main (int argc, char** argv)
|
|||||||
A3t a3t (argc, argv);
|
A3t a3t (argc, argv);
|
||||||
|
|
||||||
// Populate identity lists.
|
// Populate identity lists.
|
||||||
a3t.identity ("report", "list");
|
a3t.identity ("report", "list");
|
||||||
a3t.identity ("readcmd", "info");
|
a3t.identity ("report", "next");
|
||||||
a3t.identity ("writecmd", "modify");
|
|
||||||
|
a3t.identity ("readcmd", "info");
|
||||||
|
a3t.identity ("readcmd", "projects");
|
||||||
|
|
||||||
|
a3t.identity ("writecmd", "add");
|
||||||
|
a3t.identity ("writecmd", "modify");
|
||||||
|
|
||||||
|
a3t.identity ("specialcmd", "calendar");
|
||||||
|
a3t.identity ("specialcmd", "edit");
|
||||||
|
|
||||||
Tree* tree = a3t.parse ();
|
Tree* tree = a3t.parse ();
|
||||||
if (tree)
|
if (tree)
|
||||||
|
|||||||
Reference in New Issue
Block a user