From 595fc346ae82a91bf918fefda01062d9f1afbff0 Mon Sep 17 00:00:00 2001 From: Miika Alonen Date: Fri, 24 Feb 2023 16:16:24 +0200 Subject: [PATCH] Added new repeat syntax Shortened syntax for repeats: 1:5 (1,5):4 (1 2 3):4 --- ziffers/mapper.py | 3 +++ ziffers/spec/ziffers.lark | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) 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 ")"