Enhancement - Att::type

- Implemented Att::type to discern attribute types to assist with
  type-specific modifier evaluation.
- Fixed bug that required attributes to have specified values, whereas
  stating "name:" means no value for name.
This commit is contained in:
Paul Beckingham 2009-06-16 00:51:11 -04:00
parent db0d85f5e7
commit cdd07be331
3 changed files with 23 additions and 4 deletions

View file

@ -392,6 +392,27 @@ bool Att::validMod (const std::string& mod)
return false;
}
////////////////////////////////////////////////////////////////////////////////
// The type of an attribute is useful for modifier evaluation.
std::string type (const std::string& name)
{
if (name == "due" ||
name == "until" ||
name == "start" ||
name == "entry" ||
name == "end")
return "date";
else if (name == "recur")
return "duration";
else if (name == "limit")
return "number";
else
return "text";
}
////////////////////////////////////////////////////////////////////////////////
//
// start --> name --> . --> mod --> : --> " --> value --> " --> end
@ -439,8 +460,6 @@ void Att::parse (Nibbler& n)
{
decode (mValue);
}
else
throw std::string ("Missing attribute value"); // TODO i18n
}
else
throw std::string ("Missing : after attribute name"); // TODO i18n

View file

@ -49,6 +49,7 @@ public:
static bool validNameValue (const std::string&, const std::string&, const std::string&);
static bool validNameValue (std::string&, std::string&, std::string&);
static bool validMod (const std::string&);
static std::string type (const std::string&);
void parse (const std::string&);
void parse (Nibbler&);
bool match (const Att&) const;

View file

@ -494,7 +494,6 @@ void Context::constructFilter ()
{
foreach (att, task)
{
// TODO this doesn't work.
if (att->first == "description")
{
@ -503,7 +502,7 @@ void Context::constructFilter ()
foreach (word, words)
{
filter.push_back (Att ("description", "has", *word));
std::cout << "Context::constructFilter " << att->first << "=" << att->second.value () << std::endl;
std::cout << "Context::constructFilter " << att->first << "=" << *word << std::endl;
}
}