]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.80
authorfred <fred>
Tue, 26 Mar 2002 23:55:00 +0000 (23:55 +0000)
committerfred <fred>
Tue, 26 Mar 2002 23:55:00 +0000 (23:55 +0000)
78 files changed:
CHANGES
Documentation/faq.texi
Documentation/regression-test.tely
NEWS
input/bugs/hang.ly [new file with mode: 0644]
input/test/hymn.ly
input/test/monstrous.ly [new file with mode: 0644]
input/test/multistanza.ly
input/test/part-combine-score.ly [new file with mode: 0644]
input/test/part-combine-staff.ly [new file with mode: 0644]
input/test/part-combine.ly
input/test/short-part-combine.ly
input/test/slur-broken.ly [new file with mode: 0644]
input/test/slur-nice.ly [new file with mode: 0644]
lily/a2-devnull-engraver.cc
lily/a2-engraver.cc
lily/bezier-bow.cc
lily/duration.cc
lily/include/duration.hh
lily/include/lyric-phrasing-engraver.hh
lily/include/musical-request.hh
lily/include/part-combine-music-iterator.hh
lily/lyric-phrasing-engraver.cc
lily/melisma-engraver.cc
lily/musical-pitch.cc
lily/my-lily-lexer.cc
lily/note-heads-engraver.cc
lily/parser.yy
lily/part-combine-music-iterator.cc
lily/rest-engraver.cc
lily/slur.cc
lily/spanner.cc
lily/thread-devnull-engraver.cc [new file with mode: 0644]
lily/voice-devnull-engraver.cc [new file with mode: 0644]
ly/engraver.ly
ly/performer.ly
mutopia/Coriolan/bassi-part.ly
mutopia/Coriolan/clarinetti-part.ly
mutopia/Coriolan/clarinetti.ly
mutopia/Coriolan/clarinetto-1.ly
mutopia/Coriolan/clarinetto-2.ly
mutopia/Coriolan/contrabasso.ly
mutopia/Coriolan/coriolan-midi.ly
mutopia/Coriolan/coriolan-paper.ly
mutopia/Coriolan/coriolan-part-combine-paper.ly [new file with mode: 0644]
mutopia/Coriolan/coriolan-part-paper.ly
mutopia/Coriolan/coriolan.ly
mutopia/Coriolan/corni-part.ly
mutopia/Coriolan/corni.ly
mutopia/Coriolan/corno-1.ly
mutopia/Coriolan/corno-2.ly
mutopia/Coriolan/fagotti-part.ly
mutopia/Coriolan/fagotti.ly
mutopia/Coriolan/fagotto-1.ly
mutopia/Coriolan/fagotto-2.ly
mutopia/Coriolan/flauti-part.ly
mutopia/Coriolan/flauti.ly
mutopia/Coriolan/flauto-1.ly
mutopia/Coriolan/flauto-2.ly
mutopia/Coriolan/oboe-1.ly
mutopia/Coriolan/oboe-2.ly
mutopia/Coriolan/oboi-part.ly
mutopia/Coriolan/oboi.ly
mutopia/Coriolan/timpani-part.ly
mutopia/Coriolan/timpani.ly
mutopia/Coriolan/trombe-part.ly
mutopia/Coriolan/trombe.ly
mutopia/Coriolan/trombo-1.ly
mutopia/Coriolan/trombo-2.ly
mutopia/Coriolan/viola-1.ly
mutopia/Coriolan/viola-2.ly
mutopia/Coriolan/violi-part.ly [new file with mode: 0644]
mutopia/Coriolan/violino-1-part.ly
mutopia/Coriolan/violino-1.ly
mutopia/Coriolan/violino-2-part.ly
mutopia/Coriolan/violino-2.ly
mutopia/Coriolan/violoncello.ly
scm/slur.scm

diff --git a/CHANGES b/CHANGES
index e13358409df904b590dc74d1b344b5369e9f842e..30dc75fd56f0e391d4e8b558034b881f157283a3 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,55 @@
+1.3.79.jcn5
+===========
+
+* Created Thread_devnull_engraver and Voice_devnull_engraver iso
+  single A2_devnull_engraver in Thread context.  It seems however
+  that the hack in A2_devnull_engraver works better.
+
+* Coriolan fixes.
+
+* Slur attachment fix for chords where case slurdir != stemdir.
+
+* Made various fixes for (line-)broken slurs.
+
+* Fixed slur_height (), which fixes most ugly slurs (Yeah!).
+
+* Fixed some silly url reversals in FAQ.
+
+* Finished Coriolan music entry (again); entered second viola part.
+
+* Updated Coriolan to use part combiner on Voice level for wind parts
+  and on Staff level for violi and bassi.
+
+* Part-combiner now uses duration inquiry, which fixes rhythm-related
+  bugs in determining solo/a2.  Also, rests are taken into account.
+
+* Another crude fix for almost unexplainable (with a gdb that dumps
+  core on ly_display_scm) all-zero control points slurs.
+
+* Fixed slurs that crossed through stems and note heads.  Note
+  that beautifying of ugly slurs is still broken.
+
+* Made crude fixes slurs don't crash, bezier still crashes on
+  infinitely steep slurs (eg flauti-part *with* slur_engraver).
+
+1.3.79.gp1
+==========
+
+* Replaced empty melisma score element with a property
+
+* Renamed Voice_alist_entry -> Syllable_group in lyric-phrasing-engraver
+
+1.3.79.uu1
+==========
+
+* fixed y-position of whole rest
+
+* fixed sustainPedalPadding
+
+* etf2ly: articulation, lyrics.
+
+1.3.79
+======
 * etf2ly.py: Finale to LilyPond conversion.
 
 1.3.78.jcn4
index 725efa3fa6fd34a0fb20798789951f452a1e9ddf..c7d8cd5d21606b127e3142a885087eed258d1d58 100644 (file)
@@ -416,9 +416,9 @@ Put this in @file{~/.emacs}:
 (server-start)
 @end example
 
-For column positioning, apply @uref{this
-patch,http://www.cs.uu.nl/~hanwen/software/emacsclient-column} to
-@code{emacsclient.c} and @code{server.el}. Stick the compiled
+For column positioning, apply
+@uref{http://www.cs.uu.nl/~hanwen/software/emacsclient-column, this
+patch} to @code{emacsclient.c} and @code{server.el}. Stick the compiled
 emacsclient into a bin directory, and put @code{server.el} into a elisp
 directory (eg. @file{~/usr/share/emacs/}). Add the following to your
 @file{.emacs} init file, before invoking server-start.
@@ -438,18 +438,19 @@ src specials. You're better off using plain xdvi.
 
 Click control-mouse button 2 for making emacs jump to the appropriate place.
 
-For column positioning you must install this @uref{patch,
-http://www.cs.uu.nl/~hanwen/software/xdvik-src} to make Xdvik emit
-column numbers. Add the command line option @code{-srceditorcommand
-"emacsclient --no-wait +%l:%c %f"}
+For column positioning you must install
+@uref{http://www.cs.uu.nl/~hanwen/software/xdvik-src, this patch} to
+make Xdvik emit column numbers. Add the command line option
+@code{-srceditorcommand "emacsclient --no-wait +%l:%c %f"}
 
 Xdvi
 
 @uref{Xdvi,ftp://ftp.math.berkeley.edu/pub/Software/TeX/xdvi.tar.gz} has
-better support for src specials. Apply @uref{this patch,
-http://www.cs.uu.nl/~hanwen/software/xdvi-src}. Before starting, set the
-environment variable @code{XEDITOR} to @code{"emacsclient --no-wait +%d
-%s"}.  When viewing, control-mousebutton 1 will take you to the correct
+better support for src specials. Apply
+@uref{http://www.cs.uu.nl/~hanwen/software/xdvi-src, this patch}. Before
+starting, set the environment variable @code{XEDITOR} to
+@code{"emacsclient --no-wait +%d %s"}.  When viewing,
+control-mousebutton 1 will take you to the correct
 line/column. Control-mousebutton 2 will show all clickable boxes.
 
 dvips:
index b147b1d12846049e423924da3ee00fe1ae17370b..a22fa6376753d68397bd73a7ff5a71afc26e0569 100644 (file)
@@ -157,11 +157,20 @@ Override with @code{noStemExtend}.
 @mudelafile{beam-position.ly}
 
 Slurs should look nice and symmetric.  The curvature may increase
-only to avoid noteheads, and as little as possible.
+only to avoid noteheads, and as little as possible.  Slurs never
+run through noteheads or stems.
 
+@mudelafile{slur-nice.ly}
 @mudelafile{slur-symmetry.ly}
 @mudelafile{slur-symmetry-1.ly}
 
+Across line breaks, slurs behave nicely.  On the left, they extend to
+just after the preferatory matter, and on the right to the end of the
+staff.  A slur should follow the same vertical direction it would have
+in unbroken state.
+
+@mudelafile{slur-broken.ly}
+
 Ties are strictly horizontal.  They are placed in between note heads.
 The horizontal middle should not overlap with a staffline.
 
@@ -348,6 +357,13 @@ therefore removed.
 
 @mudelafile{hara-kiri-short.ly}
 
+In orchestral scores and hymns, voices are traditionally combined onto
+one staff.  LilyPond has a part combiner, that combines or separates two
+voices according to actual rhythm and pitch.  User-defined texts such as
+``solo'' and ``@`a2'' are typeset automagically, as appropriate.
+
+@mudelafile{part-combine.ly}
+
 
 Fonts are  available in a default set of sizes: 11, 13, 16, 20, 23 and
 26pt staffheight.  Sizes of the text fonts and symbol fonts are made
diff --git a/NEWS b/NEWS
index 9297c95a40dedeed284af8a79d38f0c37837b1f9..90f069c6f7a41164940a0b869b4e3fa911606abb 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,9 +5,10 @@
 * Improved design and implementation: Complete rewrite of the
 internals: LilyPond is smaller, cleaner, more flexible, etc.
 
- - More pervasive GUILE integration resulting in 
+ - More pervasive GUILE integration resulting in:
 
- - Improved speed, with comparable memory footprint
+ - Improved speed (undone for now, by .73 + .74), 
+   with comparable memory footprint
 
  - Improved robustness: Lily almost never crashes.
 
@@ -17,6 +18,11 @@ internals: LilyPond is smaller, cleaner, more flexible, etc.
 
 * Typography: More elegant slurs, aligned dynamics, text crescendos,
 
+* Nice lyrics placement: Automagical phrasing and melisma alignment.
+
+* Part combining for orchestral scores and hymns: Automagical combining
+  and separating of two voices, with Solo/`a2 indications as appropriate.
+
 * Chordnames are now configurable in every respect
 
 * Included extensive glossary
diff --git a/input/bugs/hang.ly b/input/bugs/hang.ly
new file mode 100644 (file)
index 0000000..efcd426
--- /dev/null
@@ -0,0 +1,18 @@
+\score{
+       <
+       \context Staff = flauti <
+               \context Voice=one \partcombine Voice
+                       \context Thread=one \notes\relative c''
+                               {
+                                       %c1
+                                       c2 c2
+                               }
+                       \context Thread=two \notes\relative c''
+                               {
+                               }
+               >
+       >
+       \paper{
+               
+       }
+}
index 8003c4dbd42960d6e721d4a53d43f94b5457ad59..cecbbfc731dc81feb4a0b4578b9981d3e8b4f27e 100644 (file)
@@ -1,17 +1,15 @@
 \score{
        \context Staff <
-               \context Voice=one { \skip 1; }
-               \context Voice=two { \skip 1; }
-
+               \time 4/4;
                \context Voice=one \partcombine Voice
                        \context Thread=one \notes\relative c'' {
-                               %a4 c4.()g8 a4 |
+                               a4 c4.()g8 a4 |
                                g4 e' g()f | 
                                b, a c2
                        }
                        \context Thread=two \notes\relative c'' {
-                               %g4 e4.()d8 c4 |
-                               g4 c, e()f |
+                               g4 e4.()d8 c4 |
+                               g'4 c, e()f |
                                d2 a
                        }
        >
                \translator {
                        \VoiceContext
                        soloADue = ##f
-                       %\remove Slur_engraver;
-                       \consists Slur_engraver;
                }
-%              \translator {
-%                      \ThreadContext
-%                      \consists Slur_engraver;
-%              }
        }
 }
 
diff --git a/input/test/monstrous.ly b/input/test/monstrous.ly
new file mode 100644 (file)
index 0000000..d9c8dbf
--- /dev/null
@@ -0,0 +1,22 @@
+
+%% Chord gurus, is this ok now??
+
+monstrous= \chords{
+    \property Score.chordInversion = ##t 
+
+    % /c is/was missing:
+    bes:6/+c
+
+    % Cdim7
+    c:dim7
+}
+
+\score{
+    <
+       \context ChordNames \monstrous
+       \context Staff \monstrous
+    >
+    \paper{
+       linelength=-1.0\mm;
+    }
+}
index 8defa2bf18a81dfb88744b10ce7c7a1f704a53e6..71f0a50f8fa081dcfb187ecdabca1700666ac6c9 100644 (file)
@@ -35,9 +35,10 @@ Global =  \notes{
 
 Soprano = \notes \relative c' {
        \allup
-       d4 | g g b b a g a b a g b a g2.
+       d4 | g g b b a g a b a g b a g( a )g % modified to test melisma align right
 
-       a4 | b a g b [d16 d c8] [b a] b4 % modified to test beam melisma
+       [a8 b] | b4 % modified to test melisma align left
+        a g b [d16 d c8] [b a] b4 % modified to test beam melisma
 %      a4 | b a g b [d8 \melisma c] \melismaEnd [b \melisma a] \melismaEnd b4
 
        d d2 d e d4( cs8 ~ )cs d2.
diff --git a/input/test/part-combine-score.ly b/input/test/part-combine-score.ly
new file mode 100644 (file)
index 0000000..c674bd4
--- /dev/null
@@ -0,0 +1,206 @@
+\score{
+       <
+       \context VoiceCombineStaff = flauti <
+               \time 4/4;
+
+               \context VoiceCombineThread=one \skip 1*9;
+               \context VoiceCombineThread=two \skip 1*9;
+
+               \context VoiceCombineVoice=one \partcombine VoiceCombineVoice
+                       \context VoiceCombineThread=one \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
+                               }
+                       \context VoiceCombineThread=two \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
+                               }
+               >
+       \context PianoStaff <
+               \context StaffCombineStaff=one \skip 1*9;
+               \context StaffCombineStaff=two \skip 1*9;
+               \context StaffCombineStaff=one \partcombine StaffCombineStaff
+                       \context StaffCombineThread=one \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
+                               }
+                       \context StaffCombineThread=two \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
+                               }
+               >
+       >
+       \paper{
+               %
+               % The Voice combine hierarchy
+               %
+               \translator{
+                       \ThreadContext
+                       \name "VoiceCombineThread";
+                       \consists "Rest_engraver";
+               }
+               \translator{
+                       \VoiceContext
+                       \name "VoiceCombineVoice";
+                       \remove "Rest_engraver";
+                       \accepts "VoiceCombineThread";
+               }
+               \translator{
+                       \HaraKiriStaffContext
+                       \consists "Mark_engraver";
+                       \name "VoiceCombineStaff";
+                       \accepts "VoiceCombineVoice";
+               }
+
+               %
+               % The Staff combine hierarchy
+               %
+               \translator{
+                       \ThreadContext
+                       \name "StaffCombineThread";
+%%
+%%                     \remove "A2_devnull_engraver";
+%%                     \remove "Note_heads_engraver";
+               }
+               \translator{
+                       \VoiceContext
+                       \name "StaffCombineVoice";
+                       \accepts "StaffCombineThread";
+
+                       \remove "Rest_engraver";
+                       \remove "Dot_column_engraver";
+                       \remove "Stem_engraver";
+                       \remove "Beam_engraver";
+                       \remove "Auto_beam_engraver";
+                       %\include "auto-beam-settings.ly";
+
+                       \remove "Chord_tremolo_engraver";
+                       \remove "Melisma_engraver";
+                       \remove "Text_engraver";
+                       \remove "A2_engraver";
+
+                       \remove "Piano_pedal_engraver";
+                       \remove "Script_engraver";
+                       \remove "Script_column_engraver";
+                       \remove "Rhythmic_column_engraver";
+                       \remove "Slur_engraver";
+                       \remove "Tie_engraver";
+
+%%                     \consists "A2_devnull_engraver";
+%%                     \consists "Note_heads_engraver";
+               }
+               \translator {
+                       \HaraKiriStaffContext
+                       \name "StaffCombineStaff";
+                       \accepts "StaffCombineVoice";
+
+                       \consists "Rest_engraver";
+                       \consists "Dot_column_engraver";
+                       \consists "Stem_engraver";
+                       \consists "Beam_engraver";
+                       \consists "Auto_beam_engraver";
+                       \include "auto-beam-settings.ly";
+
+                       \consists "Chord_tremolo_engraver";
+                       \consists "Melisma_engraver";
+                       \consists "Text_engraver";
+                       \consists "A2_engraver";
+
+                       soloADue = ##f
+                       %soloADue = ##t
+
+                       \consists "Piano_pedal_engraver";
+                       \consists "Script_engraver";
+                       \consists "Script_column_engraver";
+                       \consists "Rhythmic_column_engraver";
+                       \consists "Slur_engraver";
+                       \consists "Tie_engraver";
+               }
+               \translator {
+                       \StaffGroupContext
+                       \accepts "VoiceCombineStaff";
+                       \accepts "StaffCombineStaff";
+               }
+               \translator {
+                       \ScoreContext
+                       \accepts "VoiceCombineStaff";
+                       \accepts "StaffCombineStaff";
+               }
+%              linewidth = 40.\mm;
+       }
+
+       \midi{ 
+               \tempo 4 = 150; 
+
+               \translator {
+                       \ThreadContext
+                       \name "VoiceCombineThread";
+               }
+               \translator {
+                       \VoiceContext
+                       \name "VoiceCombineVoice";
+                       \accepts "VoiceCombineThread";
+               }
+               \translator {
+                       \StaffContext
+                       \name "VoiceCombineStaff";
+                       \accepts "VoiceCombineVoice";
+               }
+
+               \translator {
+                       \ThreadContext
+                       \name "StaffCombineThread";
+               }
+               \translator {
+                       \VoiceContext
+                       \name "StaffCombineVoice";
+                       \accepts "StaffCombineThread";
+               }
+               \translator {
+                       \StaffContext
+                       \name "StaffCombineStaff";
+                       \accepts "StaffCombineVoice";
+               }
+               \translator {
+                       \ScoreContext
+                       \accepts "VoiceCombineStaff";
+                       \accepts "StaffCombineStaff";
+               }
+       }
+}
diff --git a/input/test/part-combine-staff.ly b/input/test/part-combine-staff.ly
new file mode 100644 (file)
index 0000000..141c70a
--- /dev/null
@@ -0,0 +1,81 @@
+\score{
+       \context PianoStaff <
+               \context Staff=one \skip 1*5;
+               \context Staff=two \skip 1*5;
+               \context Staff=one \partcombine Staff
+                       \context Voice=one \notes\relative c''
+                               {
+                                       c4 d e f\break
+                                       c d e f\break
+                                       c d e f
+                                       c4 d e f\break
+                                       a8 a a a b b b b
+                               }
+                       \context Voice=two \notes\relative c''
+                               {
+                                       c2 e2
+                                       c4 d e f
+                                       c2 e2
+                                       c,4 d e f
+                                       a8 a a a b b b b
+                               }
+               >
+       \paper{
+               %\translator { \HaraKiriStaffContext }
+               \translator {
+                       \HaraKiriStaffContext
+
+                       \consists "Rest_engraver";
+                       \consists "Dot_column_engraver";
+                       \consists "Stem_engraver";
+                       \consists "Beam_engraver";
+                       \consists "Auto_beam_engraver";
+                       \include "auto-beam-settings.ly";
+
+                       \consists "Chord_tremolo_engraver";
+                       \consists "Melisma_engraver";
+                       \consists "Text_engraver";
+                       \consists "A2_engraver";
+
+                       soloADue = ##f
+
+                       \consists "Piano_pedal_engraver";
+                       \consists "Script_engraver";
+                       \consists "Script_column_engraver";
+                       \consists "Rhythmic_column_engraver";
+                       \consists "Slur_engraver";
+                       \consists "Tie_engraver";
+               }
+               \translator{
+                       \VoiceContext
+
+                       \remove "Rest_engraver";
+                       \remove "Dot_column_engraver";
+                       \remove "Stem_engraver";
+                       \remove "Beam_engraver";
+                       \remove "Auto_beam_engraver";
+                       %\include "auto-beam-settings.ly";
+
+                       \remove "Chord_tremolo_engraver";
+                       \remove "Melisma_engraver";
+                       \remove "Text_engraver";
+                       \remove "A2_engraver";
+
+                       \remove "Piano_pedal_engraver";
+                       \remove "Script_engraver";
+                       \remove "Script_column_engraver";
+                       \remove "Rhythmic_column_engraver";
+                       \remove "Slur_engraver";
+                       \remove "Tie_engraver";
+
+                       \consists "A2_devnull_engraver";
+                       \consists "Note_heads_engraver";
+               }
+               \translator{
+                       \ThreadContext
+                       \remove "A2_devnull_engraver";
+                       \remove "Note_heads_engraver";
+               }
+               linewidth = 40.\mm;
+       }
+}
index 40fe3fc007747934d57558c2432e4bcecb17124b..85efe4eee78e70a42e62595a88d9c6a115aabf65 100644 (file)
@@ -1,7 +1,6 @@
 \score{
-       \context Staff = one <
-               \context Voice=one { \skip 1; }
-               \context Voice=two { \skip 1; }
+       \context Staff = flauti <
+               \time 4/4;
 
                \context Voice=one \partcombine Voice
                        \context Thread=one \notes\relative c''
                                        b,4 d c d
                                        r2 e4 f
                                        c4 d e f
-                                       c d e f
+                                       c4 r e f
+                                       c4 r e f
+                                       c4 r a r
+                                       a a r a
+                                       a2 \property Voice.soloADue = ##f a
                                }
                        \context Thread=two \notes\relative c''
                                {
-                                       g b d f
+                                       g4 b d f
                                        r2 c4 d
                                        a c c d
                                        a4. b8 c4 d
-                                       c d e f
+                                       c r e r
+                                       r2 s2
+                                       a,4 r a r
+                                       a r r a
+                                       a2 \property Voice.soloADue = ##f a
                                }
                >
        \paper{
-               linewidth = 100.\mm;
+               linewidth = 140.\mm;
+               \translator{
+                       \ThreadContext
+                       \consists Rest_engraver;
+               }
+               \translator{
+                       \VoiceContext
+                       \remove Rest_engraver;
+               }
        }
 }
index 89e907cf04988daf2e15ba4fcfb75340804d8808..2869207c00e01cf515236ca158197efc8820a8a6 100644 (file)
@@ -1,8 +1,5 @@
 \score{
-       \context Staff = one <
-               \context Voice=one { \skip 1; }
-               \context Voice=two { \skip 1; }
-
+       \context Staff <
                \context Voice=one \partcombine Voice
                        \context Thread=one \notes\relative c''
                                {
diff --git a/input/test/slur-broken.ly b/input/test/slur-broken.ly
new file mode 100644 (file)
index 0000000..44d4531
--- /dev/null
@@ -0,0 +1,14 @@
+\score{
+       \notes\relative c''{
+               \time 2/4;
+               e2(
+               \break
+               )e4 f,(\break
+               )f4 f(\break
+               a2\break
+               )e'2
+       }
+       \paper{
+               linewidth = 60.\mm;
+       }
+}
diff --git a/input/test/slur-nice.ly b/input/test/slur-nice.ly
new file mode 100644 (file)
index 0000000..c4efee9
--- /dev/null
@@ -0,0 +1,15 @@
+\score{
+       \notes\relative c''{
+               \time 3/4;
+               \slurup
+               \stemboth a ( \stemdown a \stemboth ) a a( c )a a( e' )a, a( g' )a,
+               \stemup a( e' )a,
+               \break
+               \slurdown
+               \stemboth c ( \stemup c \stemboth ) c c ( a ) c c( d, )c' c( f, )c'
+               \stemdown c( f, )c'
+       }
+       \paper{
+               linewidth = 120.\mm;
+       }
+}
index 30638451d88107a4b9c48954d9cdbabbf744a085..32aa7d958a8522f150dc818d084262cce72af764 100644 (file)
@@ -18,15 +18,54 @@ public:
   
 protected:
   virtual void acknowledge_element (Score_element_info);
+  virtual bool do_try_music (Music *);
 };
 
 ADD_THIS_TRANSLATOR (A2_devnull_engraver);
+/*
+  Maybe this is too crude.
+  It would probably be better to have a devnull engraver in StaffContext,
+  that acknowledges stuff and suicides it.
+ */
+bool
+A2_devnull_engraver::do_try_music (Music *m)
+{
+  if (1 //daddy_trans_l_->id_str_ == "two"
+      && (to_boolean (get_property ("unison"))
+         || to_boolean (get_property ("unisilence"))))
+    {
+      /*
+       We mustn't junk Rest requests
+       */
+      if (Span_req *s = dynamic_cast <Span_req *> (m))
+       {
+         if (s->span_type_str_ == "slur"
+             || s->span_type_str_ == "beam"
+             || s->span_type_str_ == "crescendo"
+             || s->span_type_str_ == "decrescendo")
+           {
+             return true;
+           }
+         return false;
+       }
+      else if (Tie_req *t = dynamic_cast<Tie_req*> (m))
+       {
+         return true;
+       }
+      else if (Text_script_req *d = dynamic_cast <Text_script_req*> (m))
+       {
+         return true;
+       }
+    }
+  return false;
+}
 
 void
 A2_devnull_engraver::acknowledge_element (Score_element_info i)
 {
   if (daddy_trans_l_->id_str_ == "two"
-      && to_boolean (get_property ("unison"))
+      && (to_boolean (get_property ("unison"))
+         || to_boolean (get_property ("unisilence")))
       && to_boolean (get_property ("soloADue")))
     i.elem_l_->suicide ();
 }
index 796056eb4de1eb1f8df7d6b21d419c41c737a75c..18d5bbb54b3036d56865bc8ce4bcd744630c4e70 100644 (file)
@@ -28,7 +28,7 @@ protected:
 
 private:
   Item* text_p_;
-  enum State { NORMAL, SOLO, SPLIT_INTERVAL, UNISON } state_;
+  enum State { SOLO, SPLIT_INTERVAL, UNIRHYTHM, UNISILENCE, UNISON } state_;
 };
 
 ADD_THIS_TRANSLATOR (A2_engraver);
@@ -36,7 +36,7 @@ ADD_THIS_TRANSLATOR (A2_engraver);
 A2_engraver::A2_engraver ()
 {
   text_p_ = 0;
-  state_ = NORMAL;
+  state_ = UNISILENCE;
 }
 
 void
@@ -45,9 +45,7 @@ A2_engraver::do_process_music ()
   if (!text_p_)
     {
       SCM unison = get_property ("unison");
-      SCM unirhythm = get_property ("unirhythm");
       SCM solo = get_property ("solo");
-      SCM split_interval = get_property ("split-interval");
       SCM solo_adue = get_property ("soloADue");
 
       if (solo_adue == SCM_BOOL_T
@@ -84,10 +82,6 @@ A2_engraver::do_process_music ()
          Side_position::set_direction (text_p_, dir);
          text_p_->set_elt_property ("text", text);
        }
-      else if (unison == SCM_BOOL_T)
-       state_ = UNISON;
-      else if (unirhythm == SCM_BOOL_T && split_interval == SCM_BOOL_T)
-       state_ = SPLIT_INTERVAL;
     }
 }
 
@@ -110,18 +104,38 @@ A2_engraver::acknowledge_element (Score_element_info i)
        }
     }
          
