From 882a9a7b4b6e50a36e35ca819630fd0cab3ffaa1 Mon Sep 17 00:00:00 2001 From: Miika Alonen Date: Wed, 15 Mar 2023 23:42:34 +0200 Subject: [PATCH] Adding support for ratio operations --- ziffers/mapper.py | 3 ++- ziffers/spec/scala.lark | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ziffers/mapper.py b/ziffers/mapper.py index c8aa299..c949709 100644 --- a/ziffers/mapper.py +++ b/ziffers/mapper.py @@ -481,13 +481,14 @@ class ZiffersTransformer(Transformer): ) -# pylint: disable=locally-disabled, unused-argument, too-many-public-methods, invalid-name +# pylint: disable=locally-disabled, unused-argument, too-many-public-methods, invalid-name, eval-used class ScalaTransformer(Transformer): def lines(self, items): cents = [ratio_to_cents(item) if isinstance(item,int) else item for item in items] return cents_to_semitones(cents) def operation(self, items): + # Safe eval. Items are pre-parsed. val = eval("".join(str(item) for item in items)) return val diff --git a/ziffers/spec/scala.lark b/ziffers/spec/scala.lark index 3341187..a42dba6 100644 --- a/ziffers/spec/scala.lark +++ b/ziffers/spec/scala.lark @@ -2,7 +2,7 @@ lines: (number | operation | ratio | edo_ratio | edji_ratio)+ -operation: number (operator (number | sub_operations | operation))+ +operation: (number | ratio) (operator ((number | ratio) | sub_operations | operation))+ ratio: (int | random_int) "/" (int | random_int) edo_ratio: (int | random_int) "\\" (int | random_int) edji_ratio: (int | random_int) "\\" (int | random_int) "<" (int | random_int) "/"? (int | random_int)? ">"