X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fengraver.cc;h=59c91306ef39496f5f729273686c0d58def2ab68;hb=a6a51abfd0195a3cf7d6ea095cf69808852f21ce;hp=e2fbe860c092a44cf2e2b0f40a9174c4c2027711;hpb=d2762a4f1add2bb04d6fc34d3c7ae03eeb7d500f;p=lilypond.git diff --git a/lily/engraver.cc b/lily/engraver.cc index e2fbe860c0..59c91306ef 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -36,28 +36,27 @@ Engraver::get_daddy_engraver () const } void -Engraver::announce_grob (Grob_info inf) +Engraver::announce_grob (Grob_info inf, Context *reroute_context) { - get_daddy_engraver ()->announce_grob (inf); + get_daddy_engraver ()->announce_grob (inf, START, reroute_context); } void -Engraver::announce_end_grob (Grob_info inf) +Engraver::announce_end_grob (Grob_info inf, Context *reroute_context) { - inf.start_end_ = STOP; - get_daddy_engraver ()->announce_grob (inf); + get_daddy_engraver ()->announce_grob (inf, STOP, reroute_context); } Grob_info Engraver::make_grob_info (Grob *e, SCM cause) { /* TODO: Remove Music code when it's no longer needed */ - if (Music *m = Music::unsmob (cause)) + if (Music *m = unsmob (cause)) { cause = m->to_event ()->unprotect (); } - if (e->get_property ("cause") == SCM_EOL - && (Stream_event::is_smob (cause) || Grob::is_smob (cause))) + if (scm_is_null (e->get_property ("cause")) + && (unsmob (cause) || unsmob (cause))) e->set_property ("cause", cause); return Grob_info (this, e); @@ -82,11 +81,12 @@ Engraver::announce_end_grob (Grob *e, SCM cause) announce_end_grob (make_grob_info (e, cause)); } -Engraver::Engraver () +Engraver::Engraver (Context *c) + : Translator (c) { } -#ifndef NDEBUG +#ifdef DEBUG static SCM creation_callback = SCM_EOL; LY_DEFINE (ly_set_grob_creation_callback, "ly:set-grob-creation-callback", 1, 0, 0, (SCM cb), @@ -107,12 +107,11 @@ LY_DEFINE (ly_set_grob_creation_callback, "ly:set-grob-creation-callback", Grob * Engraver::internal_make_grob (SCM symbol, SCM cause, - char const * /* name */, char const *file, int line, char const *fun) { -#ifdef NDEBUG +#ifndef DEBUG (void)file; (void)line; (void)fun; @@ -125,21 +124,21 @@ Engraver::internal_make_grob (SCM symbol, SCM handle = scm_sloppy_assq (ly_symbol2scm ("meta"), props); SCM klass = scm_cdr (scm_sloppy_assq (ly_symbol2scm ("class"), scm_cdr (handle))); - if (klass == ly_symbol2scm ("Item")) + if (scm_is_eq (klass, ly_symbol2scm ("Item"))) grob = new Item (props); - else if (klass == ly_symbol2scm ("Spanner")) + else if (scm_is_eq (klass, ly_symbol2scm ("Spanner"))) grob = new Spanner (props); - else if (klass == ly_symbol2scm ("Paper_column")) + else if (scm_is_eq (klass, ly_symbol2scm ("Paper_column"))) grob = new Paper_column (props); assert (grob); announce_grob (grob, cause); -#ifndef NDEBUG +#ifdef DEBUG if (ly_is_procedure (creation_callback)) - scm_apply_0 (creation_callback, - scm_list_n (grob->self_scm (), scm_from_locale_string (file), - scm_from_int (line), scm_from_locale_string (fun), SCM_UNDEFINED)); + scm_call_4 (creation_callback, + grob->self_scm (), scm_from_utf8_string (file), + scm_from_int (line), scm_from_ascii_string (fun)); #endif return grob; @@ -147,26 +146,24 @@ Engraver::internal_make_grob (SCM symbol, Item * Engraver::internal_make_item (SCM x, SCM cause, - char const *name, char const *file, int line, char const *fun) { - Item *it = dynamic_cast (internal_make_grob (x, cause, name, file, line, fun)); + Item *it = dynamic_cast (internal_make_grob (x, cause, file, line, fun)); assert (it); return it; } Paper_column * -Engraver::internal_make_column (SCM x, char const *name, - char const *file, int line, char const *fun) +Engraver::internal_make_column (SCM x, char const *file, int line, char const *fun) { - return dynamic_cast (internal_make_grob (x, SCM_EOL, name, file, line, fun)); + return dynamic_cast (internal_make_grob (x, SCM_EOL, file, line, fun)); } Spanner * -Engraver::internal_make_spanner (SCM x, SCM cause, char const *name, +Engraver::internal_make_spanner (SCM x, SCM cause, char const *file, int line, char const *fun) { - Spanner *sp = dynamic_cast (internal_make_grob (x, cause, name, file, line, fun)); + Spanner *sp = dynamic_cast (internal_make_grob (x, cause, file, line, fun)); assert (sp); return sp; } @@ -174,22 +171,5 @@ Engraver::internal_make_spanner (SCM x, SCM cause, char const *name, bool ly_is_grob_cause (SCM obj) { - return Grob::is_smob (obj) || Stream_event::is_smob (obj) || (obj == SCM_EOL); + return unsmob (obj) || unsmob (obj) || scm_is_null (obj); } - -#include "translator.icc" - -ADD_TRANSLATOR (Engraver, - /* doc */ - "Base class for engravers. Does nothing, so it is not used.", - - /* create */ - "", - - /* read */ - "", - - /* write */ - "" - ); -