/*
- timing-translator.cc -- implement Timing_translator
+ This file is part of LilyPond, the GNU music typesetter.
+ Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
- source file of the GNU LilyPond music typesetter
+ LilyPond is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ LilyPond is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
#include "timing-translator.hh"
#include "warn.hh"
#include "translator-group.hh"
#include "global-context.hh"
-#include "multi-measure-rest.hh"
void
Timing_translator::stop_translation_timestep ()
Moment now = now_mom ();
if (barleft > Moment (0))
- {
- Moment nextmom = now + barleft;
- nextmom.grace_part_ = Rational (0);
- global->add_moment_to_process (nextmom);
- }
+ {
+ Moment nextmom = now + barleft;
+ nextmom.grace_part_ = Rational (0);
+ global->add_moment_to_process (nextmom);
+ }
}
}
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 ());
- context ()->set_property ("beatLength",
- Moment (Rational (1, 4)).smobbed_copy ());
+ timing->get_property ("measureLength"));
+ context ()->set_property ("baseMoment",
+ timing->get_property ("baseMoment"));
}
Rational
{
measposp = now;
context ()->set_property ("measurePosition",
- measposp.smobbed_copy ());
+ measposp.smobbed_copy ());
}
measposp += dt;
while (c && measposp.main_part_ >= len)
{
measposp.main_part_ -= len;
- current_barnumber ++;
- internal_barnumber ++;
+ current_barnumber++;
+ internal_barnumber++;
}
context ()->set_property ("currentBarNumber", scm_from_int (current_barnumber));
#include "translator.icc"
ADD_TRANSLATOR (Timing_translator,
- "This engraver adds the alias "
- "@code{Timing} to its containing context."
- "Responsible for synchronizing timing information from staves. "
- "Normally in @code{Score}. In order to create polyrhythmic music, "
- "this engraver should be removed from @code{Score} and placed in "
- "@code{Staff}. "
- "\n\nThis engraver adds the alias @code{Timing} to its containing context.",
-
- "",
-
- "internalBarNumber "
- "currentBarNumber "
- "measureLength "
- "measurePosition ",
-
- "internalBarNumber "
- "currentBarNumber "
- "measurePosition "
- );
+ /* doc */
+ "This engraver adds the alias @code{Timing} to its containing"
+ " context. Responsible for synchronizing timing information"
+ " from staves. Normally in @code{Score}. In order to create"
+ " polyrhythmic music, this engraver should be removed from"
+ " @code{Score} and placed in @code{Staff}.",
+
+ /* create */
+ "",
+
+ /* read */
+ "baseMoment "
+ "currentBarNumber "
+ "internalBarNumber "
+ "measureLength "
+ "measurePosition "
+ "timeSignatureFraction ",
+
+ /* write */
+ "baseMoment "
+ "currentBarNumber "
+ "internalBarNumber "
+ "measureLength "
+ "measurePosition "
+ "timeSignatureFraction "
+ );