Adding support for ratio operations
This commit is contained in:
@ -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):
|
class ScalaTransformer(Transformer):
|
||||||
def lines(self, items):
|
def lines(self, items):
|
||||||
cents = [ratio_to_cents(item) if isinstance(item,int) else item for item in items]
|
cents = [ratio_to_cents(item) if isinstance(item,int) else item for item in items]
|
||||||
return cents_to_semitones(cents)
|
return cents_to_semitones(cents)
|
||||||
|
|
||||||
def operation(self, items):
|
def operation(self, items):
|
||||||
|
# Safe eval. Items are pre-parsed.
|
||||||
val = eval("".join(str(item) for item in items))
|
val = eval("".join(str(item) for item in items))
|
||||||
return val
|
return val
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
lines: (number | operation | ratio | edo_ratio | edji_ratio)+
|
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)
|
ratio: (int | random_int) "/" (int | random_int)
|
||||||
edo_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)? ">"
|
edji_ratio: (int | random_int) "\\" (int | random_int) "<" (int | random_int) "/"? (int | random_int)? ">"
|
||||||
|
|||||||
Reference in New Issue
Block a user