A3 Duration

- When parsing duration literals, look-ahead now prevents an ordinal
  such as '31st' (August 31st) from being interpreted as two tokens
  '31s' (duration) and 't' (word).  This is the same fix that was
  applied to A3::is_number.  I'll be there are more that I missed.
This commit is contained in:
Paul Beckingham 2011-08-13 22:29:39 -04:00
parent a4fc8aee6a
commit 587f2a002f

View file

@ -1456,6 +1456,9 @@ bool A3::is_dom (Nibbler& n, std::string& result)
}
////////////////////////////////////////////////////////////////////////////////
// A duration may only be followed by '\0', ')' or ' '.
//
// This prevents the interpretation of '31st' as a duration ('31s').
bool A3::is_duration (Nibbler& n, std::string& result)
{
n.save ();
@ -1467,10 +1470,16 @@ bool A3::is_duration (Nibbler& n, std::string& result)
if (n.getInt (quantity) &&
n.getOneOf (units, unit))
{
char next = n.next ();
if (next == '\0' ||
next == ')' ||
next == ' ')
{
result = format (quantity) + unit;
return true;
}
}
n.restore ();
return false;