From aa91b39733b0c50fd6575dc54f9eac1bdd3b7ec1 Mon Sep 17 00:00:00 2001 From: fred Date: Wed, 27 Mar 2002 00:48:30 +0000 Subject: [PATCH] lilypond-1.3.126 --- Documentation/regression-test.tely | 2 + input/GNUmakefile | 2 +- input/features/GNUmakefile | 6 + input/features/beam-count.ly | 20 +++ input/features/beam-dir-function.ly | 40 +++++ input/features/beam-neutral-direction.ly | 13 ++ input/features/beam-position.ly | 13 ++ input/features/beam-rest.ly | 17 ++ input/features/beam-slope.ly | 13 ++ input/features/crescendo-text.ly | 15 ++ input/features/embedded-postscript.ly | 10 ++ input/features/embedded-tex.ly | 11 ++ input/features/follow-thread.ly | 26 +++ input/features/fragment.ly | 10 ++ input/features/metronome.ly | 30 ++++ input/features/move-notehead.ly | 13 ++ input/features/move-specific-text.ly | 12 ++ input/features/no-bar-lines.ly | 15 ++ input/features/no-staff.ly | 13 ++ input/features/ophee-slurs.ly | 18 ++ input/features/ottava.ly | 16 ++ input/features/part-combine.ly | 37 +++++ input/features/reverse-music.ly | 30 ++++ input/features/slur-attachment-override.ly | 21 +++ input/features/slur-attachment.ly | 17 ++ input/features/slur-ugly.ly | 35 ++++ input/features/smart-transpose.ly | 90 ++++++++++ input/regression/GNUmakefile | 6 + input/regression/accidental-single-double.ly | 29 ++++ input/regression/accidental.ly | 15 ++ input/regression/arpeggio.ly | 23 +++ input/regression/auto-beam-bar.ly | 20 +++ input/regression/auto-change.ly | 20 +++ input/regression/auto-isknee.ly | 25 +++ input/regression/auto-knee.ly | 17 ++ input/regression/bar-number.ly | 19 +++ input/regression/bar-scripts.ly | 41 +++++ input/regression/beam-cross-staff.ly | 32 ++++ input/regression/beam-extreme.ly | 19 +++ input/regression/beam-length.ly | 14 ++ input/regression/beam-position.ly | 22 +++ input/regression/beaming.ly | 27 +++ input/regression/between-systems.ly | 19 +++ input/regression/break.ly | 17 ++ input/regression/breathing-sign.ly | 27 +++ input/regression/chord-names.ly | 37 +++++ input/regression/chord-tremolo.ly | 20 +++ input/regression/clefs.ly | 37 +++++ input/regression/collisions.ly | 79 +++++++++ input/regression/dots.ly | 30 ++++ input/regression/dyn-line.ly | 27 +++ input/regression/generic-output-property.ly | 26 +++ input/regression/generic-property-override.ly | 17 ++ input/regression/glissando.ly | 30 ++++ input/regression/grace.ly | 30 ++++ input/regression/hara-kiri-short.ly | 40 +++++ input/regression/keys.ly | 26 +++ input/regression/lyric-combine.ly | 54 ++++++ input/regression/lyrics-bar.ly | 39 +++++ input/regression/lyrics-multi-stanza.ly | 154 ++++++++++++++++++ input/regression/mm-rests2.ly | 30 ++++ input/regression/molecule-hacking.ly | 73 +++++++++ input/regression/multi-measure-rest.ly | 20 +++ input/regression/non-empty-text.ly | 15 ++ input/regression/noteheadstyle.ly | 63 +++++++ input/regression/number-staff-lines.ly | 19 +++ input/regression/repeat-fold.ly | 14 ++ input/regression/repeat-line-break.ly | 16 ++ input/regression/repeat-unfold.ly | 25 +++ input/regression/repeat-volta.ly | 25 +++ input/regression/rest-collision.ly | 61 +++++++ input/regression/rest.ly | 16 ++ input/regression/size11.ly | 10 ++ input/regression/size13.ly | 2 + input/regression/size16.ly | 2 + input/regression/size20.ly | 2 + input/regression/size23.ly | 2 + input/regression/size26.ly | 2 + input/regression/slur-attachment.ly | 19 +++ input/regression/slur-broken-trend.ly | 21 +++ input/regression/slur-cross-staff.ly | 48 ++++++ input/regression/slur-nice.ly | 23 +++ input/regression/slur-symmetry-1.ly | 14 ++ input/regression/slur-symmetry.ly | 14 ++ input/regression/spacing-loose.ly | 11 ++ input/regression/spacing-natural.ly | 13 ++ input/regression/spacing-tight.ly | 21 +++ input/regression/staccato-pos.ly | 18 ++ input/regression/staff-margin.ly | 28 ++++ input/regression/stem-direction-down.ly | 15 ++ input/regression/stem-direction.ly | 23 +++ input/regression/stem-spacing.ly | 17 ++ input/regression/stem-tremolo.ly | 29 ++++ input/regression/tie-accidental.ly | 37 +++++ input/regression/tie-chord.ly | 21 +++ input/regression/tie.ly | 19 +++ input/regression/triplets.ly | 27 +++ input/regression/tup.ly | 19 +++ input/test/orchestscore.ly | 11 +- lily/beam.cc | 20 ++- lily/stem.cc | 1 - lily/system-start-delimiter.cc | 25 +-- make/ly-rules.make | 6 +- mutopia/Coriolan/coriolan-paper.ly | 6 +- mutopia/Coriolan/coriolan-part-paper.ly | 2 +- .../Solo-Cello-Suites/courante-viola.ly | 2 +- .../J.S.Bach/Solo-Cello-Suites/gigue-viola.ly | 2 +- .../Solo-Cello-Suites/menuetto-viola.ly | 4 +- .../Solo-Cello-Suites/prelude-viola.ly | 2 +- .../Solo-Cello-Suites/sarabande-viola.ly | 2 +- scm/grob-description.scm | 5 +- scm/grob-property-description.scm | 5 +- scripts/ly2dvi.py | 2 + scripts/pmx2ly.py | 14 +- 114 files changed, 2483 insertions(+), 43 deletions(-) create mode 100644 input/features/GNUmakefile create mode 100644 input/features/beam-count.ly create mode 100644 input/features/beam-dir-function.ly create mode 100644 input/features/beam-neutral-direction.ly create mode 100644 input/features/beam-position.ly create mode 100644 input/features/beam-rest.ly create mode 100644 input/features/beam-slope.ly create mode 100644 input/features/crescendo-text.ly create mode 100644 input/features/embedded-postscript.ly create mode 100644 input/features/embedded-tex.ly create mode 100644 input/features/follow-thread.ly create mode 100644 input/features/fragment.ly create mode 100644 input/features/metronome.ly create mode 100644 input/features/move-notehead.ly create mode 100644 input/features/move-specific-text.ly create mode 100644 input/features/no-bar-lines.ly create mode 100644 input/features/no-staff.ly create mode 100644 input/features/ophee-slurs.ly create mode 100644 input/features/ottava.ly create mode 100644 input/features/part-combine.ly create mode 100644 input/features/reverse-music.ly create mode 100644 input/features/slur-attachment-override.ly create mode 100644 input/features/slur-attachment.ly create mode 100644 input/features/slur-ugly.ly create mode 100644 input/features/smart-transpose.ly create mode 100644 input/regression/GNUmakefile create mode 100644 input/regression/accidental-single-double.ly create mode 100644 input/regression/accidental.ly create mode 100644 input/regression/arpeggio.ly create mode 100644 input/regression/auto-beam-bar.ly create mode 100644 input/regression/auto-change.ly create mode 100644 input/regression/auto-isknee.ly create mode 100644 input/regression/auto-knee.ly create mode 100644 input/regression/bar-number.ly create mode 100644 input/regression/bar-scripts.ly create mode 100644 input/regression/beam-cross-staff.ly create mode 100644 input/regression/beam-extreme.ly create mode 100644 input/regression/beam-length.ly create mode 100644 input/regression/beam-position.ly create mode 100644 input/regression/beaming.ly create mode 100644 input/regression/between-systems.ly create mode 100644 input/regression/break.ly create mode 100644 input/regression/breathing-sign.ly create mode 100644 input/regression/chord-names.ly create mode 100644 input/regression/chord-tremolo.ly create mode 100644 input/regression/clefs.ly create mode 100644 input/regression/collisions.ly create mode 100644 input/regression/dots.ly create mode 100644 input/regression/dyn-line.ly create mode 100644 input/regression/generic-output-property.ly create mode 100644 input/regression/generic-property-override.ly create mode 100644 input/regression/glissando.ly create mode 100644 input/regression/grace.ly create mode 100644 input/regression/hara-kiri-short.ly create mode 100644 input/regression/keys.ly create mode 100644 input/regression/lyric-combine.ly create mode 100644 input/regression/lyrics-bar.ly create mode 100644 input/regression/lyrics-multi-stanza.ly create mode 100644 input/regression/mm-rests2.ly create mode 100644 input/regression/molecule-hacking.ly create mode 100644 input/regression/multi-measure-rest.ly create mode 100644 input/regression/non-empty-text.ly create mode 100644 input/regression/noteheadstyle.ly create mode 100644 input/regression/number-staff-lines.ly create mode 100644 input/regression/repeat-fold.ly create mode 100644 input/regression/repeat-line-break.ly create mode 100644 input/regression/repeat-unfold.ly create mode 100644 input/regression/repeat-volta.ly create mode 100644 input/regression/rest-collision.ly create mode 100644 input/regression/rest.ly create mode 100644 input/regression/size11.ly create mode 100644 input/regression/size13.ly create mode 100644 input/regression/size16.ly create mode 100644 input/regression/size20.ly create mode 100644 input/regression/size23.ly create mode 100644 input/regression/size26.ly create mode 100644 input/regression/slur-attachment.ly create mode 100644 input/regression/slur-broken-trend.ly create mode 100644 input/regression/slur-cross-staff.ly create mode 100644 input/regression/slur-nice.ly create mode 100644 input/regression/slur-symmetry-1.ly create mode 100644 input/regression/slur-symmetry.ly create mode 100644 input/regression/spacing-loose.ly create mode 100644 input/regression/spacing-natural.ly create mode 100644 input/regression/spacing-tight.ly create mode 100644 input/regression/staccato-pos.ly create mode 100644 input/regression/staff-margin.ly create mode 100644 input/regression/stem-direction-down.ly create mode 100644 input/regression/stem-direction.ly create mode 100644 input/regression/stem-spacing.ly create mode 100644 input/regression/stem-tremolo.ly create mode 100644 input/regression/tie-accidental.ly create mode 100644 input/regression/tie-chord.ly create mode 100644 input/regression/tie.ly create mode 100644 input/regression/triplets.ly create mode 100644 input/regression/tup.ly diff --git a/Documentation/regression-test.tely b/Documentation/regression-test.tely index 95d4f9b9ce..f7fb0eb9d2 100644 --- a/Documentation/regression-test.tely +++ b/Documentation/regression-test.tely @@ -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} diff --git a/input/GNUmakefile b/input/GNUmakefile index f9ab946b3a..20cb71ba46 100644 --- a/input/GNUmakefile +++ b/input/GNUmakefile @@ -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 index 0000000000..558771769c --- /dev/null +++ b/input/features/GNUmakefile @@ -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 index 0000000000..89167f101e --- /dev/null +++ b/input/features/beam-count.ly @@ -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 index 0000000000..d445468a09 --- /dev/null +++ b/input/features/beam-dir-function.ly @@ -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 index 0000000000..f8e156810c --- /dev/null +++ b/input/features/beam-neutral-direction.ly @@ -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 index 0000000000..bf14a7fee8 --- /dev/null +++ b/input/features/beam-position.ly @@ -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 index 0000000000..736a84708e --- /dev/null +++ b/input/features/beam-rest.ly @@ -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 index 0000000000..254a5cbc89 --- /dev/null +++ b/input/features/beam-slope.ly @@ -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 index 0000000000..b9b6edbf8a --- /dev/null +++ b/input/features/crescendo-text.ly @@ -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 index 0000000000..9667149b14 --- /dev/null +++ b/input/features/embedded-postscript.ly @@ -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 index 0000000000..970e2fce41 --- /dev/null +++ b/input/features/embedded-tex.ly @@ -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 index 0000000000..bf370780cc --- /dev/null +++ b/input/features/follow-thread.ly @@ -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 index 0000000000..8e37abee63 --- /dev/null +++ b/input/features/fragment.ly @@ -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 index 0000000000..1b5bacfa58 --- /dev/null +++ b/input/features/metronome.ly @@ -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 index 0000000000..20d69836f9 --- /dev/null +++ b/input/features/move-notehead.ly @@ -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 index 0000000000..08c909a777 --- /dev/null +++ b/input/features/move-specific-text.ly @@ -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 index 0000000000..6624407df6 --- /dev/null +++ b/input/features/no-bar-lines.ly @@ -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 index 0000000000..05eba6615a --- /dev/null +++ b/input/features/no-staff.ly @@ -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 index 0000000000..d32dd6c789 --- /dev/null +++ b/input/features/ophee-slurs.ly @@ -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 index 0000000000..513946dab5 --- /dev/null +++ b/input/features/ottava.ly @@ -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 index 0000000000..ec4262f3a8 --- /dev/null +++ b/input/features/part-combine.ly @@ -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 index 0000000000..0d9fe6a522 --- /dev/null +++ b/input/features/reverse-music.ly @@ -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 index 0000000000..67e7435a47 --- /dev/null +++ b/input/features/slur-attachment-override.ly @@ -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 index 0000000000..4182bb38c6 --- /dev/null +++ b/input/features/slur-attachment.ly @@ -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 index 0000000000..7406ba233b --- /dev/null +++ b/input/features/slur-ugly.ly @@ -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 index 0000000000..697c54585e --- /dev/null +++ b/input/features/smart-transpose.ly @@ -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 index 0000000000..558771769c --- /dev/null +++ b/input/regression/GNUmakefile @@ -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 index 0000000000..765cdff810 --- /dev/null +++ b/input/regression/accidental-single-double.ly @@ -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 index 0000000000..c7ebadec80 --- /dev/null +++ b/input/regression/accidental.ly @@ -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 index 0000000000..1699fa7dc7 --- /dev/null +++ b/input/regression/arpeggio.ly @@ -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 + + } + \context Staff=two \notes\relative c{ + \clef bass; + \context Voice < g b d-\arpeggio > + + } + > +} diff --git a/input/regression/auto-beam-bar.ly b/input/regression/auto-beam-bar.ly new file mode 100644 index 0000000000..645c62de7c --- /dev/null +++ b/input/regression/auto-beam-bar.ly @@ -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 index 0000000000..ee0b5d18ba --- /dev/null +++ b/input/regression/auto-change.ly @@ -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 index 0000000000..fa3256b668 --- /dev/null +++ b/input/regression/auto-isknee.ly @@ -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 index 0000000000..b49954b60c --- /dev/null +++ b/input/regression/auto-knee.ly @@ -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 index 0000000000..502045ed54 --- /dev/null +++ b/input/regression/bar-number.ly @@ -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 index 0000000000..644550de3f --- /dev/null +++ b/input/regression/bar-scripts.ly @@ -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 index 0000000000..72b3c288fa --- /dev/null +++ b/input/regression/beam-cross-staff.ly @@ -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 index 0000000000..653024e70c --- /dev/null +++ b/input/regression/beam-extreme.ly @@ -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 index 0000000000..3c2a8f16be --- /dev/null +++ b/input/regression/beam-length.ly @@ -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 index 0000000000..88f5749d5b --- /dev/null +++ b/input/regression/beam-position.ly @@ -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 index 0000000000..b1673319bf --- /dev/null +++ b/input/regression/beaming.ly @@ -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 index 0000000000..e5d3577845 --- /dev/null +++ b/input/regression/between-systems.ly @@ -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 index 0000000000..49f7ddde61 --- /dev/null +++ b/input/regression/break.ly @@ -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 index 0000000000..70e375fe7a --- /dev/null +++ b/input/regression/breathing-sign.ly @@ -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 index 0000000000..2d233f5e19 --- /dev/null +++ b/input/regression/chord-names.ly @@ -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 index 0000000000..6d941ff971 --- /dev/null +++ b/input/regression/chord-tremolo.ly @@ -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 index 0000000000..834595b0ca --- /dev/null +++ b/input/regression/clefs.ly @@ -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 index 0000000000..1933d10097 --- /dev/null +++ b/input/regression/collisions.ly @@ -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 + } +> + +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 index 0000000000..fbb8855d0d --- /dev/null +++ b/input/regression/dots.ly @@ -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,, + + + + + \context Staff < + \context Voice = VA { \stemUp f'' r4. } + \context Voice = VB { \stemDown b, r4. } + > + + + } + \paper { } + \midi { } +} diff --git a/input/regression/dyn-line.ly b/input/regression/dyn-line.ly new file mode 100644 index 0000000000..31f5dc597b --- /dev/null +++ b/input/regression/dyn-line.ly @@ -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 index 0000000000..f3a5586586 --- /dev/null +++ b/input/regression/generic-output-property.ly @@ -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 index 0000000000..c3cb0d25b1 --- /dev/null +++ b/input/regression/generic-property-override.ly @@ -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 index 0000000000..115c5c2883 --- /dev/null +++ b/input/regression/glissando.ly @@ -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 index 0000000000..dbc42a872c --- /dev/null +++ b/input/regression/grace.ly @@ -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 [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 index 0000000000..1cb4fdbedd --- /dev/null +++ b/input/regression/hara-kiri-short.ly @@ -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 index 0000000000..3013dd1ca4 --- /dev/null +++ b/input/regression/keys.ly @@ -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 index 0000000000..1d67184f26 --- /dev/null +++ b/input/regression/lyric-combine.ly @@ -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 index 0000000000..ec0309b322 --- /dev/null +++ b/input/regression/lyrics-bar.ly @@ -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 index 0000000000..a7dee3a6a4 --- /dev/null +++ b/input/regression/lyrics-multi-stanza.ly @@ -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 index 0000000000..c801ec4c67 --- /dev/null +++ b/input/regression/mm-rests2.ly @@ -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 index 0000000000..49a9ce9f4f --- /dev/null +++ b/input/regression/molecule-hacking.ly @@ -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 index 0000000000..01732e4e88 --- /dev/null +++ b/input/regression/multi-measure-rest.ly @@ -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 index 0000000000..1d445c81fb --- /dev/null +++ b/input/regression/non-empty-text.ly @@ -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 index 0000000000..c59f40c073 --- /dev/null +++ b/input/regression/noteheadstyle.ly @@ -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 index 0000000000..5494d66c52 --- /dev/null +++ b/input/regression/number-staff-lines.ly @@ -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 index 0000000000..28313665a5 --- /dev/null +++ b/input/regression/repeat-fold.ly @@ -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 index 0000000000..ae6a06de0d --- /dev/null +++ b/input/regression/repeat-line-break.ly @@ -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 index 0000000000..cb965c1610 --- /dev/null +++ b/input/regression/repeat-unfold.ly @@ -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 index 0000000000..634ba4dadd --- /dev/null +++ b/input/regression/repeat-volta.ly @@ -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 index 0000000000..276afa516a --- /dev/null +++ b/input/regression/rest-collision.ly @@ -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 index 0000000000..0e7eea1703 --- /dev/null +++ b/input/regression/rest.ly @@ -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 index 0000000000..6bc299ba38 --- /dev/null +++ b/input/regression/size11.ly @@ -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 index 0000000000..ac58c4dd65 --- /dev/null +++ b/input/regression/size13.ly @@ -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 index 0000000000..69352ff59d --- /dev/null +++ b/input/regression/size16.ly @@ -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 index 0000000000..d76a6cdb03 --- /dev/null +++ b/input/regression/size20.ly @@ -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 index 0000000000..c5accc9f90 --- /dev/null +++ b/input/regression/size23.ly @@ -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 index 0000000000..919c6e07cd --- /dev/null +++ b/input/regression/size26.ly @@ -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 index 0000000000..7a00de8687 --- /dev/null +++ b/input/regression/slur-attachment.ly @@ -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 index 0000000000..868d156491 --- /dev/null +++ b/input/regression/slur-broken-trend.ly @@ -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 index 0000000000..e2ada8c8e7 --- /dev/null +++ b/input/regression/slur-cross-staff.ly @@ -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 index 0000000000..fce8f94686 --- /dev/null +++ b/input/regression/slur-nice.ly @@ -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 index 0000000000..6e2ea7c67b --- /dev/null +++ b/input/regression/slur-symmetry-1.ly @@ -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 index 0000000000..41ebe836b3 --- /dev/null +++ b/input/regression/slur-symmetry.ly @@ -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 index 0000000000..eaac633a28 --- /dev/null +++ b/input/regression/spacing-loose.ly @@ -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 index 0000000000..74e9f6f0f7 --- /dev/null +++ b/input/regression/spacing-natural.ly @@ -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 index 0000000000..75c7d16f97 --- /dev/null +++ b/input/regression/spacing-tight.ly @@ -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 index 0000000000..aa3ac8a27f --- /dev/null +++ b/input/regression/staccato-pos.ly @@ -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 index 0000000000..bb2b30f36b --- /dev/null +++ b/input/regression/staff-margin.ly @@ -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 index 0000000000..1733d3995f --- /dev/null +++ b/input/regression/stem-direction-down.ly @@ -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 index 0000000000..78f20f5182 --- /dev/null +++ b/input/regression/stem-direction.ly @@ -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 index 0000000000..765416f54c --- /dev/null +++ b/input/regression/stem-spacing.ly @@ -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 index 0000000000..3493dabef1 --- /dev/null +++ b/input/regression/stem-tremolo.ly @@ -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 index 0000000000..8faf34ab8f --- /dev/null +++ b/input/regression/tie-accidental.ly @@ -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 index 0000000000..2068c371ae --- /dev/null +++ b/input/regression/tie-chord.ly @@ -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' { ~ } + + \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 index 0000000000..6cc474c3b6 --- /dev/null +++ b/input/regression/tie.ly @@ -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 index 0000000000..802727f22e --- /dev/null +++ b/input/regression/triplets.ly @@ -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 index 0000000000..649feb5d22 --- /dev/null +++ b/input/regression/tup.ly @@ -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"; diff --git a/input/test/orchestscore.ly b/input/test/orchestscore.ly index 99160b7dd1..be3360d573 100644 --- a/input/test/orchestscore.ly +++ b/input/test/orchestscore.ly @@ -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 } diff --git a/lily/beam.cc b/lily/beam.cc index 4b18be26eb..8ac599334a 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -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++) { diff --git a/lily/stem.cc b/lily/stem.cc index e640d0a7d0..c87490d952 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -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" diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index 55af3b8196..cf792f086b 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -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 (); } diff --git a/make/ly-rules.make b/make/ly-rules.make index 0577bae6e3..be65503ea0 100644 --- a/make/ly-rules.make +++ b/make/ly-rules.make @@ -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 $@ diff --git a/mutopia/Coriolan/coriolan-paper.ly b/mutopia/Coriolan/coriolan-paper.ly index 9dfc0367f5..a9edd675b4 100644 --- a/mutopia/Coriolan/coriolan-paper.ly +++ b/mutopia/Coriolan/coriolan-paper.ly @@ -72,11 +72,9 @@ \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 } } diff --git a/mutopia/Coriolan/coriolan-part-paper.ly b/mutopia/Coriolan/coriolan-part-paper.ly index 3ba4e4aef8..bdc564dcc8 100644 --- a/mutopia/Coriolan/coriolan-part-paper.ly +++ b/mutopia/Coriolan/coriolan-part-paper.ly @@ -18,6 +18,6 @@ %%textStyle = #"italic" timeSignatureStyle = #"C" marginScriptHorizontalAlignment = #1 - maximumRestCount = #1 + RestCollision \override #'maximum-rest-count = #1 } } diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/courante-viola.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/courante-viola.ly index a76fa118b8..dd7a0392d6 100644 --- a/mutopia/J.S.Bach/Solo-Cello-Suites/courante-viola.ly +++ b/mutopia/J.S.Bach/Solo-Cello-Suites/courante-viola.ly @@ -25,7 +25,7 @@ couranteViolaScripts = \notes{ } couranteViolaStaff = \context Staff < - \notes \transpose c' \courante + \notes \transpose c'' \courante \couranteViolaGlobal \couranteViolaScripts > diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/gigue-viola.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/gigue-viola.ly index bc7d291abc..d8efcf4288 100644 --- a/mutopia/J.S.Bach/Solo-Cello-Suites/gigue-viola.ly +++ b/mutopia/J.S.Bach/Solo-Cello-Suites/gigue-viola.ly @@ -27,7 +27,7 @@ gigueViolaScripts = \notes{ } gigueViolaStaff = \context Staff < - \notes \transpose c' \gigue + \notes \transpose c'' \gigue \gigueViolaGlobal \gigueViolaScripts > diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-viola.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-viola.ly index 5ac93c3f0a..69db680783 100644 --- a/mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-viola.ly +++ b/mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-viola.ly @@ -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 > diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/prelude-viola.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/prelude-viola.ly index 405dce2e31..cf17a8bb71 100644 --- a/mutopia/J.S.Bach/Solo-Cello-Suites/prelude-viola.ly +++ b/mutopia/J.S.Bach/Solo-Cello-Suites/prelude-viola.ly @@ -17,7 +17,7 @@ preludeViolaScripts = \notes{ } preludeViolaStaff = \context Staff < - \notes \transpose c' \prelude + \notes \transpose c'' \prelude \preludeViolaGlobal \preludeViolaScripts > diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-viola.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-viola.ly index d82f07b299..a797f92027 100644 --- a/mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-viola.ly +++ b/mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-viola.ly @@ -17,7 +17,7 @@ sarabandeViolaScripts = \notes{ } sarabandeViolaStaff = \context Staff < - \notes \transpose c' \sarabande + \notes \transpose c'' \sarabande \sarabandeViolaGlobal \sarabandeViolaScripts > diff --git a/scm/grob-description.scm b/scm/grob-description.scm index 043f356734..47ee15416f 100644 --- a/scm/grob-description.scm +++ b/scm/grob-description.scm @@ -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)) )) @@ -533,7 +534,9 @@ (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) diff --git a/scm/grob-property-description.scm b/scm/grob-property-description.scm index fd5ed70f13..ce58750789 100644 --- a/scm/grob-property-description.scm +++ b/scm/grob-property-description.scm @@ -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.") diff --git a/scripts/ly2dvi.py b/scripts/ly2dvi.py index f0c91aad99..704efe84ee 100644 --- a/scripts/ly2dvi.py +++ b/scripts/ly2dvi.py @@ -25,6 +25,8 @@ Output: DVI file name = 'ly2dvi' version = '@TOPLEVEL_VERSION@' +if version == '@' + 'TOPLEVEL_VERSION' + '@': + version = '(unknown version)' # uGUHGUHGHGUGH errorlog = '' import sys diff --git a/scripts/pmx2ly.py b/scripts/pmx2ly.py index afe4c35335..b8d289b861 100644 --- a/scripts/pmx2ly.py +++ b/scripts/pmx2ly.py @@ -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] )) -- 2.39.5