TW-1515: abbreviation.minimum does not apply to date recognition

- Thanks to Lars Beckers.
This commit is contained in:
Paul Beckingham 2015-07-19 19:08:38 -04:00
parent a007d6c174
commit f36c14e6b4
3 changed files with 39 additions and 30 deletions

View file

@ -262,3 +262,4 @@ suggestions:
Dylan Mikus Dylan Mikus
Andrea Rizzi Andrea Rizzi
Florian Petry Florian Petry
Lars Beckers

View file

@ -32,6 +32,8 @@
- TW-1488 You have more urgent tasks (thanks to Stefan Betz, Denis Kasak). - TW-1488 You have more urgent tasks (thanks to Stefan Betz, Denis Kasak).
- TW-1511 Project titles not properly parsed if they contain hyphens (thanks to - TW-1511 Project titles not properly parsed if they contain hyphens (thanks to
Leon Feng, Blake Sweeney, Dylan Mikus). Leon Feng, Blake Sweeney, Dylan Mikus).
- TW-1515 abbreviation.minimum does not apply to date recognition (thanks to
Lars Beckers).
- TW-1521 task project!=PROJECTNAME does not work (Regression) (thanks to - TW-1521 task project!=PROJECTNAME does not work (Regression) (thanks to
Florian Petry). Florian Petry).
- TW-1527 Extra spaces added around slashes (thanks to Renato Alves). - TW-1527 Extra spaces added around slashes (thanks to Renato Alves).

View file

