From: David Kastrup Date: Sun, 11 Mar 2012 11:16:52 +0000 (+0100) Subject: Make Score an initial Timing alias to allow for context mods X-Git-Tag: release/2.15.34-1~14 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=b44961b57915c02b0aa957f06f10452745f777de;p=lilypond.git Make Score an initial Timing alias to allow for context mods --- diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc index 8d456b2d38..81d82eec97 100644 --- a/lily/timing-translator.cc +++ b/lily/timing-translator.cc @@ -46,20 +46,35 @@ Timing_translator::stop_translation_timestep () void Timing_translator::initialize () { - context ()->add_alias (ly_symbol2scm ("Timing")); - context ()->set_property ("currentBarNumber", scm_from_int (1)); - context ()->set_property ("internalBarNumber", scm_from_int (1)); + Context *timing = unsmob_context (scm_call_2 (ly_lily_module_constant ("ly:context-find"), + context ()->self_scm (), + ly_symbol2scm ("Timing"))); + if (timing != context ()) + { + context ()->add_alias (ly_symbol2scm ("Timing")); + + if (!timing) { + programming_error ("Can't find Timing context template"); + timing = context (); + } + } + + SCM barnumber = timing->get_property ("currentBarNumber"); + if (!scm_is_integer (barnumber)) + barnumber = scm_from_int (1); + context ()->set_property ("currentBarNumber", barnumber); + context ()->set_property ("internalBarNumber", barnumber); context ()->set_property ("timeSignatureFraction", - scm_cons (scm_from_int (4), scm_from_int (4))); + timing->get_property ("timeSignatureFraction")); /* Do not init measurePosition; this should be done from global context. */ context ()->set_property ("measureLength", - Moment (Rational (1)).smobbed_copy ()); + timing->get_property ("measureLength")); context ()->set_property ("baseMoment", - Moment (Rational (1, 4)).smobbed_copy ()); + timing->get_property ("baseMoment")); } Rational @@ -144,10 +159,12 @@ ADD_TRANSLATOR (Timing_translator, "", /* read */ - "internalBarNumber " + "baseMoment " "currentBarNumber " + "internalBarNumber " "measureLength " - "measurePosition ", + "measurePosition " + "timeSignatureFraction ", /* write */ "baseMoment " diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index c80209c373..87505e27cc 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -528,7 +528,14 @@ automatically when an output definition (a @code{\score} or \consists "Repeat_acknowledge_engraver" \consists "Staff_collecting_engraver" - %% move the alias along with the engraver. + \alias "Timing" + + %% An alias for Timing is established by the Timing_translator in + %% whatever context it is initialized, and the timing variables are + %% then copied from wherever Timing had been previously established. + %% The alias at Score level provides a target for initializing + %% Timing variables in layout definitions before any + %% Timing_translator has been run. % timing translator must come BEFORE bar number engraver \consists "Timing_translator" diff --git a/ly/performer-init.ly b/ly/performer-init.ly index 62a2a83a92..98ae0ceb8f 100644 --- a/ly/performer-init.ly +++ b/ly/performer-init.ly @@ -160,6 +160,23 @@ \consists "Time_signature_performer" \consists "Control_track_performer" \consists "Tempo_performer" + + \alias "Timing" + + %% An alias for Timing is established by the Timing_translator in + %% whatever context it is initialized, and the timing variables are + %% then copied from wherever Timing had been previously established. + %% The alias at Score level provides a target for initializing + %% Timing variables in layout definitions before any + %% Timing_translator has been run. + + timeSignatureFraction = #'(4 . 4) + +%% These defaults should be the same as the rules established in +%% scm/time-signature-settings.scm for 4/4 time + measureLength = #(ly:make-moment 4 4) + baseMoment = #(ly:make-moment 1 4) + \consists "Timing_translator" \defaultchild "Staff"