+  SCM unisilence = get_property ("unisilence");
+  SCM unison = get_property ("unison");
+  SCM unirhythm = get_property ("unirhythm");
+  SCM solo = get_property ("solo");
+  SCM split_interval = get_property ("split-interval");
+  SCM solo_adue = get_property ("soloADue");
+  
+  State previous_state = state_;
+  if (unisilence == SCM_BOOL_T)
+    /*
+      state_ = UNISILENCE;
+    */
+    ;
+  else if (solo == SCM_BOOL_T)
+    state_ = SOLO;
+  else if (unison == SCM_BOOL_T)
+    state_ = UNISON;
+  else if (unirhythm == SCM_BOOL_T && split_interval == SCM_BOOL_T)
+    state_ = SPLIT_INTERVAL;
+  else if (unirhythm)
+    state_ = UNIRHYTHM;
          
   if (Stem::has_interface (i.elem_l_))
     {
       Item *stem_l = dynamic_cast<Item*> (i.elem_l_);
 
-      SCM unison = get_property ("unison");
-      SCM unirhythm = get_property ("unirhythm");
-      SCM solo = get_property ("solo");
-      SCM split_interval = get_property ("split-interval");
-      SCM solo_adue = get_property ("soloADue");
-
-      if ((unirhythm != SCM_BOOL_T && solo != SCM_BOOL_T)
+      /*
+       Hmm.  We must set dir when solo, in order to get
+       the rests collided to the right position
+      */
+      if ((unirhythm != SCM_BOOL_T) || (solo == SCM_BOOL_T)
+         || ((unisilence == SCM_BOOL_T && previous_state != UNISON))
          || (unirhythm == SCM_BOOL_T && split_interval == SCM_BOOL_T
              && (unison != SCM_BOOL_T || solo_adue != SCM_BOOL_T)))
        {
index 6861f61fc4d1e3e2f8861b9ca70831595a393b0f..7b8654d1bbe6c6fbdb896d3c98e43f99fd197aee 100644 (file)
 #include "misc.hh"
 #include "bezier.hh"
 
-static Real F0_1 (Real x)
+
+static Real
+F0_1 (Real x)
 {
-  return M_PI /2 *  atan(2 * x / M_PI);
+  return 2 / M_PI * atan ( M_PI * x / 2);
 }
 
 Real
@@ -37,7 +39,7 @@ slur_height (Real width, Real h_inf, Real r_0)
   
   Examples:
 
-  * F(x) = pi/2 * atan (2x/pi)
+  * F(x) = 2/pi * atan (pi x/2)
 
   * F(x) 1/alpha * x^alpha / (1 + x^alpha)
 
index 7eb75b54237dbcfeb5ec26f0f0f68887dd625007..7710e4dcc037d9a9c349674f67784c9adf65f434 100644 (file)
 #include "moment.hh"
 #include "duration.hh"
 
+int
+compare (Array<Duration>* left, Array<Duration>* right)
+{
+  assert (left);
+  assert (right);
+  
+  if (left->size () == right->size ())
+    {
+      for (int i = 0; i < left->size (); i++)
+       {
+         int r = Duration::compare ((*left)[i], (*right)[i]);
+         if (r)
+           return r;
+       }
+    }
+  else
+    return 1;
+  return 0;
+}
+
+int
+Duration::compare (Duration const &left, Duration const &right)
+{
+  return Rational::compare (left.length_mom (), right.length_mom ());
+}
+
 Duration::Duration ()
 {
   durlog_i_ = 0;
index da85a462397b78e9738e556be6af7d53ee991981..3f352fccc2b5aa3a9c46be66639bc8e675d9ccc9 100644 (file)
@@ -25,6 +25,7 @@ struct Duration {
   void set_plet (int,int );
   void compress (Rational);
   Rational length_mom () const ;
+  static int compare (Duration const&, Duration const&);
 
   /// Logarithm of the base duration.
   int durlog_i_;
@@ -37,5 +38,11 @@ struct Duration {
   int tuplet_type_i_; 
 
 };
+
+#include "compare.hh"
+INSTANTIATE_COMPARE(Duration, Duration::compare);
+
+int compare (Array<Duration>*, Array<Duration>*);
+
 #endif // DURATION_HH
 
index 44263b4ca408523006472dc61700adeff1498f58..e00a1c159cb622db9121a68407b7aaac0b6e329a 100644 (file)
@@ -15,7 +15,7 @@
 #include "item.hh"
 #include "smobs.hh"
 
-class Voice_alist_entry;
+class Syllable_group;
 
 
 /**
@@ -72,7 +72,7 @@ private:
   void record_lyric(const String &context_id, Score_element * lyric);
   void record_melisma(const String &context_id);
   void record_extender(const String &context_id, Score_element * extender);
-  Voice_alist_entry * lookup_context_id(const String &context_id);
+  Syllable_group * lookup_context_id(const String &context_id);
 
 public:
   Lyric_phrasing_engraver ();
@@ -80,32 +80,30 @@ public:
   VIRTUAL_COPY_CONS (Translator);
 
 private:
-  /** association list of Voice_alist_entry smobs
+  /** association list of Syllable_group smobs
   */
   Protected_scm voice_alist_;
   Score_element * any_notehead_l_;
 };
 
 
-class Voice_alist_entry
+class Syllable_group
 {
   bool first_in_phrase_b_;
   Score_element * notehead_l_;
   Link_array<Score_element> lyric_list_;
-//   Link_array<Score_element> extender_list_;
   Score_element * longest_lyric_l_;
   Score_element * shortest_lyric_l_;
   int alignment_i_;
   bool melisma_b_;
+  Real group_translation_f_;
 public:
   static SCM make_entry();
   void set_first_in_phrase(bool f);
   void set_notehead(Score_element * notehead);
   void add_lyric(Score_element * lyric);
   void add_extender(Score_element * extender);
-//   void terminate_extenders();
-//   void clear_extenders();
-  void set_melisma();
+  void set_melisma() { melisma_b_ = true; }
   bool get_melisma() { return melisma_b_; }
   int lyric_count() { return lyric_list_.size(); }
   void clear();
@@ -115,13 +113,13 @@ public:
   int appropriate_alignment(const char *punc);
   Real amount_to_translate();
   void next_lyric();
-  void copy(Voice_alist_entry *);
+  void copy(Syllable_group *);
 private:
-  Voice_alist_entry();
-  DECLARE_SIMPLE_SMOBS(Voice_alist_entry,);
+  Syllable_group();
+  DECLARE_SIMPLE_SMOBS(Syllable_group,);
 } ;
 
-Voice_alist_entry * unsmob_voice_entry (SCM);
+Syllable_group * unsmob_voice_entry (SCM);
 
 
 #endif // LYRIC_PHRASING_ENGRAVER_HH
index b70763d9b8ca198d577640bbc6880cf0ff1025a3..7b431130276a424bcc8eaac9e7eb026a3d1be5ab 100644 (file)
@@ -167,6 +167,15 @@ public:
   VIRTUAL_COPY_CONS (Music);
 };
 
+/**
+   What rhythms have ben acked ?
+ */
+class Rhythm_interrogate_req : public Request
+{
+public:
+  Array<Duration> duration_arr_;
+  VIRTUAL_COPY_CONS (Music);
+};
 
 
 /**
index 60cbebc8fc47b4d3754baa0d43c9fc91c4ac4848..7b38e0f033a8d936e2b117d1bc67481e91a7e800 100644 (file)
@@ -32,6 +32,9 @@ private:
 
   Music_iterator * first_iter_p_;
   Music_iterator * second_iter_p_;
+  Moment now_;
+  Moment first_until_;
+  Moment second_until_;
 
   bool combined_b_;
 };
index b9a33c0c2bb5ff9c48e5ada9ce791c31eae75fe1..5778517c6885d8b20db039057337f2e8d6524cda 100644 (file)
@@ -56,7 +56,7 @@ Lyric_phrasing_engraver::~Lyric_phrasing_engraver()
    */
 }
 
-Voice_alist_entry * 
+Syllable_group * 
 Lyric_phrasing_engraver::lookup_context_id(const String &context_id)
 {
   SCM key = ly_str02scm(context_id.ch_C());
@@ -77,8 +77,8 @@ Lyric_phrasing_engraver::lookup_context_id(const String &context_id)
     }
   }
   // ( ( alist_entry . old_entry ) . previous_entry )
-  SCM val = gh_cons(gh_cons(Voice_alist_entry::make_entry (), SCM_BOOL_F), 
-                   Voice_alist_entry::make_entry ()); 
+  SCM val = gh_cons(gh_cons(Syllable_group::make_entry (), SCM_BOOL_F), 
+                   Syllable_group::make_entry ()); 
 
   voice_alist_ = scm_acons(key, val, voice_alist_);
   return unsmob_voice_entry (gh_caar(val));
@@ -89,7 +89,7 @@ void
 Lyric_phrasing_engraver::record_notehead(const String &context_id, 
                                         Score_element * notehead)
 {
-  Voice_alist_entry * v = lookup_context_id(context_id);
+  Syllable_group * v = lookup_context_id(context_id);
   v->set_notehead(notehead);
   if(!any_notehead_l_)
     any_notehead_l_ = notehead;
@@ -98,7 +98,7 @@ Lyric_phrasing_engraver::record_notehead(const String &context_id,
 void 
 Lyric_phrasing_engraver::record_lyric(const String &context_id, Score_element * lyric)
 {
-  Voice_alist_entry * v = lookup_context_id(context_id);
+  Syllable_group * v = lookup_context_id(context_id);
   v->add_lyric(lyric);
 }
 
@@ -113,7 +113,7 @@ Lyric_phrasing_engraver::record_extender(const String &context_id, Score_element
       // ( key . ( (alist_entry . old_entry) . previous_entry) )
       SCM previous_scm = gh_cddr(s);
       if(previous_scm != SCM_EOL) {
-       Voice_alist_entry * v = unsmob_voice_entry(previous_scm);
+       Syllable_group * v = unsmob_voice_entry(previous_scm);
        v->add_extender(extender);
       }
     }
@@ -123,7 +123,7 @@ Lyric_phrasing_engraver::record_extender(const String &context_id, Score_element
 void 
 Lyric_phrasing_engraver::record_melisma(const String &context_id)
 {
-  Voice_alist_entry * v = lookup_context_id(context_id);
+  Syllable_group * v = lookup_context_id(context_id);
   v->set_melisma();
 }
   
@@ -149,8 +149,14 @@ Lyric_phrasing_engraver::acknowledge_element(Score_element_info i)
     /* what's its Voice context name? */
     String voice_context_id = get_context_id(i.origin_trans_l_->daddy_trans_l_, "Voice");
     record_notehead(voice_context_id, h);
+
+    /* is it in a melisma ? */
+    if(to_boolean(i.origin_trans_l_->get_property("melismaEngraverBusy"))) {
+      record_melisma(voice_context_id);
+    }
     return;
   }
+
   /* now try for a lyric */
   if (h->has_interface (ly_symbol2scm ("lyric-syllable-interface"))) {
 
@@ -160,25 +166,20 @@ Lyric_phrasing_engraver::acknowledge_element(Score_element_info i)
     record_lyric(trim_suffix(lyric_voice_context_id), h);
     return;
   }
-  /* finally for a melisma */
-  if(h->has_interface (ly_symbol2scm ("melisma-interface"))) {
-    String voice_context_id = get_context_id(i.origin_trans_l_->daddy_trans_l_, "Voice");
-    record_melisma(voice_context_id);
-    return;
-  }
-    /* How about catching any extender items and then if we have a melisma, 
-       set the RIGHT item of the extender spanner to the melismatic note in 
-       the corresponding context (if any).
-       This has the effect of finishing the extender under the last note
-       of the melisma, instead of extending it to the next lyric.
-
-       Problem: the extender request is thrown at the same moment as the next lyric,
-       by which time we have already passed the last note of the melisma.
-       However, the Lyric_phrasing_engraver remembers the last note, so just 
-       attach it to that, provided it was melismatic. If it was not melismatic, 
-       then ignore it and let the Extender_engraver take care of it (i.e. finish at next
-       lyric).
-    */
+
+  /* Catch any extender items and then if we have a melisma, 
+     set the RIGHT item of the extender spanner to the melismatic note in 
+     the corresponding context (if any).
+     This has the effect of finishing the extender under the last note
+     of the melisma, instead of extending it to the next lyric.
+     
+     Problem: the extender request is thrown at the same moment as the next lyric,
+     by which time we have already passed the last note of the melisma.
+     However, the Lyric_phrasing_engraver remembers the last note, so just 
+     attach it to that, provided it was melismatic. If it was not melismatic, 
+     then ignore it and let the Extender_engraver take care of it (i.e. finish at next
+     lyric).
+  */
   if(h->has_interface (ly_symbol2scm ("lyric-extender-interface"))) {
     String voice_context_id = get_context_id(i.origin_trans_l_->daddy_trans_l_, "LyricVoice");
     record_extender(trim_suffix(voice_context_id), h);
@@ -224,7 +225,7 @@ void Lyric_phrasing_engraver::process_acknowledged ()
     SCM v_entry = gh_cdar(v);
     // ((current . oldflag) . previous)
     if(!to_boolean(gh_cdar(v_entry))) { // not an old entry left over from a prior note ...
-      Voice_alist_entry *entry = unsmob_voice_entry(gh_caar(v_entry));
+      Syllable_group *entry = unsmob_voice_entry(gh_caar(v_entry));
       if(! entry->set_lyric_align(punc.ch_C(), any_notehead_l_))
        warning (_ ("lyrics found without any matching notehead"));
 
@@ -234,7 +235,7 @@ void Lyric_phrasing_engraver::process_acknowledged ()
          warning (_ ("Huh? Melismatic note found to have associated lyrics."));
        SCM previous_scm = gh_cdr(v_entry);
        if(previous_scm != SCM_EOL) {
-         Voice_alist_entry *previous = unsmob_voice_entry(previous_scm);
+         Syllable_group *previous = unsmob_voice_entry(previous_scm);
          if (previous->lyric_count())
            previous->adjust_melisma_align();
        }
@@ -250,12 +251,12 @@ Lyric_phrasing_engraver::do_pre_move_processing ()
   for(SCM v=voice_alist_; gh_pair_p(v); v = gh_cdr(v)) {
     SCM entry_scm = gh_cdar(v);
     // ((alist_entry . entry_is_old) . previous_entry)
-    Voice_alist_entry * entry = unsmob_voice_entry(gh_caar(entry_scm));
+    Syllable_group * entry = unsmob_voice_entry(gh_caar(entry_scm));
 
     // set previous_entry, set entry_is_old, and resave it to alist_
     // but only change if this current was not old.
     if(! to_boolean(gh_cdar(entry_scm))) { 
-      Voice_alist_entry * previous_entry = unsmob_voice_entry(gh_cdr(entry_scm));
+      Syllable_group * previous_entry = unsmob_voice_entry(gh_cdr(entry_scm));
       previous_entry->copy(entry);
       entry_scm = gh_cons(gh_cons(gh_caar(entry_scm), SCM_BOOL_T), gh_cdr(entry_scm));
       voice_alist_ = scm_assoc_set_x(voice_alist_, gh_caar(v), entry_scm);
@@ -269,11 +270,11 @@ Lyric_phrasing_engraver::do_pre_move_processing ()
 
 /*=========================================================================================*/
 
-/** Voice_alist_entry is a class to be smobbed and entered as data in the association list
+/** Syllable_group is a class to be smobbed and entered as data in the association list
     member of the Lyric_phrasing_engraver class.
 */
 
-Voice_alist_entry::Voice_alist_entry()
+Syllable_group::Syllable_group()
 {
   first_in_phrase_b_=true;
   melisma_b_ = false;
@@ -281,17 +282,18 @@ Voice_alist_entry::Voice_alist_entry()
 }
 
 void 
-Voice_alist_entry::clear()
+Syllable_group::clear()
 {
   notehead_l_=0;
   lyric_list_.clear();
   longest_lyric_l_=0;
   shortest_lyric_l_=0;
   melisma_b_ = false;
+  group_translation_f_ = 0.0;
 }
   
 void
-Voice_alist_entry::copy( Voice_alist_entry *from)
+Syllable_group::copy( Syllable_group *from)
 {
   notehead_l_ = from->notehead_l_;
   lyric_list_ = from->lyric_list_;
@@ -300,16 +302,17 @@ Voice_alist_entry::copy( Voice_alist_entry *from)
   melisma_b_ = from->melisma_b_;
   alignment_i_ = from->alignment_i_;
   first_in_phrase_b_ = from->first_in_phrase_b_;
+  group_translation_f_ = from->group_translation_f_;
 }
 
 void 
-Voice_alist_entry::set_first_in_phrase(bool f) 
+Syllable_group::set_first_in_phrase(bool f) 
 { 
   first_in_phrase_b_ = f; 
 }
 
 void 
-Voice_alist_entry::set_notehead(Score_element * notehead)
+Syllable_group::set_notehead(Score_element * notehead)
 {
   if(!notehead_l_) {
     /* there should only be a single notehead, so silently ignore any extras */
@@ -318,7 +321,7 @@ Voice_alist_entry::set_notehead(Score_element * notehead)
 }
 
 void 
-Voice_alist_entry::add_lyric(Score_element * lyric)
+Syllable_group::add_lyric(Score_element * lyric)
 {
   lyric_list_.push(lyric);
   /* record longest and shortest lyrics */
@@ -333,7 +336,7 @@ Voice_alist_entry::add_lyric(Score_element * lyric)
 }
 
 void 
-Voice_alist_entry::add_extender(Score_element * extender)
+Syllable_group::add_extender(Score_element * extender)
 {
   if(notehead_l_ && melisma_b_) {
     dynamic_cast<Spanner*>(extender)->set_bound (RIGHT, notehead_l_);
@@ -350,14 +353,8 @@ Voice_alist_entry::add_extender(Score_element * extender)
   }
 }
 
-void 
-Voice_alist_entry::set_melisma()
-{
-  melisma_b_ = true;
-}
 bool 
-Voice_alist_entry::set_lyric_align(const char *punc, Score_element *default_notehead_l)
+Syllable_group::set_lyric_align(const char *punc, Score_element *default_notehead_l)
 {
   if(lyric_list_.size()==0) {
     // No lyrics: nothing to do.
@@ -372,38 +369,37 @@ Voice_alist_entry::set_lyric_align(const char *punc, Score_element *default_note
   if(!notehead_l_) {
     notehead_l_ = default_notehead_l;
   }
-  Real translation = amount_to_translate();
+
+  group_translation_f_ = amount_to_translate();
+
+  // set the x alignment of each lyric
   for(int l = 0; l < lyric_list_.size(); l++) {
-    /** set the x alignment of each lyric
-     */
     lyric = lyric_list_[l];
     lyric->set_elt_property("self-alignment-X", gh_int2scm(alignment_i_));
-
     // centre on notehead ... if we have one. 
     if(notehead_l_) {
-      /* set the parent of each lyric to the notehead,
-        set the offset callback of each lyric to centered_on_parent,
-      */
       lyric->set_parent(notehead_l_, X_AXIS);
       lyric->add_offset_callback (Side_position::centered_on_parent, X_AXIS);
-      /* reference is on the right of the notehead; move it left half way, then centralise */
-      lyric->translate_axis (translation-(notehead_l_->extent(X_AXIS)).center(), 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(X_AXIS)).center(), X_AXIS);
     }
   }
   return (notehead_l_);
 }
 
+/** determine the distance to translate lyrics to get correct alignment
+    Rules: If alignment is centre, translate = 0
+           Otherwise,
+             If (length of longest lyric) < 2 * (length of shortest lyric),
+                - centre longest lyric on notehead
+             Otherwise
+                - move so shortest lyric just reaches notehead centre
+*/
 Real 
-Voice_alist_entry::amount_to_translate()
+Syllable_group::amount_to_translate()
 {
   Real translate = 0.0;
   if(alignment_i_ != CENTER) {
-    // right or left align ... 
-    /* If length of longest lyric < 2 * length of shortest lyric,
-       - centre longest lyric on notehead
-       Otherwise
-       - move so shortest lyric just reaches notehead centre
-    */
     // FIXME: do we really know the lyric extent here? Some font sizing comes later?
     if((longest_lyric_l_->extent(X_AXIS)).length() <
        (shortest_lyric_l_->extent(X_AXIS)).length() * 2 )
@@ -421,14 +417,13 @@ Voice_alist_entry::amount_to_translate()
           otherwise alignment is centre.
 */
 int 
-Voice_alist_entry::appropriate_alignment(const char *punc)
+Syllable_group::appropriate_alignment(const char *punc)
 {
   if(first_in_phrase_b_)
     return LEFT;
 
   Score_element * lyric;
   bool end_phrase = true;
-  /* use a property to determine what constitutes punctuation */
 
   for(int l = 0; l < lyric_list_.size() && end_phrase; l++) {
     lyric = lyric_list_[l];
@@ -470,11 +465,11 @@ Voice_alist_entry::appropriate_alignment(const char *punc)
     back and fix the alignment when we DO know.
 */
 void
-Voice_alist_entry::adjust_melisma_align()
+Syllable_group::adjust_melisma_align()
 {
-  if(notehead_l_) {
-    // undo what we did before ...
-    Real translation = -amount_to_translate();
+  if(notehead_l_ && lyric_list_.size()) {
+    // override any previous offset adjustments
+    Real translation = -group_translation_f_;
     // melisma aligning:
     switch (alignment_i_) {
       //  case LEFT: // that's all
@@ -485,6 +480,8 @@ Voice_alist_entry::adjust_melisma_align()
       translation += (shortest_lyric_l_->extent(X_AXIS)).length();
       break;
     }
+    group_translation_f_ += translation;
+    printf(" now %f.\n",float(group_translation_f_));
     for(int l = 0; l < lyric_list_.size(); l++) {
       lyric_list_[l]->translate_axis (translation, X_AXIS);
     }
@@ -493,13 +490,13 @@ Voice_alist_entry::adjust_melisma_align()
 
 
 bool
-Voice_alist_entry::is_empty()
+Syllable_group::is_empty()
 {
   return lyric_list_.size()==0;
 }
 
 void
-Voice_alist_entry::next_lyric()
+Syllable_group::next_lyric()
 {
   first_in_phrase_b_ = (alignment_i_ == RIGHT);
   clear();
@@ -510,25 +507,25 @@ Voice_alist_entry::next_lyric()
 
 
 SCM
-Voice_alist_entry::mark_smob (SCM)
+Syllable_group::mark_smob (SCM)
 {
   return SCM_EOL;
 }
 
 int
-Voice_alist_entry::print_smob (SCM, SCM port, scm_print_state * )
+Syllable_group::print_smob (SCM, SCM port, scm_print_state * )
 {
-  scm_puts ("#<Voice_alist_entry>", port);
+  scm_puts ("#<Syllable_group>", port);
   return 1;
 }
 
-IMPLEMENT_UNSMOB(Voice_alist_entry, voice_entry);
-IMPLEMENT_SIMPLE_SMOBS(Voice_alist_entry);
-IMPLEMENT_DEFAULT_EQUAL_P(Voice_alist_entry);
+IMPLEMENT_UNSMOB(Syllable_group, voice_entry);
+IMPLEMENT_SIMPLE_SMOBS(Syllable_group);
+IMPLEMENT_DEFAULT_EQUAL_P(Syllable_group);
 
 SCM
-Voice_alist_entry::make_entry ()
+Syllable_group::make_entry ()
 {
-  Voice_alist_entry *vi = new Voice_alist_entry;
+  Syllable_group *vi = new Syllable_group;
   return vi->smobbed_self ();
 }
index e5f7ada6033c15bd7cabd2033c7c63c27a531a38..e51baf0cfb1f790c0a409a8b439a50d4d27bc802 100644 (file)
@@ -10,6 +10,7 @@
 #include "engraver.hh"
 #include "musical-request.hh"
 #include "score-element.hh"
+#include "translator-group.hh"
 
 /**
    Signal existence of melismas.
@@ -38,11 +39,10 @@ Melisma_engraver::do_try_music (Music *m )
          || (to_boolean (tie))
          || (to_boolean (beam))) {
 
-       Score_element * melisma_p = new Score_element (get_property ("basicMelismaProperties"));
-       announce_element (melisma_p, m);
-
+       daddy_trans_l_->set_property("melismaEngraverBusy",SCM_BOOL_T);
        return true;
       }
     }
+  daddy_trans_l_->set_property("melismaEngraverBusy",SCM_BOOL_F);
   return false;
 }
index 5e82e01c7b2ee30e73e68c77353f8adbff537722..bb22b41291b59ad70833b4850dc8bf0c7cbe1d26 100644 (file)
@@ -19,9 +19,15 @@ compare (Array<Musical_pitch>* left, Array<Musical_pitch>* right)
   if (left->size () == right->size ())
     {
       for (int i = 0; i < left->size (); i++)
-       if ((*left)[i] != (*right)[i])
-         return 1;
+       {
+         int r = Musical_pitch::compare ((*left)[i], (*right)[i]);
+         if (r)
+           return r;
+       }
     }
+  else
+    return 1;
+
   return 0;
 }
 
index 4bd5a30495bba5541a84a8a88864bba29a61b117..7bc2a0b54b49da1a2aefabae72379ca779ea8d95 100644 (file)
@@ -40,6 +40,7 @@ static Keyword_ent the_key_tab[]={
   {"consists", CONSISTS},
   {"consistsend", CONSISTSEND},
   {"context", CONTEXT},
+  {"denies", DENIES},
   {"duration", DURATION},
   {"font", FONT},
   {"grace", GRACE},
index 5378672633ed823268ba4a3735ade126a9358508..c7ad380cac8c99bc6bb37cae0f7fc575a3dac54b 100644 (file)
@@ -74,6 +74,12 @@ Note_heads_engraver::do_try_music (Music *m)
        p->pitch_arr_.push (note_req_l_arr_[i]->pitch_); // GUH UGH UGHUGH.
       return true;
     }
+  else if (Rhythm_interrogate_req *r = dynamic_cast<Rhythm_interrogate_req*> (m))
+    {
+      for (int i= note_req_l_arr_.size (); i--;)
+       r->duration_arr_.push (note_req_l_arr_[i]->duration_); // GUH UGH UGHUGH.
+      return true;
+    }
   return false;
   
 }
index 215dd6939480a49b58213f9ffc20f84a196108c4..03ecf130d17297707b65d72610d8ada149d96b58 100644 (file)
@@ -142,6 +142,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %token SEQUENTIAL
 %token SIMULTANEOUS
 %token CONSISTSEND
+%token DENIES
 %token DURATION
 %token EXTENDER
 %token FONT
@@ -459,6 +460,9 @@ translator_spec_body:
        | translator_spec_body ACCEPTS STRING semicolon {
                dynamic_cast<Translator_group*> ($$)-> set_acceptor (ly_scm2string ($3), true);
        }
+       | translator_spec_body DENIES STRING semicolon {
+               dynamic_cast<Translator_group*> ($$)-> set_acceptor (ly_scm2string ($3), false);
+       }
        | translator_spec_body REMOVE STRING semicolon {
                dynamic_cast<Translator_group*> ($$)-> set_element (ly_scm2string ($3), false);
        }
index 8776877b1e1f382024ce4e8f9c86cdeff38c2d96..1f57157c48f954039883ccfb16988e0f59f0ee8f 100644 (file)
@@ -16,8 +16,11 @@ Part_combine_music_iterator::Part_combine_music_iterator ()
 {
   combined_b_ = true;
 
+  now_ = 0;
   first_iter_p_ = 0;
   second_iter_p_ = 0;
+  first_until_ = 0;
+  second_until_ = 0;
 }
 
 Part_combine_music_iterator::~Part_combine_music_iterator ()
@@ -29,8 +32,14 @@ Part_combine_music_iterator::~Part_combine_music_iterator ()
 Moment
 Part_combine_music_iterator::next_moment () const
 {
-  Moment first_next = first_iter_p_->next_moment ();
-  Moment second_next = second_iter_p_->next_moment ();
+  Moment first_next = infinity_mom;
+  if (first_iter_p_->ok ())
+    first_next = first_iter_p_->next_moment ();
+  Moment second_next = infinity_mom;
+  if (second_iter_p_->ok ())
+    second_next = second_iter_p_->next_moment ();
+  if (first_next == infinity_mom && second_next == infinity_mom)
+    return 0;
   return first_next <? second_next;
 }
 
@@ -38,7 +47,7 @@ bool
 Part_combine_music_iterator::ok () const
 {
   //hmm
-  return first_iter_p_->ok ();
+  return first_iter_p_->ok () || second_iter_p_->ok ();
 }
 
 void
@@ -111,18 +120,23 @@ Part_combine_music_iterator::change_to (Music_iterator *it, String to_type,
 Pitch_interrogate_req* first_spanish_inquisition; // nobody expects it
 Pitch_interrogate_req* second_spanish_inquisition; // won't strike twice
 
+Rhythm_interrogate_req* first_rhythmic_inquisition;
+Rhythm_interrogate_req* second_rhythmic_inquisition;
+
 void
 Part_combine_music_iterator::do_process_and_next (Moment m)
 {
-  Moment first_next = first_iter_p_->next_moment ();
-  Moment second_next = second_iter_p_->next_moment ();
-
   Part_combine_music const * p = dynamic_cast<Part_combine_music const* > (music_l_);
 
-  if (first_next <= m)
-    first_iter_p_->process_and_next (m);
+  now_ = next_moment ();
 
-  if (second_next <= m)
+  /*
+    Hmm, shouldn't we check per iterator if next_moment < m?
+   */
+  if (first_iter_p_->ok ())
+    first_iter_p_->process_and_next (m);
+  
+  if (second_iter_p_->ok ())
     second_iter_p_->process_and_next (m);
 
   Music_iterator::do_process_and_next (m);
@@ -130,6 +144,8 @@ Part_combine_music_iterator::do_process_and_next (Moment m)
   /*
     TODO:
 
+    * Maybe we need a Skip_engraver?
+
     (check): can this all be handled now?
     
     Maybe different modes exist?
@@ -151,37 +167,60 @@ Part_combine_music_iterator::do_process_and_next (Moment m)
   
   if (!first_spanish_inquisition)
     first_spanish_inquisition = new Pitch_interrogate_req;
-  Music_iterator* fit = first_iter_p_->try_music (first_spanish_inquisition);
-
+  first_iter_p_->try_music (first_spanish_inquisition);
+  
   if (!second_spanish_inquisition)
     second_spanish_inquisition = new Pitch_interrogate_req;
-  Music_iterator* sit = second_iter_p_->try_music (second_spanish_inquisition);
+  second_iter_p_->try_music (second_spanish_inquisition);
 
-  Array<Musical_pitch>* first_arr_l = &first_spanish_inquisition->pitch_arr_;
-  Array<Musical_pitch>* second_arr_l = &second_spanish_inquisition->pitch_arr_;
+  Array<Musical_pitch>* first_pitches = &first_spanish_inquisition->pitch_arr_;
+  Array<Musical_pitch>* second_pitches = &second_spanish_inquisition->pitch_arr_;
+
+  if (!first_rhythmic_inquisition)
+    first_rhythmic_inquisition = new Rhythm_interrogate_req;
+  first_iter_p_->try_music (first_rhythmic_inquisition);
+
+  if (!second_rhythmic_inquisition)
+    second_rhythmic_inquisition = new Rhythm_interrogate_req;
+  second_iter_p_->try_music (second_rhythmic_inquisition);
+
+  Array<Duration>* first_durations = &first_rhythmic_inquisition->duration_arr_;
+  Array<Duration>* second_durations = &second_rhythmic_inquisition->duration_arr_;
 
   SCM interval = SCM_BOOL_F;
-  if (first_arr_l->size () && second_arr_l->size ())
+  if (first_pitches->size () && second_pitches->size ())
+    {
+      first_pitches->sort (Musical_pitch::compare);
+      second_pitches->sort (Musical_pitch::compare);
+      interval = gh_int2scm (first_pitches->top ().steps ()
+                            - (*second_pitches)[0].steps ());
+    }
+  if (first_durations->size ())
+    {
+      first_durations->sort (Duration::compare);
+      Moment new_until = now_ + first_durations->top ().length_mom ();
+      if (new_until > first_until_)
+       first_until_ = new_until;
+    }
+
+    if (second_durations->size ())
     {
-      first_arr_l->sort (Musical_pitch::compare);
-      second_arr_l->sort (Musical_pitch::compare);
-      interval = gh_int2scm (first_arr_l->top ().steps ()
-                            - (*second_arr_l)[0].steps ());
+      second_durations->sort (Duration::compare);
+      Moment new_until = now_ + second_durations->top ().length_mom ();
+      if (new_until > second_until_)
+       second_until_ = new_until;
     }
 
   Translator_group * fir = first_iter_p_->report_to_l ();
   Translator_group * sir = second_iter_p_->report_to_l ();
 
-  bool solo_b = (first_arr_l->empty () != second_arr_l->empty ());
+  bool solo_b = (first_pitches->empty () != second_pitches->empty ())
+    && !(first_until_ > now_ && second_until_ > now_);
 
-  /*
-    Urg, this won't work at end of music.  Should interrogate rhythm.
-   */
-  if (first_iter_p_->ok ())
-    first_next = first_iter_p_->next_moment ();
-  if (second_iter_p_->ok ())
-    second_next = second_iter_p_->next_moment ();
-  bool unirhythm_b = (first_next == second_next) && !solo_b;
+  bool unirhythm_b = !solo_b && !compare (first_durations, second_durations);
+  bool unison_b = unirhythm_b && !first_pitches->empty ()
+    &&!compare (first_pitches, second_pitches);
+  bool unisilence_b = unirhythm_b && first_pitches->empty ();
 
   Translator_group * fd = fir->find_create_translator_l (p->what_str_, "one");
   Translator_group * sd = sir->find_create_translator_l (p->what_str_, "two");
@@ -211,7 +250,9 @@ Part_combine_music_iterator::do_process_and_next (Moment m)
   if ((!unirhythm_b && combined_b_)
       || (split_interval_b && combined_b_)
       || (solo_b && combined_b_)
-      || (unirhythm_b && !combined_b_ && !split_interval_b && !solo_b))
+      /*|| (unisilence_b && combined_b_) */
+      || ((unirhythm_b || unison_b || unisilence_b)
+         && !combined_b_ && !split_interval_b && !solo_b))
     {
       combined_b_ = !combined_b_;
       to_id =  combined_b_ ? "one" : "two";
@@ -229,25 +270,31 @@ Part_combine_music_iterator::do_process_and_next (Moment m)
   fd->set_property ("split-interval", b);
   sd->set_property ("split-interval",  b);
 
-  b = gh_bool2scm (unirhythm_b && !compare (first_arr_l, second_arr_l));
+  b = unisilence_b ? SCM_BOOL_T : SCM_BOOL_F;
+  fd->set_property ("unisilence", b);
+  sd->set_property ("unisilence", b);
+
+  b = unison_b ? SCM_BOOL_T : SCM_BOOL_F;
   fd->set_property ("unison", b);
   sd->set_property ("unison", b);
 
   b = solo_b  ? SCM_BOOL_T : SCM_BOOL_F;
-  if (first_arr_l->size ())
+  if (first_pitches->size ())
     {
       fd->set_property ("solo", b);
       sd->set_property ("solo", SCM_BOOL_F);
     }
 
-  if (second_arr_l->size ())
+  if (second_pitches->size ())
     {
       fd->set_property ("solo", SCM_BOOL_F);
       sd->set_property ("solo", b);
     }
 
-  first_arr_l->clear ();
-  second_arr_l->clear ();
+  first_pitches->clear ();
+  second_pitches->clear ();
+  first_durations->clear ();
+  second_durations->clear ();
 }
 
 Music_iterator*
index 259140717a7ef1e69995b65537cafef24c99bb3d..23ff6e776bef31628581a19dec2c6de147d8f62d 100644 (file)
@@ -92,13 +92,19 @@ Rest_engraver::do_process_music ()
 }
 
 bool
-Rest_engraver::do_try_music (Music *req)
+Rest_engraver::do_try_music (Music *m)
 {
-  if (Rest_req *r = dynamic_cast <Rest_req *> (req))
+  if (Rest_req *r = dynamic_cast <Rest_req *> (m))
     {
       rest_req_l_ = r;
       return true;
     }  
+  else if (Rhythm_interrogate_req *r = dynamic_cast<Rhythm_interrogate_req*> (m))
+    {
+      if (rest_req_l_)
+       r->duration_arr_.push (rest_req_l_->duration_); // GUH UGH UGHUGH.
+      return true;
+    }
   return false;
 }
 
index ccad52d81cd9172fdc879cacb1180f2923cbcaf2..4b6a9e081c93a0eb78467037297cfe564cd72f0d 100644 (file)
@@ -137,10 +137,12 @@ Slur::encompass_offset (Score_element*me,
       && !stem_l->extent (Y_AXIS).empty_b ())
     {
       o[Y_AXIS] = stem_l->relative_coordinate (common[Y_AXIS], Y_AXIS); // iuhg
+      o[Y_AXIS] += stem_l->extent (Y_AXIS)[dir];
     }
   else
     {
       o[Y_AXIS] = col->relative_coordinate (common[Y_AXIS], Y_AXIS);   // ugh
+      o[Y_AXIS] += col->extent (Y_AXIS)[dir];
     }
 
   /*
@@ -150,12 +152,16 @@ Slur::encompass_offset (Score_element*me,
   return o;
 }
 
-MAKE_SCHEME_CALLBACK(Slur,after_line_breaking);
-
+MAKE_SCHEME_CALLBACK (Slur, after_line_breaking);
 SCM
 Slur::after_line_breaking (SCM smob)
 {
   Score_element *me = unsmob_element (smob);
+  if (!scm_ilength (me->get_elt_property ("note-columns")))
+    {
+      me->suicide ();
+      return SCM_UNSPECIFIED;
+    }
   set_extremities (me);
   set_control_points (me);
   return SCM_UNSPECIFIED;
@@ -202,17 +208,18 @@ Slur::get_attachment (Score_element*me,Direction dir,
   Real ss = Staff_symbol_referencer::staff_space ((Score_element*)me);
   Real hs = ss / 2.0;
   Offset o;
-
-
+  
+  Score_element *stem = 0;
   if (Note_column::has_interface (sp->get_bound (dir)))
     {
       Score_element * n =sp->get_bound (dir);
-      if (Score_element*st = Note_column::stem_l (n))
+      if (Score_element *stem = Note_column::stem_l (n))
        {
 
          if (str == "head")
            {
-             o = Offset (0, Stem::chord_start_f (st ));
+             o = Offset (0, Stem::head_positions (stem)
+                         [Directional_element_interface (me).get ()] * hs);
              /*
                Default position is centered in X, on outer side of head Y
               */
@@ -221,50 +228,48 @@ Slur::get_attachment (Score_element*me,Direction dir,
            }
          else if (str == "alongside-stem")
            {
-             o = Offset (0, Stem::chord_start_f (st ));
+             o = Offset (0, Stem::chord_start_f (stem));
              /*
                Default position is on stem X, on outer side of head Y
               */
              o += Offset (n->extent (X_AXIS).length ()
-                          * (1 + Stem::get_direction (st )),
+                          * (1 + Stem::get_direction (stem)),
                           0.5 * ss * Directional_element_interface (me).get ());
            }
          else if (str == "stem")
            {
-             o = Offset (0, Stem::stem_end_position (st ) * hs);
+             o = Offset (0, Stem::stem_end_position (stem) * hs);
              /*
                Default position is on stem X, at stem end Y
               */
              o += Offset (0.5 *
                           (n->extent (X_AXIS).length ()
-                           - st->extent (X_AXIS).length ())
-                           * (1 + Stem::get_direction (st )),
+                           - stem->extent (X_AXIS).length ())
+                           * (1 + Stem::get_direction (stem)),
                            0);
            }
-         else if (str == "loose-end")
-           {
-             SCM other_a = dir == LEFT ? gh_cdr (s) : gh_car (s);
-             if (ly_symbol2string (other_a) != "loose-end")
-               {
-                 o = Offset (0, get_attachment (me, -dir, common)[Y_AXIS]);
-               }
-           }
-
-         
-         SCM l = scm_assoc
-           (scm_listify (a,
-                         gh_int2scm (Stem::get_direction (st ) * dir),
-                         gh_int2scm (Directional_element_interface (me).get () * dir),
-                         SCM_UNDEFINED),
-            scm_eval (ly_symbol2scm ("slur-extremity-offset-alist")));
-         
-         if (l != SCM_BOOL_F)
-           {
-             o += ly_scm2offset (gh_cdr (l)) * ss * dir;
-           }
        }
     }
-
+  else if (str == "loose-end")
+    {
+      SCM other_a = dir == LEFT ? gh_cdr (s) : gh_car (s);
+      if (ly_symbol2string (other_a) != "loose-end")
+       {
+         o = Offset (0, get_attachment (me, -dir, common)[Y_AXIS]);
+       }
+    }
+         
+  SCM l = scm_assoc
+    (scm_listify (a,
+                 gh_int2scm (stem ? Stem::get_direction (stem) : 1 * dir),
+                 gh_int2scm (Directional_element_interface (me).get () * dir),
+                 SCM_UNDEFINED),
+     scm_eval (ly_symbol2scm ("slur-extremity-offset-alist")));
+  
+  if (l != SCM_BOOL_F)
+    {
+      o += ly_scm2offset (gh_cdr (l)) * ss * dir;
+    }
 
   /*
     What if get_bound () is not a note-column?
@@ -275,13 +280,14 @@ Slur::get_attachment (Score_element*me,Direction dir,
       o[Y_AXIS] += sp->get_bound (dir)->relative_coordinate (common[Y_AXIS], Y_AXIS) 
        - me->relative_coordinate (common[Y_AXIS], Y_AXIS);
     }
+
   return o;
 }
 
 Array<Offset>
 Slur::get_encompass_offset_arr (Score_element*me) 
 {
-    Spanner*sp = dynamic_cast<Spanner*>(me);
+  Spanner*sp = dynamic_cast<Spanner*>(me);
   SCM eltlist = me->get_elt_property ("note-columns");
   Score_element *common[] = {me->common_refpoint (eltlist,X_AXIS),
                             me->common_refpoint (eltlist,Y_AXIS)};
@@ -371,11 +377,17 @@ Slur::set_spacing_rods (SCM smob)
 /*
   Ugh should have dash-length + dash-period
  */
-MAKE_SCHEME_CALLBACK(Slur,brew_molecule);
+MAKE_SCHEME_CALLBACK (Slur, brew_molecule);
 SCM
 Slur::brew_molecule (SCM smob)
 {
   Score_element * me = unsmob_element (smob);
+  if (!scm_ilength (me->get_elt_property ("note-columns")))
+    {
+      me->suicide ();
+      return SCM_EOL;
+    }
+
   Real thick = me->paper_l ()->get_var ("stafflinethickness") *
     gh_scm2double (me->get_elt_property ("thickness"));
   Bezier one = get_curve (me);
@@ -429,12 +441,19 @@ Slur::set_control_points (Score_element*me)
 
   SCM controls = SCM_EOL;
   for (int i= 4; i--;)
-    controls = gh_cons ( ly_offset2scm (b.control_[i]), controls);
+    {
+      controls = gh_cons ( ly_offset2scm (b.control_[i]), controls);
+      /*
+       BRRR WHURG.
+       All these null control-points, where do they all come from?
+      */
+      if (i && b.control_[i][X_AXIS] == 0)
+       me->suicide ();
+    }
 
   me->set_elt_property ("control-points", controls);
 }
   
-  
 Bezier
 Slur::get_curve (Score_element*me) 
 {
@@ -447,20 +466,19 @@ Slur::get_curve (Score_element*me)
   
   if (!gh_pair_p (me->get_elt_property ("control-points")))
     set_control_points (me);
-  
-  
+
   for (SCM s= me->get_elt_property ("control-points"); s != SCM_EOL; s = gh_cdr (s))
     {
       b.control_[i] = ly_scm2offset (gh_car (s));
       i++;
     }
-  
+
   Array<Offset> enc (get_encompass_offset_arr (me));
   Direction dir = Directional_element_interface (me).get ();
   
   Real x1 = enc[0][X_AXIS];
   Real x2 = enc.top ()[X_AXIS];
-  
+
   Real off = 0.0;
   for (int i=1; i < enc.size ()-1; i++)
     {
index 04387ef9f702f89d4dee623f6d19d69452bc2a9b..3328d266369c0eae3a688849a98d37d249d9ca5d 100644 (file)
@@ -104,12 +104,38 @@ Spanner::do_break_processing ()
          span_p->set_bound(LEFT,bounds[LEFT]);
          span_p->set_bound(RIGHT,bounds[RIGHT]);
 
-
+#if 0
          assert (bounds[LEFT]->line_l () ==
                  bounds[RIGHT]->line_l ());
 
          bounds[LEFT]->line_l ()->typeset_element (span_p);
          broken_into_l_arr_.push (span_p);
+#else
+
+         if (bounds[LEFT]->line_l () != bounds[RIGHT]->line_l ())
+           {
+             programming_error ("bounds[LEFT]->line_l () != bounds[RIGHT]->line_l ()");
+#if 0
+             /*
+               lily crashes upon displaying this ...
+               
+              */
+             
+             gh_display (ly_str02scm ("\nspanner:mutable_property_alist_\n"));
+             gh_display (mutable_property_alist_);
+             gh_display (ly_str02scm ("\nspanner:immutable_property_alist_\n"));
+             gh_display (immutable_property_alist_);
+             gh_newline ();
+#endif
+             span_p->suicide ();
+           }
+         else
+           {
+             bounds[LEFT]->line_l ()->typeset_element (span_p);
+             broken_into_l_arr_.push (span_p);
+           }
+#endif
+         
        }
     }
   broken_into_l_arr_.sort (Spanner::compare);
diff --git a/lily/thread-devnull-engraver.cc b/lily/thread-devnull-engraver.cc
new file mode 100644 (file)
index 0000000..6436f0c
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+  thread-devnull-engraver.cc -- implement Thread_devnull_engraver
+
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#include "engraver.hh"
+#include "item.hh"
+#include "musical-request.hh"
+#include "translator-group.hh"
+
+class Thread_devnull_engraver : public Engraver
+{
+public:
+  VIRTUAL_COPY_CONS (Translator);
+  
+protected:
+  virtual void acknowledge_element (Score_element_info);
+};
+
+ADD_THIS_TRANSLATOR (Thread_devnull_engraver);
+
+void
+Thread_devnull_engraver::acknowledge_element (Score_element_info i)
+{
+  if (daddy_trans_l_->id_str_ == "two"
+      && (to_boolean (get_property ("unison"))
+         || to_boolean (get_property ("unisilence")))
+      && to_boolean (get_property ("soloADue")))
+    i.elem_l_->suicide ();
+}
diff --git a/lily/voice-devnull-engraver.cc b/lily/voice-devnull-engraver.cc
new file mode 100644 (file)
index 0000000..ed5e782
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+  voice-devnull-engraver.cc -- implement Voice_devnull_engraver
+
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#include "engraver.hh"
+#include "item.hh"
+#include "musical-request.hh"
+#include "translator-group.hh"
+
+class Voice_devnull_engraver : public Engraver
+{
+public:
+  VIRTUAL_COPY_CONS (Translator);
+  
+protected:
+  virtual void acknowledge_element (Score_element_info);
+};
+
+ADD_THIS_TRANSLATOR (Voice_devnull_engraver);
+
+void
+Voice_devnull_engraver::acknowledge_element (Score_element_info i)
+{
+  if (daddy_trans_l_->id_str_ == "two"
+      && (to_boolean (get_property ("unison"))
+         || to_boolean (get_property ("unisilence"))))
+    {
+      static char const *junk[] = {
+       //      "beam-interface",
+       "slur-interface",
+       "tie-interface",
+       "text-item-interface",
+       "text-script-interface",
+       "dynamic-interface",
+       "crescendo-interface",
+       0
+      };
+      for (char const **p = junk; *p; *p++)
+       {
+         if (i.elem_l_->has_interface (ly_symbol2scm (*p)))
+           {
+             i.elem_l_->suicide ();
+             return;
+           }
+       }
+    }
+}
index 6c7ab190c5b115582ce111df7d3f80e1ef52677f..c4e4214931a0cc7d229d9f9e98429b7ce80d3337 100644 (file)
@@ -146,7 +146,7 @@ VoiceContext = \translator {
        textScriptPadding = #3.0
        \consists "Text_engraver";
        \consists "A2_engraver";
-
+       \consists "Voice_devnull_engraver";
 
        startSustain = #"Ped."
        stopSustain = #"*"
@@ -211,7 +211,8 @@ GraceContext=\translator {
 
 ThreadContext = \translator{
        \type Engraver_group_engraver;
-       \consists "A2_devnull_engraver";
+       %%\consists "A2_devnull_engraver";
+       \consists "Thread_devnull_engraver";
        \consists "Note_heads_engraver";
        \consists "Output_property_engraver";   
        Generic_property_list = #generic-thread-properties
@@ -564,9 +565,6 @@ ScoreContext = \translator {
          (interfaces . (mark-interface))
          (visibility-lambda . ,end-of-line-invisible)
        )
-       basicMelismaProperties = #`(
-               (interfaces . (melisma-interface))
-       )
        basicMultiMeasureRestProperties = #`(
                (spacing-procedure . ,Multi_measure_rest::set_spacing_rods)             
                (molecule-callback . ,Multi_measure_rest::brew_molecule)
@@ -604,7 +602,8 @@ ScoreContext = \translator {
        )
        basicTextProperties = #`( )
        basicRestProperties = #`(
-               (interfaces . (rest-interface rhythmic-head-interface)) 
+               (interfaces . (rest-interface rhythmic-head-interface))
+               (after-line-breaking-callback . ,Rest::after_line_breaking)
                (molecule-callback . ,Rest::brew_molecule)
                (minimum-beam-collision-distance . 1.5)
        )
index 90eddae484739cbbd762436e1609a7844632877c..4529859e7ceb7324d060f62effb55cf75782fb14 100644 (file)
@@ -35,13 +35,13 @@ VoiceContext = \translator {
 };
 \translator { \VoiceContext }
 
-GraceContext = \translator {
+ThreadContext = \translator {
        \type "Performer_group_performer";
        \name Thread;
        \consists "Note_performer";
        \consists "Tie_performer";
 };
-\translator { \GraceContext }
+\translator { \ThreadContext }
 
 \translator {
        \type "Grace_performer_group";
index 2a124a83ece950f7d273fb3c1a431ca023f5e902..7f011a363a7a8f7d59e70d8d62344b045761248d 100644 (file)
@@ -13,20 +13,26 @@ copyright =  "public domain";
 \include "violoncello.ly"
 \include "contrabasso.ly"
 
-$bassi = \context GrandStaff = bassi_group <
-       \$violoncello_staff
-       \$contrabasso_staff
->
-
+bassiGroup = \context PianoStaff = bassi_group <
+       \context StaffCombineStaff=one {
+               \clef "bass"; 
+               \skip 1*314; 
+               \bar "|."; 
+       }
+       \context StaffCombineStaff=two {
+               \clef "bass"; 
+               \skip 1*314; 
+               \bar "|."; 
+       }
 
-$bassi = \context GrandStaff = bassi_group <
-       \$violoncello_staff
-       \$contrabasso_staff
+       \context StaffCombineStaff=one \partcombine StaffCombineStaff
+               \context StaffCombineThread=one \violoncello
+               \context StaffCombineThread=two \contrabasso
 >
 
 \score{
-       \$bassi
-       \include "coriolan-part-paper.ly"
+       \bassiGroup
+       \include "coriolan-part-combine-paper.ly"
        \include "coriolan-midi.ly"
 }
 
index 23feeb7db42d2a6ee9ddeb7b1b46db910c0d6c42..118aa53631ec15ed064ce173426508043bdb0bbb 100644 (file)
@@ -12,8 +12,8 @@ copyright =    "public domain";
 \include "global.ly"
 \include "clarinetti.ly"
 \score{
-       \$clarinetti_staff
-       \include "coriolan-part-paper.ly"
+       \clarinettiStaff
+       \include "coriolan-part-combine-paper.ly"
        \include "coriolan-midi.ly"
 }
 
index bce020e35526d78956cbec02427de69786c1539a..8b6cad3d3a50b379056c23eb9004733ae9acb05a 100644 (file)
@@ -14,22 +14,18 @@ copyright =  "public domain";
 \include "clarinetto-1.ly"
 \include "clarinetto-2.ly"
 
-$clarinetti_staff = \context Staff = clarinetti <
+clarinettiStaff = \context Staff = clarinetti <
        \property Staff.midiInstrument = #"clarinet"
        \property Staff.instrument = #"2 Clarinetti\n(B\\textflat)"
        \property Staff.instr = #"Cl.\n(B\\textflat)"
        % urg: can't; only My_midi_lexer:<non-static> () parses pitch?
        %\property Staff.transposing = "bes"
        \property Staff.transposing = #-2
-       %\notes \context Voice=clarinetti < 
-       \notes \context Staff=clarinetti < 
-               \time 4/4;
-               \key f \major;
-               \skip 1*341; \bar "|.";
-               \context VoiceOne=clarinettoi
-                       \$clarinetto1
-               \context VoiceTwo=clarinettoii
-                       \$clarinetto2
-       >
+       \time 4/4;
+       \notes \key f \major;
+       \skip 1*341; \bar "|.";
+       \context Voice=one \partcombine Voice
+               \context Thread=one \clarinettoI
+               \context Thread=two  \clarinettoII
 >
 
index 67ea94f751c9e3e1aa6d3cc4222c025dc5c23426..8ffb31b876957808b73e8e64adc351929e22e063 100644 (file)
@@ -11,7 +11,7 @@ copyright =    "public domain";
 
 \version "1.3.59";
 
-clarinetto1 = \notes \relative c {
+clarinettoI = \notes \relative c {
        R1 *2 |
        d''4-.\ff r r2 |
        R1 *3 |
@@ -22,8 +22,8 @@ clarinetto1 = \notes \relative c {
        f4-. r r2 |
        e4-. r r2 |
        R1 *4 |
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        bes2\p\< ( a |
        )gis2. \!a4-.\f |
        R1*13 |
@@ -45,8 +45,8 @@ clarinetto1 = \notes \relative c {
        c2. c4\sf|
        c4 r r2|
        R1*5|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        a'2.\p\< ( bes4|
        a g e)c|
        c'2.( d4|
@@ -59,8 +59,8 @@ clarinetto1 = \notes \relative c {
        d~|
        d~|
        d|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        bes2.\<( c4|
        bes a fis)d|
        \!d'2\ff f|
@@ -142,8 +142,8 @@ clarinetto1 = \notes \relative c {
        )e2. f4\sf(|
        )e4 r r2|
        R1*9|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        fis2.\p\<(g4|
        fis e cis)a|
        \!a2\ff c|
@@ -162,8 +162,8 @@ clarinetto1 = \notes \relative c {
        r2 r4 d(|
        )cis r r2|
        r r4 r8 cis|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        d4\< r r2|
        r r4 r8 d|
        e4 r r r8 e|
@@ -196,8 +196,8 @@ clarinetto1 = \notes \relative c {
        d4 r8 g f4 r8 c|
        bes4 r r2|
        R1*11|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        f'2.\p\<(g4|
        f e cis)a|
        a1|
@@ -206,8 +206,8 @@ clarinetto1 = \notes \relative c {
        c\f~|
        c\p|
        d\f~|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        d\p\<~|
        d~|
        d~|
@@ -237,8 +237,8 @@ clarinetto1 = \notes \relative c {
        R1|
        d4-. d-. r2|
        d4-. d-. r2|
-       \property VoiceOne.decrescendoText = "dim."
-       \property VoiceOne.decrescendoSpanner = "dashed-line"
+       \property Voice.decrescendoText = "dim."
+       \property Voice.decrescendoSpanner = "dashed-line"
        d4\> r e r|
        R1|
        \!a,4\p r r2|
index ae92af6fbbacfe495777cbe32cc286c9f73cbba2..1f68736ad7b37955c0c819a7a8617d01b35056d4 100644 (file)
@@ -11,7 +11,7 @@ copyright =    "public domain";
 
 \version "1.3.59";
 
-clarinetto2 = \notes \relative c { 
+clarinettoII = \notes \relative c { 
        R1*2 bes''4-.\ff r r2 |
        R1*3 |
        cis4-. r r2 |
@@ -51,8 +51,8 @@ clarinetto2 = \notes \relative c {
        d~|
        d|
        %a deux|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        bes'2.\<(c4|
        bes a fis)d|
        \!d'2\ff f,|
@@ -123,8 +123,8 @@ clarinetto2 = \notes \relative c {
        )e2. f4\sf(|
        )e4 r r2|
        R1*9|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        fis2.\p\<( g4|
        fis e cis)a|
        %a deux; urg|
@@ -171,8 +171,8 @@ clarinetto2 = \notes \relative c {
        c1\f~|
        c\p|
        a1\f|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        d,\p\<~|
        d~|
        d~|
@@ -204,8 +204,8 @@ clarinetto2 = \notes \relative c {
        R1|
        a4-. c-. r2|
        bes4-. c-. r2|
-       \property VoiceTwo.decrescendoText = "dim."
-       \property VoiceTwo.decrescendoSpanner = "dashed-line"
+       \property Voice.decrescendoText = "dim."
+       \property Voice.decrescendoSpanner = "dashed-line"
        bes4\> r a r|
        R1|
        \!a4\p r r2|
index 4b53586a6d27bc43274fd3e560471c6e5fc773bc..1c75a4e0449826cd2ebff747e78deb486a378e48 100644 (file)
@@ -191,15 +191,15 @@ contrabasso = \notes \relative c {
        c4 r r2 |
 }
 
-$contrabasso_staff = \context Staff = contrabasso <
-       \property Staff.midiInstrument = #"contrabass"
-       \property Staff.instrument = #"Contrabasso"
-       \property Staff.instr = #"Cb."
-       \property Staff.transposing = #-12
-       \clef "bass";
-       \notes \context Voice=one< 
-               \global
-               \$contrabasso
-       >
->
+%%%contrabassoStaff = \context Staff = contrabasso <
+%%%    \property Staff.midiInstrument = #"contrabass"
+%%%    \property Staff.instrument = #"Contrabasso"
+%%%    \property Staff.instr = #"Cb."
+%%%    \property Staff.transposing = #-12
+%%%    \clef "bass";
+%%%    \notes \context Voice=one< 
+%%%            \global
+%%%            \contrabasso
+%%%    >
+%%%>
 
index ba81ffaf754acc44d86ebbbddab3c180f14f9f1c..544e817be3d45567a8acfad97df022efeed99242 100644 (file)
@@ -1,18 +1,38 @@
 \midi{ 
        \tempo 4 = 150; 
+
+       \translator {
+               \ThreadContext
+               \name "VoiceCombineThread";
+       }
        \translator {
                \VoiceContext
-               \name "VoiceOne";
+               \name "VoiceCombineVoice";
+               \accepts "VoiceCombineThread";
+       }
+       \translator {
+               \StaffContext
+               \name "VoiceCombineStaff";
+               \accepts "VoiceCombineVoice";
+       }
+
+       \translator {
+               \ThreadContext
+               \name "StaffCombineThread";
        }
        \translator {
                \VoiceContext
-               \name "VoiceTwo";
-               %\remove "Span_dynamic_engraver";
-               %\remove "Dynamic_engraver";
+               \name "StaffCombineVoice";
+               \accepts "StaffCombineThread";
        }
        \translator {
                \StaffContext
-               \accepts "VoiceOne";
-               \accepts "VoiceTwo";
+               \name "StaffCombineStaff";
+               \accepts "StaffCombineVoice";
+       }
+       \translator {
+               \ScoreContext
+               \accepts "VoiceCombineStaff";
+               \accepts "StaffCombineStaff";
        }
 }
index e1d7140a33d88a937e9454d5628b8172d723cfab..9d33209b23b0b54fd18df07569e497abcc87441f 100644 (file)
        textheight = 295.0\mm;
        linewidth = 180.0\mm;
 
-       % slurs are never beautiful (no steep slurs)
-       slur_beautiful = 0.0;
-
-       \translator {
+       \translator{ \HaraKiriStaffContext }
+       %
+       % The Voice combine hierarchy
+       %
+       \translator{
+               \ThreadContext
+               \name "VoiceCombineThread";
+               \consists "Rest_engraver";
+               \remove "Thread_devnull_engraver";
+               \consists "A2_devnull_engraver";
+       }
+       \translator{
                \VoiceContext
-               dynamicPadding = #2  % urg, in \pt
-               dynamicMinimumSpace = #6  % urg, in \pt
+               \name "VoiceCombineVoice";
+               soloText = #"I."
+               soloIIText = #"II."
+               \remove "Rest_engraver";
+               \accepts "VoiceCombineThread";
+               \consists "A2_devnull_engraver";
+               \remove "Voice_devnull_engraver";
        }
-       \translator {
+       \translator{
+               \HaraKiriStaffContext
+               \consists "Mark_engraver";
+               \name "VoiceCombineStaff";
+               \accepts "VoiceCombineVoice";
+       }
+
+       %
+       % The Staff combine hierarchy
+       %
+       \translator{
+               \ThreadContext
+               \name "StaffCombineThread";
+               \remove "Thread_devnull_engraver";
+%%             \consists "A2_devnull_engraver";
+       }
+       \translator{
                \VoiceContext
-               \name "VoiceOne";
+               \name "StaffCombineVoice";
+               \accepts "StaffCombineThread";
+
+               \remove "Rest_engraver";
+               \remove "Dot_column_engraver";
+               \remove "Stem_engraver";
+               \remove "Beam_engraver";
+               \remove "Auto_beam_engraver";
+               %\include "auto-beam-settings.ly";
 
-               dynamicPadding = #2  % urg, in \pt
-               dynamicMinimumSpace = #6  % urg, in \pt
+               \remove "Chord_tremolo_engraver";
+               \remove "Melisma_engraver";
+               \remove "Text_engraver";
+               \remove "A2_engraver";
+               \remove "Voice_devnull_engraver";
 
-               %%\consists "Line_number_engraver";
-               verticalDirection = #1
-               stemVerticalDirection = #1
-               %dynamicDirection = #-1
-               dynamicDirection = #1
+               \remove "Piano_pedal_engraver";
+               \remove "Script_engraver";
+               \remove "Script_column_engraver";
+               \remove "Rhythmic_column_engraver";
+               \remove "Slur_engraver";
+               \remove "Tie_engraver";
+
+               \remove "Voice_devnull_engraver";
+%%             \consists "Thread_devnull_engraver";
+               \consists "A2_devnull_engraver";
        }
        \translator {
-               \VoiceContext
-               \name "VoiceTwo";
-               %%\consists "Line_number_engraver";
-               verticalDirection = #-1
-               stemVerticalDirection = #-1
-               \remove "Dynamic_engraver";
-               %% Aargh: absulute dynamics:
-               \remove "Text_engraver";
+               \HaraKiriStaffContext
+               \name "StaffCombineStaff";
+               \accepts "StaffCombineVoice";
+
+               \consists "Rest_engraver";
+               \consists "Dot_column_engraver";
+               \consists "Stem_engraver";
+               \consists "Beam_engraver";
+               \consists "Auto_beam_engraver";
+               \include "auto-beam-settings.ly";
+
+               \consists "Chord_tremolo_engraver";
+               \consists "Melisma_engraver";
+               \consists "Text_engraver";
+               \consists "A2_engraver";
+%%             \consists "Voice_devnull_engraver";
+%%             \consists "A2_devnull_engraver";
+
+               soloADue = ##f
+
+               \consists "Piano_pedal_engraver";
+               \consists "Script_engraver";
+               \consists "Script_column_engraver";
+               \consists "Rhythmic_column_engraver";
+               \consists "Slur_engraver";
+               \consists "Tie_engraver";
        }
-       \translator { 
-               \HaraKiriStaffContext 
-               \accepts "VoiceOne";
-               \accepts "VoiceTwo";
+       \translator {
+               \StaffGroupContext
+               \accepts "VoiceCombineStaff";
+               \accepts "StaffCombineStaff";
        }
-       \translator { 
-               \OrchestralScoreContext 
+       \translator{ \HaraKiriStaffContext }
+
+       \translator {
+               %\ScoreContext
+               %\consists "Mark_engraver";
+               \OrchestralScoreContext
+               \accepts "VoiceCombineStaff";
+               \accepts "StaffCombineStaff";
+
+               barScriptPadding = #2.0 % dimension \pt
+               markScriptPadding = #4.0
+
+               %% urg: in pt?
+               barNumberScriptPadding = #15
                %% URG: this changes dynamics too
                %%textStyle = #"italic"
                timeSignatureStyle = #"C"
                instrumentScriptPadding = #55  %% urg, this is in pt
-               instrScriptPadding = #35 %% urg, this is in pt
+               instrScriptPadding = #40 %% urg, this is in pt
                marginScriptHorizontalAlignment = #1
                maximumRestCount = #1
        }
diff --git a/mutopia/Coriolan/coriolan-part-combine-paper.ly b/mutopia/Coriolan/coriolan-part-combine-paper.ly
new file mode 100644 (file)
index 0000000..c23c889
--- /dev/null
@@ -0,0 +1,127 @@
+\paper {
+
+       textheight = 295.0\mm;
+       linewidth = 180.0\mm;
+
+       \translator{ \HaraKiriStaffContext }
+       %
+       % The Voice combine hierarchy
+       %
+       \translator{
+               \ThreadContext
+               \name "VoiceCombineThread";
+               \consists "Rest_engraver";
+               \remove "Thread_devnull_engraver";
+               \consists "A2_devnull_engraver";
+       }
+       \translator{
+               \VoiceContext
+               \name "VoiceCombineVoice";
+               soloText = #"I."
+               soloIIText = #"II."
+               \remove "Rest_engraver";
+               \accepts "VoiceCombineThread";
+               \consists "A2_devnull_engraver";
+               \remove "Voice_devnull_engraver";
+       }
+       \translator{
+               \HaraKiriStaffContext
+               \consists "Mark_engraver";
+               \name "VoiceCombineStaff";
+               \accepts "VoiceCombineVoice";
+       }
+
+       %
+       % The Staff combine hierarchy
+       %
+       \translator{
+               \ThreadContext
+               \name "StaffCombineThread";
+               \remove "Thread_devnull_engraver";
+%%             \consists "A2_devnull_engraver";
+       }
+       \translator{
+               \VoiceContext
+               \name "StaffCombineVoice";
+               \accepts "StaffCombineThread";
+
+               \remove "Rest_engraver";
+               \remove "Dot_column_engraver";
+               \remove "Stem_engraver";
+               \remove "Beam_engraver";
+               \remove "Auto_beam_engraver";
+               %\include "auto-beam-settings.ly";
+
+               \remove "Chord_tremolo_engraver";
+               \remove "Melisma_engraver";
+               \remove "Text_engraver";
+               \remove "A2_engraver";
+               \remove "Voice_devnull_engraver";
+
+               \remove "Piano_pedal_engraver";
+               \remove "Script_engraver";
+               \remove "Script_column_engraver";
+               \remove "Rhythmic_column_engraver";
+               \remove "Slur_engraver";
+               \remove "Tie_engraver";
+
+               \remove "Voice_devnull_engraver";
+%%             \consists "Thread_devnull_engraver";
+               \consists "A2_devnull_engraver";
+       }
+       \translator {
+               \HaraKiriStaffContext
+               \name "StaffCombineStaff";
+               \accepts "StaffCombineVoice";
+
+               \consists "Rest_engraver";
+               \consists "Dot_column_engraver";
+               \consists "Stem_engraver";
+               \consists "Beam_engraver";
+               \consists "Auto_beam_engraver";
+               \include "auto-beam-settings.ly";
+
+               \consists "Chord_tremolo_engraver";
+               \consists "Melisma_engraver";
+               \consists "Text_engraver";
+               \consists "A2_engraver";
+%%             \consists "Voice_devnull_engraver";
+%%             \consists "A2_devnull_engraver";
+
+               soloADue = ##f
+
+               \consists "Piano_pedal_engraver";
+               \consists "Script_engraver";
+               \consists "Script_column_engraver";
+               \consists "Rhythmic_column_engraver";
+               \consists "Slur_engraver";
+               \consists "Tie_engraver";
+       }
+       \translator {
+               \StaffGroupContext
+               \accepts "VoiceCombineStaff";
+               \accepts "StaffCombineStaff";
+       }
+       \translator{ \HaraKiriStaffContext }
+
+       \translator {
+               \ScoreContext
+               \accepts "VoiceCombineStaff";
+               \accepts "StaffCombineStaff";
+               skipBars = ##t 
+
+               barScriptPadding = #2.0 % dimension \pt
+               markScriptPadding = #4.0
+
+               %% urg: in pt?
+               barNumberScriptPadding = #15
+               %% URG: this changes dynamics too
+               %%textStyle = #"italic"
+               timeSignatureStyle = #"C"
+               instrumentScriptPadding = #60  %% urg, this is in pt
+               instrScriptPadding = #40 %% urg, this is in pt
+               marginScriptHorizontalAlignment = #1
+               maximumRestCount = #1
+       }
+}
+
index 0efeefa7bdcbbb070e47b520c13cf786a029aaba..da6d84ab9a2af99d0e5a0c0e3a56b530a3103242 100644 (file)
@@ -2,40 +2,16 @@
        textheight = 295.0\mm;
        linewidth = 180.0\mm;
 
-       % slurs are never beautiful (no steep slurs)
-       slur_beautiful = 0.0;
+       \translator{ \HaraKiriStaffContext }
 
        \translator {
-               \VoiceContext
-               %dynamicPadding = #5  % urg, in \pt
-               %dynamicMinimumSpace = #10  % urg, in \pt
-       }
-       \translator {
-               \VoiceContext
-               \name "VoiceOne";
-               %%\consists "Line_number_engraver";
-               verticalDirection = #1
-               stemVerticalDirection = #1
-               %dynamicDirection = #-1
-               dynamicDirection = #1
-       }
-       \translator {
-               \VoiceContext
-               \name "VoiceTwo";
-               %%\consists "Line_number_engraver";
-               verticalDirection = #-1
-               stemVerticalDirection = #-1
-               \remove "Dynamic_engraver";
-               %% Aargh: absulute dynamics:
-               \remove "Text_engraver";
-       }
-       \translator { 
-               \OrchestralPartStaffContext 
-               \accepts "VoiceOne";
-               \accepts "VoiceTwo";
-       }
-       \translator { 
-               \ScoreContext skipBars = ##t 
+               \ScoreContext
+               skipBars = ##t 
+
+               barScriptPadding = #2.0 % dimension \pt
+               markScriptPadding = #4.0
+               %% urg: in pt?
+               barNumberScriptPadding = #15
                %% URG: this changes dynamics too
                %%textStyle = #"italic"
                timeSignatureStyle = #"C"
index 126cfaa4e673603d6fb451e367d204f63f38bea3..05aebee9006abaaf5ce16708f432f3484fd6a855 100644 (file)
@@ -28,52 +28,77 @@ copyright =  "public domain";
 \include "violoncello.ly"
 
 
-legni = \context StaffGroup = legni_group <
-       \$flauti_staff
-       \$oboi_staff
-       \$clarinetti_staff
-       \$fagotti_staff
+legniGroup = \context StaffGroup = legni_group <
+       \flautiStaff
+       \oboiStaff
+       \clarinettiStaff
+       \fagottiStaff
 >
 
-ottoni = \context StaffGroup = otonni_group <
-       \$corni_staff
-       \$trombe_staff
+ottoniGroup = \context StaffGroup = otonni_group <
+       \corniStaff
+       \trombeStaff
 >
 
-$timpani_g = \context StaffGroup = timpani_group <
-       \$timpani_staff
+timpaniGroup = \context StaffGroup = timpani_group <
+       \timpaniStaff
        % Force a staff bracket (?)
        \context Staff = timpany { \skip 1*314; }
 >
 
-violini = \context GrandStaff = violini_group <
-       \$violino1_staff
-       \$violino2_staff
+violiniGroup = \context GrandStaff = violini_group <
+       \violinoIStaff
+       \violinoIIStaff
 >
 
-violi = \context GrandStaff = violi_group <
-       \$viola1_staff
-       \$viola2_staff
+violiGroup = \context PianoStaff = violi_group <
+       \context StaffCombineStaff=one {
+               \clef "alto"; 
+               \skip 1*314; 
+               \bar "|."; 
+       }
+       \context StaffCombineStaff=two {
+               \clef "alto"; 
+               \skip 1*314; 
+               \bar "|."; 
+       }
+
+       \context StaffCombineStaff=one \partcombine StaffCombineStaff
+               \context StaffCombineThread=one \violaI
+               \context StaffCombineThread=two \violaII
 >
 
-bassi = \context GrandStaff = bassi_group <
-       \$violoncello_staff
-       \$contrabasso_staff
+bassiGroup = \context PianoStaff = bassi_group <
+       \context StaffCombineStaff=one {
+               \clef "bass"; 
+               \skip 1*314; 
+               \bar "|."; 
+       }
+       \context StaffCombineStaff=two {
+               \clef "bass"; 
+               \skip 1*314; 
+               \bar "|."; 
+       }
+
+       \context StaffCombineStaff=one \partcombine StaffCombineStaff
+               \context StaffCombineThread=one \violoncello
+               \context StaffCombineThread=two \contrabasso
 >
 
-archi = \context StaffGroup = archi_group <
-       \$violini
-       \$violi
-       \$bassi
+
+archiGroup = \context StaffGroup = archi_group <
+       \violiniGroup
+       \violiGroup
+       \bassiGroup
 >
 
 
 \score{
        <
-               \legni
-               \ottoni
-               \$timpani_g
-               \archi
+               \legniGroup
+               \ottoniGroup
+               \timpaniGroup
+               \archiGroup
        >
        \header{
                title = "Coriolan";
index ba5c9ffae881ba80c9e7f868b073265b290a3da6..49b80354bda9469c6972b66982a70472b4a50e21 100644 (file)
@@ -12,8 +12,8 @@ copyright =    "public domain";
 \include "global.ly"
 \include "corni.ly"
 \score{
-       \$corni_staff
-       \include "coriolan-part-paper.ly"
+       \corniStaff
+       \include "coriolan-part-combine-paper.ly"
        \include "coriolan-midi.ly"
 }
 
index 4c83ed3fb3d507d27cfbc1aa0831cdf6e6a6b896..13c376c1068b45eb361677da377d3c82d140b3cb 100644 (file)
@@ -14,21 +14,17 @@ copyright =  "public domain";
 \include "corno-1.ly"
 \include "corno-2.ly"
 
-$corni_staff = \context Staff = corni <
+corniStaff = \context Staff = corni <
        \property Staff.midiInstrument = #"french horn"
        \property Staff.instrument = #"2 Corni\n(E\\textflat)"
        \property Staff.instr = #"Cor.\n(E\\textflat)"
        % urg: can't; only My_midi_lexer:<non-static> () parses pitch?
        %\property Staff.transposing = "es"
        \property Staff.transposing = #3
-       %\notes \context Voice=corni < 
-       \notes \context Staff=corni < 
-               \time 4/4;
-               \skip 1*341; \bar "|.";
-               \context VoiceOne=cornoi
-                       \$corno1
-               \context VoiceTwo=cornoii
-                       \$corno2
-       >
+       \time 4/4;
+       \skip 1*341; \bar "|.";
+       \context Voice=one \partcombine Voice
+               \context Thread=one \cornoI
+               \context Thread=two \cornoII
 >
 
index 88a280a0df6b2854908306c0071c92d604dc5fdc..ff2ca983b56c733094cbbdd3c02211caaa67b46b 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 \version "1.3.59";
 
-corno1 = \notes \relative c {
+cornoI = \notes \relative c {
        R1*2 |
        f''4-.\ff r r2 |
        R1*3 |
@@ -25,8 +25,8 @@ corno1 = \notes \relative c {
        r4 g-.\f r2 |
        R1*2 |
        % `a 2
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r8 f\p\< f2 e4 |
        r8 f f2 e4 |
        f4. e8 f4. e8 |
@@ -172,8 +172,8 @@ corno1 = \notes \relative c {
        e~|
        e~|
        e~|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        e\<~|
        e~|
        e|
index b141ebdd295a4df53b3b8c01b1ab0e02c59be1d9..030c795d77c25c508f2f43cbef378bf09c01ef98 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 \version "1.3.59";
 
-corno2 = \notes \relative c {
+cornoII = \notes \relative c {
        R1*2 |
        d''4-.\ff r r2 |
        R1*3 |
@@ -26,8 +26,8 @@ corno2 = \notes \relative c {
        R1*2 |
        % `a 2
        % urg, yes this is a-deux, but lily doesn't know about I. / a2 yet.
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r8 f'\p\< f2 e4 |
        r8 f f2 e4 |
        f4. e8 f4. e8 |
@@ -129,8 +129,8 @@ corno2 = \notes \relative c {
        e~|
        e~|
        e~|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        e\<~|
        e~|
        e~|
@@ -142,8 +142,8 @@ corno2 = \notes \relative c {
        %a deux|
        r4 r8 e,\p e4. e8|
        r4 r8 e e4. e8|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r4 r8 e\< e4. e8|
        r4 r8 e e4. e8|
        r4 r8 e e4. e8|
@@ -189,8 +189,8 @@ corno2 = \notes \relative c {
        e~|
        e~|
        e~|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        e\<~|
        e~|
        e|
index ac33ccedfdc25725788337e859a0c2ad7ed88ef3..2408f7e8e78487326334ce4a9da3dd7a28560dee 100644 (file)
@@ -5,8 +5,6 @@ description =    "";
 composer =      "Ludwig van Beethoven (1770-1827)";
 enteredby =     "JCN";
 copyright =     "public domain";
-
-
 }
 
 \version "1.3.59";
@@ -14,8 +12,8 @@ copyright =    "public domain";
 \include "global.ly"
 \include "fagotti.ly"
 \score{
-       \$fagotti_staff
-       \include "coriolan-part-paper.ly"
+       \fagottiStaff
+       \include "coriolan-part-combine-paper.ly"
        \include "coriolan-midi.ly"
 }
 
index e544773c3cccea553fc6752b80a99ff0ffff90af..c829f89afa2f5d9fa0a791382d9b95e9081e0d6d 100644 (file)
@@ -5,8 +5,6 @@ description =    "";
 composer =      "Ludwig van Beethoven (1770-1827)";
 enteredby =     "JCN";
 copyright =     "public domain";
-
-
 }
 
 \version "1.3.59";
@@ -14,18 +12,14 @@ copyright =  "public domain";
 \include "fagotto-1.ly"
 \include "fagotto-2.ly"
 
-$fagotti_staff = \context Staff = fagotti <
+fagottiStaff = \context Staff = fagotti <
        \property Staff.midiInstrument = #"bassoon"
        \property Staff.instrument = #"2 Fagotti"
        \property Staff.instr = #"Fg."
        \clef "bass";
-       %\notes \context Voice=fagotti < 
-       \notes \context Staff=fagotti < 
-               \global
-               \context VoiceOne=fagottoi
-                       \$fagotto1
-               \context VoiceTwo=fagottoii
-                       \$fagotto2
-       >
+       \global
+       \context Voice=one \partcombine Voice
+               \context Thread=one \fagottoI
+               \context Thread=two \fagottoII
 >
 
index 4aba1af595743078b6ed94766675dfe91be1f9ef..9926d3b6775edfde3bf3c027d47f44fd32d91907 100644 (file)
@@ -5,13 +5,11 @@ description =  "";
 composer =      "Ludwig van Beethoven (1770-1827)";
 enteredby =     "JCN";
 copyright =     "public domain";
-
-
 }
 
 \version "1.3.59";
 
-fagotto1 = \notes \relative c {
+fagottoI = \notes \relative c {
        R1*2 |
        as'4-.\ff r r2 |
        R1 *3 |
@@ -24,14 +22,14 @@ fagotto1 = \notes \relative c {
        R1*5 |
        r2 r4 g4-.\f |
        R1*5 |
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        ges'2\p\< f2 ~ |
        f4 \!e-.\f r2 |
        R1 |
        f2\p()es |
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        d1\< |
        d |
        d2 d |
@@ -54,8 +52,8 @@ fagotto1 = \notes \relative c {
        )d4 r r2|
        R1*9|
        \clef "tenor";
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        g'2.(as4 \p\<|
        g f d)bes
        \clef "bass";
@@ -66,8 +64,8 @@ fagotto1 = \notes \relative c {
        c~|
        c~|
        c~|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        c\<~|
        c|
        \!c2\ff bes|
@@ -80,8 +78,8 @@ fagotto1 = \notes \relative c {
        bes(a bes)g|
        fis r8 a\pp a4. a8|
        r4 r8 a a4. a8|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r4 r8 bes\< bes4. bes8|
        r4 r8 bes bes4. bes8|
        r4 r8 c8 c4. c8|
@@ -129,8 +127,8 @@ fagotto1 = \notes \relative c {
        e4 r r2|
        R1*3|
        r4 r8 f' es4 r8 bes|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        c4\< r4 r2|
        R1*2|
        r4 r8 ges' f4 r8 c|
@@ -149,8 +147,8 @@ fagotto1 = \notes \relative c {
        [g,: bes: c: des:][f,: bes: c: des:]||
        [e,: g: bes: des:][c: e: g: c:]||
 
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        c1\p\< ~|
        c1~|
        c1~|
@@ -217,8 +215,8 @@ fagotto1 = \notes \relative c {
        es(d es)c|
        b r8 d\p d4. d8|
        r4 r8 d d4. d8|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r4 r8 es\< es4. es8|
        r4 r8 es es4. es8|
        r4 r8 %
@@ -259,8 +257,8 @@ fagotto1 = \notes \relative c {
        es d b)g|
        g'2.(as4|
        g2)f|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        es2.\<( f4|
        es d b)g|
        R1|
@@ -269,8 +267,8 @@ fagotto1 = \notes \relative c {
        d\f|
        es\p|
        e\f|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        as,4.\p\< as8 g4. g8|
        f4. f8 es4. es8|
        as4. as8 g4. g8|
@@ -306,8 +304,8 @@ fagotto1 = \notes \relative c {
        R1|
        g,4-. g-. r2|
        as4-. bes-. r2|
-       \property VoiceOne.decrescendoText = "dim."
-       \property VoiceOne.decrescendoSpanner = "dashed-line"
+       \property Voice.decrescendoText = "dim."
+       \property Voice.decrescendoSpanner = "dashed-line"
        c4\> r d r|
        R1|
        \!c,4\p r r2|
@@ -315,8 +313,8 @@ fagotto1 = \notes \relative c {
        g4 r r2|
        R1|
        c4\pp r r2|
-       \property VoiceOne.decrescendoText = "sempre pi\\`u piano"
-       \property VoiceOne.decrescendoSpanner = ""
+       \property Voice.decrescendoText = "sempre pi\\`u piano"
+       \property Voice.decrescendoSpanner = ""
        r r4 g\p\>~|
        g1~|
        g~|
index 46e20bd21ce7837e7e0501867a0912d34ca2ff27..2ab53247db479f5b515505951d8964828f00baf4 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 \version "1.3.59";
 
-fagotto2 = \notes \relative c {
+fagottoII = \notes \relative c {
        R1*2 |
        f4-.\ff r r2 |
        R1*3 |
@@ -43,8 +43,8 @@ fagotto2 = \notes \relative c {
        )d4 r r2|
        R1*9|
        \clef "tenor";
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        g''2.(as4 \p\<||
        g f d)bes||
        \clef "bass";
@@ -55,14 +55,14 @@ fagotto2 = \notes \relative c {
        c~|
        c~|
        c~|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        c\<~|
        c|
        \!c2\ff g'|
        fis d|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        g,4 \p\< r r r8 g(|
        )c4 r r r8 c(|
        \!)b1\sf\>|
@@ -70,8 +70,8 @@ fagotto2 = \notes \relative c {
        R1*2|
        r4 r8 fis\pp fis4. fis8|
        r4 r8 fis fis4. fis8|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r4 r8 g\< g4. g8|
        r4 r8 g g4. g8|
        r4 r8 a a4. a8|
@@ -130,8 +130,8 @@ fagotto2 = \notes \relative c {
        e|
        f|
        g|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        as\<|
        g|
        as|
@@ -191,8 +191,8 @@ fagotto2 = \notes \relative c {
        g~|
        g~|
        g~|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        g\<~|
        g~|
        g~|
@@ -205,8 +205,8 @@ fagotto2 = \notes \relative c {
        a~|
        a~|
        a~|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        a\<~|
        a|
        \!f'2\ff e|
@@ -219,8 +219,8 @@ fagotto2 = \notes \relative c {
        R1*3|
        r4 r8 b'' b4. b8|
        r4 r8 b b4. b8|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r4 r8 c\< c4. c8|
        r4 r8 c c4. c8|
        \clef "tenor";
@@ -269,8 +269,8 @@ fagotto2 = \notes \relative c {
        g\p|
        bes\f|
        %a deux|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        as4.\p\< as8 g4. g8|
        f4. f8 es4. es8|
        as4. as8 g4. g8|
@@ -307,8 +307,8 @@ fagotto2 = \notes \relative c {
        R1|
        es,4-. e-. r2|
        f4-. g-. r2|
-       \property VoiceTwo.decrescendoText = "dim."
-       \property VoiceTwo.decrescendoSpanner = "dashed-line"
+       \property Voice.decrescendoText = "dim."
+       \property Voice.decrescendoSpanner = "dashed-line"
        as4\> r b r|
        R1|
        %a deux|
index 64c15a8d61f3cda2f736704194b9f629c12cffe2..088d93c799a1f7c4b18ec59cb90d760d2bd038a9 100644 (file)
@@ -5,8 +5,6 @@ description =    "";
 composer =      "Ludwig van Beethoven (1770-1827)";
 enteredby =     "JCN";
 copyright =     "public domain";
-
-
 }
 
 \version "1.3.59";
@@ -15,8 +13,8 @@ copyright =    "public domain";
 \include "flauti.ly"
 
 \score{
-       \$flauti_staff
-       \include "coriolan-part-paper.ly"
+       \flautiStaff
+       \include "coriolan-part-combine-paper.ly"
        \include "coriolan-midi.ly"
 }
 
index 4de0fdd35391057cd699668ff5ddb720c821ce4f..d1f7ed8e562c133201e3c78ceed040050805c01d 100644 (file)
@@ -5,8 +5,6 @@ description =    "";
 composer =      "Ludwig van Beethoven (1770-1827)";
 enteredby =     "JCN";
 copyright =     "public domain";
-
-
 }
 
 \version "1.3.59";
@@ -14,17 +12,13 @@ copyright =  "public domain";
 \include "flauto-1.ly"
 \include "flauto-2.ly"
 
-$flauti_staff = \context Staff = flauti <
+flautiStaff = \notes \context Staff = flauti <
        \property Staff.midiInstrument = #"flute"
        \property Staff.instrument = #"2 Flauti"
        \property Staff.instr = #"Fl."
-       %\notes \context Voice=flauti < 
-       \notes \context Staff=flauti < 
-               \global
-               \context VoiceOne=flautoi 
-                       \$flauto1
-               \context VoiceTwo=flautoii 
-                       \$flauto2
-       >
+       \global
+       \context Voice=one \partcombine Voice
+               \context Thread=one \flautoI
+               \context Thread=two \flautoII
 >
 
index fa500b659cdc4fa80c99324d8b071ac403c5fcfc..4b81af8df71fcb22253db0e11815c7e887d054d2 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 \version "1.3.59";
 
-flauto1 = \notes \relative c {
+flautoI = \notes \relative c {
        R1 *2 |
        c'''4-.\ff r r2 |
        R1 *3 |
@@ -20,19 +20,19 @@ flauto1 = \notes \relative c {
        g4-. r r2 |
        b,4-. r r2 |
        R1 *4 |
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r2 g'\p\< ( |
        )fis2. \!g4-.\f |
        R1*5 |
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r2 f\p\< ~ |
        f4 \!e-.\f r2 |
        R1 |
        f2\p()es |
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        d1\<  |
        d1 |
        d2 d2 |
@@ -55,8 +55,8 @@ flauto1 = \notes \relative c {
        )f2. ges4\sf|
        f4 r r2 |
        R1*9|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        g2.\p\<(f4|
        as g d)bes
        \!bes2\ff des|
@@ -65,14 +65,14 @@ flauto1 = \notes \relative c {
        c~|
        c~|
        c~|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        c\<~|
        c~|
        \!c2\ff es|
        d1~|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        d\p\<~|
        d~| 
        d2.()f4|
@@ -82,8 +82,8 @@ flauto1 = \notes \relative c {
        \!fis\pp r r2|
        r2 r4 r8 a|
        bes4 r r2|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r r4 r8 bes\<|
        c4 r r r8 c |
        d4 r r r8 d|
@@ -129,8 +129,8 @@ flauto1 = \notes \relative c {
        r4 r8 f' es4 r8 bes|
        c4 r r2|
        R1*2|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = ""
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = ""
        r4 r8 ges'\< f4 r8 c|
        des4 r r2|
        R1*5|
@@ -164,15 +164,15 @@ flauto1 = \notes \relative c {
        )d2. es4\sf(|
        )d r r2|
        R1*9|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        e2.\p\<(f4|
        e d b )g|
        \!g2\ff bes|
        a1~a4\p r r2|
        R1*3|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        a1\<~|
        a|
        \!a2\ff c|
@@ -215,8 +215,8 @@ flauto1 = \notes \relative c {
        c r8 f8 es4 r8 bes|
        as4-. des4-. r2|
        R1*11|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        es2.\p\<(f4|
        es d b)g|
        g1|
@@ -255,8 +255,8 @@ flauto1 = \notes \relative c {
        R1|
        c4-. c4-. r2|
        c4-. c4-. r2|
-       \property VoiceOne.decrescendoText = "dim."
-       \property VoiceOne.decrescendoSpanner = "dashed-line"
+       \property Voice.decrescendoText = "dim."
+       \property Voice.decrescendoSpanner = "dashed-line"
        c4\> r d r|
        R1|
        \!es4\p r r2|
index 4dcfbd0eacf5e446c2033990b656fd6a95f2aacf..4d79122b6bfbb88cf1aab59bf6b9bd865511a6bf 100644 (file)
@@ -6,8 +6,10 @@ composer =      "Ludwig van Beethoven (1770-1827)";
 enteredby =     "JCN";
 copyright =     "public domain";
 }
+
 \version "1.3.59";
-flauto2 = \notes \relative c {
+
+flautoII = \notes \relative c {
        R1 *2 |
        as'''4-.\ff r r2 |
        R1 *3 |
@@ -129,8 +131,8 @@ flauto2 = \notes \relative c {
        bes\f~|
        bes\p|
        c1\f~|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        c\p\<~|
        c~|
        c~|
@@ -164,8 +166,8 @@ flauto2 = \notes \relative c {
        R1|
        c4-. g'-. r2|
        as4-. e-. r2|
-       \property VoiceTwo.decrescendoText = "dim."
-       \property VoiceTwo.decrescendoSpanner = "dashed-line"
+       \property Voice.decrescendoText = "dim."
+       \property Voice.decrescendoSpanner = "dashed-line"
        f4\> r f r|
        R1|
        \!es4\p r r2|
index aa4ce8c21ab9941896e487d906ce94412245a460..7abc8b5c0a89952cb89f09a3a8981cd88b71b026 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 \version "1.3.59";
 
-oboe1 = \notes \relative c'' {
+oboeI = \notes \relative c'' {
        R1*2 |
        as'4-.\ff r r2 |
        R1*3 |
@@ -20,19 +20,19 @@ oboe1 = \notes \relative c'' {
        g4-. r r2 |
        g4-. r r2 |
        R1 *4 |
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        as2\p\< ( g |
        )fis2. \!g4-.\f |
        R1*5 |
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        ges2\p\<  f ~ |
        f4 \!e\f r2 |
        R1 |
        f2\p()es |
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        d1\< |
        d |
        d2 d |
@@ -55,22 +55,22 @@ oboe1 = \notes \relative c'' {
        )f2. ges4(|
        )f4 r r2|
        R1*9|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        g2.\p\<( as4|
        g f d)bes|
        \!bes'2\ff des|
        c bes|
        as4\p r r2|
        R1*3|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        as2.\p\<( bes4|
        as g e)c|
        \!c'2\ff es,|
        d1~|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        d\p\< ~|
        d~|
        \!d2.\sf\>()f4|
@@ -80,8 +80,8 @@ oboe1 = \notes \relative c'' {
        fis\pp r r2|
        r r4 r8 fis' |
        g4 r r2|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r r4 r8 g\<|
        a4 r r r8 a|
        bes4 r r r8 bes|
@@ -127,8 +127,8 @@ oboe1 = \notes \relative c'' {
        des4 r r r8 c|
        bes4 r8 es f4 r8 f|
        g4 r8 g e4 r 8 e|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        c'1\p\< ~|
        c~|
        c~|
@@ -158,8 +158,8 @@ oboe1 = \notes \relative c'' {
        )g2. fis4\sf(|
        )g4 r r2|
        R1*5|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        e2.\p\< (f4|
        e d b)g|
        g'2.(a4 g2)f|
@@ -171,8 +171,8 @@ oboe1 = \notes \relative c'' {
        a~|
        a~|
        a|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        f2.\<( g4|
        f e cis)a|
        \!a'2\ff c|
@@ -187,8 +187,8 @@ oboe1 = \notes \relative c'' {
        es(d es)c|
        b r r2|
        r r4 r8 d|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        es4\< r r2|
        r r4 r8 es|
        f4 r r r8 f|
@@ -224,8 +224,8 @@ oboe1 = \notes \relative c'' {
        es d b)g|
        g'2.(as4|
        g2)f|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        es2.\<( f4|
        es d b)g|
        c1|
@@ -234,8 +234,8 @@ oboe1 = \notes \relative c'' {
        f\f|
        g\p|
        g\f|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        c\p\<~|
        c~|
        c~|
index bbdeb2634aff5f31109f62502a6dc091fae17901..aea27fb3b49a8419463601d4d44f5b8a5dc6caac 100644 (file)
@@ -5,13 +5,11 @@ description =  "";
 composer =      "Ludwig van Beethoven (1770-1827)";
 enteredby =     "JCN";
 copyright =     "public domain";
-
-
 }
 
 \version "1.3.59";
 
-oboe2 = \notes \relative c{
+oboeII = \notes \relative c{
        R1*2|
        f''4-.\ff r r2 |
        R1*3 |
@@ -76,8 +74,8 @@ oboe2 = \notes \relative c{
        bes4 r8 bes bes4 r8 bes|
        bes4\p r r2|
        R1*15|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r4 r8 as'\< ges4 r8 des|
        es4 r8 bes' as4 r8 es|
        f4 r r2|
@@ -87,8 +85,8 @@ oboe2 = \notes \relative c{
        des4 r r r8 c|
        bes4 r8 bes bes4 r8 bes|
        bes4 r8 bes bes4 r8 bes|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        c1\p\< ~||
        c~|
        c~|
@@ -152,8 +150,8 @@ oboe2 = \notes \relative c{
        d\f|
        es\p|
        e\f|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        c\p\< ~|
        c~|
        c~|
@@ -185,8 +183,8 @@ oboe2 = \notes \relative c{
        R1|
        c4-. c-. r2|
        c4-. c-. r2|
-       \property VoiceTwo.decrescendoText = "dim."
-       \property VoiceTwo.decrescendoSpanner = "dashed-line"
+       \property Voice.decrescendoText = "dim."
+       \property Voice.decrescendoSpanner = "dashed-line"
        c4\> r d r|
        R1|
        \!c4\p r r2|
index f217a8e8525e112e5b4df49bb0df58f0c5ff5890..a90ea3a419ed228a766d1c5d8954d822183f0e7a 100644 (file)
@@ -5,8 +5,6 @@ description =    "";
 composer =      "Ludwig van Beethoven (1770-1827)";
 enteredby =     "JCN";
 copyright =     "public domain";
-
-
 }
 
 \version "1.3.59";
@@ -15,8 +13,8 @@ copyright =    "public domain";
 \include "oboi.ly"
 
 \score{
-       \$oboi_staff 
-       \include "coriolan-part-paper.ly"
+       \oboiStaff 
+       \include "coriolan-part-combine-paper.ly"
        \include "coriolan-midi.ly"
 }
 
index a6814311b4eda158a525a8034797821ef2852ea0..73d216c8698850597e6381b88848554d6b27d58e 100644 (file)
@@ -14,17 +14,12 @@ copyright =  "public domain";
 \include "oboe-1.ly"
 \include "oboe-2.ly"
 
-$oboi_staff = \context Staff = oboi <
+oboiStaff = \context Staff = oboi <
        \property Staff.midiInstrument = #"oboe"
        \property Staff.instrument = #"2 Oboi"
        \property Staff.instr = #"Ob."
-       %\notes \context Voice=oboi < 
-       \notes \context Staff=oboi < 
-               \global
-               \context VoiceOne=oboei
-                       \$oboe1
-               \context VoiceTwo=oboeii
-                       \$oboe2
-       >
+       \global
+       \context Voice=one \partcombine Voice
+               \context Thread=one \oboeI
+               \context Thread=two \oboeII
 >
-
index 49541e048d8dacb3d25480eeb6a5b51ffdce8481..322d29b5bcf89dade8dd7aaedfaa5c13ba48d83d 100644 (file)
@@ -13,7 +13,7 @@ copyright =    "public domain";
 \include "timpani.ly"
 
 \score{
-       \$timpani_staff 
+       \timpaniStaff 
        \include "coriolan-part-paper.ly"
        \include "coriolan-midi.ly"
 }
index 72876e2ab9c3a5cb0af96dacaeaca0fc9c920da2..0593edc4c7c8ef6d3b2d20f470b03203b39a4a6c 100644 (file)
@@ -145,7 +145,7 @@ timpani = \notes \relative c {
        R1*18|
 }
 
-$timpani_staff = \context Staff = timpani <
+timpaniStaff = \context Staff = timpani <
        \property Staff.midiInstrument = #"timpani"
        \property Staff.instrument = #"2 Timpani\n(C-G)"
        \property Staff.instr = #"Timp."
@@ -154,7 +154,7 @@ $timpani_staff = \context Staff = timpani <
 %              \global
                \time 4/4;
                \context Voice=timpani
-                       \$timpani
+                       \timpani
        >
 >
 
index fe127d7bef2ece6989636fb328f68ee4f3f50411..b2070a0903ec2e6eaa0e3f5f6119575fab8d39b6 100644 (file)
@@ -5,8 +5,6 @@ description =    "";
 composer =      "Ludwig van Beethoven (1770-1827)";
 enteredby =     "JCN";
 copyright =     "public domain";
-
-
 }
 
 \version "1.3.59";
@@ -14,8 +12,8 @@ copyright =    "public domain";
 \include "global.ly"
 \include "trombe.ly"
 \score{
-       \$trombe_staff 
-       \include "coriolan-part-paper.ly"
+       \trombeStaff 
+       \include "coriolan-part-combine-paper.ly"
        \include "coriolan-midi.ly"
 }
 
index f8a5b7669abb3a0aa3bec9d3ce5eaff91c464fa4..5a778108a910733c439191248220eb394093599b 100644 (file)
@@ -5,8 +5,6 @@ description =    "";
 composer =      "Ludwig van Beethoven (1770-1827)";
 enteredby =     "JCN";
 copyright =     "public domain";
-
-
 }
 
 \version "1.3.59";
@@ -14,18 +12,13 @@ copyright =  "public domain";
 \include "trombo-1.ly"
 \include "trombo-2.ly"
 
-$trombe_staff = \context Staff = trombe <
+trombeStaff = \context Staff = trombe <
        \property Staff.midiInstrument = #"trumpet"
        \property Staff.instrument = #"2 Trombe\n(C)"
        \property Staff.instr = #"Tbe.\n(C)"
-       %\notes \context Voice=trombe < 
-       \notes \context Staff=trombe < 
-%              \global
-               \time 4/4;
-               \context VoiceOne=tromboi
-                       \$trombo1
-               \context VoiceTwo=tromboii
-                       \$trombo2
-       >
+       \time 4/4;
+       \context Voice=one \partcombine Voice
+               \context Thread=one \tromboI
+               \context Thread=two \tromboII
 >
 
index dbb308534a12035bc02b4aaebd86c3f992968da0..eccad506292de01c66c2b2d732c011b352913238 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 \version "1.3.59";
 
-trombo1 = \notes \relative c {
+tromboI = \notes \relative c {
        R1*2 |
        c''4-.\ff r r2 |
        R1*3 |
@@ -24,8 +24,8 @@ trombo1 = \notes \relative c {
        R1*6 |
        r4 c-.\f r2 |
        R1*2 |
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r2 c4\p\< r |
        r2 c4 r |
        r2 c4 r |
@@ -116,8 +116,8 @@ trombo1 = \notes \relative c {
        c4 r r2|
        R1*18|
        e1\f(|
-       \property VoiceOne.crescendoText = "cresc."
-       \property VoiceOne.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        )c\p\< ~|
        c~|
        c~|
@@ -149,8 +149,8 @@ trombo1 = \notes \relative c {
        R1|
        c4-. c-. r2|
        c4-. c-. r2|
-       \property VoiceOne.decrescendoText = "dim."
-       \property VoiceOne.decrescendoSpanner = "dashed-line"
+       \property Voice.decrescendoText = "dim."
+       \property Voice.decrescendoSpanner = "dashed-line"
        c4\> r g r|
        R1|
        \!g4\p r r2|
index 2d4396247e646a778eccd17b04cfa19dd42216e3..057d8fa85c567b0eb8c252561e8a43e2037674c6 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 \version "1.3.59";
 
-trombo2 = \notes \relative c {
+tromboII = \notes \relative c {
        R1*2 |
        c'4-.\ff r r2 |
        R1*3 |
@@ -24,8 +24,8 @@ trombo2 = \notes \relative c {
        R1*6 |
        r4 c-.\f r2 |
        R1*2 |
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        r2 c4\p\< r |
        r2 c4 r |
        r2 c4 r |
@@ -116,8 +116,8 @@ trombo2 = \notes \relative c {
        c4 r r2|
        R1*18|
        c1\f~|
-       \property VoiceTwo.crescendoText = "cresc."
-       \property VoiceTwo.crescendoSpanner = "dashed-line"
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
        c\p\< ~|
        c~|
        c~|
@@ -149,8 +149,8 @@ trombo2 = \notes \relative c {
        R1|
        c,4-. c-. r2|
        c4-. c-. r2|
-       \property VoiceTwo.decrescendoText = "dim."
-       \property VoiceTwo.decrescendoSpanner = "dashed-line"
+       \property Voice.decrescendoText = "dim."
+       \property Voice.decrescendoSpanner = "dashed-line"
        c4\> r g r|
        R1|
        \!g4\p r r2|
index 7ab497ebaeed096b570d071763c257af499d8acb..3649bdd732b9aed3f8fe7579a25f53d97f4e8560 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 \version "1.3.59";
 
-viola1 = \notes \relative c {
+violaI = \notes \relative c {
        c'1\ff ~ |
        c |
        f,4-. r r2 |
@@ -93,9 +93,9 @@ viola1 = \notes \relative c {
        %60
        )es4 r r r8 es(|
        )as4 r r r8 as |
-       bes2:16 as: |
+       \!bes2:16\ff as: |
        g: e: |
-       \!f4\p r r r8 f(|
+       f4\p r r r8 f(|
        %65
        )bes4 r r r8 bes(|
        )as4 r r r8 as(|
@@ -263,7 +263,7 @@ viola1 = \notes \relative c {
        )b  r r2 |
        R1
        % ugh, should be quoted and transposed
-       c4\p r r r8 c8(|
+       c,4\p r r r8 c8(|
        )f4 r r r8 f8(|
        %180
        )e4 r r r8 e8(|
@@ -278,11 +278,11 @@ viola1 = \notes \relative c {
        )b'4 r r r8 b8(|
        )c4 r r r8 c,8(|
        )f4 r r r8 f8|
-       \!g2:16\ff f: |
+       \!g'2:16\ff f: |
        e: cis: |
        %190
-       c,4\p r r r8 c8(|
-       )g'4 r r r8 g8(|
+       d,4\p r r r8 d8(|
+       )g4 r r r8 g8(|
        )f4 r r r8 f8(|
        \property Voice.crescendoText = "cresc."
        \property Voice.crescendoSpanner = "dashed-line"
@@ -290,7 +290,6 @@ viola1 = \notes \relative c {
        )d4 r r r8 d8(|
        %195
        )g4 r r r8 g8|
-       % check
        [\!a16\ff a' a a]a4: a2: |
        fis: dis: |
        
@@ -318,7 +317,7 @@ viola1 = \notes \relative c {
        g'2: g: |
        
        %214
-       bes,2:16\ff bes4: c: |
+       b,2:16\ff b4: c: |
        g'2: g: |
        
        e2:16\ff e4: f: |
@@ -328,13 +327,12 @@ viola1 = \notes \relative c {
        b,: c: b: c: |
        
        %220
-       r4 r8 as as2|
-       r4 r8 as as2|
-       r4 r8 as as2|
-       r4 r8 as as2|
-       [des'16 des f f]des4: [b16 b d d]b4: |
+       r4 r8 as as2\sf|
+       r4 r8 as as2\sf|
+       r4 r8 as as2\sf|
+       r4 r8 as as2\sf|
+       [des16 des f f]des4: [b16 b d d]b4: |
        %225
-       % check
        [bes16 bes c c]bes4: [a16 a c c]a4: |
        [f16 f b b]f4: [as16 as c c]as4: |
        [as16 as d d]as4: [as16 as c c]as4: |
@@ -355,17 +353,15 @@ viola1 = \notes \relative c {
        \property Voice.crescendoText = "cresc."
        \property Voice.crescendoSpanner = "dashed-line"
        c'4\p\< r r r8 c8(|
-       % check slur and oct
-       )f4 r r r8 f8 |
-       % f,8 (|
-       es1 |
+       )f4 r r r8 f,8(|
+       )es1 |
        
        %255
        \!ges\f |
        f\p |
        as\f |
        g\p
-       e2:16\f e: |
+       e'2:16\f e: |
        
        %260
        \property Voice.crescendoText = "cresc."
@@ -419,19 +415,17 @@ viola1 = \notes \relative c {
        c4 r r2 |
 }
 
-% urg
-\include "viola-2.ly";
-
-
-% $viola1_staff = \context Staff = viola1 <
-$viola1_staff = \context Staff = violai <
-       \property Staff.midiInstrument = #"viola"
-       \property Staff.instrument = #"Viola"
-       \property Staff.instr = #"Vla."
-       \clef "alto";
-       \notes \context Voice=one < 
-               \global
-               \$viola1
-       >
->
+%%% urg
+%%%\include "viola-2.ly";
+%%%
+%%%violaIStaff = \context Staff = violai <
+%%%    \property Staff.midiInstrument = #"viola"
+%%%    \property Staff.instrument = #"Viola"
+%%%    \property Staff.instr = #"Vla."
+%%%    \clef "alto";
+%%%    \notes \context Voice=one < 
+%%%            \global
+%%%            \violaI
+%%%    >
+%%%>
 
index 34c94b537ff4fd34af59521b9587d559b473e997..05b75c0f8ea47a39b4d5d32cf9a68653015195b1 100644 (file)
@@ -9,50 +9,408 @@ copyright =   "public domain";
 
 \version "1.3.59";
 
-viola2 = \notes \relative c {
-       % starts on (actualy, most part is on) same staff as viola1
-       %urg, parse error
-%urg   \translator Staff=viola1
-       \context Thread
-       \translator Staff=violai
-       \translator Voice=one
-       c1 ~ |
+violaII = \notes \relative c {
+       c1\ff ~ |
        c |
-       s1*2 |
+       f4-. r r2 |
+       r1 |
        % copied 3 bars from three back...
-       c ~ |
+       %5
+       c1 ~ |
        c |
-       s1*2 % |
-%      \translator Staff=viola
-       c ~ |
+       f4-. r r2 |
+       r1 |
+       c1 ~ |
        c |
-       s1*2 | 
-       g'4-. r r2 |
+       fis4-. r r2 |
+       r1 |
        g4-. r r2 |
+       g4-. r r2 |
+       % copied from violino-1...
        %15
-       s1*14
-       % same as viola-1, octave lower
+       [c,8-.\p es-.] [es()d] [d-. g-.] g4-"ten." |
+       [c,8-. es-.] [es()d] [d-. g-.] g4-"ten." |
+       [c,8-. es-.] [es()d] [d-. as'-.] [as()g] |
+       [g8-. c-.] [c()b] [b-. f'-.] [f()es] |
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       es4.\< es8 d4. d8 |
+       %20
+       c4. c8 \!b4\f r4 |
+       R1 |
+       r4 [des,8\p()c][c-. f-.]f4-"ten." |
+       r4 [des8\p()c][c-. f-.]f4-"ten." |
+       r4 [des8\p()c][c-. ges'-.][ges()f] |
+       %25
+       [f-. bes-.][bes()a][a-. es'-.][es()des] |
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       des4.\< des8 c4. c8 |
+       bes4 \!bes4-.\f r2 |
+       R1
+       % same rhythm as violins...
        r8 c,-.\p c4. c8-. c4~ |
        \property Voice.crescendoText = "cresc."
        \property Voice.crescendoSpanner = "dashed-line"
        [c8\< c-.]c2.~ |
+       %30
        [c8 c-.]c2.~ |
        [c8 c-.] c4. c8-. c4~ |
-       [c8 c8-.] c4. c8-. c4 |
+       [c8 c-.] c4. c8-. c4 |
+       [\!as'16\ff as as as][as as as as]as2:16 |
        %35
-       [\!as'16\ff as a as][as as as as]as2:16 |
+       [f16 f f f][g g g g][f f f f][es es es es] |
+       f2:16 es: |
+       f: es: |
+       g: as: |
+       bes: c: |
+       %40
+       c,2\sf [c8-. es-.][es()d] |
+       c2\sf [c8-. es-.][es()d] |
+       b'2\f r8 [d,-. d()c] |
+       b'2\f r8 [d,-. d()c] |
+       b'2\f r8 [des,-. des()c] |
+       %45
+       a'2\sf [a8-. c-.][c()bes] |
+       r4 [a8-. c-.][c()bes] r4 |
+       r4 [a8-. c-.][c()bes] r4 |
+       r4 [a8-. c-.][c()bes] r4 |
+       r4 [a8-. c-.][c()bes][bes()a] |
+       %50
+       bes4 r r2 |
+       R1 |
+       es,4\p r r r8 es(|
+       )as4 r r r8 as (|
+       )g4 r r r8 g(|
+       %55
+       )d4 r r r8 d(|
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       )es4 r\< r  r8 es(|
+       )as4 r r r8 as(|
+       )g4 r r r8 g(|
+       )d4 r r r8 d(|
+       %60
+       )es4 r r r8 es(|
+       )as4 r r r8 as |
+       \!g2:16\ff f: |
+       e: c: |
+       f4\p r r r8 f(|
+       %65
+       )bes4 r r r8 bes(|
+       )as4 r r r8 as(|
+       )e4 r r r8 e(|
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       )f4\< r r r8 f(|
+       )bes4 r r r8 bes |
+       %70
+       \!as2:\ff g: |
+       fis: d: |
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       g4\p\< r r r8 g(|
+       )c,4 r r r8 c |
+       [\!f8\sf(\>as f as][f g d)\!g] |
+       %75
+       r [c\p(g)c] r [bes(g)bes] |
+       r [g(es)g] r [g(d)g] |
+       r [g(es)g] r [g(e)g] |
+       [d-.\pp d'-.] es4. es8-. d4 ~ |
+       [d8 d-.] es4. es8-. d4 ~ |
+       %80
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       [d8\< d-.] es4. es8-. d4 ~ |
+       [d8 d-.] es4. es8-. d4 ~ |
+       [d8 d-.] es4. es8-. d4 ~ |
+       [d8 d-.] es4. es8-. d4 (|
+       \!)fis,2:\ff fis4: g: |
+       %85
+       d2: d: |
+       fis: fis4: g: |
+       c,: d: c: d: |
+       b2: b4: c: |
+       f': es: f: es: |
+       %90
+       b2: b4: c: |
+       d: c: d: c: |
+       c,4 r8 c' c4\sf()des |
+       r r8 c c4\sf()des |
+       
+       r r8 c c4\sf()des |
+       
+       r r8 c c4\sf()des |
+       
+       [c16 es es es]es4:[es16 fis fis fis]fis4: |
+       [b,16 d d d]d4:[bes16 e e e]e4: |
+       [as,16 c c c ]c4:[g16 c c c]c4: |
+       [a16 c c c]c4:[g16 c c c]c4: |
+       %100
+       [c8 d,]d4. es8-. es4 ~ |
+       [es8 c-.]c4. d8-. d4 |
+       % shared with cello from here on;
+       % except for some abbrevs below...
+       [g8\p bes cis d][es d bes g]|
+       [fis a cis d][es d a fis\f] |
+       [g bes cis\p d][es d bes g]
+       %105
+       [fis a cis d][es d a fis\f] |
+       [g bes cis\p d][f, a cis d] |
+       [es, g b c][d, g a bes] |
+       [c, es g a]r[d, fis g] |
+       r[c, es g][d fis a d] |
+       %110
+       % cello has eighth notes here...
+       [g,16 g bes bes][d d es es][f, f a a][cis cis d d] |
+       [es,8: g: b: c!:][d,: f: a: bes:] |
+       [c,: es: g: a:][cis,: e: g: bes:] |
+       [d,: g: bes: d:][d,: fis: a: d:] |
+       g,2: g:
+       %115
+       |
+       g: g: |
+       g: g: |
+       g: g: |
+       % urg, 2 copied from 102
+       [g8\p bes cis d][es d bes g]|
+       [fis a cis d][es d a fis] |
+       %120
+       [g bes c des][c des bes g]|
+       [f as c des][c des as f]|
+       [e g b c][b c g e]|
+       [f as b c][b c as f]|
+       [e g b c][b c g e]|
+       %125
+       [c e fis g][fis g e c]|
+       [f as b c][des c as f]|
+       [e g b c][des c g e]|
+       [f as c des][c des as f]|
+       [g bes d es][d es bes g]|
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       [as\< c d es][f es c as]|
+       %131
+       [g bes d es][f es bes g]|
+       % shared with cellos until here
+       % shared with violino-2 from here on
+       [as as c es][f es c as]|
+       [a c es f][ges f c a]|
+       [bes des f ges][as ges des bes]|
+       %135
+       [c es g as][bes as es c]|
+       [\!des\p f a bes][c, es g as]|
+       [bes, des f ges][as, c e f]|
+       [ges, bes d es][f, as c des]|
+       [es, ges bes des][as c es as,]|
+       %140
+       % shared with cello from here on;
+       % except cello has eighth notes
+       [des,16\f des f f][a a bes bes][c, c es es][g g as as]|
+       [bes8: des: f: ges:][as,: c: e: f:]|
+       [g,: bes: c: des:][f,: bes: c: des:]|
+       [e,: g: bes: des:][c,: e: g: c:]|
+       %shared with cello from here on
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       [f,8\p\< as c des][es, g b c]|
+       [des, f a bes][c, es g as]|
+       % uhuh, still 'same as cello';
+       % but now rests for notes that viola cannot reach...
+       %145
+       r[des, e g]r[c, e f]|
+       % hmm, don't want to miss more than one note,
+       % take bes octave higher
+       r[bes des, f][c e g c]|
+       % cello has eight notes;
+       % viola has rest where can't reach      
+       [\!f,:\ff as: c: des:][es,: g: b: c:]|
+       [des,: f: a: bes:][c,: es: g: as:]|
+       %150
+       r[des,16 des][e e g g]r8[c,16 c][e e f f]|
+       r8[des16 des][f f g g][c, c e e][g g c c]|
+       f,1\ff ~ |
+       f |
+       bes4 r r2
+       %155
+       R1
+       f1 ~ |
+       f |
+       b2\sf [f8-. as-.][as()g] |
+       
+       b2\sf [f8-. as-.][as()g] |
+       % ugh, should be quoted and transposed...
+       %160
+       [f8-.\p as-.][as()f][g-. c-.][c()b] |
+       R1*2 |
+       
+       e,2\ff [es8-. g-.][g()f] |
+       e2\sf [es8-. g-.][g()f] |
+       %165
+       [e-.\p bes'-.][bes()as][g-. des'-.][des()c] |
+       R1*2 |
+       r4 [e,8-.\ff g-.][g()f] r4 |
+       r4 [e8-. g-.][g()f] r4 |
+       %170
+       r4 [e8-. g-.][g()f] r4 |
+       r4 [e8-. g-.][g()f][fis-.fis-.] |
+       
+       g4 [fis8-.as-.][as()g] r4 |
+       r4 [fis8-.as-.][as()g] r4 |
+       r4 [fis8-.as-.][as()g] r4 |
+       %175
+       r4 [fis8-.as-.][as()g] c4\sf(|
+       )b  r r2 |
+       R1
+       % ugh, should be quoted and transposed
+       c,4\p r r r8 c8(|
+       )f4 r r r8 f8(|
+       %180
+       )e4 r r r8 e8(|
+       )b'4 r r r8 b8(|
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       )c4 r\< r r8 c,8(|
+       % copied
+       )f4 r r r8 f8(|
+       )e4 r r r8 e8(|
+       %185
+       )b'4 r r r8 b8(|
+       )c4 r r r8 c,8(|
+       )f4 r r r8 f8|
+       \!e'2:16\ff d: |
+       cis: a: |
+       %190
+       d,4\p r r r8 d8(|
+       )g4 r r r8 g8(|
+       )f4 r r r8 f8(|
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       )cis4\< r r r8 cis8(|
+       )d4 r r r8 d8(|
+       %195
+       )g4 r r r8 g8|
+       [\!f16\ff f' f f]f4: f2: |
+       dis: b: |
+       
+       e,4\p r r r8 e8(|
+       )a4\< r r r8 a8(|
+       %200
+       [)g(g e g][e g e)g] |
+       % quote and transpose
+       [f(g f g][f g f)\!g] |
+       [c\f\>(g c,)g']r[bes(g)\!bes] |
+       r[as\p(f)as]r[g(es)g] |
+       r[f(c)f]r[g(es)g] |
+       %205
+       r[as\p(d,)as']r[a(es)a] |
+       [g-. g'-.] as4. as8-. g4 ~ |
+       [g8 g-.] as4. as8-. g4 ~ |
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       [g8 g-.\<] as4. as8-. g4 ~ |
+       [g8 g-.] as4. as8-. g4 ~ |
+       %210
+       [g8 g-.] as4. as8-. g4 ~ |
+       [g8 g-.] as4. as8-. g4 (|
+       \!)b,2:16\ff b4: c: |
+       g'2: g: |
+       
+       %214
+       b,2:16\ff b4: c: |
+       g'2: g: |
+       
+       bes,2:16\ff bes4: as: |
+       g: f: g: f: |
+       
+       bes2:16\ff bes4: as: |
+       g: f: g: f: |
+       
+       %220
+       r4 r8 f f4\sf()ges|
+       r4 r8 f f4\sf()ges|
+       r4 r8 f f4\sf()ges|
+       r4 r8 f f4\sf()ges|
+       [des'16 des f f]des4: [b16 b d d]b4: |
+       %225
+       [bes16 bes c c]bes4: [a16 a c c]a4: |
+       [f16 f b b]f4: [as16 as c c]as4: |
+       [as16 as d d]as4: [as16 as c c]as4: |
+       [g8 g]g4. as8 as4 ~ |
+       [as8 as]f4. f8 g4 |
+       %230
+       c\p r r2 |
+       r r4 r8 b\f |
+       c4 r r2 |
+       r r4 r8 b\f |
+       c4 r r2 |
+       R1*3 |
+       [c,16c es es][g g as as][bes bes d d][fis fis g g] |
+       [as, as c c][e e f f][g, g bes bes][d d es es] |
+       %240
+       f,4 r r2 |
+       R1*11 |
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       c'4\p\< r r r8 c8(|
+       )f4 r r r8 f,8(|
+       )es1|
+       
+       %255
+       \!ges\f |
+       f\p |
+       as\f |
+       g\p
+       bes2:16\f bes: |
+       
+       %260
+       \property Voice.crescendoText = "cresc."
+       \property Voice.crescendoSpanner = "dashed-line"
+       [as8\p\< f']f4. es8 es4 ~ |
+       [es8 as]as4. g8 g4 ~ |
+       [g8 f]f4. es8 es4 ~ |
+       [es8 as]as4. g8 g4 |
+       r r8 \!d\ff es4.\sf()d8 |
+       %265
+       r4 r8 d es4.\sf()d8 |
+       r4 r8 e f4.\sf()e8 |
+       r4 r8 e f4.\sf()e8 |
+       r4 r8 e g4.\sf()f8 |
+       r4 r8 f as4.\sf()g8 |
+       %270
+       g2:16-"sempre" g:\ff |
+       g: g: |
+       g: g: |
+       g: g: |
+       [g8 b, c g][c b c g] |
+       %275
+       [c b c g][c b c g] |
+       c,1 ~ |
+       c |
+       f4-. r r2 |
+       R1 |
+       c1 ~ |
+       c |
+       f4-. r r2 |
+       R1 |
+       c1 ~ |
+       c |
+       fis4-. f-. r2 |
+       R1 |
+       es4-. e-. r2 |
+       f4-. g-. r2 |
+       %290
+       \property Voice.decrescendoText = "dim."
+       \property Voice.decrescendoSpanner = "dashed-line"
+       as4\> r g r |
+       R1 |
+       \!c4\p r r2 |
+       R1 |
+       g4-"pizz." r r2 |
+       R1 |
+       c,4 r r2 |
+       R1*15 |
+       c4\pp r r2 |
+       c4 r r2 |
+       c4 r r2 |
 }
-
-% $viola2_staff = \context Staff = viola_2 <
-$viola2_staff = \context Staff = violaii <
-       \property Staff.midiInstrument = #"viola"
-       \property Staff.instrument = #"Viola II"
-       \property Staff.instr = #"Vla. II"
-       \clef "alto";
-       % notes must go to Staff context: we want to switch Staff translators
-       %\notes \context Voice=one< 
-               \global
-               \$viola2
-       %>
->
-
diff --git a/mutopia/Coriolan/violi-part.ly b/mutopia/Coriolan/violi-part.ly
new file mode 100644 (file)
index 0000000..ae9ac83
--- /dev/null
@@ -0,0 +1,38 @@
+\header{
+filename =      "violi-part.ly";
+% %title =      "Ouvert\\"ure zu Collins Trauerspiel \\"Coriolan\\" Opus 62";
+description =   "";
+composer =      "Ludwig van Beethoven (1770-1827)";
+enteredby =     "JCN";
+copyright =     "public domain";
+}
+
+\version "1.3.59";
+
+\include "global.ly"
+\include "viola-1.ly"
+\include "viola-2.ly"
+
+violiGroup = \context PianoStaff = violi_group <
+       \context StaffCombineStaff=one {
+               \clef "alto"; 
+               \skip 1*314; 
+               \bar "|."; 
+       }
+       \context StaffCombineStaff=two {
+               \clef "alto"; 
+               \skip 1*314; 
+               \bar "|."; 
+       }
+
+       \context StaffCombineStaff=one \partcombine StaffCombineStaff
+               \context StaffCombineThread=one \violaI
+               \context StaffCombineThread=two \violaII
+>
+
+\score{
+       \violiGroup
+       \include "coriolan-part-combine-paper.ly"
+       \include "coriolan-midi.ly"
+}
+
index 1782486f727f2a598131babc9bcf324c6fc83bbc..a43139f21746b42ed03681259506ec9af7b52c91 100644 (file)
@@ -13,7 +13,7 @@ copyright =    "public domain";
 \include "violino-1.ly"
 
 \score{
-       \$violino1_staff 
+       \violinoIStaff 
        \include "coriolan-part-paper.ly"
        \include "coriolan-midi.ly"
 }
index 76cc3ff3ba7b12891d85351abe9cdc2c8cc1df34..43ee469fb6569bd31e9851d792c0a61ca37ed6da 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 \version "1.3.59";
 
-violino1 = \notes \relative c {
+violinoI = \notes \relative c {
        c'1\ff ~ |
        c |
        <f4-. c'-. as'-.> r r2 |
@@ -452,13 +452,13 @@ violino1 = \notes \relative c {
        c4 r r2 |
 }
 
-$violino1_staff = \context Staff = violino1 <
+violinoIStaff = \context Staff = violino1 <
        \property Staff.midiInstrument = #"violin"
        \property Staff.instrument = #"Violino I"
        \property Staff.instr = #"Vl. I"
        \notes< 
                \global
                \context Voice=violinoi
-                       \$violino1
+                       \violinoI
        >
 >
index 1805dd62ec8a6c4c780de39772a81dc483c1c473..9431b99d1fa471e7e7cc4acf42cacf768578835c 100644 (file)
@@ -13,7 +13,7 @@ copyright =    "public domain";
 \include "violino-2.ly"
 
 \score{
-       \$violino2_staff 
+       \violinoIIStaff 
        \include "coriolan-part-paper.ly"
        \include "coriolan-midi.ly"
 }
index a73e30da1aa5ac2c83d1cd8648d0e2a4c36906a7..2db6348856de6498ac7bcf239fd9c024d98a491f 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 \version "1.3.59";
 
-violino2 = \notes \relative c {
+violinoII = \notes \relative c {
        c'1\ff ~ |
        c |
        <f4-. c'-. as'-.> r r2 |
@@ -448,7 +448,7 @@ violino2 = \notes \relative c {
        c4 r r2 |
 }
 
-$violino2_staff = \context Staff = violino2 <
+violinoIIStaff = \context Staff = violino2 <
        % MIDI hoort geeneens verschil tussen een
        % eerste en tweede viool ;-)
        \property Staff.midiInstrument = #"violin"
@@ -457,6 +457,6 @@ $violino2_staff = \context Staff = violino2 <
        \notes< 
                \global
                \context Voice=violinoii
-                       \$violino2
+                       \violinoII
        >
 >
index 8d20f1198c227990f7cbd6c631ebb4917ae1e666..3e5a3bcfc7d240e10482718a7c9a9b2e6cfa9998 100644 (file)
@@ -5,8 +5,6 @@ description =    "";
 composer =      "Ludwig van Beethoven (1770-1827)";
 enteredby =     "JCN";
 copyright =     "public domain";
-
-
 }
 
 \version "1.3.59";
@@ -484,14 +482,14 @@ violoncello = \notes \relative c {
        c4 r r2 |
 }
 
-$violoncello_staff = \context Staff = violoncello <
-       \property Staff.midiInstrument = #"cello"
-       \property Staff.instrument = #"Violoncello\ne\nContrabasso"
-       \property Staff.instr = #"Vc."
-       \clef "bass";
-       \notes \context Voice=one< 
-               \global
-               \$violoncello
-       >
->
+%%%violoncelloStaff = \context Staff = violoncello <
+%%%    \property Staff.midiInstrument = #"cello"
+%%%    \property Staff.instrument = #"Violoncello\ne\nContrabasso"
+%%%    \property Staff.instr = #"Vc."
+%%%    \clef "bass";
+%%%    \notes \context Voice=one< 
+%%%            \global
+%%%            \violoncello
+%%%    >
+%%%>
 
index dadeb3056c564716d33a23292f400f361f775d05..476d3cc233a9a159bf726215b6c1a7d33899a318 100644 (file)
 
    ;; (cons (lambda (slur dir) (begin (display "before head") (newline))#f) #f)
 
+   ;; urg: don't crash on a slur without note-columns
+   (cons (lambda (slur dir)
+          (< (length (ly-get-elt-property slur 'note-columns)) 1)) 'head)
+
+   ;; urg: don't crash on a slur without note-columns
+   (cons (lambda (slur dir)
+          (< (length (ly-get-elt-property slur 'note-columns)) 1)) 'head)
+
    (cons (lambda (slur dir)
           ;; urg, code dup
           (let* ((note-columns (ly-get-elt-property slur 'note-columns))
@@ -83,4 +91,9 @@
 
     ((stem 1 1) . (0 . 0.5))
     ((stem -1 -1) . (0 . -0.5))
+
+    ((loose-end -1 1) . (-4 . 0))
+    ((loose-end -1 -1) . (-4 . 0))
+    ((loose-end 1 1) . (-0.4 . 0))
+    ((loose-end 1 -1) . (-0.4 . 0))
     ))