From 949737e17ed7cbc231a3c08e45d32897a636d94d Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Mon, 7 Feb 2000 13:03:23 +0100 Subject: [PATCH] release: 1.3.23 =========== * Symbols opposite to stem (eg marcato) now get the proper glyph. * Breathing marks now have a direction by default. * Do set generic script properties. * Also put tuplet brackets under notes. * Score_element_info: only store origin of element, but not the path to parent translators. Saves a little memory, and removes some complexity. 1.3.22.h --- CHANGES | 35 ++++++ TODO | 7 +- VERSION | 2 +- lib/include/input.hh | 1 + lib/input.cc | 8 ++ ...dio-item-info.cc => audio-element-info.cc} | 7 +- lily/bar-script-engraver.cc | 4 +- lily/base-span-bar-engraver.cc | 2 +- lily/breathing-sign-engraver.cc | 34 +++--- lily/breathing-sign.cc | 18 ++- lily/command-request.cc | 12 +- lily/crescendo.cc | 2 +- lily/dynamic-engraver.cc | 14 ++- lily/engraver-group-engraver.cc | 2 +- lily/engraver.cc | 3 +- lily/include/audio-element-info.hh | 1 + lily/include/breathing-sign.hh | 4 - lily/include/command-request.hh | 2 +- lily/include/musical-request.hh | 16 --- lily/include/score-element-info.hh | 18 ++- lily/include/script-engraver.hh | 30 ----- lily/include/side-position-interface.hh | 4 +- lily/include/time-signature.hh | 4 + lily/line-number-engraver.cc | 101 +++++++++++++++ lily/mark-engraver.cc | 5 + lily/multi-measure-rest-engraver.cc | 111 +++++++++-------- lily/my-lily-lexer.cc | 1 + lily/parser.yy | 115 ++++++++++-------- lily/performer-group-performer.cc | 6 +- lily/score-element-info.cc | 18 ++- lily/score-engraver.cc | 1 - lily/script-engraver.cc | 23 +++- lily/script.cc | 5 +- lily/side-position-interface.cc | 19 ++- lily/staff-margin-engraver.cc | 2 +- lily/staff-symbol-engraver.cc | 8 -- lily/text-engraver.cc | 3 +- lily/time-signature.cc | 1 + lily/timing-translator.cc | 6 +- lily/tuplet-spanner.cc | 3 +- lily/vertical-align-engraver.cc | 8 +- ly/auto-beam-settings.ly | 2 +- make/out/lilypond.lsm | 8 +- make/out/lilypond.spec | 4 +- scm/generic-property.scm | 1 + 45 files changed, 449 insertions(+), 232 deletions(-) rename lily/{audio-item-info.cc => audio-element-info.cc} (77%) delete mode 100644 lily/include/script-engraver.hh create mode 100644 lily/line-number-engraver.cc diff --git a/CHANGES b/CHANGES index 7fd2dfd03f..075a01b1e1 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,38 @@ +1.3.22.hwn2 +=========== + +* Symbols opposite to stem (eg marcato) now get the proper glyph. + +* Breathing marks now have a direction by default. + +* Do set generic script properties. + +* Also put tuplet brackets under notes. + +* Score_element_info: only store origin of element, but not the path +to parent translators. Saves a little memory, and removes some complexity. + + +1.3.22.hwn1 +=========== + +* Autobeaming in time sigs that don't have 1/4 beats fixed. + +* (De)crescendi should now work. (Thanks Michael) + +* Better error reporting for conflicting time signatures. + +* Line_number_engraver: output locations of note head +definitions. Very handy when entering complicated scores. + +* Rewrote multi measure rest support: now they are entered as spanners +(\commandspanrequest \start "rest"). RXXXX is an abbreviation for +\commandspanrequest \start "rest" SXXXX \commandspanrequest \stop "rest". + +* Removed support of percent style repetitions. + +* Put texts outside the staff. + 1.3.21.mb1 ========== * Getopt bugfix: don't assert on certain errors. diff --git a/TODO b/TODO index 57b88fb58d..04eebc905c 100644 --- a/TODO +++ b/TODO @@ -11,11 +11,11 @@ Grep -i for TODO, FIXME and ugh/ugr/urg. .* TODO . * use hash tabs iso. alist_ for elt property? . * fix tremolos. +. * ROADMAP file. +. * change ) c4 to c4-) . * internationalize GUILE msgs. -gg . * unbroken marks. . * write smobifying howto. -. * tuplet spanner dir . * \property autoBeamOverRest (boolean). Don't stop for rests when autobeaming. ? . * put property test files in refman. @@ -23,8 +23,9 @@ gg . * alignment within @itemize . * interstaff stems . * junk dstream output. -. * agressive type-checking for SCM stuff. +. * Change website to be index to documentation. . * \prop slurdir in grace notes +. * \eltproperty "=Context" "Elt_name" "prop-name" #value . * script columns . * Must stop before this music ends: verse=\lyrics { diff --git a/VERSION b/VERSION index c12766d66b..8135fdaa69 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 -PATCH_LEVEL=22 +PATCH_LEVEL=23 MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a diff --git a/lib/include/input.hh b/lib/include/input.hh index 74ee72efe3..1c9e61ccbf 100644 --- a/lib/include/input.hh +++ b/lib/include/input.hh @@ -27,6 +27,7 @@ public: void set_spot (Input const &); Input spot () const; String location_str () const; + String line_number_str () const; Input (Source_file*, char const*); Input (); }; diff --git a/lib/input.cc b/lib/input.cc index db7c10ee1f..9413f7c49e 100644 --- a/lib/input.cc +++ b/lib/input.cc @@ -106,3 +106,11 @@ Input::location_str () const return "(" + _ ("position unknown") + ")"; } +String +Input::line_number_str () const +{ + if (source_file_l_) + return to_str (source_file_l_->line_i (defined_ch_C_)); + else + return "?"; +} diff --git a/lily/audio-item-info.cc b/lily/audio-element-info.cc similarity index 77% rename from lily/audio-item-info.cc rename to lily/audio-element-info.cc index 4be88d038d..5580b6f0b8 100644 --- a/lily/audio-item-info.cc +++ b/lily/audio-element-info.cc @@ -22,5 +22,8 @@ Audio_element_info::Audio_element_info() req_l_ = 0; } - - +Link_array +Audio_element_info::origin_trans_l_arr (Translator*) const +{ + return origin_trans_l_arr_; +} diff --git a/lily/bar-script-engraver.cc b/lily/bar-script-engraver.cc index bd85c3e6f2..0902c377e7 100644 --- a/lily/bar-script-engraver.cc +++ b/lily/bar-script-engraver.cc @@ -80,7 +80,7 @@ Bar_script_engraver::cast_to_interesting_item (Score_element *e) void Bar_script_engraver::acknowledge_element (Score_element_info inf) { - if (inf.origin_trans_l_arr_.size () == 1) + if (inf.origin_trans_l_arr (this).size () == 1) { Item *i=cast_to_interesting_item (inf.elem_l_); if (!i) @@ -89,7 +89,7 @@ Bar_script_engraver::acknowledge_element (Score_element_info inf) /* Only put numbers on bars that are at our own level (don't put numbers over the staffs of a GrandStaff, only over the GrandStaff itself */ - if (inf.origin_trans_l_arr_.size () != 1) + if (inf.origin_trans_l_arr (this).size () != 1) return; attach_script_to_item (i); diff --git a/lily/base-span-bar-engraver.cc b/lily/base-span-bar-engraver.cc index 7d4365fd1e..4636f957fa 100644 --- a/lily/base-span-bar-engraver.cc +++ b/lily/base-span-bar-engraver.cc @@ -28,7 +28,7 @@ Base_span_bar_engraver::get_span_bar_p() const void Base_span_bar_engraver::acknowledge_element (Score_element_info i) { - int depth = i.origin_trans_l_arr_.size(); + int depth = i.origin_trans_l_arr (this).size(); if (depth > 1 && dynamic_cast (i.elem_l_)) { diff --git a/lily/breathing-sign-engraver.cc b/lily/breathing-sign-engraver.cc index 669a606353..46761a934f 100644 --- a/lily/breathing-sign-engraver.cc +++ b/lily/breathing-sign-engraver.cc @@ -32,10 +32,11 @@ Breathing_sign_engraver::Breathing_sign_engraver() bool Breathing_sign_engraver::do_try_music (Music*r_l) { - if (Breathing_sign_req * b= dynamic_cast (r_l)) { - breathing_sign_req_l_ = b; - return true; - } + if (Breathing_sign_req * b= dynamic_cast (r_l)) + { + breathing_sign_req_l_ = b; + return true; + } return false; } @@ -43,28 +44,31 @@ Breathing_sign_engraver::do_try_music (Music*r_l) void Breathing_sign_engraver::do_process_requests() { - if(breathing_sign_req_l_) { - breathing_sign_p_ = new Breathing_sign; - Staff_symbol_referencer_interface st (breathing_sign_p_); - st.set_interface (); + if(breathing_sign_req_l_) + { + breathing_sign_p_ = new Breathing_sign; + breathing_sign_p_->set_elt_property ("break-aligned", SCM_BOOL_T); + Staff_symbol_referencer_interface st (breathing_sign_p_); + st.set_interface (); - announce_element (Score_element_info (breathing_sign_p_, breathing_sign_req_l_)); - } + announce_element (Score_element_info (breathing_sign_p_, breathing_sign_req_l_)); + } } void Breathing_sign_engraver::do_pre_move_processing() { - if(breathing_sign_p_) { - typeset_element(breathing_sign_p_); - breathing_sign_p_ = 0; - } + if(breathing_sign_p_) + { + typeset_element(breathing_sign_p_); + breathing_sign_p_ = 0; + } } void Breathing_sign_engraver::do_post_move_processing() { - breathing_sign_req_l_ = 0; + breathing_sign_req_l_ = 0; } ADD_THIS_TRANSLATOR(Breathing_sign_engraver); diff --git a/lily/breathing-sign.cc b/lily/breathing-sign.cc index 97460a490a..f6672d2059 100644 --- a/lily/breathing-sign.cc +++ b/lily/breathing-sign.cc @@ -31,20 +31,26 @@ Breathing_sign::do_brew_molecule_p () const { Staff_symbol_referencer_interface si (this); - Real dl = si.staff_space(); - Interval i1(0, dl / 6), i2(-dl / 2, dl / 2); + Real space = si.staff_space(); + Interval i1(0, space / 6), i2(-space / 2, space / 2); Box b(i1, i2); Molecule *output = new Molecule (lookup_l()->filledbox(b)); - + return output; } void Breathing_sign::do_post_processing() { - Real dl = Staff_symbol_referencer_interface (this).staff_space(); - - translate_axis(2.0 * dl * directional_element(this).get (), Y_AXIS); + Real space = staff_symbol_referencer (this).staff_space(); + Direction d = directional_element (this). get (); + if (!d) + { + d = UP; + directional_element(this).set (d); + } + + translate_axis(2.0 * space * d, Y_AXIS); } diff --git a/lily/command-request.cc b/lily/command-request.cc index 6975762e3e..e73c253d89 100644 --- a/lily/command-request.cc +++ b/lily/command-request.cc @@ -122,16 +122,20 @@ Break_req::Break_req () { } -Mark_req::Mark_req (String s) -{ - str_ = s; -} void Mark_req::do_print () const { DEBUG_OUT << str_; } + +bool +Mark_req::do_equal_b (Request const * r) const +{ + Mark_req const * other = dynamic_cast (r); + return other && other->str_ == str_; +} + void Key_change_req::transpose (Musical_pitch p) { diff --git a/lily/crescendo.cc b/lily/crescendo.cc index 02b31c40c4..b8d1744fb4 100644 --- a/lily/crescendo.cc +++ b/lily/crescendo.cc @@ -28,7 +28,7 @@ Crescendo::do_brew_molecule_p () const Real absdyn_dim = paper_l ()-> get_var ("crescendo_shorten"); Real extra_left = get_broken_left_end_align (); - SCM dir = get_elt_property("grow-dir"); + SCM dir = get_elt_property("grow-direction"); SCM dyns = get_elt_property ("dynamic-drul"); if (!isdir_b (dir) || !gh_pair_p (dyns)) diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 5f42b8ba80..c6c35a908f 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -42,6 +42,7 @@ protected: virtual void do_process_requests(); virtual void do_pre_move_processing(); virtual void do_post_move_processing(); + virtual void typeset_element (Score_element*); }; @@ -114,7 +115,6 @@ Dynamic_engraver::do_process_requests() text_p_->set_elt_property ("style", gh_str02scm ("dynamic")); text_p_->set_elt_property ("script-priority", gh_int2scm (100)); - text_p_->set_elt_property ("staff-support", SCM_BOOL_T); Side_position_interface (text_p_).set_axis (Y_AXIS); @@ -170,10 +170,7 @@ Dynamic_engraver::do_process_requests() ->set_elt_property ("grow-direction", gh_int2scm ((span_l->span_type_str_ == "crescendo") ? BIGGER : SMALLER)); - new_cresc_p->set_elt_property ("staff-support", SCM_BOOL_T); - - - Side_position_interface (new_cresc_p).set_axis (Y_AXIS); + side_position (new_cresc_p).set_axis (Y_AXIS); announce_element (Score_element_info (new_cresc_p, span_l)); } } @@ -185,7 +182,6 @@ Dynamic_engraver::do_process_requests() { ::warning (_ ("Too many crescendi here")); - typeset_element (cresc_p_); cresc_p_ = 0; @@ -247,6 +243,12 @@ Dynamic_engraver::typeset_all () } } +void +Dynamic_engraver::typeset_element (Score_element * e) +{ + side_position(e).add_staff_support (); + Engraver::typeset_element (e); +} void Dynamic_engraver::acknowledge_element (Score_element_info i) diff --git a/lily/engraver-group-engraver.cc b/lily/engraver-group-engraver.cc index 75f16950d0..f33939c62a 100644 --- a/lily/engraver-group-engraver.cc +++ b/lily/engraver-group-engraver.cc @@ -48,7 +48,7 @@ Engraver_group_engraver::do_announces() if (!dynamic_cast (p->car_)) { Engraver * eng = dynamic_cast (p->car_); - if (eng && eng!= info.origin_trans_l_arr_[0]) + if (eng && eng!= info.origin_trans_l_arr (this)[0]) eng->acknowledge_element (info); } } diff --git a/lily/engraver.cc b/lily/engraver.cc index 9688c2b347..7b2fb0c90c 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -23,7 +23,8 @@ Engraver::fill_staff_info (Staff_info&) void Engraver::announce_element (Score_element_info i) { - i.origin_trans_l_arr_.push (this); + if (!i.origin_trans_l_) + i.origin_trans_l_ = this; daddy_grav_l()->announce_element (i); } diff --git a/lily/include/audio-element-info.hh b/lily/include/audio-element-info.hh index 293fff867b..a247fc9c5e 100644 --- a/lily/include/audio-element-info.hh +++ b/lily/include/audio-element-info.hh @@ -20,6 +20,7 @@ struct Audio_element_info { Audio_element * elem_l_; Music *req_l_; Link_array origin_trans_l_arr_; + Link_array origin_trans_l_arr (Translator*) const; Audio_element_info (Audio_element*, Music*); Audio_element_info(); diff --git a/lily/include/breathing-sign.hh b/lily/include/breathing-sign.hh index aff6f393b4..bda300aaa0 100644 --- a/lily/include/breathing-sign.hh +++ b/lily/include/breathing-sign.hh @@ -18,10 +18,6 @@ class Breathing_sign : public Item public: VIRTUAL_COPY_CONS(Score_element); Breathing_sign (); - - void set_vertical_position (Direction); - - protected: virtual void do_post_processing (); virtual Molecule* do_brew_molecule_p () const; diff --git a/lily/include/command-request.hh b/lily/include/command-request.hh index 3bb3474ac0..c1efa26c43 100644 --- a/lily/include/command-request.hh +++ b/lily/include/command-request.hh @@ -26,9 +26,9 @@ protected: class Mark_req : public Request { public: - Mark_req (String); String str_; protected: + virtual bool do_equal_b (Request const*) const; virtual void do_print () const; VIRTUAL_COPY_CONS(Music); }; diff --git a/lily/include/musical-request.hh b/lily/include/musical-request.hh index 37f3d6ad09..dbabc86edd 100644 --- a/lily/include/musical-request.hh +++ b/lily/include/musical-request.hh @@ -135,22 +135,6 @@ public: VIRTUAL_COPY_CONS(Music); }; -/** - Part: typeset a measure with the number of measures rest - Score: typeset all individual measures as full rests - */ -class Multi_measure_rest_req : public Rhythmic_req { -public: - VIRTUAL_COPY_CONS(Music); -}; - -/** - Typeset a repetition sign in each bar. - */ -class Repetitions_req : public Rhythmic_req { -public: - VIRTUAL_COPY_CONS(Music); -}; /// an extender line class Extender_req : public Request { diff --git a/lily/include/score-element-info.hh b/lily/include/score-element-info.hh index 4d9ede8691..ac5ca85575 100644 --- a/lily/include/score-element-info.hh +++ b/lily/include/score-element-info.hh @@ -14,15 +14,21 @@ #include "parray.hh" /** - Data container for broadcasts + Data container for broadcasts. + + TODO: Store this in element info! */ struct Score_element_info { - Score_element * elem_l_; - Music *req_l_; - Link_array origin_trans_l_arr_; + Translator * origin_trans_l_; + friend Engraver; +public: + Link_array origin_trans_l_arr (Translator*) const; + Score_element * elem_l_; + Music *req_l_; + - Score_element_info (Score_element*, Music*); - Score_element_info(); + Score_element_info (Score_element*, Music*); + Score_element_info(); }; diff --git a/lily/include/script-engraver.hh b/lily/include/script-engraver.hh deleted file mode 100644 index b4862c1317..0000000000 --- a/lily/include/script-engraver.hh +++ /dev/null @@ -1,30 +0,0 @@ -/* - script-engraver.hh -- part of GNU LilyPond - - (c) 1997--2000 Han-Wen Nienhuys -*/ - - -#ifndef Script_GRAV -#define Script_GRAV - -#include "engraver.hh" - - -class Script_engraver : public Engraver { - Link_array