Dates: Added exact-match 'eaѕter' logic

- Without checking for an exact match for 'easter', the date 'easter' is a
  valid partial match for 'eastermonday'.
This commit is contained in:
Paul Beckingham 2015-07-24 22:57:47 -04:00
parent 0f72d3d502
commit 297b0c4b04
2 changed files with 7 additions and 0 deletions

View file

@ -466,6 +466,11 @@ bool namedDates (const std::string& name, Variant& value)
}
if (closeEnough ("goodfriday", name, minimum)) t->tm_mday -= 2;
// DO NOT REMOVE THIS USELESS-LOOKING LINE.
// It is here to capture an exact match for 'easter', to prevent 'easter'
// being a partial match for 'eastermonday'.
else if (closeEnough ("easter", name, minimum)) ;
else if (closeEnough ("eastermonday", name, minimum)) t->tm_mday += 1;
else if (closeEnough ("ascension", name, minimum)) t->tm_mday += 39;
else if (closeEnough ("pentecost", name, minimum)) t->tm_mday += 49;

View file

@ -515,9 +515,11 @@ bool closeEnough (
const std::string& attempt,
unsigned int minLength /* = 0 */)
{
// An exact match is accepted first.
if (compare (reference, attempt, false))
return true;
// A partial match will suffice.
if (attempt.length () < reference.length () &&
attempt.length () >= minLength)
return compare (reference.substr (0, attempt.length ()), attempt, false);