From f36c14e6b445142e68db2eb878196348ec7c5c0f Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 19 Jul 2015 19:08:38 -0400 Subject: [PATCH] TW-1515: abbreviation.minimum does not apply to date recognition - Thanks to Lars Beckers. --- AUTHORS | 1 + ChangeLog | 2 ++ src/Dates.cpp | 66 ++++++++++++++++++++++++++++----------------------- 3 files changed, 39 insertions(+), 30 deletions(-) diff --git a/AUTHORS b/AUTHORS index a9c88afcd..9d7f5559f 100644 --- a/AUTHORS +++ b/AUTHORS @@ -262,3 +262,4 @@ suggestions: Dylan Mikus Andrea Rizzi Florian Petry + Lars Beckers diff --git a/ChangeLog b/ChangeLog index 406ac99a9..0444a15f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -32,6 +32,8 @@ - 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 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 Florian Petry). - TW-1527 Extra spaces added around slashes (thanks to Renato Alves). diff --git a/src/Dates.cpp b/src/Dates.cpp index 8cf8d3718..534322612 100644 --- a/src/Dates.cpp +++ b/src/Dates.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include //////////////////////////////////////////////////////////////////////////////// @@ -134,20 +135,22 @@ bool namedDates (const std::string& name, Variant& value) struct tm* t = localtime (&now); int i; + int minimum = CLI2::minimumMatchLength; + // Dynamics. - if (name == "now") + if (closeEnough ("now", name, minimum)) { 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_isdst = -1; value = Variant (mktime (t), Variant::type_date); } - else if (name == "sod") + else if (closeEnough ("sod", name, minimum)) { t->tm_mday++; 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); } - else if (name == "eod") + else if (closeEnough ("eod", name, minimum)) { t->tm_mday++; 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); } - else if (name == "tomorrow") + else if (closeEnough ("tomorrow", name, minimum)) { t->tm_mday++; 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); } - else if (name == "yesterday") + else if (closeEnough ("yesterday", name, minimum)) { t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_isdst = -1; @@ -203,7 +206,8 @@ bool namedDates (const std::string& name, Variant& value) 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_year = 138; @@ -213,7 +217,7 @@ bool namedDates (const std::string& name, Variant& value) 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_sec = -1; @@ -224,7 +228,7 @@ bool namedDates (const std::string& name, Variant& value) 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_mon = 0; @@ -234,7 +238,7 @@ bool namedDates (const std::string& name, Variant& value) 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_sec = -1; @@ -250,7 +254,7 @@ bool namedDates (const std::string& name, Variant& value) 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_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); } - else if (name == "socm") + else if (closeEnough ("socm", name, minimum)) { t->tm_hour = t->tm_min = t->tm_sec = 0; t->tm_mday = 1; @@ -273,7 +277,7 @@ bool namedDates (const std::string& name, Variant& value) 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; @@ -289,7 +293,8 @@ bool namedDates (const std::string& name, Variant& value) 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_min = 0; @@ -299,7 +304,7 @@ bool namedDates (const std::string& name, Variant& value) 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; 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); } - 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_sec = -1; @@ -316,7 +322,7 @@ bool namedDates (const std::string& name, Variant& value) 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; 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); } - else if (name == "soww") + else if (closeEnough ("soww", name, minimum)) { t->tm_hour = t->tm_min = t->tm_sec = 0; 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); } - else if (name == "eoww") + else if (closeEnough ("eoww", name, minimum)) { t->tm_hour = 24; t->tm_min = 0; @@ -439,11 +445,11 @@ bool namedDates (const std::string& name, Variant& value) throw std::string (STRING_DATES_MONTH_31); } - else if (name == "easter" || - name == "eastermonday" || - name == "ascension" || - name == "pentecost" || - name == "goodfriday") + else if (closeEnough ("easter", name, minimum) || + closeEnough ("eastermonday", name, minimum) || + closeEnough ("ascension", name, minimum) || + closeEnough ("pentecost", name, minimum) || + closeEnough ("goodfriday", name, minimum)) { Variant valueNow = Variant (mktime (t), Variant::type_date); easter (t); @@ -457,15 +463,15 @@ bool namedDates (const std::string& name, Variant& value) easter (t); } - if (name == "goodfriday") t->tm_mday -= 2; - else if (name == "eastermonday") t->tm_mday += 1; - else if (name == "ascension") t->tm_mday += 39; - else if (name == "pentecost") t->tm_mday += 49; + if (closeEnough ("goodfriday", name, minimum)) t->tm_mday -= 2; + 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; 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); midsommar (t); @@ -482,7 +488,7 @@ bool namedDates (const std::string& name, Variant& value) 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); midsommarafton (t);