From 7862c65fcde5e29f05638d6302ae0fa941533639 Mon Sep 17 00:00:00 2001 From: "Jeffrey C. Ollie" Date: Wed, 13 Mar 2024 23:02:56 -0500 Subject: [PATCH] parse long month --- src/main.zig | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 207 insertions(+) diff --git a/src/main.zig b/src/main.zig index 3840a29..5377da3 100644 --- a/src/main.zig +++ b/src/main.zig @@ -473,6 +473,31 @@ pub const DateTime = struct { left = left[year.len..]; date.weekday = DayOfWeek.dayOfWeek(date.year, date.month, date.day); }, + .MMMM => { + const map = std.ComptimeStringMapWithEql(Month, .{ + .{ "january", .Jan }, + .{ "february", .Feb }, + .{ "march", .Mar }, + .{ "april", .Apr }, + .{ "may", .May }, + .{ "june", .Jun }, + .{ "july", .Jul }, + .{ "august", .Aug }, + .{ "september", .Sep }, + .{ "october", .Oct }, + .{ "november", .Nov }, + .{ "december", .Dec }, + }, std.comptime_string_map.eqlAsciiIgnoreCase); + date.month = month: { + for (1..left.len) |l| { + if (map.get(left[0..l])) |m| { + left = left[l..]; + break :month m; + } + } + return error.ParseError; + }; + }, .SSSSSSSSS => { date.nanosecond = try readFrac(left, 9); left = left[9..]; @@ -796,6 +821,188 @@ test "parseTest" { .weekday = .Thu, }, }, + .{ + .value = "january", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .Jan, + .year = 1970, + .weekday = .Thu, + }, + }, + .{ + .value = "february", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .Feb, + .year = 1970, + .weekday = .Thu, + }, + }, + .{ + .value = "march", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .Mar, + .year = 1970, + .weekday = .Thu, + }, + }, + .{ + .value = "apr", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .Apr, + .year = 1970, + .weekday = .Thu, + }, + }, + .{ + .value = "may", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .May, + .year = 1970, + .weekday = .Thu, + }, + }, + .{ + .value = "june", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .Jun, + .year = 1970, + .weekday = .Thu, + }, + }, + .{ + .value = "july", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .Jul, + .year = 1970, + .weekday = .Thu, + }, + }, + .{ + .value = "august", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .Aug, + .year = 1970, + .weekday = .Thu, + }, + }, + .{ + .value = "september", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .Sep, + .year = 1970, + .weekday = .Thu, + }, + }, + .{ + .value = "october", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .Oct, + .year = 1970, + .weekday = .Thu, + }, + }, + .{ + .value = "november", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .Jan, + .year = 1970, + .weekday = .Thu, + }, + }, + .{ + .value = "december", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .Dec, + .year = 1970, + .weekday = .Thu, + }, + }, + .{ + .value = "january", + .fmt = "MMMM", + .expected = .{ + .nanosecond = 0, + .second = 0, + .minute = 0, + .hour = 0, + .day = 1, + .month = .Jan, + .year = 1970, + .weekday = .Thu, + }, + }, }; inline for (cases) |case| {