diff --git a/ziffers/mapper.py b/ziffers/mapper.py index 7316eb2..ae84251 100644 --- a/ziffers/mapper.py +++ b/ziffers/mapper.py @@ -380,3 +380,6 @@ class ZiffersTransformer(Transformer): ) else: return RepeatedSequence(values=items[0], repeats=Integer(value=2, text="2")) + + def repeat_item(self, items): + return RepeatedListSequence(values=[items[0]],repeats=items[1]) \ No newline at end of file diff --git a/ziffers/spec/ziffers.lark b/ziffers/spec/ziffers.lark index 6e94085..af95f23 100644 --- a/ziffers/spec/ziffers.lark +++ b/ziffers/spec/ziffers.lark @@ -1,6 +1,6 @@ // Root for the rules ?root: sequence -> start - sequence: (pitch_class | assignment | variable | rest | dur_change | oct_mod | oct_change | WS | chord | named_roman | cycle | random_integer | random_pitch | random_percent | range | list | repeated_list | lisp_operation | list_op | subdivision | eval | euclid | repeat)* + sequence: (pitch_class | repeat_item | assignment | variable | rest | dur_change | oct_mod | oct_change | WS | chord | named_roman | cycle | random_integer | random_pitch | random_percent | range | list | repeated_list | lisp_operation | list_op | subdivision | eval | euclid | repeat)* // Pitch classes pitch_class: prefix* pitch @@ -42,6 +42,7 @@ // Repeats repeat: "[:" sequence ":" [number] "]" + repeat_item: (pitch_class | list | random_integer) ":" number // List list: prefix* "(" sequence ")"