diff --git a/GoldenFox.ANTLR/GoldenFoxLanguage.g4 b/GoldenFox.ANTLR/GoldenFoxLanguage.g4 index 911a090..810dc5d 100644 --- a/GoldenFox.ANTLR/GoldenFoxLanguage.g4 +++ b/GoldenFox.ANTLR/GoldenFoxLanguage.g4 @@ -11,19 +11,20 @@ schedule: ( everyminute ) ('and' schedule)?; -everyday: 'every day' At time; +everyday: 'every day' At times; everyminute: 'every minute' (At secondsOffset)? (between)?; everyhour: 'every hour' (At minutesOffset)? (between)?; everysecond: 'every second' (between)?; -everyweekday: 'every' weekday At time; -weekdays: weekday's' At time; -numberedweekday: ((numberedDay (Last)?) | Last) 'day every week' At time; -numbereddayinmonth: ((numberedDay (Last)?) | Last) 'day every month' At time; +everyweekday: 'every' weekday At times; +weekdays: weekday's' At times; +numberedweekday: ((numberedDay (Last)?) | Last) 'day every week' At times; +numbereddayinmonth: ((numberedDay (Last)?) | Last) 'day every month' At times; secondsOffset: ((('mm:'|'hh:mm:')INT) | (INT 'seconds')) ('and' secondsOffset)?; minutesOffset: ((('hh:')INT(':'INT)?) | (INT 'minutes')) ('and' minutesOffset)?; between: 'between' time 'and' time; time: (INT':'INT(':'INT)?); +times: time ('and' time)?; weekday: ('monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday'); numberedDay: INT('st'|'nd'|'rd'|'th'); diff --git a/GoldenFox/Internal/Listener.cs b/GoldenFox/Internal/Listener.cs index f68faf7..7a8f038 100644 --- a/GoldenFox/Internal/Listener.cs +++ b/GoldenFox/Internal/Listener.cs @@ -37,7 +37,10 @@ public override void ExitMinutesOffset(GoldenFoxLanguageParser.MinutesOffsetCont public override void ExitEveryday(GoldenFoxLanguageParser.EverydayContext context) { - _stack.Push(new Day(_timestamps.Pop())); + while(_timestamps.Any()) + { + _stack.Push(new Day(_timestamps.Pop())); + } } public override void ExitEverysecond(GoldenFoxLanguageParser.EverysecondContext context) @@ -76,12 +79,18 @@ public override void ExitEveryminute(GoldenFoxLanguageParser.EveryminuteContext public override void ExitEveryweekday(GoldenFoxLanguageParser.EveryweekdayContext context) { - _stack.Push(new Weekday(ParseWeekDay(context.weekday()), _timestamps.Pop())); + while (_timestamps.Any()) + { + _stack.Push(new Weekday(ParseWeekDay(context.weekday()), _timestamps.Pop())); + } } public override void ExitWeekdays(GoldenFoxLanguageParser.WeekdaysContext context) { - _stack.Push(new Weekday(ParseWeekDay(context.weekday()), _timestamps.Pop())); + while (_timestamps.Any()) + { + _stack.Push(new Weekday(ParseWeekDay(context.weekday()), _timestamps.Pop())); + } } public override void ExitNumberedweekday(GoldenFoxLanguageParser.NumberedweekdayContext context) @@ -98,7 +107,10 @@ public override void ExitNumberedweekday(GoldenFoxLanguageParser.Numberedweekday index = index % 7; } - _stack.Push(new Weekday((DayOfWeek)index, _timestamps.Pop())); + while (_timestamps.Any()) + { + _stack.Push(new Weekday((DayOfWeek)index, _timestamps.Pop())); + } } public override void ExitNumbereddayinmonth(GoldenFoxLanguageParser.NumbereddayinmonthContext context) @@ -112,8 +124,10 @@ public override void ExitNumbereddayinmonth(GoldenFoxLanguageParser.Numbereddayi index = -index + 1; } } - - _stack.Push(new DayInMonth(index, _timestamps.Pop())); + while (_timestamps.Any()) + { + _stack.Push(new DayInMonth(index, _timestamps.Pop())); + } } public override void ExitEveryhour(GoldenFoxLanguageParser.EveryhourContext context) diff --git a/GoldenFox/Properties/AssemblyInfo.cs b/GoldenFox/Properties/AssemblyInfo.cs index b4ae68c..75e944c 100644 --- a/GoldenFox/Properties/AssemblyInfo.cs +++ b/GoldenFox/Properties/AssemblyInfo.cs @@ -8,8 +8,8 @@ [assembly: AssemblyCopyright("Copyright © Mattias Nordqvist")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -[assembly: AssemblyVersion("2.0.0")] -[assembly: AssemblyFileVersion("2.0.0")] +[assembly: AssemblyVersion("2.0.1")] +[assembly: AssemblyFileVersion("2.0.1")] [assembly: AssemblyProduct("Golden Fox")] [assembly: AssemblyCompany("Mattias Nordqvist")] diff --git a/Tests/Full/ScheduleTests.cs b/Tests/Full/ScheduleTests.cs index adb2e9d..d506046 100644 --- a/Tests/Full/ScheduleTests.cs +++ b/Tests/Full/ScheduleTests.cs @@ -96,6 +96,14 @@ public void EveryDayAt_ExactlyTheSameTime_atSignWorksToo() "every day @ 06:30".From("2015-10-05 06:30:00", true).Gives("2015-10-05 06:30:00"); } + [Test] + public void EveryDayAtTwoTimes() + { + "every day @ 06:30 and 08:30".From("2015-10-05 07:30:00").Gives("2015-10-05 08:30:00"); + "every day @ 06:30 and 08:30".From("2015-10-05 05:30:00").Gives("2015-10-05 06:30:00"); + "every day @ 06:30 and 08:30".From("2015-10-05 15:30:00").Gives("2015-10-06 06:30:00"); + } + [Test] public void EveryDayAt_SameDayJustLater() {