ISO8601d: Fixed parsing of day and month name
This commit is contained in:
@@ -512,15 +512,16 @@ bool ISO8601d::parse_formatted (Nibbler& n, const std::string& format)
|
|||||||
|
|
||||||
case 'A':
|
case 'A':
|
||||||
{
|
{
|
||||||
auto cursor = n.cursor ();
|
std::string dayName;
|
||||||
wday = ISO8601d::dayOfWeek (n.str ().substr (cursor));
|
if (n.getUntil (format[f + 1], dayName))
|
||||||
|
{
|
||||||
|
wday = ISO8601d::dayOfWeek (lowerCase (dayName));
|
||||||
if (wday == -1)
|
if (wday == -1)
|
||||||
{
|
{
|
||||||
n.restore ();
|
n.restore ();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
n.skipN (ISO8601d::dayName (wday).size ());
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -540,15 +541,16 @@ bool ISO8601d::parse_formatted (Nibbler& n, const std::string& format)
|
|||||||
|
|
||||||
case 'B':
|
case 'B':
|
||||||
{
|
{
|
||||||
auto cursor = n.cursor ();
|
std::string monthName;
|
||||||
month = ISO8601d::dayOfWeek (n.str ().substr (cursor));
|
if (n.getUntil (format[f + 1], monthName))
|
||||||
|
{
|
||||||
|
month = ISO8601d::monthOfYear (lowerCase (monthName));
|
||||||
if (month == -1)
|
if (month == -1)
|
||||||
{
|
{
|
||||||
n.restore ();
|
n.restore ();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
n.skipN (ISO8601d::monthName (month).size ());
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1278,7 +1280,7 @@ std::string ISO8601d::dayName (int dow)
|
|||||||
int ISO8601d::dayOfWeek (const std::string& input)
|
int ISO8601d::dayOfWeek (const std::string& input)
|
||||||
{
|
{
|
||||||
if (ISO8601d::minimumMatchLength== 0)
|
if (ISO8601d::minimumMatchLength== 0)
|
||||||
ISO8601d::minimumMatchLength= 3;
|
ISO8601d::minimumMatchLength = 3;
|
||||||
|
|
||||||
if (closeEnough (STRING_DATE_SUNDAY, input, ISO8601d::minimumMatchLength)) return 0;
|
if (closeEnough (STRING_DATE_SUNDAY, input, ISO8601d::minimumMatchLength)) return 0;
|
||||||
else if (closeEnough (STRING_DATE_MONDAY, input, ISO8601d::minimumMatchLength)) return 1;
|
else if (closeEnough (STRING_DATE_MONDAY, input, ISO8601d::minimumMatchLength)) return 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user