From 5d5fbb2641fda6605cde61ebcd99b9bef2e94b4a Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Fri, 2 Mar 2001 11:26:35 +0100 Subject: [PATCH] release: 1.3.134 ============ * Bugfix: fixed point-and-click broken in jcn2. * convert-ly: Added and fixed various entries (our strings with optional "" re\ally suck). * Small ez play tweaks. Guess I'm a sucker too. * Easy-play bugfixes: don't do showpage for each notehead, output staff-symbol first, moved to lily.ps. * Bugfix: don't print so many decimals in ps output. * Bugfix for refman example. * Added some part combiner doco. * Bugfix: a broken tie only generates an accidental if it would differ from an untied note. 1.3.133.h --- CHANGES | 35 +- Documentation/footer.html.in | 2 +- Documentation/user/refman.itely | 10 +- NEWS | 2 + VERSION | 4 +- input/bugs/clef-staff.ly | 279 --------- input/regression/easy-notation.ly | 2 +- input/test/orchestscore.ly | 6 +- input/twinkle.ly | 5 +- lily/a2-engraver.cc | 12 +- lily/align-interface.cc | 15 +- lily/align-note-column-engraver.cc | 4 +- lily/arpeggio-engraver.cc | 2 +- lily/audio-item.cc | 5 +- lily/bar-number-engraver.cc | 2 +- lily/break-align-item.cc | 2 +- lily/clef-engraver.cc | 2 +- lily/dot-column-engraver.cc | 4 +- lily/dot-column.cc | 2 +- lily/dynamic-engraver.cc | 10 +- lily/grace-position-engraver.cc | 4 +- lily/include/audio-item.hh | 6 +- lily/include/performer-group-performer.hh | 2 +- lily/include/side-position-interface.hh | 11 +- lily/instrument-name-engraver.cc | 34 +- lily/key-performer.cc | 11 +- lily/local-key-engraver.cc | 8 +- lily/mark-engraver.cc | 2 +- lily/midi-item.cc | 22 +- lily/paper-outputter.cc | 5 + lily/performance.cc | 5 + lily/piano-pedal-engraver.cc | 10 +- lily/rest-engraver.cc | 1 - lily/script-column-engraver.cc | 4 +- lily/script-column.cc | 4 +- lily/script-engraver.cc | 12 +- lily/script.cc | 6 +- lily/side-position-interface.cc | 103 ++-- lily/staff-performer.cc | 1 + lily/syllable-group.cc | 2 +- lily/system-start-delimiter.cc | 3 +- lily/tempo-performer.cc | 2 +- lily/text-engraver.cc | 18 +- lily/text-spanner-engraver.cc | 6 +- lily/time-signature-performer.cc | 1 + lily/volta-engraver.cc | 2 +- lily/volta-spanner.cc | 4 +- ly/performer.ly | 2 +- make/out/lilypond.lsm | 8 +- make/out/lilypond.spec | 4 +- mutopia/Coriolan/c-midi.ly | 0 scm/backend-documentation-lib.scm | 24 +- scm/grob-description.scm | 54 +- scm/grob-property-description.scm | 1 + scm/interface-description.scm | 721 +++++++++++----------- scm/midi.scm | 10 + scm/tex.scm | 1 + scm/translator-property-description.scm | 2 + scripts/ly2dvi.py | 2 +- tex/lilyponddefs.tex | 2 +- 60 files changed, 658 insertions(+), 867 deletions(-) delete mode 100644 input/bugs/clef-staff.ly delete mode 100644 mutopia/Coriolan/c-midi.ly diff --git a/CHANGES b/CHANGES index 098c529656..e23e5ea743 100644 --- a/CHANGES +++ b/CHANGES @@ -3,19 +3,10 @@ * Bugfix: fixed point-and-click broken in jcn2. -1.3.133.jcn4 -============ - -* convert-ly: Added and fixed various entries (our strings with optional "" really suck). - -1.3.133.jcn3 -============ +* convert-ly: Added and fixed various entries (our strings with optional "" re\ally suck). * Small ez play tweaks. Guess I'm a sucker too. -1.3.133.jcn2 -============ - * Easy-play bugfixes: don't do showpage for each notehead, output staff-symbol first, moved to lily.ps. @@ -23,16 +14,30 @@ staff-symbol first, moved to lily.ps. * Bugfix for refman example. -1.3.133.jcn1 -============ - * Added some part combiner doco. * Bugfix: a broken tie only generates an accidental if it would differ from an untied note. -1.3.133 -======= +1.3.133.hwn1 +============ + +* Center instrument name on staffs. Use +Side_position_interface::align_elements_to_refpoints. + +* staff-symbol-referencer-interface, general cleanup of +interface-description.scm + +1.3.133.mb3 +=========== + +* Bugfix: Time and key signatures in MIDI. + +* Bugfix: Tempo changes in MIDI work again. + +* Bugfix: ly2dvi file.tex works again. + +* Bugfix: don't stretch the space after the last score line. 1.3.132.jcn3 ============ diff --git a/Documentation/footer.html.in b/Documentation/footer.html.in index 205114b335..19ed96aed4 100644 --- a/Documentation/footer.html.in +++ b/Documentation/footer.html.in @@ -28,7 +28,7 @@ Please send comments on these web pages to

-Copyright (c) 1997, 1998, 1999, 2000 Han-Wen Nienhuys and Jan Nieuwenhuizen. +Copyright (c) 1997--2001 Han-Wen Nienhuys and Jan Nieuwenhuizen.

diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index cca14f14a8..e4f278c778 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -2525,13 +2525,13 @@ If you just want the splitting of Threads and setting of directions, and not the textual markings, you may set the property @var{soloADue} to false: @lilypond[verbatim,singleline] -\score { - \context Staff < + \score { + \notes \context Staff < \context Voice=one \partcombine Voice - \context Thread=one \notes\relative c'' { + \context Thread=one\relative c'' { b4 a c g } - \context Thread=two \notes\relative c'' { + \context Thread=two\relative c'' { d,2 a4 g' } > @@ -2539,7 +2539,7 @@ not the textual markings, you may set the property @var{soloADue} to false: \translator { \VoiceContext soloADue = ##f - } + } } } } @end lilypond diff --git a/NEWS b/NEWS index f307b3f3fd..ca0c0f2de9 100644 --- a/NEWS +++ b/NEWS @@ -45,3 +45,5 @@ internals: LilyPond is smaller, cleaner, more flexible, etc. * AsciiScript: ASCII-art output * Translations into Japanese, French and Russian + +* EZ play notation diff --git a/VERSION b/VERSION index 42a0067cb6..578469acf8 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 -PATCH_LEVEL=133 -MY_PATCH_LEVEL=jcn5 +PATCH_LEVEL=134 +MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/input/bugs/clef-staff.ly b/input/bugs/clef-staff.ly deleted file mode 100644 index bb1e8e2bb7..0000000000 --- a/input/bugs/clef-staff.ly +++ /dev/null @@ -1,279 +0,0 @@ -% Bugs: -% * CLef has `Staff' hardcoded -% * Dynamics into staff: pp/ff at first note cello/contrabass - -\header { -texidoc="Template for part-combining orchestral scores"; -} - -\include "paper16.ly"; -% \include "mutopia/Coriolan/coriolan-paper.ly"; - - - -flautoI = \notes\relative c'' { - c4 d e f - b,4 d c d - r2 e4 f - \break - c4 d e f - c4 r e f - c4 r e f - \break - c4 r a r - a a r a - a2 \property VoiceCombineThread.soloADue = ##f a -} - -flautoII = \notes\relative c'' { - g4 b d f - r2 c4 d - a c c d - a4. b8 c4 d - c r e r - r2 s2 - a,4 r a r - a r r a - a2 \property VoiceCombineThread.soloADue = ##f a -} - -flautiStaff = \notes \context VoiceCombineStaff = flauti < - \property VoiceCombineStaff.midiInstrument = #"flute" - \property VoiceCombineStaff.instrument = #"2 Flauti" - \property VoiceCombineStaff.instr = #"Fl." - %\global - \context VoiceCombineVoice=one \partcombine VoiceCombineVoice - \context VoiceCombineThread=one \flautoI - \context VoiceCombineThread=two \flautoII -> - -legniGroup = \context StaffGroup = legni_group < - \flautiStaff - %\oboiStaff - %\clarinettiStaff - %\fagottiStaff -> - -violinoI = \notes\relative c'' { - c4 d e f - c d e f - c d e f - c d e f - c d e f - c d e f - c4 d e f - a8 a a a b b b b - d1 -} - -violinoII = \notes\relative c'' { - c4 d e f - c d e f - c d e f - c2 e2 - c4 d e f - c2 e2 - c,4 d e f - a8 a a a b b b b - b1 -} - -violinoIStaff = \context Staff = oneViolino < - \property Staff.midiInstrument = #"violin" - \property Staff.instrument = #"Violino I" - \property Staff.instr = #"Vl. I" - %\notes < - %\global - %\context Voice=oneViolino - %\context Thread=oneViolino - \violinoI - % > -> - -violinoIIStaff = \context Staff = twoViolino < - % MIDI hoort geeneens verschil tussen een - % eerste en tweede viool ;-) - \property Staff.midiInstrument = #"violin" - \property Staff.instrument = #"Violino II" - \property Staff.instr = #"Vl. II" - %\notes < - %\global - %\context Voice=twoViolino - %\context Thread=twoViolino - \violinoII - % > -> - -violaI = \notes\transpose c, \violinoI - -violaII = \notes\transpose c, \violinoII - -violiGroup = \notes \context VoiceCombineStaff = oneVioli < - \property VoiceCombineStaff.midiInstrument = #"viola" - \property VoiceCombineStaff.instrument = #"Viola" - \property VoiceCombineStaff.instr = #"Vla." - \clef "alto"; - - \key f \major; - \skip 1*314; - \bar "|."; - - \context VoiceCombineVoice=oneVioli \partcombine VoiceCombineVoice - \context VoiceCombineThread=oneVioli \violaI - \context VoiceCombineThread=twoVioli \violaII -> - -violoncello = \notes\relative c { - c1\ff d e f c d e f c -} - -contrabasso = \notes\relative c { - c1\pp - d4 e d e - e1 - f4 g f g - c1 - d4 e d e - e1 - f4 g f g - c1 -} - - -bassiGroup = \context PianoStaff = bassi_group \notes < - \context StaffCombineStaff=oneBassi { - \property StaffCombineStaff.midiInstrument = #"cello" - %\property StaffCombineStaff.instrument = #"Violoncello\ne\nContrabasso" - \property StaffCombineStaff.instrument = #'(lines "Violoncello" "e" "Contrabasso") - \property StaffCombineStaff.instr = #"Vc." - - \clef "bass"; - \key es \major; - \skip 1*314; - \bar "|."; - } - \context StaffCombineStaff=twoBassi { - \property StaffCombineStaff.midiInstrument = #"contrabass" - \property StaffCombineStaff.instrument = #"Contrabasso" - \property StaffCombineStaff.instr = #"Cb." - - \clef "bass"; - \key as \major; - \skip 1*314; - \bar "|."; - } - - \context StaffCombineStaff=oneBassi \partcombine StaffCombineStaff - \context StaffCombineVoice=oneBassi \violoncello - \context StaffCombineVoice=twoBassi \contrabasso -> - - -violiniGroup = \context GrandStaff = violini_group < - \violinoIStaff - \violinoIIStaff -> - -archiGroup = \context StaffGroup = archi_group < - \violiniGroup - \violiGroup - \bassiGroup -> - - -\score{ - < - \legniGroup - %\ottoniGroup - %\timpaniGroup - \archiGroup - > - \header { - title = "Coriolan"; - subtitle = "Ouverture"; - opus = "Opus 62"; - composer = "Ludwig van Beethoven (1770-1827)"; - enteredby = "JCN"; - copyright = "public domain"; - } - %\paper {} - \paper{ - \paperSixteen - - %textheight = 290.0\mm; - %linewidth = 195.0\mm; - textheight = 285.0\mm; - linewidth = 190.0\mm; - - \translator{ \HaraKiriStaffContext } - % - % The Voice combine hierarchy - % - \translator{ - \ThreadContext - \name "VoiceCombineThread"; - \consists "Rest_engraver"; - } - \translator{ - \VoiceContext - \name "VoiceCombineVoice"; - soloText = #"I." - soloIIText = #"II." - \remove "Rest_engraver"; - \accepts "VoiceCombineThread"; - } - \translator{ - \HaraKiriStaffContext - \consists "Mark_engraver"; - \name "VoiceCombineStaff"; - \accepts "VoiceCombineVoice"; - } - - % - % The Staff combine hierarchy - % - \translator{ - \ThreadContext - \name "StaffCombineThread"; - } - \translator{ - \VoiceContext - \name "StaffCombineVoice"; - \accepts "StaffCombineThread"; - \consists "Thread_devnull_engraver"; - } - \translator { - \HaraKiriStaffContext - \name "StaffCombineStaff"; - \accepts "StaffCombineVoice"; - - soloADue = ##t - soloText = #"" - soloIIText = #"" - % This is non-conventional, but currently it is - % the only way to tell the difference. - aDueText = #"\\`a2" - splitInterval = #'(1 . 0) - changeMoment = #`(,(make-moment 1 1) . ,(make-moment 1 1)) - } - \translator { - \StaffGroupContext - \accepts "VoiceCombineStaff"; - \accepts "StaffCombineStaff"; - } - \translator{ \HaraKiriStaffContext } - - \translator { - %\ScoreContext - \OrchestralScoreContext - \accepts "VoiceCombineStaff"; - \accepts "StaffCombineStaff"; - skipBars = ##t - - markScriptPadding = #4.0 - - BarNumber \override #'padding = #3 - RestCollision \override #'maximum-rest-count = #1 - } - } -} diff --git a/input/regression/easy-notation.ly b/input/regression/easy-notation.ly index fc5a8f6a84..a169cbe494 100644 --- a/input/regression/easy-notation.ly +++ b/input/regression/easy-notation.ly @@ -1,5 +1,5 @@ \header { -texidoc = " Ez-notation prints names in note heads." +texidoc = " Ez-notation prints names in note heads."; } \score { diff --git a/input/test/orchestscore.ly b/input/test/orchestscore.ly index 06a8b1acf8..5dc33ef467 100644 --- a/input/test/orchestscore.ly +++ b/input/test/orchestscore.ly @@ -17,7 +17,9 @@ c1 | c2 c | c c | R1*5 \score{ < \context StaffGroup = wood < \context Staff = flauto < - \property Staff.instrument = "\\rotatebox[origin=c]{90}{Flauto}" + %"\\rotatebox[origin=c]{90}{Flauto}" + + \property Staff.instrument = "Flauto" \property Staff.instr = "Fl." \m > @@ -82,7 +84,7 @@ c1 | c2 c | c c | R1*5 > \context Staff = vlc < %% \property Staff.instrument = "Violoncello" - \property StaffCombineStaff.instrument = #'(lines "Violoncello" "e" "Contrabasso") + \property Staff.instrument = #'(lines "Violoncello" "e" "Contrabasso") \property Staff.instr = "Vlc" \m > diff --git a/input/twinkle.ly b/input/twinkle.ly index 09cb9cff0f..0407456491 100644 --- a/input/twinkle.ly +++ b/input/twinkle.ly @@ -74,8 +74,7 @@ hegedraagjetekst = \lyrics{ } texte = \lyrics{ - \property Lyrics . textStyle" = "italic" -% \property Lyrics . textStyle" = "roman" + \property Lyrics . LyricText \set #'font-shape = #'italic Ah! vous dir -- ai -- je ma -- man " " Ce qui cau -- se mon tour -- " " ment Pa -- pa veut que je rai -- son -- ne @@ -85,7 +84,7 @@ texte = \lyrics{ } texti = \lyrics{ - \property "Lyrics"."textStyle" = "roman" + Twin -- kle, twin -- kle, lit -- tle star, " " How I won -- der what you " " are. Up a -- bove the world so high, " " diff --git a/lily/a2-engraver.cc b/lily/a2-engraver.cc index f767e7004d..b6958618bc 100644 --- a/lily/a2-engraver.cc +++ b/lily/a2-engraver.cc @@ -55,7 +55,7 @@ A2_engraver::create_grobs () && daddy_trans_l_->id_str_.left_str (3) == "one"))) { text_p_ = new Item (get_property ("TextScript")); - Side_position::set_axis (text_p_, Y_AXIS); + Side_position_interface::set_axis (text_p_, Y_AXIS); announce_grob (text_p_, 0); Direction dir = UP; @@ -80,7 +80,7 @@ A2_engraver::create_grobs () text = get_property ("aDueText"); } - Side_position::set_direction (text_p_, dir); + Side_position_interface::set_direction (text_p_, dir); text_p_->set_grob_property ("text", text); } } @@ -97,14 +97,14 @@ A2_engraver::acknowledge_grob (Grob_info i) if (Note_head::has_interface (i.elem_l_)) { Grob*t = text_p_; - Side_position::add_support (t, i.elem_l_); - if (Side_position::get_axis (t) == X_AXIS + Side_position_interface::add_support (t, i.elem_l_); + if (Side_position_interface::get_axis (t) == X_AXIS && !t->parent_l (Y_AXIS)) t->set_parent (i.elem_l_, Y_AXIS); } if (Stem::has_interface (i.elem_l_)) { - Side_position::add_support (text_p_, i.elem_l_); + Side_position_interface::add_support (text_p_, i.elem_l_); } } @@ -174,7 +174,7 @@ A2_engraver::stop_translation_timestep () { if (text_p_) { - Side_position::add_staff_support (text_p_); + Side_position_interface::add_staff_support (text_p_); typeset_grob (text_p_); text_p_ = 0; } diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 5df19061aa..7aa6de3fc8 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -199,17 +199,16 @@ Align_interface::align_elements_to_extents (Grob * me, Axis a) all_translates .push (w); j++; } - } - if (isdir_b (align)) - { - center_offset = total.linear_combination (gh_scm2double (align)); - } + if (isdir_b (align)) + { + center_offset = total.linear_combination (gh_scm2double (align)); + } - for (int j = 0 ; j < all_grobs.size (); j++) - all_grobs[j]->translate_axis (all_translates[j] - center_offset, a); + for (int j = 0 ; j < all_grobs.size (); j++) + all_grobs[j]->translate_axis (all_translates[j] - center_offset, a); + } } - Axis Align_interface::axis (Grob*me) { diff --git a/lily/align-note-column-engraver.cc b/lily/align-note-column-engraver.cc index d03f316746..87dd0f0794 100644 --- a/lily/align-note-column-engraver.cc +++ b/lily/align-note-column-engraver.cc @@ -48,8 +48,8 @@ Align_note_column_engraver::initialize () { align_item_p_ = new Item (get_property ("GraceAlignment")); Grace_align_item::set_interface (align_item_p_); - Side_position::set_axis (align_item_p_, X_AXIS); - Side_position::set_direction (align_item_p_, LEFT); + Side_position_interface::set_axis (align_item_p_, X_AXIS); + Side_position_interface::set_direction (align_item_p_, LEFT); // needed for setting font size. announce_grob (align_item_p_, 0); diff --git a/lily/arpeggio-engraver.cc b/lily/arpeggio-engraver.cc index 76bc80a505..b69aeb35bc 100644 --- a/lily/arpeggio-engraver.cc +++ b/lily/arpeggio-engraver.cc @@ -91,7 +91,7 @@ Arpeggio_engraver::create_grobs () } for (int i = 0; i < supports_.size (); i++) { - Side_position::add_support (arpeggio_, supports_[i]); + Side_position_interface::add_support (arpeggio_, supports_[i]); } announce_grob (arpeggio_, arpeggio_req_); } diff --git a/lily/audio-item.cc b/lily/audio-item.cc index fc22538820..a35f1b42cf 100644 --- a/lily/audio-item.cc +++ b/lily/audio-item.cc @@ -40,9 +40,10 @@ Audio_note::tie_to (Audio_note* t) } -Audio_key::Audio_key () // Key_def const& k) +Audio_key::Audio_key (int acc, bool major) { - //fixme. + accidentals_=acc; + major_=major; } Audio_dynamic::Audio_dynamic (Real volume) diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc index b082ddb1aa..eb91eeef96 100644 --- a/lily/bar-number-engraver.cc +++ b/lily/bar-number-engraver.cc @@ -119,7 +119,7 @@ Bar_number_engraver::create_items () SCM b = get_property ("BarNumber"); text_p_ = new Item (b); - Side_position::set_axis(text_p_,Y_AXIS); + Side_position_interface::set_axis(text_p_,Y_AXIS); announce_grob (text_p_, 0); } diff --git a/lily/break-align-item.cc b/lily/break-align-item.cc index 74dab15ca4..779be73cf3 100644 --- a/lily/break-align-item.cc +++ b/lily/break-align-item.cc @@ -69,7 +69,7 @@ Break_align_interface::self_align_callback (SCM element_smob, SCM axis) */ - return Side_position::aligned_on_self (element_smob, axis); + return Side_position_interface::aligned_on_self (element_smob, axis); } void diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index adc1807f39..f0fe112bac 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -163,7 +163,7 @@ Clef_engraver::create_clef () { Item * g = new Item (get_property ("OctavateEight")); - Side_position::add_support (g,clef_p_); + Side_position_interface::add_support (g,clef_p_); g->set_parent (clef_p_, Y_AXIS); g->set_parent (clef_p_, X_AXIS); diff --git a/lily/dot-column-engraver.cc b/lily/dot-column-engraver.cc index 9fc7bbcd04..9e234405cf 100644 --- a/lily/dot-column-engraver.cc +++ b/lily/dot-column-engraver.cc @@ -54,8 +54,8 @@ Dot_column_engraver::acknowledge_grob (Grob_info info) dotcol_p_ = new Item(get_property ("DotColumn")); Dot_column::set_interface (dotcol_p_); - Side_position::set_axis (dotcol_p_, X_AXIS); - Side_position::set_direction (dotcol_p_, RIGHT); + Side_position_interface::set_axis (dotcol_p_, X_AXIS); + Side_position_interface::set_direction (dotcol_p_, RIGHT); announce_grob (dotcol_p_, 0); } diff --git a/lily/dot-column.cc b/lily/dot-column.cc index cfd51975ac..db7e3b0d3c 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -124,7 +124,7 @@ Dot_column::add_head (Grob * me, Grob *rh) Grob * d = unsmob_grob (rh->get_grob_property ("dot")); if (d) { - Side_position::add_support (me,rh); + Side_position_interface::add_support (me,rh); Pointer_group_interface ::add_element (me, "dots",d); d->add_offset_callback (Dot_column::force_shift_callback_proc , Y_AXIS); diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 2aee3603d1..ae16fb9aaf 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -140,7 +140,7 @@ Dynamic_engraver::process_music () { line_spanner_ = new Spanner (get_property ("DynamicLineSpanner")); - Side_position::set_axis (line_spanner_, Y_AXIS); + Side_position_interface::set_axis (line_spanner_, Y_AXIS); Axis_group_interface::set_interface (line_spanner_); Axis_group_interface::set_axes (line_spanner_, Y_AXIS, Y_AXIS); @@ -174,8 +174,8 @@ Dynamic_engraver::process_music () script_p_->set_grob_property ("text", script_req_l_->get_mus_property ("text")); - Side_position::set_direction (script_p_, LEFT); - Side_position::set_axis (script_p_, X_AXIS); + Side_position_interface::set_direction (script_p_, LEFT); + Side_position_interface::set_axis (script_p_, X_AXIS); if (Direction d = script_req_l_->get_direction ()) Directional_element_interface::set (line_spanner_, d); @@ -339,7 +339,7 @@ Dynamic_engraver::typeset_all () /* To make sure that this works */ - Side_position::add_staff_support (finished_line_spanner_); + Side_position_interface::add_staff_support (finished_line_spanner_); /* We used to have @@ -366,7 +366,7 @@ Dynamic_engraver::acknowledge_grob (Grob_info i) { if (line_spanner_) { - Side_position::add_support (line_spanner_,i.elem_l_); + Side_position_interface::add_support (line_spanner_,i.elem_l_); add_bound_item (line_spanner_,dynamic_cast(i.elem_l_)); } } diff --git a/lily/grace-position-engraver.cc b/lily/grace-position-engraver.cc index b5bf1b1a05..0f732a37d8 100644 --- a/lily/grace-position-engraver.cc +++ b/lily/grace-position-engraver.cc @@ -67,7 +67,7 @@ Grace_position_engraver::create_grobs () if (align_l_) { for (int i=0; i < support_.size (); i++) - Side_position::add_support (align_l_,support_[i]); + Side_position_interface::add_support (align_l_,support_[i]); support_.clear (); } } @@ -75,7 +75,7 @@ Grace_position_engraver::create_grobs () void Grace_position_engraver::stop_translation_timestep () { - if (align_l_ && !Side_position::supported_b (align_l_)) + if (align_l_ && !Side_position_interface::supported_b (align_l_)) { /* We don't have support. Either some moron tried attaching us to a rest, diff --git a/lily/include/audio-item.hh b/lily/include/audio-item.hh index 04b876761f..66246a074a 100644 --- a/lily/include/audio-item.hh +++ b/lily/include/audio-item.hh @@ -46,8 +46,10 @@ public: class Audio_key : public Audio_item { public: - Audio_key (); //Newkey_def const& key); - // FIXME + Audio_key (int acc, bool major); + + int accidentals_; + bool major_; }; class Audio_instrument : public Audio_item diff --git a/lily/include/performer-group-performer.hh b/lily/include/performer-group-performer.hh index 8101186210..a516331ec7 100644 --- a/lily/include/performer-group-performer.hh +++ b/lily/include/performer-group-performer.hh @@ -25,9 +25,9 @@ public: virtual void announce_element (Audio_element_info); protected: Array announce_info_arr_; + void create_audio_elements (); private: - void create_audio_elements (); void acknowledge_audio_elements (); }; diff --git a/lily/include/side-position-interface.hh b/lily/include/side-position-interface.hh index 38ab695aa1..9ce408a662 100644 --- a/lily/include/side-position-interface.hh +++ b/lily/include/side-position-interface.hh @@ -14,18 +14,21 @@ #include "item.hh" /* - TODO: move out unrelated callbacks. + TODO: move out unrelated callbacks. TODO: reduce number of methods. */ -struct Side_position +struct Side_position_interface { public: - DECLARE_SCHEME_CALLBACK(side_position, (SCM element, SCM axis)); - DECLARE_SCHEME_CALLBACK(aligned_on_self, (SCM element, SCM axis)); + DECLARE_SCHEME_CALLBACK(aligned_on_support_extents, (SCM element, SCM axis)); + DECLARE_SCHEME_CALLBACK(aligned_on_support_refpoints, (SCM element, SCM axis)); + DECLARE_SCHEME_CALLBACK(aligned_on_self, (SCM element, SCM axis)); DECLARE_SCHEME_CALLBACK(aligned_side, (SCM element, SCM axis)); DECLARE_SCHEME_CALLBACK(quantised_position, (SCM element, SCM axis)); DECLARE_SCHEME_CALLBACK(centered_on_parent, (SCM element, SCM axis)); + + static SCM general_side_position (Grob*, Axis, bool); static void set_axis (Grob*,Axis); static void set_minimum_space (Grob*,Real); static void set_padding (Grob*,Real); diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index 852ef176d3..9171bb6919 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -13,17 +13,19 @@ #include "system-start-delimiter.hh" #include "side-position-interface.hh" #include "align-interface.hh" +#include "axis-group-interface.hh" +#include "translator-group.hh" class Instrument_name_engraver : public Engraver { Item *text_; - Grob * delim_ ; - + Grob *delim_ ; + void create_text (SCM s); public: VIRTUAL_COPY_CONS(Translator); Instrument_name_engraver (); - + virtual void initialize (); virtual void acknowledge_grob (Grob_info); virtual void stop_translation_timestep (); }; @@ -37,11 +39,19 @@ Instrument_name_engraver::Instrument_name_engraver () } +void +Instrument_name_engraver::initialize () +{ + daddy_trans_l_->set_property ("instrumentSupport", SCM_EOL); +} + void Instrument_name_engraver::stop_translation_timestep () { if (text_) { + text_->set_grob_property ("side-support-elements", + get_property ("instrumentSupport")); typeset_grob (text_); text_ = 0; } @@ -82,12 +92,20 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i) } - if (Align_interface::has_interface (i.elem_l_) - && Align_interface::axis (i.elem_l_) == Y_AXIS - //System_start_delimiter::has_interface (i.elem_l_) - && i.origin_trans_l_->daddy_trans_l_ == daddy_trans_l_) + if (dynamic_cast (i.elem_l_) + && i.elem_l_->has_interface (ly_symbol2scm ("dynamic-interface"))) + return; + + if (dynamic_cast (i.elem_l_) + &&((Axis_group_interface::has_interface (i.elem_l_) + && Axis_group_interface::axis_b (i.elem_l_, Y_AXIS)) + || (Align_interface::has_interface (i.elem_l_) + && Align_interface::axis (i.elem_l_) == Y_AXIS))) { - delim_ = i.elem_l_; + SCM nl = gh_cons (i.elem_l_->self_scm (), + get_property ("instrumentSupport")); + + daddy_trans_l_->set_property ("instrumentSupport", nl); } } diff --git a/lily/key-performer.cc b/lily/key-performer.cc index b379691f75..65bcfba7b2 100644 --- a/lily/key-performer.cc +++ b/lily/key-performer.cc @@ -6,6 +6,7 @@ (c) 1997--2001 Jan Nieuwenhuizen */ +#include "lily-guile.hh" #include "command-request.hh" #include "audio-item.hh" #include "performer.hh" @@ -43,10 +44,14 @@ Key_performer::~Key_performer () void Key_performer::create_audio_elements () { - if (key_req_l_ && - gh_list_p (key_req_l_->get_mus_property ("pitch-alist"))) + if (key_req_l_) { - audio_p_ = new Audio_key (); // *key_req_l_->key_); + SCM pitchlist = key_req_l_->get_mus_property ("pitch-alist"); + SCM proc = scm_eval2 (ly_symbol2scm ("accidentals-in-key"), SCM_EOL); + SCM acc = gh_call1 (proc, pitchlist); + proc = scm_eval2 (ly_symbol2scm ("major-key"), SCM_EOL); + SCM major = gh_call1 (proc, pitchlist); + audio_p_ = new Audio_key (gh_scm2int(acc), major == SCM_BOOL_T); Audio_element_info info (audio_p_, key_req_l_); announce_element (info); key_req_l_ = 0; diff --git a/lily/local-key-engraver.cc b/lily/local-key-engraver.cc index 8055431713..e4ac502388 100644 --- a/lily/local-key-engraver.cc +++ b/lily/local-key-engraver.cc @@ -147,7 +147,7 @@ Local_key_engraver::create_grobs () to_boolean (note_l->get_mus_property ("cautionary")), extra_natural, tie_break_reminder); - Side_position::add_support (key_item_p_,support_l); + Side_position_interface::add_support (key_item_p_,support_l); } /* @@ -192,7 +192,7 @@ Local_key_engraver::create_grobs () if (key_item_p_ && grace_align_l_) { - Side_position::add_support (grace_align_l_,key_item_p_); + Side_position_interface::add_support (grace_align_l_,key_item_p_); grace_align_l_ =0; } @@ -206,7 +206,7 @@ Local_key_engraver::create_grobs () (Arpeggios are engraved left of accidentals, of course.) */ for (int i=0; i < arpeggios_.size (); i++) - Side_position::add_support (arpeggios_[i], key_item_p_); + Side_position_interface::add_support (arpeggios_[i], key_item_p_); arpeggios_.clear (); } @@ -224,7 +224,7 @@ Local_key_engraver::stop_translation_timestep() if (key_item_p_) { for (int i=0; i < support_l_arr_.size(); i++) - Side_position::add_support (key_item_p_,support_l_arr_[i]); + Side_position_interface::add_support (key_item_p_,support_l_arr_[i]); typeset_grob (key_item_p_); key_item_p_ =0; diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc index e559ff8029..b860caba17 100644 --- a/lily/mark-engraver.cc +++ b/lily/mark-engraver.cc @@ -107,7 +107,7 @@ Mark_engraver::create_items (Request *rq) text_p_ = new Item (s); - Side_position::set_axis (text_p_, Y_AXIS); + Side_position_interface::set_axis (text_p_, Y_AXIS); announce_grob (text_p_, rq); } diff --git a/lily/midi-item.cc b/lily/midi-item.cc index 64aa262a26..e4cc8262f4 100644 --- a/lily/midi-item.cc +++ b/lily/midi-item.cc @@ -357,24 +357,12 @@ Midi_key::Midi_key (Audio_key*a) String Midi_key::str () const { - // fxime. - int sharps_i = 0; //audio_l_->key_.sharps_i (); - int flats_i = 0; //audio_l_->key_.flats_i (); - - // midi cannot handle non-conventional keys - if (flats_i && sharps_i) - { - String str = _f ("unconventional key: flats: %d, sharps: %d", flats_i, - sharps_i); - flats_i = sharps_i = 0; - } - int accidentals_i = sharps_i - flats_i; - String str = "ff5902"; - str += String_convert::i2hex_str (accidentals_i, 2, '0'); - - // (int)audio_l_->key_.minor_b () - str += String_convert::i2hex_str (0, 2, '0'); + str += String_convert::i2hex_str (audio_l_->accidentals_, 2, '0'); + if (audio_l_->major_) + str += String_convert::i2hex_str (0, 2, '0'); + else + str += String_convert::i2hex_str (1, 2, '0'); return String_convert::hex2bin_str (str); } diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index 5317b7ada1..46016c7573 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -97,6 +97,11 @@ Paper_outputter::output_header () generate = generate.left_str (generate.length_i () - 1); } + /* + Make fixed length time stamps + */ + generate = generate + to_str (' ' * (120 - generate.length_i ())>? 0) ; + SCM args_scm = gh_list (ly_str02scm (creator.ch_l ()), ly_str02scm (generate.ch_l ()), SCM_UNDEFINED); diff --git a/lily/performance.cc b/lily/performance.cc index 7418c30f86..9e8715b111 100644 --- a/lily/performance.cc +++ b/lily/performance.cc @@ -104,6 +104,11 @@ Performance::output_header_track (Midi_stream& midi_stream) str += ctime (&t); str = str.left_str (str.length_i() - 1); } + + /* + Pad out time stamps to 120 chars. */ + str = str + to_str (' ' , (120 - str.length_i ()) >? 0); + Audio_text generate_a (Audio_text::TEXT, str); Midi_text generate (&generate_a); midi_track.add (Moment (0), &generate); diff --git a/lily/piano-pedal-engraver.cc b/lily/piano-pedal-engraver.cc index 641a7fb0f7..527bd396c7 100644 --- a/lily/piano-pedal-engraver.cc +++ b/lily/piano-pedal-engraver.cc @@ -90,15 +90,15 @@ Piano_pedal_engraver::acknowledge_grob (Grob_info info) { if (Rhythmic_head::has_interface (info.elem_l_)) { - Side_position::add_support (p->item_p_, info.elem_l_); + Side_position_interface::add_support (p->item_p_, info.elem_l_); - if (Side_position::get_axis(p->item_p_) == X_AXIS + if (Side_position_interface::get_axis(p->item_p_) == X_AXIS && !p->item_p_->parent_l (Y_AXIS)) p->item_p_->set_parent (info.elem_l_, Y_AXIS); } if (Stem::has_interface (info.elem_l_)) { - Side_position::add_support (p->item_p_,info.elem_l_); + Side_position_interface::add_support (p->item_p_,info.elem_l_); } } } @@ -195,7 +195,7 @@ Piano_pedal_engraver::stop_translation_timestep () { if (p->item_p_) { - Side_position::add_staff_support (p->item_p_); + Side_position_interface::add_staff_support (p->item_p_); /* Hmm. @@ -204,7 +204,7 @@ Piano_pedal_engraver::stop_translation_timestep () { if (sustain) { - Side_position::add_support (p->item_p_,sustain); + Side_position_interface::add_support (p->item_p_,sustain); } } typeset_grob (p->item_p_); diff --git a/lily/rest-engraver.cc b/lily/rest-engraver.cc index 7fbaa78e0d..69839a7e29 100644 --- a/lily/rest-engraver.cc +++ b/lily/rest-engraver.cc @@ -70,7 +70,6 @@ Rest_engraver::create_grobs () 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 (); diff --git a/lily/script-column-engraver.cc b/lily/script-column-engraver.cc index 185ae49cdf..5f0b41db4e 100644 --- a/lily/script-column-engraver.cc +++ b/lily/script-column-engraver.cc @@ -57,10 +57,10 @@ void Script_column_engraver::acknowledge_grob(Grob_info inf) { Item *thing = dynamic_cast (inf.elem_l_); - if (thing && Side_position::has_interface (inf.elem_l_)) // ugh FIXME + if (thing && Side_position_interface::has_interface (inf.elem_l_)) // ugh FIXME { if (!Item::breakable_b (thing) - && Side_position::get_axis (inf.elem_l_) == Y_AXIS) + && Side_position_interface::get_axis (inf.elem_l_) == Y_AXIS) { script_l_arr_.push (thing); } diff --git a/lily/script-column.cc b/lily/script-column.cc index 2c7e6b24de..1bddead770 100644 --- a/lily/script-column.cc +++ b/lily/script-column.cc @@ -46,7 +46,7 @@ Script_column::before_line_breaking (SCM smob) for (int i=0; i < staff_sided.size (); i++) { - arrs[Side_position::get_direction (staff_sided[i])] + arrs[Side_position_interface::get_direction (staff_sided[i])] .push (staff_sided[i]); } @@ -61,7 +61,7 @@ Script_column::before_line_breaking (SCM smob) { if (last) - Side_position::add_support( arr[i],last); + Side_position_interface::add_support( arr[i],last); arr[i]->remove_grob_property ("script-priority"); last = arr[i]; diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index c8d677d26e..22870e2075 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -100,13 +100,13 @@ Script_engraver::create_grobs () */ SCM axisprop = get_property ("scriptHorizontal"); bool xaxis = to_boolean (axisprop); - Side_position::set_axis (p, xaxis ? X_AXIS : Y_AXIS); + Side_position_interface::set_axis (p, xaxis ? X_AXIS : Y_AXIS); if (!follow_staff && ! xaxis) p->set_grob_property ("staff-support", SCM_BOOL_T); if (!xaxis && follow_staff) - p->add_offset_callback (Side_position::quantised_position_proc, Y_AXIS); + p->add_offset_callback (Side_position_interface::quantised_position_proc, Y_AXIS); p->set_grob_property ("script-priority", priority); @@ -134,7 +134,7 @@ Script_engraver::acknowledge_grob (Grob_info inf) Grob*e = script_p_arr_[i]; e->set_grob_property ("direction-source", inf.elem_l_->self_scm ()); - Side_position::add_support (e, inf.elem_l_); + Side_position_interface::add_support (e, inf.elem_l_); } } else if (Rhythmic_head::has_interface (inf.elem_l_)) @@ -147,11 +147,11 @@ Script_engraver::acknowledge_grob (Grob_info inf) { e->set_parent (inf.elem_l_, X_AXIS); } - if (Side_position::get_axis (e) == X_AXIS + if (Side_position_interface::get_axis (e) == X_AXIS && !e->parent_l (Y_AXIS)) e->set_parent (inf.elem_l_, Y_AXIS); - Side_position::add_support (e,inf.elem_l_); + Side_position_interface::add_support (e,inf.elem_l_); } } } @@ -164,7 +164,7 @@ Script_engraver::stop_translation_timestep() Grob * sc = script_p_arr_[i]; if (to_boolean (sc->get_grob_property ("staff-support"))) { - Side_position::add_staff_support (sc); + Side_position_interface::add_staff_support (sc); } typeset_grob (sc); } diff --git a/lily/script.cc b/lily/script.cc index 6ed6ee306c..b19724f6b1 100644 --- a/lily/script.cc +++ b/lily/script.cc @@ -44,8 +44,8 @@ Script::after_line_breaking (SCM smob) { Grob * me = unsmob_grob (smob); - Direction d = Side_position::get_direction (me); - Side_position::set_direction (me,d); + Direction d = Side_position_interface::get_direction (me); + Side_position_interface::set_direction (me,d); return SCM_UNSPECIFIED; } @@ -62,7 +62,7 @@ Script::brew_molecule (SCM smob) if (isdir_b (d)) dir = to_dir (d); #endif - Direction dir = Side_position::get_direction(me); + Direction dir = Side_position_interface::get_direction(me); return get_molecule (me, dir).smobbed_copy(); } diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc index f19e5471cc..f18363f95d 100644 --- a/lily/side-position-interface.cc +++ b/lily/side-position-interface.cc @@ -16,7 +16,7 @@ #include "group-interface.hh" void -Side_position::add_support (Grob*me, Grob*e) +Side_position_interface::add_support (Grob*me, Grob*e) { Pointer_group_interface::add_element (me, "side-support-elements",e); } @@ -24,7 +24,7 @@ Side_position::add_support (Grob*me, Grob*e) Direction -Side_position::get_direction (Grob*me) +Side_position_interface::get_direction (Grob*me) { SCM d = me->get_grob_property ("direction"); if (isdir_b (d) && to_dir (d)) @@ -41,23 +41,31 @@ Side_position::get_direction (Grob*me) Grob * e = unsmob_grob(other_elt); if (e) { - return (Direction)(relative_dir * Side_position::get_direction (e)); + return (Direction)(relative_dir * Side_position_interface::get_direction (e)); } - return DOWN; + return CENTER; } -/* - Callback that does the aligning. Puts the element next to the support - */ -MAKE_SCHEME_CALLBACK(Side_position,side_position,2); +MAKE_SCHEME_CALLBACK(Side_position_interface,aligned_on_support_extents, 2); SCM -Side_position::side_position (SCM element_smob, SCM axis) +Side_position_interface::aligned_on_support_extents (SCM element_smob, SCM axis) { Grob *me = unsmob_grob (element_smob); Axis a = (Axis) gh_scm2int (axis); + return general_side_position (me, a, true); +} + + +/* + Puts the element next to the support, optionally taking in + account the extent of the support. +*/ +SCM +Side_position_interface::general_side_position (Grob * me, Axis a, bool use_extents) +{ Grob *common = me->parent_l (a); SCM support = me->get_grob_property ("side-support-elements"); for (SCM s = support; s != SCM_EOL; s = gh_cdr (s)) @@ -70,12 +78,15 @@ Side_position::side_position (SCM element_smob, SCM axis) Interval dim; for (SCM s = support; s != SCM_EOL; s = gh_cdr (s)) { - Grob * e = unsmob_grob ( gh_car (s)); if (e) - { + if (use_extents) dim.unite (e->extent (common, a)); - } + else + { + Real x = e->relative_coordinate (common, a); + dim.unite (Interval (x,x)); + } } if (dim.empty_b ()) @@ -83,33 +94,51 @@ Side_position::side_position (SCM element_smob, SCM axis) dim = Interval(0,0); } - Direction dir = Side_position::get_direction (me); + Direction dir = Side_position_interface::get_direction (me); Real off = me->parent_l (a)->relative_coordinate (common, a); SCM minimum = me->remove_grob_property ("minimum-space"); - Real total_off = dim[dir] + off; + Real total_off = dim.linear_combination (dir) + off; SCM padding = me->remove_grob_property ("padding"); if (gh_number_p (padding)) { total_off += gh_scm2double (padding) * dir; } - if (gh_number_p (minimum) && total_off * dir < gh_scm2double (minimum)) + + if (gh_number_p (minimum) + && dir + && total_off * dir < gh_scm2double (minimum)) { total_off = gh_scm2double (minimum) * dir; } + if (fabs (total_off) > 100 CM) programming_error ("Huh ? Improbable staff side dim."); return gh_double2scm (total_off); } +/* + Cut & paste (ugh.) + */ +MAKE_SCHEME_CALLBACK(Side_position_interface,aligned_on_support_refpoints,2); +SCM +Side_position_interface::aligned_on_support_refpoints (SCM smob, SCM axis) +{ + Grob *me = unsmob_grob (smob); + Axis a = (Axis) gh_scm2int (axis); + + return general_side_position (me, a, false); +} + + /** callback that centers the element on itself */ -MAKE_SCHEME_CALLBACK(Side_position,aligned_on_self,2); +MAKE_SCHEME_CALLBACK(Side_position_interface,aligned_on_self,2); SCM -Side_position::aligned_on_self (SCM element_smob, SCM axis) +Side_position_interface::aligned_on_self (SCM element_smob, SCM axis) { Grob *me = unsmob_grob (element_smob); Axis a = (Axis) gh_scm2int (axis); @@ -156,14 +185,14 @@ directed_round (Real f, Direction d) Only rounds when we're inside the staff, as determined by Staff_symbol_referencer::staff_radius() */ -MAKE_SCHEME_CALLBACK(Side_position,quantised_position,2); +MAKE_SCHEME_CALLBACK(Side_position_interface,quantised_position,2); SCM -Side_position::quantised_position (SCM element_smob, SCM ) +Side_position_interface::quantised_position (SCM element_smob, SCM ) { Grob *me = unsmob_grob (element_smob); - Direction d = Side_position::get_direction (me); + Direction d = Side_position_interface::get_direction (me); if (Staff_symbol_referencer::has_interface (me)) { @@ -186,15 +215,15 @@ Side_position::quantised_position (SCM element_smob, SCM ) /* Position next to support, taking into account my own dimensions and padding. */ -MAKE_SCHEME_CALLBACK(Side_position,aligned_side,2); +MAKE_SCHEME_CALLBACK(Side_position_interface,aligned_side,2); SCM -Side_position::aligned_side (SCM element_smob, SCM axis) +Side_position_interface::aligned_side (SCM element_smob, SCM axis) { Grob *me = unsmob_grob (element_smob); Axis a = (Axis) gh_scm2int (axis); - Direction d = Side_position::get_direction (me); - Real o = gh_scm2double (side_position (element_smob,axis)); + Direction d = Side_position_interface::get_direction (me); + Real o = gh_scm2double (aligned_on_support_extents (element_smob,axis)); Interval iv = me->extent (me, a); @@ -212,9 +241,9 @@ Side_position::aligned_side (SCM element_smob, SCM axis) /* Position centered on parent. */ -MAKE_SCHEME_CALLBACK(Side_position,centered_on_parent,2); +MAKE_SCHEME_CALLBACK(Side_position_interface,centered_on_parent,2); SCM -Side_position::centered_on_parent (SCM element_smob, SCM axis) +Side_position_interface::centered_on_parent (SCM element_smob, SCM axis) { Grob *me = unsmob_grob (element_smob); Axis a = (Axis) gh_scm2int (axis); @@ -225,7 +254,7 @@ Side_position::centered_on_parent (SCM element_smob, SCM axis) void -Side_position::add_staff_support (Grob*me) +Side_position_interface::add_staff_support (Grob*me) { Grob* st = Staff_symbol_referencer::staff_symbol_l (me); if (st) @@ -235,19 +264,19 @@ Side_position::add_staff_support (Grob*me) } void -Side_position::set_axis (Grob*me, Axis a) +Side_position_interface::set_axis (Grob*me, Axis a) { - me->add_offset_callback (Side_position::aligned_side_proc, a); + me->add_offset_callback (Side_position_interface::aligned_side_proc, a); } // ugh. doesn't cactch all variants. Axis -Side_position::get_axis (Grob*me) +Side_position_interface::get_axis (Grob*me) { - if (me->has_offset_callback_b (Side_position::aligned_side_proc, X_AXIS) - || me->has_offset_callback_b (Side_position::aligned_side_proc , X_AXIS)) + if (me->has_offset_callback_b (Side_position_interface::aligned_side_proc, X_AXIS) + || me->has_offset_callback_b (Side_position_interface::aligned_side_proc , X_AXIS)) return X_AXIS; @@ -255,31 +284,31 @@ Side_position::get_axis (Grob*me) } void -Side_position::set_direction (Grob*me, Direction d) +Side_position_interface::set_direction (Grob*me, Direction d) { me->set_grob_property ("direction", gh_int2scm (d)); } void -Side_position::set_minimum_space (Grob*me, Real m) +Side_position_interface::set_minimum_space (Grob*me, Real m) { me->set_grob_property ("minimum-space", gh_double2scm (m)); } void -Side_position::set_padding (Grob*me, Real p) +Side_position_interface::set_padding (Grob*me, Real p) { me->set_grob_property ("padding", gh_double2scm (p)); } bool -Side_position::has_interface (Grob*me) +Side_position_interface::has_interface (Grob*me) { return me->has_interface (ly_symbol2scm ("side-position-interface")); } bool -Side_position::supported_b (Grob*me) +Side_position_interface::supported_b (Grob*me) { SCM s = me->get_grob_property ("side-support-elements"); return gh_pair_p(s); diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index 1b28a06336..c8baab0edd 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -85,6 +85,7 @@ Staff_performer::create_audio_elements () instrument_p_ = new Audio_instrument (str); announce_element (Audio_element_info (instrument_p_, 0)); } + Performer_group_performer::create_audio_elements (); } void diff --git a/lily/syllable-group.cc b/lily/syllable-group.cc index 5b1e5c6cfe..6965162778 100644 --- a/lily/syllable-group.cc +++ b/lily/syllable-group.cc @@ -120,7 +120,7 @@ Syllable_group::set_lyric_align(const char *punc, Grob *default_notehead_l) // centre on notehead ... if we have one. if(notehead_l_) { lyric->set_parent(notehead_l_, X_AXIS); - lyric->add_offset_callback (Side_position::centered_on_parent_proc, X_AXIS); + lyric->add_offset_callback (Side_position_interface::centered_on_parent_proc, X_AXIS); // reference is on the right of the notehead; move it left half way, and add translation lyric->translate_axis (group_translation_f_-(notehead_l_->extent(notehead_l_, X_AXIS)).center(), X_AXIS); } diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index 6f3223ad18..85d4947d59 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -100,7 +100,8 @@ System_start_delimiter::brew_molecule (SCM smob) (me->self_scm(), gh_int2scm (Y_AXIS))); Real l = ext.length () / staff_space; - if (gh_number_p (c) && l <= gh_scm2double (c)) + if (ext.empty_b () + || (gh_number_p (c) && l <= gh_scm2double (c))) { me->suicide(); return SCM_EOL; diff --git a/lily/tempo-performer.cc b/lily/tempo-performer.cc index 413b45ce23..5691cdf5e2 100644 --- a/lily/tempo-performer.cc +++ b/lily/tempo-performer.cc @@ -49,7 +49,7 @@ Tempo_performer::create_audio_elements () { SCM met = tempo_req_l_->get_mus_property ("metronome-count"); - Duration *d = unsmob_duration (tempo_req_l_->get_mus_property ("tempo")); + Duration *d = unsmob_duration (tempo_req_l_->get_mus_property ("duration")); audio_p_ = new Audio_tempo (d->length_mom () / Moment (1, 4) diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index cb668b4146..e4d2bbc882 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -53,15 +53,15 @@ Text_engraver::acknowledge_grob (Grob_info inf) for (int i=0; i < texts_.size (); i++) { Grob*t = texts_[i]; - Side_position::add_support (t,inf.elem_l_); + Side_position_interface::add_support (t,inf.elem_l_); /* ugh. */ - if (Side_position::get_axis( t) == X_AXIS + if (Side_position_interface::get_axis( t) == X_AXIS && !t->parent_l (Y_AXIS)) t->set_parent (inf.elem_l_, Y_AXIS); - else if (Side_position::get_axis(t) == Y_AXIS + else if (Side_position_interface::get_axis(t) == Y_AXIS && !t->parent_l (X_AXIS)) t->set_parent (inf.elem_l_, X_AXIS); } @@ -71,7 +71,7 @@ Text_engraver::acknowledge_grob (Grob_info inf) { for (int i=0; i < texts_.size (); i++) { - Side_position::add_support(texts_[i],inf.elem_l_); + Side_position_interface::add_support(texts_[i],inf.elem_l_); } } } @@ -101,7 +101,7 @@ Text_engraver::create_grobs () SCM axisprop = get_property ("scriptHorizontal"); Axis ax = to_boolean (axisprop) ? X_AXIS : Y_AXIS; - Side_position::set_axis (text, ax); + Side_position_interface::set_axis (text, ax); #if 0 if (r->style_str_ == "finger" && ax == Y_AXIS) @@ -109,8 +109,8 @@ Text_engraver::create_grobs () /* nicely center the scripts. */ - text->add_offset_callback (Side_position::aligned_on_self_proc, X_AXIS); - text->add_offset_callback (Side_position::centered_on_parent_proc, X_AXIS); + text->add_offset_callback (Side_position_interface::aligned_on_self_proc, X_AXIS); + text->add_offset_callback (Side_position_interface::centered_on_parent_proc, X_AXIS); } #endif @@ -123,7 +123,7 @@ Text_engraver::create_grobs () gh_int2scm (200 + i)); if (r->get_direction ()) - Side_position::set_direction (text, r->get_direction ()); + Side_position_interface::set_direction (text, r->get_direction ()); text->set_grob_property ("text", r->get_mus_property ("text")); @@ -145,7 +145,7 @@ Text_engraver::stop_translation_timestep () for (int i=0; i < texts_.size (); i++) { Item *ti = texts_[i]; - Side_position::add_staff_support (ti); + Side_position_interface::add_staff_support (ti); typeset_grob (ti); } texts_.clear (); diff --git a/lily/text-spanner-engraver.cc b/lily/text-spanner-engraver.cc index 07e9b00fbd..bba9f9be4e 100644 --- a/lily/text-spanner-engraver.cc +++ b/lily/text-spanner-engraver.cc @@ -123,7 +123,7 @@ Text_spanner_engraver::create_grobs () span_->set_grob_property ("if-text-padding", gh_double2scm (0)); span_->set_grob_property ("width-correct", gh_double2scm (0)); - Side_position::set_axis (span_, Y_AXIS); + Side_position_interface::set_axis (span_, Y_AXIS); Grob *e = unsmob_grob (get_property ("currentMusicalColumn")); span_->set_bound (LEFT, e); @@ -138,7 +138,7 @@ Text_spanner_engraver::acknowledge_grob (Grob_info info) { if (span_ && Note_column::has_interface (info.elem_l_)) { - Side_position::add_support (span_, info.elem_l_); + Side_position_interface::add_support (span_, info.elem_l_); add_bound_item (span_, dynamic_cast (info.elem_l_)); } } @@ -148,7 +148,7 @@ Text_spanner_engraver::typeset_all () { if (finished_) { - Side_position::add_staff_support (finished_); + Side_position_interface::add_staff_support (finished_); typeset_grob (finished_); finished_ = 0; } diff --git a/lily/time-signature-performer.cc b/lily/time-signature-performer.cc index d1f3599d78..0bcf5a4c40 100644 --- a/lily/time-signature-performer.cc +++ b/lily/time-signature-performer.cc @@ -49,6 +49,7 @@ Time_signature_performer::create_audio_elements () if (gh_pair_p (fr) && scm_equal_p (fr, prev_fraction_) != SCM_BOOL_T) { + prev_fraction_ = fr; int b = gh_scm2int (gh_car (fr)); int o = gh_scm2int (gh_cdr (fr)); diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index f21f8aebba..a6a9bbd7ba 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -173,7 +173,7 @@ Volta_engraver::stop_translation_timestep () { if (end_volta_span_p_) { - Side_position::add_staff_support (end_volta_span_p_); + Side_position_interface::add_staff_support (end_volta_span_p_); typeset_grob (end_volta_span_p_ ); end_volta_span_p_ =0; diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc index df0d1e6349..0385af35c2 100644 --- a/lily/volta-spanner.cc +++ b/lily/volta-spanner.cc @@ -111,12 +111,12 @@ void Volta_spanner::add_bar (Grob *me, Item* b) { Pointer_group_interface::add_element(me, "bars",b); - Side_position::add_support (me,b); + Side_position_interface::add_support (me,b); add_bound_item (dynamic_cast(me), b); } void Volta_spanner::add_column (Grob*me, Grob* c) { - Side_position::add_support (me,c); + Side_position_interface::add_support (me,c); } diff --git a/ly/performer.ly b/ly/performer.ly index c3ba784bea..04456979a1 100644 --- a/ly/performer.ly +++ b/ly/performer.ly @@ -7,8 +7,8 @@ StaffContext = \translator { \accepts Voice; \consists "Key_performer"; - \consists "Time_signature_performer"; \consists "Tempo_performer"; + \consists "Time_signature_performer"; dynamicStyle = #"dynamic" }; \translator { \StaffContext } diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index f2ab5bc800..d3045fbb39 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,15 +1,15 @@ Begin3 Title: LilyPond -Version: 1.3.133 -Entered-date: 27FEB01 +Version: 1.3.134 +Entered-date: 02MAR01 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.3.133.tar.gz + 1000k lilypond-1.3.134.tar.gz Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 1000k lilypond-1.3.133.tar.gz + 1000k lilypond-1.3.134.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec index 9af8e61b1b..54502513a3 100644 --- a/make/out/lilypond.spec +++ b/make/out/lilypond.spec @@ -1,11 +1,11 @@ %define info yes Name: lilypond -Version: 1.3.133 +Version: 1.3.134 Release: 1 License: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.133.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.134.tar.gz Summary: A program for printing sheet music. URL: http://www.cs.uu.nl/~hanwen/lilypond # Icon: lilypond-icon.gif diff --git a/mutopia/Coriolan/c-midi.ly b/mutopia/Coriolan/c-midi.ly deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/scm/backend-documentation-lib.scm b/scm/backend-documentation-lib.scm index 5cdad802be..ace2bec64f 100644 --- a/scm/backend-documentation-lib.scm +++ b/scm/backend-documentation-lib.scm @@ -135,18 +135,6 @@ (use-modules (ice-9 string-fun)) -(define interface-file-str (string-append (ly-gulp-file "interface-description.scm") "\n(define ")) - -;;(define (list-interface-names) -(define (ugh-standalone-list-interface-names) - (let* ((text interface-file-str) - (t1 (regexp-substitute/global #f "\n" text 'pre 'post)) - (t (regexp-substitute/global #f "[^\t ]define[ \t]*([a-z-]+interface)" - t1 1 " " 'post)) - (ugh (regexp-substitute/global #f " .*" t 'pre 'post)) - (l (separate-fields-discarding-char #\ ugh list))) - (reverse (cdr (reverse l))))) - (if standalone (begin (display "(define (list-interface-names) '") @@ -154,20 +142,10 @@ (display ")") (exit 0))) -;; Ugh -;; This list is generated manually, by doing: -;; guile -;; guile> (load "backend-documentation-lib.scm") -;; For some reason, this can't be generated when lilypond is loaded; -;; the regexp stuff behaves weird. -(define (list-interface-names) '("general-grob-interface" "beam-interface" "clef-interface" "axis-group-interface" "note-column-interface" "stem-interface" "slur-interface" "side-position-interface" "accidentals-interface" "line-of-score-interface" "note-head-interface" "note-name-interface" "rhythmic-head-interface" "rest-interface" "tuplet-bracket-interface" "align-interface" "aligned-interface" "break-aligned-interface" "chord-name-interface" "time-signature-interface" "bar-line-interface" "hairpin-interface" "arpeggio-interface" "note-collision-interface" "custos-interface" "dot-interface" "font-interface" "text-interface" "dot-column-interface" "dynamic-interface" "finger-interface" "separation-spanner-interface" "text-script-interface" "grace-alignment-interface" "hara-kiri-group-interface" "line-spanner-interface" "lyric-hyphen-interface" "key-signature-interface" "lyric-extender-interface" "lyric-syllable-interface" "mark-interface" "multi-measure-rest-interface" "paper-column-interface" "spaceable-element-interface" "rest-collision-interface" "script-interface" "script-column-interface" "spacing-spanner-interface" "staff-symbol-interface" "stem-tremolo-interface" "separation-item-interface" "sustain-pedal-interface" "system-start-delimiter-interface" "text-spanner-interface" "tie-interface" "tie-column-interface" "volta-bracket-interface" "span-bar-interface")) - - -(eval-string (ly-gulp-file "interface-description.scm")) (define interface-description-alist (map (lambda (x) (cons (string->symbol x) (eval-string x))) - (list-interface-names))) + (interface-names))) (set! interface-description-alist (sort interface-description-alist alist +=> - arithmetic_basicspace = 2/1 = 2 +arithmetic_basicspace = 2/1 = 2 If you want to space your music wider, use something like: - arithmetic_basicspace = 4.; +arithmetic_basicspace = 4.; @end example" '( @@ -670,9 +659,22 @@ If you want to space your music wider, use something like: arithmetic-basicspace arithmetic-multiplier - ))) + )) + + + (lily-interface + 'staff-symbol-referencer-interface + + "Object whose Y position is meaning with reference to a staff +symbol. Objects that have this interface should include +Staff_symbol_referencer::callback in their Y-offset-callback. +" + '( + staff-symbol + staff-position + )) + -(define staff-symbol-interface (lily-interface 'staff-symbol-interface "This spanner draws the lines of a staff. The middle line is @@ -681,43 +683,43 @@ position 0." staff-space line-count invisible-staff - ))) + )) + -(define stem-tremolo-interface (lily-interface 'stem-tremolo-interface "" '( stem beam-width beam-thickness beam-space-function - ))) + )) + -(define separation-item-interface (lily-interface 'separation-item-interface "Item that computes widths to generate spacing rods. Calc dimensions for the Separating_group_spanner; this has to be - an item to get dependencies correct. It can't be an grob_group - since these usually are in a different X_group +an item to get dependencies correct. It can't be an grob_group +since these usually are in a different X_group " '( elements - ))) + )) + -(define sustain-pedal-interface (lily-interface 'sustain-pedal-interface "" '( - ))) -(define system-start-delimiter-interface + )) + (lily-interface 'system-start-delimiter-interface "#'style can be bar-line, bracket or brace" '(bar-line-collapse-height brace-collapse-height bracket-collapse-height thickness arch-height arch-angle arch-thick - arch-width bracket-thick glyph ))) + arch-width bracket-thick glyph )) + -(define text-spanner-interface (lily-interface 'text-spanner-interface "generic text spanner" @@ -728,10 +730,9 @@ Calc dimensions for the Separating_group_spanner; this has to be edge-height edge-text type - ) )) -(define tie-interface + (lily-interface 'tie-interface "A tie connecting two noteheads. @@ -746,18 +747,18 @@ direction = Forced direction for all ties" x-gap direction minimum-length - ))) + )) + -(define tie-column-interface (lily-interface 'tie-column-interface "that sets tie directions in a tied chord" - '(direction) + '(direction )) -(define volta-bracket-interface + (lily-interface 'volta-bracket-interface "Volta bracket with number" @@ -765,15 +766,21 @@ direction = Forced direction for all ties" bars thickness height - ))) + )) + -(define span-bar-interface (lily-interface 'span-bar-interface "A bar line that spans other barlines (typically used to get cross-staff barlines." '( - ))) + )) + + +(eval (cons + 'begin + (map (lambda (x) (list 'define (car x) (list 'quote (cdr x)))) + all-interfaces))) -;(define urg-miss-last-interface ) +(define interface-names (map (lambda (x) (symbol->string (car x))) all-interfaces)) diff --git a/scm/midi.scm b/scm/midi.scm index ed637bfd13..c2cdabe9e8 100644 --- a/scm/midi.scm +++ b/scm/midi.scm @@ -55,3 +55,13 @@ ;; 90 == 90/127 == 0.71 is supposed to be the default value ;; urg: we should set this at start of track (define dynamic-default-volume 0.71) + +;; Count number of sharps minus number of flats +(define (accidentals-in-key pitch-list) + (apply + (map cdr pitch-list))) + +;; Characterise the key as major if the alteration of the +;; third scale note is the same as that of the main note +;; Note: MIDI cannot handle other tonalities than major/minor. +(define (major-key pitch-list) + (eq? (cdr (list-ref pitch-list 4)) (cdr (list-ref pitch-list 6)))) diff --git a/scm/tex.scm b/scm/tex.scm index ef5d567f9a..aad55f430c 100644 --- a/scm/tex.scm +++ b/scm/tex.scm @@ -107,6 +107,7 @@ "}" "\\input lilyponddefs\\newdimen\\outputscale \\outputscale=\\lilypondpaperoutputscale pt\\turnOnPostScript")) + ;; Note: this string must match the string in ly2dvi.py!!! (define (header creator generate) (string-append "% Generated automatically by: " creator generate "\n")) diff --git a/scm/translator-property-description.scm b/scm/translator-property-description.scm index 350aee59c5..08d4760326 100644 --- a/scm/translator-property-description.scm +++ b/scm/translator-property-description.scm @@ -151,6 +151,8 @@ Staff.defaultBarType will have no effect. (translator-property-description 'chordChanges boolean? "Only generate chords if they change. ") +(translator-property-description 'easyPlay boolean? "Copy note names into note head grob property") + (translator-property-description 'explicitClefVisibility procedure? "visibility-lambda function for clef changes.") (translator-property-description 'explicitKeySignatureVisibility diff --git a/scripts/ly2dvi.py b/scripts/ly2dvi.py index 8f5d9da305..23f38433b6 100644 --- a/scripts/ly2dvi.py +++ b/scripts/ly2dvi.py @@ -119,7 +119,7 @@ class Input: firstline = this.__fd.readline() this.__fd.seek(0) - if re.match('%created by: GNU LilyPond [0-9]+[.0-9]+',firstline ): + if re.match('% Generated automatically by: GNU LilyPond [0-9]+[.0-9]+',firstline ): return 'output' else: return 'source' diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex index 91477809e4..acaa11d23a 100644 --- a/tex/lilyponddefs.tex +++ b/tex/lilyponddefs.tex @@ -57,7 +57,7 @@ \fi \def\EndLilyPondOutput{% - \vskip 0pt plus 100fill\csname bye\endcsname + \vskip 0pt plus \lilypondpaperinterscorelinefill00 fill\csname bye\endcsname } \def\postheader{} -- 2.39.5