From: fred Date: Tue, 26 Mar 2002 23:10:29 +0000 (+0000) Subject: lilypond-1.3.42 X-Git-Tag: release/1.5.59~1704 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=8def8b774f4d7ed8dec985418681b2b609ee6f3f;p=lilypond.git lilypond-1.3.42 --- diff --git a/config.make.in b/config.make.in index a0d9338300..8a72dfea93 100644 --- a/config.make.in +++ b/config.make.in @@ -35,6 +35,8 @@ bindir = @bindir@ includedir = @includedir@ datadir = @datadir@ localedir = @localedir@ +program_prefix = @program_prefix@ +program_suffix = @program_suffix@ EXTRA_LIBES = @EXTRA_LIBES@ @LIBS@ TEX_TFMDIR = @TEX_TFMDIR@ RANLIB = @RANLIB@ diff --git a/input/test/staff-margin.ly b/input/test/staff-margin.ly index 455a2c6e42..1e2ec60b60 100644 --- a/input/test/staff-margin.ly +++ b/input/test/staff-margin.ly @@ -15,7 +15,9 @@ linewidth=-1.0; \translator { \ScoreContext %textVerticalAlignment = #0 } -\translator { \StaffContext \consists "Staff_margin_engraver"; } -\translator { \PianoStaffContext \consists "Staff_margin_engraver"; } +%\translator { \StaffContext \consists "Staff_margin_engraver"; } +%\translator { \PianoStaffContext \consists "Staff_margin_engraver"; } +\translator { \StaffContext \consists "New_staff_margin_engraver"; } +\translator { \PianoStaffContext \consists "New_staff_margin_engraver"; } }} diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 6908147504..9d5a00abf5 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -30,6 +30,21 @@ Align_interface::alignment_callback (Dimension_cache const *c) return 0.0; } + +Real +Align_interface::center_on_element (Dimension_cache const *c) +{ + Score_element *me = c->element_l (); + Score_element *cent = unsmob_element (me->get_elt_property ("group-center-element")); + + if (cent) + { + Real r = cent->relative_coordinate (me, c->axis ()); + return -r; + } + return 0; +} + /* Hairy function to put elements where they should be. Can be tweaked from the outside by setting minimum-space and extra-space in its diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index 8cdb9ef67a..c22bbeedb0 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -48,26 +48,38 @@ Axis_group_interface::axis_b (Axis a )const return elt_l_->dim_cache_[a]->extent_callback_l_ == group_extent_callback; } +Interval +Axis_group_interface::relative_group_extent (Axis a, Score_element *common, SCM elts) +{ + Interval r; + for (SCM s = elts; gh_pair_p (s); s = gh_cdr (s)) + { + Score_element * se = unsmob_element (gh_car (s)); + Interval dims = se->extent (a); + if (!dims.empty_b ()) + r.unite (dims + se->relative_coordinate (common, a)); + } + return r; +} + Interval Axis_group_interface::group_extent_callback (Dimension_cache const *c) { Axis a = c->axis (); Score_element * me = c->element_l (); + Score_element * common = me; - Interval r; for (SCM s = me->get_elt_property ("elements"); gh_pair_p (s); s = gh_cdr (s)) { - SCM e=gh_car (s); - Score_element * se = SMOB_TO_TYPE (Score_element, e); - - Interval dims = se->extent (a); - if (!dims.empty_b ()) - r.unite (dims + se->relative_coordinate (me, a)); + Score_element * se = unsmob_element (gh_car (s)); + common = se->common_refpoint (common, a); } - return r; -} + Real my_coord = me->relative_coordinate (common, a); + Interval r (relative_group_extent (a, common, me->get_elt_property ("elements"))); + return r - my_coord; +} void Axis_group_interface::set_interface () @@ -75,7 +87,7 @@ Axis_group_interface::set_interface () if (!has_interface_b ()) { elt_l_->set_elt_property ("elements", SCM_EOL); - elt_l_->set_elt_property ("transparent", SCM_BOOL_T); + elt_l_->set_elt_property ("transparent", SCM_BOOL_T); // junk this? elt_l_->set_elt_property ("axes" , SCM_EOL); group (elt_l_, "interfaces").add_thing (ly_symbol2scm ("Axis_group")); } diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc index c138d6c3c3..c14198a0d2 100644 --- a/lily/bar-engraver.cc +++ b/lily/bar-engraver.cc @@ -29,7 +29,7 @@ Bar_engraver::create_bar () if (!bar_p_) { bar_p_ = new Staff_bar; - bar_p_->set_elt_property ("break-aligned", SCM_BOOL_T); + bar_p_->set_elt_property ("break-align-symbol", ly_symbol2scm ("Staff_bar")); // urg: "" != empty... SCM default_type = get_property ("defaultBarType"); diff --git a/lily/bar.cc b/lily/bar.cc index 70432970ee..299c5e9b3d 100644 --- a/lily/bar.cc +++ b/lily/bar.cc @@ -39,41 +39,12 @@ Bar::do_brew_molecule () const if (gh_string_p (s)) { String str =ly_scm2string (s); - if (str == "bracket") - return staff_bracket (get_bar_size ()); - else if (str == "brace") - return staff_brace (get_bar_size ()); - else - return compound_barline (str, get_bar_size ()); + return compound_barline (str, get_bar_size ()); } return Molecule (); } -Molecule -Bar::staff_bracket (Real height) const -{ - Paper_def* p= paper_l (); - Real arc_height = p->get_var("bracket_arch_height"); - SCM at = gh_list (ly_symbol2scm ("bracket"), - gh_double2scm (p->get_var("bracket_arch_angle")), - gh_double2scm (p->get_var("bracket_arch_width")), - gh_double2scm (arc_height), - gh_double2scm (p->get_var("bracket_width")), - gh_double2scm (height), - gh_double2scm (p->get_var("bracket_arch_thick")), - gh_double2scm (p->get_var("bracket_thick")), - SCM_UNDEFINED); - - Real staff_space = p->get_var ("interline"); - Real h = height + 2 * arc_height; - Box b (Interval (0, 1.5 * staff_space), Interval (-h/2, h/2)); - Molecule mol (b, at); - - mol.translate_axis (- mol.dim_[X_AXIS].length () / 2, X_AXIS); - return mol; -} - Molecule Bar::compound_barline (String str, Real h) const { @@ -141,40 +112,6 @@ Bar::compound_barline (String str, Real h) const return m; } -/* - ugh. Suck me plenty. - */ -Molecule -Bar::staff_brace (Real y) const -{ - Real staffht = paper_l ()->get_var ("staffheight"); - int staff_size = int (rint (staffht )); - - // URG - Real step = 1.0; - int minht = 2 * staff_size; - int maxht = 7 * minht; - int idx = int (((maxht - step) ? 0; - - SCM l = scm_eval (gh_list (ly_symbol2scm ("style-to-cmr"), - ly_str02scm ("brace"), - SCM_UNDEFINED)); - - String nm = "feta-braces"; - if (l != SCM_BOOL_F) - nm = ly_scm2string (gh_cdr (l)); - nm += to_str (staff_size); - SCM e =gh_list (ly_symbol2scm ("char"), gh_int2scm (idx), SCM_UNDEFINED); - SCM at = (e); - - at = fontify_atom (all_fonts_global_p->find_font (nm), at); - - Box b (Interval (0,0), Interval (-y/2, y/2)); - - return Molecule(b, at); -} - Molecule Bar::simple_barline (Real w, Real h) const diff --git a/lily/break-align-engraver.cc b/lily/break-align-engraver.cc index ec8495d9ba..24900b3f81 100644 --- a/lily/break-align-engraver.cc +++ b/lily/break-align-engraver.cc @@ -11,6 +11,7 @@ #include "break-align-item.hh" #include "align-interface.hh" #include "axis-group-interface.hh" +#include "dimension-cache.hh" class Break_align_engraver : public Engraver { @@ -88,20 +89,36 @@ Break_align_engraver::acknowledge_element (Score_element_info inf) if (!breakable) return ; - SCM al = item_l->remove_elt_property ("break-aligned"); - if (!gh_boolean_p (al ) || !gh_scm2bool (al)) + SCM align_name = item_l->remove_elt_property ("break-align-symbol"); + if (!gh_symbol_p (align_name)) return ; - if (!align_l_) { align_l_ = new Break_align_item; align_l_->set_elt_property ("breakable", SCM_BOOL_T); announce_element (Score_element_info (align_l_,0)); + + + Item * edge = new Item; + SCM edge_sym = ly_symbol2scm ("Left_edge_item"); + edge->set_elt_property ("break-align-symbol", edge_sym); + + /* + If the element is empty, it will be ignored in the break + alignment stuff. + + TODO: switch off ignoring empty stuff? + */ + edge->dim_cache_[X_AXIS]->set_extent_callback (Dimension_cache::point_dimension_callback); + + align_l_->set_elt_property ("group-center-element", edge->self_scm_); + + announce_element (Score_element_info(edge, 0)); + column_alist_ = scm_assoc_set_x (column_alist_, edge_sym, edge->self_scm_); } - SCM name = ly_str02scm (inf.elem_l_->name()); - SCM s = scm_assoc (name, column_alist_); + SCM s = scm_assoc (align_name, column_alist_); Item * group = 0; @@ -117,10 +134,10 @@ Break_align_engraver::acknowledge_element (Score_element_info inf) Axis_group_interface (group).set_interface (); Axis_group_interface (group).set_axes (X_AXIS,X_AXIS); - group->set_elt_property ("origin", name); + group->set_elt_property ("break-align-symbol", align_name); group->set_parent (align_l_, Y_AXIS); announce_element (Score_element_info (group, 0)); - column_alist_ = scm_assoc_set_x (column_alist_, name, group->self_scm_); + column_alist_ = scm_assoc_set_x (column_alist_, align_name, group->self_scm_); } Axis_group_interface (group).add_element (item_l); } diff --git a/lily/break-align-item.cc b/lily/break-align-item.cc index ebaf7f3aee..74fc20e399 100644 --- a/lily/break-align-item.cc +++ b/lily/break-align-item.cc @@ -22,12 +22,18 @@ void Break_align_item::before_line_breaking () { - Direction ad = (break_status_dir() == LEFT) ? RIGHT : LEFT; - Real interline= paper_l ()->get_var ("interline"); - - set_elt_property ("self-alignment-X", gh_int2scm (ad)); + if (break_status_dir() == LEFT) + { + set_elt_property ("self-alignment-X", gh_int2scm (RIGHT)); + } + else + { + add_offset_callback (Align_interface::center_on_element, X_AXIS); + } + + Real interline= paper_l ()->get_var ("interline"); Link_array elems; Link_array all_elems = Group_interface__extract_elements (this, (Score_element*)0, @@ -45,7 +51,7 @@ Break_align_item::before_line_breaking () SCM symbol_list = SCM_EOL; Array dists; - SCM current_origin = ly_str02scm (""); + SCM current_origin = ly_symbol2scm ("none"); for (int i=0; i <= elems.size (); i++) { Score_element *next_elt = i < elems.size () @@ -56,18 +62,20 @@ Break_align_item::before_line_breaking () if (next_elt) { - next_origin = next_elt->get_elt_property ("origin"); + next_origin = next_elt->get_elt_property ("break-align-symbol"); next_origin = (next_origin == SCM_UNDEFINED) - ? ly_str02scm ("") + ? ly_symbol2scm ("none") : next_origin; } else - next_origin = ly_str02scm ("begin-of-note"); + next_origin = ly_symbol2scm ("begin-of-note"); SCM extra_space = scm_eval (scm_listify (ly_symbol2scm ("break-align-spacer"), - current_origin, next_origin, SCM_UNDEFINED)); + ly_quote_scm (current_origin), + ly_quote_scm (next_origin), + SCM_UNDEFINED)); SCM symbol = gh_car (extra_space); Real spc = gh_scm2double (SCM_CADR(extra_space)); spc *= interline; @@ -137,7 +145,6 @@ Break_align_item::before_line_breaking () /* Hint the spacing engine how much space to put in. - The pairs are in the format of an interval (ie. CAR < CDR). */ column_l ()->set_elt_property ("extra-space", diff --git a/lily/breathing-sign-engraver.cc b/lily/breathing-sign-engraver.cc index afa950d618..2508bb8390 100644 --- a/lily/breathing-sign-engraver.cc +++ b/lily/breathing-sign-engraver.cc @@ -47,7 +47,8 @@ Breathing_sign_engraver::do_process_music() if(breathing_sign_req_l_) { breathing_sign_p_ = new Breathing_sign; - breathing_sign_p_->set_elt_property ("break-aligned", SCM_BOOL_T); + breathing_sign_p_->set_elt_property ("break-align-symbol", + ly_symbol2scm ("Breathing_sign")); Staff_symbol_referencer_interface st (breathing_sign_p_); st.set_interface (); diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index 041e3410f5..bfd3c54f5a 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -164,7 +164,7 @@ Clef_engraver::create_clef() { Clef_item *c= new Clef_item; c->set_elt_property ("breakable", SCM_BOOL_T); - c->set_elt_property ("break-aligned", SCM_BOOL_T); + c->set_elt_property ("break-align-symbol", ly_symbol2scm ("Clef_item")); announce_element (Score_element_info (c, clef_req_l_)); Staff_symbol_referencer_interface si(c); diff --git a/lily/include/align-interface.hh b/lily/include/align-interface.hh index 0809620234..ad9d51f876 100644 --- a/lily/include/align-interface.hh +++ b/lily/include/align-interface.hh @@ -46,6 +46,7 @@ struct Align_interface { int get_count (Score_element*)const; void set_interface (); bool has_interface_b (); + static Real center_on_element (Dimension_cache const *c); }; #endif /* ALIGN_INTERFACE_HH */ diff --git a/lily/include/axis-group-interface.hh b/lily/include/axis-group-interface.hh index f1382da9be..7bacbf8ac3 100644 --- a/lily/include/axis-group-interface.hh +++ b/lily/include/axis-group-interface.hh @@ -32,6 +32,7 @@ struct Axis_group_interface Axis_group_interface (Score_element*); static Interval group_extent_callback (Dimension_cache const*); + static Interval relative_group_extent (Axis, Score_element * common, SCM list); void add_element (Score_element*); void set_axes (Axis,Axis); @@ -39,6 +40,7 @@ struct Axis_group_interface Link_array get_children (); bool has_interface_b (); void set_interface (); + }; #endif /* AXIS_GROUP_INTERFACE_HH */ diff --git a/lily/include/bar.hh b/lily/include/bar.hh index 994f04b500..aa429c89bb 100644 --- a/lily/include/bar.hh +++ b/lily/include/bar.hh @@ -16,8 +16,6 @@ public: VIRTUAL_COPY_CONS(Score_element); Bar(); - Molecule staff_bracket (Real height) const; - Molecule staff_brace (Real height) const; Molecule compound_barline (String, Real height) const; Molecule simple_barline (Real wid, Real height) const; diff --git a/lily/include/break-align-item.hh b/lily/include/break-align-item.hh index c9a5aa1632..49057bde8d 100644 --- a/lily/include/break-align-item.hh +++ b/lily/include/break-align-item.hh @@ -12,7 +12,18 @@ #include "item.hh" -/// align breakable items (clef, bar, etc.) +/** + align breakable items (clef, bar, etc.) + + Properties: + + break-align-symbol -- the index in the spacing table (symbol) of + the to be aligned item. + + + TODO: remove this as a class, and make interface. + */ + class Break_align_item : public Item { protected: diff --git a/lily/include/span-bar.hh b/lily/include/span-bar.hh index 93213fa0b2..796df94a1c 100644 --- a/lily/include/span-bar.hh +++ b/lily/include/span-bar.hh @@ -33,7 +33,6 @@ protected: void evaluate_empty (); static Interval width_callback(Dimension_cache const*) ; - static Interval height_callback(Dimension_cache const*) ; virtual Real get_bar_size () const; virtual void before_line_breaking (); diff --git a/lily/include/system-start-delimiter.hh b/lily/include/system-start-delimiter.hh new file mode 100644 index 0000000000..7d7b5c6977 --- /dev/null +++ b/lily/include/system-start-delimiter.hh @@ -0,0 +1,31 @@ +/* + System-start-delimiter.hh -- declare System_start_delimiter + + source file of the GNU LilyPond music typesetter + + (c) 2000 Han-Wen Nienhuys + + */ + +#ifndef SYSTEM_START_DELIMITER_HH +#define SYSTEM_START_DELIMITER_HH + +#include "spanner.hh" + +/* + Braces/brackets across staffs. + */ +class System_start_delimiter : public Spanner +{ +public: + System_start_delimiter (); + VIRTUAL_COPY_CONS (Score_element); +protected: + virtual Molecule do_brew_molecule () const; + Molecule staff_bracket (Real) const; + Molecule staff_brace (Real) const; + Molecule simple_bar (Real) const; +}; + +#endif /* SYSTEM_START_DELIMITER_HH */ + diff --git a/lily/include/translator-group.hh b/lily/include/translator-group.hh index b2cba74b19..e144a3e8e4 100644 --- a/lily/include/translator-group.hh +++ b/lily/include/translator-group.hh @@ -41,7 +41,7 @@ protected: public: SCM get_property (SCM name_sym) const; void set_property (String var_name, SCM value); - + Translator_group *where_defined (SCM name_sym) const; String id_str_; void add_last_element (String s); diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc new file mode 100644 index 0000000000..e16a53c927 --- /dev/null +++ b/lily/instrument-name-engraver.cc @@ -0,0 +1,89 @@ +/* + new-staff-margin-engraver.cc -- implement Instrument_name_engraver + + source file of the GNU LilyPond music typesetter + + (c) 2000 Han-Wen Nienhuys + + */ + +#include "engraver.hh" +#include "text-item.hh" +#include "bar.hh" +#include "span-bar.hh" + +class Instrument_name_engraver : public Engraver +{ + Text_item *text_; + + void create_text (SCM s); +public: + VIRTUAL_COPY_CONS(Translator); + Instrument_name_engraver (); + + virtual void acknowledge_element (Score_element_info); + virtual void do_pre_move_processing (); +}; + +ADD_THIS_TRANSLATOR(Instrument_name_engraver); + +Instrument_name_engraver::Instrument_name_engraver () +{ + text_ = 0; +} + + +void +Instrument_name_engraver::do_pre_move_processing () +{ + if (text_) + { + typeset_element (text_); + text_ = 0; + } +} + +void +Instrument_name_engraver::create_text (SCM txt) +{ + if(!text_) + { + text_ = new Text_item; + text_->set_elt_property ("text", txt); + text_->set_elt_property ("breakable", SCM_BOOL_T); + + /* + TODO: use more lispish names for break-align-symbols + */ + text_->set_elt_property ("break-align-symbol", ly_symbol2scm ("Instrument_name")); + text_->set_elt_property ("visibility-lambda", + scm_eval (ly_symbol2scm ("begin-of-line-visible"))); + + announce_element (Score_element_info (text_,0)); + } +} + +void +Instrument_name_engraver::acknowledge_element (Score_element_info i) +{ + SCM s = get_property ("instrument"); + + if (now_mom () > Moment (0)) + s = get_property ("instr"); + + if (gh_string_p (s)) + { + if (Bar* b= dynamic_cast (i.elem_l_)) + { + create_text (s); + if (Span_bar* s= dynamic_cast (b)) + { + text_->set_parent (s, Y_AXIS); + } + } + } +} + + + + diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc index e81e72c227..ac97736344 100644 --- a/lily/key-engraver.cc +++ b/lily/key-engraver.cc @@ -36,9 +36,9 @@ Key_engraver::create_key () item_p_ = new Key_item; Staff_symbol_referencer_interface st (item_p_); st.set_interface (); + - item_p_->set_elt_property ("break-aligned", SCM_BOOL_T); // ugh - + item_p_->set_elt_property ("break-align-symbol", ly_symbol2scm ("Key_item")); item_p_->set_elt_property ("multi-octave", gh_bool2scm (key_.multi_octave_b_)); diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc index 233f910ca6..65e3c69adc 100644 --- a/lily/my-lily-parser.cc +++ b/lily/my-lily-parser.cc @@ -116,24 +116,26 @@ My_lily_parser::get_chord (Musical_pitch tonic, ugh */ Chord chord = to_chord (tonic, add_arr_p, sub_arr_p, inversion_p, bass_p); + inversion_p = 0; + bass_p = 0; Tonic_req* t = new Tonic_req; t->pitch_ = tonic; v->add_music (t); //urg - if (inversion_p - && Chord::find_notename_i (&chord.pitch_arr_, *inversion_p) > 0) + if (chord.inversion_b_ + && Chord::find_notename_i (&chord.pitch_arr_, chord.inversion_pitch_) > 0) { Inversion_req* i = new Inversion_req; - i->pitch_ = *inversion_p; + i->pitch_ = chord.inversion_pitch_; v->add_music (i); } - if (bass_p) + if (chord.bass_b_) { Bass_req* b = new Bass_req; - b->pitch_ = *bass_p; + b->pitch_ = chord.bass_pitch_; v->add_music (b); } diff --git a/lily/new-span-bar-engraver.cc b/lily/new-span-bar-engraver.cc new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/lily/new-span-bar-engraver.cc @@ -0,0 +1 @@ + diff --git a/lily/score-element.cc b/lily/score-element.cc index 8da3d235a0..447426519b 100644 --- a/lily/score-element.cc +++ b/lily/score-element.cc @@ -512,7 +512,9 @@ Score_element::extent (Axis a) const Dimension_cache const * d = dim_cache_[a]; Interval ext = d->get_dim (); - + if (empty_b (a)) + return ext; + SCM extra = get_elt_property (a == X_AXIS ? "extra-extent-X" : "extra-extent-Y"); diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc index 2d29cf9e33..f93dd1856f 100644 --- a/lily/side-position-interface.cc +++ b/lily/side-position-interface.cc @@ -145,6 +145,8 @@ Side_position_interface::aligned_on_self (Dimension_cache const *c) return 0.0; } + + Real directed_round (Real f, Direction d) { diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc index d485c9abfd..edd41f5ae6 100644 --- a/lily/spacing-spanner.cc +++ b/lily/spacing-spanner.cc @@ -143,8 +143,7 @@ Spacing_spanner::do_measure (Link_array cols) const if (rc->musical_b () && to_boolean (rc->get_elt_property ("contains-grace"))) right_dist *= paper_l ()->get_var ("before_grace_spacing_factor"); - - s.distance_f_ = left_distance + right_dist; + s.distance_f_ = left_distance + right_dist; Real stretch_dist = 0.; if (gh_number_p (stretch_hint)) diff --git a/lily/span-bar-engraver.cc b/lily/span-bar-engraver.cc index 135d978c15..e8d771e263 100644 --- a/lily/span-bar-engraver.cc +++ b/lily/span-bar-engraver.cc @@ -1,17 +1,99 @@ -#include "base-span-bar-engraver.hh" +/* + span-bar-grav.cc -- implement Span_bar_engraver + source file of the GNU LilyPond music typesetter -class Span_bar_engraver : public Base_span_bar_engraver + (c) 1997--2000 Han-Wen Nienhuys +*/ + +#include "dimension-cache.hh" +#include "lily-guile.hh" +#include "span-bar.hh" +#include "engraver.hh" + +/** + + Make bars that span multiple "staffs". Catch bars, and span a + Span_bar over them if we find more than 2 bars. Vertical alignment + of staffs changes the appearance of spanbars. It is up to the + aligner (Vertical_align_engraver, in this case, to add extra + dependencies to the spanbars. + + */ +class Span_bar_engraver : public Engraver { + Span_bar * spanbar_p_; + Link_array bar_l_arr_; + public: - Span_bar_engraver (); - VIRTUAL_COPY_CONS (Translator); + VIRTUAL_COPY_CONS(Translator); + Span_bar_engraver(); +protected: + virtual void acknowledge_element (Score_element_info); + virtual void do_pre_move_processing(); + virtual Span_bar* get_span_bar_p() const; }; -Span_bar_engraver::Span_bar_engraver () +Span_bar_engraver::Span_bar_engraver() +{ + spanbar_p_ =0; +} + +Span_bar* +Span_bar_engraver::get_span_bar_p() const +{ + return new Span_bar; +} + + +void +Span_bar_engraver::acknowledge_element (Score_element_info i) { - use_priority_b_ = false; + int depth = i.origin_trans_l_arr (this).size(); + if (depth > 1 + && dynamic_cast (i.elem_l_)) + { + bar_l_arr_.push (dynamic_cast (i.elem_l_)); + + if (bar_l_arr_.size() >= 2 && !spanbar_p_) + { + spanbar_p_ = get_span_bar_p(); + spanbar_p_->set_parent (bar_l_arr_[0], Y_AXIS); + + /* + UGH. UGH UUHGK GUHG G + */ + String visnam = String(name()) + "-visibility"; + + spanbar_p_->set_elt_property ("visibility-lambda", + scm_eval (ly_symbol2scm (visnam.ch_C()))); + + spanbar_p_->set_parent (bar_l_arr_[0], X_AXIS); + announce_element (Score_element_info (spanbar_p_,0)); + if (!gh_string_p (spanbar_p_->get_elt_property ("glyph"))) + spanbar_p_-> set_elt_property ("glyph", + bar_l_arr_[0]->get_elt_property ("glyph")); + } + } +} + +void +Span_bar_engraver::do_pre_move_processing() +{ + if (spanbar_p_) + { + for (int i=0; i < bar_l_arr_.size() ; i++) + spanbar_p_->add_bar (bar_l_arr_[i]); + typeset_element (spanbar_p_); + spanbar_p_ =0; + } + bar_l_arr_.set_size (0); } + + ADD_THIS_TRANSLATOR(Span_bar_engraver); + + + diff --git a/lily/span-bar.cc b/lily/span-bar.cc index ac458ad177..494a90b2ff 100644 --- a/lily/span-bar.cc +++ b/lily/span-bar.cc @@ -12,9 +12,9 @@ #include "paper-def.hh" #include "molecule.hh" #include "warn.hh" +#include "axis-group-interface.hh" #include "group-interface.hh" - void Span_bar::add_bar (Score_element*b) { @@ -31,7 +31,8 @@ Span_bar::width_callback (Dimension_cache const * c) Span_bar* s= dynamic_cast (c->element_l ()); String gl = ly_scm2string (s->get_elt_property ("glyph")); - /*urg. + /* + urg. */ Molecule m = s->compound_barline (gl, 40 PT); @@ -44,23 +45,12 @@ Span_bar::before_line_breaking () Bar::before_line_breaking (); evaluate_empty (); - - // set_empty (false, Y_AXIS); // a hack to make mark scripts work. } void Span_bar::after_line_breaking () { Bar::after_line_breaking (); - SCM s = get_elt_property ("collapse-height"); - if (gh_number_p (s) - && get_spanned_interval ().length () < gh_scm2double (s)) - { - set_elt_property ("transparent", SCM_BOOL_T); - set_empty (X_AXIS); - set_empty (Y_AXIS); - } - Interval i (get_spanned_interval ()); translate_axis (i.center (), Y_AXIS); } @@ -106,36 +96,9 @@ Span_bar::evaluate_empty () Interval Span_bar::get_spanned_interval () const { - Interval y_int; - - for (SCM s = get_elt_property ("elements"); gh_pair_p (s); s = gh_cdr (s)) - { - Score_element *bar = unsmob_element ( gh_car (s)); - - if (!bar) - continue; - - Score_element*common = common_refpoint (bar, Y_AXIS); - - Interval iv (bar->extent(Y_AXIS)); - if (!iv.empty_b ()) - { - Real y = bar->relative_coordinate (common, Y_AXIS) - - relative_coordinate (common, Y_AXIS); - - y_int.unite (y + iv); - } - } - - return y_int; + return Axis_group_interface::group_extent_callback (dim_cache_[Y_AXIS]); } -Interval -Span_bar::height_callback (Dimension_cache const *c) -{ - Span_bar * s= dynamic_cast (c->element_l ()); - return s->get_spanned_interval (); -} Real Span_bar::get_bar_size () const @@ -153,6 +116,6 @@ Span_bar::Span_bar () { group (this).set_interface (); dim_cache_[X_AXIS]->set_extent_callback (width_callback); - dim_cache_[Y_AXIS]->set_extent_callback (height_callback); + dim_cache_[Y_AXIS]->set_extent_callback (Axis_group_interface::group_extent_callback); } diff --git a/lily/span-score-bar-engraver.cc b/lily/span-score-bar-engraver.cc index dc71a0ea17..8b13789179 100644 --- a/lily/span-score-bar-engraver.cc +++ b/lily/span-score-bar-engraver.cc @@ -1,77 +1 @@ -/* - span-score-bar-engraver.cc -- implement Span_score_bar_engraver, - Piano_bar_engraver and Staff_group_bar_engraver - - source file of the GNU LilyPond music typesetter - - (c) 1997--2000 Han-Wen Nienhuys -*/ - -#include "span-bar.hh" -#include "span-score-bar-engraver.hh" -#include "paper-def.hh" -#include "dimension-cache.hh" - -Span_bar* -Span_score_bar_engraver::get_span_bar_p () const -{ - Span_bar*s = new Span_bar; - s->set_elt_property ("glyph", gh_str02scm ("scorebar")); - s->set_elt_property ("break-aligned",SCM_BOOL_T); - - return s; -} - - -Span_score_bar_engraver::Span_score_bar_engraver () -{ - use_priority_b_ = true; -} - -Span_bar* -Piano_bar_engraver::get_span_bar_p () const -{ - Span_bar *s= new Span_bar; - s->set_empty (X_AXIS); - s->set_elt_property ("glyph", gh_str02scm ("brace")); - return s; -} - -Span_bar* -Staff_group_bar_engraver::get_span_bar_p () const -{ - Span_bar *s= new Span_bar; - s->set_empty (X_AXIS); - s->set_elt_property ("glyph", gh_str02scm ("bracket")); - - SCM collapse = get_property ("bracketCollapseHeight"); - if (gh_number_p (collapse)) - s->set_elt_property ("collapse-height", collapse); - else - s->set_elt_property ("collapse-height", gh_double2scm (1)); - - return s; -} - -void -Staff_group_bar_engraver::acknowledge_element (Score_element_info i) -{ - Base_span_bar_engraver::acknowledge_element (i); - - /* - UGH. This has to go into the backend. - */ - if (Span_bar * b = dynamic_cast (i.elem_l_)) - { - SCM gl = b->get_elt_property ("glyph"); - if (gh_string_p (gl) && ly_scm2string (gl) == "brace") - b->translate_axis ( -paper_l ()->get_var ("interline"), - X_AXIS); // ugh - } -} - -ADD_THIS_TRANSLATOR (Piano_bar_engraver); -ADD_THIS_TRANSLATOR (Staff_group_bar_engraver); -ADD_THIS_TRANSLATOR (Span_score_bar_engraver); - diff --git a/lily/staff-margin-engraver.cc b/lily/staff-margin-engraver.cc index f0887d650a..d200746bed 100644 --- a/lily/staff-margin-engraver.cc +++ b/lily/staff-margin-engraver.cc @@ -27,14 +27,6 @@ * merge with/derive from/add functionality to Bar_script_engraver */ -/** - Hang on left edge of staff to provide suppor for simple items. - */ -class Left_edge_item : public Item -{ -public: - VIRTUAL_COPY_CONS (Score_element); -}; /** put (instrument) text to left of line @@ -52,7 +44,7 @@ protected: private: String type_; Text_item* text_p_; - Left_edge_item* left_edge_p_; + Item* left_edge_p_; void create_text (SCM); }; @@ -81,7 +73,6 @@ Staff_margin_engraver::acknowledge_element (Score_element_info info) create_text (s); if (Span_bar* s= dynamic_cast (b)) { - assert (text_p_); text_p_->set_parent (s, Y_AXIS); } } @@ -94,27 +85,25 @@ Staff_margin_engraver::create_text (SCM text) if (!text_p_) { assert (!left_edge_p_); - Left_edge_item* l = new Left_edge_item; - - l->set_elt_property ("breakable", SCM_BOOL_T); - l->set_elt_property ("break-aligned", SCM_BOOL_T); + left_edge_p_ = new Item; + left_edge_p_->set_elt_property ("breakable", SCM_BOOL_T); + left_edge_p_->set_elt_property ("break-align-symbol", ly_symbol2scm ("Left_edge_item")); - announce_element (Score_element_info (l, 0)); + announce_element (Score_element_info (left_edge_p_, 0)); - Staff_symbol_referencer_interface sl (l); + Staff_symbol_referencer_interface sl (left_edge_p_); sl.set_interface (); - left_edge_p_ = l; Text_item* t = new Text_item; t->set_elt_property ("self-alignment-Y", gh_int2scm (0)); t->add_offset_callback (Side_position_interface::aligned_on_self, Y_AXIS); - t->set_parent (l, X_AXIS); - t->set_parent (l, Y_AXIS); + t->set_parent (left_edge_p_, X_AXIS); + t->set_parent (left_edge_p_, Y_AXIS); // 'just to be sure': see Clef_item::do_add_processing - l->add_dependency (t); + left_edge_p_->add_dependency (t); /* @@ -158,7 +147,7 @@ Staff_margin_engraver::create_text (SCM text) else { side_position (t).set_axis (X_AXIS); - side_position (t).add_support (l); + side_position (t).add_support (left_edge_p_); Direction d; if (isdir_b (s)) @@ -200,7 +189,7 @@ Staff_margin_engraver::do_pre_move_processing () scm_eval (ly_symbol2scm ("begin-of-line-visible"))); typeset_element (text_p_); text_p_ = 0; - assert (left_edge_p_); + typeset_element (left_edge_p_); left_edge_p_ = 0; } diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc new file mode 100644 index 0000000000..d8ec2aed2f --- /dev/null +++ b/lily/system-start-delimiter-engraver.cc @@ -0,0 +1,97 @@ +/* + system-start-delimiter-engraver.cc -- implement System_start_delimiter_engraver + + source file of the GNU LilyPond music typesetter + + (c) 2000 Han-Wen Nienhuys + + */ + + +#include "system-start-delimiter.hh" +#include "engraver.hh" +#include "staff-symbol.hh" +#include "group-interface.hh" +#include "paper-column.hh" +#include "paper-def.hh" + +/* + TODO: rename this to system-open-engraver (or whatever.) + + */ +class System_start_delimiter_engraver : public Engraver +{ +public: + VIRTUAL_COPY_CONS(Translator); + System_start_delimiter_engraver(); + + Spanner * spanbar_; +protected: + + virtual void acknowledge_element (Score_element_info); + virtual void do_creation_processing (); + virtual void do_removal_processing (); +}; + +ADD_THIS_TRANSLATOR(System_start_delimiter_engraver); + + +void +System_start_delimiter_engraver::acknowledge_element (Score_element_info inf) +{ + if (dynamic_cast (inf.elem_l_)) + { + /* + don't add as Axis_group_interface (spanbar_).add_element (), + because that would set the parent as well */ + + Group_interface (spanbar_).add_element (inf.elem_l_); + } + else if (System_start_delimiter * b = dynamic_cast (inf.elem_l_)) + { + SCM gl = b->get_elt_property ("glyph"); + SCM my_gl = get_property ("spanBarGlyph"); + + /* + UGH UGH + */ + if (gh_symbol_p (gl) && gl == ly_symbol2scm ("brace") + && gh_symbol_p (my_gl) && my_gl == ly_symbol2scm ("bracket")) + b->translate_axis ( -paper_l ()->get_var ("interline"), X_AXIS); // ugh + } + +} + +System_start_delimiter_engraver::System_start_delimiter_engraver() +{ + spanbar_ = 0; +} + +void +System_start_delimiter_engraver::do_creation_processing() +{ + spanbar_ = new System_start_delimiter; + spanbar_->set_bound (LEFT, get_staff_info ().command_pcol_l ()); + announce_element (Score_element_info (spanbar_,0)); +} + +void +System_start_delimiter_engraver::do_removal_processing () +{ + SCM s = get_property ("systemStartDelimiterGlyph"); + if (gh_symbol_p (s)) + { + spanbar_->set_elt_property ("glyph", s); + } + + // ugh, should have naming without bracket + SCM collapse = get_property ("bracketCollapseHeight"); + if (gh_number_p (collapse)) + spanbar_->set_elt_property ("collapse-height", collapse); + else + spanbar_->set_elt_property ("collapse-height", gh_double2scm (1)); + + spanbar_->set_bound (RIGHT, get_staff_info ().command_pcol_l ()); + typeset_element (spanbar_); +} + diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc new file mode 100644 index 0000000000..bc94277443 --- /dev/null +++ b/lily/system-start-delimiter.cc @@ -0,0 +1,119 @@ +/* + system-start-delimiter.cc -- implement System_start_delimiter + + source file of the GNU LilyPond music typesetter + + (c) 2000 Han-Wen Nienhuys + + */ +#include + +#include "system-start-delimiter.hh" +#include "paper-def.hh" +#include "molecule.hh" +#include "axis-group-interface.hh" +#include "lookup.hh" +#include "all-font-metrics.hh" + +Molecule +System_start_delimiter::staff_bracket (Real height) const +{ + Paper_def* p= paper_l (); + Real arc_height = p->get_var("bracket_arch_height"); + SCM at = gh_list (ly_symbol2scm ("bracket"), + gh_double2scm (p->get_var("bracket_arch_angle")), + gh_double2scm (p->get_var("bracket_arch_width")), + gh_double2scm (arc_height), + gh_double2scm (p->get_var("bracket_width")), + gh_double2scm (height), + gh_double2scm (p->get_var("bracket_arch_thick")), + gh_double2scm (p->get_var("bracket_thick")), + SCM_UNDEFINED); + + Real staff_space = p->get_var ("interline"); + Real h = height + 2 * arc_height; + Box b (Interval (0, 1.5 * staff_space), Interval (-h/2, h/2)); + Molecule mol (b, at); + + mol.translate_axis (- mol.dim_[X_AXIS].length () / 2, X_AXIS); + return mol; +} + +System_start_delimiter::System_start_delimiter () +{ + set_empty (Y_AXIS); +} + +Molecule +System_start_delimiter::simple_bar (Real h) const +{ + Real w = paper_l ()->get_var ("barthick_score"); + return lookup_l ()->filledbox (Box (Interval(0,w), Interval(-h/2, h/2))); +} + + +Molecule +System_start_delimiter::do_brew_molecule ()const +{ + Interval ext = Axis_group_interface::group_extent_callback (dim_cache_[Y_AXIS]); + Real l = ext.length (); + Molecule m; + + SCM s = get_elt_property ("collapse-height"); + if (gh_number_p (s) && l < gh_scm2double (s)) + { + System_start_delimiter * me = (System_start_delimiter*)this; + me->set_elt_property ("transparent", SCM_BOOL_T); + me->set_empty (X_AXIS); + me->set_empty (Y_AXIS); + return m; + } + + + s = get_elt_property ("glyph"); + if (gh_symbol_p (s) && s == ly_symbol2scm ("bracket")) + m = staff_bracket (l); + else if (gh_symbol_p (s) && s == ly_symbol2scm ("brace")) + m = staff_brace (l); + else + m = simple_bar (l); + + + m.translate_axis (ext.center (), Y_AXIS); + return m; +} + +/* + ugh. Suck me plenty. + */ +Molecule +System_start_delimiter::staff_brace (Real y) const +{ + Real staffht = paper_l ()->get_var ("staffheight"); + int staff_size = int (rint (staffht )); + + // URG + Real step = 1.0; + int minht = 2 * staff_size; + int maxht = 7 * minht; + int idx = int (((maxht - step) ? 0; + + SCM l = scm_eval (gh_list (ly_symbol2scm ("style-to-cmr"), + ly_str02scm ("brace"), + SCM_UNDEFINED)); + + String nm = "feta-braces"; + if (l != SCM_BOOL_F) + nm = ly_scm2string (gh_cdr (l)); + nm += to_str (staff_size); + SCM e =gh_list (ly_symbol2scm ("char"), gh_int2scm (idx), SCM_UNDEFINED); + SCM at = (e); + + at = fontify_atom (find_font (nm), at); + + Box b (Interval (0,0), Interval (-y/2, y/2)); + + return Molecule(b, at); +} + diff --git a/lily/time-signature-engraver.cc b/lily/time-signature-engraver.cc index 547d4c2ef4..6a4a1deed7 100644 --- a/lily/time-signature-engraver.cc +++ b/lily/time-signature-engraver.cc @@ -39,7 +39,7 @@ Time_signature_engraver::do_process_music() time_signature_p_->set_elt_property ("fraction", gh_cons (gh_int2scm (req->beats_i_), gh_int2scm (req->one_beat_i_))); - time_signature_p_->set_elt_property ("break-aligned", SCM_BOOL_T); + time_signature_p_->set_elt_property ("break-align-symbol", ly_symbol2scm( "Time_signature")); } diff --git a/lily/timing-engraver.cc b/lily/timing-engraver.cc index c88e521412..e64182a3a8 100644 --- a/lily/timing-engraver.cc +++ b/lily/timing-engraver.cc @@ -19,6 +19,7 @@ Timing_engraver::do_post_move_processing( ) { bar_req_l_ = 0; Timing_translator::do_post_move_processing (); + } bool @@ -35,6 +36,22 @@ Timing_engraver::do_try_music (Music*m) return Timing_translator::do_try_music (m); } +#if 0 +String +Timing_engraver::do_process_music () +{ + if (gh_string_p (get_property ("barType"))) + ; + else if (!now_mom ()) + { + daddy_trans_l_->set_property ("barType", ly_str02scm ("|")); + } + else + + { + } +} +#endif String diff --git a/lily/translator-group.cc b/lily/translator-group.cc index 2a071f2e9a..d4ac8ff528 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -428,6 +428,17 @@ Translator_group::do_add_processing () } } +Translator_group* +Translator_group::where_defined (SCM sym) const +{ + if (properties_dict_.elem_b (sym)) + { + return (Translator_group*)this; + } + + return (daddy_trans_l_) ? daddy_trans_l_->where_defined (sym) : 0; +} + SCM Translator_group::get_property (SCM sym) const { @@ -448,3 +459,4 @@ Translator_group::set_property (String id, SCM val) { properties_dict_.set (ly_symbol2scm (id.ch_C()), val); } + diff --git a/ly/engraver.ly b/ly/engraver.ly index 8e6f1f58b3..e9a17f134f 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -55,12 +55,12 @@ StaffContext=\translator { %{ - The Staff_margin_engraver puts the name of the instrument + The Instrument_name_engraver puts the name of the instrument (\property Staff.instrument; Staff.instr for subsequent lines) to the left of a staff. Usually, you only want this in the full score, not in the parts. - \consists "Staff_margin_engraver"; + \consists "Instrument_name_engraver"; %} defaultClef = #"treble" @@ -75,8 +75,10 @@ StaffContext=\translator { \translator { \type "Engraver_group_engraver"; \name ChoirStaff; - alignmentReference = \center; - \consists "Staff_group_bar_engraver"; + alignmentReference = \center; + \consists "System_start_delimiter_engraver"; + systemStartDelimiterGlyph = #'bracket + \accepts "Staff"; @@ -201,7 +203,9 @@ GrandStaffContext=\translator{ \type "Engraver_group_engraver"; \name GrandStaff; \consists "Span_bar_engraver"; - \consists "Piano_bar_engraver"; + \consists "System_start_delimiter_engraver"; + systemStartDelimiterGlyph = #'brace + \consists "Property_engraver"; Generic_property_list = #generic-grand-staff-properties \accepts "Staff"; @@ -224,7 +228,12 @@ StaffGroupContext= \translator { \type "Engraver_group_engraver"; \consists "Span_bar_engraver"; \consists "Output_property_engraver"; - \consists "Staff_group_bar_engraver"; + \consists "System_start_delimiter_engraver"; + systemStartDelimiterGlyph = #'bracket + + + \consistsend "Axis_group_engraver" ; + \name StaffGroup; \accepts "Staff"; @@ -310,7 +319,7 @@ HaraKiriStaffContext = \translator { \StaffContext \remove "Axis_group_engraver"; \consistsend "Hara_kiri_engraver"; - \consists "Staff_margin_engraver"; + \consists "Instrument_name_engraver"; \accepts "Voice"; }; %{ @@ -336,17 +345,19 @@ ScoreContext = \translator { \consists "Output_property_engraver"; %bracketCollapseHeight = #10 % \pt - \consists "Span_score_bar_engraver"; + \consists "System_start_delimiter_engraver"; + % \consists "Score_priority_engraver"; \consists "Break_align_engraver"; breakAlignOrder = #'( - "Left_edge_item" - "Span_bar" - "Breathing_sign" - "Clef_item" - "Key_item" - "Staff_bar" - "Time_signature" + Instrument_name + Left_edge_item + Span_bar + Breathing_sign + Clef_item + Key_item + Staff_bar + Time_signature ) \consists "Spacing_engraver"; \consists "Vertical_align_engraver"; @@ -365,7 +376,6 @@ ScoreContext = \translator { markVisibilityFunction = #end-of-line-invisible barNumberVisibilityFunction = #begin-of-line-visible - marginVisibilityFunction = #begin-of-line-visible }; \translator { \ScoreContext } diff --git a/make/generic-vars.make b/make/generic-vars.make index 1581a6e768..95d6e82f74 100644 --- a/make/generic-vars.make +++ b/make/generic-vars.make @@ -43,8 +43,8 @@ INSTALL_DIST_FILES = \ bin/convert-mudela\ bin/mudela-book\ bin/ly2dvi\ - bin/lilypond$(DOTEXE)\ - bin/mi2mu$(DOTEXE)\ + bin/$(program_prefix)lilypond$(program_suffix)\ + bin/$(program_prefix)mi2mu$(program-suffix)\ info/lilypond.info\ man/man1/mi2mu.1\ man/man1/lilypond.1\ diff --git a/make/lilypond.spec.in b/make/lilypond.spec.in index f7bee128c4..1c4f427152 100644 --- a/make/lilypond.spec.in +++ b/make/lilypond.spec.in @@ -28,10 +28,13 @@ The documentation of LilyPond, both in HTML and PostScript. %prep %setup + %build -#./configure --disable-checking --disable-debugging --enable-printing --prefix=/usr --disable-optimise --enable-shared + %{configure} --disable-checking --disable-debugging --enable-printing --prefix=%{_prefix} --disable-optimise --enable-shared + make all + ln -s %{_prefix}/share/texmf/fonts/tfm/public/cm/ tfm # urg @@ -63,6 +66,10 @@ tar -C htmldocs -xzf out/htmldoc.tar.gz || true mkdir -p out/examples/ tar -cf - input/ | tar -C out/examples/ -xf- || true +%ifos cygwin +%{fix_suffixes} +%endif + %post touch /tmp/.lilypond-install @@ -79,12 +86,17 @@ fi # hairy to hook it in (possibly non-existing) emacs %doc mudela-mode.el +%ifnos cygwin %{_prefix}/bin/abc2ly %{_prefix}/bin/convert-mudela %{_prefix}/bin/mudela-book %{_prefix}/bin/ly2dvi %{_prefix}/bin/lilypond %{_prefix}/bin/midi2ly +%else +%{_prefix}/bin +%endif + %{_prefix}/man/man1/midi2ly.1 %{_prefix}/man/man1/lilypond.1 %{_prefix}/man/man1/mudela-book.1 diff --git a/make/substitute.make b/make/substitute.make index c4be0de6ae..f35294a554 100644 --- a/make/substitute.make +++ b/make/substitute.make @@ -14,10 +14,10 @@ ATVARIABLES = \ package\ PATHSEP\ PERL\ + program_prefix\ + program_suffix\ PYTHON\ SHELL\ TOPLEVEL_VERSION\ step-bindir\ - abs-step-bindir\ - diff --git a/scm/lily.scm b/scm/lily.scm index f2645988b8..df8e73a607 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -92,11 +92,7 @@ ;; Score_span_bars are only visible at start of line ;; i.e. if break_dir == RIGHT == 1 (define Span_bar_engraver-visibility begin-of-line-invisible) -(define Base_span_bar_engraver-visibility begin-of-line-invisible) (define mark-visibility end-of-line-invisible) -(define Span_score_bar_engraver-visibility begin-of-line-visible) -(define Piano_bar_engraver-visibility begin-of-line-visible) -(define Staff_group_bar_engraver-visibility begin-of-line-visible) ;; Spacing constants for prefatory matter. ;; @@ -107,40 +103,42 @@ ;; (Measured in staff space) (define space-alist '( - (("" "Left_edge_item") . (extra-space -15.0)) - (("" "Clef_item") . (minimum-space 1.0)) - (("" "Staff_bar") . (minimum-space 0.0)) - (("" "Clef_item") . (minimum-space 1.0)) - (("" "Key_item") . (minimum-space 0.5)) - (("" "Span_bar") . (extra-space 0.0)) - (("" "Time_signature") . (extra-space 0.0)) - (("" "begin-of-note") . (minimum-space 1.5)) - (("Clef_item" "Key_item") . (minimum-space 4.0)) - (("Key_item" "Time_signature") . (extra-space 1.0)) - (("Clef_item" "Time_signature") . (minimum-space 3.5)) - (("Staff_bar" "Clef_item") . (minimum-space 1.0)) - (("Clef_item" "Staff_bar") . (minimum-space 3.7)) - (("Time_signature" "Staff_bar") . (minimum-space 2.0)) - (("Key_item" "Staff_bar") . (extra-space 1.0)) - (("Span_bar" "Clef_item") . (extra-space 1.0)) - (("Clef_item" "Span_bar") . (minimum-space 3.7)) - (("Time_signature" "Span_bar") . (minimum-space 2.0)) - (("Key_item" "Span_bar") . (minimum-space 2.5)) - (("Staff_bar" "Time_signature") . (minimum-space 1.5)) ;double check this. - (("Time_signature" "begin-of-note") . (extra-space 2.0)) ;double check this. - (("Key_item" "begin-of-note") . (extra-space 2.5)) - (("Staff_bar" "begin-of-note") . (extra-space 1.0)) - (("Clef_item" "begin-of-note") . (minimum-space 5.0)) - (("" "Breathing_sign") . (minimum-space 0.0)) - (("Breathing_sign" "Key_item") . (minimum-space 1.5)) - (("Breathing_sign" "begin-of-note") . (minimum-space 1.0)) - (("Breathing_sign" "Staff_bar") . (minimum-space 1.5)) - (("Breathing_sign" "Clef_item") . (minimum-space 2.0)) + ((none Instrument_name) . (extra-space 1.0)) + ((Instrument_name Left_edge_item) . (extra-space 1.0)) + ((Left_edge_item Clef_item) . (extra-space 1.0)) + ((none Left_edge_item) . (extra-space 0.0)) + ((Left_edge_item Staff_bar) . (extra-space 0.0)) +; ((none Left_edge_item) . (extra-space -15.0)) +; ((none Left_edge_item) . (extra-space -15.0)) + ((none Clef_item) . (minimum-space 1.0)) + ((none Staff_bar) . (minimum-space 0.0)) + ((none Clef_item) . (minimum-space 1.0)) + ((none Key_item) . (minimum-space 0.5)) + ((none Time_signature) . (extra-space 0.0)) + ((none begin-of-note) . (minimum-space 1.5)) + ((Clef_item Key_item) . (minimum-space 4.0)) + ((Key_item Time_signature) . (extra-space 1.0)) + ((Clef_item Time_signature) . (minimum-space 3.5)) + ((Staff_bar Clef_item) . (minimum-space 1.0)) + ((Clef_item Staff_bar) . (minimum-space 3.7)) + ((Time_signature Staff_bar) . (minimum-space 2.0)) + ((Key_item Staff_bar) . (extra-space 1.0)) + ((Staff_bar Time_signature) . (minimum-space 1.5)) ;double check this. + ((Time_signature begin-of-note) . (extra-space 2.0)) ;double check this. + ((Key_item begin-of-note) . (extra-space 2.5)) + ((Staff_bar begin-of-note) . (extra-space 1.0)) + ((Clef_item begin-of-note) . (minimum-space 5.0)) + ((none Breathing_sign) . (minimum-space 0.0)) + ((Breathing_sign Key_item) . (minimum-space 1.5)) + ((Breathing_sign begin-of-note) . (minimum-space 1.0)) + ((Breathing_sign Staff_bar) . (minimum-space 1.5)) + ((Breathing_sign Clef_item) . (minimum-space 2.0)) ) ) - + +;; (define (ly-warn s) (error s)) (define (break-align-spacer this next) - (let ((entry (assoc `(,this ,next) space-alist))) + (let ((entry (assoc (list this next) space-alist))) (if entry (cdr entry) (begin (ly-warn (string-append "Unknown spacing pair `" this "', `" next "'")) diff --git a/stepmake/aclocal.m4 b/stepmake/aclocal.m4 index 6b2886d4cb..3e488a8f4f 100644 --- a/stepmake/aclocal.m4 +++ b/stepmake/aclocal.m4 @@ -208,6 +208,14 @@ AC_DEFUN(AC_STEPMAKE_INIT, [ fi stepmake=`echo ${stepmake} | sed "s!\\\${prefix}!$presome!"` + # urg, how is this supposed to work? + if test "$program_prefix" = "NONE"; then + program_prefix= + fi + if test "$program_suffix" = "NONE"; then + program_suffix= + fi + AC_MSG_CHECKING(Package) if test "x$PACKAGE" = "xSTEPMAKE"; then AC_MSG_RESULT(Stepmake package!) @@ -336,7 +344,7 @@ dnl fi LN=cp # hard link does not work under cygnus-nt LN_S='cp -r' # symbolic link does not work for native nt ZIP="zip -r -9" # - DOTEXE=.exe + program_suffix=.exe # urg # DIRSEP='\\' # PATHSEP=';' @@ -371,7 +379,8 @@ dnl fi ZIP="zip -r -9" INSTALL="\$(SHELL) \$(stepdir)/../bin/install-sh -c" fi - AC_SUBST(DOTEXE) + AC_SUBST(program_prefix) + AC_SUBST(program_suffix) AC_SUBST(ZIP) AC_SUBST(LN) AC_SUBST(LN_S) diff --git a/stepmake/stepmake/executable-targets.make b/stepmake/stepmake/executable-targets.make index 66e33173a6..f0af1ac552 100644 --- a/stepmake/stepmake/executable-targets.make +++ b/stepmake/stepmake/executable-targets.make @@ -20,13 +20,15 @@ localuninstall: uninstallexe installexe: all -$(INSTALL) -d $(bindir) $(foreach a, $(EXECUTABLES), \ - $(INSTALL) -m 755 $(outdir)/$(a) $(bindir)/$(a)$(DOTEXE) && \ - strip $(bindir)/$(a)$(DOTEXE) && ) true + $(INSTALL) -m 755 $(outdir)/$(a) \ + $(bindir)/$(program_prefix)$(a)$(program_suffix) && \ + strip $(bindir)/$(program_prefix)$(a)$(program_suffix) && ) true $(foreach a, $(SEXECUTABLES), \ $(INSTALL) -m 755 $(outdir)/$(a) $(bindir) &&) true uninstallexe: - $(foreach a, $(EXECUTABLES), rm -f $(bindir)/$(a)$(DOTEXE) &&) true + $(foreach a, $(EXECUTABLES), rm -f \ + $(bindir)/$(program_prefix)$(a)$(program_suffix) && ) true $(foreach a, $(SEXECUTABLES), rm -f $(bindir)/$(a) &&) true diff --git a/stepmake/stepmake/generic-vars.make b/stepmake/stepmake/generic-vars.make index 3fe7ed8dfb..ebcbe573aa 100644 --- a/stepmake/stepmake/generic-vars.make +++ b/stepmake/stepmake/generic-vars.make @@ -110,7 +110,7 @@ DODEP=rm -f $(depfile); DEPENDENCIES_OUTPUT="$(depfile) $(outdir)/$(notdir $@)" # generic target names: # ifdef NAME -EXECUTABLE = $(outdir)/$(NAME)$(EXE) +EXECUTABLE = $(outdir)/$(NAME) else EXECUTABLE = endif