Bug - tags

- Modified A3::is_tag to allow @, # and $ in tag names.
- Reduced the precedence of tag parsing to ensure that durations are
  detected first.
This commit is contained in:
Paul Beckingham 2011-09-06 23:52:38 -04:00
parent 36db62728b
commit 69aa041218

View file

@ -709,13 +709,6 @@ const A3 A3::tokenize (const A3& input) const
found_something_after_sequence = true; found_something_after_sequence = true;
} }
else if (is_tag (n, s))
{
output.push_back (Arg (s, Arg::cat_tag));
if (found_sequence)
found_something_after_sequence = true;
}
// Must be higher than number. // Must be higher than number.
// Must be higher than operator. // Must be higher than operator.
// Note that Nibbler::getDate does not read durations. // Note that Nibbler::getDate does not read durations.
@ -735,6 +728,13 @@ const A3 A3::tokenize (const A3& input) const
found_something_after_sequence = true; found_something_after_sequence = true;
} }
else if (is_tag (n, s))
{
output.push_back (Arg (s, Arg::cat_tag));
if (found_sequence)
found_something_after_sequence = true;
}
else if (n.getOneOf (operators, s)) else if (n.getOneOf (operators, s))
{ {
output.push_back (Arg (s, Arg::cat_op)); output.push_back (Arg (s, Arg::cat_op));
@ -1655,15 +1655,21 @@ bool A3::is_tag (Nibbler& n, std::string& result)
{ {
n.save (); n.save ();
std::string indicator; std::string::size_type start = n.cursor ();
std::string name;
if (n.getN (1, indicator) && if (n.skipAllOneOf ("+-"))
(indicator == "+" || indicator == "-") &&
n.getName (name) &&
name.length ())
{ {
result = indicator + name; n.skipAllOneOf ("@#");
return true;
std::string name;
if (n.getName (name) &&
name.length ())
{
std::string::size_type end = n.cursor ();
n.restore ();
if (n.getN (end - start, result))
return true;
}
} }
n.restore (); n.restore ();