X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fvolta-engraver.cc;h=8d6a16f1ee6f4d8d3f8f953ef4119103db988b05;hb=90e4d7057f3857da049dfda3d130017d4719bd6b;hp=b43254fc609ed967cd4abca3faeee716940b058c;hpb=101e420a124ab74772aa836479733bd5175b01e1;p=lilypond.git diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index b43254fc60..8d6a16f1ee 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Han-Wen Nienhuys + Copyright (C) 2000--2015 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 @@ -43,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 (); @@ -62,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; @@ -82,10 +83,10 @@ Volta_engraver::process_music () SCM c = scm_car (cs); if (scm_is_pair (c) - && scm_car (c) == ly_symbol2scm ("volta") + && scm_is_eq (scm_car (c), ly_symbol2scm ("volta")) && scm_is_pair (scm_cdr (c))) { - if (scm_cadr (c) == SCM_BOOL_F) + if (scm_is_false (scm_cadr (c))) end = true; else start_string_ = scm_cadr (c); @@ -99,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; } @@ -152,43 +153,7 @@ Volta_engraver::acknowledge_bar_line (Grob_info i) if (volta_bracket_) Volta_bracket_interface::add_bar (volta_bracket_, i.item ()); if (end_volta_bracket_) - { - Volta_bracket_interface::add_bar (end_volta_bracket_, i.item ()); - Grob *endbar = i.grob(); - SCM glyph = endbar ? endbar->get_property ("glyph-name") : SCM_EOL; - - string str; - bool no_vertical_end = false; - if (scm_is_string (glyph)) - str = ly_scm2string (glyph); - else - str = "|"; - - SCM vertical_end_allow_list = get_property ("voltaAllowEndLineOnGlyphs"); - if (ly_cheap_is_list (vertical_end_allow_list)) - { // checks based on user settable property - bool match_not_found = true; - while (scm_is_pair (vertical_end_allow_list) && match_not_found) - { - if (str == robust_scm2string (scm_car (vertical_end_allow_list), "* invalid *")) - match_not_found = false; - vertical_end_allow_list = scm_cdr (vertical_end_allow_list); - } - no_vertical_end |= match_not_found; - } - - if (no_vertical_end) - { - Drul_array edge_height = robust_scm2interval (end_volta_bracket_->get_property ("edge-height"), - Interval (1.0, 1.0)); - - if (no_vertical_end) - edge_height[RIGHT] = 0.0; - - end_volta_bracket_->set_property ("edge-height", ly_interval2scm (edge_height)); - - } - } + Volta_bracket_interface::add_bar (end_volta_bracket_, i.item ()); if (volta_spanner_) Side_position_interface::add_support (volta_spanner_, i.grob ()); @@ -197,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)) @@ -209,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; } @@ -225,7 +190,12 @@ 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.", @@ -235,7 +205,6 @@ ADD_TRANSLATOR (Volta_engraver, "VoltaBracketSpanner ", /* read */ - "voltaAllowEndLineOnGlyphs " "repeatCommands " "voltaSpannerDuration " "stavesFound ",