From d3ebaaf79ca8e8d0412a9c6746a690330b4d2619 Mon Sep 17 00:00:00 2001 From: hanwen Date: Tue, 27 Jul 2004 21:48:58 +0000 Subject: [PATCH] * lily/parser.yy (context_def_mod): remove \consistsend * lily/context-def.cc (instantiate): use Translator::must_be_last to determine engraver order. * lily/translator.cc (must_be_last): new function * scripts/convert-ly.py (conv): rule. --- ChangeLog | 13 +++++++++++++ lily/axis-group-engraver.cc | 1 + lily/context-def.cc | 27 +++++++++++++++++++-------- lily/include/translator.hh | 8 +++++++- lily/my-lily-lexer.cc | 1 - lily/parser.yy | 4 +--- lily/translator.cc | 11 ++++++++++- ly/engraver-init.ly | 16 ++++++++-------- scripts/convert-ly.py | 10 ++++++++++ 9 files changed, 69 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index ee43b22df7..51ef054ab0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2004-07-27 Han-Wen Nienhuys + + * lily/parser.yy (context_def_mod): remove \consistsend + + * lily/context-def.cc (instantiate): use Translator::must_be_last + to determine engraver order. + + * lily/translator.cc (must_be_last): new function + + * scripts/convert-ly.py (conv): rule. + + * lily/bar-line.cc (print): return '() for height == 0.0 too. + 2004-07-27 Heikki Junes * input/regression/{stanza-number,volta-multi-staff}.ly: fix docs. diff --git a/lily/axis-group-engraver.cc b/lily/axis-group-engraver.cc index ffd0dd3a0e..c28584909f 100644 --- a/lily/axis-group-engraver.cc +++ b/lily/axis-group-engraver.cc @@ -35,6 +35,7 @@ public: Axis_group_engraver::Axis_group_engraver () { + must_be_last_ = true; staffline_ = 0; } diff --git a/lily/context-def.cc b/lily/context-def.cc index e9c7f4da3c..ba9f5fec17 100644 --- a/lily/context-def.cc +++ b/lily/context-def.cc @@ -205,7 +205,6 @@ SCM Context_def::get_translator_names (SCM user_mod) const { SCM l1 = SCM_EOL; - SCM l2 = SCM_EOL; SCM mods = scm_reverse_x (scm_list_copy (translator_mods_), user_mod); @@ -219,15 +218,13 @@ Context_def::get_translator_names (SCM user_mod) const if (ly_symbol2scm ("consists") == tag) l1 = scm_cons (arg, l1); - else if (ly_symbol2scm ("consists-end") == tag) - l2 = scm_cons (arg, l2); else if (ly_symbol2scm ("remove") == tag) { l1 = scm_delete_x (arg, l1); - l2 = scm_delete_x (arg, l2); } } - return scm_append_x (scm_list_2 (l1, l2)); + + return l1; } SCM @@ -278,9 +275,9 @@ Context_def::instantiate (SCM ops) Translator *g = get_translator (translator_group_type_); g = g->clone (); - - g->simple_trans_list_ = SCM_EOL; + SCM trans_list = SCM_EOL; + for (SCM s = trans_names; ly_c_pair_p (s) ; s = ly_cdr (s)) { Translator *t = get_translator (ly_car (s)); @@ -290,12 +287,26 @@ Context_def::instantiate (SCM ops) { Translator *tr = t->clone (); SCM str = tr->self_scm (); - g->simple_trans_list_ = scm_cons (str, g->simple_trans_list_); + + if (tr->must_be_last ()) + { + SCM cons = scm_cons (str, SCM_EOL); + trans_list = ly_c_pair_p (trans_list) + ? scm_set_cdr_x (scm_last_pair (trans_list), cons) + : cons; + } + else + { + trans_list = scm_cons (str, trans_list); + } + tr->daddy_context_ = tg; scm_gc_unprotect_object (str); } } + g->simple_trans_list_ = trans_list; + tg->implementation_ = g->self_scm (); if (dynamic_cast (g)) g->simple_trans_list_ = filter_performers (g->simple_trans_list_); diff --git a/lily/include/translator.hh b/lily/include/translator.hh index 1050cac31a..9d6996d6d8 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -35,8 +35,13 @@ public: \ class Translator { void init (); - + +protected: + bool must_be_last_; + public: + bool must_be_last () const; + Context * context () const { return daddy_context_; } Translator (Translator const &); @@ -56,6 +61,7 @@ public: Score_context * get_score_context () const; Global_context * get_global_context () const; + TRANSLATOR_DECLARATIONS(Translator); DECLARE_SMOBS (Translator, dummy); diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index 374a078390..d878327015 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -36,7 +36,6 @@ static Keyword_ent the_key_tab[] = { {"chords", CHORDS}, {"clef", CLEF}, {"consists", CONSISTS}, - {"consistsend", CONSISTSEND}, {"context", CONTEXT}, {"default", DEFAULT}, {"denies", DENIES}, diff --git a/lily/parser.yy b/lily/parser.yy index cfd64db525..1aff966467 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -257,7 +257,6 @@ or %token CLEF %token COMMANDSPANREQUEST %token CONSISTS -%token CONSISTSEND %token CONTEXT %token DEFAULT %token DENIES @@ -1276,8 +1275,7 @@ property_operation: ; context_def_mod: - CONSISTSEND { $$ = ly_symbol2scm ("consists-end"); } - | CONSISTS { $$ = ly_symbol2scm ("consists"); } + CONSISTS { $$ = ly_symbol2scm ("consists"); } | REMOVE { $$ = ly_symbol2scm ("remove"); } | ACCEPTS { $$ = ly_symbol2scm ("accepts"); } diff --git a/lily/translator.cc b/lily/translator.cc index 485e22b29a..17c9ab38c2 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -24,6 +24,7 @@ Translator::~Translator () void Translator::init () { + must_be_last_ = false; self_scm_ = SCM_EOL; simple_trans_list_ = SCM_BOOL_F; daddy_context_ =0; @@ -46,9 +47,10 @@ Translator::Translator () init (); } -Translator::Translator (Translator const &) +Translator::Translator (Translator const &src) { init (); + must_be_last_ = src.must_be_last_; } bool @@ -157,3 +159,10 @@ Translator::static_translator_description ()const IMPLEMENT_SMOBS (Translator); IMPLEMENT_DEFAULT_EQUAL_P (Translator); IMPLEMENT_TYPE_P (Translator,"ly:translator?"); + +bool +Translator::must_be_last () const +{ + return must_be_last_; +} + diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index a28944421b..d86a92ee18 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -1,4 +1,4 @@ -\version "2.3.2" +\version "2.3.8" \context { \name Global @@ -38,7 +38,7 @@ \consists "Piano_pedal_engraver" \consists "Instrument_name_engraver" \consists "String_number_engraver" - \consistsend "Axis_group_engraver" + \consists "Axis_group_engraver" minimumVerticalExtent = #'(-6 . 6) extraVerticalExtent = ##f @@ -140,7 +140,7 @@ \consists "Staff_symbol_engraver" \consists "Ledger_line_engraver" \consists "Instrument_name_engraver" - \consistsend "Axis_group_engraver" + \consists "Axis_group_engraver" \accepts "Voice" \description " A context like @code{Staff} but for printing rhythms. Pitches are @@ -313,7 +313,7 @@ connected vertically. " \context{ \type "Engraver_group_engraver" - \consistsend "Hara_kiri_engraver" + \consists "Hara_kiri_engraver" minimumVerticalExtent = #'(-1.2 . 2.4) extraVerticalExtent = ##f verticalExtent = ##f @@ -336,7 +336,7 @@ printing of a single line of lyrics. " \context { \type "Engraver_group_engraver" \name NoteNames - \consistsend "Axis_group_engraver" + \consists "Axis_group_engraver" minimumVerticalExtent = ##f extraVerticalExtent = ##f @@ -362,7 +362,7 @@ printing of a single line of lyrics. " \consists "Separating_line_group_engraver" \consists "Chord_name_engraver" \consists "Skip_event_swallow_translator" - \consistsend "Hara_kiri_engraver" + \consists "Hara_kiri_engraver" voltaOnThisStaff = ##f minimumVerticalExtent = #'(0 . 2.5) @@ -375,7 +375,7 @@ printing of a single line of lyrics. " RemoveEmptyStaffContext= \context { \Staff \remove "Axis_group_engraver" - \consistsend "Hara_kiri_engraver" + \consists "Hara_kiri_engraver" \override Beam #'auto-knee-gap = #'() } @@ -576,7 +576,7 @@ EasyNotation = \context { % TODO: why \context override? \consists "Skip_event_swallow_translator" \consists "Separating_line_group_engraver" - \consistsend "Hara_kiri_engraver" + \consists "Hara_kiri_engraver" } \context { diff --git a/scripts/convert-ly.py b/scripts/convert-ly.py index 965d6d6978..9ea4fcd27e 100644 --- a/scripts/convert-ly.py +++ b/scripts/convert-ly.py @@ -2115,6 +2115,16 @@ def conv (str): conversions.append (((2, 3, 4), conv, '''remove \\notes''')) + + +def conv (str): + str = re.sub (r'\\consistsend', '\\consists', str) + return str + +conversions.append (((2, 3, 8), conv, + '''remove \\consistsend''')) + + ################################ # END OF CONVERSIONS ################################ -- 2.39.2