From 02482e7a1b770ebb73d75c04e920a0d8f2c4628e Mon Sep 17 00:00:00 2001 From: simonpoole Date: Fri, 21 Nov 2025 15:49:36 +0100 Subject: [PATCH 1/2] Handle the case with month day missing in both start and end data This changes things so that we catch the case when a date range has no month day for both the start and end date (and no interval is specified). It could be argued that it is very silly that the spec doesn't allow this (not to mention the whole separate month range silliness) Resolves https://github.com/simonpoole/OpeningHoursParser/issues/95 --- .../openinghoursparser/DateWithOffset.java | 34 ++++++++--- .../openinghoursparser/OpeningHoursParser.jj | 23 ++++---- .../ch/poole/openinghoursparser/UnitTest.java | 57 +++++++++++++++++++ test-data/oh.txt-result | 30 +++++----- test-data/oh.txt-result-strict | 22 +++---- test-data/oh.txt-result-time-strict | 22 +++---- 6 files changed, 131 insertions(+), 57 deletions(-) diff --git a/src/main/java/ch/poole/openinghoursparser/DateWithOffset.java b/src/main/java/ch/poole/openinghoursparser/DateWithOffset.java index 6ba62ce..8f2678a 100644 --- a/src/main/java/ch/poole/openinghoursparser/DateWithOffset.java +++ b/src/main/java/ch/poole/openinghoursparser/DateWithOffset.java @@ -82,16 +82,23 @@ public boolean undefinedDay() { return day == UNDEFINED_MONTH_DAY && nthWeekDay == null && weekDayOffset == null && varDate == null; } + /** + * Check for an undefined year value + * + * @return true if the year is undefined + */ + public boolean undefinedYear() { + return year == YearRange.UNDEFINED_YEAR; + } + @Override public String toString() { StringBuilder b = new StringBuilder(); - if (year != YearRange.UNDEFINED_YEAR) { + if (!undefinedYear()) { b.append(year); } if (month != null) { - if (year != YearRange.UNDEFINED_YEAR) { - b.append(" "); - } + addSpaceIfYearisPresent(b); b.append(month); } if (nthWeekDay != null) { @@ -104,14 +111,12 @@ public String toString() { b.append(']'); } if (day != UNDEFINED_MONTH_DAY) { - if (year != YearRange.UNDEFINED_YEAR || month != null) { + if (!undefinedYear() || month != null) { b.append(" "); } - b.append(String.format(Locale.US, "%02d",day)); + b.append(String.format(Locale.US, "%02d", day)); } else if (varDate != null) { - if (year != YearRange.UNDEFINED_YEAR) { - b.append(" "); - } + addSpaceIfYearisPresent(b); b.append(varDate); } // offsets @@ -137,6 +142,17 @@ public String toString() { return b.toString(); } + /** + * Add a space to separate a year value from the following data + * + * @param b the StringBuilder + */ + private void addSpaceIfYearisPresent(@NotNull StringBuilder b) { + if (!undefinedYear()) { + b.append(" "); + } + } + @Override public boolean equals(Object other) { if (other instanceof DateWithOffset) { diff --git a/src/main/java/ch/poole/openinghoursparser/OpeningHoursParser.jj b/src/main/java/ch/poole/openinghoursparser/OpeningHoursParser.jj index 35a39cc..8d7d501 100644 --- a/src/main/java/ch/poole/openinghoursparser/OpeningHoursParser.jj +++ b/src/main/java/ch/poole/openinghoursparser/OpeningHoursParser.jj @@ -917,32 +917,33 @@ DateRange date_range() : ) ( endDate = datewithoffset(startDate.undefinedDay()) + ( + mdr.interval = interval() + { + if (startDate.day != DateWithOffset.UNDEFINED_MONTH_DAY || endDate.day != DateWithOffset.UNDEFINED_MONTH_DAY || startDate.varDate!=null || endDate.varDate!=null) { + throw new OpeningHoursParseException(tr("interval_not_allowed_here"), token != null ? token.next : null); + } + } + )? { if (strict && to != null) { throw new OpeningHoursParseException(tr("to_instead_of_dash"), token != null ? token.next : null); } - if ((startDate.undefinedDay() && !endDate.undefinedDay()) || (!startDate.undefinedDay() && endDate.undefinedDay())) { + if ((startDate.undefinedDay() || endDate.undefinedDay()) && mdr.interval == 0 && (!startDate.undefinedYear() || !endDate.undefinedYear())) { if (strict) { throw new OpeningHoursParseException(tr("missing_day_in_range", startDate.toString(), endDate.toString()), token != null ? token.next : null); } else { - // fix this + // fix this up if (startDate.undefinedDay()) { startDate.setDay(1); - } else { + } + if (endDate.undefinedDay()) { endDate.setDay(Month.lastDay(endDate.getYear(), endDate.getMonth())); } } } mdr.endDate = endDate; } - ( - mdr.interval = interval() - { - if (startDate.day != DateWithOffset.UNDEFINED_MONTH_DAY || endDate.day != DateWithOffset.UNDEFINED_MONTH_DAY || startDate.varDate!=null || endDate.varDate!=null) { - throw new OpeningHoursParseException(tr("interval_not_allowed_here"), token != null ? token.next : null); - } - } - )? ) | < PLUS > diff --git a/src/test/java/ch/poole/openinghoursparser/UnitTest.java b/src/test/java/ch/poole/openinghoursparser/UnitTest.java index cf30152..640779f 100644 --- a/src/test/java/ch/poole/openinghoursparser/UnitTest.java +++ b/src/test/java/ch/poole/openinghoursparser/UnitTest.java @@ -814,6 +814,63 @@ public void dateRange() { fail(pex.getMessage()); } } + + @Test + public void dateRange2() { + OpeningHoursParser parser = new OpeningHoursParser(new ByteArrayInputStream("1999 Jun -2001 Jul".getBytes())); + try { + List rules = parser.rules(false); + assertEquals(1, rules.size()); + Rule r = rules.get(0); + assertEquals(1, r.dates.size()); + DateRange range = r.dates.get(0); + DateWithOffset start = range.getStartDate(); + assertNotNull(start); + assertEquals(1999, start.getYear()); + assertEquals(Month.JUN, start.getMonth()); + assertEquals(1, start.getDay()); + DateWithOffset end = range.getEndDate(); + assertNotNull(end); + assertEquals(2001, end.getYear()); + assertEquals(Month.JUL, end.getMonth()); + assertEquals(31, end.getDay()); + } catch (ParseException pex) { + fail(pex.getMessage()); + } + } + + @Test + public void dateRange3() { + OpeningHoursParser parser = new OpeningHoursParser(new ByteArrayInputStream("1999 Jun -2001 Jul".getBytes())); + try { + List rules = parser.rules(true); + fail("this should have thrown an exception"); + } catch (ParseException pex) { + // + } + } + + @Test + public void dateRange4() { + OpeningHoursParser parser = new OpeningHoursParser(new ByteArrayInputStream("1999 Jun -2001 Jul/7".getBytes())); + try { + List rules = parser.rules(false); + assertEquals(1, rules.size()); + Rule r = rules.get(0); + assertEquals(1, r.dates.size()); + DateRange range = r.dates.get(0); + DateWithOffset start = range.getStartDate(); + assertNotNull(start); + assertEquals(1999, start.getYear()); + assertEquals(Month.JUN, start.getMonth()); + DateWithOffset end = range.getEndDate(); + assertEquals(2001, end.getYear()); + assertEquals(Month.JUL, end.getMonth()); + assertEquals(7, range.getInterval()); + } catch (ParseException pex) { + fail(pex.getMessage()); + } + } @Test public void invalidDateRange() { diff --git a/test-data/oh.txt-result b/test-data/oh.txt-result index a117d66..ea9d272 100644 --- a/test-data/oh.txt-result +++ b/test-data/oh.txt-result @@ -5870,7 +5870,7 @@ 0 11:30-17:00,18:00-21:00 0 11:30-17:00,18:00-22:30 0 11:30-17:00; Fr-Sa 11:30-21:00; Su 12:00-15:30 -0 11:30-17:00; Sep 03-Jun 30 Mo-Fr off; Sep 19-Apr 29 off +0 11:30-17:00; Sep 03-Jun Mo-Fr off; Sep 19-Apr 29 off 0 11:30-17:00; Su off 0 11:30-17:00; We-Sa 11:30-16:00,18:00-24:00; Su off 0 11:30-17:30 @@ -8612,7 +8612,7 @@ 0 2010 Dec 16,2011 Jan 20,Feb 24,Mar 17: 19:00+ 0 2010 Jul 03-Aug 01: open 0 2011 Jan 07 Tu-Fr 15:00-18:00 -0 2011 Jul-Aug: Mo-Su 10:00-17:00 +0 2011 Jul 01-Aug 31: Mo-Su 10:00-17:00 0 2013 1 1 @@ -13345,7 +13345,7 @@ 0 Apr 15-30 08:30-15:00, Sa-Su off; May 01-31 08:30-17:00; Jun 01-Aug 20 08:30-18:00; Aug 21-Sep 30 08:30-17:00; Oct 01-Oct 15 08:30-17:00, Sa-Su off 0 Apr 15-Jun 30 10:00-16:30; Jul 01-Aug 31 10:00-17:30; Sep 01-Oct 31 10:00-16:30 0 Apr 15-Oct 03: Tu-We 14:00-18:00; Th-Su 11:00-18:00 || "Individuelle Öffnungszeiten nach Absprache" -0 Apr 15-Oct 31 13:30-22:00 +0 Apr 15-Oct 13:30-22:00 0 Apr 15-Oct 14 06:00-22:30; Oct 15-Apr 14 06:30-20:30 0 Apr 15-Oct 14 06:30-22:30; Oct 15-Apr 14 06:30-20:30 0 Apr 15-Oct 14 06:30-22:30; Oct 15-Apr 14 06:30-20:30 @@ -13531,7 +13531,7 @@ 0 Apr-Nov 11:00-22:00; We off 0 Apr-Nov 11:00-23:00 0 Apr-Nov 13:00-23:00 -0 Apr 01-Nov 15 +0 Apr-Nov 15 0 Apr-Nov: Fr-Su 14:00-17:00 0 Apr-Nov: Mo-Fr 10:00-18:00; Sa 09:00-12:00; Dec-Mar: Mo 13:00-18:00; Tu-Su 09:00-12:00,13:00-18:00 0 Apr-Nov: Mo-Fr 11:00-sunset; Sa,Su 10:00-sunset @@ -15173,13 +15173,13 @@ 0 easter -3 days-easter +1 day 11:00-21:00; May 29-Aug 30 11:00-23:00; Sep 06-Dec 20 Th 17:30-21:00, Fr-Sa 11:30-21:00, Su 11:30-16:00 0 easter -42 days 0 easter -60 days-easter -2 days,Oct 25-Dec 24: "je ca. 2 Monate vor Ostern und Weihnachten, siehe www.rk-schoko.de" -0 easter-Aug 31 10:00-16:00 +0 easter-Aug 10:00-16:00 0 easter-Dec 31 12:00-22:00; Mo off; Jun-Sep 12:00-22:00 0 easter-Nov 01 10:00-19:00; Nov 01-easter 10:00-17:00 0 easter-Nov 01: Mo-Su 11:00-19:00 0 easter-Nov Su[1]: Su 13:00-17:00; Su[1,3] 13:00-17:00 "Schmiedevorführung" -0 easter-Oct 31 -0 easter-Oct 31 09:00-20:00 +0 easter-Oct +0 easter-Oct 09:00-20:00 0 easter-Oct 01 12:00-20:00 "circa season" 0 easter-Oct 15: Tu-Sa 11:00-17:00, Su,PH 14:00-17:00 || "Sonderöffnungen und Führungen nach telefonischer Vereinbarung" 0 easter-Oct 26: Sa,Su,PH 10:00-12:00,13:30-17:00 @@ -15188,7 +15188,7 @@ 0 easter-Oct 31: Mo-Sa 13:00-18:00 0 easter-Oct 03 "only Su 14:00-16:00" 0 easter-Oct Su[2]: Su,PH 11:00-17:00; "außerdem nach Vereinbarung" -0 easter-Sep 30 +0 easter-Sep 0 easter sunset+ 0 "easter to winter" 1 @@ -19542,8 +19542,8 @@ 1 0 Mar-Nov 12:30-22:30 0 Mar-Nov 13:00-22:00 -0 Mar 01-Nov 15 -0 Mar 01-Nov 02 +0 Mar-Nov 15 +0 Mar-Nov 02 0 Mar-Nov 06:00-23:00 0 Mar-Nov: Fr 14:00-18:00; Mar-Nov: Sa 10:00-16:00 0 Mar-Nov: Fr 14:00-18:00, Sa 09:00-15:00; Dec-Feb: Sa 09:00-15:00 @@ -19953,7 +19953,7 @@ 0 May 02-Oct 31 Tu-Su 11:00-19:00; "Announce visit at other times" 0 May 02-Oct 05 Mo-Su,PH 10:00-13:00,14:00-18:00 0 May 02-Sep 30: Mo-Fr 10:00-24:00, Sa-Su 08:30-24:00 -0 May 02-Sep 30 Mo-Fr 09:00-23:00 +0 May 02-Sep Mo-Fr 09:00-23:00 0 May 30-Nov 15: 00:00-24:00 0 May 03-Nov 08: Sa 08:00-12:00 0 May 03-Oct 25: Tu 08:00-12:00 @@ -58654,7 +58654,7 @@ 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH 09:00-16:00 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off -0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off; 2016 Feb-Mar off "Wasserschaden" +0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off; 2016 Feb 01-Mar 31 off "Wasserschaden" 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; Su 09:00-14:00 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; Su 09:00-14:00 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; Su 09:00-15:00 @@ -83599,7 +83599,7 @@ 0 Mo off; Tu-Th 15:00-19:00; Fr 13:00-20:00; Sa 10:00-15:00 0 Mo off; Tu,Th 15:00-19:00; We,Fr,Su off; Sa 10:00-14:00 0 Mo off; Tu-Th 15:00-21:00; Fr 15:00-22:00; Sa 13:00-22:00; Su,PH 13:00-21:00; "Zavírací doba dle návštěvosti." -0 Mo off; Tu-Th 15:00-22:00; Fr 15:00-23:00; Sa 18:00-23:00; Su,PH off; 2016 Jun-Aug Sa off; 2016 Jun-Aug Mo-Fr 11:00-22:00; 2016 Jul 18-31 off +0 Mo off; Tu-Th 15:00-22:00; Fr 15:00-23:00; Sa 18:00-23:00; Su,PH off; 2016 Jun 01-Aug 31 Sa off; 2016 Jun 01-Aug 31 Mo-Fr 11:00-22:00; 2016 Jul 18-31 off 0 Mo off; Tu-Th 15:00-23:00; Fr 15:00-03:00; Sa 12:00-03:00; Su off 0 Mo off; Tu-Th 15:00-23:00, Fr-Su 13:00-01:00 0 Mo off; Tu,Th 15:30-18:30; We,Fr 09:30-12:00 @@ -98665,7 +98665,7 @@ 0 Mo-Su 09:00-13:00,15:00-18:00 0 Mo-Su 09:00-13:00,15:00-19:00 0 Mo-Su 09:00-13:00,15:00-19:00 -0 Mo-Su 09:00-13:00,15:00-19:00; Nov 15-Apr 30 off +0 Mo-Su 09:00-13:00,15:00-19:00; Nov 15-Apr off 0 Mo-Su 09:00-13:00,15:30-18:00 0 Mo-Su 09:00-13:00,15:30-19:30 0 Mo-Su 09:00-13:00,15:30-19:30 @@ -131780,7 +131780,7 @@ 0 Oct-Feb off 0 Oct-Jan,Apr-Jul: Mo,Th 21:00-01:00, We[1],We[3],We[5] 18:00-01:00 0 Oct-Jun -0 Oct 01-Jun 30: Mo,Sa 09:00-12:00; Tu,Th,Fr 09:00-12:00,14:00-18:00; Su,We off; Jul,Aug: Mo-Sa 10:00-12:30,15:00-19:00; Su 10:00-12:30; Jun 20-Jun 30: Mo,Tu,Th,Fr 09:00-12:00,14:00-18:00; Sa 09:00-12:00,14:00-17:00, We 09:00-12:00, Su off; Sep: Mo,Tu,Th,Fr 00:00 +0 Oct-Jun 30: Mo,Sa 09:00-12:00; Tu,Th,Fr 09:00-12:00,14:00-18:00; Su,We off; Jul,Aug: Mo-Sa 10:00-12:30,15:00-19:00; Su 10:00-12:30; Jun 20-Jun 30: Mo,Tu,Th,Fr 09:00-12:00,14:00-18:00; Sa 09:00-12:00,14:00-17:00, We 09:00-12:00, Su off; Sep: Mo,Tu,Th,Fr 00:00 0 Oct-Jun Mo-Fr 09:30-19:00; Jul-Sep Mo-Fr 10:30-17:00 0 Oct-Jun: We 20:00-01:00; Mo[1] 20:00-01:00 0 Oct-Mar diff --git a/test-data/oh.txt-result-strict b/test-data/oh.txt-result-strict index f16b169..f442ea0 100644 --- a/test-data/oh.txt-result-strict +++ b/test-data/oh.txt-result-strict @@ -8612,7 +8612,7 @@ 0 2010 Dec 16,2011 Jan 20,Feb 24,Mar 17: 19:00+ 1 1 -0 2011 Jul-Aug: Mo-Su 10:00-17:00 +1 0 2013 1 1 @@ -13345,7 +13345,7 @@ 0 Apr 15-30 08:30-15:00, Sa-Su off; May 01-31 08:30-17:00; Jun 01-Aug 20 08:30-18:00; Aug 21-Sep 30 08:30-17:00; Oct 01-Oct 15 08:30-17:00, Sa-Su off 1 0 Apr 15-Oct 03: Tu-We 14:00-18:00; Th-Su 11:00-18:00 || "Individuelle Öffnungszeiten nach Absprache" -1 +0 Apr 15-Oct 13:30-22:00 0 Apr 15-Oct 14 06:00-22:30; Oct 15-Apr 14 06:30-20:30 0 Apr 15-Oct 14 06:30-22:30; Oct 15-Apr 14 06:30-20:30 0 Apr 15-Oct 14 06:30-22:30; Oct 15-Apr 14 06:30-20:30 @@ -13531,7 +13531,7 @@ 0 Apr-Nov 11:00-22:00; We off 0 Apr-Nov 11:00-23:00 0 Apr-Nov 13:00-23:00 -1 +0 Apr-Nov 15 0 Apr-Nov: Fr-Su 14:00-17:00 0 Apr-Nov: Mo-Fr 10:00-18:00; Sa 09:00-12:00; Dec-Mar: Mo 13:00-18:00; Tu-Su 09:00-12:00,13:00-18:00 0 Apr-Nov: Mo-Fr 11:00-sunset; Sa,Su 10:00-sunset @@ -15173,13 +15173,13 @@ 1 0 easter -42 days 0 easter -60 days-easter -2 days,Oct 25-Dec 24: "je ca. 2 Monate vor Ostern und Weihnachten, siehe www.rk-schoko.de" -1 +0 easter-Aug 10:00-16:00 0 easter-Dec 31 12:00-22:00; Mo off; Jun-Sep 12:00-22:00 1 1 0 easter-Nov Su[1]: Su 13:00-17:00; Su[1,3] 13:00-17:00 "Schmiedevorführung" -1 -1 +0 easter-Oct +0 easter-Oct 09:00-20:00 1 0 easter-Oct 15: Tu-Sa 11:00-17:00, Su,PH 14:00-17:00 || "Sonderöffnungen und Führungen nach telefonischer Vereinbarung" 0 easter-Oct 26: Sa,Su,PH 10:00-12:00,13:30-17:00 @@ -15188,7 +15188,7 @@ 0 easter-Oct 31: Mo-Sa 13:00-18:00 1 0 easter-Oct Su[2]: Su,PH 11:00-17:00; "außerdem nach Vereinbarung" -1 +0 easter-Sep 0 easter sunset+ 0 "easter to winter" 1 @@ -19542,7 +19542,7 @@ 1 0 Mar-Nov 12:30-22:30 0 Mar-Nov 13:00-22:00 -1 +0 Mar-Nov 15 1 0 Mar-Nov 06:00-23:00 0 Mar-Nov: Fr 14:00-18:00; Mar-Nov: Sa 10:00-16:00 @@ -58654,7 +58654,7 @@ 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH 09:00-16:00 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off -0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off; 2016 Feb-Mar off "Wasserschaden" +1 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; Su 09:00-14:00 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; Su 09:00-14:00 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; Su 09:00-15:00 @@ -83599,7 +83599,7 @@ 0 Mo off; Tu-Th 15:00-19:00; Fr 13:00-20:00; Sa 10:00-15:00 0 Mo off; Tu,Th 15:00-19:00; We,Fr,Su off; Sa 10:00-14:00 0 Mo off; Tu-Th 15:00-21:00; Fr 15:00-22:00; Sa 13:00-22:00; Su,PH 13:00-21:00; "Zavírací doba dle návštěvosti." -0 Mo off; Tu-Th 15:00-22:00; Fr 15:00-23:00; Sa 18:00-23:00; Su,PH off; 2016 Jun-Aug Sa off; 2016 Jun-Aug Mo-Fr 11:00-22:00; 2016 Jul 18-31 off +1 0 Mo off; Tu-Th 15:00-23:00; Fr 15:00-03:00; Sa 12:00-03:00; Su off 0 Mo off; Tu-Th 15:00-23:00, Fr-Su 13:00-01:00 0 Mo off; Tu,Th 15:30-18:30; We,Fr 09:30-12:00 @@ -98665,7 +98665,7 @@ 0 Mo-Su 09:00-13:00,15:00-18:00 0 Mo-Su 09:00-13:00,15:00-19:00 0 Mo-Su 09:00-13:00,15:00-19:00 -1 +0 Mo-Su 09:00-13:00,15:00-19:00; Nov 15-Apr off 0 Mo-Su 09:00-13:00,15:30-18:00 0 Mo-Su 09:00-13:00,15:30-19:30 0 Mo-Su 09:00-13:00,15:30-19:30 diff --git a/test-data/oh.txt-result-time-strict b/test-data/oh.txt-result-time-strict index 7b5f77b..0854e13 100644 --- a/test-data/oh.txt-result-time-strict +++ b/test-data/oh.txt-result-time-strict @@ -8612,7 +8612,7 @@ 0 2010 Dec 16,2011 Jan 20,Feb 24,Mar 17: 19:00+ 1 1 -0 2011 Jul-Aug: Mo-Su 10:00-17:00 +1 0 2013 1 1 @@ -13345,7 +13345,7 @@ 0 Apr 15-30 08:30-15:00, Sa-Su off; May 01-31 08:30-17:00; Jun 01-Aug 20 08:30-18:00; Aug 21-Sep 30 08:30-17:00; Oct 01-Oct 15 08:30-17:00, Sa-Su off 1 0 Apr 15-Oct 03: Tu-We 14:00-18:00; Th-Su 11:00-18:00 || "Individuelle Öffnungszeiten nach Absprache" -1 +0 Apr 15-Oct 13:30-22:00 0 Apr 15-Oct 14 06:00-22:30; Oct 15-Apr 14 06:30-20:30 0 Apr 15-Oct 14 06:30-22:30; Oct 15-Apr 14 06:30-20:30 0 Apr 15-Oct 14 06:30-22:30; Oct 15-Apr 14 06:30-20:30 @@ -13531,7 +13531,7 @@ 0 Apr-Nov 11:00-22:00; We off 0 Apr-Nov 11:00-23:00 0 Apr-Nov 13:00-23:00 -1 +0 Apr-Nov 15 0 Apr-Nov: Fr-Su 14:00-17:00 0 Apr-Nov: Mo-Fr 10:00-18:00; Sa 09:00-12:00; Dec-Mar: Mo 13:00-18:00; Tu-Su 09:00-12:00,13:00-18:00 0 Apr-Nov: Mo-Fr 11:00-sunset; Sa,Su 10:00-sunset @@ -15173,13 +15173,13 @@ 1 0 easter -42 days 0 easter -60 days-easter -2 days,Oct 25-Dec 24: "je ca. 2 Monate vor Ostern und Weihnachten, siehe www.rk-schoko.de" -1 +0 easter-Aug 10:00-16:00 0 easter-Dec 31 12:00-22:00; Mo off; Jun-Sep 12:00-22:00 1 1 0 easter-Nov Su[1]: Su 13:00-17:00; Su[1,3] 13:00-17:00 "Schmiedevorführung" -1 -1 +0 easter-Oct +0 easter-Oct 09:00-20:00 1 0 easter-Oct 15: Tu-Sa 11:00-17:00, Su,PH 14:00-17:00 || "Sonderöffnungen und Führungen nach telefonischer Vereinbarung" 0 easter-Oct 26: Sa,Su,PH 10:00-12:00,13:30-17:00 @@ -15188,7 +15188,7 @@ 0 easter-Oct 31: Mo-Sa 13:00-18:00 1 0 easter-Oct Su[2]: Su,PH 11:00-17:00; "außerdem nach Vereinbarung" -1 +0 easter-Sep 0 easter sunset+ 0 "easter to winter" 1 @@ -19542,7 +19542,7 @@ 1 0 Mar-Nov 12:30-22:30 0 Mar-Nov 13:00-22:00 -1 +0 Mar-Nov 15 1 0 Mar-Nov 06:00-23:00 0 Mar-Nov: Fr 14:00-18:00; Mar-Nov: Sa 10:00-16:00 @@ -58654,7 +58654,7 @@ 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH 09:00-16:00 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off -0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off; 2016 Feb-Mar off "Wasserschaden" +1 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; Su 09:00-14:00 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; Su 09:00-14:00 0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; Su 09:00-15:00 @@ -83599,7 +83599,7 @@ 0 Mo off; Tu-Th 15:00-19:00; Fr 13:00-20:00; Sa 10:00-15:00 0 Mo off; Tu,Th 15:00-19:00; We,Fr,Su off; Sa 10:00-14:00 0 Mo off; Tu-Th 15:00-21:00; Fr 15:00-22:00; Sa 13:00-22:00; Su,PH 13:00-21:00; "Zavírací doba dle návštěvosti." -0 Mo off; Tu-Th 15:00-22:00; Fr 15:00-23:00; Sa 18:00-23:00; Su,PH off; 2016 Jun-Aug Sa off; 2016 Jun-Aug Mo-Fr 11:00-22:00; 2016 Jul 18-31 off +1 1 1 0 Mo off; Tu,Th 15:30-18:30; We,Fr 09:30-12:00 @@ -98665,7 +98665,7 @@ 0 Mo-Su 09:00-13:00,15:00-18:00 0 Mo-Su 09:00-13:00,15:00-19:00 0 Mo-Su 09:00-13:00,15:00-19:00 -1 +0 Mo-Su 09:00-13:00,15:00-19:00; Nov 15-Apr off 0 Mo-Su 09:00-13:00,15:30-18:00 0 Mo-Su 09:00-13:00,15:30-19:30 0 Mo-Su 09:00-13:00,15:30-19:30 From 21c3d81cb82cd845b77aa1eb4ba5066700984367 Mon Sep 17 00:00:00 2001 From: simonpoole Date: Sat, 22 Nov 2025 12:03:37 +0100 Subject: [PATCH 2/2] Update sonarqube plugin and gradle version --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 950caa5..47514ae 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { plugins { id "ca.coglinc.javacc" version "2.4.0" - id "org.sonarqube" version "4.0.0.2929" + id "org.sonarqube" version "6.2.0.5505" } // Apply the java plugin to add support for Java diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8801379..3bc5ff6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,6 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionSha256Sum=03ec176d388f2aa99defcadc3ac6adf8dd2bce5145a129659537c0874dea5ad1 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip -networkTimeout=10000 -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists