1.1 --- a/vRecurrence.py Sun Dec 03 19:50:50 2017 +0100
1.2 +++ b/vRecurrence.py Sun Dec 03 21:59:54 2017 +0100
1.3 @@ -75,6 +75,23 @@
1.4
1.5 YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS = 0, 1, 2, 5, 6, 7, 8
1.6
1.7 +# Special levels for day frequency qualifiers.
1.8 +
1.9 +YEARDAYS, MONTHDAYS = 3, 4
1.10 +
1.11 +# Special levels used by non-qualifier-originating selectors.
1.12 +
1.13 +COUNT, DTSTART, BYSETPOS = -2, -1, None
1.14 +
1.15 +level_labels = (
1.16 + "YEARS", "MONTHS", "WEEKS", "YEARDAYS", "MONTHDAYS", "DAYS", "HOURS",
1.17 + "MINUTES", "SECONDS",
1.18 +
1.19 + # Negative indexes.
1.20 +
1.21 + "COUNT", "DTSTART"
1.22 + )
1.23 +
1.24 # Enumeration levels, employed by BY... qualifiers.
1.25
1.26 enum_levels = (
1.27 @@ -289,10 +306,10 @@
1.28 # Create a selector that must be updated with the maximum resolution.
1.29
1.30 elif qualifier == "BYSETPOS":
1.31 - return PositionSelector(None, args, "BYSETPOS")
1.32 + return PositionSelector(BYSETPOS, args, "BYSETPOS")
1.33
1.34 elif qualifier == "COUNT":
1.35 - return LimitSelector(-2, args, "COUNT")
1.36 + return LimitSelector(COUNT, args, "COUNT")
1.37
1.38 else:
1.39 return Pattern(freq[qualifier], args, qualifier)
1.40 @@ -301,7 +318,7 @@
1.41
1.42 "Return a copy of 'selectors' incorporating 'dt'."
1.43
1.44 - selectors = selectors + [StartSelector(-1, {"start" : dt}, "DTSTART")]
1.45 + selectors = selectors + [StartSelector(DTSTART, {"start" : dt}, "DTSTART")]
1.46 selectors.sort(key=selector_sort_key)
1.47 return selectors
1.48
1.49 @@ -871,7 +888,8 @@
1.50 self.first = first
1.51
1.52 def __repr__(self):
1.53 - return "%s(%r, %r, %r, %r)" % (self.__class__.__name__, self.level,
1.54 + return "%s(%s, %r, %r, %r)" % (self.__class__.__name__,
1.55 + level_labels[self.level],
1.56 self.args, self.qualifier, self.first)
1.57
1.58 def select(self, start, end, inclusive=False):