mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-08-28 22:47:20 +02:00
A3t::canonicalize
- Added entity canonicalization.
This commit is contained in:
parent
f03d1af431
commit
1495710aca
4 changed files with 57 additions and 6 deletions
|
@ -27,12 +27,24 @@
|
|||
|
||||
#include <iostream>
|
||||
#include <A3t.h>
|
||||
#include <text.h>
|
||||
#include <util.h>
|
||||
|
||||
static const int minimumMatchLength = 3;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
A3t::A3t (int argc, char** argv)
|
||||
{
|
||||
_tree = new Tree ("root");
|
||||
if (! _tree)
|
||||
throw std::string ("Failed to allocate memory for parse tree.");
|
||||
|
||||
for (int i = 0; i < argc; ++i)
|
||||
_args.push_back (argv[i]);
|
||||
{
|
||||
Tree* branch = _tree->addBranch (new Tree (format ("arg{1}", i)));
|
||||
branch->attribute ("raw", argv[i]);
|
||||
branch->tag ("original");
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -43,6 +55,35 @@ A3t::~A3t ()
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
Tree* A3t::parse ()
|
||||
{
|
||||
return NULL;
|
||||
return _tree;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void A3t::identity (const std::string& name, const std::string& value)
|
||||
{
|
||||
_entities.insert (std::pair <std::string, std::string> (name, value));
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Search for 'value' in _entities, return category and canonicalized value.
|
||||
bool A3t::canonicalize (
|
||||
std::string& canonicalized,
|
||||
const std::string& category,
|
||||
const std::string& value) const
|
||||
{
|
||||
// Find the category.
|
||||
std::pair <std::multimap <std::string, std::string>::const_iterator, std::multimap <std::string, std::string>::const_iterator> c;
|
||||
c = _entities.equal_range (category);
|
||||
|
||||
// Extract a list of entities for category.
|
||||
std::vector <std::string> options;
|
||||
std::multimap <std::string, std::string>::const_iterator e;
|
||||
for (e = c.first; e != c.second; ++e)
|
||||
options.push_back (e->second);
|
||||
|
||||
// Match against the options, throw away results.
|
||||
std::vector <std::string> matches;
|
||||
return autoComplete (canonicalized, options, matches, minimumMatchLength) == 1 ? true : false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -27,9 +27,9 @@
|
|||
#ifndef INCLUDED_A3T
|
||||
#define INCLUDED_A3T
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <Tree.h>
|
||||
#include <string>
|
||||
#include <map>
|
||||
|
||||
class A3t
|
||||
{
|
||||
|
@ -37,9 +37,12 @@ public:
|
|||
A3t (int, char**);
|
||||
~A3t ();
|
||||
Tree* parse ();
|
||||
void identity (const std::string&, const std::string&);
|
||||
bool canonicalize (std::string&, const std::string&, const std::string&) const;
|
||||
|
||||
private:
|
||||
std::vector <std::string> _args;
|
||||
Tree* _tree;
|
||||
std::multimap <std::string, std::string> _entities;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -39,6 +39,12 @@ int main (int argc, char** argv)
|
|||
try
|
||||
{
|
||||
A3t a3t (argc, argv);
|
||||
|
||||
// Populate identity lists.
|
||||
a3t.identity ("report", "list");
|
||||
a3t.identity ("readcmd", "info");
|
||||
a3t.identity ("writecmd", "modify");
|
||||
|
||||
Tree* tree = a3t.parse ();
|
||||
if (tree)
|
||||
tree->dump ();
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
./parser $* grammar.bnf 123 mod pro:H
|
||||
#./parser $* grammar.bnf 123 mod pro:H
|
||||
./args 123 mod pro:H
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue