From a501f5946426488804ca2b03ab986f9c2b94ab99 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sun, 11 Apr 2004 23:43:10 +0000 Subject: [PATCH] * lily/include/context.hh (class Context): make members protected. (children_contexts): new accessor function. * lily/include/translator.hh (class Translator): make daddy_context_ protected. (class Translator): clean up. * lily/include/context.hh (class Context): make daddy_context_ private. * lily/lyric-engraver.cc (get_voice_to_lyrics): recursively go higher for finding Voice. (backportme) * lily/include/context.hh (class Context): remove find_context_below() as a method. * Documentation/user/notation.itely (The Lyrics context): add note about manual durations * ly/chord-modifiers-init.ly (blackTriangleMarkup): use TeX-math encoding. * scm/output-tex.scm (text): dump \inputencoding{} for text. --- ChangeLog | 22 ++++++++++++++ Documentation/user/notation.itely | 30 +++++++++++++++++++ lily/accidental-engraver.cc | 20 ++++++------- lily/audio-element-info.cc | 6 ++-- lily/auto-beam-engraver.cc | 2 +- lily/auto-change-iterator.cc | 2 +- lily/axis-group-engraver.cc | 2 +- lily/beam-engraver.cc | 2 +- lily/beam-performer.cc | 2 +- lily/change-iterator.cc | 6 ++-- lily/chord-name-engraver.cc | 2 +- lily/clef-engraver.cc | 6 ++-- lily/context-def.cc | 20 ++++++++++++- lily/context-scheme.cc | 6 ++-- lily/context.cc | 38 +++++++++--------------- lily/drum-note-engraver.cc | 2 +- lily/dynamic-engraver.cc | 4 +-- lily/engraver-group-engraver.cc | 4 +-- lily/extender-engraver.cc | 2 +- lily/figured-bass-engraver.cc | 2 +- lily/font-size-engraver.cc | 2 +- lily/grob-info.cc | 6 ++-- lily/grob-pq-engraver.cc | 8 ++--- lily/include/context.hh | 16 ++++++---- lily/include/engraver.hh | 4 +-- lily/include/translator.hh | 31 ++++++++++--------- lily/instrument-name-engraver.cc | 4 +-- lily/key-engraver.cc | 12 ++++---- lily/ligature-engraver.cc | 6 ++-- lily/lyric-engraver.cc | 30 ++++++++++++++----- lily/mark-engraver.cc | 4 +-- lily/melisma-translator.cc | 6 ++-- lily/metronome-engraver.cc | 2 +- lily/music-iterator.cc | 2 +- lily/new-fingering-engraver.cc | 2 +- lily/new-lyric-combine-music-iterator.cc | 10 +++---- lily/note-head-line-engraver.cc | 4 +-- lily/output-property-engraver.cc | 4 +-- lily/performer-group-performer.cc | 2 +- lily/recording-group-engraver.cc | 2 +- lily/repeat-acknowledge-engraver.cc | 8 ++--- lily/score-engraver.cc | 20 ++++++------- lily/score-performer.cc | 10 +++---- lily/script-engraver.cc | 2 +- lily/separating-line-group-engraver.cc | 4 +-- lily/simultaneous-music-iterator.cc | 2 +- lily/slur-engraver.cc | 2 +- lily/slur-performer.cc | 2 +- lily/staff-collecting-engraver.cc | 2 +- lily/staff-performer.cc | 2 +- lily/stem-engraver.cc | 6 ++-- lily/system-start-delimiter-engraver.cc | 2 +- lily/tie-engraver.cc | 4 +-- lily/tie-performer.cc | 4 +-- lily/timing-engraver.cc | 6 ++-- lily/timing-translator.cc | 18 +++++------ lily/translator-group.cc | 28 ++--------------- lily/translator-property.cc | 4 +-- ly/chord-modifiers-init.ly | 4 +-- make/lilypond.redhat.spec.in | 2 +- scm/output-tex.scm | 17 ++++++----- 61 files changed, 272 insertions(+), 214 deletions(-) diff --git a/ChangeLog b/ChangeLog index 40b9e3b317..4f4b9c5950 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,27 @@ 2004-04-12 Han-Wen Nienhuys + * lily/include/context.hh (class Context): make members protected. + (children_contexts): new accessor function. + + * lily/include/translator.hh (class Translator): make + daddy_context_ protected. + (class Translator): clean up. + + * lily/include/context.hh (class Context): make daddy_context_ + private. + + * lily/lyric-engraver.cc (get_voice_to_lyrics): recursively go + higher for finding Voice. (backportme) + + * lily/include/context.hh (class Context): remove + find_context_below() as a method. + + * Documentation/user/notation.itely (The Lyrics context): add note + about manual durations + + * ly/chord-modifiers-init.ly (blackTriangleMarkup): use TeX-math + encoding. + * scm/output-tex.scm (text): dump \inputencoding{} for text. 2004-04-11 Han-Wen Nienhuys diff --git a/Documentation/user/notation.itely b/Documentation/user/notation.itely index 022baccb4c..ec8499d4b6 100644 --- a/Documentation/user/notation.itely +++ b/Documentation/user/notation.itely @@ -3466,6 +3466,36 @@ be tuned with the property @code{melismaBusyProperties}. See @internalsref{Melisma_translator} in the program reference for more information. +Lyrics can also be entered without @code{\lyricsto}. In this case the +durations of each syllable must be entered explicitly, for example, + +@verbatim + play2 the4 game2. + sink2 or4 swim2. +@end verbatim + +Alignment to a melody can be specified with the @code{associatedVoice} +property, + +@verbatim + \set associatedVoice = #"melody" +@end verbatim + +Here is an example demonstrating manual lyric durations, + +@lilypond[relative=1,verbatim,fragment] +<< \context Voice = melody { + c2 e4 g2. + } + \new Lyrics \lyrics { + \set associatedVoice = #"melody" + play2 the4 game2. + } >> +@end lilypond + + + + When multiple stanzas are put on the same melody, it can happen that two stanzas have melismata in different locations. This can be remedied by switching off melismata for one diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc index 7d19220de4..4d86929756 100644 --- a/lily/accidental-engraver.cc +++ b/lily/accidental-engraver.cc @@ -73,7 +73,7 @@ static void set_property_on_children (Context * trans, const char * sym, SCM val) { trans->set_property (sym, val); - for (SCM p = trans->context_list_; is_pair (p); p = ly_cdr (p)) + for (SCM p = trans->children_contexts (); is_pair (p); p = ly_cdr (p)) { Context *trg = unsmob_context (ly_car (p)); set_property_on_children (trg, sym, ly_deep_copy (val)); @@ -91,14 +91,14 @@ Accidental_engraver::initialize () { last_keysig_ = get_property ("keySignature"); - Context * trans_ = daddy_context_; + Context * trans_ = get_parent_context (); while (trans_) { trans_ -> set_property ("localKeySignature", ly_deep_copy (last_keysig_)); - trans_ = trans_->daddy_context_; + trans_ = trans_->get_parent_context (); } - set_property_on_children (daddy_context_,"localKeySignature", last_keysig_); + set_property_on_children (get_parent_context (),"localKeySignature", last_keysig_); } /* @@ -203,7 +203,7 @@ number_accidentals (bool *different, { Context * dad = origin; while (dad && !dad->is_alias (rule)) - dad = dad->daddy_context_; + dad = dad->get_parent_context (); if (dad) origin = dad; @@ -411,7 +411,7 @@ Accidental_engraver::stop_translation_timestep () if (change) origin->set_property ("localKeySignature", localsig); - origin = origin->daddy_context_; + origin = origin->get_parent_context (); } } @@ -447,7 +447,7 @@ Accidental_engraver::acknowledge_grob (Grob_info info) Accidental_entry entry ; entry.head_ = info.grob_; - entry.origin_ = info.origin_trans_->daddy_context_; + entry.origin_ = info.origin_trans_->get_parent_context (); entry.melodic_ = note; accidentals_.push (entry); @@ -477,13 +477,13 @@ Accidental_engraver::process_music () */ if (last_keysig_ != sig) { - Context * trans_ = daddy_context_; + Context * trans_ = get_parent_context (); while (trans_) { trans_ -> set_property ("localKeySignature", ly_deep_copy (sig)); - trans_ = trans_->daddy_context_; + trans_ = trans_->get_parent_context (); } - set_property_on_children (daddy_context_,"localKeySignature", sig); + set_property_on_children (get_parent_context (),"localKeySignature", sig); last_keysig_ = sig; } diff --git a/lily/audio-element-info.cc b/lily/audio-element-info.cc index a2bf63233a..76ec0f6030 100644 --- a/lily/audio-element-info.cc +++ b/lily/audio-element-info.cc @@ -29,12 +29,12 @@ Audio_element_info::Audio_element_info () Link_array Audio_element_info::origin_contexts (Translator* end) const { - Context * t = origin_trans_->daddy_context_; + Context * t = origin_trans_->get_parent_context (); Link_array r; do { r.push (t); - t = t->daddy_context_; - } while (t && t != end->daddy_context_); + t = t->get_parent_context (); + } while (t && t != end->get_parent_context ()); return r; } diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index c5b3a4641a..0f9f414390 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -300,7 +300,7 @@ Auto_beam_engraver::begin_beam () stems_ = new Link_array; grouping_ = new Beaming_info_list; - beam_settings_ = updated_grob_properties (daddy_context_, ly_symbol2scm ("Beam")); + beam_settings_ = updated_grob_properties (get_parent_context (), ly_symbol2scm ("Beam")); beam_start_moment_ = now_mom (); beam_start_location_ = *unsmob_moment (get_property ("measurePosition")); diff --git a/lily/auto-change-iterator.cc b/lily/auto-change-iterator.cc index 365d0cfbca..3ab3f6b427 100644 --- a/lily/auto-change-iterator.cc +++ b/lily/auto-change-iterator.cc @@ -53,7 +53,7 @@ Auto_change_iterator::change_to (Music_iterator *it, SCM to_type_sym, while (current && !current->is_alias (to_type_sym)) { last = current; - current = current->daddy_context_; + current = current->get_parent_context (); } if (current && current->id_string_ == to_id) diff --git a/lily/axis-group-engraver.cc b/lily/axis-group-engraver.cc index 8e404c150e..4b1cf29bc6 100644 --- a/lily/axis-group-engraver.cc +++ b/lily/axis-group-engraver.cc @@ -69,7 +69,7 @@ Axis_group_engraver::finalize () if (!staffline_) return ; - String type = daddy_context_->context_name (); + String type = get_parent_context ()->context_name (); SCM dims = get_property ("verticalExtent"); if (is_number_pair (dims)) diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc index e810b7052d..4305aa2191 100644 --- a/lily/beam-engraver.cc +++ b/lily/beam-engraver.cc @@ -121,7 +121,7 @@ Beam_engraver::set_melisma (bool ml) { SCM b = get_property ("autoBeaming"); if (!to_boolean (b)) - daddy_context_->set_property ("beamMelismaBusy", ml ? SCM_BOOL_T :SCM_BOOL_F); + get_parent_context ()->set_property ("beamMelismaBusy", ml ? SCM_BOOL_T :SCM_BOOL_F); } void diff --git a/lily/beam-performer.cc b/lily/beam-performer.cc index 868397641f..1767f4f5b2 100644 --- a/lily/beam-performer.cc +++ b/lily/beam-performer.cc @@ -57,7 +57,7 @@ Beam_performer::set_melisma (bool ml) { SCM b = get_property ("autoBeaming"); if (!to_boolean (b)) - daddy_context_->set_property ("beamMelismaBusy", ml ? SCM_BOOL_T :SCM_BOOL_F); + get_parent_context ()->set_property ("beamMelismaBusy", ml ? SCM_BOOL_T :SCM_BOOL_F); } void diff --git a/lily/change-iterator.cc b/lily/change-iterator.cc index aa03614bab..771be9b983 100644 --- a/lily/change-iterator.cc +++ b/lily/change-iterator.cc @@ -52,7 +52,7 @@ Change_iterator::process (Moment m) while (current && !current->is_alias (to_type)) { last = current; - current = current->daddy_context_; + current = current->get_parent_context (); } if (current && current->id_string_ == to_id) @@ -68,8 +68,8 @@ Change_iterator::process (Moment m) Context * where = get_outlet (); while (!dest && where) { - dest = where->find_context_below (to_type, to_id); - where = where->daddy_context_; + dest = find_context_below (where, to_type, to_id); + where = where->get_parent_context (); } if (dest) diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index 3db792dbe1..6f3c3e33d7 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -102,7 +102,7 @@ Chord_name_engraver::process_music () SCM name_proc = get_property ("chordNameFunction"); SCM markup = scm_call_4 (name_proc, pitches, bass, inversion, - daddy_context_->self_scm ()); + get_parent_context ()->self_scm ()); /* Ugh. diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index 40c009f00b..46a2108012 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -61,8 +61,8 @@ Clef_engraver::set_glyph () SCM basic = ly_symbol2scm ("Clef"); - execute_pushpop_property (daddy_context_, basic, glyph_sym, SCM_UNDEFINED); - execute_pushpop_property (daddy_context_, basic, glyph_sym, glyph); + execute_pushpop_property (get_parent_context (), basic, glyph_sym, SCM_UNDEFINED); + execute_pushpop_property (get_parent_context (), basic, glyph_sym, glyph); } /** @@ -152,7 +152,7 @@ Clef_engraver::inspect_clef_properties () if (to_boolean (force_clef)) { - Context * w = daddy_context_->where_defined (ly_symbol2scm ("forceClef")); + Context * w = get_parent_context ()->where_defined (ly_symbol2scm ("forceClef")); w->set_property ("forceClef", SCM_EOL); } } diff --git a/lily/context-def.cc b/lily/context-def.cc index db674808ab..72d13e6276 100644 --- a/lily/context-def.cc +++ b/lily/context-def.cc @@ -307,7 +307,25 @@ Context_def::instantiate (SCM ops) Translator * g = get_translator (translator_group_type_); g = g->clone (); - g->simple_trans_list_ = names_to_translators (trans_names, tg); + g->simple_trans_list_ = SCM_EOL; + + for (SCM s = trans_names; is_pair (s) ; s = ly_cdr (s)) + { + Translator * t = get_translator (ly_car (s)); + if (!t) + warning (_f ("can't find: `%s'", s)); + else + { + Translator * tr = t->clone (); + SCM str = tr->self_scm (); + g->simple_trans_list_ = scm_cons (str, g->simple_trans_list_); + tr->daddy_context_ = tg; + scm_gc_unprotect_object (str); + } + } + + + tg->implementation_ = g->self_scm (); if (dynamic_cast (g)) g->simple_trans_list_ = filter_performers (g->simple_trans_list_); diff --git a/lily/context-scheme.cc b/lily/context-scheme.cc index 0852958727..1de64aef27 100644 --- a/lily/context-scheme.cc +++ b/lily/context-scheme.cc @@ -30,7 +30,7 @@ LY_DEFINE (ly_context_name, "ly:context-name", { Context *tr = unsmob_context (context); SCM_ASSERT_TYPE (tr, context, SCM_ARG1, __FUNCTION__, "Context"); - return unsmob_context_def (tr->definition_)->get_context_name (); + return ly_symbol2scm (tr->context_name ().to_str0 ()); } LY_DEFINE (is_contextushpop_property, "ly:context-pushpop-property", @@ -111,7 +111,7 @@ LY_DEFINE (is_contextarent, "ly:context-parent", Context *tr = unsmob_context (context); SCM_ASSERT_TYPE (tr, context, SCM_ARG1, __FUNCTION__, "Context"); - tr = tr->daddy_context_ ; + tr = tr->get_parent_context () ; if (tr) return tr->self_scm (); else @@ -132,7 +132,7 @@ LY_DEFINE (ly_context_find, "ly:context-find", { if (tr->is_alias (name)) return tr->self_scm (); - tr = tr->daddy_context_ ; + tr = tr->get_parent_context () ; } return SCM_BOOL_F; diff --git a/lily/context.cc b/lily/context.cc index 43e919a392..bbd1247432 100644 --- a/lily/context.cc +++ b/lily/context.cc @@ -95,22 +95,6 @@ Context::Context () scm_gc_unprotect_object (properties_scm_); } -Context * -Context::find_context_below (SCM n, String id) -{ - if ((is_alias (n) && (id_string_ == id || id.is_empty ()))) - return this; - - Context* r = 0; - for (SCM p = context_list_; !r && is_pair (p); p = ly_cdr (p)) - { - Context * t = unsmob_context (ly_car (p)); - - r = dynamic_cast (t)->find_context_below (n, id); - } - - return r; -} Context* @@ -125,7 +109,7 @@ Context::find_create_context (SCM n, String id, return get_score_context ()->find_create_context (n, id, operations); - Context * existing = find_context_below (n,id); + Context * existing = find_context_below (this, n,id); if (existing) return existing; @@ -189,10 +173,10 @@ Context::find_create_context (SCM n, String id, none. */ SCM -default_child_context_name (Context const *tg) +Context::default_child_context_name () const { - return is_pair (tg->accepts_list_) - ? ly_car (scm_last_pair (tg->accepts_list_)) + return is_pair (accepts_list_) + ? ly_car (scm_last_pair (accepts_list_)) : SCM_EOL; } @@ -200,7 +184,7 @@ default_child_context_name (Context const *tg) bool Context::is_bottom_context () const { - return !is_symbol (default_child_context_name (this)); + return !is_symbol (default_child_context_name ()); } Context* @@ -208,7 +192,7 @@ Context::get_default_interpreter () { if (!is_bottom_context ()) { - SCM nm = default_child_context_name (this); + SCM nm = default_child_context_name (); SCM st = get_output_def ()->find_context_def (nm); Context_def *t = unsmob_context_def (st); @@ -315,7 +299,7 @@ Context::remove_context (Context*trans) */ Context * find_context_below (Context * where, - String type, String id) + SCM type, String id) { if (where->is_alias (ly_symbol2scm (type.to_str0 ()))) { @@ -324,7 +308,7 @@ find_context_below (Context * where, } Context * found = 0; - for (SCM s = where->context_list_; + for (SCM s = where->children_contexts (); !found && is_pair (s); s = ly_cdr (s)) { Context * tr = unsmob_context (ly_car (s)); @@ -452,3 +436,9 @@ Context::get_global_context () const programming_error ("No Global context!"); return 0; } + +Context* +Context::get_parent_context () const +{ + return daddy_context_; +} diff --git a/lily/drum-note-engraver.cc b/lily/drum-note-engraver.cc index 3663ab0c41..7437d08b5f 100644 --- a/lily/drum-note-engraver.cc +++ b/lily/drum-note-engraver.cc @@ -106,7 +106,7 @@ Drum_notes_engraver::process_music () Item *p = make_item ("Script"); SCM desc = SCM_EOL; make_script_from_event (p, &desc, - daddy_context_, script, + get_parent_context (), script, 0); if (p->get_property ("follow-into-staff")) diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 3e947e36f2..0e6573db92 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -239,7 +239,7 @@ Dynamic_engraver::process_music () { cresc_ = make_spanner ("TextSpanner"); cresc_->set_property ("style", s); - daddy_context_->set_property ((start_type + get_parent_context ()->set_property ((start_type + "Spanner").to_str0 (), SCM_EOL); s = get_property ((start_type + "Text").to_str0 ()); /* @@ -249,7 +249,7 @@ Dynamic_engraver::process_music () { cresc_->set_property ("edge-text", scm_cons (s, scm_makfrom0str (""))); - daddy_context_->set_property ((start_type + "Text").to_str0 (), + get_parent_context ()->set_property ((start_type + "Text").to_str0 (), SCM_EOL); } } diff --git a/lily/engraver-group-engraver.cc b/lily/engraver-group-engraver.cc index 0f30f31e25..057cd0d22c 100644 --- a/lily/engraver-group-engraver.cc +++ b/lily/engraver-group-engraver.cc @@ -101,7 +101,7 @@ void Engraver_group_engraver::initialize () { SCM tab = scm_make_vector (scm_int2num (61), SCM_BOOL_F); - daddy_context_->set_property ("acknowledgeHashTable", tab); + get_parent_context ()->set_property ("acknowledgeHashTable", tab); Translator_group::initialize (); } @@ -168,7 +168,7 @@ recurse_down_engravers (Context * c, Engraver_method ptr, bool context_first) (tg->*ptr) (); } - for (SCM s = c->context_list_ ; is_pair (s); + for (SCM s = c->children_contexts () ; is_pair (s); s =ly_cdr (s)) { recurse_down_engravers (unsmob_context (ly_car (s)), ptr, context_first); diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc index 67388c0c14..e90cc50c1d 100644 --- a/lily/extender-engraver.cc +++ b/lily/extender-engraver.cc @@ -92,7 +92,7 @@ Extender_engraver::stop_translation_timestep () if (extender_ || pending_extender_) { - Context *voice = get_voice_to_lyrics (daddy_context_); + Context *voice = get_voice_to_lyrics (get_parent_context ()); Grob* h = (voice) ? get_current_note_head (voice) : 0; if (h) diff --git a/lily/figured-bass-engraver.cc b/lily/figured-bass-engraver.cc index 62c761bfa0..23eeac3220 100644 --- a/lily/figured-bass-engraver.cc +++ b/lily/figured-bass-engraver.cc @@ -85,7 +85,7 @@ Figured_bass_engraver::process_music () t = SCM_CDRLOC (*t); } figure_ = make_item ("BassFigure"); - scm_call_3 (proc, l, daddy_context_->self_scm (), + scm_call_3 (proc, l, get_parent_context ()->self_scm (), figure_->self_scm ()); announce_grob (figure_, figures_[0]->self_scm ()); // todo } diff --git a/lily/font-size-engraver.cc b/lily/font-size-engraver.cc index 659dba6630..96846d0d18 100644 --- a/lily/font-size-engraver.cc +++ b/lily/font-size-engraver.cc @@ -33,7 +33,7 @@ Font_size_engraver::acknowledge_grob (Grob_info gi) /* We only want to process a grob once. */ - if (gi.origin_trans_->daddy_context_ != daddy_context_) + if (gi.origin_trans_->get_parent_context () != get_parent_context ()) return ; if (is_number (sz) && ly_scm2double (sz)) diff --git a/lily/grob-info.cc b/lily/grob-info.cc index 809fdd54a4..d56cd46862 100644 --- a/lily/grob-info.cc +++ b/lily/grob-info.cc @@ -28,12 +28,12 @@ Grob_info::music_cause () Link_array Grob_info::origin_contexts (Translator* end) const { - Context * t = origin_trans_->daddy_context_; + Context * t = origin_trans_->get_parent_context (); Link_array r; do { r.push (t); - t = t->daddy_context_; - } while (t && t != end->daddy_context_); + t = t->get_parent_context (); + } while (t && t != end->get_parent_context ()); return r; } diff --git a/lily/grob-pq-engraver.cc b/lily/grob-pq-engraver.cc index 41a3dc3dfe..f83866ac4c 100644 --- a/lily/grob-pq-engraver.cc +++ b/lily/grob-pq-engraver.cc @@ -30,7 +30,7 @@ Grob_pq_engraver::Grob_pq_engraver () void Grob_pq_engraver::initialize () { - daddy_context_->set_property ("busyGrobs", SCM_EOL); + get_parent_context ()->set_property ("busyGrobs", SCM_EOL); } LY_DEFINE (ly_grob_pq_less_p, "ly:grob-pq-less?", @@ -71,7 +71,7 @@ Grob_pq_engraver::acknowledge_grob (Grob_info gi) SCM busy= get_property ("busyGrobs"); busy = scm_merge_x (lst, busy, ly_grob_pq_less_p_proc); - daddy_context_->set_property ("busyGrobs", busy); + get_parent_context ()->set_property ("busyGrobs", busy); } } @@ -88,7 +88,7 @@ Grob_pq_engraver::stop_translation_timestep () } if (start_busy != busy) - daddy_context_->set_property ("busyGrobs", busy); + get_parent_context ()->set_property ("busyGrobs", busy); } void @@ -108,7 +108,7 @@ Grob_pq_engraver::start_translation_timestep () } if (start_busy != busy) - daddy_context_->set_property ("busyGrobs", busy); + get_parent_context ()->set_property ("busyGrobs", busy); } diff --git a/lily/include/context.hh b/lily/include/context.hh index 004f68fdba..55a4671eaa 100644 --- a/lily/include/context.hh +++ b/lily/include/context.hh @@ -21,14 +21,21 @@ class Context DECLARE_SMOBS (Context, dummy); void terminate (); -public: + +protected: + Context * daddy_context_; SCM definition_; SCM properties_scm_; SCM context_list_; SCM accepts_list_; SCM aliases_; - Context * daddy_context_; + friend class Context_def; +public: + SCM children_contexts () const { return context_list_; } + SCM default_child_context_name () const; + + Context * get_parent_context () const; Context (); void execute_pushpop_property (SCM prop, SCM sym, SCM val); @@ -55,9 +62,8 @@ public: virtual Music_output_def *get_output_def () const; virtual Moment now_mom () const; - Context *find_context_below (SCM context_name, String id); Context *find_create_context (SCM context_name, - String id, SCM ops); + String id, SCM ops); Link_array path_to_acceptable_context (SCM alias, Music_output_def*) const; virtual Context *get_default_interpreter (); @@ -78,7 +84,7 @@ void apply_property_operations (Context*tg, SCM pre_init_ops); void execute_pushpop_property (Context * trg, SCM prop, SCM eltprop, SCM val); SCM updated_grob_properties (Context* tg, SCM sym); Context * find_context_below (Context * where, - String type, String id); + SCM type_sym, String id); bool melisma_busy (Context*); Context *get_voice_to_lyrics (Context *lyrics); diff --git a/lily/include/engraver.hh b/lily/include/engraver.hh index 76f2a122bf..de0c4e9a64 100644 --- a/lily/include/engraver.hh +++ b/lily/include/engraver.hh @@ -57,8 +57,8 @@ public: TRANSLATOR_DECLARATIONS(Engraver); }; -#define make_item(x) make_item_from_properties (daddy_context_, ly_symbol2scm (x)) -#define make_spanner(x) make_spanner_from_properties (daddy_context_, ly_symbol2scm (x)) +#define make_item(x) make_item_from_properties (get_parent_context (), ly_symbol2scm (x)) +#define make_spanner(x) make_spanner_from_properties (get_parent_context (), ly_symbol2scm (x)) Item* make_item_from_properties (Context * tg, SCM x); Spanner* make_spanner_from_properties (Context * tg, SCM x); diff --git a/lily/include/translator.hh b/lily/include/translator.hh index 57e3257a2f..69b09852ad 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -35,30 +35,18 @@ public: \ class Translator { void init (); + public: - Music_output_def * output_def_; + Context * get_parent_context () const { return daddy_context_; } Translator (Translator const &); - Context * daddy_context_ ; void removal_processing (); - virtual Music_output_def *get_output_def () const; SCM internal_get_property (SCM symbol) const; + + virtual Music_output_def *get_output_def () const; virtual Translator_group* get_daddy_translator ()const; virtual Moment now_mom () const; - -public: - DECLARE_SMOBS (Translator, dummy); - -protected: // should be private. - SCM simple_trans_list_; - friend class Context_def; - -public: - Score_context * get_score_context () const; - Global_context * get_global_context () const; - - TRANSLATOR_DECLARATIONS(Translator); virtual bool try_music (Music *req); virtual void stop_translation_timestep (); virtual void start_translation_timestep (); @@ -66,6 +54,17 @@ public: virtual void process_music (); virtual void do_announces (); virtual void finalize (); + + Score_context * get_score_context () const; + Global_context * get_global_context () const; + + TRANSLATOR_DECLARATIONS(Translator); + DECLARE_SMOBS (Translator, dummy); +protected: // should be private. + Context * daddy_context_ ; + SCM simple_trans_list_; + friend class Context_def; + friend class Context; }; /** diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index c859831f98..039d941230 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -42,7 +42,7 @@ Instrument_name_engraver::Instrument_name_engraver () void Instrument_name_engraver::initialize () { - daddy_context_->set_property ("instrumentSupport", SCM_EOL); + get_parent_context ()->set_property ("instrumentSupport", SCM_EOL); } void @@ -111,7 +111,7 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i) SCM nl = scm_cons (i.grob_->self_scm (), get_property ("instrumentSupport")); - daddy_context_->set_property ("instrumentSupport", nl); + get_parent_context ()->set_property ("instrumentSupport", nl); } } diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc index 5a124921dc..716f6fb0c1 100644 --- a/lily/key-engraver.cc +++ b/lily/key-engraver.cc @@ -167,8 +167,8 @@ Key_engraver::read_ev (Music const * r) if (ly_scm2int (ly_cdar (s))) accs = scm_cons (ly_car (s), accs); - daddy_context_->set_property ("keySignature", accs); - daddy_context_->set_property ("tonic" , + get_parent_context ()->set_property ("keySignature", accs); + get_parent_context ()->set_property ("tonic" , r->get_property ("tonic")); } @@ -177,18 +177,18 @@ void Key_engraver::start_translation_timestep () { key_ev_ = 0; - daddy_context_->set_property ("lastKeySignature", get_property ("keySignature")); + get_parent_context ()->set_property ("lastKeySignature", get_property ("keySignature")); } void Key_engraver::initialize () { - daddy_context_->set_property ("keySignature", SCM_EOL); - daddy_context_->set_property ("lastKeySignature", SCM_EOL); + get_parent_context ()->set_property ("keySignature", SCM_EOL); + get_parent_context ()->set_property ("lastKeySignature", SCM_EOL); Pitch p (0,0,0); - daddy_context_->set_property ("tonic", p.smobbed_copy ()); + get_parent_context ()->set_property ("tonic", p.smobbed_copy ()); } diff --git a/lily/ligature-engraver.cc b/lily/ligature-engraver.cc index c74058e18c..2acc370501 100644 --- a/lily/ligature-engraver.cc +++ b/lily/ligature-engraver.cc @@ -115,9 +115,9 @@ Ligature_engraver::override_stencil_callback () { SCM target_callback = ly_symbol2scm ("print-function"); SCM source_callback = ly_symbol2scm ("ligature-primitive-callback"); - SCM noteHeadProperties = updated_grob_properties (daddy_context_, ly_symbol2scm ("NoteHead")); + SCM noteHeadProperties = updated_grob_properties (get_parent_context (), ly_symbol2scm ("NoteHead")); SCM value = ly_cdr (scm_sloppy_assq (source_callback, noteHeadProperties)); - execute_pushpop_property (daddy_context_, ly_symbol2scm ("NoteHead"), + execute_pushpop_property (get_parent_context (), ly_symbol2scm ("NoteHead"), target_callback, value); } @@ -139,7 +139,7 @@ Ligature_engraver::revert_stencil_callback () { SCM symbol = ly_symbol2scm ("NoteHead"); SCM key = ly_symbol2scm ("print-function"); - execute_pushpop_property (daddy_context_, symbol, key, SCM_UNDEFINED); + execute_pushpop_property (get_parent_context (), symbol, key, SCM_UNDEFINED); } void diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc index 9d421bdd50..cc7356d847 100644 --- a/lily/lyric-engraver.cc +++ b/lily/lyric-engraver.cc @@ -73,11 +73,11 @@ get_voice_to_lyrics (Context *lyrics) if (Context *c = unsmob_context (avc)) return c; - SCM voice = lyrics->get_property ("associatedVoice"); + SCM voice_name = lyrics->get_property ("associatedVoice"); String nm = lyrics->id_string_; - if (is_string (voice)) - nm = ly_scm2string (voice); + if (is_string (voice_name)) + nm = ly_scm2string (voice_name); else { int idx = nm.index_last ('-'); @@ -85,12 +85,26 @@ get_voice_to_lyrics (Context *lyrics) nm = nm.left_string (idx); } - Context *c = lyrics->find_context_below (ly_symbol2scm ("Voice"), nm); + Context *parent = lyrics; + Context *voice = 0; + while (parent && !voice) + { + voice = find_context_below (parent, ly_symbol2scm ("Voice"), nm); + parent = parent->get_parent_context (); + } - if (c) - return c; + if (voice) + return voice; + + parent = lyrics; + voice = 0; + while (parent && !voice) + { + voice = find_context_below (parent, ly_symbol2scm ("Voice"), ""); + parent = parent->get_parent_context (); + } - return lyrics->find_context_below (ly_symbol2scm ("Voice"), ""); + return voice; } Grob * @@ -114,7 +128,7 @@ Lyric_engraver::stop_translation_timestep () { if (text_) { - Context * voice = get_voice_to_lyrics (daddy_context_); + Context * voice = get_voice_to_lyrics (get_parent_context ()); if (voice) { diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc index a6403a3a3c..7281e21f54 100644 --- a/lily/mark-engraver.cc +++ b/lily/mark-engraver.cc @@ -123,12 +123,12 @@ Mark_engraver::process_music () { int mark_count = ly_scm2int (m); mark_count ++; - daddy_context_->set_property ("rehearsalMark", + get_parent_context ()->set_property ("rehearsalMark", scm_int2num (mark_count)); } if (is_number (m)) - m = scm_call_2 (proc, m, daddy_context_->self_scm ()); + m = scm_call_2 (proc, m, get_parent_context ()->self_scm ()); else warning ("rehearsalMark does not have integer value."); } diff --git a/lily/melisma-translator.cc b/lily/melisma-translator.cc index 5f057b28d5..1b01c2d82d 100644 --- a/lily/melisma-translator.cc +++ b/lily/melisma-translator.cc @@ -36,7 +36,7 @@ Melisma_translator::try_music (Music *m) { if (m->is_mus_type ("melisma-playing-event")) { - return melisma_busy (daddy_context_); + return melisma_busy (get_parent_context ()); } else if (m->is_mus_type ("melisma-span-event")) { @@ -55,9 +55,9 @@ Melisma_translator::process_music () SCM sd = event_->get_property ("span-direction"); Direction d = to_dir (sd); if (d == START) - daddy_context_->set_property ("melismaBusy", SCM_BOOL_T); + get_parent_context ()->set_property ("melismaBusy", SCM_BOOL_T); else - daddy_context_->unset_property (ly_symbol2scm ("melismaBusy")); + get_parent_context ()->unset_property (ly_symbol2scm ("melismaBusy")); } } diff --git a/lily/metronome-engraver.cc b/lily/metronome-engraver.cc index 63c7b04aad..34e32df049 100644 --- a/lily/metronome-engraver.cc +++ b/lily/metronome-engraver.cc @@ -101,7 +101,7 @@ Metronome_mark_engraver::process_music () SCM proc = get_property ("metronomeMarkFormatter"); SCM result= scm_call_2 (proc, mark_ev_->self_scm (), - daddy_context_->self_scm ()); + get_parent_context ()->self_scm ()); text_->set_property ("text", result); } diff --git a/lily/music-iterator.cc b/lily/music-iterator.cc index ce0bf4140e..d3bc1ec780 100644 --- a/lily/music-iterator.cc +++ b/lily/music-iterator.cc @@ -243,7 +243,7 @@ is_child_context (Context *me, Context *child) { while (child && child != me) { - child = child->daddy_context_; + child = child->get_parent_context (); } return child == me; diff --git a/lily/new-fingering-engraver.cc b/lily/new-fingering-engraver.cc index f07b726725..b5e17e9f58 100644 --- a/lily/new-fingering-engraver.cc +++ b/lily/new-fingering-engraver.cc @@ -112,7 +112,7 @@ New_fingering_engraver::add_script (Grob * head, Finger_tuple ft ; Grob * g= make_item ("Script"); - make_script_from_event (g, &ft.description_, daddy_context_, + make_script_from_event (g, &ft.description_, get_parent_context (), event->get_property ("articulation-type"), 0); if (g) { diff --git a/lily/new-lyric-combine-music-iterator.cc b/lily/new-lyric-combine-music-iterator.cc index b2f95dde61..03f82646af 100644 --- a/lily/new-lyric-combine-music-iterator.cc +++ b/lily/new-lyric-combine-music-iterator.cc @@ -144,7 +144,7 @@ New_lyric_combine_music_iterator::construct_children () if (lyric_iter_) lyrics_context_ = find_context_below (lyric_iter_->get_outlet (), - "Lyrics", ""); + ly_symbol2scm ("Lyrics"), ""); /* We do not create a Lyrics context, because the user might @@ -163,11 +163,11 @@ New_lyric_combine_music_iterator::find_voice () if (is_string (voice_name)) { Context *t = get_outlet (); - while (t && t->daddy_context_) - t = t->daddy_context_; + while (t && t->get_parent_context ()) + t = t->get_parent_context (); String name = ly_scm2string (voice_name); - Context *voice = find_context_below (t, "Voice", name); + Context *voice = find_context_below (t, ly_symbol2scm ("Voice"), name); if (!voice) get_music ()->origin ()->warning (_f ("cannot find Voice: %s", name.to_str0 ()) + "\n"); @@ -195,7 +195,7 @@ New_lyric_combine_music_iterator::process (Moment ) if (!music_context_) return ; - if (!music_context_->daddy_context_) + if (!music_context_->get_parent_context ()) { /* The melody has died. diff --git a/lily/note-head-line-engraver.cc b/lily/note-head-line-engraver.cc index fee6c1e63c..f5a548a87a 100644 --- a/lily/note-head-line-engraver.cc +++ b/lily/note-head-line-engraver.cc @@ -60,9 +60,9 @@ Note_head_line_engraver::acknowledge_grob (Grob_info info) head_ = info.grob_; if (to_boolean (get_property ("followVoice"))) { - Context * tr = daddy_context_; + Context * tr = get_parent_context (); while (tr && !tr->is_alias (ly_symbol2scm ( "Staff"))) - tr = tr->daddy_context_ ; + tr = tr->get_parent_context () ; if (tr && tr->is_alias (ly_symbol2scm ("Staff")) && tr != last_staff_) diff --git a/lily/output-property-engraver.cc b/lily/output-property-engraver.cc index 88a0168abd..c7a6759220 100644 --- a/lily/output-property-engraver.cc +++ b/lily/output-property-engraver.cc @@ -64,13 +64,13 @@ Output_property_engraver::acknowledge_grob (Grob_info inf) dynamic_cast (inf.origin_trans_); if (!d) - d = dynamic_cast (inf.origin_trans_->daddy_context_); + d = dynamic_cast (inf.origin_trans_->get_parent_context ()); SCM proc = o->get_property ("procedure"); scm_call_3 (proc, inf.grob_->self_scm (), d->self_scm (), - daddy_context_->self_scm ()); + get_parent_context ()->self_scm ()); } } } diff --git a/lily/performer-group-performer.cc b/lily/performer-group-performer.cc index 7054d2d056..b7312e8878 100644 --- a/lily/performer-group-performer.cc +++ b/lily/performer-group-performer.cc @@ -28,7 +28,7 @@ Performer_group_performer::announce_element (Audio_element_info info) { announce_infos_.push (info); Translator *t - = unsmob_translator (daddy_context_->daddy_context_->implementation_); + = unsmob_translator (get_parent_context ()->get_parent_context ()->implementation_); if (Performer_group_performer * eg = dynamic_cast (t)) eg->announce_element (info); diff --git a/lily/recording-group-engraver.cc b/lily/recording-group-engraver.cc index 3a13dc0e25..a40f45bff0 100644 --- a/lily/recording-group-engraver.cc +++ b/lily/recording-group-engraver.cc @@ -81,7 +81,7 @@ Recording_group_engraver::finalize () SCM proc = get_property ("recordEventSequence"); if (is_procedure (proc)) - scm_call_2 (proc, daddy_context_->self_scm (), ly_cdr (accumulator_)); + scm_call_2 (proc, get_parent_context ()->self_scm (), ly_cdr (accumulator_)); accumulator_ = SCM_EOL; } diff --git a/lily/repeat-acknowledge-engraver.cc b/lily/repeat-acknowledge-engraver.cc index b6c94d7572..5ae53695aa 100644 --- a/lily/repeat-acknowledge-engraver.cc +++ b/lily/repeat-acknowledge-engraver.cc @@ -38,7 +38,7 @@ public: void Repeat_acknowledge_engraver::initialize () { - daddy_context_->set_property ("repeatCommands", SCM_EOL); + get_parent_context ()->set_property ("repeatCommands", SCM_EOL); } @@ -49,9 +49,9 @@ Repeat_acknowledge_engraver::Repeat_acknowledge_engraver () void Repeat_acknowledge_engraver::start_translation_timestep () { - Context * tr = daddy_context_->where_defined (ly_symbol2scm ("repeatCommands")); + Context * tr = get_parent_context ()->where_defined (ly_symbol2scm ("repeatCommands")); if (!tr) - tr = daddy_context_; + tr = get_parent_context (); tr->set_property ("repeatCommands", SCM_EOL); } @@ -104,7 +104,7 @@ Repeat_acknowledge_engraver::process_music () { if (s != "" || (volta_found && !is_string (wb))) { - daddy_context_->set_property ("whichBar", scm_makfrom0str (s.to_str0 ())); + get_parent_context ()->set_property ("whichBar", scm_makfrom0str (s.to_str0 ())); } } } diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 818bb2ac5f..3fc44c527d 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -47,9 +47,9 @@ Score_engraver::make_columns () if (!command_column_) { SCM nmp - = updated_grob_properties (daddy_context_, + = updated_grob_properties (get_parent_context (), ly_symbol2scm ("NonMusicalPaperColumn")); - SCM pc = updated_grob_properties (daddy_context_, + SCM pc = updated_grob_properties (get_parent_context (), ly_symbol2scm ("PaperColumn")); set_columns (new Paper_column (nmp), new Paper_column (pc)); @@ -80,7 +80,7 @@ Score_engraver::prepare (Moment m) command_column_->set_property ("when", w); musical_column_->set_property ("when", w); - recurse_over_translators (daddy_context_, &Translator::start_translation_timestep, DOWN); + recurse_over_translators (get_parent_context (), &Translator::start_translation_timestep, DOWN); } void @@ -89,7 +89,7 @@ Score_engraver::finish () if ((breaks_%8)) progress_indication ("[" + to_string (breaks_) + "]"); - recurse_over_translators (daddy_context_, &Translator::finalize, UP); + recurse_over_translators (get_parent_context (), &Translator::finalize, UP); } /* @@ -107,7 +107,7 @@ Score_engraver::initialize () pscore_ = new Paper_score; pscore_->paper_ = dynamic_cast (get_output_def ()); - SCM props = updated_grob_properties (daddy_context_, ly_symbol2scm ("System")); + SCM props = updated_grob_properties (get_parent_context (), ly_symbol2scm ("System")); pscore_->typeset_line (new System (props)); @@ -139,11 +139,11 @@ Score_engraver::one_time_step () { if (!to_boolean (get_property ("skipTypesetting"))) { - recurse_over_translators (daddy_context_, &Engraver::process_music, UP); - recurse_over_translators (daddy_context_, &Engraver::do_announces, UP); + recurse_over_translators (get_parent_context (), &Engraver::process_music, UP); + recurse_over_translators (get_parent_context (), &Engraver::do_announces, UP); } - recurse_over_translators (daddy_context_, &Translator::stop_translation_timestep, UP); + recurse_over_translators (get_parent_context (), &Translator::stop_translation_timestep, UP); } void @@ -241,12 +241,12 @@ Score_engraver::set_columns (Paper_column *new_command, musical_column_ = new_musical; if (new_command) { - daddy_context_->set_property ("currentCommandColumn", new_command->self_scm ()); + get_parent_context ()->set_property ("currentCommandColumn", new_command->self_scm ()); } if (new_musical) { - daddy_context_->set_property ("currentMusicalColumn", new_musical->self_scm ()); + get_parent_context ()->set_property ("currentMusicalColumn", new_musical->self_scm ()); } } diff --git a/lily/score-performer.cc b/lily/score-performer.cc index 54e2c90fb9..175450d381 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -58,21 +58,21 @@ Score_performer::prepare (Moment m) { audio_column_ = new Audio_column (m); play_element (audio_column_); - recurse_over_translators (daddy_context_, &Translator::start_translation_timestep, UP); + recurse_over_translators (get_parent_context (), &Translator::start_translation_timestep, UP); } void Score_performer::finish () { - recurse_over_translators (daddy_context_, &Translator::finalize, UP); + recurse_over_translators (get_parent_context (), &Translator::finalize, UP); } void Score_performer::one_time_step () { - recurse_over_translators (daddy_context_, &Performer::process_music, UP); - recurse_over_translators (daddy_context_, &Performer::do_announces, UP); - recurse_over_translators (daddy_context_, &Translator::stop_translation_timestep, UP); + recurse_over_translators (get_parent_context (), &Performer::process_music, UP); + recurse_over_translators (get_parent_context (), &Performer::do_announces, UP); + recurse_over_translators (get_parent_context (), &Translator::stop_translation_timestep, UP); } int diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index 67078978c8..0abfc68605 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -134,7 +134,7 @@ Script_engraver::process_music () Grob * p = make_item ("Script"); - make_script_from_event (p, &scripts_[i].description_, daddy_context_, + make_script_from_event (p, &scripts_[i].description_, get_parent_context (), l->get_property ("articulation-type"), i); diff --git a/lily/separating-line-group-engraver.cc b/lily/separating-line-group-engraver.cc index ebeb9429ca..bd88065842 100644 --- a/lily/separating-line-group-engraver.cc +++ b/lily/separating-line-group-engraver.cc @@ -140,7 +140,7 @@ Separating_line_group_engraver::acknowledge_grob (Grob_info i) if (ib) { p_ref_->set_property ("breakable", SCM_BOOL_T); - daddy_context_->set_property ("breakableSeparationItem", p_ref_->self_scm ()); + get_parent_context ()->set_property ("breakableSeparationItem", p_ref_->self_scm ()); } announce_grob (p_ref_, SCM_EOL); @@ -179,7 +179,7 @@ void Separating_line_group_engraver::start_translation_timestep () { if (break_item_) - daddy_context_->unset_property (ly_symbol2scm ("breakableSeparationItem")); + get_parent_context ()->unset_property (ly_symbol2scm ("breakableSeparationItem")); break_item_ =0; } diff --git a/lily/simultaneous-music-iterator.cc b/lily/simultaneous-music-iterator.cc index 0619f45ca0..9dcf354f16 100644 --- a/lily/simultaneous-music-iterator.cc +++ b/lily/simultaneous-music-iterator.cc @@ -52,7 +52,7 @@ Simultaneous_music_iterator::construct_children () /* if create_separate_contexts_ is set, create a new context with the number number as name */ - SCM name = unsmob_context_def (get_outlet ()->definition_)->get_context_name (); + SCM name = ly_symbol2scm (get_outlet ()->context_name ().to_str0 ()); Context * t = (j && create_separate_contexts_) ? get_outlet ()->find_create_context (name, to_string (j), SCM_EOL) : get_outlet (); diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index 3fc8216227..79434ad225 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -88,7 +88,7 @@ Slur_engraver::try_music (Music *ev) void Slur_engraver::set_melisma (bool m) { - daddy_context_->set_property ("slurMelismaBusy", m ? SCM_BOOL_T :SCM_BOOL_F); + get_parent_context ()->set_property ("slurMelismaBusy", m ? SCM_BOOL_T :SCM_BOOL_F); } void diff --git a/lily/slur-performer.cc b/lily/slur-performer.cc index 17c0a2dc2e..32896aac05 100644 --- a/lily/slur-performer.cc +++ b/lily/slur-performer.cc @@ -60,7 +60,7 @@ Slur_performer::process_music () void Slur_performer::set_melisma (bool ml) { - daddy_context_->set_property ("slurMelismaBusy", ml ? SCM_BOOL_T :SCM_BOOL_F); + get_parent_context ()->set_property ("slurMelismaBusy", ml ? SCM_BOOL_T :SCM_BOOL_F); } void diff --git a/lily/staff-collecting-engraver.cc b/lily/staff-collecting-engraver.cc index ad1092e981..42a9fec884 100644 --- a/lily/staff-collecting-engraver.cc +++ b/lily/staff-collecting-engraver.cc @@ -32,7 +32,7 @@ Staff_collecting_engraver::acknowledge_grob (Grob_info gi) SCM staffs = get_property ("stavesFound"); staffs = scm_cons (gi.grob_->self_scm (), staffs); - daddy_context_->set_property ("stavesFound", staffs); + get_parent_context ()->set_property ("stavesFound", staffs); } } diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index 30283681dd..5de18f26ed 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -65,7 +65,7 @@ Staff_performer::initialize () audio_staff_ = new Audio_staff; announce_element (Audio_element_info (audio_staff_, 0)); - name_ = new Audio_text (Audio_text::TRACK_NAME, daddy_context_->id_string_); + name_ = new Audio_text (Audio_text::TRACK_NAME, get_parent_context ()->id_string_); announce_element (Audio_element_info (name_, 0)); tempo_ = new Audio_tempo (get_tempo ()); diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc index e5d49a4054..a0adf56d6d 100644 --- a/lily/stem-engraver.cc +++ b/lily/stem-engraver.cc @@ -88,7 +88,7 @@ Stem_engraver::acknowledge_grob (Grob_info i) else requested_type = 8; else - daddy_context_->set_property ("tremoloFlags", scm_int2num (requested_type)); + get_parent_context ()->set_property ("tremoloFlags", scm_int2num (requested_type)); int tremolo_flags = intlog2 (requested_type) - 2 - (duration_log > 2 ? duration_log - 2 : 0); @@ -152,13 +152,13 @@ Stem_engraver::stop_translation_timestep () if (is_number (prop)) { Stem::set_beaming (stem_,ly_scm2int (prop),LEFT); - daddy_context_->unset_property (ly_symbol2scm ("stemLeftBeamCount")); + get_parent_context ()->unset_property (ly_symbol2scm ("stemLeftBeamCount")); } prop = get_property ("stemRightBeamCount"); if (is_number (prop)) { Stem::set_beaming (stem_,ly_scm2int (prop), RIGHT); - daddy_context_->unset_property (ly_symbol2scm ("stemRightBeamCount")); + get_parent_context ()->unset_property (ly_symbol2scm ("stemRightBeamCount")); } typeset_grob (stem_); diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc index 9b0f93fe06..994302f225 100644 --- a/lily/system-start-delimiter-engraver.cc +++ b/lily/system-start-delimiter-engraver.cc @@ -73,7 +73,7 @@ System_start_delimiter_engraver::process_music () if (!delim_) { SCM delim_name =get_property ("systemStartDelimiter"); - delim_ = make_spanner_from_properties (daddy_context_, delim_name); + delim_ = make_spanner_from_properties (get_parent_context (), delim_name); delim_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn"))); announce_grob (delim_, SCM_EOL); diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index 69b69599cc..181ede0912 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -74,7 +74,7 @@ void Tie_engraver::process_music () { if (event_) - daddy_context_->set_property ("tieMelismaBusy", SCM_BOOL_T); + get_parent_context ()->set_property ("tieMelismaBusy", SCM_BOOL_T); } void @@ -123,7 +123,7 @@ Tie_engraver::acknowledge_grob (Grob_info i) void Tie_engraver::start_translation_timestep () { - daddy_context_->set_property ("tieMelismaBusy", + get_parent_context ()->set_property ("tieMelismaBusy", ly_bool2scm (heads_to_tie_.size ())); } diff --git a/lily/tie-performer.cc b/lily/tie-performer.cc index cbb38819e5..a44bf7df7e 100644 --- a/lily/tie-performer.cc +++ b/lily/tie-performer.cc @@ -57,7 +57,7 @@ void Tie_performer::process_music () { if (event_) - daddy_context_->set_property ("tieMelismaBusy", SCM_BOOL_T); + get_parent_context ()->set_property ("tieMelismaBusy", SCM_BOOL_T); } void @@ -87,7 +87,7 @@ Tie_performer::acknowledge_audio_element (Audio_element_info inf) void Tie_performer::start_translation_timestep () { - daddy_context_->set_property ("tieMelismaBusy", + get_parent_context ()->set_property ("tieMelismaBusy", ly_bool2scm (heads_to_tie_.size ())); } diff --git a/lily/timing-engraver.cc b/lily/timing-engraver.cc index d366a7a088..1d6302f041 100644 --- a/lily/timing-engraver.cc +++ b/lily/timing-engraver.cc @@ -49,7 +49,7 @@ Timing_engraver::initialize () which = (now.main_part_ || now.main_part_ == last_moment_.main_part_) ? SCM_EOL : scm_makfrom0str ("|"); - daddy_context_->set_property ("whichBar", which); + get_parent_context ()->set_property ("whichBar", which); } @@ -88,14 +88,14 @@ Timing_engraver::start_translation_timestep () } } - daddy_context_->set_property ("whichBar", which); + get_parent_context ()->set_property ("whichBar", which); } void Timing_engraver::stop_translation_timestep () { Timing_translator::stop_translation_timestep (); - daddy_context_->set_property ("whichBar", SCM_EOL); + get_parent_context ()->set_property ("whichBar", SCM_EOL); last_moment_ = now_mom (); } diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc index a52e2eba28..15c3866a3e 100644 --- a/lily/timing-translator.cc +++ b/lily/timing-translator.cc @@ -49,18 +49,18 @@ Timing_translator::initialize () /* move this to engraver-init.ly? */ - daddy_context_->add_alias (ly_symbol2scm ("Timing")); - daddy_context_->set_property ("timing" , SCM_BOOL_T); - daddy_context_->set_property ("currentBarNumber" , scm_int2num (1)); + get_parent_context ()->add_alias (ly_symbol2scm ("Timing")); + get_parent_context ()->set_property ("timing" , SCM_BOOL_T); + get_parent_context ()->set_property ("currentBarNumber" , scm_int2num (1)); - daddy_context_->set_property ("timeSignatureFraction", + get_parent_context ()->set_property ("timeSignatureFraction", scm_cons (scm_int2num (4), scm_int2num (4))); /* Do not init measurePosition; this should be done from global context. */ - daddy_context_->set_property ("measureLength", Moment (Rational (1)).smobbed_copy ()); - daddy_context_->set_property ("beatLength", Moment (Rational (1,4)).smobbed_copy ()); + get_parent_context ()->set_property ("measureLength", Moment (Rational (1)).smobbed_copy ()); + get_parent_context ()->set_property ("beatLength", Moment (Rational (1,4)).smobbed_copy ()); } Rational @@ -125,7 +125,7 @@ Timing_translator::start_translation_timestep () else { measposp = now; - daddy_context_->set_property ("measurePosition", + get_parent_context ()->set_property ("measurePosition", measposp.smobbed_copy ()); } @@ -148,8 +148,8 @@ Timing_translator::start_translation_timestep () b ++; } - daddy_context_->set_property ("currentBarNumber", scm_int2num (b)); - daddy_context_->set_property ("measurePosition", measposp.smobbed_copy ()); + get_parent_context ()->set_property ("currentBarNumber", scm_int2num (b)); + get_parent_context ()->set_property ("measurePosition", measposp.smobbed_copy ()); } ENTER_DESCRIPTION (Timing_translator, diff --git a/lily/translator-group.cc b/lily/translator-group.cc index d2ff565290..85c473db18 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -21,7 +21,7 @@ Translator_group* Translator_group::get_daddy_translator () const { Translator *t - = unsmob_translator (daddy_context_->daddy_context_->implementation_); + = unsmob_translator (get_parent_context ()->get_parent_context ()->implementation_); return dynamic_cast (t); } @@ -38,7 +38,7 @@ void Translator_group::initialize () { SCM tab = scm_make_vector (scm_int2num (19), SCM_BOOL_F); - daddy_context_->set_property ("acceptHashTable", tab); + get_parent_context ()->set_property ("acceptHashTable", tab); } @@ -97,28 +97,6 @@ Translator_group::try_music (Music* m) return false; } -SCM -names_to_translators (SCM namelist, Context*tg) -{ - SCM l = SCM_EOL; - for (SCM s = namelist; is_pair (s) ; s = ly_cdr (s)) - { - Translator * t = get_translator (ly_car (s)); - if (!t) - warning (_f ("can't find: `%s'", s)); - else - { - Translator * tr = t->clone (); - SCM str = tr->self_scm (); - l = scm_cons (str, l); - - tr->daddy_context_ = tg; - scm_gc_unprotect_object (str); - } - } - return l; -} - SCM Translator_group::get_simple_trans_list () @@ -144,7 +122,7 @@ recurse_over_translators (Context * c, Translator_method ptr, Direction dir) (tg->*ptr) (); } - for (SCM s = c->context_list_ ; is_pair (s); + for (SCM s = c->children_contexts () ; is_pair (s); s =ly_cdr (s)) { recurse_over_translators (unsmob_context (ly_car (s)), ptr, dir); diff --git a/lily/translator-property.cc b/lily/translator-property.cc index 7a278668d6..ece48c1bc5 100644 --- a/lily/translator-property.cc +++ b/lily/translator-property.cc @@ -158,8 +158,8 @@ updated_grob_properties (Context * tg, SCM sym) return SCM_EOL; SCM daddy_props - = (tg->daddy_context_) - ? updated_grob_properties (tg->daddy_context_, sym) + = (tg->get_parent_context ()) + ? updated_grob_properties (tg->get_parent_context (), sym) : SCM_EOL; SCM props = tg->internal_get_property (sym); diff --git a/ly/chord-modifiers-init.ly b/ly/chord-modifiers-init.ly index 3f9beefa72..094fe05552 100644 --- a/ly/chord-modifiers-init.ly +++ b/ly/chord-modifiers-init.ly @@ -3,10 +3,10 @@ chordmodifiers = #default-chord-modifier-list whiteTriangleMarkup = #(make-override-markup - '(font-encoding . math) (make-simple-markup "M")) + '(font-encoding . TeX-math) (make-simple-markup "M")) blackTriangleMarkup = #(make-override-markup - '(font-encoding . math) (make-simple-markup "N")) + '(font-encoding . TeX-math) (make-simple-markup "N")) ignatzekExceptionMusic = \notes{ 1-\markup { "+" } diff --git a/make/lilypond.redhat.spec.in b/make/lilypond.redhat.spec.in index 14b1c6e6af..d05c1cd909 100644 --- a/make/lilypond.redhat.spec.in +++ b/make/lilypond.redhat.spec.in @@ -18,7 +18,7 @@ Buildrequires: t1utils bison flex mftrace ImageMagick Buildrequires: texinfo >= 4.6 Buildrequires: guile-devel >= 1.6.4-8 Requires: tetex tetex-latex libstdc++ python tetex-dvips tetex-latex -Requires: guile >= 1.6.4-8 ec-fonts-mftraced +Requires: guile >= 1.6.4-8 ec-fonts-mftrace %description LilyPond lets you create music notation. It produces diff --git a/scm/output-tex.scm b/scm/output-tex.scm index 6c080460d5..c8997b78d4 100644 --- a/scm/output-tex.scm +++ b/scm/output-tex.scm @@ -315,15 +315,16 @@ (define (text font s) (let* - ((mapping #f) - (input-enc-name (assoc-get 'input-name (ly:font-encoding-alist font) )) - ) + ((mapping #f) ;; (assoc-get 'char-mapping (ly:font-encoding-alist font)))) + - ;; TODO: we'd better do this for PS only - ;; LaTeX gets in the way, and we need to remap - ;; nonprintable chars. - - ;; (assoc-get 'char-mapping (ly:font-encoding-alist font)))) + ;; TODO: we'd better do this for PS only + ;; LaTeX gets in the way, and we need to remap + ;; nonprintable chars. + + + (input-enc-name #f) ;; (assoc-get 'input-name (ly:font-encoding-alist font) )) + ) (string-append "\\hbox{\\" (font-command font) (if (string? input-enc-name) -- 2.39.5