]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.126
authorfred <fred>
Wed, 27 Mar 2002 00:48:30 +0000 (00:48 +0000)
committerfred <fred>
Wed, 27 Mar 2002 00:48:30 +0000 (00:48 +0000)
114 files changed:
Documentation/regression-test.tely
input/GNUmakefile
input/features/GNUmakefile [new file with mode: 0644]
input/features/beam-count.ly [new file with mode: 0644]
input/features/beam-dir-function.ly [new file with mode: 0644]
input/features/beam-neutral-direction.ly [new file with mode: 0644]
input/features/beam-position.ly [new file with mode: 0644]
input/features/beam-rest.ly [new file with mode: 0644]
input/features/beam-slope.ly [new file with mode: 0644]
input/features/crescendo-text.ly [new file with mode: 0644]
input/features/embedded-postscript.ly [new file with mode: 0644]
input/features/embedded-tex.ly [new file with mode: 0644]
input/features/follow-thread.ly [new file with mode: 0644]
input/features/fragment.ly [new file with mode: 0644]
input/features/metronome.ly [new file with mode: 0644]
input/features/move-notehead.ly [new file with mode: 0644]
input/features/move-specific-text.ly [new file with mode: 0644]
input/features/no-bar-lines.ly [new file with mode: 0644]
input/features/no-staff.ly [new file with mode: 0644]
input/features/ophee-slurs.ly [new file with mode: 0644]
input/features/ottava.ly [new file with mode: 0644]
input/features/part-combine.ly [new file with mode: 0644]
input/features/reverse-music.ly [new file with mode: 0644]
input/features/slur-attachment-override.ly [new file with mode: 0644]
input/features/slur-attachment.ly [new file with mode: 0644]
input/features/slur-ugly.ly [new file with mode: 0644]
input/features/smart-transpose.ly [new file with mode: 0644]
input/regression/GNUmakefile [new file with mode: 0644]
input/regression/accidental-single-double.ly [new file with mode: 0644]
input/regression/accidental.ly [new file with mode: 0644]
input/regression/arpeggio.ly [new file with mode: 0644]
input/regression/auto-beam-bar.ly [new file with mode: 0644]
input/regression/auto-change.ly [new file with mode: 0644]
input/regression/auto-isknee.ly [new file with mode: 0644]
input/regression/auto-knee.ly [new file with mode: 0644]
input/regression/bar-number.ly [new file with mode: 0644]
input/regression/bar-scripts.ly [new file with mode: 0644]
input/regression/beam-cross-staff.ly [new file with mode: 0644]
input/regression/beam-extreme.ly [new file with mode: 0644]
input/regression/beam-length.ly [new file with mode: 0644]
input/regression/beam-position.ly [new file with mode: 0644]
input/regression/beaming.ly [new file with mode: 0644]
input/regression/between-systems.ly [new file with mode: 0644]
input/regression/break.ly [new file with mode: 0644]
input/regression/breathing-sign.ly [new file with mode: 0644]
input/regression/chord-names.ly [new file with mode: 0644]
input/regression/chord-tremolo.ly [new file with mode: 0644]
input/regression/clefs.ly [new file with mode: 0644]
input/regression/collisions.ly [new file with mode: 0644]
input/regression/dots.ly [new file with mode: 0644]
input/regression/dyn-line.ly [new file with mode: 0644]
input/regression/generic-output-property.ly [new file with mode: 0644]
input/regression/generic-property-override.ly [new file with mode: 0644]
input/regression/glissando.ly [new file with mode: 0644]
input/regression/grace.ly [new file with mode: 0644]
input/regression/hara-kiri-short.ly [new file with mode: 0644]
input/regression/keys.ly [new file with mode: 0644]
input/regression/lyric-combine.ly [new file with mode: 0644]
input/regression/lyrics-bar.ly [new file with mode: 0644]
input/regression/lyrics-multi-stanza.ly [new file with mode: 0644]
input/regression/mm-rests2.ly [new file with mode: 0644]
input/regression/molecule-hacking.ly [new file with mode: 0644]
input/regression/multi-measure-rest.ly [new file with mode: 0644]
input/regression/non-empty-text.ly [new file with mode: 0644]
input/regression/noteheadstyle.ly [new file with mode: 0644]
input/regression/number-staff-lines.ly [new file with mode: 0644]
input/regression/repeat-fold.ly [new file with mode: 0644]
input/regression/repeat-line-break.ly [new file with mode: 0644]
input/regression/repeat-unfold.ly [new file with mode: 0644]
input/regression/repeat-volta.ly [new file with mode: 0644]
input/regression/rest-collision.ly [new file with mode: 0644]
input/regression/rest.ly [new file with mode: 0644]
input/regression/size11.ly [new file with mode: 0644]
input/regression/size13.ly [new file with mode: 0644]
input/regression/size16.ly [new file with mode: 0644]
input/regression/size20.ly [new file with mode: 0644]
input/regression/size23.ly [new file with mode: 0644]
input/regression/size26.ly [new file with mode: 0644]
input/regression/slur-attachment.ly [new file with mode: 0644]
input/regression/slur-broken-trend.ly [new file with mode: 0644]
input/regression/slur-cross-staff.ly [new file with mode: 0644]
input/regression/slur-nice.ly [new file with mode: 0644]
input/regression/slur-symmetry-1.ly [new file with mode: 0644]
input/regression/slur-symmetry.ly [new file with mode: 0644]
input/regression/spacing-loose.ly [new file with mode: 0644]
input/regression/spacing-natural.ly [new file with mode: 0644]
input/regression/spacing-tight.ly [new file with mode: 0644]
input/regression/staccato-pos.ly [new file with mode: 0644]
input/regression/staff-margin.ly [new file with mode: 0644]
input/regression/stem-direction-down.ly [new file with mode: 0644]
input/regression/stem-direction.ly [new file with mode: 0644]
input/regression/stem-spacing.ly [new file with mode: 0644]
input/regression/stem-tremolo.ly [new file with mode: 0644]
input/regression/tie-accidental.ly [new file with mode: 0644]
input/regression/tie-chord.ly [new file with mode: 0644]
input/regression/tie.ly [new file with mode: 0644]
input/regression/triplets.ly [new file with mode: 0644]
input/regression/tup.ly [new file with mode: 0644]
input/test/orchestscore.ly
lily/beam.cc
lily/stem.cc
lily/system-start-delimiter.cc
make/ly-rules.make
mutopia/Coriolan/coriolan-paper.ly
mutopia/Coriolan/coriolan-part-paper.ly
mutopia/J.S.Bach/Solo-Cello-Suites/courante-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/gigue-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/prelude-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-viola.ly
scm/grob-description.scm
scm/grob-property-description.scm
scripts/ly2dvi.py
scripts/pmx2ly.py

index 95d4f9b9ceb97096fa3a17e11884bb7b7053ec6c..f7fb0eb9d282908582186e365f7a7b04c44dcf76 100644 (file)
@@ -184,6 +184,8 @@ and documenting bugfixes.
 
 @lilypondfile[printfilename]{break.ly}
 
+@lilypondfile[printfilename]{bar-number.ly}
+
 @lilypondfile[printfilename]{bar-scripts.ly}
 
 @lilypondfile[printfilename]{staff-margin.ly}
index f9ab946b3a35e43f892b2674d18503a2d855c5d2..20cb71ba46499c89050ec525b783199499d06852 100644 (file)
@@ -2,7 +2,7 @@
 
 depth = ..
 
-SUBDIRS=test bugs tutorial
+SUBDIRS=bugs features test regression tutorial
 
 examples=trip  star-spangled-banner paddy scarlatti-test
 flexamples=
diff --git a/input/features/GNUmakefile b/input/features/GNUmakefile
new file mode 100644 (file)
index 0000000..5587717
--- /dev/null
@@ -0,0 +1,6 @@
+depth = ../..
+
+LOCALSTEPMAKE_TEMPLATES=mutopia
+include $(depth)/make/stepmake.make 
+
+
diff --git a/input/features/beam-count.ly b/input/features/beam-count.ly
new file mode 100644 (file)
index 0000000..89167f1
--- /dev/null
@@ -0,0 +1,20 @@
+
+fragment = \notes {
+  f'32 g a b b a g f
+
+  \property Voice.autoBeamSettings
+    \set #'(end * * * *) = #(make-moment 1 4)
+  f32 g a b b a g f
+
+  f32 g a
+  \property Voice.stemRightBeamCount = #1 b
+  \property Voice.stemLeftBeamCount = #1 b
+  a g f
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/beam-dir-function.ly b/input/features/beam-dir-function.ly
new file mode 100644 (file)
index 0000000..d445468
--- /dev/null
@@ -0,0 +1,40 @@
+\header{
+texidoc="
+There are several ways to calculate the direction of a beam
+
+@table @samp
+@item majority
+number count of up or down notes
+@item mean
+mean centre distance of all notes
+@item median
+mean centre distance weighted per note
+@end table
+
+We should see:
+
+  up down down
+
+  up up down
+";
+}
+
+\score {
+  \notes \relative c'' {
+    % the default
+    %\property Voice.Beam \set #'dir-function = #beam-dir-majority
+    [d8 a]
+    \property Voice.Beam \set #'dir-function = #beam-dir-mean
+    [d a] 
+    \property Voice.Beam \set #'dir-function = #beam-dir-median
+    [d a]
+    
+    \property Voice.Beam \set #'dir-function = #beam-dir-majority
+    \time 3/8;
+    [d8 a a]
+    \property Voice.Beam \set #'dir-function = #beam-dir-mean
+    [d a a] 
+    \property Voice.Beam \set #'dir-function = #beam-dir-median
+    [d a a] 
+  }
+}
diff --git a/input/features/beam-neutral-direction.ly b/input/features/beam-neutral-direction.ly
new file mode 100644 (file)
index 0000000..f8e1568
--- /dev/null
@@ -0,0 +1,13 @@
+
+fragment = \notes {
+  [b''8 b]
+  \property Voice.Beam \set #'default-neutral-direction = #-1
+  [b b]
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/beam-position.ly b/input/features/beam-position.ly
new file mode 100644 (file)
index 0000000..bf14a7f
--- /dev/null
@@ -0,0 +1,13 @@
+
+fragment = \notes {
+  \property Voice.Beam \set #'y-position-hs = #4
+  \property Voice.Beam \set #'height-hs = #-4
+  [c'8 c]
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/beam-rest.ly b/input/features/beam-rest.ly
new file mode 100644 (file)
index 0000000..736a847
--- /dev/null
@@ -0,0 +1,17 @@
+\header{
+texidoc="
+Beams over rests.
+";
+}
+
+\score{
+        \context Staff=one \notes\relative c''{
+         r4 [r8 g a]
+         [bes8 r16 f g a]
+         [bes8 r16 \property Voice.stemLeftBeamCount = #1 f g a]
+    }
+
+    \paper{
+        linewidth =-1;
+    }
+}
diff --git a/input/features/beam-slope.ly b/input/features/beam-slope.ly
new file mode 100644 (file)
index 0000000..254a5cb
--- /dev/null
@@ -0,0 +1,13 @@
+
+fragment = \notes {
+  \property Voice.Beam \set #'direction = #1
+  \property Voice.Beam \set #'height-hs = #0
+  [a''8 e' d c]
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/crescendo-text.ly b/input/features/crescendo-text.ly
new file mode 100644 (file)
index 0000000..b9b6edb
--- /dev/null
@@ -0,0 +1,15 @@
+
+fragment = \notes {
+  \context Voice {
+    \property Voice.crescendoText = "cresc."
+    \property Voice.crescendoSpanner = #'dashed-line
+    a''2\mf\< a a \!a
+  }
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/embedded-postscript.ly b/input/features/embedded-postscript.ly
new file mode 100644 (file)
index 0000000..9667149
--- /dev/null
@@ -0,0 +1,10 @@
+\score {
+  \notes \relative c'' {
+    a-#"\\embeddedps{3 4 moveto 5 3 rlineto stroke}"
+    -#"\\embeddedps{ [ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke}"
+    b-#"\\embeddedps{3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke}"
+    s2
+    a'1
+  }
+  \paper { linewidth = 70 * \staffspace; }
+}
diff --git a/input/features/embedded-tex.ly b/input/features/embedded-tex.ly
new file mode 100644 (file)
index 0000000..970e2fc
--- /dev/null
@@ -0,0 +1,11 @@
+
+fragment = \notes {
+  a''^"3 $\\times$ \\`a deux"
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/follow-thread.ly b/input/features/follow-thread.ly
new file mode 100644 (file)
index 0000000..bf37078
--- /dev/null
@@ -0,0 +1,26 @@
+\header{
+texidoc="
+Theads can be traced automagically when they switch staffs by setting
+property @code{followThread}.
+";
+}
+% followThread: connect note heads with line when thread switches staff 
+
+fragment = \notes {
+  \context PianoStaff <
+    \property PianoStaff.followThread = ##t
+    \context Staff \context Voice {
+      c'1
+      \translator Staff=two
+      b2 a
+    }
+    \context Staff=two {\clef bass; \skip 1*2;}
+  >
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/fragment.ly b/input/features/fragment.ly
new file mode 100644 (file)
index 0000000..8e37abe
--- /dev/null
@@ -0,0 +1,10 @@
+fragment = \notes {
+
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/metronome.ly b/input/features/metronome.ly
new file mode 100644 (file)
index 0000000..1b5bacf
--- /dev/null
@@ -0,0 +1,30 @@
+
+\version "1.3.117";
+
+% Test scm markup text and kerning
+
+% Warning
+%  
+% This is not a feature, it is a hack.  If you change anything,
+% it will probably break (that's because scm markup text is a
+% bit broken and needs fixing).  Chances are, it's already
+% broken by the time you read this.  Don't complain.
+%
+% FIXME: put in an item, and typeset by an engraver.
+
+#(define note '(rows (music "noteheads-2" ((kern . -0.1) "flags-stem"))))
+#(define eight-note `(rows ,note ((kern . -0.1) (music ((raise . 3.5) "flags-u3")))))
+#(define dotted-eight-note `(rows ,eight-note (music "dots-dot")))
+
+\score {
+  \notes\relative c'' {
+    a1^#`(rows ,dotted-eight-note " = 64")
+  }
+  \paper {
+    linewidth = -1.;
+    \translator{
+      \ScoreContext
+      TextScript \override #'font-shape = #'upright
+    }
+  }
+}
diff --git a/input/features/move-notehead.ly b/input/features/move-notehead.ly
new file mode 100644 (file)
index 0000000..20d6983
--- /dev/null
@@ -0,0 +1,13 @@
+
+fragment = \notes {
+    \outputproperty #(make-type-checker 'note-head-interface)
+      #'extra-offset = #'(2 . 3)
+    c''2 c
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/move-specific-text.ly b/input/features/move-specific-text.ly
new file mode 100644 (file)
index 0000000..08c909a
--- /dev/null
@@ -0,0 +1,12 @@
+#(define (make-text-checker text)
+   (lambda (grob) (equal? text (ly-get-elt-property grob 'text))))
+
+\score {
+  \notes\relative c''' {
+    \property Voice.Stem \set #'direction = #1
+    \outputproperty #(make-text-checker "m.d.")
+      #'extra-offset = #'(-3.5 . -4.5)
+    a^2^"m.d."
+  }
+  \paper { linewidth = -1.; }
+}
diff --git a/input/features/no-bar-lines.ly b/input/features/no-bar-lines.ly
new file mode 100644 (file)
index 0000000..6624407
--- /dev/null
@@ -0,0 +1,15 @@
+\score {
+  \notes \relative c'' {
+    a b c d
+    d c b a
+  }
+  \paper {
+    linewidth = -1.;
+    \translator {
+      \StaffContext
+      whichBar = #""
+      \remove "Time_signature_engraver";
+    }
+  }
+}
+
diff --git a/input/features/no-staff.ly b/input/features/no-staff.ly
new file mode 100644 (file)
index 0000000..05eba66
--- /dev/null
@@ -0,0 +1,13 @@
+\score {
+  \notes { c4 c4 c8 c8 }
+  \paper {
+    linewidth = -1.;
+    \translator {
+      \StaffContext
+      \remove Staff_symbol_engraver;
+      \consists Pitch_squash_engraver;
+      \remove Clef_engraver;
+    }
+  }
+}
+
diff --git a/input/features/ophee-slurs.ly b/input/features/ophee-slurs.ly
new file mode 100644 (file)
index 0000000..d32dd6c
--- /dev/null
@@ -0,0 +1,18 @@
+\header{
+texidoc="
+Slurs can be forced to always attach to note heads.
+";
+}
+
+fragment = \notes {
+  \property Voice.Slur \set #'direction = #1
+  \property Voice.Slur \set #'attachment = #'(head . head)
+  g''16()g()g()g()d'()d()d()d
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/ottava.ly b/input/features/ottava.ly
new file mode 100644 (file)
index 0000000..513946d
--- /dev/null
@@ -0,0 +1,16 @@
+
+fragment = \notes {
+  a'''' b c a
+  \property Voice.TextSpanner \set #'type = #'dotted-line
+  \property Voice.TextSpanner \set #'edge-height = #'(0 . 1.5)
+  \property Voice.TextSpanner \set #'edge-text = #'("8va " . "")
+  \property Staff.centralCPosition = #-13
+  a\spanrequest \start "text" b c a \spanrequest \stop "text"
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/part-combine.ly b/input/features/part-combine.ly
new file mode 100644 (file)
index 0000000..ec4262f
--- /dev/null
@@ -0,0 +1,37 @@
+\header{
+texidoc="
+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.
+";
+}
+
+\score{
+  \context Staff = flauti <
+    \time 4/4;
+    \context Voice=one \partcombine Voice
+    \context Thread=one \notes\relative c'' {
+      c4 d e f | b,4 d c d | r2 e4 f | c4 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'' {
+      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 Voice.soloADue = ##f a |
+    }
+  >
+  \paper{
+    linewidth = 80 * \staffspace;
+    \translator{
+      \ThreadContext
+      \consists Rest_engraver;
+    }
+    \translator{
+      \VoiceContext
+      \remove Rest_engraver;
+    }
+  }
+}
+
diff --git a/input/features/reverse-music.ly b/input/features/reverse-music.ly
new file mode 100644 (file)
index 0000000..0d9fe6a
--- /dev/null
@@ -0,0 +1,30 @@
+\header {
+texidoc="
+Simple customised music apply.
+";
+}
+
+music = \notes { c'4 d'4( e'4 f'4 }
+
+#(define (reverse-music music)
+  (let* ((elements (ly-get-mus-property music 'elements))
+         (reversed (reverse elements))
+         (span-dir (ly-get-mus-property music 'span-direction)))
+
+    (ly-set-mus-property music 'elements reversed)
+
+    (if (dir? span-dir)
+        (ly-set-mus-property music 'span-direction (- span-dir)))
+
+    (map reverse-music reversed)
+
+    music))
+
+\score {
+  \context Voice {
+    \music
+    \apply #reverse-music \music
+  }
+  \paper { linewidth = -1.; }
+}
+
diff --git a/input/features/slur-attachment-override.ly b/input/features/slur-attachment-override.ly
new file mode 100644 (file)
index 0000000..67e7435
--- /dev/null
@@ -0,0 +1,21 @@
+\header{
+texidoc="
+In some cases, you may want to set slur attachments by hand.
+";
+}
+
+
+fragment = \notes {
+  \property Voice.Stem \set #'direction = #1
+  \property Voice.Slur \set #'direction = #1
+  d'32( d'4 )d8..
+  \property Voice.Slur \set #'attachment = #'(stem . stem)
+  d,32( d'4 )d8..
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/slur-attachment.ly b/input/features/slur-attachment.ly
new file mode 100644 (file)
index 0000000..4182bb3
--- /dev/null
@@ -0,0 +1,17 @@
+
+fragment = \notes {
+  \property Voice.Slur \set #'direction = #1
+  \property Voice.Stem \set #'length = #5.5
+  g''8(g)g4
+  g4(g8)g
+  \property Voice.Slur \set #'attachment = #'(stem . stem)
+  g8(g)g4
+  g4(g8)g
+}
+
+\paper { linewidth = -1.; } 
+
+\score {
+  \notes\relative c \fragment
+  \paper { }  
+}
diff --git a/input/features/slur-ugly.ly b/input/features/slur-ugly.ly
new file mode 100644 (file)
index 0000000..7406ba2
--- /dev/null
@@ -0,0 +1,35 @@
+\header {
+texidoc="You can get ugly slurs, if you want.
+";
+}
+
+baseWalk = \notes \relative c {
+  d,8( a' d f a d f d a f d )a
+}
+
+\score {
+  \notes \context PianoStaff <
+    \time 6/4;
+    \context Staff=up { s1 * 6/4 }
+    \context Staff=down <
+      \clef bass;
+      \autochange Staff \context Voice \baseWalk
+    >
+  >
+  \paper {
+    linewidth = -1.;
+    \translator {
+      \VoiceContext
+      Slur \override #'beautiful = #5.0
+      Slur \override #'direction = #1
+      Stem \override #'direction = #-1
+      autoBeamSettings \override #'(end * * * *)
+        = #(make-moment 1 2)
+    }
+    \translator {
+      \PianoStaffContext
+      VerticalAlignment \override #'threshold = #'(5 . 5)
+    }
+  }
+}
+
diff --git a/input/features/smart-transpose.ly b/input/features/smart-transpose.ly
new file mode 100644 (file)
index 0000000..697c545
--- /dev/null
@@ -0,0 +1,90 @@
+\header {
+texidoc="
+@example
+    Here's a copy of my feature request :
+@quotation
+        Your task, if you accept it is to implement a \smarttranspose
+        command> that would translate such oddities into more natural
+        notations. Double accidentals should be removed, as well as #E
+        (-> F), bC (-> B), bF (-> E), #B (-> C).
+@end quotation
+
+You mean like this. (Sorry 'bout the nuked indentation.)
+@end example
+";
+}
+
+% Btw, I've leant an el-neato trick for formatting code in email messages,
+% using inderect buffers.
+%
+% M-x make-indirect-buffer RET RET foo RET C-x b foo RET
+% Select region and then narrow: C-x n n
+% Set mode, eg: M-x sch TAB RET
+%
+
+#(define  (unhair-pitch p)
+  (let* ((o (pitch-octave p))
+         (a (pitch-alteration p))
+         (n (pitch-notename p)))
+
+    (cond
+     ((and (> a 0) (or (eq? n 6) (eq? n 2)))
+      (set! a (- a 1)) (set! n (+ n 1)))
+     ((and (< a 0) (or (eq? n 0) (eq? n 3)))
+      (set! a (+ a 1)) (set! n (- n 1))))
+
+    (cond
+     ((eq? a 2)  (set! a 0) (set! n (+ n 1)))
+     ((eq? a -2) (set! a 0) (set! n (- n 1))))
+
+    (if (< n 0) (begin (set!  o (- o 1)) (set! n (+ n 7))))
+    (if (> n 7) (begin (set!  o (+ o 1)) (set! n (- n 7))))
+
+    (make-pitch o n a)))
+
+#(define (smart-transpose music pitch)
+  (let* ((es (ly-get-mus-property music 'elements))
+         (e (ly-get-mus-property music 'element))
+         (p (ly-get-mus-property music 'pitch))
+         (body (ly-get-mus-property music 'body))
+         (alts (ly-get-mus-property music 'alternatives)))
+
+    (if (pair? es)
+        (ly-set-mus-property
+         music 'elements
+         (map (lambda (x) (smart-transpose x pitch)) es)))
+
+    (if (music? alts)
+        (ly-set-mus-property
+         music 'alternatives
+         (smart-transpose alts pitch)))
+
+    (if (music? body)
+        (ly-set-mus-property
+         music 'body
+         (smart-transpose body pitch)))
+
+    (if (music? e)
+        (ly-set-mus-property
+         music 'element
+         (smart-transpose e pitch)))
+
+    (if (pitch? p)
+        (begin
+          (set! p (unhair-pitch (Pitch::transpose p pitch)))
+          (ly-set-mus-property music 'pitch p)))
+
+    music))
+
+
+music = \notes \relative c' { c4 d  e f g a b  c }
+
+\score {
+  \notes \context Staff {
+    \transpose ais' \music
+    \apply #(lambda (x) (smart-transpose x (make-pitch 0 5 1)))
+      \music
+  }
+  \paper { linewidth = -1.; }
+}
+
diff --git a/input/regression/GNUmakefile b/input/regression/GNUmakefile
new file mode 100644 (file)
index 0000000..5587717
--- /dev/null
@@ -0,0 +1,6 @@
+depth = ../..
+
+LOCALSTEPMAKE_TEMPLATES=mutopia
+include $(depth)/make/stepmake.make 
+
+
diff --git a/input/regression/accidental-single-double.ly b/input/regression/accidental-single-double.ly
new file mode 100644 (file)
index 0000000..765cdff
--- /dev/null
@@ -0,0 +1,29 @@
+\header{
+texidoc="
+A sharp sign after a double sharp sign, as well as a flat sign
+after a double flat sign is automatically prepended with a
+natural sign.
+";
+}
+\version "1.3.117";
+
+
+thenotes =  \notes \relative cis' { \time 4/4;
+gisis'4 gis gisis ges |
+geses ges geses gis |
+gisis g geses g |
+gis g ges g |
+\key a \major;
+gisis4 gis gisis ges |
+geses ges geses gis |
+gisis g geses g |
+gis g ges g |
+}
+
+\score { < \context Staff \thenotes
+       \context NoteNames  {
+               \property NoteNames.basicNoteNameProperties \override  #'no-spacing-rods  = ##f 
+               \thenotes
+       }
+       >
+}
diff --git a/input/regression/accidental.ly b/input/regression/accidental.ly
new file mode 100644 (file)
index 0000000..c7ebade
--- /dev/null
@@ -0,0 +1,15 @@
+\header{
+texidoc="
+Accidentals work: the second note does not get a sharp. The third and
+fourth show forced and courtesy accidentals.
+";
+}
+
+foo = \notes\relative c''   {   \key as \major; dis4 dis dis! dis? }
+
+\score {
+
+  < \foo 
+   \context NoteNames \foo
+  >
+}
diff --git a/input/regression/arpeggio.ly b/input/regression/arpeggio.ly
new file mode 100644 (file)
index 0000000..1699fa7
--- /dev/null
@@ -0,0 +1,23 @@
+\header{
+texidoc="
+Arpeggios are supported, both cross-staff and broken single staff.
+";
+}
+
+\version "1.3.117";
+
+\score{
+    \context PianoStaff < 
+        \context Staff=one \notes\relative c''{
+           \context Voice < fis,-\arpeggio  d a >
+            %%\property PianoStaff.SpanArpeggio \override #'connect = ##t
+            \property PianoStaff.connectArpeggios = ##t
+            <fis,\arpeggio a c>
+         }
+        \context Staff=two \notes\relative c{
+            \clef bass;
+           \context Voice < g b d-\arpeggio   >
+            <g\arpeggio b d>
+        }
+    >
+}
diff --git a/input/regression/auto-beam-bar.ly b/input/regression/auto-beam-bar.ly
new file mode 100644 (file)
index 0000000..645c62d
--- /dev/null
@@ -0,0 +1,20 @@
+\header{
+texidoc="
+The first two a8 notes should not be beamed.
+Also, no automatic beaming accross bar lines.
+";
+}
+
+\score{
+\notes \notes\relative c'' {
+\time 2/8;
+a8 a
+\time 6/8;
+a16 cis d a bes g fis4 g8
+%a4. fis4 g8
+a16 g a bes c d % ees8 d c
+}
+\paper{
+   linewidth=-1.;
+}
+}
\ No newline at end of file
diff --git a/input/regression/auto-change.ly b/input/regression/auto-change.ly
new file mode 100644 (file)
index 0000000..ee0b5d1
--- /dev/null
@@ -0,0 +1,20 @@
+\header{
+texidoc="
+Auto change piano staff switches  voices  between up and down staffs
+automatically; rests are switched along with the coming note.
+";
+}
+
+\score {
+       \notes \context PianoStaff <
+       \context Staff = "up" {
+               \autochange Staff \context Voice = VA < \relative c' { g4 a  b c d r4 a g } >
+       }
+       \context Staff = "down" {
+               \clef bass; 
+               s1*2
+       }
+
+       >
+       
+}
diff --git a/input/regression/auto-isknee.ly b/input/regression/auto-isknee.ly
new file mode 100644 (file)
index 0000000..fa3256b
--- /dev/null
@@ -0,0 +1,25 @@
+\header{
+texidoc="Two automatic knees";
+}
+
+\score {
+  \notes \context PianoStaff <
+    \context Staff = "up" \notes\relative c''{
+      [ b8 \translator Staff="down" d,, ]
+      [ c \translator Staff="up" c'' ]
+      [ b, \translator Staff="down" d ]
+    }
+    \context Staff = "down" {
+      \clef bass; 
+      s2.
+    }
+  >
+  \paper{
+    linewidth = 40*\staffspace;
+% Now by default
+%    \translator{
+%      \VoiceContext
+%      Beam \override #'auto-knee-gap = #7
+%    }
+  }
+}
diff --git a/input/regression/auto-knee.ly b/input/regression/auto-knee.ly
new file mode 100644 (file)
index 0000000..b49954b
--- /dev/null
@@ -0,0 +1,17 @@
+\header{
+texidoc="One automatic knee";
+}
+
+\score {
+  \context Staff \notes\relative c''{ 
+    [c'8 c,,] [c8 e']
+  }
+  \paper{
+    linewidth = 40*\staffspace;
+% Now by default
+%    \translator {
+%      \VoiceContext
+%      Beam \override #'auto-knee-gap = #7
+%    }
+  }
+}
diff --git a/input/regression/bar-number.ly b/input/regression/bar-number.ly
new file mode 100644 (file)
index 0000000..502045e
--- /dev/null
@@ -0,0 +1,19 @@
+\header {
+texidoc="Bar number settable and padding adjustable.";
+}
+
+\score {
+  \notes \relative c'' {
+     c1 c\break
+     c1 c\break
+     \property Score.currentBarNumber = #25
+     \property Score.BarNumber \override #'padding = #3
+     c1 c\break
+  }
+  \paper {
+    linewidth = 40*\staffspace;
+    \translator {
+      \BarNumberingStaffContext
+    }
+  }
+}
diff --git a/input/regression/bar-scripts.ly b/input/regression/bar-scripts.ly
new file mode 100644 (file)
index 0000000..644550d
--- /dev/null
@@ -0,0 +1,41 @@
+\header{
+texidoc="
+Markings that are attached to (invisible) barlines are 
+delicate: the are attached to the rest of the score without the score
+knowing it.  Consequently, they fall over  often.
+";
+}
+
+\version "1.3.117";
+
+onestaff =  \context Staff = foo\notes  {
+       \property Staff.instr = instr
+       \property Staff.instrument = instrument \mark "B";
+        c1 \mark "A"; \break c2  c2 \break
+}
+
+grstaff =  \notes \context GrandStaff <
+       \context Staff = bar {
+
+       \property Staff.instr = instr
+       
+        \mark "B"; \break c1 \mark "A"; c2  }
+       \context Staff = bufl { c1 c2  }
+>
+
+scpaper =  \paper {\translator {\OrchestralScoreContext}}
+stpaper =  \paper{ \translator {\BarNumberingStaffContext }}
+
+scscore =  \score { \grstaff \paper {
+\scpaper
+}}
+
+
+stscore =  \score { \onestaff \paper {
+ \stpaper
+}}
+
+%\score {\stscore}
+\score {\scscore
+\header { title = "bar scripts"; }
+}
diff --git a/input/regression/beam-cross-staff.ly b/input/regression/beam-cross-staff.ly
new file mode 100644 (file)
index 0000000..72b3c28
--- /dev/null
@@ -0,0 +1,32 @@
+\header{
+texidoc="
+Beams can be typeset over fixed distance aligned staffs, beam
+beautification doesn't really work, but knees do. Beams should be
+behave well, wherever the switching point is.
+";
+}
+\score{
+       \context PianoStaff <
+       \context Staff=one \notes\relative c'{
+               \stemUp [c8 c \translator Staff=two \stemUp c c]
+               [c c c c]
+               \translator Staff=one
+               \stemDown [c8 c \translator Staff=two \stemUp c c]
+               r2
+               \stemDown [c8 c \translator Staff=one \stemDown c c]
+               r2
+               \translator Staff=two
+               \stemUp [c8 c \translator Staff=one \stemDown c c]
+               r2
+       }
+       \context Staff=two \notes\relative c'{
+               \clef bass;
+               s1
+               s1
+               s1
+               s1
+       }
+       >
+}
+
+\version "1.3.117"; 
diff --git a/input/regression/beam-extreme.ly b/input/regression/beam-extreme.ly
new file mode 100644 (file)
index 0000000..653024e
--- /dev/null
@@ -0,0 +1,19 @@
+\header{
+texidoc="
+Beams should behave reasonably well, even under extreme circumstances.
+Stems may be short, but noteheads should never touch the beam.
+";
+}
+\version "1.3.117";
+\score{
+       \notes\relative c''{
+               [g8 c c,]
+               [c16 c'' a f]
+               \stemUp 
+               [c,,32 c'' a f]
+
+       }
+       \paper{
+               linewidth=-1.;
+       }
+}
diff --git a/input/regression/beam-length.ly b/input/regression/beam-length.ly
new file mode 100644 (file)
index 0000000..3c2a8f1
--- /dev/null
@@ -0,0 +1,14 @@
+\header{
+texidoc="
+beams should look the same
+";
+}
+    
+\score { 
+  \context Voice \notes\relative c {
+
+                       [d''8 d d] [d g d]
+                       c c
+       
+  }
+}
diff --git a/input/regression/beam-position.ly b/input/regression/beam-position.ly
new file mode 100644 (file)
index 0000000..88f5749
--- /dev/null
@@ -0,0 +1,22 @@
+\header{
+texidoc="
+Beams should always reach the middle staff line.  The second beam
+counting from the note head side, should never be lower than the
+second staff line.  This does not hold for grace note beams.
+Override with @code{noStemExtend}.
+";
+}
+\version "1.3.117";
+
+\score { 
+  \context Voice \notes\relative c {
+    [f8 f]  [f64 f] \grace { [f8 e8] }
+       \property Grace.Stem \override #'no-stem-extend = ##t
+       [f8 f]
+       
+  }
+  \paper {
+    linewidth=-1.0;
+  }  
+  \midi { }
+}
diff --git a/input/regression/beaming.ly b/input/regression/beaming.ly
new file mode 100644 (file)
index 0000000..b167331
--- /dev/null
@@ -0,0 +1,27 @@
+\header{
+texidoc="
+Beaming is generated automatically. Beams may cross bar lines. In that
+case, line breaks are forbidden.  Yet clef and key signatures are
+hidden just as with breakable bar lines.
+";
+}
+
+\score { \context Staff \notes \relative c''  {
+       [c8. c16]
+       [c8. c16 c8.  c16]
+       [c16 c8.] |
+       [c8. c16  c16  c8.]
+       [c8. c32  c32]
+       [c8 c8] |
+       [c16 c16]
+       [c32 c32]
+       [c64 c64]       
+       c32
+       [c8 c,4 c'8] % should warn here!
+       [c8 c c] c8 % over barline
+       [c16 c8 c16]
+       [c32 c16 c16 c16 c32]
+       [c32 c16 c8 c32]                 % hmm ?
+       
+               }}
+
diff --git a/input/regression/between-systems.ly b/input/regression/between-systems.ly
new file mode 100644 (file)
index 0000000..e5d3577
--- /dev/null
@@ -0,0 +1,19 @@
+\header{
+texidoc="
+The same mechanism can be  used  to force pagebreaks.
+";
+}
+
+
+% In reality, you'd use #"\\newpage" instead of "(pagebreak)", of course.
+
+\score {
+\notes { c1
+
+       \context Score \outputproperty #(make-type-checker 'paper-column-interface)
+               #'between-system-string = #"(pagebreak)\n\n"
+       \break
+
+c1 }
+
+}
diff --git a/input/regression/break.ly b/input/regression/break.ly
new file mode 100644 (file)
index 0000000..49f7ddd
--- /dev/null
@@ -0,0 +1,17 @@
+\header{
+texidoc="
+Breaks can be encouraged and discouraged using @code{\break} and
+@code{\noBreak}.  They are abbrevs for @code{\penalty} commands.
+";
+}
+
+
+\score{
+       \notes\context Voice{
+       \emptyText
+       c1 c1^"no break after 2nd note"  \noBreak c1 c1
+         
+         c1^"break after this" \break c1 c1 
+       }
+       \paper { linewidth = 4.0\cm;}
+}
diff --git a/input/regression/breathing-sign.ly b/input/regression/breathing-sign.ly
new file mode 100644 (file)
index 0000000..70e375f
--- /dev/null
@@ -0,0 +1,27 @@
+\header{
+texidoc="
+Breathing signs, also used for phrasing, do normally not influence
+global spacing -- only if space gets tight, notes are shifted to make
+room for the breathing sign. Breathing signs break beams running
+through their voice. In the following example, the notes in the first
+two measures all have the same distance from each other:
+";
+}
+
+
+\version "1.3.117";
+
+\score {
+  \notes \relative c' {
+    \key es \major; \time 3/4;
+    < \context Voice = two { \stemDown es4 bes es }
+      \context Voice = one { \stemUp g4 as g }
+    > |
+    < \context Voice = two { \stemDown es4 \breathe bes es }
+      \context Voice = one { \stemUp g4 as g }
+    > |
+    es8 d es f g4 \breathe |
+    es8 d \breathe es f g f |
+    es2 r4 \bar "||";
+  }
+}
diff --git a/input/regression/chord-names.ly b/input/regression/chord-names.ly
new file mode 100644 (file)
index 0000000..2d233f5
--- /dev/null
@@ -0,0 +1,37 @@
+\header{
+texidoc="
+Chord names are generated from a list pitches, and are customisable
+from guile.  For some unlogical names, guile customisation is used
+by default.
+";
+}
+\version "1.3.117"
+chord =  \notes\transpose c''\chords{
+   c1
+   c:m
+   c:m5-
+   c:m5-.7-
+   c:7+
+   c:m5-.7
+   c:5-.7+
+   c:m7
+   c:7
+   d
+   d/a
+   d/+gis
+}
+
+\score{
+    <
+           \context ChordNames \chord
+           \context Staff \chord
+    >
+    \paper{
+
+               \translator { 
+                       \ChordNamesContext
+                       ChordName \override #'word-space = #1 
+               }
+    }
+}
+
diff --git a/input/regression/chord-tremolo.ly b/input/regression/chord-tremolo.ly
new file mode 100644 (file)
index 0000000..6d941ff
--- /dev/null
@@ -0,0 +1,20 @@
+\header{
+texidoc="
+Chord tremolos look like beams, but are a kind of repeat symbol.
+To avoid confusion, chord tremolo beams do not reach the stems, but 
+leave a gap.  Chord tremolo beams on half notes are not ambiguous,
+as half notes cannot appear in a regular beam, and should reach the 
+stems.
+";
+}
+  
+\score { 
+  \context Voice \notes\relative c {
+       \repeat "tremolo" 8 { c16 d16 }
+       \repeat "tremolo" 4 { c16 d16 }    
+  }
+  \paper {
+    linewidth=-1.0;
+  }  
+  \midi { }
+}
diff --git a/input/regression/clefs.ly b/input/regression/clefs.ly
new file mode 100644 (file)
index 0000000..834595b
--- /dev/null
@@ -0,0 +1,37 @@
+
+\header{
+texidoc="
+The transparent clef should not occupy any space and with style
+@code{fullSizeChanges}, the changing clef should be typeset in full
+size. For octaviated clefs, the ``8'' should appear closely above or
+below the clef respectively.  The ``8'' is processed in a convoluted
+way, so this is fragile as well.
+";
+}
+
+\version "1.3.117";
+
+\score {
+       \notes{ 
+       
+         \clef "treble"; c'1^"{treble}" \bar "||";
+         \clef "french";c'1^"{french}" \bar "||";
+         \clef "soprano";c'1^"{soprano}" \bar "||";
+         \clef "mezzosoprano";c'1^"{mezzosoprano}" \bar "||";
+         \clef "alto";c'1^"{alto}" \bar "||";
+         \clef "tenor";c'1^"{tenor}" \bar "||";
+         \clef "baritone";c'1^"{baritone}" \bar "||";
+         \clef "varbaritone";c'1^"{varbaritone}" \bar "||";
+         \clef "G_8";c'1^"{sub 8?}" c'1 \bar "||";
+         \clef "G^8";c'1^"{sup 8?}" c'1 \bar "||";
+         \clef "bass";c'1^"{bass}" \bar "||";
+         \clef "subbass";c'1^"{subbass}" \bar "||";
+       \property Staff.clefStyle="transparent"
+         \clef "treble"; c'1^"clefStyle=\"transparent\"" \bar "||";
+       \property Staff.clefStyle="fullSizeChanges"
+         \clef "treble"; c'1^"clefStyle=\"fullSizeChanges\"" \bar "|.";
+         }
+         \paper{
+         }
+}
+
diff --git a/input/regression/collisions.ly b/input/regression/collisions.ly
new file mode 100644 (file)
index 0000000..1933d10
--- /dev/null
@@ -0,0 +1,79 @@
+\header{
+texidoc="
+Normal collisions. We have support for polyphony, where the
+middle voices are horizontally shifted.
+";
+filename =      "collisions.ly";
+description =   "random counterpoint to test collisions";
+enteredby =     "HWN,JCN";
+copyright =     "public domain";
+Tested =        "test the Collision resolution ";
+}
+\version "1.3.117";
+
+twovoice =  \context Staff \notes < 
+       \context Voice=i { \stemDown c4 d e f g2~  g4 a [c8 d e f] c2| }
+       \context Voice=ii { \stemUp g4 f e g ~ g2 g2  c4 g4 g2 } 
+>
+
+twovoicesteminvert =  \context Staff \notes <  
+       % the f and g on 4th beat are exceptionally ugh.
+       \context Voice=i { \stemUp c4 d e f g2 g4 a | }
+       \context Voice=ii { \stemDown g4 f e g  g2 g2 } 
+>
+
+threevoice =  \context Staff \notes <
+       \context Voice=i { \stemUp g4 f e f g a g2 }
+       \context Voice=ii { \stemUp \property Voice.NoteColumn \override #'horizontal-shift = #1
+               e2  e2  e2  e2 }
+       \context Voice=iii { \stemDown c4 d e d c d es }
+>
+
+chordstest =  \context Staff \notes <
+       \context Voice = i \relative c {
+               \stemUp e4 dis c f g f a b b
+       }
+       \context Voice = ii \relative c {
+               \stemDown <a4 c> <a4 c> <a4 e'> <a4 c> <e' a> <e a> <e a> <a c> <a d>
+       }
+>
+
+hairyChord =  \context Staff \notes\relative c' <
+     \context Voice=one {
+ \property Voice.NoteColumn \override #'horizontal-shift = #0
+       \stemUp 
+       e4 
+     }
+     
+     \context Voice=two {
+       \stemUp
+ \property Voice.NoteColumn \override #'horizontal-shift = #1
+       cis
+     }
+     
+     \context Voice=three {
+ \property Voice.NoteColumn \override #'horizontal-shift = #2
+
+       \stemUp 
+       ais
+     }
+     
+     \context Voice=four {
+        \stemDown
+ \property Voice.NoteColumn \override #'horizontal-shift = #1
+
+       fis
+     }
+>
+
+
+\score{
+       \notes \transpose c'' {  \twovoice  
+       \twovoicesteminvert 
+       \threevoice \break
+        \chordstest
+        \hairyChord
+       }
+       
+%      \midi { \tempo 4:80 }
+}
diff --git a/input/regression/dots.ly b/input/regression/dots.ly
new file mode 100644 (file)
index 0000000..fbb8855
--- /dev/null
@@ -0,0 +1,30 @@
+\header{
+texidoc="
+Noteheads can have dots, and rests can too.  Augmentation dots should
+never be printed on a staff line, but rather be shifted vertically. They
+should go up, but in case of multiple parts, the down stems have down
+shifted dots.  (Wanske p. 186) In case of chords, all dots should be in
+a column.  The dots go along as rests are shifted to avoid collisions.
+";
+}
+
+
+\version "1.3.117";
+\score { 
+  \context Voice \notes\relative c'' {
+    \time 6/8;
+       d4. g,,
+       <b''4. c d e>  <f g a b>
+       <g b d> <c, g' d' a'>
+       
+       
+       \context Staff <
+               \context Voice = VA {  \stemUp   f''  <b c> r4.  }
+               \context Voice = VB {  \stemDown b, <a b> r4. }
+       >
+       
+       
+  }
+  \paper { }  
+  \midi { }
+}
diff --git a/input/regression/dyn-line.ly b/input/regression/dyn-line.ly
new file mode 100644 (file)
index 0000000..31f5dc5
--- /dev/null
@@ -0,0 +1,27 @@
+\header{
+texidoc="
+Dynamics appear below or above the staff.  If multiple dynamics are
+linked with (de)crescendi, they should be on the same line.
+";
+}
+\score{
+\notes\relative c''{
+a1\fff\> \!c,,\pp a'' a\p
+
+
+% We need this to test if we get two Dynamic line spanners
+a
+
+% because do_removal_processing ()
+% doesn't seem to post_process elements
+d\f
+
+a
+
+}
+\paper{
+}
+\midi{
+\tempo 1 = 60;
+}
+}
diff --git a/input/regression/generic-output-property.ly b/input/regression/generic-output-property.ly
new file mode 100644 (file)
index 0000000..f3a5586
--- /dev/null
@@ -0,0 +1,26 @@
+\header{
+texidoc="
+As a last resort, the placement of grobs can be adjusted manually, by
+setting the @code{extra-offset} of a grob.
+";
+}
+
+\score{
+       \notes\relative c''{
+       \outputproperty #(make-type-checker 'note-head-interface) 
+               #'extra-offset = #'(2 . 3)
+       c2
+       c
+       \context Score {
+               \outputproperty #(make-type-checker 'mark-interface) 
+               #'extra-offset = #'(-1 . 4)
+       }
+       \mark A;
+       d1
+       \mark;
+       e
+}
+\paper{
+       linewidth=-1.0;
+}
+}
diff --git a/input/regression/generic-property-override.ly b/input/regression/generic-property-override.ly
new file mode 100644 (file)
index 0000000..c3cb0d2
--- /dev/null
@@ -0,0 +1,17 @@
+\header{
+texidoc="
+More specific settings take precendence over less specific settings. The
+second slur has slurDirection set to down, overriding the stemup  setting.
+";
+}
+\version "1.3.117";
+
+\score {
+ \notes \relative c'' \context Voice {
+       \stemUp
+       c'4 () c4 
+       \slurDown
+       c4 ( )c4 
+ }
+ \paper { linewidth = -1.0; }
+}
diff --git a/input/regression/glissando.ly b/input/regression/glissando.ly
new file mode 100644 (file)
index 0000000..115c5c2
--- /dev/null
@@ -0,0 +1,30 @@
+\header{
+
+texidoc=" Simple glissando lines between notes are supported.
+The first two glissandi are not consecutive.
+
+The engraver does no time-keeping, so it involves some trickery to get
+< @{ s8 s8 s4 @} @{ c4 \\gliss d4 @} > working correctly.
+
+";
+}
+
+\score{
+        \context Staff=one \notes\relative c''{
+                    % gliss non gliss and 
+            c4 \glissando d e \glissando f \glissando \break
+            % consecutive 
+            c \glissando d \glissando e
+             < { \stemUp e8 \glissando g8 }
+               \context Voice = VB {\stemDown \repeat unfold 4 d16 } >
+            
+    }
+    \paper{
+        linewidth = 70.\mm;
+       \translator{
+              \StaffContext
+              % makes for handier debugging
+              % \remove Clef_engraver;
+       }
+    }
+}
diff --git a/input/regression/grace.ly b/input/regression/grace.ly
new file mode 100644 (file)
index 0000000..dbc42a8
--- /dev/null
@@ -0,0 +1,30 @@
+\header{
+texidoc="
+Grace notes are typeset as an encapsulated piece of music. You can
+have beams, notes, chords, stems etc. within a @code{\grace} section.
+Slurs that start within a grace section, but aren't ended are attached
+to the next normal note.  Grace notes have zero duration.  If there
+are tuplets, the grace notes won't be under the brace.  Grace notes
+can have accidentals, but they are (currently) spaced at a fixed
+distance.  Grace notes (of course) come before the accidentals of the
+main note.  Grace notes can also be positioned after the main note.
+
+Grace notes without beams should have a slash, if @code{flagStyle} is
+not set.  Main note scripts don't end up on the grace note.
+
+";
+}
+
+\score {\notes \context Voice = VA \relative c'' {
+       \grace b8 c4-\fermata
+       \grace { [c32 cis32] } gis4
+       \grace { [cis32 dis32] } e4
+       \grace { [c32 d] }\times 2/3 { [c8 c c] }
+        \grace { [b32 ( c32] } ) c4
+       \grace  <c16 d16> [c8 c8]
+%      \grace  c16 [c8 c8]
+       \grace  { \property Grace.graceAlignPosition = \right c16} c4
+}
+\paper {linewidth = -1.;}
+\midi{ }
+}
diff --git a/input/regression/hara-kiri-short.ly b/input/regression/hara-kiri-short.ly
new file mode 100644 (file)
index 0000000..1cb4fdb
--- /dev/null
@@ -0,0 +1,40 @@
+\header{
+texidoc="
+Hara kiri staffs kill themselves if they are empty.  This example really
+contains two staffs, but the second contains only spaces, and is
+therefore removed.  Also, any staff brackets and braces are removed.
+";
+}
+
+\version "1.3.117";
+zager =  \context Staff = zager \notes \relative c'' {
+       \clef treble;
+       c1
+}
+
+zoger =  \context Staff = zoger \notes \relative c'' {
+       \clef treble;
+       \skip 1* 1;
+}
+
+zagers =  \context GrandStaff <
+       \zager
+       \zoger
+>
+\score{
+       <
+               \context StaffGroup = zagers <
+                       \zagers
+               >
+       >
+       \paper{
+               linewidth = 80.0\mm;
+
+               \translator { \HaraKiriStaffContext }
+%uh?
+
+       }
+}
+
+
diff --git a/input/regression/keys.ly b/input/regression/keys.ly
new file mode 100644 (file)
index 0000000..3013dd1
--- /dev/null
@@ -0,0 +1,26 @@
+\header{
+texidoc="
+Key signatures appear on key  changes. They may also
+appear without barlines.  The restoration accidentals are not printed at
+the start of the line. If @code{createKeyOnClefChange} is set, they're
+also created on a clef change.
+";
+}
+
+\version "1.3.117";
+
+\score {
+  \notes \relative c''
+  {
+       \property Staff. createKeyOnClefChange = ##t  
+    \key bes \major; c2
+%    \key c \major; %  \minor;
+    \key es \major; %  \minor;
+    c2
+    \break
+    \key bes \major; % \major;
+    c2 \clef alto; c2   \key d \major; \clef treble; c2
+       \property Staff. keySignature = #'((2 . -1)  (6 . -1) (4 . -1))
+       e2
+  }
+}
diff --git a/input/regression/lyric-combine.ly b/input/regression/lyric-combine.ly
new file mode 100644 (file)
index 0000000..1d67184
--- /dev/null
@@ -0,0 +1,54 @@
+\header{
+texidoc="
+Lyrics can be set to a melody automatically.  Excess lyrics will be
+dumped.  Lyrics will not be set over rests.  You can have melismata
+either by setting a property melismaBusy, or by setting
+automaticMelismas (which will set melismas during slurs and ties).  If
+you want a different order than first Music, then Lyrics, you must
+precook a chord of staffs/lyrics and label those.  Of course
+@code{\rhythm} ignores any other rhythms in the piece.  Hyphens and
+extenders do not assume anything about lyric lengths, so they continue
+to work.
+";
+
+
+filename =      "twinkle-pop.ly";
+xtitle =        "Ah, vous dirais-je, maman ";
+description =   "twinkle twinkle in pop-song-settings";
+composer =      "traditional";
+enteredby =     "HWN, chords by Johan Vromans";
+copyright =     "public domain";
+}
+
+\version "1.3.117";
+
+m = \notes  \relative c'' {
+       \property Staff.automaticMelismata = ##t
+       \autoBeamOff
+       g4  r8 \times 2/3 { g'8( f )e } r8 \grace { [d16 c b] } e4
+       \emptyText
+       d8.^"melisma"   \melisma c16
+       \melismaEnd
+       b }
+
+noisebeat = \notes \relative c'' {g16 g g g }
+noise =   { \noisebeat \noisebeat \noisebeat  \noisebeat \noisebeat \noisebeat }
+textI =   \lyrics  { la2 __ la -- la __ la la la la la  }
+textII =   \lyrics  { da -- da __ da -- da da da da da  }
+
+\score {
+    \notes < \context Staff = SA \m
+      \context Lyrics = LA { s1 }
+      \context Staff = SB { s1 }
+      \context Lyrics = LB { s1 }
+      \context Staff = SC \noise
+      
+      \addlyrics
+         \context Staff = SB \m
+         < \context Lyrics = LA \textI
+           \context Lyrics = LB \textII
+         >
+         
+    >
+}
+
diff --git a/input/regression/lyrics-bar.ly b/input/regression/lyrics-bar.ly
new file mode 100644 (file)
index 0000000..ec0309b
--- /dev/null
@@ -0,0 +1,39 @@
+\header{
+texidoc="
+Adding a @code{Bar_engraver} to the LyricsVoice context makes sure that
+lyrics don't collide with barlines.
+";
+}
+
+\score {
+       \context StaffGroup <
+       \notes \context Staff {
+               b1 b1 \bar "|.";
+       }
+       \lyrics\context Lyrics <
+               \context LyricsVoiceWithBars {
+%                      thisContextHasSpanBarEngraver1  added
+                       ThisContextCertainlyHasSpanBarEngraverAddedButTheresSomethingFunny1.  Here.
+               }
+               \context LyricsVoice {
+                       this4 one has no SpanBarEngraverAddedToContext1
+               }
+       >
+       \notes \context Staff = SB { b1 b1 }
+       >
+       \paper {
+               linewidth = -1.0\cm;
+               \translator {
+                       \LyricsContext
+                       \consists "Span_bar_engraver";
+                       \accepts "LyricsVoiceWithBars";
+               }
+               \translator {
+                       \LyricsVoiceContext
+                       \name "LyricsVoiceWithBars";
+               }
+               \translator {
+                       \LyricsVoiceContext
+               }
+       }
+}
diff --git a/input/regression/lyrics-multi-stanza.ly b/input/regression/lyrics-multi-stanza.ly
new file mode 100644 (file)
index 0000000..a7dee3a
--- /dev/null
@@ -0,0 +1,154 @@
+
+\version "1.3.117";
+\include "english.ly"
+
+\header{
+texidoc="
+Multiple stanzas
+
+ Tests a number of features:
+ * Lyric_phrasing_engraver
+ * Stanza_number_engraver
+ * Automatic melismata on beamed notes
+
+";
+
+    title = "Crowned with Honour";
+    composer = "Oliver Holden (1765-1844)";
+    poet = "Thomas Kelly (1769-1855)";
+}
+
+allup =  \notes{
+       \stemUp
+       \slurUp
+        \tieUp
+       \property Voice.DynamicLineSpanner \override #'direction = #1
+       \autoBeamOff
+}
+
+alldown =  \notes{
+       \stemDown
+       \slurDown
+        \tieDown
+       \property Voice.DynamicLineSpanner \override #'direction = #-1
+       \autoBeamOff
+}
+
+Global =   \notes{
+        \key g \major;
+        \time 4/4;
+       \partial 4;
+}
+
+Soprano =  \notes \relative c' {
+       \allup
+       d4 | g g b b a g a b a g b a g( a )g % modified to test melisma align right
+
+       [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.
+
+       b4 | d b g b [a8  g]  [a b]  a4
+%      b4 | d b g b [a8 \melisma g] \melismaEnd [a \melisma b] \melismaEnd a4
+
+       g d'2 c b4.( c8 )a4 a g2.
+}
+Alto =  \notes \relative c'{
+       \alldown
+       d4 | d d g g fs g fs g fs e g fs d2.
+       d4 | g d b g' [b8 a] [g fs] g4 fs g2 a g fs4( e8 )g fs2.
+       d4 | g g d g [fs8 e] [fs g] fs4 g f2 e d4.( d8 )d4 fs4 d2.
+}
+Tenor =  \notes \relative c{
+       \allup
+       d4 | b' b d d c  b c  d c  b d c  b2.
+       a4 | b a g b  [d8 c] [b a] b4 a  b2 c b  a   a2.
+       g4 | b d b d [c8  b] [c  d]  c4 b g2 g g4.( a8 [fs )a] c4 b2.
+}
+Bass =  \notes \relative c{
+       \alldown
+       d4 | g g g g d d d g d e d d g,2.
+       d'4 | g d b g' [b8 a] [g fs] g4 d g2 fs e a d,2.
+       g4 | g g g g d d d e b2 c d2. d4 g,2.
+}
+
+TheLyrics =   \lyrics <
+        {
+           \context LyricsVoice = "Soprano-1"
+           \property LyricsVoice .stanza = "1:"
+           \property LyricsVoice .stz = "(1)"
+                The4 head    that once was crowned with thorns
+                Is   crowned with glo -- ry  now;
+                A roy -- al di -- a -- dem a -- dorns
+                The might -- y Vic -- tor's  brow.
+                A roy -- al di -- a -- dem a -- dorns
+                The might -- y Vic -- tor's  brow.
+        }
+        {
+           \context LyricsVoice = "Soprano-2"
+           \property LyricsVoice .stanza = "2:"
+           \property LyricsVoice .stz = "(2)"
+                The4 high -- est place that heav'n af -- fords
+                Is His by sov -- 'reign  right;
+                The King of kings, the Lord of lords,
+                He reigns in glo -- ry  bright,
+                The King of kings, the Lord of lords, 
+                He reigns in glo -- ry  bright.
+        }
+        {
+           \context LyricsVoice = "Soprano-3"
+           \property LyricsVoice .stanza = "3:"
+           \property LyricsVoice .stz = "(3)"
+                The joy of all who dwell a -- bove,
+                The joy of saints be --  low,
+                To4 whom He man -- i -- fests His love,
+                And grants His name to  know,
+                To4 whom He man -- i -- fests His love,
+                And grants His name to4  know.
+        }
+>
+
+
+\score{
+  \context ChoirStaff
+    \notes
+    <
+      \property Score.barNumberScriptPadding = #10.0
+      \context Staff = "treblestaff"{
+        <
+         \context Voice = "Soprano" { }
+         \context Voice = "Alto" { }
+        >
+      }
+      \context Lyrics = mainlyrics { }
+      \context Staff = "treblestaff"{
+       <
+         \Global
+         \addlyrics { \context Voice = "Soprano" \Soprano }
+           { \context Lyrics = mainlyrics \TheLyrics }
+         \context Voice = "Alto"  \Alto
+        >
+       \bar "|.";
+      }
+      \context Staff = "bassstaff"{
+        \clef "bass";
+       <
+         \context Voice = "Tenor" { \Tenor }
+         \context Voice = "Bass"  { \Bass }
+       >
+        \bar "|.";
+      }
+    >
+
+   \paper {
+      \translator{
+       \VoiceContext
+       automaticMelismata = ##t;
+       noAutoBeaming = ##t;
+        \remove   "Auto_beam_engraver";
+      }
+
+   }
+}
diff --git a/input/regression/mm-rests2.ly b/input/regression/mm-rests2.ly
new file mode 100644 (file)
index 0000000..c801ec4
--- /dev/null
@@ -0,0 +1,30 @@
+\header{
+texidoc="
+If @code{Score.skipBars} is set,
+the signs for four, two, and one measure rest are combined to
+produce the graphical representation of rests for up to 10 bars.
+The number of bars will be written above the sign.
+";
+}
+
+thenotes = \notes \relative cis' {
+\property Score. skipBars = ##t
+\time 4/4;
+R1 |
+R1*1 |
+R1*2 |
+R1*3 |
+R1*4 |
+R1*5 |
+R1*6 |
+R1*7 |
+R1*8 |
+R1*9 |
+R1*10 |
+R1*11 |
+}
+
+\score { < \context Staff \thenotes
+
+       >
+}
diff --git a/input/regression/molecule-hacking.ly b/input/regression/molecule-hacking.ly
new file mode 100644 (file)
index 0000000..49a9ce9
--- /dev/null
@@ -0,0 +1,73 @@
+
+\header { texidoc=" You can write molecule callbacks in Scheme, thus
+providing custom glyphs for notation elements.  A simple example is
+adding parentheses to existing molecule callbacks.
+
+The parenthesized beam is less successful due to implementation of the
+Beam. The note head is also rather naive, since the extent of the
+parens are also not seen by accidentals.
+";
+       
+        }
+
+#(define (parenthesize-callback callback)
+   "Construct a function that will do CALLBACK and add parentheses.
+Example usage:
+
+  \property Voice.NoteHead \\override #'molecule-callback
+                     =
+                     #(parenthesize-callback Note_head::brew_molecule)
+                   
+"
+
+   
+   (define (parenthesize-molecule grob)
+     "This function adds parentheses to the original callback for
+GROB.  The dimensions of the molecule is not affected.
+"
+     
+     (let* (
+           (fn (ly-get-default-font grob))
+           (pclose (ly-find-glyph-by-name fn "accidentals-)"))
+           (popen (ly-find-glyph-by-name fn "accidentals-("))
+           (subject (callback grob))
+
+           ;; remember old size
+           (subject-dims (ly-get-molecule-extent subject 0))
+           )
+
+       ;; add parens
+        (set! subject
+            (ly-combine-molecule-at-edge 
+             (ly-combine-molecule-at-edge subject 0 1 pclose 0.2)
+             0 -1 popen  0.2))
+
+       ;; revert old size.
+       (ly-set-molecule-extent! subject 0 subject-dims)
+       subject
+    )
+     )
+   parenthesize-molecule
+   )
+    
+
+
+\score {
+       \notes \relative c' { c4 e
+
+                   \property Voice.NoteHead \override #'molecule-callback
+                     =
+                     #(parenthesize-callback Note_head::brew_molecule)
+                   g bes
+                   \property Voice.NoteHead \revert #'molecule-callback
+                   \property Voice.Beam \override #'molecule-callback
+                     =
+                     #(parenthesize-callback Beam::brew_molecule)
+
+                   a8 gis8 a2.
+                   
+                   }
+
+       \paper { linewidth = -1.; }
+       }
+
diff --git a/input/regression/multi-measure-rest.ly b/input/regression/multi-measure-rest.ly
new file mode 100644 (file)
index 0000000..01732e4
--- /dev/null
@@ -0,0 +1,20 @@
+\header{
+texidoc="
+Multiple measure rests do not collide with barlines and clefs.  They
+are not expanded when you set @code{Score.skipBars}.  Although the
+multi-measure-rest is a Spanner, minimum distances are set to keep it
+colliding from barlines. 
+";
+}
+\version "1.3.117";
+
+\score { \notes { \time 3/4; \key cis \major;
+           R2.*15 R2. R2.*7 }
+       \paper {
+       \translator {
+               \ScoreContext
+               skipBars = ##t
+       }
+       linewidth = -1.;        
+       }
+}
diff --git a/input/regression/non-empty-text.ly b/input/regression/non-empty-text.ly
new file mode 100644 (file)
index 0000000..1d445c8
--- /dev/null
@@ -0,0 +1,15 @@
+\header{
+texidoc="
+Text is set with empty horizontal dimensions.  The boolean property
+textNonEmpty is used to respect the horizontal size of text.
+";
+}
+\score { \notes {
+\property Voice.TextScript \override #'no-spacing-rods = ##f
+c4_"very wide and long text" c4
+}
+
+\paper {
+  linewidth  = -1.0;
+  }
+}
diff --git a/input/regression/noteheadstyle.ly b/input/regression/noteheadstyle.ly
new file mode 100644 (file)
index 0000000..c59f40c
--- /dev/null
@@ -0,0 +1,63 @@
+\header{
+texidoc="
+Note head shapes are settable.  The stem endings should be adjusted
+per note head.  If you want different note head styles on one stem,
+you must create a special context called Thread.
+
+Harmonic notes have a different shape and different
+dimensions. Nevertheless, noteheads in both styles can be combined, on
+either up or down stems.
+";
+}
+
+\version "1.3.117";
+
+
+\score { \notes \relative c{
+% anyone wanna pop?
+c''4 c2 c8  c16 c16 c1 c\breve
+\property Voice.NoteHead \override #'style = #'diamond
+c4 c2 c8  c16 c16  c1 c\breve
+\property Voice.NoteHead \override #'style = #'transparent
+c4 c2 c8  c16 c16  c1 c\breve
+\property Voice.NoteHead \override #'style = #'cross
+c4 c2 c8  c16 c16  c1 c\breve
+\property Voice.NoteHead \override #'style = #'mensural
+c4 c2 c8  c16 c16  c1 c\breve c\longa
+\property Voice.NoteHead \override #'style = #'harmonic
+c4 c2 c8  c16 c16  c1 c\breve
+\property Voice.NoteHead \override #'style = #'baroque
+c4 c2 c8  c16 c16  c1 c\breve c\longa
+
+
+   \context Voice <
+    \context Thread = TA
+      {
+        \property Thread.NoteHead \override #'style = #'cross
+        \property Voice.Stem \override #'direction = #1
+        c16
+       }
+    \context Thread = TB
+      { \property Thread.NoteHead \override #'style = #'default a16  }
+
+    \context Thread = TC
+      { \property Thread.NoteHead \override #'style = #'mensural d16 }
+
+  >
+
+
+   \context Voice <\context Thread = TA {
+   \property Thread.NoteHead \override #'style = #'default
+   c4 c4 }
+\context Thread = TB {
+   \property Thread.NoteHead \override #'style = #'mensural
+  c'4 \stemDown c
+} >
+
+}
+
+    \paper {
+
+
+}
+}
diff --git a/input/regression/number-staff-lines.ly b/input/regression/number-staff-lines.ly
new file mode 100644 (file)
index 0000000..5494d66
--- /dev/null
@@ -0,0 +1,19 @@
+\header{
+
+texidoc=" The number of stafflines of a staff can be set.  Ledger
+lines both on note heads and rests are adjusted.  Barlines also are
+adjusted.  ";
+
+}
+
+\score { 
+\context Voice \notes\relative c {
+       c' c c c | g' g g g     
+  }
+  \paper {
+
+\translator { \StaffContext
+StaffSymbol \override #'line-count = #3
+}  }
+  \midi { }
+}
diff --git a/input/regression/repeat-fold.ly b/input/regression/repeat-fold.ly
new file mode 100644 (file)
index 0000000..2831366
--- /dev/null
@@ -0,0 +1,14 @@
+\header{
+texidoc="
+Folded.  This doesn't make sense without alternatives, but it works.
+";
+}
+
+\score { \notes\context Staff\relative c'' {
+\repeat fold 3 { c^"3$\\times$ 0alt" d }
+% less alts than body
+\repeat fold 4 { c^"4$\\times$ 2alt" d } \alternative { e f }
+% more alts than body
+\repeat fold 2 { c^"2$\\times$ 3alt" d } \alternative { e f g } 
+}}
+
diff --git a/input/regression/repeat-line-break.ly b/input/regression/repeat-line-break.ly
new file mode 100644 (file)
index 0000000..ae6a06d
--- /dev/null
@@ -0,0 +1,16 @@
+\header{
+texidoc="
+Across linebreaks, the left edge of a first and second alternative
+bracket should be equal
+";
+}
+
+\score  {
+\notes
+\context Staff\relative c''  {
+       \repeat "volta" 2 { c1 \break } \alternative { d e }
+       c1
+       \repeat "volta" 2 { c1 } \alternative { { d \break}  e }
+
+}
+}
diff --git a/input/regression/repeat-unfold.ly b/input/regression/repeat-unfold.ly
new file mode 100644 (file)
index 0000000..cb965c1
--- /dev/null
@@ -0,0 +1,25 @@
+\header{
+texidoc="
+LilyPond has three modes for repeats: folded, unfolded and
+semi-unfolded.  Unfolded repeats are fully written out. Semi unfolded
+repeats have the body written and all alternatives sequentially.
+Folded repeats have the body written and all alternatives
+simultaneo.ly.  If the number of alternatives is larger than the
+repeat count, the excess alternatives are ignored.  If the number of
+alternatives is smaller, the first alternative is multiplied to get to
+the number of repeats.
+
+Unfolded behavior:
+";
+}
+
+\score {
+
+  \context Voice \notes\relative c'' {
+\repeat unfold 3 { c^"3x 0a" d }
+% less alts than body
+\repeat unfold 4 { c^"4x 0a" d } \alternative { e f }
+% more alts than body
+\repeat unfold 2 { c^"2x 3a" d } \alternative { e f g } 
+}}
+
diff --git a/input/regression/repeat-volta.ly b/input/regression/repeat-volta.ly
new file mode 100644 (file)
index 0000000..634ba4d
--- /dev/null
@@ -0,0 +1,25 @@
+\header{
+texidoc="
+Volta (Semi folded) behavior.  Voltas can start on non-barline moments.
+If they don't barlines should still be shown.
+";
+}
+
+%  no alts.
+\score { \notes
+  \relative c'' {
+% repeat non aligning with barlines.
+e
+\repeat volta 3 { c^"3$\\times$ 0alt" d e }
+% less alts than body
+\repeat volta 4 { c^"4$\\times$ 2alt" d } \alternative { e f }
+
+% more alts than body
+\repeat volta 2 { c^"2$\\times$ 3alt" d } \alternative { e f g } 
+}
+
+       \midi{}
+       \paper{}
+
+}
+
diff --git a/input/regression/rest-collision.ly b/input/regression/rest-collision.ly
new file mode 100644 (file)
index 0000000..276afa5
--- /dev/null
@@ -0,0 +1,61 @@
+\header{
+texidoc="
+Rests should not collide with beams, stems and noteheads.  Rests may
+be under beams.  Rests should be move by integral number of spaces
+inside the staff, and by half spaces outside.  Notice that the half
+and whole rests just outside the staff get ledger lines in different
+cases.
+";
+}
+
+scale =  \notes \relative c' {
+  c8 d e f g a b c c d e f g a b c
+
+}
+rests =  \notes             {
+  r r r  r r r r r r r r r r r r r
+} 
+different = < \context Voice = one {
+      \stemUp
+      \notes \relative c'' {
+        r8 a e4 a e
+      }
+    }
+    \context Voice = two {
+      \stemDown
+      \notes \relative c'' {
+        r1
+      }} >
+
+scales =  \context Staff \notes <
+       \context Voice=i { \stemUp r1 r2 r2   \scale    c''1 c'2 a'2 \rests  }
+       \context Voice = ii { \stemDown a'1 a'2 d'2 \rests r1 r2 r2  \scale }
+>
+
+restsII =  \context Staff \notes {
+       r4 r8
+       \context Staff < { \stemUp r8 } { \stemDown r8} >
+       \context Staff < {\stemUp r8} r8 { \stemDown r8} >
+       \context Staff < {\stemUp r8} r8 r8 { \stemDown r8} >
+       \context Staff < {\stemUp r} { \stemDown r} >
+       \context Staff < {\stemUp r} r { \stemDown r} >
+       \stemUp
+       \transpose c'' { [c''8 r8 c''8 c''8]
+       [c8 r8 c8 c8]
+       [c8 r8 r8 c'''8]        
+       \stemDown
+       [c8 r8 c8 c8]
+       [c''8 r8 c''8 c''8]
+       [c'8 r8 r8 c'''8]
+       \different      
+       }
+}
+
+\score{
+       \notes { 
+               \scales 
+               \restsII 
+       }
+}      
+
+\version "1.3.117"; 
diff --git a/input/regression/rest.ly b/input/regression/rest.ly
new file mode 100644 (file)
index 0000000..0e7eea1
--- /dev/null
@@ -0,0 +1,16 @@
+\header{
+texidoc="
+Rests.  Note that the dot of 8th, 16th and 32nd rests rest should be
+next to the top of the rest.  All rests except the whole rest are
+centered on the middle staff line.
+";
+}
+
+
+       \score { \notes {
+       \time 4/4;
+r \longa * 1/4  r\breve * 1/2 
+r1 r2 r4 r8 r16 r32 r64 r128 r128
+\time 6/4;
+r1. r2. r4. r8. r16. r32. r64. r128. r128.
+}}
diff --git a/input/regression/size11.ly b/input/regression/size11.ly
new file mode 100644 (file)
index 0000000..6bc299b
--- /dev/null
@@ -0,0 +1,10 @@
+\header{
+texidoc="
+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
+to match the staff dimensions.    
+";
+}
+
+\include "paper11.ly"
+\include "allfontstyle.ly";
diff --git a/input/regression/size13.ly b/input/regression/size13.ly
new file mode 100644 (file)
index 0000000..ac58c4d
--- /dev/null
@@ -0,0 +1,2 @@
+\include "paper13.ly"
+\include "allfontstyle.ly";
diff --git a/input/regression/size16.ly b/input/regression/size16.ly
new file mode 100644 (file)
index 0000000..69352ff
--- /dev/null
@@ -0,0 +1,2 @@
+\include "paper16.ly"
+\include "allfontstyle.ly";
diff --git a/input/regression/size20.ly b/input/regression/size20.ly
new file mode 100644 (file)
index 0000000..d76a6cd
--- /dev/null
@@ -0,0 +1,2 @@
+\include "paper20.ly"
+\include "allfontstyle.ly";
diff --git a/input/regression/size23.ly b/input/regression/size23.ly
new file mode 100644 (file)
index 0000000..c5accc9
--- /dev/null
@@ -0,0 +1,2 @@
+\include "paper23.ly"
+\include "allfontstyle.ly";
diff --git a/input/regression/size26.ly b/input/regression/size26.ly
new file mode 100644 (file)
index 0000000..919c6e0
--- /dev/null
@@ -0,0 +1,2 @@
+\include "paper26.ly"
+\include "allfontstyle.ly";
diff --git a/input/regression/slur-attachment.ly b/input/regression/slur-attachment.ly
new file mode 100644 (file)
index 0000000..7a00de8
--- /dev/null
@@ -0,0 +1,19 @@
+\header{
+texidoc="
+Slurs should be attached to note heads, except when they would collide
+with beams.  Also see: ophee-slurs.
+";
+}
+\score{
+       \notes \relative c''{
+               \property Voice.Slur \set #'direction = #1
+               a8( a )a4
+               a4( a8 )a
+               a8 a()a4
+               a4() a8 a
+       }
+       \paper{ 
+               indent = 0.0;
+               linewidth = 100.\mm;
+       }
+}
diff --git a/input/regression/slur-broken-trend.ly b/input/regression/slur-broken-trend.ly
new file mode 100644 (file)
index 0000000..868d156
--- /dev/null
@@ -0,0 +1,21 @@
+\header{
+texidoc="
+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.
+";
+}
+\score{
+       \notes \relative c''{
+               e1( \break) a,
+               \time 2/4;
+               e'2( \break) a,(\break
+               a2\break
+               )e'2
+       }
+       \paper {
+               linewidth=40.\mm;
+               indent=0.;
+       }
+}
diff --git a/input/regression/slur-cross-staff.ly b/input/regression/slur-cross-staff.ly
new file mode 100644 (file)
index 0000000..e2ada8c
--- /dev/null
@@ -0,0 +1,48 @@
+\header{
+texidoc="
+The same goes for slurs. They behave decently when broken across
+linebreak.
+";
+}
+
+       
+\score{
+       \context PianoStaff <
+       \context Staff=one \notes\relative c'{
+               \stemUp \slurUp
+                c4( c \translator Staff=two c )c |
+               \translator Staff=one
+               \stemUp \slurUp
+                c4( c \translator Staff=two c )c |
+               \stemUp \slurUp
+                c4( c \translator Staff=one c )c |
+               \translator Staff=two
+               \stemUp \slurUp
+                c4( c \translator Staff=one c )c |
+               \translator Staff=two
+               \stemUp \slurUp
+                c4( \translator Staff=one c c )c |
+               r2
+               \translator Staff=two
+               \stemUp \slurUp
+                c4( \translator Staff=one c
+                  \break
+               c )c
+               r2
+%              \stemDown \slurDown
+%               c4( \translator Staff=two c c \translator Staff=one )c
+               \stemDown \slurDown
+                d4( \translator Staff=two c c \translator Staff=one )d
+               \translator Staff=two
+               \stemUp \slurUp
+                c4( \translator Staff=one c c \translator Staff=two )c
+               r1
+       }
+       \context Staff=two \notes\relative c'{
+               \clef bass;
+               s1 s1 s1 s1 s1 s1 s1 s1 s1 s1
+       }
+       >
+}
+
+\version "1.3.117"; 
diff --git a/input/regression/slur-nice.ly b/input/regression/slur-nice.ly
new file mode 100644 (file)
index 0000000..fce8f94
--- /dev/null
@@ -0,0 +1,23 @@
+\header{
+texidoc="
+Slurs should look nice and symmetric.  The curvature may increase
+only to avoid noteheads, and as little as possible.  Slurs never
+run through noteheads or stems.
+";
+}
+\version "1.3.117";
+\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;
+       }
+}
diff --git a/input/regression/slur-symmetry-1.ly b/input/regression/slur-symmetry-1.ly
new file mode 100644 (file)
index 0000000..6e2ea7c
--- /dev/null
@@ -0,0 +1,14 @@
+\score{
+       \notes\relative c''<
+               \time 4/4;
+               \context Staff{
+                       f8(f f)f f(g g)f f(a a)f f(b b)f
+               }
+               \context Staff=x{
+                       e,(e e)e e(d d)e e(c c)e e(b b)e
+               }
+       >
+       \paper{
+               linewidth=-1.;
+       }
+}
diff --git a/input/regression/slur-symmetry.ly b/input/regression/slur-symmetry.ly
new file mode 100644 (file)
index 0000000..41ebe83
--- /dev/null
@@ -0,0 +1,14 @@
+\score{
+       \notes\relative c'<
+               \time 6/8;
+               \context Staff{
+                       e8(e)e e(d)e e(c)e e(b)e
+               }
+               \context Staff=x{
+                       f'8(f)f f(g)f f(a)f f(b)f
+               }
+       >
+       \paper{
+               linewidth=-1.;
+       }
+}
diff --git a/input/regression/spacing-loose.ly b/input/regression/spacing-loose.ly
new file mode 100644 (file)
index 0000000..eaac633
--- /dev/null
@@ -0,0 +1,11 @@
+\header{
+texidoc="
+Loose:
+";
+}
+\score {
+       \notes { \time 2/2; c'2 c'2 \time 2/2; }
+       \paper { linewidth = 5.0\cm;
+       indent = 0.0;
+       }
+}
diff --git a/input/regression/spacing-natural.ly b/input/regression/spacing-natural.ly
new file mode 100644 (file)
index 0000000..74e9f6f
--- /dev/null
@@ -0,0 +1,13 @@
+\header{
+texidoc="
+Natural:
+";
+}
+
+\score {
+       \notes { \time 2/2; c'2 c'2 \time 2/2; }
+       \paper { linewidth = -1.0 \cm;
+       indent = 0.0;
+       }
+}
+
diff --git a/input/regression/spacing-tight.ly b/input/regression/spacing-tight.ly
new file mode 100644 (file)
index 0000000..75c7d16
--- /dev/null
@@ -0,0 +1,21 @@
+\header{
+texidoc="
+If there are accidentals in the music, we add space, but the space
+between note and accidentals is less than between the notes with the
+same value.  Clef changes also get extra space, but not as much as
+barlines.
+
+Even if a line is very tightly spaced, there will still be room
+between prefatory matter and the following notes.  The space after the
+prefatory is very rigid.  In contrast, the space before the barline
+must stretch like the space within the measure.
+
+Tight:
+";
+}
+\score {
+       \notes { \time 2/2; f''2 c'2 \time 2/2; }
+       \paper { linewidth = 2.5 \cm;
+       indent = 0.0;
+       }
+}
diff --git a/input/regression/staccato-pos.ly b/input/regression/staccato-pos.ly
new file mode 100644 (file)
index 0000000..aa3ac8a
--- /dev/null
@@ -0,0 +1,18 @@
+\header{
+texidoc="
+The staccato dot (and all scripts with follow-into-staff set), must
+not be on staff lines.
+";
+}
+\score { 
+  \context Voice \notes\relative c {
+    
+       e''4-. f-. d-.
+       c,-. b-. c'''-. d-.
+       
+  }
+  \paper {
+    linewidth=-1.0;
+  }  
+  \midi { }
+}
diff --git a/input/regression/staff-margin.ly b/input/regression/staff-margin.ly
new file mode 100644 (file)
index 0000000..bb2b30f
--- /dev/null
@@ -0,0 +1,28 @@
+\header{
+texidoc="
+Staff margins are also markings attached to barlines.  They should be
+left of the staff, and be centered vertically wrt the staff.  They may
+be on normal staffs, but also on compound staffs, like the PianoStaff
+";
+}
+
+       
+\version "1.3.117";
+
+\score {
+
+  \notes \context PianoStaff <
+    \context Staff = treble    {
+      \property PianoStaff.instrument = "Piano "
+      \property Staff.instrument = "Right " { c''4 }}
+    \context Staff = bass { \property Staff.instrument = "Left " \clef bass; c4 }>
+
+\paper {
+linewidth=-1.0;
+\translator { \ScoreContext
+       
+       }
+\translator { \StaffContext \consists "Instrument_name_engraver"; }
+\translator { \PianoStaffContext \consists "Instrument_name_engraver"; }
+}}
+
diff --git a/input/regression/stem-direction-down.ly b/input/regression/stem-direction-down.ly
new file mode 100644 (file)
index 0000000..1733d39
--- /dev/null
@@ -0,0 +1,15 @@
+\header{
+texidoc="
+@c FIXME
+Similarly, if @code{stem_default_neutral_direction} is set to @code{-1}.
+";
+}
+
+\score{
+       \notes\relative c{
+           b''4 ~ b8()b8 e4 e,
+       }
+       \paper{
+               stem_default_neutral_direction=-1.0;
+       }
+}
diff --git a/input/regression/stem-direction.ly b/input/regression/stem-direction.ly
new file mode 100644 (file)
index 0000000..78f20f5
--- /dev/null
@@ -0,0 +1,23 @@
+\header{
+texidoc="
+Beams, stems and noteheads often have communication troubles, since
+the two systems for y dimensions (1 unit = staffspace, 1 unit = 1
+point) are mixed.
+
+Stems, beams, ties and slurs should behave similarly, when placed
+on the middle staff line. Of course stem-direction is down for high
+notes, and up for low notes.
+";
+}
+
+
+\score { 
+  \context Voice \notes\relative c {
+    b''4 ~ b8()b8 e4 e,
+       
+  }
+  \paper {
+    linewidth=-1.0;
+  }  
+  \midi { }
+}
diff --git a/input/regression/stem-spacing.ly b/input/regression/stem-spacing.ly
new file mode 100644 (file)
index 0000000..765416f
--- /dev/null
@@ -0,0 +1,17 @@
+\header{
+texidoc="
+In a limited number of cases, LilyPond corrects for optical spacing
+effects.  In this example, space for opposite pointed stems is adjuste
+";
+}
+\score { 
+  \context Voice \notes\relative c {
+    
+       \time 12/4;  c''4 c c c  a f' f, a 
+       
+  }
+  \paper {
+    linewidth=-1.0;
+  }  
+  \midi { }
+}
diff --git a/input/regression/stem-tremolo.ly b/input/regression/stem-tremolo.ly
new file mode 100644 (file)
index 0000000..3493dab
--- /dev/null
@@ -0,0 +1,29 @@
+\header{
+texidoc="
+Stem tremolos or rolls are tremolo signs that look like beam segments
+crossing stems.  If the stem is in a beam, the tremolo must be parallel
+to the beam.  If the stem is invisible (eg. on a whole note), the
+tremolo must be centered on the note.
+";
+}
+
+\version "1.3.117";
+\score{
+       \context Voice\notes \relative c''{
+               \property Voice.Text \set #'direction = #1
+               \property Voice.TextScript \set #'padding = #5
+               a1:4^":4" a:8^":8" c:16^":16" a:32^":32" a^"x" a:^":"
+               a4:4 c:8 a:16 c:32 a a: a2:
+               \break
+               \stemUp
+               a4:32 a'4:64 
+               \stemDown
+               c,4:32 c,4:64
+               \stemBoth
+               c'8:16 c c c
+               a': a a: a
+               c,16:32 c: c c a16:32 a: a a
+               c8:16 g: d: a:
+               c8:32 f: b: e:
+       }
+}
diff --git a/input/regression/tie-accidental.ly b/input/regression/tie-accidental.ly
new file mode 100644 (file)
index 0000000..8faf34a
--- /dev/null
@@ -0,0 +1,37 @@
+\header{
+texidoc="
+When tieing notes with accidentals across a bar boundary, the accidental
+must not be drawn on the note in the new bar.  Instead, the next note of
+the same pitch in this bar should always show the accidental (even if
+it's natural).  Slurring a accidentaled note to a natural one across bar
+boundaries should be explicit.
+
+Pitches can be verified by printing them  with the @code{NoteNames} context.
+";
+}
+
+thenotes = \notes \relative cis' { \time 4/4;
+g'2 g ~ |
+g g4 gis |
+gis2 gis ~ |
+gis4 gis8 ~ gis g4 gis |
+g2 gis ~ |
+gis g4 gis |
+g2 gis( |
+)g! gis4 gis |
+\break
+\key a \major;
+gis2 gis ~ |
+gis4 gis8 ~ gis g4 gis |
+gis2 g ~ |
+g4 gis8 ~ gis g4 gis |
+g2 gis ~ |
+gis g4 gis |
+g2 gis( |
+)g! gis4 gis | 
+}
+
+\score { < \context Staff \thenotes
+       \context NoteNames \thenotes
+       >
+}
diff --git a/input/regression/tie-chord.ly b/input/regression/tie-chord.ly
new file mode 100644 (file)
index 0000000..2068c37
--- /dev/null
@@ -0,0 +1,21 @@
+\header{
+texidoc="
+When tieing chords, the outer slurs point outwards, the inner slurs
+point away from the center of the staff.  Override with
+@code{tieVerticalDirection}.
+";
+}
+\version "1.3.117";
+
+t =  \notes \relative c' {   <c e g> ~ <c e g> }
+
+       \score { 
+\notes \context Voice {
+   \t
+   \transpose g' \t
+
+   \property Voice.TieColumn \override #'direction = #-1
+   \t
+
+  }
+}
diff --git a/input/regression/tie.ly b/input/regression/tie.ly
new file mode 100644 (file)
index 0000000..6cc474c
--- /dev/null
@@ -0,0 +1,19 @@
+\header{
+texidoc="
+Ties are strictly horizontal.  They are placed in between note heads.
+The horizontal middle should not overlap with a staffline.
+";
+}
+\score{
+       \notes\relative c''{
+               %b2~b4~b8~b16~b32~b64 r64\break
+               %a2~a4~a8~a16~a32~a64 r64
+               \time 8/4;
+               d1 ~ d2~d4~d8~d16~d32~d64 r64\break
+               a1~ a2~a4~a8~a16~a32~a64 r64
+               %c2~c4~c8~c16~c32~c64 r64
+       }
+       \paper{
+               linewidth=0.;
+       }
+}
diff --git a/input/regression/triplets.ly b/input/regression/triplets.ly
new file mode 100644 (file)
index 0000000..802727f
--- /dev/null
@@ -0,0 +1,27 @@
+\header {
+texidoc="Simple beams.  This broke somewhere < 1.3.110
+";
+  title = "Gammes Chromatiques";
+  composer = "";
+  filename = "gammes_chromatiques.ly";
+}
+
+linebreak = \penalty -1000;
+
+$ex8 = \notes \relative c' {
+  \repeat "volta" 2 {
+    \times 2/3 {c8( cis d} \times 2/3 {dis e f} 
+    \times 2/3 {fis g gis} \times 2/3 {a bes b} |
+    \property Voice.TupletBracket \override #'tuplet-number-visibility = ##f
+    \property Voice.TupletBracket \override #'tuplet-bracket-visibility = ##f
+    \times 2/3 {c8 cis d} \times 2/3 {dis e f} 
+    \times 2/3 {fis g gis} \times 2/3 {a bes b} |
+    \times 2/3 {c b bes} \times 2/3 {a aes g}
+    \times 2/3 {fis f e} \times 2/3 {ees d des} |
+    \times 2/3 {c b bes} \times 2/3 {a aes g}
+    \times 2/3 {fis f e} \times 2/3 {ees d )des}
+  }
+  c1 || \linebreak
+}
+
+\score { \context Staff { \notes { \$ex8 } } }
diff --git a/input/regression/tup.ly b/input/regression/tup.ly
new file mode 100644 (file)
index 0000000..649feb5
--- /dev/null
@@ -0,0 +1,19 @@
+\header{
+texidoc="
+Tuplets are indicated by a bracket with a number.  There should be no
+bracket if there is one beam that matches  the length of the tuplet.
+The bracket does not interfere with the stafflines, and the number is
+centered in the gap in the bracket.
+";
+}
+\score{
+       \notes \context Voice \relative c'' {
+                \times 2/3 { \times 2/3 { a8 b c}  c }
+                \times 3/4 { c4 c4 c4 c4 }
+                \time 6/8;
+                \times 6/9 { c8 c c c c c c c c }
+
+                }
+}
+
+\version "1.3.117"; 
index 99160b7dd148990464765faead1f3fc4393ccec6..be3360d573eea63b9407e2069548f06e87bf05a8 100644 (file)
@@ -77,7 +77,8 @@ c1 | c2 c | c c | R1*5
       \m
     >
     \context Staff = vlc <
-      \property Staff.instrument = "Violoncello"
+      %% \property Staff.instrument = "Violoncello"
+      \property StaffCombineStaff.instrument = #'(lines "Violoncello" "e" "Contrabasso")
       \property Staff.instr = "Vlc"
       \m
     >
@@ -93,8 +94,12 @@ c1 | c2 c | c c | R1*5
     linewidth = 185.\mm;
     textheight = 260.\mm;
     \translator {
-       \OrchestralScoreContext
-%      barNumberScriptPadding = 10;
+      \OrchestralScoreContext
+      skipBars = ##t 
+      markScriptPadding = #4.0
+      BarNumber \override $'padding = #3
+      RestCollision \override #'maximum-rest-count = #1
+      marginScriptHorizontalAlignment = #1
     }
     \translator { \HaraKiriStaffContext
     }
index 4b18be26ebc2c147189aff40b7811d2f01dc5baa..8ac599334a73c9bf6e8a2a9f0e55bcc4f486c46e 100644 (file)
@@ -187,11 +187,20 @@ Beam::consider_auto_knees (Grob *me)
       
       Grob *common = me->common_refpoint (stems[0], Y_AXIS);
       for (int i=1; i < stems.size (); i++)
-       common = common->common_refpoint (stems[i], Y_AXIS);
-      
+       if (!Stem::invisible_b (stems[i]))
+         common = common->common_refpoint (stems[i], Y_AXIS);
+
+      int l = 0;
       for (int i=1; i < stems.size (); i++)
         {
-         Real left = Stem::extremal_heads (stems[i-1])[d]
+         if (!Stem::invisible_b (stems[i-1]))
+           l = i - 1;
+         if (Stem::invisible_b (stems[l]))
+           continue;
+         if (Stem::invisible_b (stems[i]))
+           continue;
+         
+         Real left = Stem::extremal_heads (stems[l])[d]
            ->relative_coordinate (common, Y_AXIS);
          Real right = Stem::extremal_heads (stems[i])[d]
            ->relative_coordinate (common, Y_AXIS);
@@ -210,6 +219,8 @@ Beam::consider_auto_knees (Grob *me)
        {
          for (int i=0; i < stems.size (); i++)
            {
+             if (Stem::invisible_b (stems[i]))
+               continue;
              Item *s = stems[i];         
              Real y = Stem::extremal_heads (stems[i])[d]
                ->relative_coordinate (common, Y_AXIS);
@@ -530,7 +541,8 @@ Beam::set_stem_length (Grob*me,Real y, Real dy)
   
   Grob *common = me->common_refpoint (stems[0], Y_AXIS);
   for (int i=1; i < stems.size (); i++)
-    common = common->common_refpoint (stems[i], Y_AXIS);
+    if (!Stem::invisible_b (stems[i]))
+      common = common->common_refpoint (stems[i], Y_AXIS);
 
   for (int i=0; i < stems.size (); i++)
     {
index e640d0a7d0fc31642fd97cf54b56bee2ec8c97e4..c87490d952e995f40decb5379147882dc14d7268 100644 (file)
@@ -24,7 +24,6 @@
 #include "beam.hh"
 #include "rest.hh"
 #include "group-interface.hh"
-// #include "cross-staff.hh"
 #include "staff-symbol-referencer.hh"
 #include "spanner.hh"
 
index 55af3b8196f2441afa58017df2ee8522128533c8..cf792f086b22796612fe09d6a3c3e2dc51fcf205 100644 (file)
@@ -15,6 +15,7 @@
 #include "font-interface.hh"
 #include "all-font-metrics.hh"
 #include "grob.hh"
+#include "staff-symbol-referencer.hh"
 #include "lookup.hh"
 
 Molecule
@@ -86,21 +87,26 @@ SCM
 System_start_delimiter::brew_molecule (SCM smob)
 {
   Grob * me = unsmob_grob (smob);
-  Interval ext = ly_scm2interval (Axis_group_interface::group_extent_callback (me->self_scm(), gh_int2scm (Y_AXIS)));
-  Real l = ext.length (); 
-  Molecule m;
 
-  SCM s = me->get_grob_property ("collapse-height");
-  if (gh_number_p (s) && l < gh_scm2double (s))
+  SCM s = me->get_grob_property ("glyph");
+  if (!gh_symbol_p (s))
+    return SCM_EOL;
+  
+  SCM c = me->get_grob_property ((ly_symbol2string (s) + "-collapse-height")
+                                .ch_C ());
+  
+  Real staff_space = Staff_symbol_referencer::staff_space (me);
+  Interval ext = ly_scm2interval (Axis_group_interface::group_extent_callback
+                                 (me->self_scm(), gh_int2scm (Y_AXIS)));
+  Real l = ext.length () / staff_space;
+  
+  if (gh_number_p (c) && l <= gh_scm2double (c))
     {
       me->suicide();
       return SCM_EOL;
     }
 
-  s = me->get_grob_property ("glyph");
-  if (!gh_symbol_p(s))
-    return SCM_EOL;
-  
+  Molecule m;
   if (s == ly_symbol2scm ("bracket"))
     m = staff_bracket (me,l);
   else if (s == ly_symbol2scm ("brace"))
@@ -108,7 +114,6 @@ System_start_delimiter::brew_molecule (SCM smob)
   else if (s == ly_symbol2scm ("bar-line"))
     m = simple_bar (me,l);
   
-  
   m.translate_axis (ext.center (), Y_AXIS);
   return m.smobbed_copy ();
 }
index 0577bae6e3390b37c3847c864ae829e57d250e81..be65503ea0052fb2834c23e8bf5f157d13b81bfa 100644 (file)
@@ -5,21 +5,21 @@
 
 $(outdir)/%.latex: %.doc
        rm -f $@
-       LILYPONDPREFIX=$(LILYPONDPREFIX)/..  $(PYTHON) $(script-dir)/lilypond-book.py --outdir=$(outdir) -I $(pwd) -I $(input-dir)/test/ --dependencies --dep-prefix=$(outdir)/ $<
+       LILYPONDPREFIX=$(LILYPONDPREFIX)/..  $(PYTHON) $(script-dir)/lilypond-book.py --outdir=$(outdir) -I $(pwd) -I $(input-dir)/features/ -I $(input-dir)/regression/ -I $(input-dir)/test/ --dependencies --dep-prefix=$(outdir)/ $<
        chmod -w $@
 
 # don't do ``cd $(outdir)'', and assume that $(outdir)/.. is the src dir.
 # it is not, for --scrdir builds
 $(outdir)/%.texi: %.tely
        rm -f $@
-       LILYPONDPREFIX=$(LILYPONDPREFIX)/..  $(PYTHON) $(script-dir)/lilypond-book.py --outdir=$(outdir) -I $(pwd) -I $(input-dir)/test/ --dependencies --format=texi $<
+       LILYPONDPREFIX=$(LILYPONDPREFIX)/..  $(PYTHON) $(script-dir)/lilypond-book.py --outdir=$(outdir) -I $(pwd) -I $(input-dir)/features/ -I $(input-dir)/regression/ -I $(input-dir)/test/ --dependencies --format=texi $<
        chmod -w $@
 
 # nexi: no-lily texi
 # for plain info doco: don't run lily
 $(outdir)/%.nexi: %.tely
        rm -f $@
-       LILYPONDPREFIX=$(LILYPONDPREFIX)/..  $(PYTHON) $(script-dir)/lilypond-book.py --outdir=$(outdir) --no-lily -I $(pwd) -I $(input-dir)/test/ --dependencies --dep-prefix=$(outdir)/ --format=texi $<
+       LILYPONDPREFIX=$(LILYPONDPREFIX)/..  $(PYTHON) $(script-dir)/lilypond-book.py --outdir=$(outdir) --no-lily -I $(pwd) -I $(input-dir)/features/ -I $(input-dir)/regression/ -I $(input-dir)/test/ --dependencies --dep-prefix=$(outdir)/ --format=texi $<
        mv $(@D)/$(*F).texi $@
        chmod -w $@
 
index 9dfc0367f56647aa332e6a028f4ccef645a02674..a9edd675b43cdc08d6f8fb58a05ecfc6fa9a8bd2 100644 (file)
                \accepts "StaffCombineStaff";
                skipBars = ##t 
 
-               barScriptPadding = #2.0 % dimension \pt
                markScriptPadding = #4.0
 
-               %% urg: in pt?
-               barNumberScriptPadding = #15
-               maximumRestCount = #1
+               BarNumber \override #'padding = #3
+               RestCollision \override #'maximum-rest-count = #1
        }
 }
index 3ba4e4aef849bb08486997462ad039d1d31fda6c..bdc564dcc8eeea810b7717c2021ca34bf4cfc762 100644 (file)
@@ -18,6 +18,6 @@
                %%textStyle = #"italic"
                timeSignatureStyle = #"C"
                marginScriptHorizontalAlignment = #1
-               maximumRestCount = #1
+               RestCollision \override #'maximum-rest-count = #1
        }
 }
index a76fa118b8831b77f5375959612b46a9950cb0f1..dd7a0392d6640ab317f6b66f507b7467582822a8 100644 (file)
@@ -25,7 +25,7 @@ couranteViolaScripts =  \notes{
 }
 
 couranteViolaStaff =  \context Staff <
-       \notes \transpose c' \courante
+       \notes \transpose c'' \courante
        \couranteViolaGlobal
        \couranteViolaScripts
 >
index bc7d291abc7f0882d3f38b7f951a106505610abe..d8efcf42885c2196c0fd76157be96dc00d79480d 100644 (file)
@@ -27,7 +27,7 @@ gigueViolaScripts =  \notes{
 }
 
 gigueViolaStaff =  \context Staff <
-       \notes \transpose c' \gigue
+       \notes \transpose c'' \gigue
        \gigueViolaGlobal
        \gigueViolaScripts
 >
index 5ac93c3f0ada2b1ecff85a7c81abd0aaad76f98a..69db680783a6a950cc45a96df364b1ee03be36fc 100644 (file)
@@ -40,7 +40,7 @@ menuettoIViolaScripts =  \notes{
 }
 
 menuettoIViolaStaff =  \context Staff <
-       \notes \transpose c' \menuettoI
+       \notes \transpose c'' \menuettoI
        \menuettoIViolaGlobal
 %      \menuettoIViolaScripts
 >
@@ -79,7 +79,7 @@ menuettoIiViolaGlobal =  \notes{
 }
 
 menuettoIiViolaStaff =  \context Staff <
-       \notes \transpose c' \menuettoIi
+       \notes \transpose c'' \menuettoIi
        \menuettoIiViolaGlobal
 %      \menuettoIiViolaScripts
 >
index 405dce2e3188f42ced2293cccadb03573557d743..cf17a8bb7130f9c77064068d33fecfb65c107ca4 100644 (file)
@@ -17,7 +17,7 @@ preludeViolaScripts =  \notes{
 }
 
 preludeViolaStaff =  \context Staff <
-       \notes \transpose c' \prelude
+       \notes \transpose c'' \prelude
        \preludeViolaGlobal
        \preludeViolaScripts
 >
index d82f07b2999a7956d8f0c36432aab25eb12e3a4e..a797f9202786ca8c98bdca6bcd4ed2887d52aa77 100644 (file)
@@ -17,7 +17,7 @@ sarabandeViolaScripts =  \notes{
 }
 
 sarabandeViolaStaff =  \context Staff <
-       \notes \transpose c' \sarabande
+       \notes \transpose c'' \sarabande
        \sarabandeViolaGlobal
        \sarabandeViolaScripts
 >
index 043f35673428ac90d8649c6db3e6b82b9e17a778..47ee15416f3cec19545277210cdcf70e99de0a06 100644 (file)
@@ -70,6 +70,7 @@
                 (flag-width-function . ,default-beam-flag-width-function)
                 (space-function . ,default-beam-space-function)
                 (damping . 1)
+                (auto-knee-gap . 7)
                 (meta . ,(grob-description "Beam" beam-interface))
                 ))
         
        (SystemStartDelimiter . (
                (molecule-callback . ,System_start_delimiter::brew_molecule)
                (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking)
-               (collapse-height . 1.0)
+               ;; ugh, in practice, brace has height of 4.1 staff-spaces
+               (brace-collapse-height . 4.1)
+               (bracket-collapse-height . 1)
                (thickness . 1.6)
                (arch-height . 1.5)
                (arch-angle . 50.0)
index fd5ed70f1387064ba042a4acd6d1788a1e7d9356..ce5875078973d0d8536fa5eb954dbc4ddb3e0bfb 100644 (file)
@@ -84,7 +84,10 @@ column as start/begin point. Only columns that have grobs or act as bounds are s
 be at the center of the group after aligning (when using
 Align_interface::center_on_element). .")
 (grob-property-description 'chordChanges boolean? "only show changes in chord scheme?.")
-(grob-property-description 'collapse-height number? "Minimum height of system start delimiter. If smaller, the delimiter is removed.")
+(grob-property-description 'brace-collapse-height number? "Minimum height of system start delimiter brace glyphs.  If equal or smaller, the brace is removed.")
+(grob-property-description 'bracket-collapse-height number? "Minimum height of system start delimiter bracket glyphs.  If equal or smaller, the bracket is removed.")
+(grob-property-description 'bar-line-collapse-height number? "Minimum height of system start delimiter bar-line glyphs.  If equal or smaller, the bar-line is removed.")
+(grob-property-description 'brace-collapse-height number? "Minimum height of system start delimiter brace glyph.  If equal or smaller, the brace is removed.")
 (grob-property-description 'column-space-strength number? "relative strength of space following breakable columns (eg. prefatory matter).")
 (grob-property-description 'columns list? "list of grobs, typically containing paper-columns, list of note-columns.")
 (grob-property-description 'contains-grace boolean? "Used to widen entries for grace notes.")
index f0c91aad996d782f618f02d76529ca0500c6d07f..704efe84ee5c775c82cb39925b16eacf5dd967cf 100644 (file)
@@ -25,6 +25,8 @@ Output: DVI file
 
 name = 'ly2dvi'
 version = '@TOPLEVEL_VERSION@'
+if version == '@' + 'TOPLEVEL_VERSION' + '@':
+       version = '(unknown version)'           # uGUHGUHGHGUGH
 errorlog = ''
 
 import sys
index afe4c3533583f7af42d56be8a07bb19c93053f82..b8d289b861612497507797b70ed512dd57e8dc3c 100644 (file)
@@ -1,14 +1,10 @@
 #!@PYTHON@
 
-#
-#
-#
-# 
-#
-#
+# PMX is a Musixtex preprocessor written by Don Simons, see
+# http://www.gmd.de/Misc/Music/musixtex/software/pmx/
 
-
-#fixme: block openings aren't parsed.
+# TODO:
+#  * block openings aren't parsed.
 
 import os
 import string
@@ -703,6 +699,8 @@ Huh? expected duration, found %d Left was `%s'""" % (durdigit, str[:20]))
                                left = left[1:]
                        elif c == '\\':
                                left = self.parse_mumbo_jumbo(left)
+                       elif c == '\r':
+                               left = left[1:]
                        else:
                                sys.stderr.write ("""
 Huh? Unknown directive `%s', before `%s'""" % (c, left[:20] ))