From: Han-Wen Nienhuys Date: Mon, 3 May 2004 23:16:25 +0000 (+0000) Subject: update for the lily-wins.py script. X-Git-Tag: release/2.3.1~29 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=e540311d3f5799216c91d203080f63b65cccde07;p=lilypond.git update for the lily-wins.py script. --- diff --git a/ChangeLog b/ChangeLog index e62fe00c77..5b1e512b07 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2004-05-04 Han-Wen Nienhuys + + * cygwin/lily-wins.py: update for the lily-wins.py script. + +2004-05-03 Han-Wen Nienhuys + + * lily/score-engraver.cc (typeset_all): switch off unbound spanner + code. This will obviate typeset_grob () in the future. The effect + of this is that improperly written spanner handling will result in + invalid spanner bounds. + (announce_grob): add to elems_ from here + (typeset_grob): comment out. + + * lily/include/engraver.hh (make_spanner): new calling interface + for make_{item,spanner}. This obviates most calls to + announce_grob(). + + * scm/music-functions.scm (set-accidental-style): use GrandStaff + iso. PianoStaff for piano styles. + 2004-05-03 Heikki Junes * Documentation/user/music-glossary.tely: add segno after d.s. diff --git a/Documentation/user/notation.itely b/Documentation/user/notation.itely index 21213b117b..067b51b20c 100644 --- a/Documentation/user/notation.itely +++ b/Documentation/user/notation.itely @@ -1436,6 +1436,8 @@ behavior can be changed by setting @code{allowBeamBreak}. Automatically kneed cross-staff beams cannot be used together with hidden staves. +Beams do not avoid collisions with symbols around the notes, such as +texts and accidentals. diff --git a/THANKS b/THANKS index 4e6bb383c1..38a7ad7ff6 100644 --- a/THANKS +++ b/THANKS @@ -23,7 +23,8 @@ Peter Rosenbeck Stephen Pollei Bertalan Fodor Thomas Scharlowski - +Yuval Harel +Martin Norbäck Release 2.2 *********** diff --git a/cygwin/lily-wins.py b/cygwin/lily-wins.py index 299cfe46f8..06d22595e5 100644 --- a/cygwin/lily-wins.py +++ b/cygwin/lily-wins.py @@ -1,16 +1,21 @@ #!@PYTHON@ # lily-wins.py -- LilyPond command for .ly on Windows +import getopt import os import re import sys +import time + +do_debug = 0 def usage (): print 'Usage [-h,--help] lily-wins LY-FILE' # print debugging stuff for now def debug (s): - print s + if do_debug: + print s def read_pipe (command): debug ('command:' + command) @@ -33,16 +38,36 @@ def escape_shell (x): return re.sub ("(\s|[`'\"\\\\])", r'\\\1',x) # return re.sub (r'''([^\\])([`'"\\\s])''', r'\1\\\2', x) # help emacs'" broken python mode + +def usage (): + print '''lily-wins [options] file + +Options supported: + + -h, --help this help screen + -d, --debug print debugging information + +''' debug (`sys.argv`) -if len (sys.argv) != 2 \ - or sys.argv[1] == '-h' or sys.argv[1] == '--help': +######## +# main +(opts, files)=getopt.getopt (sys.argv[1:],'dh', ['help', 'debug']) + +for (o,a) in opts: + if o == '-d' or o == '--debug': + do_debug = 1 + elif o == '-h' or o == '--help': + usage () + sys.exit (0) + +if files == []: usage () - sys.exit (0) - -native_file = sys.argv[1] + sys.exit (1) +native_file = files[0] +print 'Processing %s ...' % native_file file = read_pipe ('/usr/bin/cygpath -au %s' % escape_shell (native_file)) if not file: file = native_file @@ -54,7 +79,7 @@ if not dir: dir = '.' base = os.path.basename (file) stem = strip_extension (base, '.ly') -print `vars ()` +debug ( `vars ()`) native_base = '%(dir)s/%(stem)s' % vars () native_base = read_pipe ('/usr/bin/cygpath -aw %s' % escape_shell (native_base)) @@ -78,14 +103,28 @@ if not pdfview: pdfview = 'xpdf' os.chdir (dir) +pdffile = '%(stem)s.pdf' % vars () +if os.path.exists (pdffile): + os.unlink (pdffile) + + +script = '/usr/bin/lilypond' + if os.path.exists ('/usr/bin/ly2dvi'): - system ('/usr/bin/ly2dvi -p %s > %s.log 2>&1' % (escape_shell (base), - escape_shell (stem))) -else: - system ('/usr/bin/lilypond %s > %s.log 2>&1' % (escape_shell (base), - escape_shell (stem))) -if not os.path.exists ('%(stem)s.pdf' % vars ()): + script = '/usr/bin/ly2dvi' + +stat = system ('%s -p %s > %s.log 2>&1' % (script, escape_shell (base), + escape_shell (stem))) + +if not os.path.exists (pdffile): # message box? - sys.stderr.write ('pdf output not found\n') + sys.stderr.write ('PDF output not found. Error log: \n') -system ('%s %s.pdf' % (escape_shell (pdfview), escape_shell (native_base))) + map (sys.stderr.write, open (stem + '.log').readlines ()[-20:]) + sys.stderr.write ('A full log is in the file %s.log\n' % stem) + sys.stderr.write ('\n\nPress enter to close window\n') + sys.stdin.readline () +else: + + # run even if failed, to make sure that error + system ('%s %s.pdf' % (escape_shell (pdfview), escape_shell (native_base))) diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc index 1ed0e5d405..808c2408ec 100644 --- a/lily/accidental-engraver.cc +++ b/lily/accidental-engraver.cc @@ -287,18 +287,18 @@ Accidental_engraver::process_acknowledged_grobs () level, so that we get the property settings for Accidental from the respective Voice. */ - Grob * a = make_item_from_properties (origin, - ly_symbol2scm ("Accidental")); + Grob * a = make_item_from_properties (origin->implementation (), + ly_symbol2scm ("Accidental"), + note->self_scm () + ); a->set_parent (support, Y_AXIS); if (!accidental_placement_) { - accidental_placement_ = make_item ("AccidentalPlacement"); - announce_grob (accidental_placement_, a->self_scm ()); + accidental_placement_ = make_item ("AccidentalPlacement", a->self_scm ()); } Accidental_placement::add_accidental (accidental_placement_, a); - announce_grob (a, SCM_EOL); SCM accs = scm_cons (scm_int2num (pitch->get_alteration ()), SCM_EOL); diff --git a/lily/ambitus-engraver.cc b/lily/ambitus-engraver.cc index ee8c1c47c5..5d283d265d 100644 --- a/lily/ambitus-engraver.cc +++ b/lily/ambitus-engraver.cc @@ -169,9 +169,8 @@ Ambitus_engraver::acknowledge_grob (Grob_info info) void Ambitus_engraver::create_ambitus () { - ambitus_ = make_item ("Ambitus"); + ambitus_ = make_item ("Ambitus",SCM_EOL); is_typeset = false; - announce_grob (ambitus_, SCM_EOL); } void diff --git a/lily/arpeggio-engraver.cc b/lily/arpeggio-engraver.cc index 5ecde8437a..282a7653a0 100644 --- a/lily/arpeggio-engraver.cc +++ b/lily/arpeggio-engraver.cc @@ -81,8 +81,7 @@ Arpeggio_engraver::process_music () { if (arpeggio_req_) { - arpeggio_ = make_item ("Arpeggio"); - announce_grob (arpeggio_, arpeggio_req_->self_scm ()); + arpeggio_ = make_item ("Arpeggio",arpeggio_req_->self_scm ()); } } diff --git a/lily/axis-group-engraver.cc b/lily/axis-group-engraver.cc index 50e53db1b1..1bc232f4c5 100644 --- a/lily/axis-group-engraver.cc +++ b/lily/axis-group-engraver.cc @@ -48,15 +48,13 @@ Axis_group_engraver::process_music () Grob * it = unsmob_grob (get_property ("currentCommandColumn")); staffline_->set_bound (LEFT,it); - - announce_grob (staffline_, SCM_EOL); } } Spanner* Axis_group_engraver::get_spanner () { - return make_spanner ("VerticalAxisGroup"); + return make_spanner ("VerticalAxisGroup", SCM_EOL); } /* @@ -163,7 +161,7 @@ Hara_kiri_engraver::add_element (Grob*e) Spanner* Hara_kiri_engraver::get_spanner () { - Spanner * sp = make_spanner ("RemoveEmptyVerticalGroup"); + Spanner * sp = make_spanner ("RemoveEmptyVerticalGroup", SCM_EOL); return sp; } diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc index 031609a75b..7b9841bcab 100644 --- a/lily/bar-engraver.cc +++ b/lily/bar-engraver.cc @@ -47,12 +47,10 @@ Bar_engraver::create_bar () { if (!bar_) { - bar_ = make_item ("BarLine"); + bar_ = make_item ("BarLine", SCM_EOL); SCM gl = get_property ("whichBar"); if (scm_equal_p (gl, bar_->get_property ("glyph")) != SCM_BOOL_T) bar_->set_property ("glyph", gl); - - announce_grob (bar_, SCM_EOL); } } diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc index 4788428086..1b621c5382 100644 --- a/lily/bar-number-engraver.cc +++ b/lily/bar-number-engraver.cc @@ -108,10 +108,8 @@ Bar_number_engraver::create_items () if (text_) return; - text_ = make_item ("BarNumber"); + text_ = make_item ("BarNumber", SCM_EOL); Side_position_interface::set_axis (text_,Y_AXIS); - - announce_grob (text_, SCM_EOL); } ENTER_DESCRIPTION (Bar_number_engraver, diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc index b485f71464..2abec27aec 100644 --- a/lily/beam-engraver.cc +++ b/lily/beam-engraver.cc @@ -142,7 +142,7 @@ Beam_engraver::process_music () set_melisma (true); prev_start_ev_ = start_ev_; - beam_ = make_spanner ("Beam"); + beam_ = make_spanner ("Beam", start_ev_->self_scm ()); SCM smp = get_property ("measurePosition"); Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0); @@ -152,7 +152,6 @@ Beam_engraver::process_music () beam_info_ = new Beaming_info_list; /* urg, must copy to Auto_beam_engraver too */ - announce_grob (beam_, start_ev_->self_scm ()); } } diff --git a/lily/break-align-engraver.cc b/lily/break-align-engraver.cc index e462297fc8..08fc9d6ef1 100644 --- a/lily/break-align-engraver.cc +++ b/lily/break-align-engraver.cc @@ -12,7 +12,8 @@ #include "item.hh" #include "align-interface.hh" #include "axis-group-interface.hh" - +#include "context.hh" +#include "translator-group.hh" class Break_align_engraver : public Engraver { @@ -97,16 +98,17 @@ Break_align_engraver::acknowledge_grob (Grob_info inf) if (!align_) { - align_ = make_item ("BreakAlignment"); + align_ = make_item ("BreakAlignment", SCM_EOL); - announce_grob (align_, SCM_EOL); + Context*origin = inf.origin_contexts (this)[0]; - left_edge_ = make_item_from_properties (origin, - ly_symbol2scm ("LeftEdge")); + left_edge_ = make_item_from_properties (origin->implementation (), + ly_symbol2scm ("LeftEdge"), + SCM_EOL + ); add_to_group (left_edge_->get_property ("break-align-symbol"), left_edge_); - announce_grob (left_edge_, SCM_EOL); } add_to_group (align_name, item); @@ -126,11 +128,10 @@ Break_align_engraver::add_to_group (SCM align_name, Item*item) } else { - group = make_item ("BreakAlignGroup"); + group = make_item ("BreakAlignGroup", item->self_scm () ); group->set_property ("break-align-symbol", align_name); group->set_parent (align_, Y_AXIS); - announce_grob (group, item->self_scm ()); column_alist_ = scm_assoc_set_x (column_alist_, align_name, group->self_scm ()); diff --git a/lily/breathing-sign-engraver.cc b/lily/breathing-sign-engraver.cc index d5bee48285..d39fa93984 100644 --- a/lily/breathing-sign-engraver.cc +++ b/lily/breathing-sign-engraver.cc @@ -54,9 +54,7 @@ Breathing_sign_engraver::process_acknowledged_grobs () { if (breathing_sign_req_ && ! breathing_sign_) { - breathing_sign_ = make_item ("BreathingSign"); - - announce_grob (breathing_sign_, breathing_sign_req_->self_scm ()); + breathing_sign_ = make_item ("BreathingSign", breathing_sign_req_->self_scm ()); breathing_sign_req_ = 0; } } diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index 13254fa8de..e6b70aa402 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -109,9 +109,9 @@ Chord_name_engraver::process_music () */ SCM chord_as_scm = scm_cons (pitches, scm_cons (bass, inversion)); - chord_name_ = make_item ("ChordName"); + chord_name_ = make_item ("ChordName",notes_[0]->self_scm ()); chord_name_->set_property ("text", markup); - announce_grob (chord_name_, notes_[0]->self_scm ()); + SCM s = get_property ("chordChanges"); if (to_boolean (s) && ly_c_pair_p (last_chord_) && ly_c_equal_p (chord_as_scm, last_chord_)) diff --git a/lily/chord-tremolo-engraver.cc b/lily/chord-tremolo-engraver.cc index 4272ec2bef..39871f741d 100644 --- a/lily/chord-tremolo-engraver.cc +++ b/lily/chord-tremolo-engraver.cc @@ -120,16 +120,15 @@ void Chord_tremolo_engraver::process_music () { if (repeat_ && sequential_body_b_ && !beam_) - { - beam_ = make_spanner ("Beam"); - beam_->set_property ("chord-tremolo", SCM_BOOL_T); - - SCM smp = get_property ("measurePosition"); - Moment mp - = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0); - beam_start_location_ = mp; - announce_grob (beam_, repeat_->self_scm ()); - } + { + beam_ = make_spanner ("Beam", repeat_->self_scm ()); + beam_->set_property ("chord-tremolo", SCM_BOOL_T); + + SCM smp = get_property ("measurePosition"); + Moment mp + = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0); + beam_start_location_ = mp; + } } void @@ -186,8 +185,7 @@ Chord_tremolo_engraver::acknowledge_grob (Grob_info info) else if (repeat_ && flags_ && !sequential_body_b_ && Stem::has_interface (info.grob_)) { - stem_tremolo_ = make_item ("StemTremolo"); - announce_grob (stem_tremolo_, repeat_->self_scm ()); + stem_tremolo_ = make_item ("StemTremolo", repeat_->self_scm ()); stem_tremolo_->set_property ("flag-count", scm_int2num (flags_)); stem_tremolo_->set_property ("stem", diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index eacc015ab4..78405680cc 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -86,8 +86,8 @@ Clef_engraver::create_clef () { if (!clef_) { - Item *c= make_item ("Clef"); - announce_grob (c, SCM_EOL); + Item *c = make_item ("Clef", SCM_EOL); + clef_ = c; SCM cpos = get_property ("clefPosition"); @@ -98,7 +98,7 @@ Clef_engraver::create_clef () SCM oct = get_property ("clefOctavation"); if (ly_c_number_p (oct) && ly_scm2int (oct)) { - Item * g = make_item ("OctavateEight"); + Item * g = make_item ("OctavateEight", SCM_EOL); int abs_oct = ly_scm2int (oct) ; int dir = sign (abs_oct); @@ -116,7 +116,7 @@ Clef_engraver::create_clef () g->set_parent (clef_, X_AXIS); g->set_property ("direction", scm_int2num (dir)); octavate_ = g; - announce_grob (octavate_, SCM_EOL); + } } } diff --git a/lily/cluster-engraver.cc b/lily/cluster-engraver.cc index 391d3fbd13..23795e56bd 100644 --- a/lily/cluster-engraver.cc +++ b/lily/cluster-engraver.cc @@ -96,17 +96,15 @@ Cluster_spanner_engraver::process_music () pmin = pmin self_scm ()); beacon_->set_property ("positions", scm_cons (scm_int2num (pmin), scm_int2num (pmax))); - announce_grob (beacon_, cluster_notes_[0]->self_scm ()); } if (beacon_ && !spanner_) { - spanner_ = make_spanner ("ClusterSpanner"); - announce_grob (spanner_, cluster_notes_[0]->self_scm ()); + spanner_ = make_spanner ("ClusterSpanner", cluster_notes_[0]->self_scm () ); } if (beacon_ && spanner_) diff --git a/lily/collision-engraver.cc b/lily/collision-engraver.cc index 2a0b1dea2f..478030d847 100644 --- a/lily/collision-engraver.cc +++ b/lily/collision-engraver.cc @@ -36,8 +36,8 @@ Collision_engraver::process_acknowledged_grobs () return ; if (!col_) { - col_ = make_item ("NoteCollision"); - announce_grob (col_, SCM_EOL); + col_ = make_item ("NoteCollision", SCM_EOL); + } for (int i=0; i< note_columns_.size (); i++) diff --git a/lily/completion-note-heads-engraver.cc b/lily/completion-note-heads-engraver.cc index 4c52d88ae4..229eadd493 100644 --- a/lily/completion-note-heads-engraver.cc +++ b/lily/completion-note-heads-engraver.cc @@ -210,9 +210,9 @@ Completion_heads_engraver::process_music () for (int i = 0; left_to_do_ && i < note_reqs_.size (); i++) { - Item *note = make_item ("NoteHead"); Music * req = note_reqs_[i]; + Item *note = make_item ("NoteHead", req->self_scm ()); if (scratch_note_reqs_.size ()) { req = scratch_note_reqs_[i]; @@ -227,7 +227,7 @@ Completion_heads_engraver::process_music () int dots= note_dur.dot_count (); if (dots) { - Item * d = make_item ("Dots"); + Item * d = make_item ("Dots", SCM_EOL); Rhythmic_head::set_dots (note, d); /* @@ -237,7 +237,6 @@ Completion_heads_engraver::process_music () d->set_property ("dot-count", scm_int2num (dots)); d->set_parent (note, Y_AXIS); - announce_grob (d, SCM_EOL); dots_.push (d); } @@ -249,7 +248,6 @@ Completion_heads_engraver::process_music () pos += ly_scm2int (c0); note->set_property ("staff-position", scm_int2num (pos)); - announce_grob (note,req->self_scm ()); notes_.push (note); } @@ -257,14 +255,14 @@ Completion_heads_engraver::process_music () { for (int i= 0; i < notes_.size (); i++) { - Grob * p = make_spanner ("Tie"); + Grob * p = make_spanner ("Tie", SCM_EOL); Tie::set_interface (p); // cannot remove yet! Tie::set_head (p, LEFT, prev_notes_[i]); Tie::set_head (p, RIGHT, notes_[i]); ties_.push (p); - announce_grob (p, SCM_EOL); + } } diff --git a/lily/custos-engraver.cc b/lily/custos-engraver.cc index 86dac5847e..09d0ec9aa6 100644 --- a/lily/custos-engraver.cc +++ b/lily/custos-engraver.cc @@ -124,9 +124,9 @@ Custos_engraver::process_acknowledged_grobs () Item* Custos_engraver::create_custos () { - Item* custos = make_item ("Custos"); + Item* custos = make_item ("Custos", SCM_EOL); + - announce_grob (custos, SCM_EOL); custodes_.push (custos); return custos; diff --git a/lily/dot-column-engraver.cc b/lily/dot-column-engraver.cc index 8ee8850614..2b426cec2c 100644 --- a/lily/dot-column-engraver.cc +++ b/lily/dot-column-engraver.cc @@ -63,8 +63,8 @@ Dot_column_engraver::acknowledge_grob (Grob_info info) { if (!dotcol_) { - dotcol_ = make_item ("DotColumn"); - announce_grob (dotcol_, SCM_EOL); + dotcol_ = make_item ("DotColumn", SCM_EOL); + } Dot_column::add_head (dotcol_, info.grob_); diff --git a/lily/drum-note-engraver.cc b/lily/drum-note-engraver.cc index 6301ca71bd..8b05bad665 100644 --- a/lily/drum-note-engraver.cc +++ b/lily/drum-note-engraver.cc @@ -62,8 +62,8 @@ Drum_notes_engraver::process_music () if (!tab) tab = get_property ("drumStyleTable"); - Item *note = make_item ("NoteHead"); Music * ev = events_[i]; + Item *note = make_item ("NoteHead", ev->self_scm ()); Duration dur = *unsmob_duration (ev->get_property ("duration")); @@ -71,7 +71,7 @@ Drum_notes_engraver::process_music () if (dur.dot_count ()) { - Item * d = make_item ("Dots"); + Item * d = make_item ("Dots", ev->self_scm ()); Rhythmic_head::set_dots (note, d); if (dur.dot_count () @@ -79,7 +79,7 @@ Drum_notes_engraver::process_music () d->set_property ("dot-count", scm_int2num (dur.dot_count ())); d->set_parent (note, Y_AXIS); - announce_grob (d, SCM_EOL); + dots_.push (d); } @@ -103,7 +103,7 @@ Drum_notes_engraver::process_music () if (ly_c_string_p (script)) { - Item *p = make_item ("Script"); + Item *p = make_item ("Script", ev->self_scm ()); SCM desc = SCM_EOL; make_script_from_event (p, &desc, context (), script, @@ -112,7 +112,6 @@ Drum_notes_engraver::process_music () if (p->get_property ("follow-into-staff")) p->set_property ("staff-padding", SCM_EOL); - announce_grob (p, ev->self_scm ()); p->set_parent (note, Y_AXIS); Side_position_interface::add_support (p, note); @@ -120,9 +119,6 @@ Drum_notes_engraver::process_music () } } - - - announce_grob (note,ev->self_scm ()); notes_.push (note); } } diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 6e926b8d6c..f57f031e28 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -114,12 +114,11 @@ Dynamic_engraver::process_music () { if (!line_spanner_) { - line_spanner_ = make_spanner ("DynamicLineSpanner"); - Music * rq = accepted_spanreqs_drul_[START]; + line_spanner_ = make_spanner ("DynamicLineSpanner", rq ? rq->self_scm (): SCM_EOL ); + if (script_ev_) - rq = script_ev_ ; - announce_grob (line_spanner_, rq ? rq->self_scm (): SCM_EOL); + rq = script_ev_; } } @@ -140,7 +139,7 @@ Dynamic_engraver::process_music () */ if (script_ev_) { - script_ = make_item ("DynamicText"); + script_ = make_item ("DynamicText", script_ev_->self_scm ()); script_->set_property ("text", script_ev_->get_property ("text")); @@ -150,7 +149,6 @@ Dynamic_engraver::process_music () Axis_group_interface::add_element (line_spanner_, script_); - announce_grob (script_, script_ev_->self_scm ()); } Music *stop_ev = accepted_spanreqs_drul_ [STOP] ? @@ -222,7 +220,7 @@ Dynamic_engraver::process_music () SCM s = get_property ((start_type + "Spanner").to_str0 ()); if (!ly_c_symbol_p (s) || s == ly_symbol2scm ("hairpin")) { - cresc_ = make_spanner ("Hairpin"); + cresc_ = make_spanner ("Hairpin", accepted_spanreqs_drul_[START]->self_scm ()); cresc_->set_property ("grow-direction", scm_int2num ((start_type == "crescendo") ? BIGGER : SMALLER)); @@ -237,7 +235,7 @@ Dynamic_engraver::process_music () */ else { - cresc_ = make_spanner ("TextSpanner"); + cresc_ = make_spanner ("TextSpanner", accepted_spanreqs_drul_[START]->self_scm ()); cresc_->set_property ("style", s); context ()->set_property ((start_type + "Spanner").to_str0 (), SCM_EOL); @@ -262,7 +260,6 @@ Dynamic_engraver::process_music () add_bound_item (line_spanner_, cresc_->get_bound (LEFT)); - announce_grob (cresc_, accepted_spanreqs_drul_[START]->self_scm ()); } } } diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc index bc1d2580a0..35f4db9218 100644 --- a/lily/extender-engraver.cc +++ b/lily/extender-engraver.cc @@ -59,8 +59,7 @@ Extender_engraver::process_music () { if (ev_) { - extender_ = make_spanner ("LyricExtender"); - announce_grob (extender_, ev_->self_scm ()); + extender_ = make_spanner ("LyricExtender", ev_->self_scm ()); } } diff --git a/lily/figured-bass-engraver.cc b/lily/figured-bass-engraver.cc index 611e49dc25..f46a86b671 100644 --- a/lily/figured-bass-engraver.cc +++ b/lily/figured-bass-engraver.cc @@ -68,8 +68,7 @@ Figured_bass_engraver::process_music () { if (rest_req_) { - figure_ = make_item ("BassFigure"); - announce_grob (figure_, rest_req_->self_scm ()); // todo + figure_ = make_item ("BassFigure", rest_req_->self_scm ()); figure_->set_property ("text" , scm_makfrom0str ("-")); } else if (figures_.size ()) @@ -84,10 +83,9 @@ Figured_bass_engraver::process_music () *t = scm_cons (figures_[i]->self_scm (), SCM_EOL); t = SCM_CDRLOC (*t); } - figure_ = make_item ("BassFigure"); + figure_ = make_item ("BassFigure", figures_[0]->self_scm ()); scm_call_3 (proc, l, context ()->self_scm (), figure_->self_scm ()); - announce_grob (figure_, figures_[0]->self_scm ()); // todo } } } diff --git a/lily/fingering-engraver.cc b/lily/fingering-engraver.cc index a281bbdf77..c61ba4c56a 100644 --- a/lily/fingering-engraver.cc +++ b/lily/fingering-engraver.cc @@ -81,7 +81,7 @@ Fingering_engraver::process_music () void Fingering_engraver::make_script (Direction d, Music *r, int i) { - Item *fingering = make_item ("Fingering"); + Item *fingering = make_item ("Fingering", r->self_scm ()); Axis a = Y_AXIS; Axis other = other_axis (a); @@ -125,7 +125,6 @@ Fingering_engraver::make_script (Direction d, Music *r, int i) SCM dig = r->get_property ("digit"); fingering->set_property ("text", scm_number_to_string (dig, scm_int2num (10))); - announce_grob (fingering, r->self_scm ()); fingerings_.push (fingering); } diff --git a/lily/glissando-engraver.cc b/lily/glissando-engraver.cc index 795570866f..6c177c43ba 100644 --- a/lily/glissando-engraver.cc +++ b/lily/glissando-engraver.cc @@ -55,8 +55,7 @@ Glissando_engraver::process_music () { if (event_) { - line_ = make_spanner ("Glissando"); - announce_grob (line_, event_->self_scm ()); + line_ = make_spanner ("Glissando", event_->self_scm ()); } } diff --git a/lily/horizontal-bracket-engraver.cc b/lily/horizontal-bracket-engraver.cc index 99836973b4..3be6afc743 100644 --- a/lily/horizontal-bracket-engraver.cc +++ b/lily/horizontal-bracket-engraver.cc @@ -91,9 +91,8 @@ Horizontal_bracket_engraver::process_music () { for (int k = 0; k < push_count_; k++) { - Spanner * sp = make_spanner ("HorizontalBracket"); + Spanner * sp = make_spanner ("HorizontalBracket", events_[k]->self_scm ()); - announce_grob (sp, events_[k]->self_scm ()); for (int i = 0; i < bracket_stack_.size (); i++) { /* diff --git a/lily/hyphen-engraver.cc b/lily/hyphen-engraver.cc index 26deb72817..edc3b5f36b 100644 --- a/lily/hyphen-engraver.cc +++ b/lily/hyphen-engraver.cc @@ -120,8 +120,8 @@ Hyphen_engraver::process_music () { if (ev_) { - hyphen_ = make_spanner ("LyricHyphen"); - announce_grob (hyphen_, ev_->self_scm ()); + hyphen_ = make_spanner ("LyricHyphen", ev_->self_scm () +); } } diff --git a/lily/include/engraver.hh b/lily/include/engraver.hh index 5c064bf71b..c8270be6d6 100644 --- a/lily/include/engraver.hh +++ b/lily/include/engraver.hh @@ -42,14 +42,16 @@ protected: */ virtual void process_acknowledged_grobs () {} - /** - Announce element. Default: pass on to daddy. Utility - */ - virtual void announce_grob (Grob*, SCM cause); + virtual void announce_grob (Grob_info); Engraver_group_engraver*get_daddy_engraver () const; public: + /** + Announce element. Default: pass on to daddy. Utility + */ + void announce_grob (Grob*, SCM cause); + Score_engraver * get_score_engraver () const; /** override other ctor @@ -57,10 +59,10 @@ public: TRANSLATOR_DECLARATIONS(Engraver); }; -#define make_item(x) make_item_from_properties (context (), ly_symbol2scm (x)) -#define make_spanner(x) make_spanner_from_properties (context (), ly_symbol2scm (x)) -Item* make_item_from_properties (Context * tg, SCM x); -Spanner* make_spanner_from_properties (Context * tg, SCM x); +#define make_item(x,cause) make_item_from_properties (this, ly_symbol2scm (x), cause) +#define make_spanner(x,cause) make_spanner_from_properties (this, ly_symbol2scm (x), cause) +Item* make_item_from_properties (Translator * tg, SCM x, SCM cause); +Spanner* make_spanner_from_properties (Translator * tg, SCM x, SCM cause); diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index 892bde9b9f..1abbcb859a 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -75,11 +75,11 @@ Instrument_name_engraver::create_text () return ; - text_ = make_item ("InstrumentName"); + text_ = make_item ("InstrumentName", SCM_EOL); if (text_->get_property ("text") != txt) text_->set_property ("text", txt); - announce_grob (text_, SCM_EOL); + } void @@ -169,11 +169,11 @@ Vocal_name_engraver::create_text () if (txt == SCM_EOL) return ; - text_ = make_item ("VocalName"); + text_ = make_item ("VocalName", SCM_EOL); if (text_->get_property ("text") != txt) text_->set_property ("text", txt); - announce_grob (text_, SCM_EOL); + } diff --git a/lily/item.cc b/lily/item.cc index e9c0e6df46..f857ff5591 100644 --- a/lily/item.cc +++ b/lily/item.cc @@ -41,8 +41,8 @@ Item::is_breakable (Grob*me) if (!dynamic_cast (me)) me->programming_error ("only items can be breakable."); - Item * i =dynamic_cast (me->get_parent (X_AXIS)); - return (i) ? Item::is_breakable (i) : to_boolean (me->get_property ("breakable")); + Item * i = dynamic_cast (me->get_parent (X_AXIS)); + return (i) ? Item::is_breakable (i) : to_boolean (me->get_property ("breakable")); } Paper_column * diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc index a13b4315a6..fdb59dc492 100644 --- a/lily/key-engraver.cc +++ b/lily/key-engraver.cc @@ -64,7 +64,7 @@ Key_engraver::create_key (bool def) { if (!item_) { - item_ = make_item ("KeySignature"); + item_ = make_item ("KeySignature", key_ev_ ? key_ev_->self_scm () : SCM_EOL); item_->set_property ("c0-position", get_property ("middleCPosition")); @@ -73,7 +73,6 @@ Key_engraver::create_key (bool def) item_->set_property ("old-accidentals", get_property ("lastKeySignature")); item_->set_property ("new-accidentals", get_property ("keySignature")); - announce_grob (item_, key_ev_ ? key_ev_->self_scm () : SCM_EOL); } if (!def) diff --git a/lily/ligature-bracket-engraver.cc b/lily/ligature-bracket-engraver.cc index 975b85b775..1837911cbf 100644 --- a/lily/ligature-bracket-engraver.cc +++ b/lily/ligature-bracket-engraver.cc @@ -39,7 +39,7 @@ Ligature_bracket_engraver::Ligature_bracket_engraver () Spanner * Ligature_bracket_engraver::create_ligature_spanner () { - return make_spanner ("LigatureBracket"); + return make_spanner ("LigatureBracket", SCM_EOL); } void diff --git a/lily/ligature-engraver.cc b/lily/ligature-engraver.cc index 75c915d322..0e221aa38d 100644 --- a/lily/ligature-engraver.cc +++ b/lily/ligature-engraver.cc @@ -205,8 +205,9 @@ Ligature_engraver::process_music () } ligature_start_mom_ = now_mom (); - - announce_grob (ligature_, reqs_drul_[START]->self_scm ()); + + // TODO: dump cause into make_item/spanner. + // announce_grob (ligature_, reqs_drul_[START]->self_scm ()); override_stencil_callback (); } } diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc index b81897a819..45c838c53c 100644 --- a/lily/lyric-engraver.cc +++ b/lily/lyric-engraver.cc @@ -58,10 +58,9 @@ Lyric_engraver::process_music () { if (event_) { - text_= make_item ("LyricText"); + text_= make_item ("LyricText",event_->self_scm ()); text_->set_property ("text", event_->get_property ("text")); - announce_grob (text_, event_->self_scm ()); } } diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc index ce1d13e7b9..d552496872 100644 --- a/lily/mark-engraver.cc +++ b/lily/mark-engraver.cc @@ -82,8 +82,7 @@ Mark_engraver::create_items (Music *ev) if (text_) return; - text_ = make_item ("RehearsalMark"); - announce_grob (text_, ev->self_scm ()); + text_ = make_item ("RehearsalMark", ev->self_scm ()); } diff --git a/lily/measure-grouping-engraver.cc b/lily/measure-grouping-engraver.cc index 6ae17ceedd..6e54748f85 100644 --- a/lily/measure-grouping-engraver.cc +++ b/lily/measure-grouping-engraver.cc @@ -87,9 +87,9 @@ Measure_grouping_engraver::process_music () continue; } - grouping_ = make_spanner ("MeasureGrouping"); + grouping_ = make_spanner ("MeasureGrouping", SCM_EOL); grouping_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn"))); - announce_grob (grouping_, SCM_EOL); + stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * bl ; diff --git a/lily/mensural-ligature-engraver.cc b/lily/mensural-ligature-engraver.cc index 867fc73d89..4d6493fec8 100644 --- a/lily/mensural-ligature-engraver.cc +++ b/lily/mensural-ligature-engraver.cc @@ -73,7 +73,7 @@ Mensural_ligature_engraver::Mensural_ligature_engraver () Spanner * Mensural_ligature_engraver::create_ligature_spanner () { - return make_spanner ("MensuralLigature"); + return make_spanner ("MensuralLigature", SCM_EOL); } /* diff --git a/lily/metronome-engraver.cc b/lily/metronome-engraver.cc index 2c8bd4659e..704707b3fb 100644 --- a/lily/metronome-engraver.cc +++ b/lily/metronome-engraver.cc @@ -79,9 +79,8 @@ Metronome_mark_engraver::create_items (Music *rq) if (text_) return; - text_ = make_item ("MetronomeMark"); + text_ = make_item ("MetronomeMark", rq->self_scm () ); - announce_grob (text_, rq->self_scm ()); } diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index 3971353441..97a022230d 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -80,16 +80,16 @@ Multi_measure_rest_engraver::process_music () if (rest_ev_ && !mmrest_ && stop_moment_ > now_mom ()) { - mmrest_ = make_spanner ("MultiMeasureRest"); + mmrest_ = make_spanner ("MultiMeasureRest", rest_ev_->self_scm ()); if (text_events_.size ()) { for (int i = 0; i < text_events_.size (); i++) { - Spanner *sp - = make_spanner ("MultiMeasureRestText"); Music* e = text_events_[i]; + Spanner *sp + = make_spanner ("MultiMeasureRestText", e->self_scm () ); SCM t = e->get_property ("text"); SCM dir = e->get_property ("direction"); sp->set_property ("text",t); @@ -97,7 +97,6 @@ Multi_measure_rest_engraver::process_music () sp->set_property ("direction",dir); numbers_.push (sp); - announce_grob (sp, e->self_scm ()); } /* @@ -120,9 +119,8 @@ Multi_measure_rest_engraver::process_music () else { Spanner *sp - = make_spanner ("MultiMeasureRestNumber"); + = make_spanner ("MultiMeasureRestNumber", rest_ev_->self_scm () ); numbers_.push (sp); - announce_grob (sp, rest_ev_->self_scm ()); } for (int i =0 ; i < numbers_.size (); i++) @@ -131,7 +129,6 @@ Multi_measure_rest_engraver::process_music () numbers_[i]->set_parent (mmrest_, Y_AXIS); } - announce_grob (mmrest_, rest_ev_->self_scm ()); start_measure_ = ly_scm2int (get_property ("currentBarNumber")); } diff --git a/lily/new-fingering-engraver.cc b/lily/new-fingering-engraver.cc index 05f60c433e..f867908ea5 100644 --- a/lily/new-fingering-engraver.cc +++ b/lily/new-fingering-engraver.cc @@ -111,7 +111,7 @@ New_fingering_engraver::add_script (Grob * head, { Finger_tuple ft ; - Grob * g= make_item ("Script"); + Grob * g= make_item ("Script", event->self_scm () ); make_script_from_event (g, &ft.description_, context (), event->get_property ("articulation-type"), 0); if (g) @@ -119,7 +119,6 @@ New_fingering_engraver::add_script (Grob * head, ft.script_ =g ; articulations_.push (ft); - announce_grob (g, event->self_scm ()); ft.script_->set_parent (head, X_AXIS); } @@ -133,8 +132,7 @@ New_fingering_engraver::add_fingering (Grob * head, { Finger_tuple ft; - ft.script_ = make_item ("Fingering"); - announce_grob (ft.script_, event->self_scm ()); + ft.script_ = make_item ("Fingering", event->self_scm () ); Side_position_interface::add_support (ft.script_, head); diff --git a/lily/note-head-line-engraver.cc b/lily/note-head-line-engraver.cc index 190c0bcc93..f5737a795d 100644 --- a/lily/note-head-line-engraver.cc +++ b/lily/note-head-line-engraver.cc @@ -87,12 +87,11 @@ Note_head_line_engraver::process_acknowledged_grobs () Should probably store follow_ in line_, and suicide at some later point */ if (follow_) - line_ = make_spanner ("VoiceFollower"); + line_ = make_spanner ("VoiceFollower", head_->self_scm ()); line_->set_bound (LEFT, last_head_); line_->set_bound (RIGHT, head_); - announce_grob (line_, head_->self_scm ()); follow_ = false; } diff --git a/lily/note-heads-engraver.cc b/lily/note-heads-engraver.cc index 8fb85cd94a..2cefa7b2be 100644 --- a/lily/note-heads-engraver.cc +++ b/lily/note-heads-engraver.cc @@ -57,16 +57,16 @@ Note_heads_engraver::process_music () { for (int i=0; i < note_reqs_.size (); i++) { - Item *note = make_item ("NoteHead"); Music * req = note_reqs_[i]; + Item *note = make_item ("NoteHead", req->self_scm ()); Duration dur = *unsmob_duration (req->get_property ("duration")); note->set_property ("duration-log", scm_int2num (dur.duration_log ())); if (dur.dot_count ()) { - Item * d = make_item ("Dots"); + Item * d = make_item ("Dots", note->self_scm ()); Rhythmic_head::set_dots (note, d); if (dur.dot_count () @@ -74,7 +74,7 @@ Note_heads_engraver::process_music () d->set_property ("dot-count", scm_int2num (dur.dot_count ())); d->set_parent (note, Y_AXIS); - announce_grob (d, SCM_EOL); + dots_.push (d); } @@ -86,7 +86,6 @@ Note_heads_engraver::process_music () pos += ly_scm2int (c0); note->set_property ("staff-position", scm_int2num (pos)); - announce_grob (note,req->self_scm ()); notes_.push (note); } } diff --git a/lily/note-name-engraver.cc b/lily/note-name-engraver.cc index a0c904e562..b9e82ab322 100644 --- a/lily/note-name-engraver.cc +++ b/lily/note-name-engraver.cc @@ -51,9 +51,8 @@ Note_name_engraver::process_music () } if (s.length ()) { - Item * t = make_item ("NoteName"); + Item * t = make_item ("NoteName", events_[0]->self_scm () ); t->set_property ("text", scm_makfrom0str (s.to_str0 ())); - announce_grob (t, events_[0]->self_scm ()); texts_.push (t); } } diff --git a/lily/ottava-engraver.cc b/lily/ottava-engraver.cc index 20f629e1b6..895fa82660 100644 --- a/lily/ottava-engraver.cc +++ b/lily/ottava-engraver.cc @@ -48,9 +48,9 @@ Ottava_spanner_engraver::process_music () span_ = 0; if (ly_c_string_p (ott)) { - span_ = make_spanner ("OttavaBracket"); + span_ = make_spanner ("OttavaBracket", SCM_EOL); span_->set_property ("text", ott); - announce_grob (span_, SCM_EOL); + SCM c0 (get_property ("middleCPosition")); SCM oc0 (get_property ("originalCentralCPosition")); diff --git a/lily/part-combine-engraver.cc b/lily/part-combine-engraver.cc index a941876ef3..daaf17b7c5 100644 --- a/lily/part-combine-engraver.cc +++ b/lily/part-combine-engraver.cc @@ -61,9 +61,8 @@ Part_combine_engraver::process_music () if (Text_item::markup_p (text)) { - text_ = make_item ("CombineTextScript"); + text_ = make_item ("CombineTextScript", event_->self_scm () ); text_->set_property ("text", text); - announce_grob (text_, event_->self_scm ()); } } } diff --git a/lily/percent-repeat-engraver.cc b/lily/percent-repeat-engraver.cc index 3090e9b615..f8d157abc6 100644 --- a/lily/percent-repeat-engraver.cc +++ b/lily/percent-repeat-engraver.cc @@ -133,16 +133,13 @@ Percent_repeat_engraver::process_music () { finished_perc_ = perc_; typeset_perc (); - perc_ = make_spanner ("PercentRepeat"); + perc_ = make_spanner ("PercentRepeat", repeat_->self_scm ()); SCM col =get_property ("currentCommandColumn"); perc_->set_bound (LEFT, unsmob_grob (col)); - announce_grob (perc_, repeat_->self_scm ()); } else if (repeat_sign_type_ == DOUBLE_MEASURE) { - double_percent_ = make_item ("DoublePercentRepeat"); - announce_grob (double_percent_, repeat_->self_scm ()); - + double_percent_ = make_item ("DoublePercentRepeat", repeat_->self_scm ()); /* forbid breaks on a % line. Should forbid all breaks, really. */ diff --git a/lily/performance.cc b/lily/performance.cc index 484c59f0c5..5bb074307f 100644 --- a/lily/performance.cc +++ b/lily/performance.cc @@ -150,10 +150,6 @@ Performance::add_element (Audio_element *p) { audio_staffs_.push (s); } - else if (Audio_column *c = dynamic_cast (p)) - { - c->performance_ = this; - } audio_elem_p_list_ = new Killing_cons (p, audio_elem_p_list_); } diff --git a/lily/phrasing-slur-engraver.cc b/lily/phrasing-slur-engraver.cc index eb4f883596..1671f24127 100644 --- a/lily/phrasing-slur-engraver.cc +++ b/lily/phrasing-slur-engraver.cc @@ -132,7 +132,7 @@ Phrasing_slur_engraver::process_acknowledged_grobs () { // push a new phrasing_slur onto stack. // (use temp. array to wait for all phrasing_slur STOPs) - Grob* phrasing_slur = make_spanner ("PhrasingSlur"); + Grob* phrasing_slur = make_spanner ("PhrasingSlur", phrasing_slur_ev->self_scm ()); Slur::set_interface (phrasing_slur); // can't remove. @@ -143,7 +143,6 @@ Phrasing_slur_engraver::process_acknowledged_grobs () start_phrasing_slurs.push (phrasing_slur); eventses_.push (phrasing_slur_ev); - announce_grob (phrasing_slur, phrasing_slur_ev->self_scm ()); } } for (int i=0; i < start_phrasing_slurs.size (); i++) diff --git a/lily/piano-pedal-engraver.cc b/lily/piano-pedal-engraver.cc index df0d26e6a2..a43268aa77 100644 --- a/lily/piano-pedal-engraver.cc +++ b/lily/piano-pedal-engraver.cc @@ -185,12 +185,11 @@ Piano_pedal_engraver::process_music () if (!p->line_spanner_) { String name = String (p->name_) + "PedalLineSpanner"; - p->line_spanner_ = make_spanner (name.to_str0 ()); - Music * rq = (p->event_drul_[START] ? p->event_drul_[START] : p->event_drul_[STOP]); + p->line_spanner_ = make_spanner (name.to_str0 (), rq->self_scm ()); + - announce_grob (p->line_spanner_, rq->self_scm ()); } /* Choose the appropriate grobs to add to the line spanner @@ -295,16 +294,13 @@ Piano_pedal_engraver::create_text_grobs (Pedal_info *p, bool mixed) { String propname = String (p->name_) + "Pedal"; - p->item_ = make_item (propname.to_str0 ()); - p->item_->set_property ("text", s); - Axis_group_interface::add_element (p->line_spanner_, p->item_); - - announce_grob (p->item_, - (p->event_drul_[START] - ? p->event_drul_[START] - : p->event_drul_[STOP])->self_scm ()); + p->item_ = make_item (propname.to_str0 (), (p->event_drul_[START] + ? p->event_drul_[START] + : p->event_drul_[STOP])->self_scm ()); } - + p->item_->set_property ("text", s); + Axis_group_interface::add_element (p->line_spanner_, p->item_); + if (!mixed) { p->event_drul_[START] = 0; @@ -354,7 +350,7 @@ Piano_pedal_engraver::create_bracket_grobs (Pedal_info *p, bool mixed) p->start_ev_ = p->event_drul_[START]; p->current_bracket_ev_ = p->event_drul_[START]; - p->bracket_ = make_spanner ("PianoPedalBracket"); + p->bracket_ = make_spanner ("PianoPedalBracket", p->event_drul_[START]->self_scm ()); /* Set properties so that the stencil-creating function will @@ -403,7 +399,6 @@ Piano_pedal_engraver::create_bracket_grobs (Pedal_info *p, bool mixed) */ Axis_group_interface::add_element (p->line_spanner_, p->bracket_); - announce_grob (p->bracket_, p->event_drul_[START]->self_scm ()); if (!p->event_drul_[STOP]) { diff --git a/lily/rest-collision-engraver.cc b/lily/rest-collision-engraver.cc index 149ad79831..e63fc171b0 100644 --- a/lily/rest-collision-engraver.cc +++ b/lily/rest-collision-engraver.cc @@ -40,9 +40,9 @@ Rest_collision_engraver::process_acknowledged_grobs () && rest_count_ < 2)) return; - rest_collision_ = make_item ("RestCollision"); + rest_collision_ = make_item ("RestCollision", SCM_EOL); - announce_grob (rest_collision_, SCM_EOL); + for (int i=0; i < note_columns_.size (); i++) Rest_collision::add_column (rest_collision_,note_columns_[i]); } diff --git a/lily/rest-engraver.cc b/lily/rest-engraver.cc index 6426973f8c..48621d2f61 100644 --- a/lily/rest-engraver.cc +++ b/lily/rest-engraver.cc @@ -65,7 +65,7 @@ Rest_engraver::process_music () { if (rest_req_ && !rest_) { - rest_ = make_item ("Rest"); + rest_ = make_item ("Rest", rest_req_->self_scm ()); int durlog = unsmob_duration (rest_req_->get_property ("duration"))-> duration_log (); @@ -76,12 +76,12 @@ Rest_engraver::process_music () if (dots) { - dot_ = make_item ("Dots"); + dot_ = make_item ("Dots", SCM_EOL); Rhythmic_head::set_dots (rest_, dot_); dot_->set_parent (rest_, Y_AXIS); dot_->set_property ("dot-count", scm_int2num (dots)); - announce_grob (dot_, SCM_EOL); + } Pitch *p = unsmob_pitch (rest_req_->get_property ("pitch")); @@ -100,7 +100,6 @@ Rest_engraver::process_music () rest_->set_property ("staff-position", scm_int2num (pos)); } - announce_grob (rest_, rest_req_->self_scm ()); } } diff --git a/lily/rhythmic-column-engraver.cc b/lily/rhythmic-column-engraver.cc index 282c567fa6..02dd91bb7d 100644 --- a/lily/rhythmic-column-engraver.cc +++ b/lily/rhythmic-column-engraver.cc @@ -83,14 +83,13 @@ Rhythmic_column_engraver::process_acknowledged_grobs () { if (!note_column_) { - note_column_ = make_item ("NoteColumn"); - announce_grob (note_column_, rheads_[0]->self_scm ()); + note_column_ = make_item ("NoteColumn",rheads_[0]->self_scm ()); - spacing_ = make_item ("NoteSpacing"); + spacing_ = make_item ("NoteSpacing", SCM_EOL); spacing_->set_property ("left-items", scm_cons (note_column_->self_scm (), SCM_EOL)); - announce_grob (spacing_, SCM_EOL); + if (last_spacing_) { diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 1b4ebcf0c1..7df239b584 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -151,15 +151,13 @@ Score_engraver::announce_grob (Grob_info info) { announce_infos_.push (info); pscore_->system_->typeset_grob (info.grob_); + elems_.push (info.grob_); } void Score_engraver::typeset_grob (Grob *elem) { - if (!elem) - programming_error ("Score_engraver: empty elt\n"); - else - elems_.push (elem); + // elems_.push (elem); } void @@ -168,7 +166,8 @@ Score_engraver::typeset_all () for (int i =0; i < elems_.size (); i++) { Grob * elem = elems_[i]; - + +#if 0 if (Spanner *s = dynamic_cast (elem)) { /* @@ -194,9 +193,14 @@ Score_engraver::typeset_all () if (dynamic_cast (s->get_parent (Y_AXIS))) programming_error ("Spanner Y-parent is an item."); } - else +#endif + + if (dynamic_cast (elem)) { - if (!elem->get_parent (X_AXIS)) + if (!elem->get_parent (X_AXIS) + && elem != command_column_ + && elem != musical_column_ + ) { bool br = to_boolean (elem->get_property ("breakable")); Axis_group_interface::add_element (br ? command_column_ : musical_column_, elem); diff --git a/lily/script-column-engraver.cc b/lily/script-column-engraver.cc index 9fd77afb47..e8bf2c4f60 100644 --- a/lily/script-column-engraver.cc +++ b/lily/script-column-engraver.cc @@ -64,8 +64,8 @@ Script_column_engraver::process_acknowledged_grobs () { if (!scol_ && scripts_.size () > 1) { - scol_ = make_item ("ScriptColumn"); - announce_grob (scol_, SCM_EOL); + scol_ = make_item ("ScriptColumn", SCM_EOL); + } if (scol_) diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index 8ebf701bbf..4b8fa5306e 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -132,7 +132,7 @@ Script_engraver::process_music () { Music* l=scripts_[i].event_; - Grob * p = make_item ("Script"); + Grob * p = make_item ("Script", l->self_scm ()); make_script_from_event (p, &scripts_[i].description_, context (), l->get_property ("articulation-type"), @@ -144,9 +144,6 @@ Script_engraver::process_music () SCM force_dir = l->get_property ("direction"); if (is_direction (force_dir) && to_dir (force_dir)) p->set_property ("direction", force_dir); - - if (p) - announce_grob (p, l->self_scm ()); } } diff --git a/lily/separating-line-group-engraver.cc b/lily/separating-line-group-engraver.cc index 3ab5b42256..b9b3fda402 100644 --- a/lily/separating-line-group-engraver.cc +++ b/lily/separating-line-group-engraver.cc @@ -75,9 +75,9 @@ Separating_line_group_engraver::process_music () if (!sep_span_) { - sep_span_ = make_spanner ("SeparatingGroupSpanner"); + sep_span_ = make_spanner ("SeparatingGroupSpanner", SCM_EOL); - announce_grob (sep_span_, SCM_EOL); + sep_span_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn"))); } } @@ -135,23 +135,23 @@ Separating_line_group_engraver::acknowledge_grob (Grob_info i) if (!p_ref_) { - p_ref_ = make_item ("SeparationItem"); + p_ref_ = make_item ("SeparationItem", SCM_EOL); if (ib) { p_ref_->set_property ("breakable", SCM_BOOL_T); context ()->set_property ("breakableSeparationItem", p_ref_->self_scm ()); } - announce_grob (p_ref_, SCM_EOL); + if (to_boolean (get_property ("createSpacing")) && p_ref_ == break_item_) { - Item *it = make_item ("StaffSpacing"); + Item *it = make_item ("StaffSpacing", SCM_EOL); current_spacings_.staff_spacing_ = it; it->set_property ("left-items", scm_cons (break_item_->self_scm (), SCM_EOL)); - announce_grob (it, SCM_EOL); + if (int i = last_spacings_.note_spacings_.size ()) { diff --git a/lily/slash-repeat-engraver.cc b/lily/slash-repeat-engraver.cc index 2ba59b6250..8b2c2400d7 100644 --- a/lily/slash-repeat-engraver.cc +++ b/lily/slash-repeat-engraver.cc @@ -110,8 +110,7 @@ Slash_repeat_engraver::process_music () { if (repeat_ && now_mom () == next_moment_) { - beat_slash_ = make_item ("RepeatSlash"); - announce_grob (beat_slash_, repeat_->self_scm ()); + beat_slash_ = make_item ("RepeatSlash", repeat_->self_scm ()); next_moment_ = next_moment_ + body_length_; get_global_context ()->add_moment_to_process (next_moment_); diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index 91498a7240..8d9e2b1934 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -149,7 +149,7 @@ Slur_engraver::process_music () { // push a new slur onto stack. // (use temp. array to wait for all slur STOPs) - Grob* slur = make_spanner ("Slur"); + Grob* slur = make_spanner ("Slur", slur_ev->self_scm ()); Slur::set_interface (slur); // cannot remove yet! @@ -160,7 +160,6 @@ Slur_engraver::process_music () start_slurs.push (slur); events_.push (slur_ev); - announce_grob (slur, slur_ev->self_scm ()); } } diff --git a/lily/spacing-engraver.cc b/lily/spacing-engraver.cc index 6985a7903a..05803acdab 100644 --- a/lily/spacing-engraver.cc +++ b/lily/spacing-engraver.cc @@ -78,9 +78,9 @@ Spacing_engraver::process_music () { if (!spacing_) { - spacing_ = make_spanner ("SpacingSpanner"); + spacing_ = make_spanner ("SpacingSpanner", SCM_EOL); spacing_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn"))); - announce_grob (spacing_, SCM_EOL); + } } diff --git a/lily/span-arpeggio-engraver.cc b/lily/span-arpeggio-engraver.cc index 2bd12b0b31..fc841e4bac 100644 --- a/lily/span-arpeggio-engraver.cc +++ b/lily/span-arpeggio-engraver.cc @@ -65,8 +65,8 @@ Span_arpeggio_engraver::process_acknowledged_grobs () if (!span_arpeggio_ && arpeggios_.size () > 1 && to_boolean (get_property ("connectArpeggios"))) { - span_arpeggio_ = make_item ("Arpeggio"); - announce_grob (span_arpeggio_, SCM_EOL); + span_arpeggio_ = make_item ("Arpeggio", SCM_EOL); + } } diff --git a/lily/span-bar-engraver.cc b/lily/span-bar-engraver.cc index b2ab37db86..5842c230b0 100644 --- a/lily/span-bar-engraver.cc +++ b/lily/span-bar-engraver.cc @@ -51,10 +51,10 @@ Span_bar_engraver::acknowledge_grob (Grob_info i) if (bars_.size () >= 2 && !spanbar_) { - spanbar_ = make_item ("SpanBar"); + spanbar_ = make_item ("SpanBar", SCM_EOL); spanbar_->set_parent (bars_[0], X_AXIS); - announce_grob (spanbar_, SCM_EOL); + } } } diff --git a/lily/staff-symbol-engraver.cc b/lily/staff-symbol-engraver.cc index 974c5ae1eb..e4f0574dd6 100644 --- a/lily/staff-symbol-engraver.cc +++ b/lily/staff-symbol-engraver.cc @@ -46,11 +46,11 @@ Staff_symbol_engraver::process_music () { if (!span_) { - span_ = make_spanner ("StaffSymbol"); + span_ = make_spanner ("StaffSymbol", SCM_EOL); span_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn"))); - announce_grob (span_, SCM_EOL); + } } diff --git a/lily/stanza-number-engraver.cc b/lily/stanza-number-engraver.cc index b8443e75b5..7c103de38a 100644 --- a/lily/stanza-number-engraver.cc +++ b/lily/stanza-number-engraver.cc @@ -49,9 +49,9 @@ Stanza_number_engraver::process_music () { last_stanza_ = stanza; - text_ = make_item ("StanzaNumber"); + text_ = make_item ("StanzaNumber", SCM_EOL); text_->set_property ("text", stanza); - announce_grob (text_, SCM_EOL); + } } diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc index d594868da3..be02b75464 100644 --- a/lily/stem-engraver.cc +++ b/lily/stem-engraver.cc @@ -65,7 +65,10 @@ Stem_engraver::acknowledge_grob (Grob_info i) if (!stem_) { - stem_ = make_item ("Stem"); + /* + We announce the cause of the head as cause of the stem. + The stem needs a rhythmic structure to fit it into a beam. */ + stem_ = make_item ("Stem",i.music_cause ()->self_scm ()); stem_->set_property ("duration-log", scm_int2num (duration_log)); @@ -100,8 +103,7 @@ Stem_engraver::acknowledge_grob (Grob_info i) if (tremolo_flags) { - tremolo_ = make_item ("StemTremolo"); - announce_grob (tremolo_, tremolo_ev_->self_scm ()); + tremolo_ = make_item ("StemTremolo", tremolo_ev_->self_scm ()); /* The number of tremolo flags is the number of flags of @@ -117,10 +119,6 @@ Stem_engraver::acknowledge_grob (Grob_info i) } } - /* - We announce the cause of the head as cause of the stem. - The stem needs a rhythmic structure to fit it into a beam. */ - announce_grob (stem_, i.music_cause ()->self_scm ()); } if (Stem::duration_log (stem_) != duration_log) diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc index a0fdceb4dd..39e21f3dc4 100644 --- a/lily/system-start-delimiter-engraver.cc +++ b/lily/system-start-delimiter-engraver.cc @@ -73,10 +73,10 @@ System_start_delimiter_engraver::process_music () if (!delim_) { SCM delim_name =get_property ("systemStartDelimiter"); - delim_ = make_spanner_from_properties (context (), delim_name); + delim_ = make_spanner_from_properties (this, delim_name, SCM_EOL); delim_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn"))); - announce_grob (delim_, SCM_EOL); + } } void diff --git a/lily/system.cc b/lily/system.cc index 3f8d7e6710..177756601f 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -52,10 +52,12 @@ System::typeset_grob (Grob * elem) { if (elem->pscore_) programming_error ("Adding element twice."); - - elem->pscore_ = pscore_; - Pointer_group_interface::add_grob (this, ly_symbol2scm ("all-elements"), elem); - scm_gc_unprotect_object (elem->self_scm ()); + else + { + elem->pscore_ = pscore_; + Pointer_group_interface::add_grob (this, ly_symbol2scm ("all-elements"), elem); + scm_gc_unprotect_object (elem->self_scm ()); + } } // todo: use map. diff --git a/lily/tab-note-heads-engraver.cc b/lily/tab-note-heads-engraver.cc index ecca3ed9e5..3a6285ec00 100644 --- a/lily/tab-note-heads-engraver.cc +++ b/lily/tab-note-heads-engraver.cc @@ -73,9 +73,9 @@ Tab_note_heads_engraver::process_music () int number_of_strings = ((int) ly_length (stringTunings)); bool high_string_one = to_boolean (get_property ("highStringOne")); - Item * note = make_item ("TabNoteHead"); Music * event = note_events_[i]; + Item * note = make_item ("TabNoteHead", event->self_scm ()); Music * tabstring_event=0; @@ -115,7 +115,7 @@ Tab_note_heads_engraver::process_music () if (dur.dot_count ()) { - Item * d = make_item ("Dots"); + Item * d = make_item ("Dots", event->self_scm ()); Rhythmic_head::set_dots (note, d); if (dur.dot_count () @@ -123,7 +123,7 @@ Tab_note_heads_engraver::process_music () d->set_property ("dot-count", scm_int2num (dur.dot_count ())); d->set_parent (note, Y_AXIS); - announce_grob (d, SCM_EOL); + dots_.push (d); } @@ -152,7 +152,6 @@ Tab_note_heads_engraver::process_music () note->set_property ("text", text); note->set_property ("staff-position", scm_int2num (pos)); - announce_grob (note, event->self_scm ()); notes_.push (note); } } diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index d398f4b2e7..ca3bd57347 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -84,7 +84,7 @@ Text_engraver::process_acknowledged_grobs () Music * r = evs_[i]; // URG: Text vs TextScript - Item *text = make_item ("TextScript"); + Item *text = make_item ("TextScript", r->self_scm ()); Axis ax = Y_AXIS; @@ -109,7 +109,6 @@ Text_engraver::process_acknowledged_grobs () SCM mark = r->get_property ("text"); text->set_property ("text", mark); - announce_grob (text, r->self_scm ()); texts_.push (text); } } diff --git a/lily/text-spanner-engraver.cc b/lily/text-spanner-engraver.cc index c5fb70991a..6ffd0c8847 100644 --- a/lily/text-spanner-engraver.cc +++ b/lily/text-spanner-engraver.cc @@ -81,11 +81,10 @@ Text_spanner_engraver::process_music () else { current_req_ = req_drul_[START]; - span_ = make_spanner ("TextSpanner"); + span_ = make_spanner ("TextSpanner", req_drul_[START]->self_scm ()); Side_position_interface::set_axis (span_, Y_AXIS); - announce_grob (span_, req_drul_[START]->self_scm ()); req_drul_[START] = 0; } } diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index ee2fdab41d..c1a145184c 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -97,21 +97,20 @@ Tie_engraver::acknowledge_grob (Grob_info i) && ly_c_equal_p (right_mus->get_property ("pitch"), left_mus->get_property ("pitch"))) { - Grob * p = make_spanner ("Tie"); + Grob * p = make_spanner ("Tie", last_event_->self_scm ()); Tie::set_interface (p); // cannot remove yet! Tie::set_head (p, LEFT, th); Tie::set_head (p, RIGHT, h); ties_.push (p); - announce_grob (p, last_event_->self_scm ()); } } if (ties_.size () && ! tie_column_) { - tie_column_ = make_spanner ("TieColumn"); - announce_grob (tie_column_, SCM_EOL); + tie_column_ = make_spanner ("TieColumn", SCM_EOL); + } if (tie_column_) diff --git a/lily/time-signature-engraver.cc b/lily/time-signature-engraver.cc index c29863f989..2a5a456ffc 100644 --- a/lily/time-signature-engraver.cc +++ b/lily/time-signature-engraver.cc @@ -62,11 +62,8 @@ Time_signature_engraver::process_music () last_time_fraction_ = fr; - time_signature_ = make_item ("TimeSignature"); + time_signature_ = make_item ("TimeSignature",SCM_EOL); time_signature_->set_property ("fraction",fr); - - if (time_signature_) - announce_grob (time_signature_, SCM_EOL); } } diff --git a/lily/translator-property.cc b/lily/translator-property.cc index cb0658bf84..2c433a0086 100644 --- a/lily/translator-property.cc +++ b/lily/translator-property.cc @@ -13,6 +13,7 @@ #include "warn.hh" #include "item.hh" #include "spanner.hh" +#include "engraver.hh" /* Grob descriptions (ie. alists with layout properties) are @@ -195,16 +196,27 @@ updated_grob_properties (Context * tg, SCM sym) } Item* -make_item_from_properties (Context * tg, SCM x) +make_item_from_properties (Translator *tr, SCM x, SCM cause) { + Context *tg = tr->context (); + SCM props = updated_grob_properties (tg, x); - return new Item (props); + Item *it= new Item (props); + + dynamic_cast(tr)->announce_grob (it, cause); + + return it; } Spanner* -make_spanner_from_properties (Context *tg, SCM x) +make_spanner_from_properties (Translator *tr, SCM x, SCM cause) { + Context *tg = tr->context (); + SCM props = updated_grob_properties (tg, x); - return new Spanner (props); -} + Spanner *it= new Spanner (props); + dynamic_cast(tr)->announce_grob (it, cause); + + return it; +} diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc index 6ec076d044..51a0fa56f8 100644 --- a/lily/tuplet-engraver.cc +++ b/lily/tuplet-engraver.cc @@ -70,7 +70,7 @@ Tuplet_engraver::process_acknowledged_grobs () if (i < started_spanners_.size () && started_spanners_[i]) continue; - Spanner* glep = make_spanner ("TupletBracket"); + Spanner* glep = make_spanner ("TupletBracket", time_scaled_musics_ [i]->self_scm ()); if (i >= started_spanners_.size ()) started_spanners_.push (glep); @@ -85,7 +85,6 @@ Tuplet_engraver::process_acknowledged_grobs () glep->set_property ("text", t); } - announce_grob (glep, time_scaled_musics_ [i]->self_scm ()); } } diff --git a/lily/vaticana-ligature-engraver.cc b/lily/vaticana-ligature-engraver.cc index e8197fc1fa..b6d6e5b6b8 100644 --- a/lily/vaticana-ligature-engraver.cc +++ b/lily/vaticana-ligature-engraver.cc @@ -48,7 +48,7 @@ Vaticana_ligature_engraver::Vaticana_ligature_engraver () Spanner * Vaticana_ligature_engraver::create_ligature_spanner () { - return make_spanner ("VaticanaLigature"); + return make_spanner ("VaticanaLigature", SCM_EOL); } bool diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc index b703745c4b..69fa04e42d 100644 --- a/lily/vertical-align-engraver.cc +++ b/lily/vertical-align-engraver.cc @@ -35,9 +35,9 @@ Vertical_align_engraver::process_music () { if (!valign_) { - valign_ =make_spanner ("VerticalAlignment"); + valign_ =make_spanner ("VerticalAlignment", SCM_EOL); valign_->set_bound (LEFT,unsmob_grob (get_property ("currentCommandColumn"))); - announce_grob (valign_ , SCM_EOL); + } } diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index fd313e4762..248d5740e9 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -165,9 +165,9 @@ Volta_engraver::process_music () { started_mom_ = now_mom () ; - volta_span_ = make_spanner ("VoltaBracket"); + volta_span_ = make_spanner ("VoltaBracket", SCM_EOL); - announce_grob (volta_span_, SCM_EOL); + volta_span_->set_property ("text", start_string_); } } diff --git a/scm/music-functions.scm b/scm/music-functions.scm index bdbe2d393d..62235b68ff 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -646,11 +646,11 @@ without context specification. Called from parser." (define-public (set-accidental-style style . rest) "Set accidental style to STYLE. Optionally takes a context argument, e.g. 'Staff or 'Voice. The context defaults to Voice, except for piano styles, which -use PianoStaff as a context. " +use GrandStaff as a context. " (let ((context (if (pair? rest) (car rest) 'Staff)) (pcontext (if (pair? rest) - (car rest) 'PianoStaff))) + (car rest) 'GrandStaff))) (ly:export (cond ;; accidentals as they were common in the 18th century. @@ -694,14 +694,14 @@ use PianoStaff as a context. " ((equal? style 'piano) (set-accidentals-properties #f '( Staff (same-octave . 0) (any-octave . 0) (same-octave . 1) - PianoStaff (any-octave . 0) (same-octave . 1)) + GrandStaff (any-octave . 0) (same-octave . 1)) '() pcontext)) ((equal? style 'piano-cautionary) (set-accidentals-properties #f '(Staff (same-octave . 0)) '(Staff (any-octave . 0) (same-octave . 1) - PianoStaff (any-octave . 0) (same-octave . 1)) + GrandStaff (any-octave . 0) (same-octave . 1)) pcontext)) ;; do not set localKeySignature when a note alterated differently from ;; localKeySignature is found.