X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fvolta-engraver.cc;h=8d6a16f1ee6f4d8d3f8f953ef4119103db988b05;hb=5d84bfad4626892bcffd05adcced53c8a2329047;hp=708b535d260610c207e3d98ba0df287eb91fecec;hpb=2eb63c6977706ba261e4ee0674c734a34b3ee904;p=lilypond.git diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index 708b535d26..8d6a16f1ee 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -1,15 +1,25 @@ /* - volta-engraver.cc -- implement Volta_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2000--2015 Han-Wen Nienhuys - (c) 2000--2007 Han-Wen Nienhuys + 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. + + 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 . */ #include "engraver.hh" #include "axis-group-interface.hh" -#include "bar-line.hh" #include "context.hh" #include "grob-array.hh" #include "international.hh" @@ -33,7 +43,7 @@ public: TRANSLATOR_DECLARATIONS (Volta_engraver); protected: - DECLARE_ACKNOWLEDGER (bar_line); + void acknowledge_bar_line (Grob_info); virtual void derived_mark () const; void stop_translation_timestep (); @@ -52,7 +62,8 @@ Volta_engraver::derived_mark () const scm_gc_mark (start_string_); } -Volta_engraver::Volta_engraver () +Volta_engraver::Volta_engraver (Context *c) + : Engraver (c) { start_string_ = SCM_EOL; volta_bracket_ = 0; @@ -72,14 +83,14 @@ Volta_engraver::process_music () SCM c = scm_car (cs); if (scm_is_pair (c) - && scm_car (c) == ly_symbol2scm ("volta") - && scm_is_pair (scm_cdr (c))) - { - if (scm_cadr (c) == SCM_BOOL_F) - end = true; - else - start_string_ = scm_cadr (c); - } + && scm_is_eq (scm_car (c), ly_symbol2scm ("volta")) + && scm_is_pair (scm_cdr (c))) + { + if (scm_is_false (scm_cadr (c))) + end = true; + else + start_string_ = scm_cadr (c); + } cs = scm_cdr (cs); } @@ -89,8 +100,8 @@ Volta_engraver::process_music () SCM l (get_property ("voltaSpannerDuration")); Moment now = now_mom (); - bool early_stop = unsmob_moment (l) - && *unsmob_moment (l) <= now - started_mom_; + bool early_stop = unsmob (l) + && *unsmob (l) <= now - started_mom_; end = end || early_stop; } @@ -110,11 +121,11 @@ Volta_engraver::process_music () warning (_ ("already have a volta spanner, ending that one prematurely")); if (end_volta_bracket_) - { - warning (_ ("also already have an ended spanner")); - warning (_ ("giving up")); - return; - } + { + warning (_ ("also already have an ended spanner")); + warning (_ ("giving up")); + return; + } end_volta_bracket_ = volta_bracket_; volta_bracket_ = 0; @@ -130,7 +141,7 @@ Volta_engraver::process_music () volta_bracket_->set_property ("text", start_string_); if (!volta_spanner_) - volta_spanner_ = make_spanner ("VoltaBracketSpanner", SCM_EOL); + volta_spanner_ = make_spanner ("VoltaBracketSpanner", SCM_EOL); Axis_group_interface::add_element (volta_spanner_, volta_bracket_); } @@ -151,7 +162,7 @@ Volta_engraver::acknowledge_bar_line (Grob_info i) void Volta_engraver::stop_translation_timestep () { - Grob *cc = unsmob_grob (get_property ("currentCommandColumn")); + Grob *cc = unsmob (get_property ("currentCommandColumn")); Item *ci = dynamic_cast (cc); if (end_volta_bracket_ && !end_volta_bracket_->get_bound (RIGHT)) @@ -163,7 +174,7 @@ Volta_engraver::stop_translation_timestep () if (end_volta_bracket_ && !volta_bracket_) { for (SCM s = get_property ("stavesFound"); scm_is_pair (s); s = scm_cdr (s)) - Side_position_interface::add_support (volta_spanner_, unsmob_grob (scm_car (s))); + Side_position_interface::add_support (volta_spanner_, unsmob (scm_car (s))); volta_spanner_ = 0; } @@ -179,20 +190,25 @@ Volta_engraver::stop_translation_timestep () /* TODO: should attach volta to paper-column if no bar is found. */ -ADD_ACKNOWLEDGER (Volta_engraver, bar_line); +void +Volta_engraver::boot () +{ + ADD_ACKNOWLEDGER (Volta_engraver, bar_line); +} + ADD_TRANSLATOR (Volta_engraver, - /* doc */ - "Make volta brackets.", + /* doc */ + "Make volta brackets.", - /* create */ - "VoltaBracket " - "VoltaBracketSpanner ", + /* create */ + "VoltaBracket " + "VoltaBracketSpanner ", - /* read */ - "repeatCommands " - "voltaSpannerDuration " - "stavesFound ", + /* read */ + "repeatCommands " + "voltaSpannerDuration " + "stavesFound ", - /* write */ - "" - ); + /* write */ + "" + );