From c1c43009d954769a1266b0f8d88dfb97904be253 Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 2 Jul 2000 18:56:57 +0000 Subject: [PATCH] lilypond-1.3.68 --- CHANGES | 24 ++++++- input/test/orchestscore.ly | 17 +++-- lily/crescendo.cc | 53 +++++++------- lily/dynamic-engraver.cc | 22 +++--- lily/hara-kiri-engraver.cc | 9 +-- lily/hara-kiri-group-spanner.cc | 46 +++++------- lily/include/bar.hh | 3 +- lily/include/crescendo.hh | 16 ++--- lily/include/hara-kiri-group-spanner.hh | 17 ++--- lily/include/multi-measure-rest.hh | 12 +--- lily/include/paper-column.hh | 4 +- lily/include/spanner.hh | 4 +- lily/include/stem-tremolo.hh | 14 ++-- lily/include/system-start-delimiter.hh | 2 +- lily/include/tie-column.hh | 8 +-- lily/include/tie.hh | 23 +++--- lily/include/tuplet-spanner.hh | 21 +++--- lily/include/volta-spanner.hh | 14 ++-- lily/local-key-engraver.cc | 21 +++--- lily/multi-measure-rest-engraver.cc | 8 +-- lily/multi-measure-rest.cc | 48 ++++++------- lily/repeat-engraver.cc | 66 +++++++++++++++-- lily/stem-engraver.cc | 12 ++-- lily/stem-tremolo.cc | 44 +++++------- lily/system-start-delimiter.cc | 21 ++++-- lily/tie-column.cc | 43 ++++++----- lily/tie-engraver.cc | 40 ++++++++--- lily/tie.cc | 124 ++++++++++++++------------------ lily/tuplet-engraver.cc | 9 +-- lily/tuplet-spanner.cc | 121 +++++++++++++++---------------- lily/volta-spanner.cc | 73 ++++++++----------- ly/engraver.ly | 22 ++++-- scripts/convert-mudela.py | 11 +++ scripts/ly2dvi.py | 6 +- 34 files changed, 513 insertions(+), 465 deletions(-) diff --git a/CHANGES b/CHANGES index f14c1d313c..31c3968012 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,25 @@ -1.3.66.hwn1 -=========== +1.3.68 +====== + +* ly2dvi: changed back to original semantics of latexheaders. + +* Stem_tremolo, Crescendo, Hara_kiri_group_spanner, Tuplet_spanner, +Volta_spanner changed into interface. + +* Related cleanups for Tie, Tie_column cleanups. + +* Made Time_signature, Single_malt_grouping_item, Script_column, +Chord_name, Dot_column, Breathing_sign, Key_item type into interface. + +* Removed const declaration from callback arguments. + +* Pagebreak support. See input/test/between-systems.ly + +* Fixed a problem with accidentals in combination with +non-nil key signatures. + +1.3.67 +====== * Use callbacks for augmentation dot positioning. diff --git a/input/test/orchestscore.ly b/input/test/orchestscore.ly index c9b7da5316..4f3fc240b2 100644 --- a/input/test/orchestscore.ly +++ b/input/test/orchestscore.ly @@ -5,6 +5,11 @@ m = \notes \relative c''{ c1 | c2 c | c c | c c | \break c c | c c | c c | c c | } +M = \notes \relative c''{ + +c1 | c2 c | c c | R1*5 +} + \score{ < \context StaffGroup = wood < \context Staff = flauto < @@ -37,14 +42,14 @@ c1 | c2 c | c c | c c | \break c c | c c | c c | c c | \context Staff = cor < \property Staff.instrument = "2 Corni in F" \property Staff.instr = "Cor." - \context Voice = corI { \stemup \m } - \context Voice = corII { \stemdown \m } + \context Voice = corI { \stemup \M } + \context Voice = corII { \stemdown \M } > \context Staff = trp < \property Staff.instrument = "2 Trp. in B\\textflat " \property Staff.instr = "Trp." - \context Voice = trpI { \stemup \m } - \context Voice = trpII { \stemdown \m } + \context Voice = trpI { \stemup \M } + \context Voice = trpII { \stemdown \M } > > \context StaffGroup = percussion <\context Staff = timpani < @@ -90,12 +95,10 @@ c1 | c2 c | c c | c c | \break c c | c c | c c | c c | \translator { \OrchestralScoreContext barNumberScriptPadding = 10; - minVerticalAlign = 2.2*\staffheight; - } \translator { \HaraKiriStaffContext - \consists "Instrument_name_engraver"; marginScriptPadding = 15.0; +% StaffMinimumVerticalExtent = #(cons -0.0 0.0) } } } diff --git a/lily/crescendo.cc b/lily/crescendo.cc index 7890d5cf00..8ba2b7ef9e 100644 --- a/lily/crescendo.cc +++ b/lily/crescendo.cc @@ -8,51 +8,48 @@ #include "molecule.hh" #include "crescendo.hh" +#include "spanner.hh" #include "lookup.hh" #include "dimensions.hh" #include "paper-def.hh" #include "debug.hh" #include "paper-column.hh" - -Crescendo::Crescendo (SCM s) - : Spanner (s) +void +Crescendo::set_interface (Score_element*s) { - set_elt_property ("dynamic-drul", gh_cons (SCM_BOOL_F, SCM_BOOL_F)); + s->set_elt_pointer ("dynamic-drul", gh_cons (SCM_UNDEFINED, SCM_UNDEFINED)); } - -GLUE_SCORE_ELEMENT(Crescendo,brew_molecule); - +MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Crescendo,brew_molecule); SCM -Crescendo::member_brew_molecule () const +Crescendo::brew_molecule (SCM smob) { - Real absdyn_dim = paper_l ()-> get_var ("crescendo_shorten"); - Real extra_left = get_broken_left_end_align (); + Score_element *me= unsmob_element (smob); + Spanner * sp = dynamic_cast(me); + Real absdyn_dim = me->paper_l ()-> get_var ("crescendo_shorten"); + Real extra_left = sp->get_broken_left_end_align (); - SCM dir = get_elt_property("grow-direction"); - SCM dyns = get_elt_property ("dynamic-drul"); + SCM dir = me->get_elt_property("grow-direction"); + SCM dyns = me->get_elt_property ("dynamic-drul"); if (!isdir_b (dir) || !gh_pair_p (dyns)) { - Crescendo * me = (Crescendo*)this; me->suicide (); return SCM_EOL; } Direction gd = to_dir (dir); - bool dynleft= to_boolean (gh_car (dyns)); - bool dynright = to_boolean (gh_cdr (dyns)); + bool dynleft= unsmob_element (gh_car (dyns)); + bool dynright = unsmob_element (gh_cdr (dyns)); if (dynleft) extra_left += absdyn_dim; - - - Real width = spanner_length()- get_broken_left_end_align (); + Real width = sp->spanner_length()- sp->get_broken_left_end_align (); if (dynleft) { @@ -73,7 +70,7 @@ Crescendo::member_brew_molecule () const Direction d = LEFT; do { - Paper_column* s = dynamic_cast(get_bound (d)); // UGH + Paper_column* s = dynamic_cast(sp->get_bound (d)); // UGH broken[d] = (!s->musical_b ()); } while (flip (&d) != LEFT); @@ -82,15 +79,15 @@ Crescendo::member_brew_molecule () const Molecule m; Real pad = 0; - SCM s = get_elt_property ("start-text"); + SCM s = me->get_elt_property ("start-text"); if (gh_string_p (s)) { - Molecule start_text (lookup_l ()->text ("italic", + Molecule start_text (me->lookup_l ()->text ("italic", ly_scm2string (s), - paper_l ())); + me->paper_l ())); m.add_molecule (start_text); - pad = paper_l ()->get_var ("interline") / 2; + pad = me->paper_l ()->get_var ("interline") / 2; width -= start_text.extent (X_AXIS).length (); width -= pad; @@ -98,12 +95,12 @@ Crescendo::member_brew_molecule () const } SCM at; - s = get_elt_property ("spanner"); + s =me->get_elt_property ("spanner"); Real height; if (gh_string_p (s) && ly_scm2string (s) == "dashed-line") { - Real thick = paper_l ()->get_var ("crescendo_dash_thickness"); - Real dash = paper_l ()->get_var ("crescendo_dash"); + Real thick = me->paper_l ()->get_var ("crescendo_dash_thickness"); + Real dash = me->paper_l ()->get_var ("crescendo_dash"); height = thick; at = gh_list (ly_symbol2scm (ly_scm2string (s).ch_C ()), gh_double2scm (thick), @@ -114,8 +111,8 @@ Crescendo::member_brew_molecule () const else { bool continued = broken[Direction (-gd)]; - height = paper_l()->get_var ("crescendo_height"); - Real thick = paper_l ()->get_var ("crescendo_thickness"); + height = me->paper_l()->get_var ("crescendo_height"); + Real thick = me->paper_l ()->get_var ("crescendo_thickness"); const char* hairpin = (gd < 0)? "decrescendo" : "crescendo"; diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 8224b1f6f6..1e329f4f73 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -7,22 +7,15 @@ */ #include "debug.hh" #include "dimensions.hh" -#include "dimension-cache.hh" #include "crescendo.hh" #include "musical-request.hh" -#include "lookup.hh" -#include "paper-def.hh" #include "paper-column.hh" -#include "staff-symbol.hh" #include "note-column.hh" #include "item.hh" #include "side-position-interface.hh" #include "engraver.hh" -#include "stem.hh" -#include "rhythmic-head.hh" #include "group-interface.hh" #include "directional-element-interface.hh" -#include "staff-symbol-referencer.hh" #include "translator-group.hh" #include "axis-group-interface.hh" @@ -40,8 +33,8 @@ class Dynamic_engraver : public Engraver { Item * text_p_; - Crescendo * finished_cresc_p_; - Crescendo * cresc_p_; + Spanner * finished_cresc_p_; + Spanner * cresc_p_; Text_script_req* text_req_l_; @@ -214,7 +207,8 @@ Dynamic_engraver::do_process_music () else { current_cresc_req_ = accepted_spanreqs_drul_[START]; - cresc_p_ = new Crescendo (get_property ("basicCrescendoProperties")); + cresc_p_ = new Spanner (get_property ("basicCrescendoProperties")); + Crescendo::set_interface (cresc_p_); cresc_p_->set_elt_property ("grow-direction", gh_int2scm ((accepted_spanreqs_drul_[START]->span_type_str_ == "crescendo") @@ -262,11 +256,11 @@ Dynamic_engraver::do_process_music () if (text_p_) { - index_set_cell (cresc_p_->get_elt_property ("dynamic-drul"), - LEFT, SCM_BOOL_T); + index_set_cell (cresc_p_->get_elt_pointer ("dynamic-drul"), + LEFT, text_p_->self_scm_); if (finished_cresc_p_) - index_set_cell (finished_cresc_p_->get_elt_property ("dynamic-drul"), - RIGHT, SCM_BOOL_T); + index_set_cell (finished_cresc_p_->get_elt_pointer ("dynamic-drul"), + RIGHT, text_p_->self_scm_); } Axis_group_interface (line_spanner_).add_element (cresc_p_); diff --git a/lily/hara-kiri-engraver.cc b/lily/hara-kiri-engraver.cc index 10eca4fe1d..1ef2d1ac3c 100644 --- a/lily/hara-kiri-engraver.cc +++ b/lily/hara-kiri-engraver.cc @@ -9,11 +9,14 @@ #include "hara-kiri-group-spanner.hh" #include "hara-kiri-engraver.hh" #include "rhythmic-head.hh" +#include "spanner.hh" Spanner* Hara_kiri_engraver::get_spanner_p () const { - return new Hara_kiri_group_spanner (get_property ("basicHaraKiriVerticalGroupspannerProperties")); + Spanner * sp = new Spanner (get_property ("basicHaraKiriVerticalGroupspannerProperties")); + Hara_kiri_group_spanner::set_interface (sp); + return sp; } void @@ -25,9 +28,7 @@ Hara_kiri_engraver::acknowledge_element (Score_element_info i) if (Rhythmic_head *h = dynamic_cast (i.elem_l_)) { - dynamic_cast (staffline_p_) - ->add_interesting_item (h); + Hara_kiri_group_spanner::add_interesting_item (staffline_p_, h); } - } ADD_THIS_TRANSLATOR(Hara_kiri_engraver); diff --git a/lily/hara-kiri-group-spanner.cc b/lily/hara-kiri-group-spanner.cc index 3161032716..125b686f37 100644 --- a/lily/hara-kiri-group-spanner.cc +++ b/lily/hara-kiri-group-spanner.cc @@ -8,49 +8,41 @@ */ #include "axis-group-interface.hh" +#include "spanner.hh" #include "hara-kiri-group-spanner.hh" #include "debug.hh" #include "item.hh" -/* - */ -Hara_kiri_group_spanner::Hara_kiri_group_spanner(SCM s) - : Spanner (s) +void +Hara_kiri_group_spanner::set_interface (Score_element*me) { - set_elt_pointer ("items-worth-living", SCM_EOL); + me->set_elt_pointer ("items-worth-living", SCM_EOL); } void -Hara_kiri_group_spanner::add_interesting_item (Item* n) +Hara_kiri_group_spanner::add_interesting_item (Score_element* me,Item* n) { - add_dependency (n); - Pointer_group_interface (this, "items-worth-living").add_element (n); + me->add_dependency (n); + Pointer_group_interface (me, "items-worth-living").add_element (n); } -GLUE_SCORE_ELEMENT(Hara_kiri_group_spanner,after_line_breaking); -SCM -Hara_kiri_group_spanner::member_after_line_breaking () +void +Hara_kiri_group_spanner::consider_suicide(Score_element*me) { - SCM worth = get_elt_pointer ("items-worth-living"); + SCM worth = me->get_elt_pointer ("items-worth-living"); if (gh_pair_p (worth)) - return SCM_UNDEFINED; + return ; - Link_array childs = Axis_group_interface (this).get_children (); + Link_array childs = Axis_group_interface (me).get_children (); for (int i = 0; i < childs.size (); i++) - { - Score_element* s = childs[i]; + childs[i]->suicide (); - if ( line_l () != s->line_l ()) - programming_error ("Killing other children too"); - s->suicide (); - } /* very appropriate name here :-) */ - suicide (); - return SCM_UNDEFINED; + me->suicide (); } @@ -60,18 +52,16 @@ Hara_kiri_group_spanner::member_after_line_breaking () group. Use a callback to make sure that hara-kiri has been done before asking for offsets. */ Real -Hara_kiri_group_spanner::force_hara_kiri_callback (Score_element const *elt, Axis a) +Hara_kiri_group_spanner::force_hara_kiri_callback (Score_element *elt, Axis a) { - while (elt && !dynamic_cast (elt)) + while (elt + && to_boolean (elt->get_elt_property ("hara-kiri-interface"))) elt = elt->parent_l(a); if (elt) { - Hara_kiri_group_spanner const * seppuku = dynamic_cast (elt); - - ((Hara_kiri_group_spanner*)seppuku)->member_after_line_breaking (); + Hara_kiri_group_spanner::consider_suicide (elt); } - return 0.0; } diff --git a/lily/include/bar.hh b/lily/include/bar.hh index 92c03f20d8..1e6bf095f8 100644 --- a/lily/include/bar.hh +++ b/lily/include/bar.hh @@ -11,7 +11,8 @@ /** A vertical bar. */ -class Bar:public Item { +class Bar:public Item +{ public: VIRTUAL_COPY_CONS(Score_element); Bar(SCM); diff --git a/lily/include/crescendo.hh b/lily/include/crescendo.hh index e45ef61ffd..36639f8586 100644 --- a/lily/include/crescendo.hh +++ b/lily/include/crescendo.hh @@ -10,23 +10,17 @@ #ifndef CRESCENDO_HH #define CRESCENDO_HH -#include "spanner.hh" +#include "lily-guile.hh" /** The hairpin symbol. (cresc) (normal spanner?) */ -class Crescendo : public Spanner { +struct Crescendo +{ public: - static SCM brew_molecule (SCM); - - Crescendo(SCM); - - VIRTUAL_COPY_CONS(Score_element); - SCM member_brew_molecule() const; - -private: - Molecule get_symbol() const; + static SCM brew_molecule (SCM); + static void set_interface(Score_element*); }; #endif // CRESCENDO_HH diff --git a/lily/include/hara-kiri-group-spanner.hh b/lily/include/hara-kiri-group-spanner.hh index 476a18a915..912a6f4ffc 100644 --- a/lily/include/hara-kiri-group-spanner.hh +++ b/lily/include/hara-kiri-group-spanner.hh @@ -10,7 +10,8 @@ #ifndef HARA_KIRI_VERTICAL_GROUP_SPANNER_HH #define HARA_KIRI_VERTICAL_GROUP_SPANNER_HH -#include "spanner.hh" +#include "lily-guile.hh" +#include "lily-proto.hh" /** As Vertical_group_spanner, but keep track of interesting items. If @@ -24,17 +25,13 @@ clear this line */ -class Hara_kiri_group_spanner : public Spanner +class Hara_kiri_group_spanner { public: - static Real force_hara_kiri_callback (Score_element const* , Axis); - Hara_kiri_group_spanner (SCM); - SCM member_after_line_breaking (); - static SCM after_line_breaking (SCM); - - void add_interesting_item (Item* n); - - VIRTUAL_COPY_CONS(Score_element); + static Real force_hara_kiri_callback (Score_element * , Axis); + static void set_interface (Score_element*me); + static void consider_suicide (Score_element*me); + static void add_interesting_item (Score_element * me , Item* n); }; diff --git a/lily/include/multi-measure-rest.hh b/lily/include/multi-measure-rest.hh index 6a9b31be68..f163bf4816 100644 --- a/lily/include/multi-measure-rest.hh +++ b/lily/include/multi-measure-rest.hh @@ -17,17 +17,11 @@ class Multi_measure_rest : public Spanner { public: Multi_measure_rest (SCM); - static SCM brew_molecule (SCM); - - void add_column (Item*); - Molecule compound_rest (int)const; - - SCM member_brew_molecule () const; + static void set_interface (Score_element*); + static SCM brew_molecule (SCM); + static void add_column (Score_element*,Item*); VIRTUAL_COPY_CONS (Score_element); - - SCM member_after_line_breaking (); - static SCM after_line_breaking (SCM); virtual Array get_rods () const; }; diff --git a/lily/include/paper-column.hh b/lily/include/paper-column.hh index 5ef166a3ba..fe5dc7c68b 100644 --- a/lily/include/paper-column.hh +++ b/lily/include/paper-column.hh @@ -49,7 +49,7 @@ public: void add_rod (Paper_column * to, Real distance); void add_spring (Paper_column * to, Real dist, Real strength); - virtual Paper_column * column_l () const; + virtual Paper_column *column_l () const; virtual Line_of_score *line_l () const; /// if lines are broken then this column is in #line# @@ -58,7 +58,7 @@ public: /// which one (left =0) int rank_i() const; - Paper_column (Moment when); + Paper_column (SCM); Moment when_mom ()const; bool musical_b () const; diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh index 3241e27908..4ce355dd4c 100644 --- a/lily/include/spanner.hh +++ b/lily/include/spanner.hh @@ -34,7 +34,7 @@ class Spanner : public Score_element { public: Link_array broken_into_l_arr_; - + Real get_broken_left_end_align () const; // TODO: make virtual and do this for Items as well. Interval_t spanned_rank_iv (); void set_bound (Direction d, Score_element*); @@ -54,7 +54,7 @@ public: protected: void set_my_columns (); VIRTUAL_COPY_CONS(Score_element); - Real get_broken_left_end_align () const; + virtual void do_space_processing (); virtual void do_break_processing (); diff --git a/lily/include/stem-tremolo.hh b/lily/include/stem-tremolo.hh index 2cd904a632..344d1f5568 100644 --- a/lily/include/stem-tremolo.hh +++ b/lily/include/stem-tremolo.hh @@ -10,18 +10,16 @@ #ifndef ABBREV_HH #define ABBREV_HH -#include "item.hh" +#include "lily-proto.hh" +#include "lily-guile.hh" - -class Stem_tremolo : public Item { +class Stem_tremolo +{ public: - Stem * stem_l () const; - SCM member_brew_molecule () const; - + static void set_interface (Score_element*); static Interval dim_callback (Score_element*, Axis); static SCM brew_molecule (SCM); - Stem_tremolo (SCM); - void set_stem (Stem *); + static void set_stem (Score_element*me, Score_element *st); }; #endif /* ABBREV_HH */ diff --git a/lily/include/system-start-delimiter.hh b/lily/include/system-start-delimiter.hh index 659b166514..b5c500c6f7 100644 --- a/lily/include/system-start-delimiter.hh +++ b/lily/include/system-start-delimiter.hh @@ -23,8 +23,8 @@ public: VIRTUAL_COPY_CONS (Score_element); - virtual SCM member_after_line_breaking (); static SCM after_line_breaking (SCM); + static void try_collapse (Score_element*); Molecule staff_bracket (Real) const; Molecule staff_brace (Real) const; diff --git a/lily/include/tie-column.hh b/lily/include/tie-column.hh index d4ff9f41e7..c8a7b8bca3 100644 --- a/lily/include/tie-column.hh +++ b/lily/include/tie-column.hh @@ -16,13 +16,13 @@ class Tie_column : public Spanner { public: - VIRTUAL_COPY_CONS (Score_element); - void add_tie (Tie*); Tie_column (SCM s); + VIRTUAL_COPY_CONS (Score_element); + static void set_interface (Score_element*me); + static void add_tie (Score_element*me,Tie*); - SCM member_after_line_breaking (); static SCM after_line_breaking (SCM); - void set_directions (); + static void set_directions (Score_element*me); }; #endif /* TIE_COLUMN_HH */ diff --git a/lily/include/tie.hh b/lily/include/tie.hh index 92a2b24719..347c0be237 100644 --- a/lily/include/tie.hh +++ b/lily/include/tie.hh @@ -20,29 +20,24 @@ class Tie : public Spanner { public: Tie (SCM); - void set_head (Direction, Item*head_l); + static void set_head (Score_element*,Direction, Item*head_l); + static void set_interface (Score_element*); VIRTUAL_COPY_CONS(Score_element); - - Rhythmic_head* head (Direction) const; - Real position_f () const; + static Rhythmic_head* head (Score_element*,Direction) ; + static Real position_f (Score_element*) ; static SCM brew_molecule (SCM); - Direction get_default_dir() const; - SCM member_brew_molecule () const; - Array get_encompass_offset_arr () const; - Bezier get_curve () const; + static Direction get_default_dir(Score_element*) ; + static SCM after_line_breaking (SCM); + /* JUNKME */ + Array get_encompass_offset_arr () const; + Bezier get_curve () const; Drul_array dy_f_drul_; Drul_array dx_f_drul_; - - virtual void do_add_processing (); - SCM member_after_line_breaking (); - static SCM after_line_breaking (SCM); - virtual Array get_rods () const; - Array get_controls () const; }; diff --git a/lily/include/tuplet-spanner.hh b/lily/include/tuplet-spanner.hh index 90496b424e..73370baea3 100644 --- a/lily/include/tuplet-spanner.hh +++ b/lily/include/tuplet-spanner.hh @@ -7,7 +7,7 @@ #ifndef Tuplet_spanner_HH #define Tuplet_spanner_HH -#include "spanner.hh" +#include "lily-guile.hh" /** supportable plet: triplets, eentweetjes, ottava, etc. @@ -16,26 +16,21 @@ todo: handle breaking elegantly. */ -class Tuplet_spanner : public Spanner +class Tuplet_spanner { public: - Tuplet_spanner (SCM); static SCM brew_molecule (SCM); - + static void set_interface (Score_element*); - void add_column (Note_column*); - void add_beam (Beam*); + static void add_column (Score_element*me,Item*); + static void add_beam (Score_element*me,Score_element*); - void calc_dy (Real *) const; - void calc_position_and_height (Real*,Real *dy)const; + static void calc_dy (Score_element*,Real *) ; + static void calc_position_and_height (Score_element*,Real*,Real *dy); - SCM member_after_line_breaking (); static SCM after_line_breaking (SCM); - SCM member_brew_molecule () const; - VIRTUAL_COPY_CONS(Score_element); - - Direction get_default_dir () const; + static Direction get_default_dir (Score_element*); }; #endif // Tuplet_spanner_HH diff --git a/lily/include/volta-spanner.hh b/lily/include/volta-spanner.hh index ba28f37e6a..c95961909b 100644 --- a/lily/include/volta-spanner.hh +++ b/lily/include/volta-spanner.hh @@ -12,20 +12,14 @@ /** Volta bracket with number */ -class Volta_spanner : public Spanner +class Volta_spanner { public: - Volta_spanner (SCM); + static void set_interface (Score_element*); static SCM brew_molecule (SCM); - void add_column (Note_column*); - void add_bar (Bar*); - - SCM member_brew_molecule () const; - VIRTUAL_COPY_CONS (Score_element); + static void add_column (Score_element*, Score_element*col); + static void add_bar (Score_element*me, Item*bar); - - SCM member_after_line_breaking (); - static SCM after_line_breaking (SCM); }; #endif // VOLTA_SPANNER_HH diff --git a/lily/local-key-engraver.cc b/lily/local-key-engraver.cc index 9fcde99872..96e4cec5df 100644 --- a/lily/local-key-engraver.cc +++ b/lily/local-key-engraver.cc @@ -65,10 +65,10 @@ Local_key_engraver::do_creation_processing () void Local_key_engraver::process_acknowledged () { - SCM localsig = get_property ("localKeySignature"); - if (!key_item_p_ && mel_l_arr_.size()) { + SCM localsig = get_property ("localKeySignature"); + SCM f = get_property ("forgetAccidentals"); bool forget = to_boolean (f); for (int i=0; i < mel_l_arr_.size(); i++) @@ -100,7 +100,7 @@ Local_key_engraver::process_acknowledged () key_item_p_ = new Local_key_item (get_property ("basicLocalKeyProperties")); Side_position_interface (key_item_p_).set_axis (X_AXIS); Side_position_interface (key_item_p_).set_direction (LEFT); - Staff_symbol_referencer_interface (key_item_p_).set_interface (); + Staff_symbol_referencer_interface::set_interface (key_item_p_); announce_element (Score_element_info (key_item_p_, 0)); } @@ -137,13 +137,13 @@ Local_key_engraver::process_acknowledged () #endif } } - } + daddy_trans_l_->set_property ("localKeySignature", localsig); + } /* - UGH ! */ if (key_item_p_ && grace_align_l_) @@ -192,12 +192,12 @@ Local_key_engraver::acknowledge_element (Score_element_info info) { grace_align_l_ = gai; } - Note_req * note_l = dynamic_cast (info.req_l_); - Rhythmic_head * note_head = dynamic_cast (info.elem_l_); - if (he_gr != selfgr) return; + Note_req * note_l = dynamic_cast (info.req_l_); + Rhythmic_head * note_head = dynamic_cast (info.elem_l_); + if (note_l && note_head) { mel_l_arr_.push (note_l); @@ -205,12 +205,12 @@ Local_key_engraver::acknowledge_element (Score_element_info info) } else if (Tie * tie_l = dynamic_cast (info.elem_l_)) { - tied_l_arr_.push (tie_l->head (RIGHT)); + tied_l_arr_.push (Tie::head (tie_l, RIGHT)); } } /* - ugh. deep_copy uses lots of space. + ugh. repeated deep_copy generates lots of garbage. */ void Local_key_engraver::do_process_music() @@ -227,6 +227,7 @@ Local_key_engraver::do_process_music() else if (last_keysig_ != sig) { daddy_trans_l_->set_property ("localKeySignature", ly_deep_copy (sig)); + last_keysig_ = sig; } } diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index 943092d400..762deb8825 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -57,9 +57,9 @@ Multi_measure_rest_engraver::acknowledge_element (Score_element_info i) if (Bar *c = dynamic_cast (i.elem_l_)) { if (mmrest_p_) - mmrest_p_->add_column (c); + Multi_measure_rest::add_column (mmrest_p_,c); if (lastrest_p_) - lastrest_p_->add_column (c); + Multi_measure_rest::add_column (mmrest_p_,c); } } @@ -110,8 +110,8 @@ Multi_measure_rest_engraver::do_process_music () if (busy_span_req_l_ && !mmrest_p_) { mmrest_p_ = new Multi_measure_rest (get_property ("basicMultiMeasureRestProperties")); - Staff_symbol_referencer_interface si (mmrest_p_); - si.set_interface (); + Multi_measure_rest::set_interface (mmrest_p_); + Staff_symbol_referencer_interface::set_interface (mmrest_p_); announce_element (Score_element_info (mmrest_p_, busy_span_req_l_)); start_measure_i_ diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc index 97d1401c17..72b5468993 100644 --- a/lily/multi-measure-rest.cc +++ b/lily/multi-measure-rest.cc @@ -19,32 +19,34 @@ #include "group-interface.hh" #include "stem.hh" #include "staff-symbol-referencer.hh" - -Multi_measure_rest::Multi_measure_rest (SCM s) - : Spanner (s) +void +Multi_measure_rest::set_interface (Score_element*me) { - set_elt_pointer ("columns", SCM_EOL); + me->set_elt_pointer ("columns", SCM_EOL); } +Multi_measure_rest::Multi_measure_rest (SCM s) + : Spanner(s) +{} /* [TODO] 17 * variable-sized multi-measure rest symbol: |====| ?? */ - -GLUE_SCORE_ELEMENT(Multi_measure_rest,brew_molecule); - +MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Multi_measure_rest,brew_molecule); SCM -Multi_measure_rest::member_brew_molecule () const +Multi_measure_rest::brew_molecule (SCM smob) { + Score_element *me = unsmob_element (smob); + Spanner * sp = dynamic_cast (me); Real staff_space - = Staff_symbol_referencer_interface (this).staff_space (); + = Staff_symbol_referencer_interface (me).staff_space (); Interval sp_iv; Direction d = LEFT; do { - Item * col = get_bound (d)->column_l (); + Item * col = sp->get_bound (d)->column_l (); Interval coldim = col->extent (X_AXIS) + col->relative_coordinate (0, X_AXIS); @@ -55,7 +57,7 @@ Multi_measure_rest::member_brew_molecule () const Molecule mol; Real x_off = 0.0; - Real rx = get_bound (LEFT)->relative_coordinate (0, X_AXIS); + Real rx = sp->get_bound (LEFT)->relative_coordinate (0, X_AXIS); /* we gotta stay clear of sp_iv, so move a bit to the right if needed. @@ -71,14 +73,14 @@ Multi_measure_rest::member_brew_molecule () const Molecule s; int measures = 1; - SCM m (get_elt_property ("measure-count")); + SCM m (me->get_elt_property ("measure-count")); if (gh_number_p (m)) { measures = gh_scm2int (m); } - if (measures <= paper_l() ->get_var ("multi_measure_rest_expand_limit")) + if (measures <= me->paper_l() ->get_var ("multi_measure_rest_expand_limit")) { /* Build a rest from smaller parts. Distances inbetween are @@ -105,9 +107,9 @@ Multi_measure_rest::member_brew_molecule () const } Real pad = s.empty_b () - ? 0.0 : paper_l ()->get_var ("multi_measure_rest_padding"); + ? 0.0 : me->paper_l ()->get_var ("multi_measure_rest_padding"); - Molecule r (lookup_l ()->afm_find ("rests-" + to_str (k))); + Molecule r (me->lookup_l ()->afm_find ("rests-" + to_str (k))); if (k == 0) r.translate_axis (staff_space, Y_AXIS); @@ -120,14 +122,14 @@ Multi_measure_rest::member_brew_molecule () const else { String idx = ("rests-") + to_str (-4); - s = lookup_l ()->afm_find (idx); + s = me->lookup_l ()->afm_find (idx); } mol.add_molecule (s); if (measures > 1) { - Molecule s (lookup_l ()->text ("number", to_str (measures), paper_l ())); + Molecule s (me->lookup_l ()->text ("number", to_str (measures), me->paper_l ())); s.align_to (X_AXIS, CENTER); s.translate_axis (3.0 * staff_space, Y_AXIS); mol.add_molecule (s); @@ -139,19 +141,13 @@ Multi_measure_rest::member_brew_molecule () const /* UGH. JUNKME elt prop "columns" isn't really needed. */ - - - - void -Multi_measure_rest::add_column (Item* c) +Multi_measure_rest::add_column (Score_element*me,Item* c) { - Pointer_group_interface gi (this, "columns"); + Pointer_group_interface gi (me, "columns"); gi.add_element (c); - add_bound_item (this, c); - - add_dependency (c); + add_bound_item (dynamic_cast (me),c); } diff --git a/lily/repeat-engraver.cc b/lily/repeat-engraver.cc index 72572c3891..6ed4bf9bb7 100644 --- a/lily/repeat-engraver.cc +++ b/lily/repeat-engraver.cc @@ -6,7 +6,8 @@ (c) 1998--2000 Jan Nieuwenhuizen */ -#include "repeat-engraver.hh" +#include "engraver.hh" +#include "cons.hh" #include "bar.hh" #include "bar-engraver.hh" #include "musical-request.hh" @@ -20,6 +21,56 @@ #include "note-column.hh" #include "paper-def.hh" #include "music-list.hh" +#include "side-position-interface.hh" + +struct Bar_create_event +{ + Moment when_; + bool bar_b_; + bool last_b_; + String type_; + Bar_create_event(); + Bar_create_event (Moment w, String s); + Bar_create_event (Moment w, int i, int j); +}; + +int compare (Bar_create_event const & c1, Bar_create_event const &c2) +{ + return (c1.when_ - c2.when_).sign(); +} + +/** + Generate repeat-bars |: :| for repeated-music + */ +class Repeat_engraver : public Engraver +{ +public: + VIRTUAL_COPY_CONS(Translator); + Repeat_engraver (); +protected: + virtual void acknowledge_element (Score_element_info i); + virtual void do_removal_processing (); + virtual bool do_try_music (Music *req_l); + virtual void do_process_music(); + virtual void do_pre_move_processing(); + virtual void do_post_move_processing (); + void queue_events (); + +private: + Repeated_music *repeated_music_l_; + bool done_this_one_b_; + + /* + Royal_brackla_create_queue is only two Whiskies away. :-) + */ + Cons *create_barmoments_queue_; + + Spanner * volta_span_p_; + Spanner* end_volta_span_p_; +}; + + + ADD_THIS_TRANSLATOR (Repeat_engraver); @@ -180,7 +231,8 @@ Repeat_engraver::do_process_music () else { assert (!volta_span_p_); - volta_span_p_ = new Volta_spanner (get_property ("basicVoltaSpannerProperties")); + volta_span_p_ = new Spanner (get_property ("basicVoltaSpannerProperties")); + Volta_spanner::set_interface (volta_span_p_); announce_element (Score_element_info (volta_span_p_,0)); volta_span_p_->set_elt_property ("text", ly_str02scm (t.ch_C())); @@ -212,16 +264,16 @@ Repeat_engraver::acknowledge_element (Score_element_info i) if (Note_column *c = dynamic_cast (i.elem_l_)) { if (volta_span_p_) - volta_span_p_->add_column (c); + Volta_spanner::add_column (volta_span_p_,c); if (end_volta_span_p_) - end_volta_span_p_->add_column (c); + Volta_spanner::add_column (end_volta_span_p_,c); } if (Bar *c = dynamic_cast (i.elem_l_)) { if (volta_span_p_) - volta_span_p_->add_bar (c); + Volta_spanner::add_bar (volta_span_p_,c); if (end_volta_span_p_) - end_volta_span_p_ ->add_bar(c); + Volta_spanner::add_bar(end_volta_span_p_ , c); } } @@ -257,6 +309,8 @@ Repeat_engraver::do_pre_move_processing () { if (end_volta_span_p_) { + Side_position_interface (end_volta_span_p_).add_staff_support (); + typeset_element (end_volta_span_p_ ); end_volta_span_p_ =0; } diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc index 0deb53ab44..08b598f1e2 100644 --- a/lily/stem-engraver.cc +++ b/lily/stem-engraver.cc @@ -35,7 +35,7 @@ protected: private: int default_tremolo_type_i_; Stem *stem_p_; - Stem_tremolo *tremolo_p_; + Score_element *tremolo_p_; Rhythmic_req *rhythmic_req_l_; Tremolo_req* tremolo_req_l_; }; @@ -77,8 +77,8 @@ Stem_engraver::acknowledge_element(Score_element_info i) if (!stem_p_) { stem_p_ = new Stem (get_property ("basicStemProperties")); - Staff_symbol_referencer_interface st(stem_p_); - st.set_interface (); + Staff_symbol_referencer_interface::set_interface(stem_p_); + stem_p_->set_elt_property ("duration-log", gh_int2scm (duration_log)); @@ -101,7 +101,9 @@ Stem_engraver::acknowledge_element(Score_element_info i) if (requested_type) { - tremolo_p_ = new Stem_tremolo (get_property ("basicStemTremoloProperties")); + tremolo_p_ = new Item (get_property ("basicStemTremoloProperties")); + Stem_tremolo::set_interface (tremolo_p_); + announce_element (Score_element_info (tremolo_p_, tremolo_req_l_)); /* The number of tremolo flags is the number of flags of @@ -133,7 +135,7 @@ Stem_engraver::do_pre_move_processing() { if (tremolo_p_) { - tremolo_p_->set_stem (stem_p_); + Stem_tremolo::set_stem (tremolo_p_, stem_p_); typeset_element (tremolo_p_); tremolo_p_ = 0; } diff --git a/lily/stem-tremolo.cc b/lily/stem-tremolo.cc index 0d26fcd52a..a2e174f69b 100644 --- a/lily/stem-tremolo.cc +++ b/lily/stem-tremolo.cc @@ -23,37 +23,28 @@ lengthen stem if necessary */ -Stem_tremolo::Stem_tremolo (SCM s) - : Item (s) +void +Stem_tremolo::set_interface (Score_element *me) { - set_elt_pointer ("stem", SCM_EOL); +me->set_elt_pointer ("stem", SCM_EOL); } -Stem * -Stem_tremolo::stem_l ()const -{ - SCM s = get_elt_pointer ("stem"); - - return dynamic_cast ( unsmob_element (s)); -} - Interval Stem_tremolo::dim_callback (Score_element * se, Axis ) { - Stem_tremolo * s = dynamic_cast (se); - Real space = Staff_symbol_referencer_interface (s->stem_l ()) - .staff_space (); + Real space = Staff_symbol_referencer_interface (se).staff_space (); return Interval (-space, space); } -GLUE_SCORE_ELEMENT(Stem_tremolo,brew_molecule); +MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Stem_tremolo,brew_molecule); SCM -Stem_tremolo::member_brew_molecule () const +Stem_tremolo::brew_molecule (SCM smob) { - Stem * stem = stem_l (); + Score_element *me= unsmob_element (smob); + Stem * stem = dynamic_cast (unsmob_element (me->get_elt_pointer ("stem"))); Beam * beam = stem->beam_l (); Real dydx; @@ -72,16 +63,16 @@ Stem_tremolo::member_brew_molecule () const dydx = 0.25; Real ss = Staff_symbol_referencer_interface (stem).staff_space (); - Real thick = gh_scm2double (get_elt_property ("beam-thickness")); - Real width = gh_scm2double (get_elt_property ("beam-width")); + Real thick = gh_scm2double (me->get_elt_property ("beam-thickness")); + Real width = gh_scm2double (me->get_elt_property ("beam-width")); width *= ss; thick *= ss; - Molecule a (lookup_l ()->beam (dydx, width, thick)); + Molecule a (me->lookup_l ()->beam (dydx, width, thick)); a.translate (Offset (-width/2, width / 2 * dydx)); int tremolo_flags; - SCM s = get_elt_property ("tremolo-flags"); + SCM s = me->get_elt_property ("tremolo-flags"); if (gh_number_p (s)) tremolo_flags = gh_scm2int (s); else @@ -89,7 +80,7 @@ Stem_tremolo::member_brew_molecule () const tremolo_flags = 1; int mult = beam ? beam->get_multiplicity () : 0; - Real interbeam_f = paper_l ()->interbeam_f (mult); + Real interbeam_f = me->paper_l ()->interbeam_f (mult); Molecule mol; for (int i = 0; i < tremolo_flags; i++) { @@ -103,7 +94,7 @@ Stem_tremolo::member_brew_molecule () const { // ugh, rather calc from Stem_tremolo_req int beams_i = stem->beam_count(RIGHT) >? stem->beam_count (LEFT); - mol.translate (Offset(stem->relative_coordinate (0, X_AXIS) - relative_coordinate (0, X_AXIS), + mol.translate (Offset(stem->relative_coordinate (0, X_AXIS) - me->relative_coordinate (0, X_AXIS), stem->stem_end_position () * ss / 2 - Directional_element_interface (beam).get () * beams_i * interbeam_f)); } @@ -125,7 +116,7 @@ Stem_tremolo::member_brew_molecule () const else whole_note_correction = 0; - mol.translate (Offset (stem->relative_coordinate (0, X_AXIS) - relative_coordinate (0, X_AXIS) + + mol.translate (Offset (stem->relative_coordinate (0, X_AXIS) - me->relative_coordinate (0, X_AXIS) + whole_note_correction, dy)); } @@ -134,9 +125,8 @@ Stem_tremolo::member_brew_molecule () const void -Stem_tremolo::set_stem (Stem *s) +Stem_tremolo::set_stem (Score_element*me,Score_element *s) { - set_elt_pointer ("stem", s->self_scm_); - add_dependency (s); + me->set_elt_pointer ("stem", s->self_scm_); } diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index 5be06b334e..051e0a844b 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -55,19 +55,28 @@ System_start_delimiter::simple_bar (Real h) const return lookup_l ()->filledbox (Box (Interval(0,w), Interval(-h/2, h/2))); } -GLUE_SCORE_ELEMENT(System_start_delimiter,after_line_breaking); +MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(System_start_delimiter,after_line_breaking); + SCM -System_start_delimiter::member_after_line_breaking () +System_start_delimiter::after_line_breaking (SCM smob) +{ + try_collapse (unsmob_element (smob)); + return SCM_UNDEFINED; +} + +void +System_start_delimiter::try_collapse (Score_element*me) { - SCM gl = get_elt_property ("glyph"); + SCM gl = me->get_elt_property ("glyph"); - if (scm_ilength (get_elt_pointer ("elements")) <= 1 && gl == ly_symbol2scm ("bar-line")) + if (scm_ilength (me->get_elt_pointer ("elements")) <= 1 && gl == ly_symbol2scm ("bar-line")) { - suicide (); + me->suicide (); } - return SCM_UNDEFINED; + } + MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(System_start_delimiter,brew_molecule); SCM diff --git a/lily/tie-column.cc b/lily/tie-column.cc index 63e3d2a465..5fccceba2c 100644 --- a/lily/tie-column.cc +++ b/lily/tie-column.cc @@ -16,23 +16,28 @@ Tie_column::Tie_column (SCM s) : Spanner (s) { - set_elt_pointer ("ties", SCM_EOL); - set_extent_callback (0, X_AXIS); - set_extent_callback (0, Y_AXIS); + +} +void +Tie_column::set_interface (Score_element*me) +{ + me-> set_elt_pointer ("ties", SCM_EOL); + me->set_extent_callback (0, X_AXIS); + me->set_extent_callback (0, Y_AXIS); } void -Tie_column::add_tie (Tie *s) +Tie_column::add_tie (Score_element*me,Tie *s) { - Pointer_group_interface g (this, "ties"); + Pointer_group_interface g (me, "ties"); if (!g.count ()) { - set_bound (LEFT, s->head (LEFT)); - set_bound (RIGHT, s->head (RIGHT)); + dynamic_cast (me)->set_bound (LEFT, Tie::head (s,LEFT)); + dynamic_cast (me)->set_bound (RIGHT, Tie::head (s,RIGHT)); } - Pointer_group_interface (this, "ties").add_element (s); - s->add_dependency (this); + Pointer_group_interface (me, "ties").add_element (s); + s->add_dependency (me); } @@ -40,7 +45,7 @@ int tie_compare (Tie* const & s1, Tie* const & s2) { - return sign (s1->position_f () - s2->position_f()); + return sign (Tie::position_f (s1) - Tie::position_f(s2)); } /* @@ -51,15 +56,15 @@ tie_compare (Tie* const & s1, direction of the rest is determined by their staff position. Ross forgets about the tie that is *on* the middle staff line. We - assume it goes UP. (TODO: make this settable) */ + assume it goes UP. (TODO: make me settable) */ void -Tie_column::set_directions () +Tie_column::set_directions (Score_element*me) { Link_array ties = - Pointer_group_interface__extract_elements (this, (Tie*)0, "ties"); + Pointer_group_interface__extract_elements (me, (Tie*)0, "ties"); - Direction d = Directional_element_interface (this).get (); + Direction d = Directional_element_interface (me).get (); if (d) { @@ -74,7 +79,7 @@ Tie_column::set_directions () if (ties.size () == 1) { Tie * t = ties[0]; - Directional_element_interface (t).set (t->get_default_dir ()); + Directional_element_interface (t).set (Tie::get_default_dir (t)); return; } @@ -89,7 +94,7 @@ Tie_column::set_directions () for (int i=ties.size(); i--; ) { Tie * t = ties[i]; - Real p = t->position_f (); + Real p = Tie::position_f (t); Direction d = (Direction) sign (p); if (!d) d = UP; @@ -98,10 +103,10 @@ Tie_column::set_directions () } -GLUE_SCORE_ELEMENT(Tie_column,after_line_breaking); +MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Tie_column,after_line_breaking); SCM -Tie_column::member_after_line_breaking () +Tie_column::after_line_breaking (SCM smob) { - set_directions (); + set_directions (unsmob_element (smob)); return SCM_UNDEFINED; } diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index 020779e482..59a05f4c50 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -59,7 +59,7 @@ protected: virtual bool do_try_music (Music*); virtual void do_process_music (); virtual void process_acknowledged (); - + void typeset_tie (Score_element*); public: VIRTUAL_COPY_CONS(Translator); Tie_engraver(); @@ -174,8 +174,8 @@ Tie_engraver::process_acknowledged () SCM pair = gh_list_ref (head_list, gh_int2scm (i/2)); Tie * p = new Tie (basic); - p->set_head (LEFT, dynamic_cast (unsmob_element (gh_car (pair)))); - p->set_head (RIGHT, dynamic_cast (unsmob_element (gh_cdr (pair)))); + Tie::set_head (p,LEFT, dynamic_cast (unsmob_element (gh_car (pair)))); + Tie::set_head (p,RIGHT, dynamic_cast (unsmob_element (gh_cdr (pair)))); tie_p_arr_.push (p); announce_element (Score_element_info (p, req_l_)); @@ -183,8 +183,10 @@ Tie_engraver::process_acknowledged () else for (SCM s = head_list; gh_pair_p (s); s = gh_cdr (s)) { Tie * p = new Tie (basic); - p->set_head (LEFT, dynamic_cast (unsmob_element (gh_caar (s)))); - p->set_head (RIGHT, dynamic_cast (unsmob_element (gh_cdar (s)))); + Tie::set_interface (p); + + Tie::set_head (p, LEFT, dynamic_cast (unsmob_element (gh_caar (s)))); + Tie::set_head (p, RIGHT, dynamic_cast (unsmob_element (gh_cdar (s)))); tie_p_arr_.push (p); announce_element (Score_element_info (p, req_l_)); @@ -197,8 +199,9 @@ Tie_engraver::process_acknowledged () else if (tie_p_arr_.size () > 1 && !tie_column_p_) { tie_column_p_ = new Tie_column (get_property ("basicTieColumnProperties")); + Tie_column::set_interface (tie_column_p_); for (int i = tie_p_arr_.size (); i--; ) - tie_column_p_->add_tie (tie_p_arr_ [i]); + Tie_column::add_tie (tie_column_p_,tie_p_arr_ [i]); announce_element (Score_element_info (tie_column_p_, 0)); } } @@ -216,17 +219,38 @@ Tie_engraver::do_pre_move_processing () for (int i=0; i< tie_p_arr_.size (); i++) { - typeset_element (tie_p_arr_[i]); + typeset_tie (tie_p_arr_[i]); } tie_p_arr_.clear (); if (tie_column_p_) { - typeset_element (tie_column_p_); + typeset_tie (tie_column_p_); tie_column_p_ =0; } } void +Tie_engraver::typeset_tie (Score_element *her) +{ + if (!(Tie::head (her,LEFT) && Tie::head (her,RIGHT))) + warning (_ ("lonely tie")); + + Direction d = LEFT; + Drul_array new_head_drul; + new_head_drul[LEFT] = Tie::head(her,LEFT); + new_head_drul[RIGHT] = Tie::head (her,RIGHT); + do { + if (!Tie::head (her,d)) + new_head_drul[d] = Tie::head(her,(Direction)-d); + } while (flip(&d) != LEFT); + + index_set_cell (her->get_elt_pointer ("heads"), LEFT, new_head_drul[LEFT]->self_scm_ ); + index_set_cell (her->get_elt_pointer ("heads"), RIGHT, new_head_drul[RIGHT]->self_scm_ ); + + typeset_element (her); +} + +void Tie_engraver::do_post_move_processing () { SCM m = get_property ("automaticMelismata"); diff --git a/lily/tie.cc b/lily/tie.cc index e777a74fba..7a2a81ef87 100644 --- a/lily/tie.cc +++ b/lily/tie.cc @@ -21,39 +21,42 @@ #include "stem.hh" void -Tie::set_head (Direction d, Item * head_l) +Tie::set_head (Score_element*me,Direction d, Item * head_l) { - assert (!head (d)); - index_set_cell (get_elt_pointer ("heads"), d, head_l->self_scm_); + assert (!head (me,d)); + index_set_cell (me->get_elt_pointer ("heads"), d, head_l->self_scm_); - set_bound (d, head_l); - add_dependency (head_l); + dynamic_cast (me)->set_bound (d, head_l); + me->add_dependency (head_l); } Tie::Tie(SCM s) : Spanner (s) { - set_elt_pointer ("heads", gh_cons (SCM_EOL, SCM_EOL)); dy_f_drul_[LEFT] = dy_f_drul_[RIGHT] = 0.0; dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0; - +} +void +Tie::set_interface (Score_element*me) +{ + me->set_elt_pointer ("heads", gh_cons (SCM_EOL, SCM_EOL)); } Rhythmic_head* -Tie::head (Direction d) const +Tie::head (Score_element*me, Direction d) { - SCM c = get_elt_pointer ("heads"); + SCM c = me->get_elt_pointer ("heads"); c = index_cell (c, d); return dynamic_cast (unsmob_element (c)); } Real -Tie::position_f () const +Tie::position_f (Score_element*me) { - return head (LEFT) - ? Staff_symbol_referencer_interface (head (LEFT)).position_f () - : Staff_symbol_referencer_interface (head (RIGHT)).position_f () ; + return head (me,LEFT) + ? Staff_symbol_referencer_interface (head (me,LEFT)).position_f () + : Staff_symbol_referencer_interface (head (me,RIGHT)).position_f () ; } @@ -61,10 +64,10 @@ Tie::position_f () const ugh: direction of the Tie is more complicated. See [Ross] p136 and further */ Direction -Tie::get_default_dir () const +Tie::get_default_dir (Score_element*me) { - Stem * sl = head(LEFT) ? head (LEFT)->stem_l () :0; - Stem * sr = head(RIGHT) ? head (RIGHT)->stem_l () :0; + Stem * sl = head(me,LEFT) ? head (me,LEFT)->stem_l () :0; + Stem * sr = head(me,RIGHT) ? head (me,RIGHT)->stem_l () :0; if (sl && Directional_element_interface (sl).get () == UP && sr && Directional_element_interface (sr).get () == UP) @@ -73,47 +76,28 @@ Tie::get_default_dir () const return UP; } -/* - fixme must use spanned drul from heads elt property - */ -void -Tie::do_add_processing() -{ - if (!(head (LEFT) && head (RIGHT))) - warning (_ ("lonely tie")); - - Direction d = LEFT; - Drul_array new_head_drul; - new_head_drul[LEFT] = head(LEFT); - new_head_drul[RIGHT] = head(RIGHT); - do { - if (!head (d)) - new_head_drul[d] = head((Direction)-d); - } while (flip(&d) != LEFT); - - index_set_cell (get_elt_pointer ("heads"), LEFT, new_head_drul[LEFT]->self_scm_ ); - index_set_cell (get_elt_pointer ("heads"), RIGHT, new_head_drul[RIGHT]->self_scm_ ); -} -GLUE_SCORE_ELEMENT(Tie,after_line_breaking); +MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Tie,after_line_breaking); SCM -Tie::member_after_line_breaking () +Tie::after_line_breaking (SCM smob) { - if (!head (LEFT) && !head (RIGHT)) + Tie*me = dynamic_cast (unsmob_element (smob)); + + if (!head (me,LEFT) && !head (me,RIGHT)) { programming_error ("Tie without heads."); - suicide (); + me->suicide (); return SCM_UNDEFINED; } - if (!Directional_element_interface (this).get ()) - Directional_element_interface (this).set (get_default_dir ()); + if (!Directional_element_interface (me).get ()) + Directional_element_interface (me).set (Tie::get_default_dir (me)); - Real staff_space = Staff_symbol_referencer_interface (this).staff_space (); + Real staff_space = Staff_symbol_referencer_interface (me).staff_space (); Real half_space = staff_space / 2; - Real x_gap_f = paper_l ()->get_var ("tie_x_gap"); - Real y_gap_f = paper_l ()->get_var ("tie_y_gap"); + Real x_gap_f = me->paper_l ()->get_var ("tie_x_gap"); + Real y_gap_f = me->paper_l ()->get_var ("tie_y_gap"); /* Slur and tie placement [OSU] @@ -126,18 +110,18 @@ Tie::member_after_line_breaking () /* - OSU: not different for outer notes, so why all this code? - ie, can we drop this, or should it be made switchable. + OSU: not different for outer notes, so why all me code? + ie, can we drop me, or should it be made switchable. */ - if (head (LEFT)) - dx_f_drul_[LEFT] = head (LEFT)->extent (X_AXIS).length (); + if (head (me,LEFT)) + me->dx_f_drul_[LEFT] = Tie::head (me,LEFT)->extent (X_AXIS).length (); else - dx_f_drul_[LEFT] = get_broken_left_end_align (); - dx_f_drul_[LEFT] += x_gap_f; - dx_f_drul_[RIGHT] -= x_gap_f; + me->dx_f_drul_[LEFT] = dynamic_cast(me)->get_broken_left_end_align (); + me->dx_f_drul_[LEFT] += x_gap_f; + me->dx_f_drul_[RIGHT] -= x_gap_f; /* - Slur and tie placement [OSU] -- check this + Slur and tie placement [OSU] -- check me Ties: @@ -152,14 +136,14 @@ Tie::member_after_line_breaking () */ - Real ypos = position_f (); + Real ypos = Tie::position_f (me); Real y_f = half_space * ypos; int ypos_i = int (ypos); - Real dx_f = extent (X_AXIS).length () + dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]; - Direction dir = Directional_element_interface (this).get(); - if (dx_f < paper_l ()->get_var ("tie_staffspace_length")) + Real dx_f = me->extent (X_AXIS).length () + me->dx_f_drul_[RIGHT] - me->dx_f_drul_[LEFT]; + Direction dir = Directional_element_interface (me).get(); + if (dx_f < me->paper_l ()->get_var ("tie_staffspace_length")) { if (abs (ypos_i) % 2) y_f += dir * half_space; @@ -173,7 +157,7 @@ Tie::member_after_line_breaking () y_f -= dir * y_gap_f; } - dy_f_drul_[LEFT] = dy_f_drul_[RIGHT] = y_f; + me->dy_f_drul_[LEFT] = me->dy_f_drul_[RIGHT] = y_f; return SCM_UNDEFINED; } @@ -194,20 +178,21 @@ Tie::get_rods () const return a; } -GLUE_SCORE_ELEMENT(Tie,brew_molecule); +MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Tie,brew_molecule); SCM -Tie::member_brew_molecule () const +Tie::brew_molecule (SCM smob) { - Real thick = paper_l ()->get_var ("tie_thickness"); - Bezier one = get_curve (); + Score_element*me = unsmob_element (smob); + Real thick = me->paper_l ()->get_var ("tie_thickness"); + Bezier one = dynamic_cast (me)->get_curve (); Molecule a; - SCM d = get_elt_property ("dashed"); + SCM d = me->get_elt_property ("dashed"); if (gh_number_p (d)) - a = lookup_l ()->dashed_slur (one, thick, gh_scm2int (d)); + a = me->lookup_l ()->dashed_slur (one, thick, gh_scm2int (d)); else - a = lookup_l ()->slur (one, Directional_element_interface (this).get () * thick, thick); + a = me->lookup_l ()->slur (one, Directional_element_interface (me).get () * thick, thick); return a.create_scheme(); } @@ -217,17 +202,18 @@ Tie::member_brew_molecule () const Bezier Tie::get_curve () const { - Direction d (Directional_element_interface (this).get ()); + Score_element*me = (Score_element*)this; + Direction d (Directional_element_interface (me).get ()); Bezier_bow b (get_encompass_offset_arr (), d); - Real staff_space = Staff_symbol_referencer_interface (this).staff_space (); + Real staff_space = Staff_symbol_referencer_interface (me).staff_space (); Real h_inf = paper_l ()->get_var ("tie_height_limit_factor") * staff_space; Real r_0 = paper_l ()->get_var ("tie_ratio"); b.set_default_bezier (h_inf, r_0); Bezier c = b.get_bezier (); - /* should do this for slurs as well. */ + /* should do me for slurs as well. */ Array horizontal (c.solve_derivative (Offset (1,0))); if (horizontal.size ()) diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc index 355cb64c09..071e55e03b 100644 --- a/lily/tuplet-engraver.cc +++ b/lily/tuplet-engraver.cc @@ -29,7 +29,7 @@ protected: Array span_stop_moments_; /// The spanners. Array order is synced with time_scaled_music_arr_ - Link_array started_span_p_arr_; + Link_array started_span_p_arr_; virtual void do_removal_processing (); virtual void acknowledge_element (Score_element_info); @@ -73,7 +73,8 @@ Tuplet_engraver::do_process_music () if (i < started_span_p_arr_.size () && started_span_p_arr_[i]) continue; - Tuplet_spanner* glep = new Tuplet_spanner (get_property ("basicTupletSpannerProperties")); + Spanner* glep = new Spanner (get_property ("basicTupletSpannerProperties")); + Tuplet_spanner::set_interface (glep); if (i >= started_span_p_arr_.size ()) started_span_p_arr_.push (glep); else @@ -99,13 +100,13 @@ Tuplet_engraver::acknowledge_element (Score_element_info i) { for (int j =0; j add_column (nc); + Tuplet_spanner::add_column (started_span_p_arr_[j],nc); } else if (Beam *b = dynamic_cast (i.elem_l_)) { for (int j = 0; j < started_span_p_arr_.size (); j++) if (started_span_p_arr_[j]) - started_span_p_arr_[j]->add_beam (b); + Tuplet_spanner::add_beam (started_span_p_arr_[j],b); } } diff --git a/lily/tuplet-spanner.cc b/lily/tuplet-spanner.cc index 3acb6c68f3..00760818d7 100644 --- a/lily/tuplet-spanner.cc +++ b/lily/tuplet-spanner.cc @@ -22,32 +22,32 @@ #include "directional-element-interface.hh" -Tuplet_spanner::Tuplet_spanner (SCM s) - : Spanner (s) -{ - set_elt_pointer ("beams", SCM_EOL); - set_elt_pointer ("columns", SCM_EOL); - // ugh. - set_elt_property ("delta-y", gh_int2scm (0)); +void +Tuplet_spanner::set_interface (Score_element*me) +{ + me-> set_elt_pointer ("beams", SCM_EOL); + me->set_elt_pointer ("columns", SCM_EOL); } /* TODO. */ -GLUE_SCORE_ELEMENT(Tuplet_spanner,brew_molecule); +MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Tuplet_spanner,brew_molecule); + SCM -Tuplet_spanner::member_brew_molecule () const +Tuplet_spanner::brew_molecule (SCM smob) { + Score_element *me= unsmob_element (smob); Molecule mol; // Default behaviour: number always, bracket when no beam! - bool par_beam = to_boolean (get_elt_property ("parallel-beam")); + bool par_beam = to_boolean (me->get_elt_property ("parallel-beam")); bool bracket_visibility = !par_beam; bool number_visibility = true; - SCM bracket = get_elt_property ("tuplet-bracket-visibility"); + SCM bracket = me->get_elt_property ("tuplet-bracket-visibility"); if (gh_boolean_p (bracket)) { bracket_visibility = gh_scm2bool (bracket); @@ -55,7 +55,7 @@ Tuplet_spanner::member_brew_molecule () const else if (bracket == ly_symbol2scm ("if-no-beam")) bracket_visibility = !par_beam; - SCM numb = get_elt_property ("tuplet-number-visibility"); + SCM numb = me->get_elt_property ("tuplet-number-visibility"); if (gh_boolean_p (numb)) { number_visibility = gh_scm2bool (numb); @@ -63,24 +63,23 @@ Tuplet_spanner::member_brew_molecule () const else if (bracket == ly_symbol2scm ("if-no-beam")) number_visibility = !par_beam; - if (gh_pair_p (get_elt_pointer ("columns"))) + if (gh_pair_p (me->get_elt_pointer ("columns"))) { Link_array column_arr= - Pointer_group_interface__extract_elements (this, (Note_column*)0, "columns"); + Pointer_group_interface__extract_elements (me, (Note_column*)0, "columns"); Real ncw = column_arr.top ()->extent(X_AXIS).length (); - Real w = spanner_length () + ncw; + Real w = dynamic_cast(me)->spanner_length () + ncw; - - Real staff_space = paper_l ()->get_var ("interline"); - Direction dir = Directional_element_interface (this).get (); - Real dy = gh_scm2double (get_elt_property ("delta-y")); - SCM number = get_elt_property ("text"); + Real staff_space = me->paper_l ()->get_var ("interline"); + Direction dir = Directional_element_interface (me).get (); + Real dy = gh_scm2double (me->get_elt_property ("delta-y")); + SCM number = me->get_elt_property ("text"); if (gh_string_p (number) && number_visibility) { Molecule - num (lookup_l ()->text ("italic", - ly_scm2string (number), paper_l ())); + num (me->lookup_l ()->text ("italic", + ly_scm2string (number), me->paper_l ())); num.align_to (X_AXIS, CENTER); num.translate_axis (w/2, X_AXIS); num.align_to (Y_AXIS, CENTER); @@ -93,11 +92,11 @@ Tuplet_spanner::member_brew_molecule () const if (bracket_visibility) { - SCM ss = paper_l ()->get_scmvar ("staffspace"); - SCM lt = paper_l ()->get_scmvar ("stafflinethickness"); + SCM ss = me->paper_l ()->get_scmvar ("staffspace"); + SCM lt = me->paper_l ()->get_scmvar ("stafflinethickness"); - SCM thick = get_elt_property ("thick"); - SCM gap = get_elt_property ("number-gap"); + SCM thick = me->get_elt_property ("thick"); + SCM gap = me->get_elt_property ("number-gap"); SCM at =gh_list(ly_symbol2scm ("tuplet"), ss, @@ -122,15 +121,15 @@ Tuplet_spanner::member_brew_molecule () const use first -> last note for slope, and then correct for disturbing notes in between. */ void -Tuplet_spanner::calc_position_and_height (Real *offset, Real * dy) const +Tuplet_spanner::calc_position_and_height (Score_element*me,Real *offset, Real * dy) { Link_array column_arr= - Pointer_group_interface__extract_elements (this, (Note_column*)0, "columns"); + Pointer_group_interface__extract_elements (me, (Note_column*)0, "columns"); - Score_element * common = common_refpoint (get_elt_pointer ("columns"), Y_AXIS); + Score_element * common = me->common_refpoint (me->get_elt_pointer ("columns"), Y_AXIS); - Direction d = Directional_element_interface (this).get (); + Direction d = Directional_element_interface (me).get (); /* Use outer non-rest columns to determine slope @@ -179,64 +178,67 @@ Tuplet_spanner::calc_position_and_height (Real *offset, Real * dy) const use first -> last note for slope, */ void -Tuplet_spanner::calc_dy (Real * dy) const +Tuplet_spanner::calc_dy (Score_element*me,Real * dy) { Link_array column_arr= - Pointer_group_interface__extract_elements (this, (Note_column*)0, "columns"); + Pointer_group_interface__extract_elements (me, (Note_column*)0, "columns"); - Direction d = Directional_element_interface (this).get (); + Direction d = Directional_element_interface (me).get (); *dy = column_arr.top ()->extent (Y_AXIS) [d] - column_arr[0]->extent (Y_AXIS) [d]; } +MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Tuplet_spanner,after_line_breaking); -GLUE_SCORE_ELEMENT(Tuplet_spanner,after_line_breaking); SCM -Tuplet_spanner::member_after_line_breaking () +Tuplet_spanner::after_line_breaking (SCM smob) { + Score_element * me = unsmob_element (smob); Link_array column_arr= - Pointer_group_interface__extract_elements (this, (Note_column*)0, "columns"); + Pointer_group_interface__extract_elements (me, (Note_column*)0, "columns"); + Spanner *sp = dynamic_cast (me); + if (!column_arr.size ()) { - suicide (); + me->suicide (); return SCM_UNDEFINED; } - Direction d = Directional_element_interface (this).get (); + Direction d = Directional_element_interface (me).get (); if (!d) { - d = get_default_dir (); - Directional_element_interface (this).set (d); + d = Tuplet_spanner::get_default_dir (me); + Directional_element_interface (me).set (d); } Real dy, offset; - calc_position_and_height (&offset,&dy); + calc_position_and_height (me,&offset,&dy); - set_elt_property ("delta-y", gh_double2scm (dy)); + me->set_elt_property ("delta-y", gh_double2scm (dy)); - translate_axis (offset, Y_AXIS); + me->translate_axis (offset, Y_AXIS); - if (scm_ilength (get_elt_pointer ("beams")) == 1) + if (scm_ilength (me->get_elt_pointer ("beams")) == 1) { - SCM bs = get_elt_pointer ("beams"); + SCM bs = me->get_elt_pointer ("beams"); Score_element *b = unsmob_element (gh_car (bs)); Beam * beam_l = dynamic_cast (b); - if (!broken_b () - && get_bound (LEFT)->column_l () == beam_l->get_bound (LEFT)->column_l () - && get_bound (RIGHT)->column_l () == beam_l->get_bound (RIGHT)->column_l ()) - set_elt_property ("parallel-beam", SCM_BOOL_T); + if (!sp->broken_b () + && sp->get_bound (LEFT)->column_l () == beam_l->get_bound (LEFT)->column_l () + && sp->get_bound (RIGHT)->column_l () == beam_l->get_bound (RIGHT)->column_l ()) + me->set_elt_property ("parallel-beam", SCM_BOOL_T); } return SCM_UNDEFINED; } Direction -Tuplet_spanner::get_default_dir () const +Tuplet_spanner::get_default_dir (Score_element*me) { Direction d = UP; - SCM dir_sym =get_elt_property ("dir-forced"); + SCM dir_sym =me->get_elt_property ("dir-forced"); if (isdir_b (dir_sym)) { d= to_dir (dir_sym); @@ -245,7 +247,7 @@ Tuplet_spanner::get_default_dir () const } d = UP ; - for (SCM s = get_elt_pointer ("columns"); gh_pair_p (s); s = gh_cdr (s)) + for (SCM s = me->get_elt_pointer ("columns"); gh_pair_p (s); s = gh_cdr (s)) { Score_element * sc = unsmob_element (gh_car (s)); Note_column * nc = dynamic_cast (sc); @@ -260,22 +262,21 @@ Tuplet_spanner::get_default_dir () const } void -Tuplet_spanner::add_beam (Beam *b) +Tuplet_spanner::add_beam (Score_element*me, Score_element *b) { - add_dependency (b); - Pointer_group_interface gi (this, "beams"); +me->add_dependency (b); + Pointer_group_interface gi (me, "beams"); gi.add_element (b); } void -Tuplet_spanner::add_column (Note_column*n) +Tuplet_spanner::add_column (Score_element*me, Item*n) { - Pointer_group_interface gi (this, "columns"); + Pointer_group_interface gi (me, "columns"); gi.add_element (n); + me->add_dependency (n); - add_dependency (n); - - add_bound_item (this, n); + add_bound_item (dynamic_cast (me), n); } diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc index 6e99afdb84..fa986542eb 100644 --- a/lily/volta-spanner.cc +++ b/lily/volta-spanner.cc @@ -11,28 +11,26 @@ #include "debug.hh" #include "lookup.hh" #include "molecule.hh" -#include "note-column.hh" #include "paper-column.hh" #include "bar.hh" #include "paper-def.hh" #include "volta-spanner.hh" -#include "stem.hh" -#include "dimension-cache.hh" #include "group-interface.hh" #include "side-position-interface.hh" #include "directional-element-interface.hh" -Volta_spanner::Volta_spanner (SCM s) - : Spanner (s) + +void +Volta_spanner::set_interface (Score_element*me) { - set_elt_pointer ("bars", SCM_EOL); - Side_position_interface (this).set_axis (Y_AXIS); - Directional_element_interface (this).set (UP); + me->set_elt_pointer ("bars", SCM_EOL); + Side_position_interface (me).set_axis (Y_AXIS); + Directional_element_interface (me).set (UP); } /* - this is too complicated. Yet another version of side-positioning, + me is too complicated. Yet another version of side-positioning, badly implemented. -- @@ -42,37 +40,37 @@ Volta_spanner::Volta_spanner (SCM s) */ -GLUE_SCORE_ELEMENT(Volta_spanner,brew_molecule); +MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Volta_spanner,brew_molecule); SCM -Volta_spanner::member_brew_molecule () const +Volta_spanner::brew_molecule (SCM smob) { - + Score_element *me = unsmob_element (smob); Link_array bar_arr - = Pointer_group_interface__extract_elements (this, (Bar*)0, "bars"); + = Pointer_group_interface__extract_elements (me, (Bar*)0, "bars"); if (!bar_arr.size ()) return SCM_EOL; bool no_vertical_start = false; - bool no_vertical_end = to_boolean (get_elt_property ("last-volta")); - Spanner *orig_span = dynamic_cast (original_l_); - if (orig_span && (orig_span->broken_into_l_arr_[0] != (Spanner*)this)) + bool no_vertical_end = to_boolean (me->get_elt_property ("last-volta")); + Spanner *orig_span = dynamic_cast (me->original_l_); + if (orig_span && (orig_span->broken_into_l_arr_[0] != (Spanner*)me)) no_vertical_start = true; - if (orig_span && (orig_span->broken_into_l_arr_.top () != (Spanner*)this)) + if (orig_span && (orig_span->broken_into_l_arr_.top () != (Spanner*)me)) no_vertical_end = true; #if 0 // FIXME - if (bar_arr.top ()->get_elt_property (type_str_.length_i () > 1) + if (bar_arr.top ()->me->get_elt_property (type_str_.length_i () > 1) no_vertical_end = false; #endif - Real staff_space = paper_l ()->get_var ("interline"); + Real staff_space = me->paper_l ()->get_var ("interline"); Real half_space = staff_space / 2; - Real left = get_broken_left_end_align (); - Real w = spanner_length () - left - half_space; - Real h = paper_l()->get_var ("volta_spanner_height"); - Real t = paper_l ()->get_var ("volta_thick"); + Real left = dynamic_cast(me)->get_broken_left_end_align (); + Real w = dynamic_cast(me)->spanner_length () - left - half_space; + Real h = me->paper_l()->get_var ("volta_spanner_height"); + Real t = me->paper_l ()->get_var ("volta_thick"); SCM at = (gh_list (ly_symbol2scm ("volta"), gh_double2scm (h), @@ -84,9 +82,9 @@ Volta_spanner::member_brew_molecule () const Box b (Interval (0, w), Interval (0, h)); Molecule mol (b, at); - Molecule num (lookup_l ()->text ("volta", - ly_scm2string (get_elt_property("text")), - paper_l ())); + Molecule num (me->lookup_l ()->text ("volta", + ly_scm2string (me->get_elt_property("text")), + me->paper_l ())); mol.add_at_edge (X_AXIS, LEFT, num, - num.extent (X_AXIS).length () - staff_space); @@ -95,29 +93,18 @@ Volta_spanner::member_brew_molecule () const } -GLUE_SCORE_ELEMENT(Volta_spanner,after_line_breaking); -SCM -Volta_spanner::member_after_line_breaking () -{ - Side_position_interface (this).add_staff_support (); - return SCM_UNDEFINED; -} - void -Volta_spanner::add_bar (Bar* b) +Volta_spanner::add_bar (Score_element *me, Item* b) { - Pointer_group_interface gi(this, "bars"); + Pointer_group_interface gi(me, "bars"); gi.add_element (b); - Side_position_interface (this).add_support (b); - add_dependency (b); - - add_bound_item (this, b); + Side_position_interface (me).add_support (b); + add_bound_item (dynamic_cast(me), b); } void -Volta_spanner::add_column (Note_column* c) +Volta_spanner::add_column (Score_element*me, Score_element* c) { - Side_position_interface (this).add_support (c); - add_dependency (c); + Side_position_interface (me).add_support (c); } diff --git a/ly/engraver.ly b/ly/engraver.ly index cb548ddced..adac158aac 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -414,6 +414,7 @@ ScoreContext = \translator { (thin-kern . 3.0) (hair-thickness . 1.6) (thick-thickness . 6.0) + (bar-interface . #t) ) basicBarNumberProperties = #`( @@ -437,11 +438,9 @@ ScoreContext = \translator { basicBreathingSignProperties = #`( (break-align-symbol . Breathing_sign) - (after-line-breaking-callback . ,Breathing_sign::after_line_breaking) (breakable . #t ) (molecule-callback . ,Breathing_sign::brew_molecule) (visibility-lambda . ,begin-of-line-invisible) - ) basicClefItemProperties = #`( (molecule-callback . ,Score_element::brew_molecule) @@ -488,7 +487,8 @@ ScoreContext = \translator { (before-line-breaking-callback . ,Grace_align_item::before_line_breaking) ) basicHaraKiriVerticalGroupspannerProperties = #`( - (after-line-breaking-callback . ,Hara_kiri_group_spanner::after_line_breaking) + (hara-kiri-interface . #t) + (axes 1) ) basicHyphenSpannerProperties = #`( (thickness . 1.0) @@ -498,6 +498,7 @@ ScoreContext = \translator { ) basicKeyProperties = #`( (molecule-callback . ,Key_item::brew_molecule) + (key-item-interface . #t) (break-align-symbol . Key_item) (visibility-lambda . ,begin-of-line-visible) (breakable . #t) @@ -506,6 +507,7 @@ ScoreContext = \translator { (molecule-callback . ,Local_key_item::brew_molecule) (left-padding . 0.2) (right-padding . 0.4) + (accidentals-interface . #t) ) basicLyricExtenderProperties = #`( (molecule-callback . ,Lyric_extender::brew_molecule) @@ -519,12 +521,12 @@ ScoreContext = \translator { basicMarkProperties = #`( (molecule-callback . ,Text_item::brew_molecule) (breakable . #t) + (mark-interface . #t) (visibility-lambda . ,end-of-line-invisible) ) basicMultiMeasureRestProperties = #`( (molecule-callback . ,Multi_measure_rest::brew_molecule) (staff-position . 0) - ) basicNoteColumnProperties = #`( (axes 0 1) @@ -543,6 +545,10 @@ ScoreContext = \translator { (molecule-callback . ,Text_item::brew_molecule) (style . "italic") ) + basicPaperColumnProperties = #`( + (paper-column-interface . #t) + (axes 0) + ) basicPedalProperties = #`( (molecule-callback . ,Text_item::brew_molecule) (style . "italic") @@ -563,7 +569,9 @@ ScoreContext = \translator { basicScriptProperties = #`( (molecule-callback . ,Script::brew_molecule) ) - + basicScriptColumnProperties = #`( + (before-line-breaking-callback . ,Script_column::before_line_breaking) + ) basicSlurProperties = #`( (molecule-callback . ,Slur::brew_molecule) (after-line-breaking-callback . ,Slur::after_line_breaking) @@ -585,7 +593,7 @@ ScoreContext = \translator { (thin-kern . 3.0) (hair-thickness . 1.6) (thick-thickness . 6.0) - + (bar-interface . #t) ) basicSustainPedalProperties = #`( (no-spacing-rods . #t) @@ -633,6 +641,7 @@ ScoreContext = \translator { ) basicTupletSpannerProperties = #`( (number-gap . 2.0) + (delta-y . 0) (thick . 1.0) (after-line-breaking-callback . ,Tuplet_spanner::after_line_breaking) (molecule-callback . ,Tuplet_spanner::brew_molecule) @@ -657,7 +666,6 @@ ScoreContext = \translator { ) basicVoltaSpannerProperties = #`( (molecule-callback . ,Volta_spanner::brew_molecule) - (after-line-breaking-callback . ,Volta_spanner::after_line_breaking) ) \accepts "Staff"; diff --git a/scripts/convert-mudela.py b/scripts/convert-mudela.py index d144bcc4f2..5434a4c151 100644 --- a/scripts/convert-mudela.py +++ b/scripts/convert-mudela.py @@ -480,6 +480,17 @@ if 1: conversions.append ((1,3,59), conv, '\key X ; -> \key X major; ') +if 1: + def conv (str): +# if re.search ('latexheaders *= *"\\\\input ',str): +# sys.stderr.write ('\nHello???') + str = re.sub (r'latexheaders *= *"\\\\input ', + 'latexheaders = "', + str) + return str + conversions.append ((1,3,68), conv, 'latexheaders = "\\input global" -> latexheaders = "global"') + + ############################ diff --git a/scripts/ly2dvi.py b/scripts/ly2dvi.py index e17b41b1f1..34ce7efd3c 100644 --- a/scripts/ly2dvi.py +++ b/scripts/ly2dvi.py @@ -264,8 +264,8 @@ class TeXOutput: %%\headsep0pt %% Maybe this is too drastic, but let us give it a try. \geometry{width=%spt, height=%spt,headheight=2mm,headsep=0pt,footskip=2mm} -\input lilyponddefs -\input titledefs +\input{lilyponddefs} +\input{titledefs} %s \makeatletter \renewcommand{\@oddhead}{\parbox{\textwidth}%% @@ -817,7 +817,7 @@ class Properties: # Set latex header name # def setHeader(this,head, requester): - this.__set('header',head,requester) + this.__set('header','\\input{' + head + '}',requester) # # Set or Clear Dependencies flag to generate makefile dependencies -- 2.11.4.GIT