diff --git a/ziffers/classes.py b/ziffers/classes.py index 83b66b5..7aea6ac 100644 --- a/ziffers/classes.py +++ b/ziffers/classes.py @@ -2,6 +2,7 @@ from dataclasses import dataclass, field, replace, asdict from itertools import product, islice, cycle from math import floor +from types import LambdaType import operator import random from copy import deepcopy @@ -458,7 +459,7 @@ class RomanNumeral(Event): class Function(Event): """Class for functions""" - run: str = field(default=None) + run: ... = field(default=None) @dataclass(kw_only=True) @@ -560,7 +561,10 @@ class Sequence(Meta): options[item.variable.name] = item.value elif isinstance(item, Variable): if options[item.name]: - variable = deepcopy(options[item.name]) + opt_item = options[item.name] + if isinstance(opt_item, LambdaType): + yield Function(run=opt_item, text=item.text, kwargs=options) + variable = deepcopy(opt_item) yield from _resolve_item(variable, options) elif isinstance(item, Range): yield from item.evaluate(options) diff --git a/ziffers/mapper.py b/ziffers/mapper.py index 638b3c4..c5263b2 100644 --- a/ziffers/mapper.py +++ b/ziffers/mapper.py @@ -29,7 +29,7 @@ from .classes import ( RepeatedSequence, VariableAssignment, Variable, - Measure, + Measure ) from .common import flatten, sum_dict from .defaults import DEFAULT_DURS, OPERATORS @@ -459,4 +459,4 @@ class ZiffersTransformer(Transformer): repeats=items[1], wrap_start="", wrap_end=":" + items[1].text, - ) + ) \ No newline at end of file