1313
1414schedule_parser = lark .Lark (r"""
1515!start: (prompt | /[][():]/+)*
16- prompt: (emphasized | scheduled | plain | WHITESPACE)*
16+ prompt: (emphasized | scheduled | alternate | plain | WHITESPACE)*
1717!emphasized: "(" prompt ")"
1818 | "(" prompt ":" prompt ")"
1919 | "[" prompt "]"
2020scheduled: "[" [prompt ":"] prompt ":" [WHITESPACE] NUMBER "]"
21+ alternate: "[" prompt ("|" prompt)+ "]"
2122WHITESPACE: /\s+/
22- plain: /([^\\\[\]():]|\\.)+/
23+ plain: /([^\\\[\]():| ]|\\.)+/
2324%import common.SIGNED_NUMBER -> NUMBER
2425""" )
2526
@@ -59,6 +60,8 @@ def scheduled(self, tree):
5960 tree .children [- 1 ] *= steps
6061 tree .children [- 1 ] = min (steps , int (tree .children [- 1 ]))
6162 l .append (tree .children [- 1 ])
63+ def alternate (self , tree ):
64+ l .extend (range (1 , steps + 1 ))
6265 CollectSteps ().visit (tree )
6366 return sorted (set (l ))
6467
@@ -67,6 +70,8 @@ class AtStep(lark.Transformer):
6770 def scheduled (self , args ):
6871 before , after , _ , when = args
6972 yield before or () if step <= when else after
73+ def alternate (self , args ):
74+ yield next (args [(step - 1 )% len (args )])
7075 def start (self , args ):
7176 def flatten (x ):
7277 if type (x ) == str :
0 commit comments