@ -31,6 +31,7 @@
#include <Dates.h> #include <Dates.h>
#include <Date.h> #include <Date.h>
#include <Lexer.h> #include <Lexer.h>
#include <CLI2.h>
#include <i18n.h> #include <i18n.h>
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -134,20 +135,22 @@ bool namedDates (const std::string& name, Variant& value)
struct tm* t = localtime (&now); struct tm* t = localtime (&now);
int i; int i;
int minimum = CLI2::minimumMatchLength;
// Dynamics. // Dynamics.
if (name == "now") if (closeEnough ("now", name, minimum))
{ {
value = Variant (now, Variant::type_date); value = Variant (now, Variant::type_date);
} }
else if (name == "today") else if (closeEnough ("today", name, minimum))
{ {
t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_hour = t->tm_min = t->tm_sec = 0;
t->tm_isdst = -1; t->tm_isdst = -1;
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "sod") else if (closeEnough ("sod", name, minimum))
{ {
t->tm_mday++; t->tm_mday++;
t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_hour = t->tm_min = t->tm_sec = 0;
@ -155,7 +158,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "eod") else if (closeEnough ("eod", name, minimum))
{ {
t->tm_mday++; t->tm_mday++;
t->tm_hour = t->tm_min = 0; t->tm_hour = t->tm_min = 0;
@ -164,7 +167,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "tomorrow") else if (closeEnough ("tomorrow", name, minimum))
{ {
t->tm_mday++; t->tm_mday++;
t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_hour = t->tm_min = t->tm_sec = 0;
@ -172,7 +175,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "yesterday") else if (closeEnough ("yesterday", name, minimum))
{ {
t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_hour = t->tm_min = t->tm_sec = 0;
t->tm_isdst = -1; t->tm_isdst = -1;
@ -203,7 +206,8 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "later" || name == "someday") else if (closeEnough ("later", name, minimum) ||
closeEnough ("someday", name, minimum))
{ {
t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_hour = t->tm_min = t->tm_sec = 0;
t->tm_year = 138; t->tm_year = 138;
@ -213,7 +217,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "eoy") else if (closeEnough ("eoy", name, minimum))
{ {
t->tm_hour = t->tm_min = 0; t->tm_hour = t->tm_min = 0;
t->tm_sec = -1; t->tm_sec = -1;
@ -224,7 +228,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "soy") else if (closeEnough ("soy", name, minimum))
{ {
t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_hour = t->tm_min = t->tm_sec = 0;
t->tm_mon = 0; t->tm_mon = 0;
@ -234,7 +238,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "eoq") else if (closeEnough ("eoq", name, minimum))
{ {
t->tm_hour = t->tm_min = 0; t->tm_hour = t->tm_min = 0;
t->tm_sec = -1; t->tm_sec = -1;
@ -250,7 +254,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "soq") else if (closeEnough ("soq", name, minimum))
{ {
t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_hour = t->tm_min = t->tm_sec = 0;
t->tm_mon += 3 - (t->tm_mon % 3); t->tm_mon += 3 - (t->tm_mon % 3);
@ -265,7 +269,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "socm") else if (closeEnough ("socm", name, minimum))
{ {
t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_hour = t->tm_min = t->tm_sec = 0;
t->tm_mday = 1; t->tm_mday = 1;
@ -273,7 +277,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "som") else if (closeEnough ("som", name, minimum))
{ {
t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_hour = t->tm_min = t->tm_sec = 0;
@ -289,7 +293,8 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "eom" || name == "eocm") else if (closeEnough ("eom", name, minimum) ||
closeEnough ("eocm", name, minimum))
{ {
t->tm_hour = 24; t->tm_hour = 24;
t->tm_min = 0; t->tm_min = 0;
@ -299,7 +304,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "socw") else if (closeEnough ("socw", name, minimum))
{ {
t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_hour = t->tm_min = t->tm_sec = 0;
int extra = t->tm_wday * 86400; int extra = t->tm_wday * 86400;
@ -307,7 +312,8 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t) - extra, Variant::type_date); value = Variant (mktime (t) - extra, Variant::type_date);
} }
else if (name == "eow" || name == "eocw") else if (closeEnough ("eow", name, minimum) ||
closeEnough ("eocw", name, minimum))
{ {
t->tm_hour = t->tm_min = 0; t->tm_hour = t->tm_min = 0;
t->tm_sec = -1; t->tm_sec = -1;
@ -316,7 +322,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t) + extra, Variant::type_date); value = Variant (mktime (t) + extra, Variant::type_date);
} }
else if (name == "sow") else if (closeEnough ("sow", name, minimum))
{ {
t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_hour = t->tm_min = t->tm_sec = 0;
int extra = (7 - t->tm_wday) * 86400; int extra = (7 - t->tm_wday) * 86400;
@ -324,7 +330,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t) + extra, Variant::type_date); value = Variant (mktime (t) + extra, Variant::type_date);
} }
else if (name == "soww") else if (closeEnough ("soww", name, minimum))
{ {
t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_hour = t->tm_min = t->tm_sec = 0;
int extra = (t->tm_wday - 1) * 86400; int extra = (t->tm_wday - 1) * 86400;
@ -335,7 +341,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t) - extra, Variant::type_date); value = Variant (mktime (t) - extra, Variant::type_date);
} }
else if (name == "eoww") else if (closeEnough ("eoww", name, minimum))
{ {
t->tm_hour = 24; t->tm_hour = 24;
t->tm_min = 0; t->tm_min = 0;
@ -439,11 +445,11 @@ bool namedDates (const std::string& name, Variant& value)
throw std::string (STRING_DATES_MONTH_31); throw std::string (STRING_DATES_MONTH_31);
} }
else if (name == "easter" || else if (closeEnough ("easter", name, minimum) ||
name == "eastermonday" || closeEnough ("eastermonday", name, minimum) ||
name == "ascension" || closeEnough ("ascension", name, minimum) ||
name == "pentecost" || closeEnough ("pentecost", name, minimum) ||
name == "goodfriday") closeEnough ("goodfriday", name, minimum))
{ {
Variant valueNow = Variant (mktime (t), Variant::type_date); Variant valueNow = Variant (mktime (t), Variant::type_date);
easter (t); easter (t);
@ -457,15 +463,15 @@ bool namedDates (const std::string& name, Variant& value)
easter (t); easter (t);
} }
if (name == "goodfriday") t->tm_mday -= 2; if (closeEnough ("goodfriday", name, minimum)) t->tm_mday -= 2;
else if (name == "eastermonday") t->tm_mday += 1; else if (closeEnough ("eastermonday", name, minimum)) t->tm_mday += 1;
else if (name == "ascension") t->tm_mday += 39; else if (closeEnough ("ascension", name, minimum)) t->tm_mday += 39;
else if (name == "pentecost") t->tm_mday += 49; else if (closeEnough ("pentecost", name, minimum)) t->tm_mday += 49;
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "midsommar") else if (closeEnough ("midsommar", name, minimum))
{ {
Variant valueNow = Variant (mktime (t), Variant::type_date); Variant valueNow = Variant (mktime (t), Variant::type_date);
midsommar (t); midsommar (t);
@ -482,7 +488,7 @@ bool namedDates (const std::string& name, Variant& value)
value = Variant (mktime (t), Variant::type_date); value = Variant (mktime (t), Variant::type_date);
} }
else if (name == "midsommarafton") else if (closeEnough ("midsommarafton", name, minimum))
{ {
Variant valueNow = Variant (mktime (t), Variant::type_date); Variant valueNow = Variant (mktime (t), Variant::type_date);
midsommarafton (t); midsommarafton (t);