diff --git a/timings.py b/timings.py index b9caa17..d4469c2 100644 --- a/timings.py +++ b/timings.py @@ -11,6 +11,12 @@ class TimingError(Exception): def __str__(self): return f'{self.message} in string "{self.at}"' +def namespaced_key(x): + if x is None: + return (1, x) + else: + return (0, x) + class Timings: def __init__(self): self._timings = [] @@ -92,18 +98,17 @@ class Timings: self._tempo_objects.append((tempo, beats, at)) self._resolved = False + def resolve_tempo(self): + self._tempo_objects.sort(key=lambda x: namespaced_key(x[2].evaluate())) + self._tempo = [(t, b, a.evaluate()) for (t, b, a) in self._tempo_objects] + def resolve(self, final=False): try: - def namespaced_key(x): - if x is None: - return (1, x) - else: - return (0, x) - self._tempo_objects.sort(key=lambda x: namespaced_key(x[2].evaluate())) - self._tempo = [(t, b, a.evaluate()) for (t, b, a) in self._tempo_objects] + self.resolve_tempo() for name in self._marker_objects.keys(): if self._marker_objects[name] is not None: self._markers[name] = self._marker_objects[name].evaluate() + self.resolve_tempo() self._timings.sort(key=lambda x: namespaced_key(x.evaluate())) except Exception: if final: