From 8d7a55721e3305f745c0b24c367de002dd197825 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Wed, 27 Feb 2002 16:20:08 +0100 Subject: [PATCH] release: 1.5.34 --- ChangeLog | 31 ++++++++ Documentation/GNUmakefile | 2 +- Documentation/regression-test.tely | 5 +- Documentation/user/refman.itely | 26 +++--- VERSION | 2 +- input/regression/rest-pitch.ly | 16 ++++ input/regression/staccato-pos.ly | 8 +- lily/accidental-engraver.cc | 2 +- lily/align-interface.cc | 4 +- lily/bar.cc | 2 +- lily/break-align-item.cc | 8 +- lily/collision.cc | 8 +- lily/dynamic-performer.cc | 2 +- lily/grob.cc | 10 ++- lily/include/main.hh | 2 + lily/instrument-name-engraver.cc | 6 +- lily/item.cc | 2 +- lily/lily-guile.cc | 20 ++++- lily/main.cc | 4 +- lily/midi-item.cc | 2 +- lily/music.cc | 10 ++- lily/my-lily-lexer.cc | 1 + lily/note-column.cc | 9 ++- lily/parser.yy | 26 ++++-- lily/piano-pedal-performer.cc | 2 +- lily/property-iterator.cc | 12 +-- lily/request-chord.cc | 23 ++++-- lily/rest-collision.cc | 2 + lily/rest-engraver.cc | 25 ++++-- lily/scm-option.cc | 34 +++++--- lily/script-engraver.cc | 8 +- lily/script.cc | 2 +- lily/separating-group-spanner.cc | 100 +----------------------- lily/staff-symbol-referencer.cc | 6 +- lily/system-start-delimiter-engraver.cc | 12 +-- lily/system-start-delimiter.cc | 4 +- lily/third-try.cc | 6 +- lily/translator-def.cc | 11 +-- lily/translator-group.cc | 10 ++- lily/volta-engraver.cc | 7 -- ly/engraver-init.ly | 20 ++--- ly/performer-init.ly | 2 +- make/ly-rules.make | 9 ++- make/out/lilypond.lsm | 8 +- make/out/lilypond.mandrake.spec | 2 +- make/out/lilypond.redhat.spec | 4 +- make/out/lilypond.suse.spec | 4 +- scm/backend-documentation-lib.scm | 1 - scm/basic-properties.scm | 62 +++++++-------- scm/c++.scm | 6 +- scm/drums.scm | 2 +- scm/grob-description.scm | 12 +-- scm/grob-property-description.scm | 43 ++++++++-- scm/interface-description.scm | 2 +- scm/music-functions.scm | 25 +++--- scm/music-property-description.scm | 16 ++-- scm/ps.scm | 4 +- scm/translator-property-description.scm | 23 +++++- scripts/convert-ly.py | 6 ++ scripts/lilypond-book.py | 8 +- 60 files changed, 419 insertions(+), 312 deletions(-) create mode 100644 input/regression/rest-pitch.ly diff --git a/ChangeLog b/ChangeLog index 0d0686bc4f..c8671a34e7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,34 @@ +2002-02-27 Han-Wen Nienhuys + + * VERSION: 1.5.34 released. + + * lily/rest-engraver.cc (create_grobs): rests can have pitches. + + * lily/staff-symbol-referencer.cc (callback): assume that + staff-position is unset in general. + + * input/regression/rest-pitch.ly: new file. + + * lily/parser.yy (simple_element): rests can have pitch. Syntax: + a4\rest + +2002-02-26 Han-Wen Nienhuys + + * lily/scm-option.cc (set_lily_option): add internal-type-checks + as Scheme option. Run regression test by default with + internal-type-checking. + + * lily/separating-group-spanner.cc (find_musical_sequences): removed. + + * lily/lily-guile.cc (type_check_assignment): changed functions. + + * scm/*description*.scm: be anal about typechecks. Some changes + for internal variable names. + +2002-02-25 Han-Wen Nienhuys + + * scm/ps.scm: -f ps output for GUILE 1.4 and 1.3.4 + 2002-02-25 Han-Wen * VERSION: 1.5.33 released. diff --git a/Documentation/GNUmakefile b/Documentation/GNUmakefile index 0dd22f2f2e..bda53f7212 100644 --- a/Documentation/GNUmakefile +++ b/Documentation/GNUmakefile @@ -4,7 +4,7 @@ NAME = documentation SUBDIRS=user bibliography pictures topdocs misc windows STEPMAKE_TEMPLATES=documentation texinfo tex LOCALSTEPMAKE_TEMPLATES=lilypond ly - +LILYPOND_BOOK_FLAGS=--extra-options '-e "(set-lily-option (quote internal-type-checking) \#t)"' README_TOP_FILES=NEWS DEDICATION CHANGES EXTRA_DIST_FILES= diff --git a/Documentation/regression-test.tely b/Documentation/regression-test.tely index 6dbe5dd5b9..208904fae8 100644 --- a/Documentation/regression-test.tely +++ b/Documentation/regression-test.tely @@ -39,6 +39,7 @@ documenting bugfixes. @lilypondfile[printfilename]{mm-rests2.ly} +@lilypondfile[printfilename]{rest-pitch.ly} @section Accidentals @@ -64,7 +65,6 @@ Accidentals are currently in a development stage. @lilypondfile[printfilename]{stem-direction-down.ly} - @section Scripts @lilypondfile[printfilename]{staccato-pos.ly} @@ -114,6 +114,8 @@ Grace note do weird things with timing. Fragile. @lilypondfile[printfilename]{grace-sync.ly} +@lilypondfile[printfilename]{grace-bar-number.ly} + @section Beams @@ -280,6 +282,7 @@ Grace note do weird things with timing. Fragile. @lilypondfile[printfilename]{part-combine.ly} +@lilypondfile[printfilename]{font-magnification.ly} @lilypondfile[printfilename,nofragment]{size11.ly} diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index cad14bd54a..133e45f318 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -255,6 +255,14 @@ r1 r2 r4 r8 The grob is @internalsref{Rest}. Whole bar rests centered in the bar are specified using @code{R}, see @ref{Multi measure rests}. +For polyphonic music, it can be convenient to specify the rest position +directly. You can do that by entering a note, with the keyword +@code{\rest} appended, e.g. Rest collisions will leave these rests alone. + +@lilypond[singleline,verbatim] +a'4\rest d'4\rest +@end lilypond + @c . {Skips} @c FIXME: naming. @@ -855,12 +863,10 @@ The easiest way to enter such fragments, is the Scheme function @code{\\}, to make multiple voices. You can use it for small, short-lived voices (make a chord of voices) or for single chords: -@lilypond -\score { -\notes \context Voice = VA \apply #voicify-music \relative c'' { +@lilypond[verbatim,fragment] +\context Voice = VA \apply #voicify-music \relative c'' { c4 < { f d e } \\ { b c2 } > c4 < g' \\ c, \\ f \\ d > } -} @end lilypond The function @code{voicify-music} instantiates @internalsref{Voice} @@ -2869,12 +2875,11 @@ block: Figured bass is printed by @internalsref{FiguredBass} context. This context will print notes (relative to the central C) as figures. To -ease entering these notes, the special @code{\figures} mode, is +ease entering these notes, the special @code{\figures} mode is available which allows you to type numbers, like @code{<4 6+>}. -@lilypond -\score { \notes < - \context FiguredBass \transpose c'' { +@lilypond[verbatim,fragment] +< \context FiguredBass \transpose c'' { \figures { @@ -2884,10 +2889,7 @@ available which allows you to type numbers, like @code{<4 6+>}. } \context Voice { c g8 g f4 d c - } - -> - } + } > @end lilypond @c . {Tuning output} diff --git a/VERSION b/VERSION index f0962d6456..01b2d92cf8 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=5 -PATCH_LEVEL=33 +PATCH_LEVEL=34 MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a diff --git a/input/regression/rest-pitch.ly b/input/regression/rest-pitch.ly new file mode 100644 index 0000000000..e864dade12 --- /dev/null +++ b/input/regression/rest-pitch.ly @@ -0,0 +1,16 @@ +\header { + +texidoc = "Rests can have pitches--these will be affected by +transposition and relativization. If a rest has a pitch, rest +collision will leave it alone." + +} + +\score { \notes\relative c'' \apply #voicify-music +{ + a4\rest b4\rest c4\rest + + + +} +} diff --git a/input/regression/staccato-pos.ly b/input/regression/staccato-pos.ly index 38ff46b086..053307faa7 100644 --- a/input/regression/staccato-pos.ly +++ b/input/regression/staccato-pos.ly @@ -7,14 +7,10 @@ not be on staff lines. " } \score { - \context Voice \notes\relative c { - - e''4-. f-. d-. - c,-. b-. c'''-. d-. - + \context Voice \notes\relative c' { + e'4-. f-. d-. c-. b-. } \paper { linewidth=-1.0 } - \midi { } } diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc index 9134f01ec0..14dd955cd3 100644 --- a/lily/accidental-engraver.cc +++ b/lily/accidental-engraver.cc @@ -215,7 +215,7 @@ Accidental_engraver::create_grobs () tie_break_reminder); Side_position_interface::add_support (key_item_p_,support_l); - support_l->set_grob_property ("accidentals", key_item_p_->self_scm ()); + support_l->set_grob_property ("accidentals-grob", key_item_p_->self_scm ()); } diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 15f8ec254b..0ab7a87b1b 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -110,7 +110,7 @@ Align_interface::align_to_fixed_distance (Grob *me , Axis a) /* Hairy function to put elements where they should be. Can be tweaked - from the outside by setting minimum-space and extra-space in its + from the outside by setting minimum-space-pair and extra-space in its children We assume that the children the refpoints of the children are still @@ -159,7 +159,7 @@ Align_interface::align_elements_to_extents (Grob * me, Axis a) Grob *e =dynamic_cast (all_grobs[i]); // todo: fucks up if item both in Halign & Valign. - SCM min_dims = e->remove_grob_property ("minimum-space"); + SCM min_dims = e->remove_grob_property ("minimum-space-pair"); if (gh_pair_p (min_dims) && gh_number_p (ly_car (min_dims)) && gh_number_p (ly_cdr (min_dims))) diff --git a/lily/bar.cc b/lily/bar.cc index 7ad1f12693..a390189a92 100644 --- a/lily/bar.cc +++ b/lily/bar.cc @@ -153,7 +153,7 @@ Bar::before_line_breaking (SCM smob) if (!gh_string_p (g)) { - me->set_grob_property ("molecule-callback", SCM_BOOL_T); + me->set_grob_property ("molecule-callback", SCM_EOL); me->set_extent_callback (SCM_EOL, X_AXIS); // leave y_extent for spanbar? } diff --git a/lily/break-align-item.cc b/lily/break-align-item.cc index fece962363..1c757807e2 100644 --- a/lily/break-align-item.cc +++ b/lily/break-align-item.cc @@ -136,7 +136,7 @@ Break_align_interface::do_alignment (Grob *me) warning (_f ("unknown spacing pair `%s', `%s'", ly_symbol2string (current_origin), ly_symbol2string (next_origin))); - extra_space = scm_list_n (ly_symbol2scm ("minimum-space"), gh_double2scm (0.0), SCM_UNDEFINED); + extra_space = scm_list_n (ly_symbol2scm ("minimum-space-pair"), gh_double2scm (0.0), SCM_UNDEFINED); } SCM symbol = ly_car (extra_space); @@ -161,14 +161,14 @@ Break_align_interface::do_alignment (Grob *me) // urg - SCM first_pair = elems[0]->get_grob_property ("minimum-space"); + SCM first_pair = elems[0]->get_grob_property ("minimum-space-pair"); if (gh_pair_p (first_pair)) first_pair = first_pair; else first_pair = gh_cons (gh_double2scm (0.0), gh_double2scm (0.0)); scm_set_car_x (first_pair, gh_double2scm (-dists[0])); - elems[0]->set_grob_property ("minimum-space", first_pair); + elems[0]->set_grob_property ("minimum-space-pair", first_pair); Direction bsd = item->break_status_dir (); if (bsd == LEFT) @@ -203,7 +203,7 @@ Break_align_interface::do_alignment (Grob *me) spring_len += dists.top (); stretch_distance = dists.top (); } - else if (ly_car (symbol_list) == ly_symbol2scm ("minimum-space")) + else if (ly_car (symbol_list) == ly_symbol2scm ("minimum-space-pair")) { spring_len = spring_len >? dists.top (); stretch_distance = spring_len; diff --git a/lily/collision.cc b/lily/collision.cc index 7ae57a8ec6..2dea673021 100644 --- a/lily/collision.cc +++ b/lily/collision.cc @@ -25,12 +25,10 @@ Collision::force_shift_callback (SCM element_smob, SCM axis) assert (a == X_AXIS); me = me->get_parent (a); - /* - ugh. the way DONE is done is not clean - */ - if (!unsmob_grob (me->get_grob_property ("done"))) + + if (! to_boolean (me->get_grob_property ("collision-done"))) { - me->set_grob_property ("done", me->self_scm ()); + me->set_grob_property ("collision-done", SCM_BOOL_T); do_shifts (me); } diff --git a/lily/dynamic-performer.cc b/lily/dynamic-performer.cc index a08c500dce..86a1b5e0a2 100644 --- a/lily/dynamic-performer.cc +++ b/lily/dynamic-performer.cc @@ -135,4 +135,4 @@ Dynamic_performer::try_music (Music* r) } ENTER_DESCRIPTION(Dynamic_performer, - "","","","",""); + "","","","dynamicAbsoluteVolumeFunction midiMaximumVolume midiMinimumVolume midiInstrument instrumentEqualizer",""); diff --git a/lily/grob.cc b/lily/grob.cc index e9025beb46..4077188023 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -168,10 +168,15 @@ Grob::set_immutable_grob_property (SCM s, SCM v) } #endif - void Grob::internal_set_grob_property (SCM s, SCM v) { +#ifndef NDEBUG + if (internal_type_checking_global_b) + assert (type_check_assignment (s, v, ly_symbol2scm ("backend-type?"))); +#endif + + mutable_property_alist_ = scm_assq_set_x (mutable_property_alist_, s, v); } @@ -818,6 +823,9 @@ ly_set_grob_property (SCM elt, SCM sym, SCM val) return SCM_UNSPECIFIED; } + if (!type_check_assignment (sym, val, ly_symbol2scm ("backend-type?"))) + return SCM_UNSPECIFIED; + if (sc) { sc->internal_set_grob_property (sym, val); diff --git a/lily/include/main.hh b/lily/include/main.hh index 69cc315faf..0fadb2524a 100644 --- a/lily/include/main.hh +++ b/lily/include/main.hh @@ -31,6 +31,8 @@ extern String output_name_global; extern bool safe_global_b; extern bool verbose_global_b; extern bool store_locations_global_b; +extern bool internal_type_checking_global_b; + /* misc */ extern All_font_metrics *all_fonts_global_p; diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index 18fc78f86f..884c39025b 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -1,5 +1,5 @@ /* - new-staff-margin-engraver.cc -- implement Instrument_name_engraver + instrument-name-engraver.cc -- implement Instrument_name_engraver source file of the GNU LilyPond music typesetter @@ -101,6 +101,10 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i) but is only a vehicle for the placement routine it contains, and therefore the location of its refpoint won't be very useful. + + We could also just use staffsFound, but lets keep this working + without staffs as well. + */ if (dynamic_cast (i.grob_l_) && ((Axis_group_interface::has_interface (i.grob_l_) diff --git a/lily/item.cc b/lily/item.cc index e92ac8ac90..b07210f8bc 100644 --- a/lily/item.cc +++ b/lily/item.cc @@ -173,7 +173,7 @@ Item::handle_prebroken_dependencies () set_extent_callback (SCM_EOL, Y_AXIS); } else if (trans) - set_grob_property ("molecule-callback", SCM_BOOL_T); + set_grob_property ("molecule-callback", SCM_EOL); } } diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index c70f40e482..12b925a567 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -609,9 +609,20 @@ SCM my_gh_symbol2scm (const char* x) bool -type_check_assignment (SCM val, SCM sym, SCM type_symbol) +type_check_assignment (SCM sym, SCM val, SCM type_symbol) { bool ok = true; + + /* + Always succeeds. + + + TODO: should remove #f from allowed vals? + */ + if (val == SCM_EOL || val == SCM_BOOL_F) + return ok; + + SCM type_p = SCM_EOL; if (gh_symbol_p (sym)) @@ -619,8 +630,11 @@ type_check_assignment (SCM val, SCM sym, SCM type_symbol) if (type_p != SCM_EOL && !gh_procedure_p (type_p)) { - warning (_f ("Can't find property type-check for `%s'. Perhaps you made a typing error? Doing assignment anyway.", - ly_symbol2string (sym).ch_C ())); + warning (_f ("Can't find property type-check for `%s' (%s). Perhaps you made a typing error? Doing assignment anyway.", + ly_symbol2string (sym).ch_C (), + ly_symbol2string (type_symbol).ch_C () + + )); } else { diff --git a/lily/main.cc b/lily/main.cc index d1158824c1..37d8dfff9e 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -103,8 +103,8 @@ static Getopt_long *oparser_p_static = 0; follow regular localisation guidelines). */ static Long_option_init options_static[] = { - /* print example usage: lilypond -e "(set-lily-option 'help 0)" ? */ - {_i ("EXPR"), "evaluate", 'e',_i ("evalute EXPR as Scheme after .scm init is read")}, + /* print example usage: lilypond -e "" ? */ + {_i ("EXPR"), "evaluate", 'e',_i ("Scheme options: try -e \"(set-lily-option 'help 0)\" for more help.")}, /* another bug in option parser: --output=foe is taken as an abbreviation for --output-format */ {_i ("EXT"), "format", 'f', _i ("use output format EXT (tex [default], pdftex, ps, scm or as)")}, diff --git a/lily/midi-item.cc b/lily/midi-item.cc index f894ce7f00..0203c2a9ce 100644 --- a/lily/midi-item.cc +++ b/lily/midi-item.cc @@ -330,7 +330,7 @@ Midi_piano_pedal::str () const str += to_str ((char)0x42); else if (audio_l_->type_str_ == "Sustain") str += to_str ((char)0x40); - else if (audio_l_->type_str_ == "UnaChorda") + else if (audio_l_->type_str_ == "UnaCorda") str += to_str ((char)0x43); int pedal = ((1 - audio_l_->dir_) / 2) * 0x7f; diff --git a/lily/music.cc b/lily/music.cc index 597afc58b2..b00c8519d6 100644 --- a/lily/music.cc +++ b/lily/music.cc @@ -6,6 +6,7 @@ (c) 1997--2002 Han-Wen Nienhuys */ +#include "main.hh" #include "input-smob.hh" #include "music.hh" #include "music-list.hh" @@ -167,9 +168,16 @@ Music::internal_get_mus_property (SCM sym) const } + void Music::internal_set_mus_property (SCM s, SCM v) { +#ifndef NDEBUG + if (internal_type_checking_global_b) + assert (type_check_assignment (s, v, ly_symbol2scm ("backend-type?"))); +#endif + + mutable_property_alist_ = scm_assq_set_x (mutable_property_alist_, s, v); } @@ -238,7 +246,7 @@ ly_set_mus_property (SCM mus, SCM sym, SCM val) } - bool ok = type_check_assignment (val, sym, ly_symbol2scm ("music-type?")); + bool ok = type_check_assignment (sym, val, ly_symbol2scm ("music-type?")); if (ok) { sc->internal_set_mus_property (sym, val); diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index 658b052771..767ebf54a2 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -69,6 +69,7 @@ static Keyword_ent the_key_tab[]={ {"outputproperty", OUTPUTPROPERTY}, {"override", OVERRIDE}, {"set", SET}, + {"rest", REST}, {"revert", REVERT}, {"partial", PARTIAL}, {"paper", PAPER}, diff --git a/lily/note-column.cc b/lily/note-column.cc index 27fd96730a..b53a18deb4 100644 --- a/lily/note-column.cc +++ b/lily/note-column.cc @@ -105,13 +105,14 @@ Note_column::add_head (Grob*me,Grob *h) } /** - translate the rest symbols vertically by amount DY_I. - */ + translate the rest symbols vertically by amount DY_I, but only if + they have no staff-position set. +*/ void Note_column::translate_rests (Grob*me,int dy_i) { Grob * r = unsmob_grob (me->get_grob_property ("rest")); - if (r) + if (r && !gh_number_p (r->get_grob_property ("staff-position"))) { r->translate_axis (dy_i * Staff_symbol_referencer::staff_space (r)/2.0, Y_AXIS); } @@ -150,7 +151,7 @@ Note_column::accidentals (Grob *me) for (;gh_pair_p (heads); heads =gh_cdr (heads)) { Grob * h = unsmob_grob (gh_car (heads)); - Grob *a = h ? unsmob_grob(h->get_grob_property ("accidentals")) : 0; + Grob *a = h ? unsmob_grob(h->get_grob_property ("accidentals-grob")) : 0; if (a) return a; } diff --git a/lily/parser.yy b/lily/parser.yy index 4f39421694..88e09abb57 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -239,13 +239,14 @@ yylex (YYSTYPE *s, void * v_l) %token TYPE %token UNSET %token CONTEXT +%token REST /* escaped */ %token E_CHAR E_EXCLAMATION E_SMALLER E_BIGGER E_OPEN E_CLOSE E_TILDE %token E_BACKSLASH %token CHORD_BASS CHORD_COLON CHORD_MINUS CHORD_CARET -%type exclamations questions dots +%type exclamations questions dots optional_rest %type bass_number bass_mod %type bass_figure figure_list figure_spec %token DIGIT @@ -1034,7 +1035,7 @@ property_def: Music *t = new Music (SCM_EOL); t->set_mus_property ("iterator-ctor", Push_property_iterator::constructor_cxx_function); - t->set_mus_property ("symbols", scm_string_to_symbol ($4)); + t->set_mus_property ("symbol", scm_string_to_symbol ($4)); t->set_mus_property ("pop-first", SCM_BOOL_T); t->set_mus_property ("grob-property", $6); t->set_mus_property ("grob-value", $8); @@ -1050,7 +1051,7 @@ property_def: Music *t = new Music (SCM_EOL); t->set_mus_property ("iterator-ctor", Push_property_iterator::constructor_cxx_function); - t->set_mus_property ("symbols", scm_string_to_symbol ($4)); + t->set_mus_property ("symbol", scm_string_to_symbol ($4)); t->set_mus_property ("grob-property", $6); t->set_mus_property ("grob-value", $8); Context_specced_music *csm = new Context_specced_music (SCM_EOL); @@ -1066,7 +1067,7 @@ property_def: Music *t = new Music (SCM_EOL); t->set_mus_property ("iterator-ctor", Pop_property_iterator::constructor_cxx_function); - t->set_mus_property ("symbols", scm_string_to_symbol ($4)); + t->set_mus_property ("symbol", scm_string_to_symbol ($4)); t->set_mus_property ("grob-property", $6); Context_specced_music *csm = new Context_specced_music (SCM_EOL); @@ -1750,18 +1751,29 @@ figure_spec: } ; + +optional_rest: + /**/ { $$ = 0; } + | REST { $$ = 1; } + ; + simple_element: - pitch exclamations questions optional_notemode_duration { + pitch exclamations questions optional_notemode_duration optional_rest { Input i = THIS->pop_spot (); if (!THIS->lexer_p_->note_state_b ()) THIS->parser_error (_ ("Have to be in Note mode for notes")); - Note_req *n = new Note_req; + Music *n = 0; + if ($5) + n = new Rest_req ; + else + n = new Note_req; n->set_mus_property ("pitch", $1); n->set_mus_property ("duration", $4); + if ($3 % 2) n->set_mus_property ("cautionary", SCM_BOOL_T); if ($2 % 2 || $3 % 2) @@ -1769,7 +1781,7 @@ simple_element: Simultaneous_music*v = new Request_chord (SCM_EOL); v->set_mus_property ("elements", scm_list_n (n->self_scm (), SCM_UNDEFINED)); - + v->set_spot (i); n->set_spot (i); $$ = v; diff --git a/lily/piano-pedal-performer.cc b/lily/piano-pedal-performer.cc index 798877414b..fd32e92684 100644 --- a/lily/piano-pedal-performer.cc +++ b/lily/piano-pedal-performer.cc @@ -55,7 +55,7 @@ Piano_pedal_performer::initialize () info_alist_ = new Pedal_info[4]; Pedal_info *p = info_alist_; - char * names [] = { "Sostenuto", "Sustain", "UnaChorda", 0 }; + char * names [] = { "Sostenuto", "Sustain", "UnaCorda", 0 }; char **np = names ; do { diff --git a/lily/property-iterator.cc b/lily/property-iterator.cc index 726a79bf1d..ad4452a3ee 100644 --- a/lily/property-iterator.cc +++ b/lily/property-iterator.cc @@ -24,7 +24,7 @@ Property_iterator::process (Moment m) SCM val = music_l ()->get_mus_property ("value"); bool ok= true; if (val != SCM_EOL) - ok = type_check_assignment (val, sym, ly_symbol2scm ("translation-type?")); + ok = type_check_assignment (sym, val, ly_symbol2scm ("translation-type?")); if (ok) report_to_l ()->internal_set_property (sym, val); } @@ -46,15 +46,15 @@ Property_unset_iterator::process (Moment m) void Push_property_iterator::process (Moment m) { - SCM syms = music_l ()->get_mus_property ("symbols"); + SCM sym = music_l ()->get_mus_property ("symbol"); SCM eprop = music_l ()->get_mus_property ("grob-property"); SCM val = music_l ()->get_mus_property ("grob-value"); if (to_boolean (music_l ()->get_mus_property ("pop-first"))) Translator_def::apply_pushpop_property (report_to_l (), - syms, eprop, SCM_UNDEFINED); + sym, eprop, SCM_UNDEFINED); - Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, val); + Translator_def::apply_pushpop_property (report_to_l (), sym, eprop, val); Simple_music_iterator::process (m); } @@ -62,9 +62,9 @@ Push_property_iterator::process (Moment m) void Pop_property_iterator::process (Moment m) { - SCM syms = music_l ()->get_mus_property ("symbols"); + SCM sym = music_l ()->get_mus_property ("symbol"); SCM eprop = music_l ()->get_mus_property ("grob-property"); - Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, SCM_UNDEFINED); + Translator_def::apply_pushpop_property (report_to_l (), sym, eprop, SCM_UNDEFINED); Simple_music_iterator::process (m); } diff --git a/lily/request-chord.cc b/lily/request-chord.cc index 170d4996df..322cf49e03 100644 --- a/lily/request-chord.cc +++ b/lily/request-chord.cc @@ -22,15 +22,26 @@ Request_chord::to_relative_octave (Pitch last) for (SCM s = music_list (); gh_pair_p (s); s = ly_cdr (s)) { Music * mus = unsmob_music (ly_car (s)); - if (Melodic_req *m= dynamic_cast (mus)) + Melodic_req *m= dynamic_cast (mus); + + /* + kLudge: rests have pitches now as well. + */ + Rest_req *r = dynamic_cast (mus); + + if (r || m) { - Pitch pit = *unsmob_pitch (m->get_mus_property ("pitch")); + Pitch *old_pit = unsmob_pitch (mus->get_mus_property ("pitch")); + if (!old_pit) + continue; - pit.to_relative_octave (last); - m->set_mus_property ("pitch", pit.smobbed_copy ()); - - return pit; + Pitch new_pit = *old_pit; + new_pit.to_relative_octave (last); + mus->set_mus_property ("pitch", new_pit.smobbed_copy ()); + + return new_pit; } + } return last; } diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc index 4edc714963..9f4588d0ed 100644 --- a/lily/rest-collision.cc +++ b/lily/rest-collision.cc @@ -33,6 +33,8 @@ Rest_collision::force_shift_callback (SCM element_smob, SCM axis) { /* Done: destruct pointers, so we do the shift only once. + + TODO: use rest-collision-done */ SCM elts = rc->get_grob_property ("elements"); rc->set_grob_property ("elements", SCM_EOL); diff --git a/lily/rest-engraver.cc b/lily/rest-engraver.cc index 72582135c2..cb92159fec 100644 --- a/lily/rest-engraver.cc +++ b/lily/rest-engraver.cc @@ -22,10 +22,9 @@ protected: virtual bool try_music (Music *); virtual void stop_translation_timestep (); virtual void start_translation_timestep (); - virtual void create_grobs (); + virtual void process_music (); public: - TRANSLATOR_DECLARATIONS(Rest_engraver); }; @@ -62,13 +61,13 @@ Rest_engraver::stop_translation_timestep () } void -Rest_engraver::create_grobs () +Rest_engraver::process_music () { if (rest_req_l_ && !rest_p_) { rest_p_ = new Item (get_property ("Rest")); Rhythmic_head::set_interface (rest_p_); - Staff_symbol_referencer::set_interface (rest_p_); + int durlog = unsmob_duration (rest_req_l_->get_mus_property ("duration"))-> duration_log (); @@ -87,6 +86,22 @@ Rest_engraver::create_grobs () announce_grob (dot_p_, SCM_EOL); } + Pitch *p = unsmob_pitch (rest_req_l_->get_mus_property ("pitch")); + + /* + This is ridiculous -- rests don't have pitch, but we act as if + our nose is bleeding. + */ + if (p) + { + int pos= p->steps (); + SCM c0 = get_property ("centralCPosition"); + if (gh_number_p (c0)) + pos += gh_scm2int (c0); + + rest_p_->set_grob_property ("staff-position", gh_int2scm (pos)); + } + announce_grob(rest_p_, rest_req_l_->self_scm()); } } @@ -108,5 +123,5 @@ ENTER_DESCRIPTION(Rest_engraver, /* descr */ "", /* creats*/ "Rest Dots", /* acks */ "", -/* reads */ "", +/* reads */ "centralCPosition", /* write */ ""); diff --git a/lily/scm-option.cc b/lily/scm-option.cc index 5e38876b0d..2eac1482ac 100644 --- a/lily/scm-option.cc +++ b/lily/scm-option.cc @@ -33,7 +33,10 @@ bool midi_debug_global_b; /* General purpose testing flag */ int testing_level_global; - +/* + crash if internally the wrong type is used for a grob property. + */ +bool internal_type_checking_global_b; /* @@ -59,15 +62,22 @@ set_lily_option (SCM var, SCM val) */ if (var == ly_symbol2scm ("help")) { - cout << '\n'; - cout << _ ("Scheme options:"); - cout << '\n'; - cout << " help (any-symbol)"; - cout << '\n'; - cout << " midi-debug (boolean)"; - cout << '\n'; - cout << " testing-level (int)"; - cout << '\n'; + cout << _("lilypond -e EXPR means + +evalute EXPR as Scheme after init.scm has been read. In particular, +the function set-lily-option allows for access to some internal +variables. Usage: + + (set-lily-option SYMBOL VAL) + +possible options for SYMBOL are : +")< use result of articulation-to-scriptdef directly as basic prop list. Grob *p =new Item (get_property ("Script")); art = ly_cdr (art); - p->set_grob_property ("molecule", ly_car (art)); + p->set_grob_property ("script-molecule", ly_car (art)); art = ly_cdr (art); bool follow_staff = gh_scm2bool (ly_car (art)); @@ -96,7 +96,7 @@ Script_engraver::process_music () SCM axisprop = get_property ("scriptHorizontal"); bool xaxis = to_boolean (axisprop); Side_position_interface::set_axis (p, xaxis ? X_AXIS : Y_AXIS); - + if (!follow_staff && ! xaxis) p->set_grob_property ("staff-support", SCM_BOOL_T); @@ -152,6 +152,10 @@ Script_engraver::stop_translation_timestep () { for (int i=0; i < script_p_arr_.size (); i++) { + + /* + TODO: junk staff-support. + */ Grob * sc = script_p_arr_[i]; if (to_boolean (sc->get_grob_property ("staff-support"))) { diff --git a/lily/script.cc b/lily/script.cc index 44ee942f2a..5ae6152f3d 100644 --- a/lily/script.cc +++ b/lily/script.cc @@ -19,7 +19,7 @@ Molecule Script::get_molecule (Grob * me, Direction d) { - SCM s = me->get_grob_property ("molecule"); + SCM s = me->get_grob_property ("script-molecule"); assert (gh_pair_p (s)); SCM key = ly_car (s); diff --git a/lily/separating-group-spanner.cc b/lily/separating-group-spanner.cc index 6b5e98dbc6..c8a74111c5 100644 --- a/lily/separating-group-spanner.cc +++ b/lily/separating-group-spanner.cc @@ -76,7 +76,7 @@ SCM Separating_group_spanner::set_spacing_rods_and_seqs (SCM smob) { set_spacing_rods (smob); - find_musical_sequences (unsmob_grob (smob)); + return SCM_UNSPECIFIED; } @@ -104,7 +104,6 @@ Separating_group_spanner::set_spacing_rods (SCM smob) if (rb) find_rods (rb, ly_cdr (s)); } - find_musical_sequences (me); #if 0 /* @@ -136,103 +135,6 @@ Separating_group_spanner::add_spacing_unit (Grob* me ,Item*i) } -void -Separating_group_spanner::find_musical_sequences (Grob *me) -{ - Item *last = 0; - Item *llast = 0; - for (SCM s = me->get_grob_property ("elements"); - gh_pair_p (s); s = ly_cdr (s)) - { - Item *it = dynamic_cast (unsmob_grob (ly_car (s))); - if (last) - { - Item *lcol = last->column_l (); - Item *col = it->column_l (); - - int lrank = Paper_column::rank_i (lcol); - int rank = Paper_column ::rank_i (col); - - bool mus = Paper_column::musical_b (col); - bool lmus = Paper_column::musical_b (lcol); - - if ((lrank - rank == 2) && lmus && mus) - { - SCM seq = col->get_grob_property ("spacing-sequence"); - col->set_grob_property ("spacing-sequence", - gh_cons (gh_cons (it->self_scm (), last->self_scm ()), seq)); - } - - if (llast && !Paper_column::breakable_b (last)) - { - Item *llcol = llast->column_l (); - int llrank = Paper_column::rank_i (llcol); - bool llmus= Paper_column::musical_b (llcol); - if (llrank - lrank == 1 - && lrank - rank == 1 - && llmus && !lmus && mus) - { - /* - these columns are adjacent, so set spacing-sequence in - IT. - - Q Q+1 Q+2 (rank) - Note Clef Note - - IT LAST LLAST - - */ - SCM seq = col->get_grob_property ("spacing-sequence"); - col->set_grob_property ("spacing-sequence", - gh_cons (gh_cons (it->self_scm (), last->self_scm ()), seq)); - - /* - lcol can not be a loose column, so we make sure - that is and will not be marked as such. - */ - lcol->set_grob_property ("between-cols" , SCM_BOOL_F); - } - else if (!lmus) - { - SCM between = lcol->get_grob_property ("between-cols"); - - if (between == SCM_BOOL_F) - continue; - - if (!gh_pair_p (between)) - { - between = gh_cons (it->self_scm (), llast->self_scm ()); - lcol ->set_grob_property ("between-cols", between); - } - - Item * left - = dynamic_cast (unsmob_grob (ly_car (between))); - if(Paper_column::rank_i (left->column_l ()) < rank) - gh_set_car_x (between, col->self_scm()); - - Item * right - = dynamic_cast (unsmob_grob (ly_cdr (between))); - if (Paper_column::rank_i (right->column_l ()) > llrank ) - gh_set_cdr_x (between, llcol->self_scm ()); - } - } - } - - llast = last; - last = it; - } -} - -#if 0 -void -Separating_group_spanner::set_loose_rods () -{ - // loose columns should also generate minimum distances. - // TODO -} -#endif - - void Separating_group_spanner::set_interface (Grob*) { diff --git a/lily/staff-symbol-referencer.cc b/lily/staff-symbol-referencer.cc index 57cf6ec0b5..e63efa1b30 100644 --- a/lily/staff-symbol-referencer.cc +++ b/lily/staff-symbol-referencer.cc @@ -99,10 +99,9 @@ Staff_symbol_referencer::callback (SCM element_smob, SCM) { Real space = Staff_symbol_referencer::staff_space (me); off = gh_scm2double (pos) * space/2.0; + me->set_grob_property ("staff-position", gh_double2scm (0.0)); } - me->set_grob_property ("staff-position", gh_double2scm (0.0)); - return gh_double2scm (off); } @@ -164,9 +163,6 @@ compare_position (Grob *const &a, Grob * const &b) void Staff_symbol_referencer::set_interface (Grob * e) { - if (!gh_number_p (e->get_grob_property ("staff-position"))) - e->set_grob_property ("staff-position", gh_double2scm (0.0)); - e->add_offset_callback (Staff_symbol_referencer::callback_proc, Y_AXIS); } diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc index fe40a06b84..6dd02513da 100644 --- a/lily/system-start-delimiter-engraver.cc +++ b/lily/system-start-delimiter-engraver.cc @@ -49,11 +49,11 @@ System_start_delimiter_engraver::acknowledge_grob (Grob_info inf) /* UGH UGH */ - if (gh_symbol_p (gl) && gl == ly_symbol2scm ("brace") - && gh_symbol_p (my_gl) && my_gl == ly_symbol2scm ("bracket")) + if (gh_string_p (gl) && gh_equal_p (gl, ly_symbol2scm ("brace")) + && gh_string_p (my_gl) && gh_equal_p (my_gl, ly_symbol2scm ("bracket"))) inf.grob_l_->translate_axis (-0.8, X_AXIS); // ugh - else if (gh_symbol_p (gl) && gl == ly_symbol2scm ("bracket") - && gh_symbol_p (my_gl) && my_gl == ly_symbol2scm ("bracket")) + else if (gh_string_p (gl) && gh_equal_p (gl, ly_symbol2scm ("bracket")) + && gh_string_p (my_gl) && gh_equal_p (my_gl, ly_symbol2scm ("bracket"))) { inf.grob_l_->translate_axis ( -0.8, X_AXIS); // ugh inf.grob_l_->set_grob_property ("arch-height", @@ -71,7 +71,7 @@ System_start_delimiter_engraver::System_start_delimiter_engraver () void System_start_delimiter_engraver::initialize () { - SCM delim_name =get_property ("SystemStartDelimiter"); + SCM delim_name =get_property ("systemStartDelimiter"); delim_ = new Spanner (internal_get_property (delim_name)); delim_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn"))); @@ -91,5 +91,5 @@ ENTER_DESCRIPTION(System_start_delimiter_engraver, /* descr */ "creates a system start delimiter (ie. SystemStart@{Bar,Brace,Bracket@} spanner", /* creats*/ "SystemStartBar SystemStartBrace SystemStartBracket", /* acks */ "system-start-delimiter-interface staff-symbol-interface", -/* reads */ "", +/* reads */ "systemStartDelimiter", /* write */ ""); diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index e2c4f02d87..b526caebb8 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -84,8 +84,8 @@ System_start_delimiter::after_line_breaking (SCM smob) { Grob * me = unsmob_grob (smob); SCM gl = me->get_grob_property ("glyph"); - - if (scm_ilength (me->get_grob_property ("elements")) <= 1 && gl == ly_symbol2scm ("bar-line")) + + if (scm_ilength (me->get_grob_property ("elements")) <= 1 && gh_equal_p (gl,ly_str02scm ("bar-line"))) { me->suicide (); } diff --git a/lily/third-try.cc b/lily/third-try.cc index ee3677cb9a..2690c877c7 100644 --- a/lily/third-try.cc +++ b/lily/third-try.cc @@ -39,9 +39,9 @@ public: static Real note_spacing (Grob*,Grob*,Grob*,Moment) ; static Real get_duration_space (Grob*,Moment dur, Moment shortest) ; - static void breakable_column_spacing (Item* l, Item *r); - static void find_loose_columns () {} - static void prune_loose_colunms (Link_array *cols); + static void breakable_column_spacing (Item* l, Item *r); + static void find_loose_columns () {} + static void prune_loose_colunms (Link_array *cols); static void find_loose_columns (Link_array cols); static void set_explicit_neighbor_columns (Link_array cols); static void set_implicit_neighbor_columns (Link_array cols); diff --git a/lily/translator-def.cc b/lily/translator-def.cc index 2533c486cc..79c4087bdb 100644 --- a/lily/translator-def.cc +++ b/lily/translator-def.cc @@ -138,16 +138,13 @@ Translator_def::add_pop_property (SCM props, SCM syms) } /* - Do it. SYMS maybe a symbol or a list of symbols. VAL is - SCM_UNDEFINED in case of a pop + Do it. SYM is single symbol. VAL is SCM_UNDEFINED in case of a pop */ void -Translator_def::apply_pushpop_property (Translator_group* me,SCM syms, SCM eprop, SCM val) +Translator_def::apply_pushpop_property (Translator_group* me,SCM sym, SCM eprop, SCM val) { - if (gh_symbol_p (syms)) - dynamic_cast (me)->execute_single_pushpop_property (syms, eprop, val); - else for (SCM s = syms; gh_pair_p (s); s = ly_cdr (s)) - dynamic_cast (me)->execute_single_pushpop_property (ly_car (s), eprop, val); + dynamic_cast (me) + ->execute_single_pushpop_property (sym, eprop, val); } diff --git a/lily/translator-group.cc b/lily/translator-group.cc index 90e0c70acc..48384af09f 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -13,6 +13,7 @@ #include "moment.hh" #include "scm-hash.hh" #include "translator-def.hh" +#include "main.hh" Translator_group::Translator_group (Translator_group const&s) : Translator (s) @@ -300,10 +301,14 @@ Translator_group::internal_get_property (SCM sym) const return val; } - void Translator_group::internal_set_property (SCM sym, SCM val) { +#ifndef NDEBUG + if (internal_type_checking_global_b) + assert (type_check_assignment (sym, val, ly_symbol2scm ("backend-type?"))); +#endif + properties_dict ()->set (sym, val); } @@ -332,7 +337,7 @@ Translator_group::execute_single_pushpop_property (SCM prop, SCM eltprop, SCM va if (gh_pair_p (prev) || prev == SCM_EOL) { - bool ok = type_check_assignment (val, eltprop, ly_symbol2scm ("backend-type?")); + bool ok = type_check_assignment (eltprop, val, ly_symbol2scm ("backend-type?")); if (ok) { @@ -442,3 +447,4 @@ add_trans_scm_funcs () } ADD_SCM_INIT_FUNC (trans_scm, add_trans_scm_funcs); + diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index 411cbc07da..4d03ac6ea3 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -111,13 +111,6 @@ Volta_engraver::process_music () { end_volta_span_p_ = volta_span_p_; volta_span_p_ =0; - - /* - maybe do typeset_grob () directly? - */ - - if (!gh_string_p (start_str_)) - end_volta_span_p_->set_grob_property ("last-volta", SCM_BOOL_T); } if (gh_string_p (start_str_) && volta_span_p_) diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index f3f78f9997..1981cdd065 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -1,4 +1,4 @@ -\version "1.3.146" +\version "1.5.33" % % setup for Request->Element conversion. Guru-only @@ -66,7 +66,7 @@ InnerChoirStaffContext = \translator { \name InnerChoirStaff alignmentReference = #0 \consists "System_start_delimiter_engraver" - SystemStartDelimiter = #'SystemStartBracket + systemStartDelimiter = #'SystemStartBracket \accepts "Staff" \accepts "RhythmicStaff" @@ -178,7 +178,7 @@ GrandStaffContext=\translator{ \consists "Span_bar_engraver" \consists "Span_arpeggio_engraver" \consists "System_start_delimiter_engraver" - SystemStartDelimiter = #'SystemStartBrace + systemStartDelimiter = #'SystemStartBrace Generic_property_list = #generic-grand-staff-properties \accepts "Staff" } @@ -190,8 +190,8 @@ PianoStaffContext = \translator{ \consists "Vertical_align_engraver" \consists "Instrument_name_engraver" - instrument = ##f - instr = ##f + instrument = #'() + instr = #'() verticalAlignmentChildCallback = #Align_interface::fixed_distance_alignment_callback VerticalAlignment \override #'forced-distance = #12 @@ -206,7 +206,7 @@ InnerStaffGroupContext= \translator { \consists "Span_bar_engraver" \consists "Span_arpeggio_engraver" \consists "Output_property_engraver" - SystemStartDelimiter = #'SystemStartBracket + systemStartDelimiter = #'SystemStartBracket \consists "System_start_delimiter_engraver" \accepts "Staff" @@ -355,9 +355,9 @@ ScoreContext = \translator { soloADue = ##t splitInterval = #'(0 . 1) changeMoment = #`(,(make-moment 0 0) . ,(make-moment 1 512)) - SystemStartDelimiter =#'SystemStartBar - barAuto = ##t - voltaVisibility = ##t + systemStartDelimiter =#'SystemStartBar + + % name, glyph id, clef position % where is c0 in this clef? @@ -366,7 +366,7 @@ ScoreContext = \translator { centralCPosition = #-6 automaticPhrasing = ##t - alignmentReference = #-1 % \down + defaultBarType = #"|" explicitClefVisibility = #all-visible diff --git a/ly/performer-init.ly b/ly/performer-init.ly index cd7700b55a..748e29229c 100644 --- a/ly/performer-init.ly +++ b/ly/performer-init.ly @@ -10,7 +10,7 @@ StaffContext = \translator { \consists "Key_performer" \consists "Tempo_performer" \consists "Time_signature_performer" - dynamicStyle = #"dynamic" + } \translator { \StaffContext } \translator { \StaffContext diff --git a/make/ly-rules.make b/make/ly-rules.make index 81cb51cb6d..2f5b494235 100644 --- a/make/ly-rules.make +++ b/make/ly-rules.make @@ -5,19 +5,20 @@ $(outdir)/%.latex: %.doc rm -f $@ - $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) $< + $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES)\ +$(LILYPOND_BOOK_FLAGS) --dependencies --outdir=$(outdir) $< chmod -w $@ # don't do ``cd $(outdir)'', and assume that $(outdir)/.. is the src dir. # it is not, for --srcdir builds $(outdir)/%.texi: %.tely rm -f $@ - $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi $< + $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi $(LILYPOND_BOOK_FLAGS) $< chmod -w $@ $(outdir)/%.texi: $(outdir)/%.tely rm -f $@ - $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi $< + $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi $(LILYPOND_BOOK_FLAGS) $< rm -f $< chmod -w $@ @@ -25,7 +26,7 @@ $(outdir)/%.texi: $(outdir)/%.tely # for plain info doco: don't run lily $(outdir)/%.nexi: %.tely rm -f $@ - $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi --no-lily $< + $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi --no-lily $(LILYPOND_BOOK_FLAGS) $< mv $(@D)/$(*F).texi $@ chmod -w $@ diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 475282d996..06c7e0a86d 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,15 +1,15 @@ Begin3 Title: LilyPond -Version: 1.5.33 -Entered-date: 25FEB02 +Version: 1.5.34 +Entered-date: 27FEB02 Description: @BLURB@ Keywords: music notation typesetting midi fonts engraving Author: hanwen@cs.uu.nl (Han-Wen Nienhuys) janneke@gnu.org (Jan Nieuwenhuizen) Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert - 1000k lilypond-1.5.33.tar.gz + 1000k lilypond-1.5.34.tar.gz Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 1000k lilypond-1.5.33.tar.gz + 1000k lilypond-1.5.34.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.mandrake.spec b/make/out/lilypond.mandrake.spec index e7048e0450..d254955eb1 100644 --- a/make/out/lilypond.mandrake.spec +++ b/make/out/lilypond.mandrake.spec @@ -1,5 +1,5 @@ %define name lilypond -%define version 1.5.33 +%define version 1.5.34 %define release 1mdk Name: %{name} diff --git a/make/out/lilypond.redhat.spec b/make/out/lilypond.redhat.spec index 3f552ed47a..0d3f3fabb7 100644 --- a/make/out/lilypond.redhat.spec +++ b/make/out/lilypond.redhat.spec @@ -3,11 +3,11 @@ %define info yes Name: lilypond -Version: 1.5.33 +Version: 1.5.34 Release: 1 License: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.33.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.34.tar.gz Summary: Create and print music notation URL: http://www.lilypond.org/ BuildRoot: /tmp/lilypond-install diff --git a/make/out/lilypond.suse.spec b/make/out/lilypond.suse.spec index 25e6c57d0b..4a388e55a3 100644 --- a/make/out/lilypond.suse.spec +++ b/make/out/lilypond.suse.spec @@ -14,11 +14,11 @@ Distribution: SuSE Linux 7.0 (i386) Name: lilypond -Version: 1.5.33 +Version: 1.5.34 Release: 2 Copyright: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.33.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.34.tar.gz # music notation software for.. ? Summary: A program for printing sheet music. URL: http://www.lilypond.org/ diff --git a/scm/backend-documentation-lib.scm b/scm/backend-documentation-lib.scm index 3ea5632c0b..87b7e079de 100644 --- a/scm/backend-documentation-lib.scm +++ b/scm/backend-documentation-lib.scm @@ -127,7 +127,6 @@ (define (number-pair? x) (and (pair? x) (number? (car x)) (number? (cdr x)))) - (define (ly-grob? x) #f) (define (ly-input-location? x) #f) (define (dir? x) #f) diff --git a/scm/basic-properties.scm b/scm/basic-properties.scm index e3c781c1bc..57c77912b4 100644 --- a/scm/basic-properties.scm +++ b/scm/basic-properties.scm @@ -28,17 +28,17 @@ ("||:" . ("||" . "|:")) ("|" . ("|" . "")) ("||:" . ("||" . "|:")) - ("|s" . (nil . "|")) + ("|s" . (() . "|")) ("|:" . ("|" . "|:")) - ("|." . ("|." . nil)) - (".|" . (nil . ".|")) - (":|" . (":|" . nil)) - ("||" . ("||" . nil)) - (".|." . (".|." . nil)) + ("|." . ("|." . ())) + (".|" . (() . ".|")) + (":|" . (":|" . ())) + ("||" . ("||" . ())) + (".|." . (".|." . ())) ("" . ("" . "")) - ("empty" . ("nil" . nil)) - ("brace" . (nil . "brace")) - ("bracket" . (nil . "bracket")) + ("empty" . ("()" . ())) + ("brace" . (() . "brace")) + ("bracket" . (() . "bracket")) ) ))) @@ -57,15 +57,13 @@ ;; See [Wanske] page 126 -- 134, [Ross] pg 143 -- 147 ;; -;; documentme: difference between extra-space and minimum-space - -;; documentme: difference between extra-space and minimum-space +;; documentme: difference between extra-space and minimum-space-pair ;; (Measured in staff space) (define default-break-align-space-alist '( - ((Staff_bar Custos) . (minimum-space 2.0)) - ((Custos begin-of-note) . (minimum-space 0.0)) + ((Staff_bar Custos) . (minimum-space-pair 2.0)) + ((Custos begin-of-note) . (minimum-space-pair 0.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)) @@ -75,29 +73,29 @@ ((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 Clef_item) . (minimum-space-pair 1.0)) + ((none Staff_bar) . (minimum-space-pair 0.0)) + ((none Clef_item) . (minimum-space-pair 1.0)) + ((none Key_item) . (minimum-space-pair 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)) + ((none begin-of-note) . (minimum-space-pair 1.5)) + ((Clef_item Key_item) . (minimum-space-pair 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)) + ((Clef_item Time_signature) . (minimum-space-pair 3.5)) + ((Staff_bar Clef_item) . (minimum-space-pair 1.0)) + ((Clef_item Staff_bar) . (minimum-space-pair 3.7)) + ((Time_signature Staff_bar) . (minimum-space-pair 2.0)) ((Key_item Staff_bar) . (extra-space 1.0)) - ((Staff_bar Time_signature) . (minimum-space 1.5)) + ((Staff_bar Time_signature) . (minimum-space-pair 1.5)) ((Time_signature begin-of-note) . (extra-space 2.0)) ((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)) - ((Left_edge_item Breathing_sign) . (minimum-space 0.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)) + ((Clef_item begin-of-note) . (minimum-space-pair 5.0)) + ((Left_edge_item Breathing_sign) . (minimum-space-pair 0.0)) + ((none Breathing_sign) . (minimum-space-pair 0.0)) + ((Breathing_sign Key_item) . (minimum-space-pair 1.5)) + ((Breathing_sign begin-of-note) . (minimum-space-pair 1.0)) + ((Breathing_sign Staff_bar) . (minimum-space-pair 1.5)) + ((Breathing_sign Clef_item) . (minimum-space-pair 2.0)) ) ) diff --git a/scm/c++.scm b/scm/c++.scm index e2a807e76b..dc1bad45a8 100644 --- a/scm/c++.scm +++ b/scm/c++.scm @@ -10,7 +10,10 @@ (define (number-pair? x) (and (pair? x) (number? (car x)) (number? (cdr x)))) - +(define (number-or-grob? x) + (or (ly-grob? x) (number? x)) + ) + (define (moment-pair? x) (and (pair? x) (moment? (car x)) (moment? (cdr x)))) @@ -57,6 +60,7 @@ (,number-or-string? . "number or string") (,number-or-boolean? . "number or boolean") (,markup? . "markup (list or string)") + (,number-or-grob? . "number or grob") )) diff --git a/scm/drums.scm b/scm/drums.scm index 45d8e6be19..e3862259f1 100644 --- a/scm/drums.scm +++ b/scm/drums.scm @@ -33,7 +33,7 @@ (let* ( (m (ly-make-music "Music")) ) (ly-set-mus-property m 'iterator-ctor Push_property_iterator::constructor) - (ly-set-mus-property m 'symbols 'NoteHead) + (ly-set-mus-property m 'symbol 'NoteHead) (ly-set-mus-property m 'grob-property 'style) (ly-set-mus-property m 'grob-value t) m diff --git a/scm/grob-description.scm b/scm/grob-description.scm index 0ce17a0706..02bfd0d36d 100644 --- a/scm/grob-description.scm +++ b/scm/grob-description.scm @@ -667,9 +667,8 @@ (meta . ,(grob-description sustain-pedal-interface side-position-interface font-interface)) )) - ;; TODO: should split in 3 (SystemStartBrace . ( - (glyph . brace) + (glyph . "brace") (molecule-callback . ,System_start_delimiter::brew_molecule) (collapse-height . 5.0) (font-family . braces) @@ -679,7 +678,7 @@ (SystemStartBracket . ( (Y-extent-callback . #f) (molecule-callback . ,System_start_delimiter::brew_molecule) - (glyph . bracket) + (glyph . "bracket") (arch-height . 1.5) (arch-angle . 50.0) (arch-thick . 0.25) @@ -691,7 +690,7 @@ (SystemStartBar . ( (Y-extent-callback . #f) (molecule-callback . ,System_start_delimiter::brew_molecule) - (glyph . bar-line) + (glyph . "bar-line") (thickness . 1.6) (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking) (meta . ,(grob-description system-start-delimiter-interface )) @@ -824,5 +823,8 @@ ;; make sure that \property Foo.Bar =\turnOff doesn't complain -(map (lambda (x) (set-object-property! (car x) 'translator-type? list?)) +(map (lambda (x) + ; (display (car x)) (newline) + + (set-object-property! (car x) 'translation-type? list?)) all-grob-descriptions) diff --git a/scm/grob-property-description.scm b/scm/grob-property-description.scm index 4231dfe19d..b64817cf61 100644 --- a/scm/grob-property-description.scm +++ b/scm/grob-property-description.scm @@ -21,8 +21,6 @@ (set! all-backend-properties (cons symbol all-backend-properties)) ) - - ;; put this in an alist? (grob-property-description 'X-extent-callback procedure? "procedure taking an grob and axis argument, returning a number-pair. The return value is the extent of the grob.") @@ -177,7 +175,7 @@ is used by @ref{note-collision-interface}.") (grob-property-description 'fraction number-pair? "fraction of a time signature.") (grob-property-description 'full-size-change boolean? "if set, don't make a change clef smaller.") -(grob-property-description 'glyph symbol? "a string determining what (style) of glyph is typeset. Valid choices depend on the function that is reading this property. .") +(grob-property-description 'glyph string? "a string determining what (style) of glyph is typeset. Valid choices depend on the function that is reading this property. .") (grob-property-description 'glyph-name string? "a name of character within font.") (grob-property-description 'gap number? "Size of a gap in a variable symbol.") @@ -205,7 +203,9 @@ For text, this is `relative'(?) to the current alignment. For barline, space after a thick line.") (grob-property-description 'layer number? "The output layer [0..2]. The default is 1.") + (grob-property-description 'left-padding number? "space left of accs.") + (grob-property-description 'length number? "Stem length for unbeamed stems, only for user override.") (grob-property-description 'lengths list? "Stem length given multiplicity of flag.") (grob-property-description 'line-count integer? "Number of staff @@ -220,6 +220,7 @@ and will have no effect. (grob-property-description 'maximum-duration-for-spacing moment? "space as if a duration of this type is available in this measure.") (grob-property-description 'maximum-length number? "don't make Grob longer than this") (grob-property-description 'maximum-rest-count integer? "kill off rests so we don't more than this number left.") +(grob-property-description 'measure-count integer? "number of measures for a multimeasure rest.") (grob-property-description 'merge-differently-dotted boolean? " Merge noteheads in collisions, even if they have a different number of dots. This normal notation for some types of polyphonic music. The value of this setting is used by @ref{note-collision-interface} .") (grob-property-description 'minimum-distance number? "minimum distance between notes and rests.") (grob-property-description 'minimum-distances list? "list of rods (ie. (OBJ . DIST) pairs).") @@ -236,9 +237,14 @@ Also works as a scaling parameter for the length of hyphen. .") FIXME: also pair? (cons LEFT RIGHT) ") +(grob-property-description 'minimum-space-pair number-pair? " +? (cons LEFT RIGHT) + +") (grob-property-description 'minimum-width number? "minimum-width of rest symbol, in staffspace.") (grob-property-description 'molecule-callback procedure? "Function taking grob as argument, returning a Scheme encoded Molecule.") +(grob-property-description 'molecule molecule? "Cached output of the molecule-callback.") (grob-property-description 'new-accidentals list? "list of (pitch, accidental) pairs.") (grob-property-description 'no-spacing-rods boolean? "read from grobs: boolean that makes Separation_item ignore this item (MOVE ME TO ITEM).") @@ -267,18 +273,19 @@ as a real penalty.") (grob-property-description 'right-padding number? "space right of accs.") (grob-property-description 'right-trim-amount number? "shortening of the lyric extender on the right.") (grob-property-description 'script-priority number? "A sorting key that determines in what order a script is within a stack of scripts.") -(grob-property-description 'self-alignment-X number? "real number: -1 = +(grob-property-description 'self-alignment-X number-or-grob? "real number: -1 = left aligned, 0 = center, 1 right-aligned in X direction. Set to an grob pointer, if you want that grob to be the center. In this case, the center grob should have this object as a reference point. -.") + +TODO: revise typing.") (grob-property-description 'self-alignment-Y number? "like self-alignment-X but for Y axis.") (grob-property-description 'shortest-playing-duration moment? "duration of the shortest playing in that column.") (grob-property-description 'shortest-starter-duration moment? "duration of the shortest notes that starts exactly in this column.") (grob-property-description 'side-relative-direction dir? "if set: get the direction from a different object, and multiply by this.") -(grob-property-description 'side-support list? "the support, a list of grobs.") +(grob-property-description 'side-support-elements list? "the support, a list of grobs.") (grob-property-description 'slope number? "some kind of slope") (grob-property-description 'slope-limit number? "set slope to zero if slope is running away steeper than this.") (grob-property-description 'solid boolean? "should porrectus be solidly filled?.") @@ -294,7 +301,7 @@ itself. Return value is ignored.") (grob-property-description 'stacking-dir dir? "stack contents of grobs in which direction ?.") (grob-property-description 'staff-space number? "Amount of line leading relative to global staffspace.") (grob-property-description 'staff-position number? "vertical position in staff spaces, counted from the middle line.") -(grob-property-description 'staff-symbol boolean? "the staff symbol grob that we're in.") + (grob-property-description 'staffline-clearance number? "don't get closer than this to stafflines.") (grob-property-description 'stem ly-grob? "pointer to Stem object.") (grob-property-description 'stem-attachment-function procedure? "Where @@ -376,6 +383,7 @@ The following abbreviations are currently defined: (grob-property-description 'thickness number? "thickness, measured in stafflinethickness.") (grob-property-description 'thin-kern number? "space after a hair-line.") (grob-property-description 'forced-distance number? "forced distance for an alignment.") + (grob-property-description 'threshold number-pair? "(cons MIN MAX), where MIN and MAX are dimensions in staffspace.") (grob-property-description 'transparent boolean? "This is almost the same as setting molecule-callback to #f, but this retains the @@ -403,3 +411,24 @@ function of type (beam multiplicity dy staff-line-thickness) -> real. Default v (grob-property-description 'y-free number? "minimal vertical gap between slur and noteheads or stems.") (grob-property-description 'y-offset number? "extra vertical offset for ties away from the center line.") (grob-property-description 'y number? "set by beam: position of left edge.") + + +;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;; INTERNAL + +(grob-property-description 'left-neighbors list? "") +(grob-property-description 'right-neighbors list? "") +(grob-property-description 'left-items list? "") +(grob-property-description 'right-items list? "") +(grob-property-description 'cause scheme? "Any kind of causation objects (i.e. music, or perhaps translator) that was the cause for this grob. ") +(grob-property-description 'font font-metric? "Cached font metric object") +(grob-property-description 'break-alignment-done boolean? "mark flag to signal we've done alignment already.") +(grob-property-description 'staff-symbol ly-grob? "the staff symbol grob that we're in.") +(grob-property-description 'collision-done boolean? "") +(grob-property-description 'rest ly-grob? "the staff symbol grob that we're in.") +(grob-property-description 'rest-collision ly-grob? "rest collision that a rest is in.") + +(grob-property-description 'staff-support boolean? " JUNKME.") +(grob-property-description 'script-molecule pair? "index code for script.") + +(grob-property-description 'accidentals-grob ly-grob? "accidentals for this note.") diff --git a/scm/interface-description.scm b/scm/interface-description.scm index ec1a11d952..d1db335f03 100644 --- a/scm/interface-description.scm +++ b/scm/interface-description.scm @@ -184,7 +184,7 @@ #'direction = where to put the victim object (left or right?) " '( - side-support + side-support-elements direction-source direction side-relative-direction diff --git a/scm/music-functions.scm b/scm/music-functions.scm index 9c254e5a8d..10e91ee263 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -74,14 +74,14 @@ Fingering_engraver." ;;;;;;;;;;;;;;;; -(define (make-grob-property-set grobs gprop val) +(define (make-grob-property-set grob gprop val) "Make a M-exp that sets GPROP to VAL in GROBS. Does a pop first, i.e. this is not an override " (let* ((m (ly-make-music "Music"))) (ly-set-mus-property m 'iterator-ctor Push_property_iterator::constructor) - (ly-set-mus-property m 'symbols grobs) + (ly-set-mus-property m 'symbol grob) (ly-set-mus-property m 'grob-property gprop) (ly-set-mus-property m 'grob-value val) (ly-set-mus-property m 'pop-first #t) @@ -90,10 +90,11 @@ this is not an override )) -(define (make-grob-property-revert grobs gprop) +(define (make-grob-property-revert grob gprop) + "Revert the grob property GPROP for GROB." (let* ((m (ly-make-music "Music"))) (ly-set-mus-property m 'iterator-ctor Pop_property_iterator::constructor) - (ly-set-mus-property m 'symbols grobs) + (ly-set-mus-property m 'symbol grob) (ly-set-mus-property m 'grob-property gprop) m @@ -102,18 +103,22 @@ this is not an override (define (make-voice-props-set n) (make-sequential-music - (list - (make-grob-property-set '(Tie Slur Stem Dots) 'direction - (if (odd? n) -1 1)) - (make-grob-property-set '(NoteColumn) 'horizontal-shift (quotient n 2)) + (append + (map (lambda (x) (make-grob-property-set x 'direction + (if (odd? n) -1 1))) + '(Tie Slur Stem Dots)) + (list (make-grob-property-set 'NoteColumn 'horizontal-shift (quotient n 2))) ) )) (define (make-voice-props-revert) (make-sequential-music (list - (make-grob-property-revert '(Tie Slur Stem Dots) 'direction) - (make-grob-property-revert '(NoteColumn) 'horizontal-shift) + (make-grob-property-revert 'Tie 'direction) + (make-grob-property-revert 'Dots 'direction) + (make-grob-property-revert 'Stem 'direction) + (make-grob-property-revert 'Slur 'direction) + (make-grob-property-revert 'NoteColumn 'horizontal-shift) )) ) diff --git a/scm/music-property-description.scm b/scm/music-property-description.scm index d0d76a9445..50fc4ad633 100644 --- a/scm/music-property-description.scm +++ b/scm/music-property-description.scm @@ -24,8 +24,12 @@ (music-property-description 'iterator-ctor c++-function? "Function to construct music-event-iterator object for this Music") (music-property-description 'duration duration? "Duration of this note/lyric.") (music-property-description 'metronome-count number? "How many beats in a minute?") -(music-property-description 'span-type symbol? "What kind of spanner should be created?") -(music-property-description 'articulation-type symbol? "key for scriptDefinitions alist") +(music-property-description 'span-type string? "What kind of spanner should be created? + +TODO: consider making type into symbol") +(music-property-description 'articulation-type string? "key for script definitions alist. + +TODO: consider making type into symbol ") (music-property-description 'bass boolean? "Set if this note is a bass note in a chord") (music-property-description 'cautionary boolean? "If set, this alteration needs cautionary accidental") (music-property-description 'change-to-id string? "name of the context to change to ") @@ -55,8 +59,10 @@ (music-property-description 'type symbol? "The type of this music object. Determines iteration in some cases.") (music-property-description 'repeat-count integer? "do a @code{\repeat} how ofen?") (music-property-description 'span-direction dir? "Does this start or stop a spanner?") -(music-property-description 'symbols list? "List of Grob names (symbols) to perform an override/revert on.") -(music-property-description 'text string? "markup expression to be printed");; markup? +(music-property-description 'symbol symbol? "Grob name to perform an override/revert on.") +(music-property-description 'text string? "markup expression to be printed") +;; markup? (music-property-description 'tremolo-type integer? "") - +(music-property-description 'value scheme? "Assignment value for a +translation property") (music-property-description 'what string? "What to change for auto-change. FIXME, naming") diff --git a/scm/ps.scm b/scm/ps.scm index 7f2aca9c3a..1d8f8f3f4c 100644 --- a/scm/ps.scm +++ b/scm/ps.scm @@ -16,8 +16,8 @@ (if (or (equal? (minor-version) "4") (equal? (minor-version) "3.4")) - (define-public (ps-output-expression expr) - (display (eval-in-module expr this-module))) + (define-public (ps-output-expression expr port) + (display (eval-in-module expr this-module) port)) (define-public (ps-output-expression expr port) (display (eval expr this-module) port))) diff --git a/scm/translator-property-description.scm b/scm/translator-property-description.scm index 4e5c23189a..8cfeb298ca 100644 --- a/scm/translator-property-description.scm +++ b/scm/translator-property-description.scm @@ -44,6 +44,10 @@ and therefore only work in contexts which contain an @code{Axis_group_engraver}. ") +(translator-property-description + 'acknowledgeHashTable vector? + "Internal variable: store interface to engraver smob table for current context. Don't mess with this." + ) (translator-property-description 'aDueText string? "text for begin of a due") (translator-property-description 'associatedVoice string? "Name of the Voice that has the melody for this LyricsVoice.") @@ -193,8 +197,14 @@ Do nothing. @end table ") (translator-property-description 'decrescendoSpanner symbol? "Type of spanner to be used for decrescendi. One of: @samp{hairpin}, @samp{line}, @samp{dashed-line}, @samp{dotted-line}. If unset, hairpin type is used.") + +(translator-property-description 'dynamicAbsoluteVolumeFunction procedure? " +[DOCUMENT-ME] +") (translator-property-description 'explicitClefVisibility procedure? "visibility-lambda function for clef changes.") + + (translator-property-description 'explicitKeySignatureVisibility procedure? "visibility-lambda function for explicit Key changes; \override of #'visibility-lambda will set the visibility for normal @@ -224,7 +234,9 @@ in a context. This is done using the @code{Font_size_engraver}.") is used to determine the instrument for MIDI output.") (translator-property-description 'instrumentEqualizer procedure? "[DOCUMENT-ME]") - +(translator-property-description 'instrumentSupport list? " +list of grobs to attach instrument name to. +") (translator-property-description 'keyAccidentalOrder list? " Alist that defines in what order alterations should be printed. The format is (NAME . ALTER), where NAME is from 0 .. 6 and ALTER from -1, 1. @@ -251,6 +263,10 @@ top of those automatically detected. ") (translator-property-description 'melismaEngraverBusy boolean? "See @ref{(lilypond)melismaBusy}. This is set automatically.") (translator-property-description 'midiInstrument string? "Name of the MIDI instrument to use ") +(translator-property-description 'midiMinimumVolume number? "[DOCUMENT-ME]") +(translator-property-description 'midiMaximumVolume number? "[DOCUMENT-ME]") + + (translator-property-description 'noAutoBeaming boolean? "If set to true then beams are not generated automatically. ") (translator-property-description 'noDirection boolean? "Don't set directions by a2-engraver when part-combining.") @@ -258,8 +274,8 @@ MIDI instrument to use ") (translator-property-description 'pedalSustainStrings list? "List of string to print for sustain-pedal. Format is (UP UPDOWN DOWN), where each of the three is the string to print when this is done with the pedal.") -(translator-property-description 'pedalUnaCordaStrings string? "see pedalSustainStrings.") -(translator-property-description 'pedalSostenutoStrings string? "see pedalSustainStrings.") +(translator-property-description 'pedalUnaCordaStrings list? "see pedalSustainStrings.") +(translator-property-description 'pedalSostenutoStrings list? "see pedalSustainStrings.") (translator-property-description 'phrasingPunctuation string? "") (translator-property-description 'rehearsalMark number-or-string? "") @@ -323,6 +339,7 @@ is erased. (translator-property-description 'stz markup? "Abbreviated form for a stanza, see also Stanza property.") (translator-property-description 'subdivideBeams boolean? "If set, multiple beams will be subdivided at beat positions - by only drawing one beam over the beat.") +(translator-property-description 'systemStartDelimiter symbol? "Which grob to make for the start of the system/staff?") (translator-property-description 'textNonEmpty boolean? " If set to true then text placed above or below the staff is not assumed to have zero width. @code{\fatText} and @code{\emptyText} are predefined diff --git a/scripts/convert-ly.py b/scripts/convert-ly.py index 4a2236a7aa..26e33611cd 100644 --- a/scripts/convert-ly.py +++ b/scripts/convert-ly.py @@ -826,6 +826,12 @@ if 1: conversions.append (((1,3,148), conv, '"(align" -> "(axis", "(rows" -> "(columns"')) +if 1: + def conv (str): + str = re.sub ('SystemStartDelimiter', 'systemStartDelimiter', str) + return str + conversions.append (((1,5,33), conv, 'SystemStartDelimiter -> systemStartDelimiter')) + ################################ # END OF CONVERSIONS diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index 2eb4a0c5f2..8dc047bb26 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -98,7 +98,7 @@ include_path = [os.getcwd()] # g_ is for global (?) - +g_extra_opts = '' g_here_dir = os.getcwd () g_dep_prefix = '' g_outdir = '' @@ -106,6 +106,7 @@ g_force_lilypond_fontsize = 0 g_read_lys = 0 g_do_pictures = 1 g_num_cols = 1 + format = '' g_run_lilypond = 1 no_match = 'a\ba' @@ -368,6 +369,7 @@ option_definitions = [ ('EXT', 'f', 'format', 'set format. EXT is one of texi and latex.'), ('DIM', '', 'default-music-fontsize', 'default fontsize for music. DIM is assumed to be in points'), ('DIM', '', 'default-lilypond-fontsize', 'deprecated, use --default-music-fontsize'), + ('OPT', '', 'extra-options' , 'Pass OPT quoted to the lilypond command line'), ('DIM', '', 'force-music-fontsize', 'force fontsize for all inline lilypond. DIM is assumed be to in points'), ('DIM', '', 'force-lilypond-fontsize', 'deprecated, use --force-music-fontsize'), ('DIR', 'I', 'include', 'include path'), @@ -1046,7 +1048,7 @@ def compile_all_files (chunks): if g_outdir: lilyopts = lilyopts + '--dep-prefix=' + g_outdir + '/' texfiles = string.join (tex, ' ') - system ('lilypond --header=texidoc %s %s' % (lilyopts, texfiles)) + system ('lilypond --header=texidoc %s %s %s' % (lilyopts, g_extra_opts, texfiles)) # # Ugh, fixing up dependencies for .tex generation @@ -1329,6 +1331,8 @@ for opt in options: elif o == '--default-lilypond-fontsize': print "--default-lilypond-fontsize is deprecated, use --default-music-fontsize" default_music_fontsize = string.atoi (a) + elif o == '--extra-options': + g_extra_opts = a elif o == '--force-music-fontsize': g_force_lilypond_fontsize = string.atoi(a) elif o == '--force-lilypond-fontsize': -- 2.39.5