mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-08-29 07:57: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 <iostream>
|
||||||
#include <A3t.h>
|
#include <A3t.h>
|
||||||
|
#include <text.h>
|
||||||
|
#include <util.h>
|
||||||
|
|
||||||
|
static const int minimumMatchLength = 3;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
A3t::A3t (int argc, char** argv)
|
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)
|
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 ()
|
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
|
#ifndef INCLUDED_A3T
|
||||||
#define INCLUDED_A3T
|
#define INCLUDED_A3T
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <string>
|
|
||||||
#include <Tree.h>
|
#include <Tree.h>
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
class A3t
|
class A3t
|
||||||
{
|
{
|
||||||
|
@ -37,9 +37,12 @@ public:
|
||||||
A3t (int, char**);
|
A3t (int, char**);
|
||||||
~A3t ();
|
~A3t ();
|
||||||
Tree* parse ();
|
Tree* parse ();
|
||||||
|
void identity (const std::string&, const std::string&);
|
||||||
|
bool canonicalize (std::string&, const std::string&, const std::string&) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector <std::string> _args;
|
Tree* _tree;
|
||||||
|
std::multimap <std::string, std::string> _entities;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -39,6 +39,12 @@ int main (int argc, char** argv)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
A3t a3t (argc, argv);
|
A3t a3t (argc, argv);
|
||||||
|
|
||||||
|
// Populate identity lists.
|
||||||
|
a3t.identity ("report", "list");
|
||||||
|
a3t.identity ("readcmd", "info");
|
||||||
|
a3t.identity ("writecmd", "modify");
|
||||||
|
|
||||||
Tree* tree = a3t.parse ();
|
Tree* tree = a3t.parse ();
|
||||||
if (tree)
|
if (tree)
|
||||||
tree->dump ();
|
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