]> git.donarmstrong.com Git - lilypond.git/commitdiff
Make Score an initial Timing alias to allow for context mods
authorDavid Kastrup <dak@gnu.org>
Sun, 11 Mar 2012 11:16:52 +0000 (12:16 +0100)
committerDavid Kastrup <dak@gnu.org>
Wed, 14 Mar 2012 21:10:27 +0000 (22:10 +0100)
lily/timing-translator.cc
ly/engraver-init.ly
ly/performer-init.ly

index 8d456b2d38d537169ee94faa9163e17addd74d33..81d82eec97a71d02c9c2005954304ad4e2261e41 100644 (file)
@@ -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 "
index c80209c373fe49186b33d606d5dc6588801ad23a..87505e27ccdcf33665edc4ef4eb58ba4e94a85e2 100644 (file)
@@ -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"
index 62a2a83a9242915202741e0c835d3ca9edec0043..98ae0ceb8f6bfffe46783dc4b493d2ec43462d40 100644 (file)
   \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"