Jonathan Kulp <jon@bashtop.(none)>
Jonathan Kulp <jonlancekulp@gmail.com>
Joseph Wakeling <joseph.wakeling@webdrake.net>
-Jürgen Reuter <reuter>
-Jürgen Reuter <reuter@ipd.uka.de>
+Jürgen Reuter <reuter_j@web.de> <reuter>
+Jürgen Reuter <reuter_j@web.de> <reuter@ipd.uka.de>
+Jürgen Reuter <reuter_j@web.de> <j@web.de>
Keith OHara <k-ohara5a5a@oco.net>
Kevin Dalley <kevin@kelphead.org>
Kieren MacMillan <kieren_macmillan@sympatico.ca>
@finalout
@node Top
-@top New features in 2.18 since 2.16
+@top New features in 2.20 since 2.18
@allowcodebreaks false
* only show user-visible changes.
@end ignore
-
-@item
-The PostScript functionality of stroke adjustment is no longer
-applied automatically but left to the discretion of the PostScript
-device (by default, Ghostscript uses it for resolutions up to
-150dpi when generating raster images). When it is enabled, a more
-complex drawing algorithm designed to benefit from stroke
-adjustment is employed mostly for stems and bar lines.
-
-Stroke adjustment can be forced by specifying the command line
-option @samp{-dstrokeadjust} to LilyPond. When generating
-@code{PDF} files, this will usually result in markedly better
-looking @code{PDF} previews but significantly larger file size.
-Print quality at high resolutions will be unaffected.
-
-@item
-There is now a new context type called @code{NullVoice} which, while not
-appearing in the printed output, can be used to align lyrics. This can
-be particularly convenient when used in parallel with a
-@code{\partcombine} construct.
-
-@lilypond[verbatim,quote]
-soprano = \relative c' { c e g c }
-alto = \relative c' { a c e g }
-verse = \lyricmode { This is my song }
-
-\score {
- \new Staff <<
- \partcombine \soprano \alto
- \new NullVoice = "aligner" \soprano
- \new Lyrics \lyricsto "aligner" \verse
- >>
- \layout {}
-}
-@end lilypond
-
-
@item
-Several articulations can be put into a single variable or
-returned from an event function:
+A new command @code{\magnifyMusic} has been added, which allows
+the notation size to be changed without changing the staff size,
+while automatically scaling stems, beams, and horizontal spacing.
@lilypond[verbatim,quote]
-sempreStacc = -. ^\markup \italic sempre
-\relative { c''4\sempreStacc c c c }
-@end lilypond
-
-@item
-The baseline of score markups is now taken from the reference
-point (usually the middle of the staff) of the first bottom system
-rather than the top of the bounding rectangle. The following
-@lilypond[verbatim,quote]
-\markup {
- violin: \score { \new Staff { <g d' a' e''>1 }
- \layout { indent=0 } } ,
- cello: \score { \new Staff { \clef "bass" <c, g, d a> }
- \layout { indent=0 } }
-}
-@end lilypond
-previously looked like
-@lilypond[quote]
-\markup {
- violin: \general-align #Y #UP
- \score { \new Staff { <g d' a' e''>1 }
- \layout { indent=0 } } ,
- cello: \general-align #Y #UP
- \score { \new Staff { \clef "bass" <c, g, d a> }
- \layout { indent=0 } }
-}
-@end lilypond
-without a reliable way to get both scores to line up.
-
-@item
-LilyPond no longer automatically infers a @samp{\defaultchild}
-context in a context definition with @samp{\accepts} clauses. Any
-context definition without an explicit or inherited
-@samp{\defaultchild} definition counts as a @samp{Bottom} context
-and will be eligible for rhythmic events and overrides without
-causing the implicit creation of other contexts. Be sure to
-specify a @samp{\defaultchild} for non-@samp{Bottom} contexts when
-defining them from scratch.
-
-@item
-There is now extensive support for both discant and bass accordion
-register symbols in the @samp{scm accreg} module, see
-@ruser{Accordion Registers}.
-@lilypond[verbatim,quote]
-#(use-modules (scm accreg))
-\new PianoStaff
-<<
- \new Staff \relative
- { \clef "treble" \discant "10"
- r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
- \discant "121"
- << { r16 <f bes> r <e a> r <d g> } \\
- { d r a r bes r } >> |
- <cis e a>1
+\new Staff <<
+ \new Voice \relative {
+ \voiceOne
+ <e' e'>4 <f f'>8. <g g'>16 <f f'>8 <e e'>4 r8
}
- \new Staff \relative
- { \clef "treble" \freeBass "1"
- r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
- \clef "bass" \stdBass "Master"
- << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
- <e a cis>1^"a" } \\
- { d8_"D" c_"C" bes_"B" | a1_"A" }
- >>
+ \new Voice \relative {
+ \voiceTwo
+ \magnifyMusic 0.63 {
+ r32 c'' a c a c a c r c a c a c a c
+ r c a c a c a c a c a c a c a c
+ }
}
>>
@end lilypond
@item
-New commands @code{markLengthOn} and @code{markLengthOff} control
-the allowance of horizontal space for tempo and rehearsal marks.
-
-@lilypond[quote,relative=2]
-\markLengthOn
-\compressFullBarRests
-\tempo "Molto vivace" c2 c'
-\mark\default
-\tempo "Meno mosso" R1*16
-\mark\default
-g,2 g
-\bar "||"
-\markLengthOff
-\tempo "Molto vivace" c2 c'
-\mark#1
-\tempo "Meno mosso" R1*16
-\mark\default
-g,2 g
+A new flexible template suitable for a range of choral music, is now
+provided. This may be used to create simple choral music, with or
+without piano accompaniment, in two or four staves. Unlike other
+templates, this template is @q{built-in}, which means it does not
+need to be copied and edited: instead it is simply @code{\include}'d
+in the input file. For details, see @rlearning{Built-in templates}.
+
+@item
+The positioning of tuplet numbers for kneed beams has been significantly
+improved. Previously, tuplet numbers were placed according to the
+position of the tuplet bracket, even if it was not printed. This could
+lead to stranded tuplet numbers. Now they are now positioned
+closer to the kneed-beam when an appropriate beam segment exists for its
+placement and when the the bracket is not drawn.
+
+Collision detection is also added, offsetting horizontally if too close
+to an adjoining note column but preserving the number's vertical
+distance from the kneed beam. If the number itself is too large to
+fit in the available space the original, bracket-based, positioning
+system is used instead; and in the event of a collision (e.g. with an
+accidental) the tuplet number is moved vertically away instead.
+
+@lilypond[verbatim,fragment,quote,relative=1]
+\time 3/4
+\override Beam.auto-knee-gap = 3
+\tuplet 3/2 4 {
+ g8 c'' e,
+ c'8 g,, e''
+ g,,8 e''' c,,
+}
@end lilypond
-@item
-Rehearsal marks at the beginning of a line are now placed to the right
-of the clef and key signature by default. As in previous versions, the
-@code{break-alignable-interface} controls the behavior.
-
-@lilypond[quote,relative=2]
-\set Score.barNumberVisibility = #all-bar-numbers-visible
-\set Timing.currentBarNumber = #72
-\bar"||" \time 3/4 \key e\major \mark#10 \tempo "Adagio" b2.
+@noindent
+The original kneed-beam tuplet behavior is still available through an
+@code{\override} via a new, @code{knee-to-beam} property.
+
+@lilypond[verbatim,fragment,quote,relative=1]
+\time 3/4
+\override Beam.auto-knee-gap = 3
+\override TupletNumber.knee-to-beam = ##f
+\tuplet 3/2 4 {
+ g8 c'' e,
+ c'8 g,, e''
+ g,,8 e''' c,,
+}
@end lilypond
@item
-Decimal numbers can now be written directly in music,
-without a hash sign. Together with the previous change
-in the way object properties are specified, the code to
-change the length of stems has changed from this:
-@example
-\override Stem #'length = #5.6
-e' f' g' a'
-@end example
-to this:
-@example
-\override Stem.length = 5.6
-e' f' g' a'
-@end example
-
-One has to write a digit on both sides of the dot -- values like
-@code{4.} or @code{-.3} are not allowed.
-
-Decimal fractions are also not accepted in @code{\chordmode}.
+@code{\lyricsto} and @code{\addLyrics} have been @q{harmonized}. Both
+now accept the same kind of delimited argument list that @code{\lyrics}
+and @code{\chords} accept. Backward compatibility has been added so
+music identifiers (i.e. @code{\mus}) are permitted as arguments. A
+@code{convert-ly} rule has been added that removes redundant uses of
+@code{\lyricmode} and rearranges combinations with context starters such
+that @code{\lyricsto} in general is applied last (i.e. like
+@code{\lyricmode} would be).
@item
-A number of shorthands like @code{(}, @code{)}, @code{|},
-@code{[}, @code{]}, @code{~}, @code{\(}, @code{\)} and others can
-now freely be redefined like normal commands. An example would be
-@lilypond[verbatim,quote]
-"\\{" = (
-"\\}" = )
-"(" = \melisma
-")" = \melismaEnd
-
-\new Staff <<
- \relative c' {
- c8 \{ d e f \} % slurred
- g ( a b c ) % no slur, but with melisma
- c,1 \bar "|."
- }
- \addlyrics { Li -- ly -- pond. }
->>
-@end lilypond
+Scheme functions and identifiers can now be used as output definitions.
@item
-The articulation shorthand for @code{\staccatissimo} has been
-renamed from @code{-|} to@tie{}@code{-!}.
+Scheme expressions can now be used as chord constituents.
@item
-Tempo change ranges are now written as @code{\tempo 4 = 60 - 68}
-rather than @code{\tempo 4 = 60 ~ 68}.
+Improved visual spacing of small and regular @q{MI} Funk and Walker
+noteheads so they are now the same width as other shaped notes in
+their respective sets. @code{SOL} noteheads are also now visually
+improved when used with both the normal Aiken and Sacred Harp heads, as
+well as with the thin variants.
@item
-Grob @code{OctavateEight} was renamed to @code{ClefModifier}.
-Related context properties were renamed from @code{xxxOctavationyyy}
-to @code{xxxTranspositionyyy}.
+@code{LeftEdge} now has a definable @code{Y-extent} (i.e.vertical). See
+@rinternals{LeftEdge}.
@item
-There is a new @code{\absolute} command explicitly marking music
-as being entered in absolute pitch. While this has been the
-default previously, an explicit @code{\absolute} also prevents
-reinterpretation when the passage is placed inside of
-@code{\relative}:
-@lilypond[verbatim,quote]
-\relative c { c'4 \absolute { f'' g'' } c }
-@end lilypond
+Added a new @code{make-path-stencil} function that supports all
+@code{path} commands both relative and absolute:
-@item
-When @code{\relative} is used without an explicit reference pitch,
-the reference pitch now is the middle of the first octave, making
-the first entered pitch indistinguishable from absolute pitch.
-Previously, omitting the reference pitch would have lead to a
-default of @code{c'}. Since that choice was somewhat arbitrary,
-recommended usage was to always specify the reference pitch.
+@code{lineto}, @code{rlineto}, @code{curveto}, @code{rcurveto},
+@code{moveto}, @code{rmoveto}, @code{closepath}. The function also
+supports @q{single-letter} syntax used in standard SVG path commands:
+
+@code{L}, @code{l}, @code{C}, @code{c}, @code{M}, @code{m}, @code{Z} and
+@code{z}. The new command is also backward-compatible with the original
+@code{make-connected-path-stencil} function. Also see
+@file{scm/stencil.scm}.
@item
-A new command @code{\single} can be used for converting a property
-override into a tweak to be applied on a single music expression:
+Context properties named in the @samp{alternativeRestores} property are
+restored to their value at the start of the @emph{first} alternative in
+all subsequent alternatives.
-@lilypond[quote,verbatim,relative=2]
-<a \single\voiceTwoStyle e' a>1
-@end lilypond
+Currently the default set restores @q{current meter};
-@item
-Two ways of letting graphical objects not appear in the output are
-overriding its @code{transparent} property with @code{#t}
-(retaining the original spacing) or overriding its @code{stencil}
-property with @code{#f} (not using any space at all). Those two
-operations now have the shorthands @code{\hide} and @code{\omit},
-respectively. They can either be given a music expression to
-tweak, or the name of a graphical object for which an override
-should be created (for specifying both, use @code{\single} on the
-override form):
-
-@lilypond[quote,verbatim]
-\new Staff \with { \omit Clef }
-\relative c'' <a e' \hide a>1
+@lilypond[verbatim,fragment,quote,relative=2]
+\time 3/4
+\repeat volta 2 { c2 e4 | }
+\alternative {
+ { \time 4/4 f2 d | }
+ { f2 d4 | }
+}
+g2. |
@end lilypond
-@item
-A new command @code{\temporary} can be applied to overrides in
-order to not have them replace previous property settings. If a
-@code{\revert} is applied to the same property subsequently, the
-previous setting reappears:
-
-@lilypond[quote,verbatim,relative=2]
-\override NoteHead.color = #red c4
-\override NoteHead.color = #green d
-\revert NoteHead.color e2
-\override NoteHead.color = #red c4
-\temporary\override NoteHead.color = #green d
-\revert NoteHead.color e
-\revert NoteHead.color c
+@noindent
+@q{measure position};
+
+@lilypond[verbatim,fragment,quote,relative=2]
+\time 3/4
+\repeat volta 2 { c2 e4 | }
+\alternative {
+ { \time 4/4
+ \set Timing.measurePosition = #(ly:make-moment -1/2)
+ f2 | }
+ { f2 d4 | }
+}
+g2. |
@end lilypond
-This is mainly useful for writing music functions that need to
-have some property changed just for the duration of the function.
-
-@item
-@code{\tag}, @code{\removeWithTag}, and @code{\keepWithTag} can
-now accept a list of symbols rather than just a single symbol for
-marking, removing, and keeping music with any of multiple tags.
-This is particularly important for @code{\keepWithTag} since one
-cannot achieve the same effect by using multiple consecutive
-@code{\keepWithTag} commands.
+@noindent
+and @q{chord changes};
-@item
-The @samp{-d old-relative} option has been removed. Not actually
-accessible from the command line any more, its remaining use was
-for interpretating @code{\relative} in LilyPond files converted
-automatically from version@tie{}1.8 or older. It is unclear how
-much of this was actually still operative.
+@lilypond[verbatim,fragment,quote]
+<<
+ \new ChordNames {
+ \set chordChanges = ##t
+ \chordmode { c1:m d:m c:m d:m }
+ }
+ \new Staff {
+ \repeat volta 2 { \chordmode { c1:m } }
+ \alternative {
+ { \chordmode { d:m } }
+ { \chordmode { c:m } }
+ }
+ \chordmode { d:m }
+}
+>>
+@end lilypond
@item
-The meaning of @code{instrumentTransposition} has been reversed.
-After
-@example
-\set instrumentTransposition = #@{ b #@}
-@end example
-a written @code{c'} now sounds like @code{b}. Previously, this
-would have been the other way round. This and the following change
-should make dealing with transposing instruments more
-straightforward.
+Improved MIDI output for breathe marks. After tied notes, breaths take
+time @emph{only} from the last note of the tie; e.g.
+@code{@{ c4~ c8 \breathe @}} performs as @code{@{ c4~ c16 r @}} instead
+of @code{@{ c4 r8 @}}. This is more consistent with articulations and
+how humans interpret breaths after ties. It now also makes it easier to
+align simultaneous breathe marks over multiple parts, all with different
+note lengths.
@item
-The music generated by @code{\set} and @code{\override} commands
-is no longer affected by @code{\transpose}. The main consequence
-is that @code{\transpose} will transpose audible/@/concert pitch and
-printed pitch by the same amount even when the transposed music
-contains @code{\transposition}. Previously,
-@example
-\transpose c' f' \transposition bes'
-@end example
-was equivalent to @code{\transposition f'}. Now it stays
-equivalent to @code{\transposition bes'}.
+A new note head style for Tabulature has been added;
+@code{TabNoteHead.style = #'slash}.
@item
-When checking for collisions, LilyPond no longer treats objects as
-rectangles. Instead, the actual shape of objects is approximated
-using an integral-like approach. This generally results in more
-even and snug positioning of objects and systems:
-
-@lilypond[relative=1]
-#(ly:set-option 'debug-skylines #t)
-\dynamicUp
-c'4\f a4\f d\f( f)
-a,4\< c c c\!
-d4-.\downbow a4^"r'venu..." c \tempo "T1" e
-@end lilypond
+Four new Clefs have been added. @emph{Double G}, @emph{Tenor G},
+@emph{Varpercussion} and @emph{varC}.
+@lilypond[verbatim,quote,fragment]
+ \override Staff.Clef.full-size-change = ##t
-Previously, the above snippet looked like this:
-
-@lilypond[relative=1]
-#(ly:set-option 'debug-skylines #t)
-\override Hairpin #'vertical-skylines = #'()
-\override DynamicText #'vertical-skylines = #'()
-\override TextScript #'vertical-skylines = #'()
-\override Score.MetronomeMark #'vertical-skylines = #'()
-\override Staff.Clef #'vertical-skylines = #'()
-\dynamicUp
-c'4\f a4\f d\f( f)
-a,4\< c c c\!
-d4-.\downbow a4^"r'venu..." c \tempo "T1" e
-@end lilypond
+ \clef "GG" c c c c
+ \clef "tenorG" c c c c
+ \clef "varC" c c c c
+ \clef "varpercussion" c c c c
-Affected objects include @code{Accidentals}, @code{Beams}, @code{Clefs},
-@code{Dynamics}, @code{FiguredBass}, @code{Flags}, @code{Glissandos},
-@code{Lyrics}, @code{MetronomeMarks}, @code{OttavaBrackets},
-@code{Pedals}, @code{RehearsalMarks}, @code{Rests}, @code{Scripts},
-@code{TextScripts}, @code{Ties}, @code{Tuplets} and @code{VoltaBrackets}.
+ \break
+ \override Staff.Clef.full-size-change = ##f
-@item
-Tuplets are now created with the @code{\tuplet} command, which
-takes a fraction @code{@var{t}/@var{n}} to specify that @var{t}
-notes are played in the time usually allowed for @var{n}. One
-@code{\tuplet} command can create several tuplet groups if their
-duration is typed after the fraction.
-@lilypond[quote,verbatim,relative=2]
-\tuplet 3/2 { c8 d e } \tuplet 3/2 { f e d } c2
-\tuplet 3/2 4 { c8 d e f e d } c2
+ \clef "GG" c c c c
+ \clef "tenorG" c c c c
+ \clef "varC" c c c c
+ \clef "varpercussion" c c c c
@end lilypond
-The @code{\times} command with its inverted fraction order
-@code{@var{n}/@var{t}} is still available.
@item
-Introducing two new markup-commands; @code{\draw-dashed-line} and
-@code{\draw-dotted-line}.
-
-@noindent
-The dashed-line extends to the whole length given by @var{dest}, if
-@code{full-length} is set to @code{#t} (this is the default) without any
-space at the beginning or end. @code{off} will then be altered to fit.
-To insist on the given (or default) values of @code{on}, @code{off} use
-@code{\override #'(full-length . #f)}. Manual settings for @code{on},
-@code{off} and @code{phase} are possible.
-
-@noindent
-The dotted-line always extends to the whole length given by @var{dest},
-without any space at the beginning or end. Manual settings for
-@code{off} are possible to get larger or smaller space between the dots.
-The given (or default) value of @code{off} will be altered to fit the
-line-length.
+Isolated durations in music sequences now stand for unpitched
+notes. This may be useful for specifying rhythms to music or
+scheme functions. When encountered in the final score, the
+pitches are provided by the preceding note or chord. Here are two
+examples where this makes for readable input:
@lilypond[verbatim,quote]
-\markup {
- \draw-dashed-line #'(5.1 . 2.3)
- \override #'(on . 0.3)
- \override #'(off . 0.5)
- \draw-dashed-line #'(5.1 . 2.3)
- \draw-dotted-line #'(5.1 . 2.3)
- \override #'(thickness . 2)
- \override #'(off . 0.2)
- \draw-dotted-line #'(5.1 . 2.3)
+\new DrumStaff \with { \override StaffSymbol.line-count = 1 }
+\drummode {
+ \time 3/4
+ tambourine 8 \tuplet 3/2 { 16 16 16 }
+ 8 \tuplet 3/2 { 16 16 16 } 8 8 |
}
@end lilypond
-@item
-Starting with version@tie{}2.17.10, error messages or the
-@code{textedit} @acronym{URI} used for point-and-click
-functionality specify column numbers starting with@tie{}1 rather
-than@tie{}0. The byte offset (also part of @code{textedit}
-@acronym{URI}s) still starts at@tie{}0.
+@lilypond[verbatim,quote]
+\new Staff { r16 c'16 ~ 8 ~ 4 ~ 2 | }
+@end lilypond
@item
-The @code{\clef} command supports optional transposition:
+Beaming exceptions can now be constructed using the
+@code{\beamExceptions} scheme function. One can now write
+
@lilypond[verbatim,quote,relative=1]
-\clef "treble_(8)"
-c2 c
-\clef "bass^[15]"
-c2 c
+\time #'(2 1) 3/16
+\set Timing.beamExceptions =
+ \beamExceptions { 32[ 32] 32[ 32] 32[ 32] }
+c16 c c |
+\repeat unfold 6 { c32 } |
@end lilypond
-@item
-The LilyPond syntax of dot-separated words @code{Voice.Accidental}
-has been made interchangeable with @code{#'(Voice Accidental)}, a
-Scheme list of symbols. As one result, code like
-@example
-\override Voice.TextSpanner #'(bound-details left text) = "rit."
-@end example
-is now equivalent to
-@example
-\override Voice.TextSpanner bound-details.left.text = "rit."
-@end example
-or even
-@example
-\override #'(Voice TextSpanner) bound-details.left.text = "rit."
-@end example
+@noindent
+with multiple exceptions separated with @code{|} bar checks
+(writing the exception pattern without pitches is convenient but
+not mandatory). Previously, setting the beam exceptions would
+have required writing
-@item
-Grob and grob property path no longer need to be specified as two
-separate arguments to commands like @samp{\override} and
-@code{\revert}, allowing for the syntax
@example
-\override Voice.TextSpanner.bound-details.left.text = "rit."
+\set Timing.beamExceptions =
+#'( ;start of alist
+ (end . ;entry for end of beams
+ ( ;start of alist of end points
+ ((1 . 32) . (2 2 2)) ;rule for 1/32 beams -- end each 1/16
+ )))
@end example
-Since complementary music functions like @samp{\overrideProperty}
-cannot support forms with and without separating space at the same
-time, using a single dotted path is now the preferred form.
-Specifying grob path and grob property path separately, currently
-still supported with @samp{\override} and @samp{\revert} for
-compatibility reasons, is deprecated.
@item
-Due to words now being accepted as symbol function arguments, the
-interfaces of @samp{\accidentalStyle}, @samp{\alterBroken},
-@samp{\footnote} and @samp{\tweak} had to be redesigned where
-optional symbol arguments were involved. Please check the
-respective music function documentation for details.
+The most common articulations are now reflected in MIDI output.
+Accent and marcato make notes louder; staccato, staccatissimo and
+portato make them shorter. Breath marks shorten the previous
+note.
-@item
-Several commands now accept symbol lists (conveniently entered as
-dot-separated words) for various kinds of arguments. These
-include @samp{\accidentalStyle}, @samp{\alterBroken},
-@samp{\footnote}, @samp{\hide}, @samp{\omit},
-@samp{\overrideProperty}, @samp{\shape}, and @samp{\tweak}.
+This behavior is customizable through the @code{midiLength} and
+@code{midiExtraVelocity} properties on @code{ArticulationEvent}.
+See @file{script-init.ly} for examples.
@item
-The bar line user interface has changed. Bar glyphs now resemble the
-appearance of the bar line, so a left repeat sign has to be coded
-as @code{.|:}. The command @code{\defineBarLine} provides an easy way
-to define additional bar line styles.
+The PostScript functionality of stroke adjustment is no longer
+applied automatically but left to the discretion of the PostScript
+device (by default, Ghostscript uses it for resolutions up to
+150dpi when generating raster images). When it is enabled, a more
+complex drawing algorithm designed to benefit from stroke
+adjustment is employed mostly for stems and bar lines.
-@item
-Accidentals in the key signature may be printed in octaves other
-than their traditional positions, or in multiple octaves.
-@lilypond[quote,relative=0]
-\override Staff.KeySignature #'flat-positions = #'((-5 . 5))
-\override Staff.KeyCancellation #'flat-positions = #'((-5 . 5))
-\clef bass \key es \major es g bes d
-\clef treble \bar "||" \key es \major es g bes d
-\override Staff.KeySignature #'sharp-positions = #'(2)
-\bar "||" \key d \major b fis b2
-@end lilypond
+Stroke adjustment can be forced by specifying the command line
+option @samp{-dstrokeadjust} to LilyPond. When generating
+@code{PDF} files, this will usually result in markedly better
+looking @code{PDF} previews but significantly larger file size.
+Print quality at high resolutions will be unaffected.
@end itemize
@ifhtml
For older news, go to
+@uref{http://lilypond.org/doc/v2.18/Documentation/changes/},
@uref{http://lilypond.org/doc/v2.16/Documentation/changes/},
-@uref{http://lilypond.org/doc/v2.14/Documentation/changes/},
or @uref{../,go back} to the Documentation index.
@c `Contributor's Guide' was born 2007-09-15 with git commit 48f3356...
@macro copyrightDeclare
-Copyright @copyright{} 2007--2012 by the authors.
+Copyright @copyright{} 2007--2014 by the authors.
@end macro
@set FDL
@menu
* Introduction to documentation work::
+* version in documentation files::
* Documentation suggestions::
* Texinfo introduction and usage policy::
* Documentation policy::
encouraged to contact the @ref{Meisters, Documentation Meister}.
+@node version in documentation files
+@section @code{\version} in documentation files
+
+Every documentation file which includes LilyPond code must begin
+with a @code{\version} statement, since the build procedure
+explicitly tests for its presence and will not continue otherwise.
+The @code{\version} statement should reference a version of LilyPond
+consistent with the syntax of the contained code.
+
+Since the @code{\version} statement is not valid Texinfo input it
+must be commented out like this:
+
+@example
+@@c \version "2.19.1"
+@end example
+
+So, if you are adding LilyPond code which is not consistent with the
+current version header, you should
+
+@enumerate
+
+@item
+run convert-ly on the file using the latest version of LilyPond
+(which should, if everybody has done proper maintenance, not change
+anything);
+
+@item
+add the new code;
+
+@item
+modify the version number to match the new code.
+
+@end enumerate
+
+
@node Documentation suggestions
@section Documentation suggestions
Staff.instrumentName = #"cello"}
@item
-Try to avoid using @code{#'} or @code{#`} within when describing
+Try to avoid using @code{#'} or @code{#`} when describing
context or layout properties outside of an @code{@@example} or @code{@@lilypond}, unless
the description explicitly requires it.
@item
Tweaks should, if possible, also occur on their own line.
@example
-not: \override TextScript #'padding = #3 c1^"hi"
-but instead: \override TextScript #'padding = #3
+not: \override TextScript.padding = #3 c1^"hi"
+but instead: \override TextScript.padding = #3
c1^"hi"
@end example
On the other side of this,
@example
-\override Score.Hairpin #'after-line-breaking = ##t
+\override Score.Hairpin.after-line-breaking = ##t
@end example
clearly belongs in LSR.
@example
Monday: Eluze
-Tuesday: Ralph
-Wednesday: Marek
-Thursday: Joe Wakeling (soon)
-Friday: Colin H
-Saturday: Colin H
-Sunday: Federico
+Tuesday: Ralph Palmer
+Wednesday: Marek Klein
+Thursday: Eluze
+Friday:
+Saturday: Colin Campbell
+Sunday: Federico Bruni
@end example
@node How purity is defined and stored
@subsection How purity is defined and stored
-Purity can currently be defined two different ways in LilyPond that
-correspond to two types of scenarios. In one scenario, we know that a
-callback is pure, but we are not necessarily certain what properties
-will use this callback. In another, we want a property to be pure, but
-we don't want to guarantee that its callback function will be pure in
-all circumstances.
-
-In the first scenario, we register the callback in define-grobs.scm in
-one of four places depending on what the function does.
-
-@itemize
-@item @code{pure-print-functions}: If finding a print function's vertical
-extent does not have any @q{side effects} we register it here. We then
-don't have to set the pure Y-extent property, which will be taken from the
-stencil.
-
-@item @code{pure-print-to-height-conversions}: If a stencil can
-eventually be used to glean a grob's Y-extent but is not pure (meaning
-it will have a different height at different stages of the compilation
-process), we add it to this list along with a function for the pure
-Y-extent.
-
-@item @code{pure-conversions-alist}: This list contains pairs of
-functions and their pure equivalents. It is onto but not one-to-one.
-
-@item @code{pure-functions}: Like pure-print-functions in that they work
-for both pure and impure values, but they do not return a stencil.
-@end itemize
-
-At all stages of the compilation process, when LilyPond wants the pure
-version of a property, it will consult these lists and see if it can get
-this property for a given Grob. Note that you do @emph{not} need to
-register the pure property in the grob itself. For example, there is no
-property @q{pure-Y-extent}. Rather, by registering these functions as
-defined above, every time LilyPond needs a pure property, it will check
-to see if a Grob contains one of these functions and, if so, will use
-its value. If LilyPond cannot get a pure function, it will return a
-value of @code{##f} for the property.
-
-LilyPond is smart enough to know if a series of chained functions are
-pure. For example, if a Y-offset property has four chained functions
-and all of them have pure equivalents, LilyPond will read the four pure
-equivalents when calculating the pure property. However, if even one is
-impure, LilyPond will not return a pure property for the offset (instead
-returning something like @code{#f} or @code{'()}) and will likely wreak
-havoc on your score.
-
-In the second scenario, we create an unpure-pure-container (unpure is
-not a word, but hey, neither was Lilypond until the 90s). For example:
+Purity is defined in LilyPond with the creation of an unpure-pure container
+(unpure is not a word, but hey, neither was Lilypond until the 90s). For example:
@example
#(define (foo grob)
\override Stem #'length = #(ly:make-unpure-pure-container foo bar)
@end example
-This is useful if we want to:
-
-@itemize
-@item create overrides that have pure alternatives (should not be used
-in development, but useful for users)
-
-@item use return values that are not functions (i.e. pairs or booleans)
-for either pure or unpure values.
-
-@item allow a function to be considered pure in a limited amount of
-circumstances. This is useful if we are sure that, when associated with
-one grob a function will be pure but not necessarily with another grob
-that has different callbacks.
-@end itemize
-
-Items can only ever have two pure heights: their actual pure height if
-they are between @q{start} and @q{end}, or an empty interval if they are
+Note that items can only ever have two pure heights: their actual pure height
+if they are between @q{start} and @q{end}, or an empty interval if they are
not. Thus, their pure property is cached to speed LilyPond up. Pure
heights for spanners are generally not cached as they change depending
on the start and end values. They are only cached in certain particular
@end itemize
+@item
+Manually edit the two files @file{../ly/Welcome_to_LilyPond.ly} and
+@file{../ly/Welcome-to-LilyPond-MacOS.ly} such that the hard coded
+@code{\version} number reflects the version number about to be released.
+
@item
Commit, push, switch back to master (or wherever else):
@example
git commit -m "Release: bump VERSION_DEVEL." VERSION
+git commit -m "Release: bump VERSION_DEVEL." ly/Welcome_to_LilyPond.ly
+git commit -m "Release: bump VERSION_DEVEL." ly/Welcome-to-LilyPond-MacOS.ly
git commit -m "PO: update template." po/lilypond.pot
git commit -m "Release: update news." Documentation/web/
git push origin HEAD:release/unstable
@c `Learning Manual' was born 1999-10-10 with git commit b9abaac...
@macro copyrightDeclare
-Autorské právo @copyright{} 1999--2012 autoři.
+Autorské právo @copyright{} 1999--2014 autoři.
@end macro
@set FDL
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@ignore
Tutorial guidelines:
spojit, připojí vlnovka @code{~}.
@lilypond[verbatim,quote,relative=2]
-g4~ g c2~ | c4~ c8 a~ a2
+g4~ 4 c2~ | 4~ 8 a~ 2
@end lilypond
být naskládány do sebe.
@lilypond[verbatim,quote,relative=2]
-c4~( c8 d~ d4 e)
+c4~( c8 d~ 4 e)
@end lilypond
\clef "bass"
\key c \major
\time 6/8
- c4.~ c8 d b | c8([ d]) b c d b | c8
+ c4.~ 8 d b | c8([ d]) b c d b | c8
}
\addlyrics {
Lar -- go_al fac -- | to -- tum del -- la cit -- | tà
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4
+ c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.29"
+@c \version "2.19.2"
@c Translators: Pavel Fric
@node Základní pojmy
c16 d e f
% Voice "1" Voice "2" Voice "3"
<< { g4 f e } \\ { r8 e4 d c8~ } >> |
- << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> |
+ << { d2 e } \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
}
@end lilypond
{ d2 e }
\\
% Voice 2 continues
- { c8 b16 a b8 g~ g2 }
+ { c8 b16 a b8 g~ 2 }
\\
{
\voiceThreeStyle
@lilypond[quote,ragged-right,verbatim]
\relative c' {
% Default behavior or behavior after \oneVoice
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceOne
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceTwo
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
\new Voice {
% Set stems, etc., down
\voiceTwo
- r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
\voiceTwo
r8 e4 d c8~
<<
- { c8 b16 a b8 g~ g2 | }
+ { c8 b16 a b8 g~ 2 | }
\new Voice {
\voiceThree
s4 b4 c2 |
\new Voice {
% Set stems, etc, down
\voiceTwo
- s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ s4 r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
global = { \key f \major \time 6/8 \partial 8 }
SopOneMusic = \relative c'' {
- c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4
+ c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ 4
}
SopOneLyrics = \lyricmode {
Let | flee -- cy flocks the | hills a -- dorn, __
d2 c2 |
}
ManualOneVoiceTwoMusic = \relative c' {
- ees16 d ees8~ ees16 f ees d c8 d~ d c~ |
- c8 c4 b8 c8. g16 c b c d |
+ ees16 d ees8~ 16 f ees d c8 d~ d c~ |
+ 8 c4 b8 c8. g16 c b c d |
}
ManualTwoMusic = \relative c' {
- c16 b c8~ c16 b c g a8 g~ g16 g aes ees |
- f16 ees f d g aes g f ees d e8~ ees16 f ees d |
+ c16 b c8~ 16 b c g a8 g~ 16 g aes ees |
+ f16 ees f d g aes g f ees d e8~ 8es16 f ees d |
}
PedalOrganMusic = \relative c {
- r8 c16 d ees d ees8~ ees16 a, b g c b c8 |
+ r8 c16 d ees d ees8~ 16 a, b g c b c8 |
r16 g ees f g f g8 c,2 |
}
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.20"
+@c \version "2.19.2"
@node Ladění výstupu
@chapter Ladění výstupu
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
sich in der selben befinden,
@lilypond[quote,fragment,relative=2]
-<< { b8~ b8\noBeam } \\ { b[ g8] } >>
+<< { b8~ 8\noBeam } \\ { b[ g8] } >>
@end lilypond
@noindent
<<
{
\once \override Stem.transparent = ##t
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
{
\once \override Stem.transparent = ##t
\once \override Stem.length = #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b[ g8] }
@c `Web' was imported 2009-08-05 with git commit b938d71...
@c @macro copyrightDeclare
-@c Copyright @copyright{} 2009--2012 by the authors.
+@c Copyright @copyright{} 2009--2014 by the authors.
@c @end macro
@set FDL
+/**********************************************************/
+/* GENERAL INFORMATION */
+/**********************************************************/
+
+/* It has been requested that each web manual be styled using a
+ different color. To faciliate that, each manual is being
+ assigned a hue value on the HSB color chart. All specific
+ colors for a manual will be shades and tints of that hue.
+
+ Manual Color Hue
+ learning green 120
+ music-glossary
+ essay
+
+ notation blue 205
+ usage yellow 50
+ snippets
+
+ changes
+ extending red 0
+ internals purple 280
+
+ contributor black doesn't matter - desat
+
/**********************************************************/
/* PAGE-WIDE SETTINGS */
/**********************************************************/
.appendix, .appendixsec, .appendixsubsec,
.unnumbered, .unnumberedsec, .unnumberedsubsec, .unnumberedsubsubsec,
.subheading, .subsubheading {
- color: #204a87;
+ color: #black;
border-bottom: 1px dashed black;
padding-bottom: 0.15em;
margin-top: 0.6em;
}
.settitle {
- background: #b1d281;
+ background: #657f40;
+ color: white;
font-size: 2em;
text-align: center;
padding: 0.4em 0.5em;
- border: solid #7b925a;
+ border: solid black;
border-width: 1px 0;
- margin: 0;
+ margin: 0 0 10px 0;
}
+body.learning .settitle { background-color: #407f40; }
+body.notation .settitle { background-color: #40657f; }
+body.usage .settitle { background-color: #7f7f33; }
+body.extending .settitle { background-color: #7f4040; }
+body.internals .settitle { background-color: #6a407f; }
+body.contributor .settitle { background-color: #000000; }
+
.chapter, .appendix, .unnumbered {
font-size: 1.8em;
}
border: solid #b1d281;
border-width: 1px 1px 1px 5px;
margin: 1em auto;
+ background-color: white;
}
+body.learning blockquote, body.learning .smallexample { border-color: #00ff00; }
+body.notation blockquote, body.notation .smallexample { border-color: #0095ff; }
+body.usage blockquote, body.usage .smallexample { border-color: #ffff00; }
+body.extending blockquote, body.extending .smallexample { border-color: #ff0000; }
+body.internals blockquote, body.internals .smallexample { border-color: #aa00ff; }
+body.contributor blockquote, body.contributor .smallexample { border-color: #000000; }
+
blockquote p, pre.smallexample {
padding: 1em;
margin: 0;
margin: 0 auto 1em;
}
+body.learning table.cartouche { background-color: #cfe5cf; border: 2px solid #7db27d; }
+body.notation table.cartouche { background-color: #cfdce5; border: 2px solid #7d9cb2; }
+body.usage table.cartouche { background-color: #e5e2b8; border: 2px solid #b2b27d; }
+body.extending table.cartouche { background-color: #e5cfcf; border: 2px solid #b27d7d; }
+body.internals table.cartouche { background-color: #decfe5; border: 2px solid #a17db2; }
+body.contributor table.cartouche { background-color: #e5e5e5; border: 2px solid #b2b2b2; }
+
table.cartouche p {
padding: 1em;
margin: 0;
padding: 0;
margin: 0;
overflow: auto;
- background: #f5f5dc;
+ background: #dce35cf;
z-index: 100;
list-style-type: none;
font-size: 0.83em;
line-height: 1.3;
}
+body.learning div#tocframe { background-color: #cfe5cf; }
+body.notation div#tocframe { background-color: #cfdce5; }
+body.usage div#tocframe { background-color: #e5e5b8; }
+body.extending div#tocframe { background-color: #e5cfcf; }
+body.internals div#tocframe { background-color: #decfe5; }
+body.contributor div#tocframe { background-color: #e5e5e5; }
+
@media screen {
body > div#tocframe {
position: fixed
}
div#tocframe a:link, div#tocframe a:visited {
- color: #454532;
+ color: black;
text-decoration: none;
}
div#tocframe a:hover {
- color: #232b16;
+ color: #666666;
text-decoration: underline;
}
line-height: 1.125;
background: #c9ccc4;
padding: 0.25em 1em 0.25em 0.5em;
- border-bottom: 1px solid #a0a087;
+ border-bottom: 1px solid black;
margin: 0;
}
}
.footer {
- background: #e5f5ce;
+ background: #657f40;
font-size: 0.8em;
padding: 0.2em 0;
- border: solid #b1d281;
+ border: solid white;
border-width: 0 0 5px 0;
margin: 0;
+ color: white;
}
+body.learning .footer { background-color: #407f40; }
+body.notation .footer { background-color: #40657f; }
+body.usage .footer { background-color: #7f7f33; }
+body.extending .footer { background-color: #7f4040; }
+body.internals .footer { background-color: #6a407f; }
+body.contributor .footer { background-color: #000000; }
+
.footer a:link {
- color: #0308fc;
+ color: white;
}
.footer p {
margin: 1em;
}
+body.learning .warning { border-color: #00ff00; }
+body.notation .warning { border-color: #0095ff; }
+body.usage .warning { border-color: #ffff00; }
+body.extending .warning { border-color: #ff0000; }
+body.internals .warning { border-color: #aa00ff; }
+body.contributor .warning { border-color: #000000; }
+
+
.advanced {
background: #eeffcc;
text-align: left;
@c `Essay' was born 2002-06-03 with git commit e38f5fc...
@macro copyrightDeclare
-Copyright @copyright{} 2002--2012 bei den Autoren.
+Copyright @copyright{} 2002--2014 bei den Autoren.
@end macro
@set FDL
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Till Paala
\new Voice { \voiceTwo bes \collide bes }
>>
}
- \new Lyrics \lyricsto "sample" \lyricmode { "good " " bad" }
+ \new Lyrics \lyricsto "sample" { "good " " bad" }
>>
}
@end lilypond
fis8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
r2 r8 d16 ees f8 ees16 d
- ees4 ~ ees16 d c bes a4 r8 ees'16 d
+ ees4 ~ 16 d c bes a4 r8 ees'16 d
c8 d16 ees d8 e16 fis g8 fis16 g a4 ~
- a8 d, g f ees d c bes
+ 8 d, g f ees d c bes
a2 g\fermata \bar "|."
}
d4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
r8 fis16 g a8 g16 fis g2 ~
- g2 r8 d' ees g,
+ 2 r8 d' ees g,
fis4 g r8 a16 bes c8 bes16 a
bes4. <g b>8 <a c> r <d, g> r
<ees g>4 <d fis> d2
partIII = \relative c' {
\voiceOne
r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
- bes2 ~ bes8 b16 a g8 a16 b
+ bes2 ~ 8 b16 a g8 a16 b
c4 r r2
R1
r8 d ees g, fis4 g
d4 r r2
r8 d ees g, fis4 a
d,8 d'16 c bes8 c16 d ees2 ~
- ees8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
+ 8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
d,8 d'16 c bes8 c16 d ees8 c a fis'
g f ees d c bes a g
c a d d, g2\fermata
@c `Extending' was born 2003-04-23 with git commit c08f6e8...
@macro copyrightDeclare
-Copyright @copyright{} 2003--2012 bei den Autoren.
+Copyright @copyright{} 2003--2014 bei den Autoren.
@end macro
@set FDL
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.19.2"
@c Translators: Till Paala
\relative c'' {
\override Tie.after-line-breaking =
#my-callback
- c1 ~ \break c2 ~ c
+ c1 ~ \break c2 ~ 2
}
@end lilypond
@c `Learning Manual' was born 1999-10-10 with git commit b9abaac...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 bei den Autoren.
+Copyright @copyright{} 1999--2014 bei den Autoren.
@end macro
@set FDL
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@ignore
Tutorial guidelines:
an die erste der zu verbindenden Noten hängt.
@lilypond[verbatim,quote,relative=2]
-g4~ g c2~ | c4~ c8 a~ a2
+g4~ 4 c2~ | 4~ 8 a~ 2
@end lilypond
geschachtelt werden.
@lilypond[verbatim,quote,relative=2]
-c4~( c8 d~ d4 e)
+c4~( c8 d~ 4 e)
@end lilypond
\clef "bass"
\key c \major
\time 6/8
- c4.~ c8 d b | c8([ d]) b c d b | c8
+ c4.~ 8 d b | c8([ d]) b c d b | c8
}
\addlyrics {
Lar -- go_al fac -- | to -- tum del -- la cit -- | tà
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4
+ c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.29"
+@c \version "2.19.2"
@c Translators: Till Paala, Reinhold Kainhofer
@node Grundbegriffe
c16 d e f
% Voice "1" Voice "2" Voice "3"
<< { g4 f e } \\ { r8 e4 d c8~ } >> |
- << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> |
+ << { d2 e } \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
}
@end lilypond
{ d2 e }
\\
% Voice 2 continues
- { c8 b16 a b8 g~ g2 }
+ { c8 b16 a b8 g~ 2 }
\\
{
\voiceThreeStyle
@lilypond[quote,ragged-right,verbatim]
\relative c' {
% Default behavior or behavior after \oneVoice
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceOne
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceTwo
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
\new Voice {
% Set stems, etc., down
\voiceTwo
- r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
\voiceTwo
r8 e4 d c8~
<<
- { c8 b16 a b8 g~ g2 | }
+ { c8 b16 a b8 g~ 2 | }
\new Voice {
\voiceThree
s4 b4 c2 |
\new Voice {
% Set stems, etc, down
\voiceTwo
- s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ s4 r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
global = { \key f \major \time 6/8 \partial 8 }
SopOneMusic = \relative c'' {
- c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4
+ c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ 4
}
SopOneLyrics = \lyricmode {
Let | flee -- cy flocks the | hills a -- dorn, __
d2 c2 |
}
ManualOneVoiceTwoMusic = \relative c' {
- ees16 d ees8~ ees16 f ees d c8 d~ d c~ |
- c8 c4 b8 c8. g16 c b c d |
+ ees16 d ees8~ 16 f ees d c8 d~ d c~ |
+ 8 c4 b8 c8. g16 c b c d |
}
ManualTwoMusic = \relative c' {
- c16 b c8~ c16 b c g a8 g~ g16 g aes ees |
- f16 ees f d g aes g f ees d e8~ ees16 f ees d |
+ c16 b c8~ 16 b c g a8 g~ 16 g aes ees |
+ f16 ees f d g aes g f ees d e8~ 8es16 f ees d |
}
PedalOrganMusic = \relative c {
- r8 c16 d ees d ees8~ ees16 a, b g c b c8 |
+ r8 c16 d ees d ees8~ 16 a, b g c b c8 |
r16 g ees f g f g8 c,2 |
}
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.20"
+@c \version "2.19.2"
@node Die Ausgabe verändern
@chapter Die Ausgabe verändern
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{
\override Beam.positions = #'(-1 . -1)
}
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
sich in der selben befinden,
@lilypond[quote,fragment,relative=2]
-<< { b8~ b8\noBeam } \\ { b[ g8] } >>
+<< { b8~ 8\noBeam } \\ { b[ g8] } >>
@end lilypond
@noindent
<<
{
\tweak Stem.transparent ##t
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
{
\tweak Stem.transparent ##t
\tweak Stem.length #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b[ g8] }
@c `Notation Reference' was born 1999-10-11 with git commit 940dda0...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 bei den Autoren.
+Copyright @copyright{} 1999--2014 bei den Autoren.
@end macro
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.7"
@c Translators: Till Paala
Kontexteigenschaften werden üblicherweise mit @code{kleinGroßbuchstabe}
benannt. Sie kontrollieren vor allem die Übersetzung von Musik in
-Notation, wie etwa @code{localKeySignature}, welche bestimmt, wann
+Notation, wie etwa @code{localAlterations}, welche bestimmt, wann
ein Taktstrich gesetzt werden muss. Kontexteigenschaften können
ihren Wert mit der Zeit ändern, während eine Notationsdatei interpretiert
wird. Ein gutes Beispiel dafür ist @code{measurePosition}, was die
Kontexte können Eigenschaften haben, deren Bezeichnungen
üblicherweise dem Schema @code{kleinGroß} folgen. Derartige
Eigenschaften sind vor allen Dingen für die Übersetzung der
-Musik in Notation zuständig, beispielsweise @code{localKeySignature}
+Musik in Notation zuständig, beispielsweise @code{localAlterations}
(um zu bestimmen, ob Versetzungszeichen ausgegeben werden
müssen), @code{measurePosition} (um zu bestimmen, ob eine
Taktlinie gesetzt werden muss). Kontexteigenschaften können
bewusst alle Werte zurücksetzen will.
@warning{Geschachtelte Aufrufe funktionieren nicht mit
-Kontexteigenschaften (wie etwa @code{beamExceptions}, @code{keySignature},
+Kontexteigenschaften (wie etwa @code{beamExceptions}, @code{keyAlterations},
@code{timeSignatureSettings}, usw.) Diese Eigenschaften können
nur verändert werden, indem man sie vollständig als Alisten umdefiniert.}
@lilypond[verbatim,quote,relative=1]
<<
- { e1~ e }
+ { e1~ 1 }
\\
{ r4 <g c,> <g c,> <g c,> }
>>
<<
{
\once \override Tie.control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
- e1~ e1
+ e1~ 1
}
\\
{ r4 <g c,> <g c,> <g c,> }
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Till Paala
c4-.^"Allegro" d( e)
f4-.\f g a^\fermata
\mark \default
- c8_.\<\( c16 c~ c2\!
+ c8_.\<\( c16 c~ 2\!
c'2.\prall\)
}
c4-.^"Allegro" d( e)
f4-.\f g a^\fermata
\mark \default
- c8_.\<\( c16 c~ c2\!
+ c8_.\<\( c16 c~ 2\!
c'2.\prall\)
}
@lilypond[quote,verbatim]
guitar = \relative c' {
- r8 <gis-2 cis-3 b-0>~ q4 q8~ q q4
+ r8 <gis-2 cis-3 b-0>~ q4 q8~ 8 q4
}
\new StaffGroup <<
ties = \relative c' {
\repeat volta 2 {
e2. f4~
- f2 g2~
+ 2 g2~
}
\alternative {
{ g4 f2. }
ties = \relative c' {
\repeat volta 2 {
e2. f4~
- f2 g2~ }
+ 2 g2~ }
\alternative {
{ g4 f2. }
{ g4\repeatTie c,2. }
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.6"
+@c \version "2.19.2"
@c Translators: Till Paala
}
\addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } }
}
-\markup { "Copyright 2008--2012" \char ##x00A9 }
+\markup { "Copyright 2008--2014" \char ##x00A9 }
@end lilypond
@cindex Copyright-Zeichen
\set Staff.midiInstrument = #"flute"
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
\set Staff.midiMaximumVolume = #0.9
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
\set Staff.midiInstrument = #"flute"
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Till Paala
\drummode {
\time 2/4
rb8 rb cb cb16 rb-> ~ |
- rb16 rb8 rb16 cb8 cb |
+ 16 rb8 rb16 cb8 cb |
}
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.18"
+@c \version "2.19.2"
@c Translators: Till Paala
dann gesetzt, wenn ein neues System begonnen wird:
@lilypond[verbatim,quote,relative=2]
-cis1~ cis~
+cis1~ 1~
\break
cis
@end lilypond
e8 e g a a16( bes) a8 g
\improvisationOn
e8 ~
- e2 ~ e8 f4 f8 ~
- f2
+ 2 ~ 8 f4 f8 ~
+ 2
\improvisationOff
a16( bes) a8 g e
}
@end lilypond
-@snippets
-
-@lilypondfile[verbatim,quote,texidoc,doctitle]
-{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly}
-
-
@seealso
Notationsreferenz:
@ref{Taktstriche},
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Till Paala
Tilde @code{~} (AltGr++) notiert.
@lilypond[quote,verbatim,relative=2]
-a2 ~ a
+a2 ~ 2
@end lilypond
Bindebögen werden eingesetzt, wenn die Note entweder über eine
@lilypond[quote]
\relative c' {
- r8 c8 ~ c2 r4 |
- r8^"not" c2 ~ c8 r4
+ r8 c8 ~ 2 r4 |
+ r8^"not" c2 ~ 8 r4
}
@end lilypond
@lilypond[quote, verbatim, relative=1]
\tieDotted
-c2 ~ c
+c2 ~ 2
\tieDashed
-c2 ~ c
+c2 ~ 2
\tieHalfDashed
-c2 ~ c
+c2 ~ 2
\tieHalfSolid
-c2 ~ c
+c2 ~ 2
\tieSolid
-c2 ~ c
+c2 ~ 2
@end lilypond
Eigene Strichelungsmuster können definiert werden:
@lilypond[quote, verbatim, relative=1]
\tieDashPattern #0.3 #0.75
-c2 ~ c
+c2 ~ 2
\tieDashPattern #0.7 #1.5
-c2 ~ c
+c2 ~ 2
\tieSolid
-c2 ~ c
+c2 ~ 2
@end lilypond
Die Definition von Muster für die Strichelung der Bindebögen hat
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@c Translators: Till Paala
\new Voice = "first"
{ \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d }
\new Voice= "second"
- { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+ { \voiceTwo d16 c d8~ 16 b c8~ 16 b c8~ 16 b8. }
>>
@end lilypond
<<
{ r8 r16 g e8. f16 g8[ c,] f e16 d }
\\
- { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+ { d16 c d8~ 16 b c8~ 16 b c8~ 16 b8. }
>>
@end lilypond
\parallelMusic #'(voiceA voiceB voiceC) {
% Bar 1
r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' |
- r16 e'8.~ e'4 r16 e'8.~ e'4 |
+ r16 e'8.~ 4 r16 e'8.~ 4 |
c'2 c'2 |
% Bar 2
r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' |
- r16 d'8.~ d'4 r16 d'8.~ d'4 |
+ r16 d'8.~ 4 r16 d'8.~ 4 |
c'2 c'2 |
}
\parallelMusic #'(voiceA voiceB voiceC) {
% Bar 1
r8 g16 c e g, c e r8 g,16 c e g, c e |
- r16 e8.~ e4 r16 e8.~ e4 |
+ r16 e8.~ 4 r16 e8.~ 4 |
c2 c |
% Bar 2
r8 a,16 d f a, d f r8 a,16 d f a, d f |
- r16 d8.~ d4 r16 d8.~ d4 |
+ r16 d8.~ 4 r16 d8.~ 4 |
c2 c |
}
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Till Paala
R1*16
\instrumentSwitch "contrabassoon"
c,,2 g \break
- c,1 ~ | c1
+ c,1 ~ | 1
}
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Till Paala
\new Voice = "melody" {
\time 3/4
f4 g2 ~ |
- g4 e2 ~ |
- e8
+ 4 e2 ~ |
+ 8
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- e __
\time 3/4
\set melismaBusyProperties = #'()
c4 d ( e )
- g8 [ f ] f4 ~ f
+ g8 [ f ] f4 ~ 4
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- e e -- le -- i -- son
\time 3/4
\set melismaBusyProperties = #'()
c4 d ( e )
- g8 [ f ] ~ f4 ~ f
+ g8 [ f ] ~ 4 ~ f
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- _ e __ _ _ _
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Mit Google suchen">
<input type="text" name="brute_query" onfocus="this.value=''" value="Suche">
@c `Usage' was born 1999-10-10 with git commit c82c30c...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 bei den Autoren.
+Copyright @copyright{} 1999--2014 bei den Autoren.
@end macro
@set FDL
@c `Web' was imported 2009-08-05 with git commit b938d71...
@c @macro copyrightDeclare
-@c Copyright @copyright{} 2009--2012 by the authors.
+@c Copyright @copyright{} 2009--2014 by the authors.
@c @end macro
@set FDL
@end ignore
@copying
-Copyright @copyright{} 2009--2012 by the authors.
+Copyright @copyright{} 2009--2014 by the authors.
@c next line is necessary for broken pre-4.13 texinfo's
@c install-info, so leave it there until we officially
@c `Essay' was born 2002-06-03 with git commit e38f5fc...
@macro copyrightDeclare
-Copyright @copyright{} 2002--2012 por los autores.
+Copyright @copyright{} 2002--2014 por los autores.
@end macro
@set FDL
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@node Grabado musical
@chapter Grabado musical
\new Voice { \voiceTwo bes \collide bes }
>>
}
- \new Lyrics \lyricsto "sample" \lyricmode { "bien " " mal" }
+ \new Lyrics \lyricsto "sample" { "bien " " mal" }
>>
}
@end lilypond
fis8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
r2 r8 d16 ees f8 ees16 d
- ees4 ~ ees16 d c bes a4 r8 ees'16 d
+ ees4 ~ 16 d c bes a4 r8 ees'16 d
c8 d16 ees d8 e16 fis g8 fis16 g a4 ~
- a8 d, g f ees d c bes
+ 8 d, g f ees d c bes
a2 g\fermata \bar "|."
}
d4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
r8 fis16 g a8 g16 fis g2 ~
- g2 r8 d' ees g,
+ 2 r8 d' ees g,
fis4 g r8 a16 bes c8 bes16 a
bes4. <g b>8 <a c> r <d, g> r
<ees g>4 <d fis> d2
partIII = \relative c' {
\voiceOne
r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
- bes2 ~ bes8 b16 a g8 a16 b
+ bes2 ~ 8 b16 a g8 a16 b
c4 r r2
R1
r8 d ees g, fis4 g
d4 r r2
r8 d ees g, fis4 a
d,8 d'16 c bes8 c16 d ees2 ~
- ees8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
+ 8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
d,8 d'16 c bes8 c16 d ees8 c a fis'
g f ees d c bes a g
c a d d, g2\fermata
@c `Extending' was born 2003-04-23 with git commit c08f6e8...
@macro copyrightDeclare
-Copyright @copyright{} 2003--2012 por los autores.
+Copyright @copyright{} 2003--2014 por los autores.
@end macro
@set FDL
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.17.6"
+@c \version "2.19.2"
@node Interfaces para programadores
@chapter Interfaces para programadores
\override Tie.after-line-breaking =
#my-callback
c1 ~ \break
- c2 ~ c
+ c2 ~ 2
}
@end lilypond
@c `Learning Manual' was born 1999-10-10 with git commit b9abaac...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 por los autores.
+Copyright @copyright{} 1999--2014 por los autores.
@end macro
@set FDL
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@ignore
Tutorial guidelines: (different from policy.txt!)
tilde curva @code{~} a la primera nota ligada:
@lilypond[verbatim,quote,relative=2]
-g4~ g c2~ | c4~ c8 a~ a2 |
+g4~ 4 c2~ | 4~ 8 a~ 2 |
@end lilypond
@node Ligaduras de expresión
se pueden anidar unas dentro de otras.
@lilypond[verbatim,quote,relative=2]
-c4~( c8 d~ d4 e)
+c4~( c8 d~ 4 e)
@end lilypond
\clef "bass"
\key c \major
\time 6/8
- c4.~ c8 d b | c8([ d]) b c d b | c8
+ c4.~ 8 d b | c8([ d]) b c d b | c8
}
\addlyrics {
Lar -- go_al fac -- | to -- tum del -- la cit -- | tà
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4
+ c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.29"
+@c \version "2.19.2"
@node Conceptos fundamentales
@chapter Conceptos fundamentales
c16 d e f
% Voice "1" Voice "2" Voice "3"
<< { g4 f e } \\ { r8 e4 d c8~ } >> |
- << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> |
+ << { d2 e } \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
}
@end lilypond
{ d2 e }
\\
% Voice 2 continues
- { c8 b16 a b8 g~ g2 }
+ { c8 b16 a b8 g~ 2 }
\\
{
\voiceThreeStyle
@lilypond[quote,ragged-right,verbatim]
\relative c' {
% Default behavior or behavior after \oneVoice
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceOne
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceTwo
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
\new Voice {
% Set stems, etc., down
\voiceTwo
- r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
\voiceTwo
r8 e4 d c8~ |
<<
- { c8 b16 a b8 g~ g2 | }
+ { c8 b16 a b8 g~ 2 | }
\new Voice {
\voiceThree
s4 b c2 |
\new Voice {
% Set stems, etc, down
\voiceTwo
- s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ s4 r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
global = { \key f \major \time 6/8 \partial 8 }
SopOneMusic = \relative c'' {
- c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4
+ c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ 4
}
SopOneLyrics = \lyricmode {
Let | flee -- cy flocks the | hills a -- dorn, __
d2 c |
}
ManualOneVoiceTwoMusic = \relative c' {
- ees16 d ees8~ ees16 f ees d c8 d~ d c~ |
- c8 c4 b8 c8. g16 c b c d |
+ ees16 d ees8~ 16 f ees d c8 d~ d c~ |
+ 8 c4 b8 c8. g16 c b c d |
}
ManualTwoMusic = \relative c' {
- c16 b c8~ c16 b c g a8 g~ g16 g aes ees |
- f16 ees f d g aes g f ees d ees8~ ees16 f ees d |
+ c16 b c8~ 16 b c g a8 g~ 16 g aes ees |
+ f16 ees f d g aes g f ees d ees8~ 16 f ees d |
}
PedalOrganMusic = \relative c {
- r8 c16 d ees d ees8~ ees16 a, b g c b c8 |
+ r8 c16 d ees d ees8~ 16 a, b g c b c8 |
r16 g ees f g f g8 c,2 |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.20"
+@c \version "2.19.2"
@node Trucar la salida
@chapter Trucar la salida
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{
\override Beam.positions = #'(-1 . -1)
}
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
misma voz. Usando dos voces, con las notas ligadas en una de ellas:
@lilypond[quote,fragment,relative=2]
-<< { b8~ b\noBeam } \\ { b8[ g] } >>
+<< { b8~ 8\noBeam } \\ { b8[ g] } >>
@end lilypond
@noindent
<<
{
\tweak Stem.transparent ##t
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
{
\tweak Stem.transparent ##t
\tweak Stem.length #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
\single \hide Stem
\single \hide Flag
\tweak Stem.length #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
@c `Notation Reference' was born 1999-10-11 with git commit 940dda0...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 por los autores.
+Copyright @copyright{} 1999--2014 por los autores.
@end macro
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.7"
@node Cambiar los valores por omisión
@chapter Cambiar los valores por omisión
El nombre de las propiedades de contexto suele ir en minúsculas con
mayúscula en medio. Controlan sobre todo la traducción de la música a
-la notación, p.ej. @code{localKeySignature} (para determinar si hay
+la notación, p.ej. @code{localAlterations} (para determinar si hay
que impriir alteraciones o no), o @code{measurePosition} (para
determinar cuándo hay que imprimir una línea divisoria). El valor de
las propiedades de contexto puede modifcarse con el tiempo durante la
@warning{Las declaraciones anidadas no funcionan para las listas-A de
propiedades de contexto (como @code{beamExceptions},
-@code{keySignature}, @code{timeSignatureSettings}, etc.). Estas
+@code{keyAlterations}, @code{timeSignatureSettings}, etc.). Estas
propiedades sólo se pueden modificar redefiniéndolas completamente
como listas-A.}
@lilypond[verbatim,quote,relative=1]
<<
- { e1~ e }
+ { e1~ 1 }
\\
{ r4 <g c,> <g c,> <g c,> }
>>
<<
{
\shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
- e1~ e
+ e1~ 1
}
\\
{ r4 <g c,> <g c,> <g c,> }
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@node Instrumentos de cuerda con trastes
@section Instrumentos de cuerda con trastes
c4-.^"Allegro" d( e)
f4-.\f g a^\fermata
\mark \default
- c8_.\<\( c16 c~ c2\!
+ c8_.\<\( c16 c~ 2\!
c'2.\prall\)
}
c4-.^"Allegro" d( e)
f4-.\f g a^\fermata
\mark \default
- c8_.\<\( c16 c~ c2\!
+ c8_.\<\( c16 c~ 2\!
c'2.\prall\)
}
@lilypond[quote,verbatim]
guitar = \relative c' {
- r8 <gis-2 cis-3 b-0>~ q4 q8~ q q4
+ r8 <gis-2 cis-3 b-0>~ q4 q8~ 8 q4
}
\new StaffGroup <<
ties = \relative c' {
\repeat volta 2 {
e2. f4~
- f2 g2~
+ 2 g2~
}
\alternative {
{ g4 f2. }
ties = \relative c' {
\repeat volta 2 {
e2. f4~
- f2 g2~ }
+ 2 g2~ }
\alternative {
{ g4 f2. }
{ g4\repeatTie c,2. }
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.19.2"
@node Entrada y salida generales
@chapter Entrada y salida generales
}
\addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } }
}
-\markup { "Copyright 2008--2012" \char ##x00A9 }
+\markup { "Copyright 2008--2014" \char ##x00A9 }
@end lilypond
@cindex copyright, símbolo de
\set Staff.midiInstrument = #"flute"
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
\set Staff.midiMaximumVolume = #0.9
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
\set Staff.midiInstrument = #"flute"
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@node Percusión
@section Percusión
\drummode {
\time 2/4
rb8 rb cb cb16 rb-> ~ |
- rb16 rb8 rb16 cb8 cb |
+ 16 rb8 rb16 cb8 cb |
}
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.18"
+@c \version "2.19.2"
@node Alturas
comienzo de un sistema:
@lilypond[verbatim,quote,relative=2,ragged-right]
-cis1~ cis~
+cis1~ 1~
\break
cis
@end lilypond
e8 e g a a16( bes) a8 g
\improvisationOn
e8 ~
- e2 ~ e8 f4 f8 ~
- f2
+ 2 ~ 8 f4 f8 ~
+ 2
\improvisationOff
a16( bes) a8 g e
}
@end lilypond
-@snippets
-
-@lilypondfile[verbatim,quote,texidoc,doctitle]
-{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly}
-
@seealso
Referencia de la notación:
@ref{Barras de compás},
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@node Duraciones
@section Duraciones
siguiente, que debe tener la misma altura.
@lilypond[quote,verbatim,relative=2]
-a2~ a4~ a16 r r8
+a2~ 4~ 16 r r8
@end lilypond
Se usan ligaduras de unión bien cuando la nota atraviesa la barra de
@c KEEP LY
@lilypond[verbatim,quote]
\relative c' {
- r8^"sí" c~ c2 r4 |
- r8^"no" c2~ c8 r4
+ r8^"sí" c~ 2 r4 |
+ r8^"no" c2~ 8 r4
}
@end lilypond
@lilypond[quote, verbatim, relative=1]
\tieDotted
-c2~ c
+c2~ 2
\tieDashed
-c2~ c
+c2~ 2
\tieHalfDashed
-c2~ c
+c2~ 2
\tieHalfSolid
-c2~ c
+c2~ 2
\tieSolid
-c2~ c
+c2~ 2
@end lilypond
Se pueden especificar patrones de discontinuidad personalizados:
@lilypond[quote, verbatim, relative=1]
\tieDashPattern #0.3 #0.75
-c2~ c
+c2~ 2
\tieDashPattern #0.7 #1.5
-c2~ c
+c2~ 2
\tieSolid
-c2~ c
+c2~ 2
@end lilypond
Las definiciones de patrones de discontinuidad para las ligaduras de
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@c Translation status: post-GDP
\new Voice = "first"
{ \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d }
\new Voice= "second"
- { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+ { \voiceTwo d16 c d8~ 16 b c8~ 16 b c8~ 16 b8. }
>>
@end lilypond
<<
{ r8 r16 g e8. f16 g8[ c,] f e16 d }
\\
- { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+ { d16 c d8~ 16 b c8~ 16 b c8~ 16 b8. }
>>
@end lilypond
\parallelMusic #'(voiceA voiceB voiceC) {
% Bar 1
r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' |
- r16 e'8.~ e'4 r16 e'8.~ e'4 |
+ r16 e'8.~ 4 r16 e'8.~ 4 |
c'2 c'2 |
% Bar 2
r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' |
- r16 d'8.~ d'4 r16 d'8.~ d'4 |
+ r16 d'8.~ 4 r16 d'8.~ 4 |
c'2 c'2 |
}
\parallelMusic #'(voiceA voiceB voiceC) {
% Bar 1
r8 g16 c e g, c e r8 g,16 c e g, c e |
- r16 e8.~ e4 r16 e8.~ e4 |
+ r16 e8.~ 4 r16 e8.~ 4 |
c2 c |
% Bar 2
r8 a,16 d f a, d f r8 a,16 d f a, d f |
- r16 d8.~ d4 r16 d8.~ d4 |
+ r16 d8.~ 4 r16 d8.~ 4 |
c2 c |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@node Notación de los pentagramas
@section Notación de los pentagramas
R1*16
\instrumentSwitch "contrabassoon"
c,,2 g \break
- c,1 ~ | c1
+ c,1 ~ | 1
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@node Música vocal
@section Música vocal
\new Voice = "melody" {
\time 3/4
f4 g2 ~ |
- g4 e2 ~ |
- e8
+ 4 e2 ~ |
+ 8
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- e __
\time 3/4
\set melismaBusyProperties = #'()
c4 d ( e )
- g8 [ f ] f4 ~ f
+ g8 [ f ] f4 ~ 4
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- e e -- le -- i -- son
\time 3/4
\set melismaBusyProperties = #'()
c4 d ( e )
- g8 [ f ] ~ f4 ~ f
+ g8 [ f ] ~ 4 ~ f
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- _ e __ _ _ _
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Búsqueda en Google">
<input type="text" name="brute_query" onfocus="this.value=''" value="Buscar">
@c `Usage' was born 1999-10-10 with git commit c82c30c...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 por los autores.
+Copyright @copyright{} 1999--2014 por los autores.
@end macro
@set FDL
@c `Web' was imported 2009-08-05 with git commit b938d71...
@c @macro copyrightDeclare
-@c Copyright @copyright{} 2009--2012 by the authors.
+@c Copyright @copyright{} 2009--2014 by the authors.
@c @end macro
@set FDL
@c Translators: Francisco Vila
@copying
-Copyright @copyright{} 2009--2012 por los autores.
+Copyright @copyright{} 2009--2014 por los autores.
@c next line is necessary for broken pre-4.13 texinfo's
@c install-info, so leave it there until we officially
@c `Essay' was born 2002-06-03 with git commit e38f5fc...
@macro copyrightDeclare
-Copyright @copyright{} 2002--2012 by the authors.
+Copyright @copyright{} 2002--2014 by the authors.
@end macro
@set FDL
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@node Music engraving
@chapter Music engraving
\new Voice { \voiceTwo bes \collide bes }
>>
}
- \new Lyrics \lyricsto "sample" \lyricmode { "good " " bad" }
+ \new Lyrics \lyricsto "sample" { "good " " bad" }
>>
}
@end lilypond
fis8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
r2 r8 d16 ees f8 ees16 d
- ees4 ~ ees16 d c bes a4 r8 ees'16 d
+ ees4 ~ 16 d c bes a4 r8 ees'16 d
c8 d16 ees d8 e16 fis g8 fis16 g a4 ~
- a8 d, g f ees d c bes
+ 8 d, g f ees d c bes
a2 g\fermata \bar "|."
}
d4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
r8 fis16 g a8 g16 fis g2 ~
- g2 r8 d' ees g,
+ 2 r8 d' ees g,
fis4 g r8 a16 bes c8 bes16 a
bes4. <g b>8 <a c> r <d, g> r
<ees g>4 <d fis> d2
partIII = \relative c' {
\voiceOne
r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
- bes2 ~ bes8 b16 a g8 a16 b
+ bes2 ~ 8 b16 a g8 a16 b
c4 r r2
R1
r8 d ees g, fis4 g
d4 r r2
r8 d ees g, fis4 a
d,8 d'16 c bes8 c16 d ees2 ~
- ees8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
+ 8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
d,8 d'16 c bes8 c16 d ees8 c a fis'
g f ees d c bes a g
c a d d, g2\fermata
@c `Extending' was born 2003-04-23 with git commit c08f6e8...
@macro copyrightDeclare
-Copyright @copyright{} 2003--2012 by the authors.
+Copyright @copyright{} 2003--2014 by the authors.
@end macro
@set FDL
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.19.2"
@node Interfaces for programmers
@chapter Interfaces for programmers
* Markup functions::
* Contexts for programmers::
* Callback functions::
-* Inline Scheme code::
* Difficult tweaks::
@end menu
lists, score, book, bookpart, context definition and output definition
blocks.
-For some kinds of expression (like most music not enclosed in braces)
-LilyPond needs to look further than the expression itself in order to
-determine its end. If such an expression were considered for an
-optional argument by evaluating its predicate, LilyPond would not be
-able to @q{backup} when it decides the expression does not fit the
-parameter. So some forms of music might need to be enclosed in braces
-to make them acceptable in some circumstances. Some other
+Some
ambiguities LilyPond sorts out by checking with predicate
functions: is @samp{-3} a fingering postevent or a negative number? Is
@code{"a" 4} in lyric mode a string followed by a number, or a lyric
For example, a predicate accepting both music expressions and
pitches will consider @code{c''} to be a pitch rather than a music
-expression. Immediately following durations or postevents might
-not work with that interpretation. So it's best to avoid overly
+expression. Immediately following durations or postevents will
+change that interpretation. It's best to avoid overly
permissive predicates like @code{scheme?} when the application
rather calls for more specific argument types.
(grob-interpret-markup grob (markup "foo")))
@end example
-@node Inline Scheme code
-@section Inline Scheme code
+@ignore
+
+@n ode Inline Scheme code
+@s ection Inline Scheme code
TODO: after this section had been written, LilyPond has improved
to the point that finding a @emph{simple} example where one would
written back with @code{set!}. The last element of the
@code{let} block is the return value, @code{m} itself.
+@end ignore
@node Difficult tweaks
\override Tie.after-line-breaking =
#my-callback
c1 ~ \break
- c2 ~ c
+ c2 ~ 2
}
@end lilypond
By default, LilyPond will print these messages to the console along
with all the other messages. To split up these messages and save
-the results of @code{\display@{STUFF@}}, redirect the output to
-a file.
+the results of @code{\display@{STUFF@}}, you can specify an optional
+output port to use:
@example
-lilypond file.ly >display.txt
+@{
+ \displayMusic #(open-output-file "display.txt") @{ c'4\f @}
+@}
@end example
-With a combined bit of Lilypond and Scheme magic, you can actually
-let Lilypond direct just this output to a file of its own:
-
+This will overwrite a previous output file whenever it is called; if you
+need to write more than one expression, you would use a variable for
+your port and reuse it:
@example
@{
- #(with-output-to-file "display.txt"
- (lambda () #@{ \displayMusic @{ c'4\f @} #@}))
+ port = #(open-output-file "display.txt")
+ \displayMusic \port @{ c'4\f @}
+ \displayMusic \port @{ d'4 @}
+ #(close-output-port port)
@}
@end example
+Guile's manual describes ports in detail. Closing the port is actually
+only necessary if you need to read the file before Lilypond finishes; in
+the first example, we did not bother to do so.
A bit of reformatting makes the above information easier to read:
@c `Essay' was born 2002-06-03 with git commit e38f5fc...
@macro copyrightDeclare
-Copyright @copyright{} 2002--2012 par les auteurs.
+Copyright @copyright{} 2002--2014 par les auteurs.
@end macro
@set FDL
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Jean-Charles Malahieude, John Mandereau, Gauvain Pocentek
\new Voice { \voiceTwo bes \collide bes }
>>
}
- \new Lyrics \lyricsto "sample" \lyricmode { "bien " " mauvais" }
+ \new Lyrics \lyricsto "sample" { "bien " " mauvais" }
>>
}
@end lilypond
fis8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
r2 r8 d16 ees f8 ees16 d
- ees4 ~ ees16 d c bes a4 r8 ees'16 d
+ ees4 ~ 16 d c bes a4 r8 ees'16 d
c8 d16 ees d8 e16 fis g8 fis16 g a4 ~
- a8 d, g f ees d c bes
+ 8 d, g f ees d c bes
a2 g\fermata \bar "|."
}
d4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
r8 fis16 g a8 g16 fis g2 ~
- g2 r8 d' ees g,
+ 2 r8 d' ees g,
fis4 g r8 a16 bes c8 bes16 a
bes4. <g b>8 <a c> r <d, g> r
<ees g>4 <d fis> d2
partIII = \relative c' {
\voiceOne
r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
- bes2 ~ bes8 b16 a g8 a16 b
+ bes2 ~ 8 b16 a g8 a16 b
c4 r r2
R1
r8 d ees g, fis4 g
d4 r r2
r8 d ees g, fis4 a
d,8 d'16 c bes8 c16 d ees2 ~
- ees8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
+ 8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
d,8 d'16 c bes8 c16 d ees8 c a fis'
g f ees d c bes a g
c a d d, g2\fermata
@c `Extending' was born 2003-04-23 with git commit c08f6e8...
@macro copyrightDeclare
-Copyright @copyright{} 2003--2012 by par les auteurs.
+Copyright @copyright{} 2003--2014 by par les auteurs.
@end macro
@set FDL
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.19.2"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Gilles Thibault
\override Tie.after-line-breaking =
#my-callback
c1 ~ \break
- c2 ~ c
+ c2 ~ 2
}
@end lilypond
@c `Learning Manual' was born 1999-10-10 with git commit b9abaac...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 par les auteurs.
+Copyright @copyright{} 1999--2014 par les auteurs.
@end macro
@set FDL
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@c Translators: Nicolas Grandclaude, Ludovic Sardain, Gauvain Pocentek
@c Translation checkers: Jean-Charles Malahieude, Valentin Villenave, John Mandereau
liée.
@lilypond[verbatim,quote,relative=2]
-g4~ g c2~ | c4 ~ c8 a8 ~ a2 |
+g4~ 4 c2~ | 4 ~ 8 a8 ~ 2 |
@end lilypond
enchâssées dans un @emph{legato} ou un phrasé.
@lilypond[verbatim,quote,relative=2]
-c4~( c8 d~ d4 e)
+c4~( c8 d~ 4 e)
@end lilypond
@seealso
\clef bass
\key c \major
\time 6/8
- c4.~ c8 d b | c8([ d]) b c d b | c8
+ c4.~ 8 d b | c8([ d]) b c d b | c8
}
\addlyrics {
Lar -- go_al fac -- | to -- tum del -- la cit -- | tà
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4
+ c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.29"
+@c \version "2.19.2"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: John Mandereau
c16 d e f
% Voice "1" Voice "2" Voice "3"
<< { g4 f e } \\ { r8 e4 d c8~ } >> |
- << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> |
+ << { d2 e } \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
}
@end lilypond
{ d2 e }
\\
% Voice 2 continues
- { c8 b16 a b8 g~ g2 }
+ { c8 b16 a b8 g~ 2 }
\\
{
\voiceThreeStyle
@lilypond[quote,ragged-right,verbatim]
\relative c' {
% Default behavior or behavior after \oneVoice
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceOne
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceTwo
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
\new Voice {
% Set stems, etc., down
\voiceTwo
- r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
\voiceTwo
r8 e4 d c8~ |
<<
- { c8 b16 a b8 g~ g2 | }
+ { c8 b16 a b8 g~ 2 | }
\new Voice {
\voiceThree
s4 b c2 |
\new Voice {
% Set stems, etc, down
\voiceTwo
- s4 r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 |
+ s4 r8 e4 d c8 ~ | 8 b16 a b8 g ~ 2 |
}
% Initiate third voice
\new Voice {
global = { \key f \major \time 6/8 \partial 8 }
SopOneMusic = \relative c'' {
- c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4
+ c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ 4
}
SopOneLyrics = \lyricmode {
Let | flee -- cy flocks the | hills a -- dorn, __
d2 c |
}
ManualOneVoiceTwoMusic = \relative c' {
- ees16 d ees8~ ees16 f ees d c8 d~ d c~ |
- c8 c4 b8 c8. g16 c b c d |
+ ees16 d ees8~ 16 f ees d c8 d~ d c~ |
+ 8 c4 b8 c8. g16 c b c d |
}
ManualTwoMusic = \relative c' {
- c16 b c8~ c16 b c g a8 g~ g16 g aes ees |
- f16 ees f d g aes g f ees d ees8~ ees16 f ees d |
+ c16 b c8~ 16 b c g a8 g~ 16 g aes ees |
+ f16 ees f d g aes g f ees d ees8~ 16 f ees d |
}
PedalOrganMusic = \relative c {
- r8 c16 d ees d ees8~ ees16 a, b g c b c8 |
+ r8 c16 d ees d ees8~ 16 a, b g c b c8 |
r16 g ees f g f g8 c,2 |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.20"
+@c \version "2.19.2"
@c Translators: Valentin Villenave, Nicolas Klutchnikoff, Damien Heurtebise
@c Translation checkers: Jean-Charles Malahieude, John Mandereau
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{
\override Beam.positions = #'(-1 . -1)
}
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
dont l'une avec les notes liées
@lilypond[quote,fragment,relative=2]
-<< { b8~ b8\noBeam } \\ { b[ g8] } >>
+<< { b8~ 8\noBeam } \\ { b[ g8] } >>
@end lilypond
@noindent
<<
{
\tweak Flag.transparent ##t
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
{
\tweak Flag.transparent ##t
\tweak Stem.length #8
- b8~ b8\noBeam
+ b8~ 8\noBeam
}
\\
{ b[ g8] }
\single \hide Stem
\single \hide Flag
\tweak Stem.length #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
@c `Notation Reference' was born 1999-10-11 with git commit 940dda0...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 par les auteurs.
+Copyright @copyright{} 1999--2014 par les auteurs.
@end macro
@set FDL
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.7"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Gilles Thibault
Les propriétés des contextes se libellent sous la forme
@code{minusculeMajuscule}. Leur rôle consiste principalement à traduire
-la musique en notation : par exemple, @code{localKeySignature}
+la musique en notation : par exemple, @code{localAlterations}
déterminera quand imprimer une altération accidentelle, et
@code{measurePosition} quand imprimer une barre de mesure. La valeur
des propriétés des contextes peuvent évoluer au fur et à mesure que l'on
@warning{Les déclarations imbriquées ne sont pas fonctionnelles dans le
cas des listes associatives des propriétés de contexte -- telles
-@code{beamExceptions}, @code{keySignature},
+@code{beamExceptions}, @code{keyAlterations},
@code{timeSignatureSettings}, etc. Ces propriétés ne sont modifiables
qu'au travers d'une complète redéfinition de leur liste associative.}
@lilypond[verbatim,quote,relative=1]
<<
- { e1~ e }
+ { e1~ 1 }
\\
{ r4 <g c,> <g c,> <g c,> }
>>
<<
{
\shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
- e1~ e
+ e1~ 1
}
\\
{ r4 <g c,> <g c,> <g c,> }
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Matthieu Jacquot
@c Translation checkers: Jean-Charles Malahieude
c4-.^"Allegro" d( e)
f4-.\f g a^\fermata
\mark \default
- c8_.\<\( c16 c ~ c2\!
+ c8_.\<\( c16 c ~ 2\!
c'2.\prall\)
}
c4-.^"Allegro" d( e)
f4-.\f g a^\fermata
\mark \default
- c8_.\<\( c16 c ~ c2\!
+ c8_.\<\( c16 c ~ 2\!
c'2.\prall\)
}
@lilypond[quote,verbatim]
guitar = \relative c' {
- r8 <gis-2 cis-3 b-0>~ q4 q8~ q q4
+ r8 <gis-2 cis-3 b-0>~ q4 q8~ 8 q4
}
\new StaffGroup <<
ties = \relative c' {
\repeat volta 2 {
e2. f4~
- f2 g2~
+ 2 g2~
}
\alternative {
{ g4 f2. }
ties = \relative c' {
\repeat volta 2 {
e2. f4~
- f2 g2~ }
+ 2 g2~ }
\alternative {
{ g4 f2. }
{ g4\repeatTie c,2. }
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.11"
+@c \version "2.19.2"
@c Translators: Jean-Charles Malahieude, Valentin Villenave
}
\addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } }
}
-\markup { "Copyright 2008--2012" \char ##x00A9 }
+\markup { "Copyright 2008--2014" \char ##x00A9 }
@end lilypond
@cindex copyright
\set Staff.midiInstrument = #"flute"
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
\set Staff.midiMaximumVolume = #0.9
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
\set Staff.midiInstrument = #"flute"
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: John Mandereau
\drummode {
\time 2/4
rb8 rb cb cb16 rb-> ~ |
- rb16 rb8 rb16 cb8 cb |
+ 16 rb8 rb16 cb8 cb |
}
}
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.18"
+@c \version "2.19.2"
@c Translators: Frédéric Chiasson
@c Translation checkers: Valentin Villenave, Jean-Charles Malahieude
sera réimprimée que s'il y a un saut de ligne.
@lilypond[verbatim,quote,relative=2,ragged-right]
-cis1 ~ cis ~
+cis1 ~ 1 ~
\break
cis
@end lilypond
e8 e g a a16( bes) a8 g
\improvisationOn
e8 ~
- e2 ~ e8 f4 f8 ~
- f2
+ 2 ~ 8 f4 f8 ~
+ 2
\improvisationOff
a16( bes) a8 g e
}
}
@end lilypond
-@snippets
-@lilypondfile[verbatim,quote,texidoc,doctitle]
-{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly}
-
@seealso
Manuel de notation :
@ref{Barres de mesure},
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Frédéric Chiasson, Jean-Charles Malahieude
@c Translation checkers: Valentin Villenave, François Martin, Xavier Scheuer
suivante, qui doit être de la même hauteur.
@lilypond[quote,verbatim,relative=2]
-a2~ a4~ a16 r r8
+a2~ 4~ 16 r r8
@end lilypond
Les liaisons de tenue sont utilisées soit lorsque la note dépasse de la
@c KEEP LY
@lilypond[verbatim,quote]
\relative c' {
- r8^"oui" c8~ c2 r4 |
- r8^"non" c2~ c8 r4
+ r8^"oui" c8~ 2 r4 |
+ r8^"non" c2~ 8 r4
}
@end lilypond
@lilypond[quote, verbatim, relative=1]
\tieDotted
-c2~ c
+c2~ 2
\tieDashed
-c2~ c
+c2~ 2
\tieHalfDashed
-c2~ c
+c2~ 2
\tieHalfSolid
-c2~ c
+c2~ 2
\tieSolid
-c2~ c
+c2~ 2
@end lilypond
Il est même possible d'en personnaliser l'allure :
@lilypond[quote, verbatim, relative=1]
\tieDashPattern #0.3 #0.75
-c2~ c
+c2~ 2
\tieDashPattern #0.7 #1.5
-c2~ c
+c2~ 2
\tieSolid
-c2~ c
+c2~ 2
@end lilypond
Que ce soit pour une tenue ou un phrasé, le motif d'une ligne
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@c Translators: Frédéric Chiasson, Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Jean-Charles Malahieude, John Mandereau
\new Voice = "first"
{ \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d }
\new Voice= "second"
- { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+ { \voiceTwo d16 c d8~ 16 b c8~ 16 b c8~ 16 b8. }
>>
@end lilypond
<<
{ r8 r16 g e8. f16 g8[ c,] f e16 d }
\\
- { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+ { d16 c d8~ 16 b c8~ 16 b c8~ 16 b8. }
>>
@end lilypond
\parallelMusic #'(voiceA voiceB voiceC) {
% Bar 1
r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' |
- r16 e'8.~ e'4 r16 e'8.~ e'4 |
+ r16 e'8.~ 4 r16 e'8.~ 4 |
c'2 c'2 |
% Bar 2
r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' |
- r16 d'8.~ d'4 r16 d'8.~ d'4 |
+ r16 d'8.~ 4 r16 d'8.~ 4 |
c'2 c'2 |
}
\parallelMusic #'(voiceA voiceB voiceC) {
% Bar 1
r8 g16 c e g, c e r8 g,16 c e g, c e |
- r16 e8.~ e4 r16 e8.~ e4 |
+ r16 e8.~ 4 r16 e8.~ 4 |
c2 c |
% Bar 2
r8 a,16 d f a, d f r8 a,16 d f a, d f |
- r16 d8.~ d4 r16 d8.~ d4 |
+ r16 d8.~ 4 r16 d8.~ 4 |
c2 c |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: John Mandereau
R1*16
\instrumentSwitch "contrabassoon"
c,,2 g \break
- c,1 ~ | c1
+ c,1 ~ | 1
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Jean-Jacques Gerbaud
\new Voice = "melody" {
\time 3/4
f4 g2 ~ |
- g4 e2 ~ |
- e8
+ 4 e2 ~ |
+ 8
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- e __
\time 3/4
\set melismaBusyProperties = #'()
c4 d ( e )
- g8 [ f ] f4 ~ f
+ g8 [ f ] f4 ~ 4
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- e e -- le -- i -- son
\time 3/4
\set melismaBusyProperties = #'()
c4 d ( e )
- g8 [ f ] ~ f4 ~ f
+ g8 [ f ] ~ 4 ~ f
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- _ e __ _ _ _
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Recherche sur Google">
<input type="text" name="brute_query" onfocus="this.value=''" value="Rechercher">
@c `Usage' was born 1999-10-10 with git commit c82c30c...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 par les auteurs.
+Copyright @copyright{} 1999--2014 par les auteurs.
@end macro
@set FDL
@c `Web' was imported 2009-08-05 with git commit b938d71...
@c @macro copyrightDeclare
-@c Copyright @copyright{} 2009--2012 par les auteurs.
+@c Copyright @copyright{} 2009--2014 par les auteurs.
@c @end macro
@set FDL
@c Translators checkers: Jean-Charles Malahieude
@copying
-Copyright @copyright{} 2009--2012 par les auteurs.
+Copyright @copyright{} 2009--2014 par les auteurs.
@c next line is necessary for broken pre-4.13 texinfo's
@c install-info, so leave it there until we officially
@end macro
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 a szerzők.
+Copyright @copyright{} 1999--2014 a szerzők.
@end macro
@set FDL
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@node Elemi kottaírás
@chapter Elemi kottaírás
karaktert írunk.
@lilypond[verbatim,quote,relative=2]
-g4~ g c2~
-c4 ~ c8 a8 ~ a2
+g4~ 4 c2~
+4 ~ 8 a8 ~ 2
@end lilypond
@subheading Kötőív
átkötött hangok.
@lilypond[verbatim,quote,relative=2]
-c2~( c8 fis fis4 ~ fis2 g2)
+c2~( c8 fis fis4 ~ 2 g2)
@end lilypond
\clef bass
\key c \major
\time 6/8
- c4.~ c8 d b c([ d]) b c d b c
+ c4.~ 8 d b c([ d]) b c d b c
}
\addlyrics {
Lar -- go_al fac -- to -- tum del -- la cit -- tà
\key f \major
\time 6/8
\partial 8
- c8 c([ bes]) a a([ g]) f f'4. b, c4.~ c4
+ c8 c([ bes]) a a([ g]) f f'4. b, c4.~ 4
}
\addlyrics {
Let flee -- cy flocks the hills a -- dorn, __
@c -*- coding: utf-8; mode: texinfo; -*-
-@c \version "2.17.29"
+@c \version "2.19.2"
@node Alapfogalmak
@chapter Alapfogalmak
@translationof Fundamental concepts
c16 d e f
% Voice "1" Voice "2" Voice "3"
<< { g4 f e } \\ { r8 e4 d c8~ } >>
- << { d2 e2 } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b4 c2 } >>
+ << { d2 e2 } \\ { c8 b16 a b8 g~ 2 } \\ { s4 b4 c2 } >>
}
@end lilypond
{ d2 e2 }
\\
% Voice 2 continues
- { c8 b16 a b8 g ~ g2 }
+ { c8 b16 a b8 g ~ 2 }
\\
{
\voiceThreeStyle
@lilypond[quote,ragged-right,verbatim]
\relative c'{
% Default behavior or behavior after \oneVoice
- c d8~ d e4( f g a) b-> c
+ c d8~ 8 e4( f g a) b-> c
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c'{
\voiceOne
- c d8~ d e4( f g a) b-> c
+ c d8~ 8 e4( f g a) b-> c
\oneVoice
- c, d8~ d e4( f g a) b-> c
+ c, d8~ 8 e4( f g a) b-> c
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c'{
\voiceTwo
- c d8~ d e4( f g a) b-> c
+ c d8~ 8 e4( f g a) b-> c
\oneVoice
- c, d8~ d e4( f g a) b-> c
+ c, d8~ 8 e4( f g a) b-> c
}
@end lilypond
\new Voice {
% Set stems, etc., down
\voiceTwo
- r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
\voiceTwo
r8 e4 d c8~
<<
- { c8 b16 a b8 g~ g2 }
+ { c8 b16 a b8 g~ 2 }
\new Voice {
\voiceThree
s4 b4 c2
\new Voice {
% Set stems, etc, down
\voiceTwo
- s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ s4 r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
@lilypond[quote,verbatim]
global = { \time 6/8 \partial 8 \key f \major}
SopOneMusic = \relative c'' {
- c8 | c([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 | }
+ c8 | c([ bes)] a a([ g)] f | f'4. b, | c4.~ 4 | }
SopTwoMusic = \relative c' {
r8 | r4. r4 c8 | a'([ g)] f f([ e)] d | e([ d)] c bes' | }
SopOneLyrics = \lyricmode {
d2 c2
}
ManualOneVoiceTwoMusic = \relative c' {
- ees16 d ees8~ ees16 f ees d c8 d~ d c~
+ ees16 d ees8~ 16 f ees d c8 d~ d c~
c c4 b8 c8. g16 c b c d
}
ManualTwoMusic = \relative c' {
- c16 b c8~ c16 b c g a8 g~ g16 g aes ees
- f ees f d g aes g f ees d e8~ ees16 f ees d
+ c16 b c8~ 16 b c g a8 g~ 16 g aes ees
+ f ees f d g aes g f ees d e8~ 8es16 f ees d
}
PedalOrganMusic = \relative c {
- r8 c16 d ees d ees8~ ees16 a, b g c b c8
+ r8 c16 d ees d ees8~ 16 a, b g c b c8
r16 g ees f g f g8 c,2
}
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org +v2.17 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org +v2.17 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org +v2.17 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Google keresés">
<input type="text" name="brute_query" onfocus="this.value=''" value="Keresés">
@c `Usage' was born 1999-10-10 with git commit c82c30c...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 a szerzők.
+Copyright @copyright{} 1999--2014 a szerzők.
@end macro
@set FDL
@c `Web' was imported 2009-08-05 with git commit b938d71...
@c @macro copyrightDeclare
-@c Copyright @copyright{} 2009--2012 by the authors.
+@c Copyright @copyright{} 2009--2014 by the authors.
@c @end macro
@set FDL
@end ignore
@copying
-Copyright @copyright{} 2009--2012 by the authors.
+Copyright @copyright{} 2009--2014 by the authors.
@c next line is necessary for broken pre-4.13 texinfo's
@c install-info, so leave it there until we officially
@itemize
-@item Bertrand Bordage:
-@email{bordage.bertrand@@gmail.com},
-Core developer, font designer
-
@item Trevor Daniels:
@email{t.daniels@@treda.co.uk},
Assistant documentation editor
@item Ian Hulin:
Core developer
-@item Reinhold Kainhofer:
-@email{reinhold@@kainhofer.com},
-@uref{http://reinhold.kainhofer.com},
-Core developer, Music2xml wrangler
-
@item David Kastrup:
@email{dak@@gnu.org},
hard core developer, user and programming interfaces, bug squashing and
swamp drainage.
-@item Jonathan Kulp:
-Assistant documentation editor
-
@item Werner Lemberg,
@email{wl@@gnu.org},
Fonts, bug squasher
-@item John Mandereau:
-@email{john.mandereau@@free.fr},
-Translations
-
-@item Patrick McCarty:
-SVG guru, bug squad member, bug squasher, text handling
-
@item Joe Neeman:
Core developer
@uref{http://AvatarAcademy.nl},
Main author
-@item Graham Percival:
-@uref{http://percival-music.ca},
-Project manager, Documentation Editor
-
-@item Mark Polesky:
-Assistant documentation editor, Code cleanup
-
-@item Neil Puttock:
-Core developer
-
@item Mike Solomon:
@email{mike@@mikesolomon.org},
Core developer, Frog meister
@item Francisco Vila:
Translation Meister
-@item Valentin Villenave:
-LSR editor and Bug squad member
-
@item Janek Warchoł:
happy nitpicker
@uref{https://www.kth.se/profile/matben/},
Support guru
+@item Bertrand Bordage:
+@email{bordage.bertrand@@gmail.com},
+Core developer, font designer
+
+@item Reinhold Kainhofer:
+@email{reinhold@@kainhofer.com},
+@uref{http://reinhold.kainhofer.com},
+Core developer, Music2xml wrangler
+
@item Pedro Kroeger:
Build meister
+@item Jonathan Kulp:
+Assistant documentation editor
+
@item John Mandereau:
@email{john.mandereau@@free.fr},
Translation meister
+@item Patrick McCarty:
+SVG guru, bug squad member, bug squasher, text handling
+
@item Graham Percival:
@uref{http://percival-music.ca},
Bug meister, Grand Documentation Project leader
+@item Mark Polesky:
+Assistant documentation editor, Code cleanup
+
+@item Neil Puttock:
+Core developer
+
@item Jürgen Reuter:
@email{reuter_j@@web.de},
@uref{http://www.juergen-reuter.de},
@item Nicolas Sceaux:
Core developer, Schemer extraordinaire
+@item Valentin Villenave:
+LSR editor and Bug squad member
+
@end itemize
@end macro
Anders Pilegaard,
Julien Rioux,
Johannes Rohrer,
+Devon Schudy,
Adam Spiers,
Heikki Tauriainen
@c use commas not colons
+Federico Bruni,
Colin Campbell,
Eluze,
-Marc Hohl,
Phil Holmes,
Marek Klein,
Ralph Palmer
Eluze,
Marc Hohl,
Marek Klein,
+Alex Loomis,
Kieren MacMillan,
Urs Liska,
Ralph Palmer
@macro lilypadOSX
@warning{These instructions assume that you are using the LilyPond
application. If you are using any of the programs described in
-@rweb{Easier editing}, please consult the documentation for
-those programs if you have any problems.}
+@rweb{Easier editing}, consult the documentation for those
+programs should you have any problems.}
@subsubheading Step 1. Create your @file{.ly} file
@macro lilypadWindows
@warning{These instructions assume that you are using the built-in
LilyPad editor. If you are using any of the programs described in
-@rweb{Easier editing}, please consult the documentation for
-those programs if you have any problems compiling a file.}
+@rweb{Easier editing}, consult the documentation for those programs
+should you have any problems.}
@subsubheading Step 1. Create your @file{.ly} file
@c not lilypad at all, but I ran out of names. :(
@macro lilypadCommandLine
@warning{These instructions assume that you are familiar with
-command-line programs. If you are using any of the programs
-described in @rweb{Easier editing}, please consult the
-documentation for those programs if you have any problems
-compiling a file.}
+command-line programs. If you are using any of the programs described
+in @rweb{Easier editing}, consult the documentation for those programs
+should you have any problems.}
@subsubheading Step 1. Create your @file{.ly} file
-\version "2.17.6"
+\version "2.19.0"
\header {
texidoc="
pattern = <<
\new Voice {
\override Stem.direction = #UP
- e'4 e'2. e'1 e'\breve*1/2 e'\longa*1/4 \bar "||"
+ e'4 2. 1 \breve*1/2 \longa*1/4 \bar "||"
}
\new Voice {
\override Stem.direction = #DOWN
- a4 a2. a1 a\breve*1/2 a\longa*1/4 \bar "||"
+ a4 2. 1 \breve*1/2 \longa*1/4 \bar "||"
}
>>
@c `Learning Manual' was born 1999-10-10 with git commit b9abaac...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 by the authors.
+Copyright @copyright{} 1999--2014 by the authors.
@end macro
@set FDL
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@ignore
Tutorial guidelines: (different from policy.txt!)
prima nota della legatura.
@lilypond[verbatim,quote,relative=2]
-g4~ g c2~ | c4~ c8 a~ a2 |
+g4~ 4 c2~ | 4~ 8 a~ 2 |
@end lilypond
@node Legature di portamento
possono essere annidate le une dentro le altre.
@lilypond[verbatim,quote,relative=2]
-c4~( c8 d~ d4 e)
+c4~( c8 d~ 4 e)
@end lilypond
\clef "bass"
\key c \major
\time 6/8
- c4.~ c8 d b | c8([ d]) b c d b | c8
+ c4.~ 8 d b | c8([ d]) b c d b | c8
}
\addlyrics {
Lar -- go_al fac -- | to -- tum del -- la cit -- | tà
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4
+ c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.29"
+@c \version "2.19.2"
@node Concetti fondamentali
@chapter Concetti fondamentali
c16 d e f
% Voice "1" Voice "2" Voice "3"
<< { g4 f e } \\ { r8 e4 d c8~ } >> |
- << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> |
+ << { d2 e } \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
}
@end lilypond
{ d2 e }
\\
% Voice 2 continues
- { c8 b16 a b8 g~ g2 }
+ { c8 b16 a b8 g~ 2 }
\\
{
\voiceThreeStyle
@lilypond[quote,ragged-right,verbatim]
\relative c'{
% Default behavior or behavior after \oneVoice
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceOne
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceTwo
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
\new Voice {
% Set stems, etc., down
\voiceTwo
- r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
\voiceTwo
r8 e4 d c8~ |
<<
- { c8 b16 a b8 g~ g2 | }
+ { c8 b16 a b8 g~ 2 | }
\new Voice {
\voiceThree
s4 b c2 |
\new Voice {
% Set stems, etc, down
\voiceTwo
- s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ s4 r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
global = { \key f \major \time 6/8 \partial 8 }
SopOneMusic = \relative c'' {
- c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4
+ c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ 4
}
SopOneLyrics = \lyricmode {
Let | flee -- cy flocks the | hills a -- dorn, __
d2 c |
}
ManualOneVoiceTwoMusic = \relative c' {
- ees16 d ees8~ ees16 f ees d c8 d~ d c~ |
- c8 c4 b8 c8. g16 c b c d |
+ ees16 d ees8~ 16 f ees d c8 d~ d c~ |
+ 8 c4 b8 c8. g16 c b c d |
}
ManualTwoMusic = \relative c' {
- c16 b c8~ c16 b c g a8 g~ g16 g aes ees |
- f16 ees f d g aes g f ees d ees8~ ees16 f ees d |
+ c16 b c8~ 16 b c g a8 g~ 16 g aes ees |
+ f16 ees f d g aes g f ees d ees8~ 16 f ees d |
}
PedalOrganMusic = \relative c {
- r8 c16 d ees d ees8~ ees16 a, b g c b c8 |
+ r8 c16 d ees d ees8~ 16 a, b g c b c8 |
r16 g ees f g f g8 c,2 |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.20"
+@c \version "2.19.2"
@node Modifica dell'output
@chapter Modifica dell'output
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{
\override Beam.positions = #'(-1 . -1)
}
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{ c,8 d fis bes a } % continuazione della voce principale
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuazione della voce principale
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuazione della voce principale
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuazione della voce principale
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
Se si usano due voci con le note legate in una voce
@lilypond[quote,fragment,relative=2]
-<< { b8~ b\noBeam } \\ { b8[ g] } >>
+<< { b8~ 8\noBeam } \\ { b8[ g] } >>
@end lilypond
@noindent
<<
{
\tweak Stem.transparent ##t
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
{
\tweak Stem.transparent ##t
\tweak Stem.length #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
\single \hide Stem
\single \hide Flag
\tweak Stem.length #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
@c `Notation Reference' was born 1999-10-11 with git commit 940dda0...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 degli autori.
+Copyright @copyright{} 1999--2014 degli autori.
@end macro
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.18"
+@c \version "2.19.2"
@c Translators: Federico Bruni
@c Translation checkers: Luca Rossetto Casel
viene ripetuta solo all'inizio di un nuovo sistema:
@lilypond[verbatim,quote,relative=2,ragged-right]
-cis1~ cis~
+cis1~ 1~
\break
cis
@end lilypond
e8 e g a a16( bes) a8 g
\improvisationOn
e8 ~
- e2 ~ e8 f4 f8 ~
- f2
+ 2 ~ 8 f4 f8 ~
+ 2
\improvisationOff
a16( bes) a8 g e
}
@end lilypond
-@snippets
-
-@lilypondfile[verbatim,quote,texidoc,doctitle]
-{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly}
-
@seealso
Guida alla notazione:
@ref{Bar lines},
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Federico Bruni
@c Translation checkers: Luca Rossetto Casel
essere legata alla nota successiva, che deve essere della stessa altezza.
@lilypond[quote,verbatim,relative=2]
-a2~ a4~ a16 r r8
+a2~ 4~ 16 r r8
@end lilypond
Le legature di valore si usano per unire due note a cavallo di una
@lilypond[verbatim,quote]
\relative c' {
- r8 c~ c2 r4 |
- r8^"non" c2~ c8 r4
+ r8 c~ 2 r4 |
+ r8^"non" c2~ 8 r4
}
@end lilypond
@lilypond[quote, verbatim, relative=1]
\tieDotted
-c2~ c
+c2~ 2
\tieDashed
-c2~ c
+c2~ 2
\tieHalfDashed
-c2~ c
+c2~ 2
\tieHalfSolid
-c2~ c
+c2~ 2
\tieSolid
-c2~ c
+c2~ 2
@end lilypond
Si possono specificare modelli di tratteggiatura personalizzati:
@lilypond[quote, verbatim, relative=1]
\tieDashPattern #0.3 #0.75
-c2~ c
+c2~ 2
\tieDashPattern #0.7 #1.5
-c2~ c
+c2~ 2
\tieSolid
-c2~ c
+c2~ 2
@end lilypond
Le definizioni dei modelli di tratteggiatura delle legature di valore hanno la
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@c Translators: Federico Bruni
@c Translation checkers: Luca Rossetto Casel
\new Voice = "prima"
{ \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d }
\new Voice= "seconda"
- { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+ { \voiceTwo d16 c d8~ 16 b c8~ 16 b c8~ 16 b8. }
>>
@end lilypond
<<
{ r8 r16 g e8. f16 g8[ c,] f e16 d }
\\
- { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+ { d16 c d8~ 16 b c8~ 16 b c8~ 16 b8. }
>>
@end lilypond
\parallelMusic #'(voiceA voiceB voiceC) {
% Battuta 1
r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' |
- r16 e'8.~ e'4 r16 e'8.~ e'4 |
+ r16 e'8.~ 4 r16 e'8.~ 4 |
c'2 c'2 |
% Battuta 2
r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' |
- r16 d'8.~ d'4 r16 d'8.~ d'4 |
+ r16 d'8.~ 4 r16 d'8.~ 4 |
c'2 c'2 |
}
\parallelMusic #'(voiceA voiceB voiceC) {
% Battuta 1
r8 g16 c e g, c e r8 g,16 c e g, c e |
- r16 e8.~ e4 r16 e8.~ e4 |
+ r16 e8.~ 4 r16 e8.~ 4 |
c2 c |
% Battuta 2
r8 a,16 d f a, d f r8 a,16 d f a, d f |
- r16 d8.~ d4 r16 d8.~ d4 |
+ r16 d8.~ 4 r16 d8.~ 4 |
c2 c |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Federico Bruni
@c Translation checkers:
R1*16
\instrumentSwitch "contrabassoon"
c,,2 g \break
- c,1 ~ | c1
+ c,1 ~ | 1
}
@end lilypond
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Cerca con Google">
<input type="text" name="brute_query" onfocus="this.value=''" value="Cerca">
@c `Usage' was born 1999-10-10 with git commit c82c30c...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 degli autori.
+Copyright @copyright{} 1999--2014 degli autori.
@end macro
@set FDL
@c `Web' was imported 2009-08-05 with git commit b938d71...
@c @macro copyrightDeclare
-@c Copyright @copyright{} 2009--2012 by the authors.
+@c Copyright @copyright{} 2009--2014 by the authors.
@c @end macro
@set FDL
@c Translation checkers: Luca Rossetto Casel
@copying
-Copyright @copyright{} 2009--2012 degli autori.
+Copyright @copyright{} 2009--2014 degli autori.
@quotation
Permission is granted to copy, distribute and/or modify this
@c `Learning Manual' was born 1999-10-10 with git commit b9abaac...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 by the authors.
+Copyright @copyright{} 1999--2014 by the authors.
@end macro
@set FDL
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@ignore
Tutorial guidelines: (different from policy.txt!)
付加することによって作成されます。
@lilypond[verbatim,quote,relative=2]
-g4~ g c2~ | c4~ c8 a~ a2 |
+g4~ 4 c2~ | 4~ 8 a~ 2 |
@end lilypond
スラーとタイはネストさせることができます。
@lilypond[verbatim,quote,relative=2]
-c4~( c8 d~ d4 e)
+c4~( c8 d~ 4 e)
@end lilypond
@seealso
@lilypond[verbatim,quote,relative=2]
<<
- { a4 g2 f4~ f4 } \\
+ { a4 g2 f4~ 4 } \\
{ r4 g4 f2 f4 }
>>
@end lilypond
@lilypond[verbatim,quote,relative=2]
<<
- { a4 g2 f4~ f4 } \\
+ { a4 g2 f4~ 4 } \\
{ s4 g4 f2 f4 }
>>
@end lilypond
@lilypond[verbatim,quote,relative=2]
<<
\new Staff <<
- { a4 g2 f4~ f4 } \\
+ { a4 g2 f4~ 4 } \\
{ s4 g4 f2 f4 }
>>
\new Staff <<
\clef bass
{ <c g>1 ~ <c g>4 } \\
- { e,,4 d e2 ~ e4}
+ { e,,4 d e2 ~ 4}
>>
>>
@end lilypond
\clef "bass"
\key c \major
\time 6/8
- c4.~ c8 d b | c8([ d]) b c d b | c8
+ c4.~ 8 d b | c8([ d]) b c d b | c8
}
\addlyrics {
Lar -- go_al fac -- | to -- tum del -- la cit -- | tÃ
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4
+ c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.29"
+@c \version "2.19.2"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
c16 d e f
% Voice "1" Voice "2" Voice "3"
<< { g4 f e } \\ { r8 e4 d c8 ~ } >> |
- << { d2 e2 } \\ { c8 b16 a b8 g ~ g2 } \\ { s4 b4 c2 } >> |
+ << { d2 e2 } \\ { c8 b16 a b8 g ~ 2 } \\ { s4 b4 c2 } >> |
}
@end lilypond
{ d2 e }
\\
% Voice 2 continues
- { c8 b16 a b8 g~ g2 }
+ { c8 b16 a b8 g~ 2 }
\\
{
\voiceThreeStyle
@lilypond[quote,ragged-right,verbatim]
\relative c' {
% Default behavior or behavior after \oneVoice
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceOne
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceTwo
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
\new Voice {
% Set stems, etc., down
\voiceTwo
- r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
\voiceTwo
r8 e4 d c8~ |
<<
- { c8 b16 a b8 g~ g2 | }
+ { c8 b16 a b8 g~ 2 | }
\new Voice {
\voiceThree
s4 b c2 |
\new Voice {
% Set stems, etc, down
\voiceTwo
- s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ s4 r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
global = { \key f \major \time 6/8 \partial 8 }
SopOneMusic = \relative c'' {
- c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4
+ c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ 4
}
SopOneLyrics = \lyricmode {
Let | flee -- cy flocks the | hills a -- dorn, __
d2 c |
}
ManualOneVoiceTwoMusic = \relative c' {
- ees16 d ees8~ ees16 f ees d c8 d~ d c~ |
- c8 c4 b8 c8. g16 c b c d |
+ ees16 d ees8~ 16 f ees d c8 d~ d c~ |
+ 8 c4 b8 c8. g16 c b c d |
}
ManualTwoMusic = \relative c' {
- c16 b c8~ c16 b c g a8 g~ g16 g aes ees |
- f16 ees f d g aes g f ees d ees8~ ees16 f ees d |
+ c16 b c8~ 16 b c g a8 g~ 16 g aes ees |
+ f16 ees f d g aes g f ees d ees8~ 16 f ees d |
}
PedalOrganMusic = \relative c {
- r8 c16 d ees d ees8~ ees16 a, b g c b c8 |
+ r8 c16 d ees d ees8~ 16 a, b g c b c8 |
r16 g ees f g f g8 c,2 |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.20"
+@c \version "2.19.2"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{
\override Beam.positions = #'(-1 . -1)
}
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{ c,8 d fis bes a } % メイン ボイスの続き
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % メイン ボイスの続き
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % メイン ボイスの続き
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % メイン ボイスの続き
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
2 つのボイスを使い、そのうちの 1 つにタイで結んだ音符を置きます:
@lilypond[quote,fragment,relative=2]
-<< { b8~ b\noBeam } \\ { b8[ g] } >>
+<< { b8~ 8\noBeam } \\ { b8[ g] } >>
@end lilypond
@noindent
<<
{
\tweak Stem.transparent ##t
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
{
\tweak Stem.transparent ##t
\tweak Stem.length #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
\single \hide Stem
\single \hide Flag
\tweak Stem.length #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
@c `Notation Reference' was born 1999-10-11 with git commit 940dda0...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 by 著作者一同
+Copyright @copyright{} 1999--2014 by 著作者一同
@end macro
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.7"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
通常、コンテキスト プロパティの名前は、@c
小文字で始まる単語に大文字で始まる単語をつなげたものです。@c
これらはたいてい音楽から記譜への翻訳を制御します
--- 例えば、@code{localKeySignature} (臨時記号を表示するかどうかを決定します)
+-- 例えば、@code{localAlterations} (臨時記号を表示するかどうかを決定します)
や、@code{measurePosition} (小節線を表示するタイミングを決定します) です。@c
コンテキスト プロパティは、楽曲の解釈をしている間、@c
ずっと値を変更しておくことができます。@c
ネストされた宣言を用いてキー値を個々に更新する方が安全です。
@warning{ネストされた宣言は、コンテキスト プロパティ連想配列
-(@code{beamExceptions}, @code{keySignature}, @code{timeSignatureSettings} 等)
+(@code{beamExceptions}, @code{keyAlterations}, @code{timeSignatureSettings} 等)
に対しては機能しません。@c
これらのプロパティを変更するには、@c
連想配列として丸ごと再定義するしかありません。}
@lilypond[verbatim,quote,relative=1]
<<
- { e1 ~ e }
+ { e1 ~ 1 }
\\
{ r4 <g c,> <g c,> <g c,> }
>>
<<
{
\shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
- e1~ e
+ e1~ 1
}
\\
{ r4 <g c,> <g c,> <g c,> }
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
c4-.^"Allegro" d( e)
f4-.\f g a^\fermata
\mark \default
- c8_.\<\( c16 c~ c2\!
+ c8_.\<\( c16 c~ 2\!
c'2.\prall\)
}
c4-.^"Allegro" d( e)
f4-.\f g a^\fermata
\mark \default
- c8_.\<\( c16 c~ c2\!
+ c8_.\<\( c16 c~ 2\!
c'2.\prall\)
}
@lilypond[quote,verbatim]
guitar = \relative c' {
- r8 <gis-2 cis-3 b-0>~ q4 q8~ q q4
+ r8 <gis-2 cis-3 b-0>~ q4 q8~ 8 q4
}
\new StaffGroup <<
ties = \relative c' {
\repeat volta 2 {
e2. f4~
- f2 g2~
+ 2 g2~
}
\alternative {
{ g4 f2. }
ties = \relative c' {
\repeat volta 2 {
e2. f4~
- f2 g2~ }
+ 2 g2~ }
\alternative {
{ g4 f2. }
{ g4\repeatTie c,2. }
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.15"
+@c \version "2.19.2"
@c Translators: Yoshiki Sawada
}
\addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } }
}
-\markup { "Copyright 2008--2012" \char ##x00A9 }
+\markup { "Copyright 2008--2014" \char ##x00A9 }
@end lilypond
@cindex copyright sign (著作権記号)
\set Staff.midiInstrument = #"flute"
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
\set Staff.midiMaximumVolume = #0.9
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
\set Staff.midiInstrument = #"flute"
\new Voice \relative c''' {
r2 g\mp g fis ~
- fis4 g8 fis e2 ~
- e4 d8 cis d2
+ 4 g8 fis e2 ~
+ 4 d8 cis d2
}
}
\new Staff {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
\drummode {
\time 2/4
rb8 rb cb cb16 rb-> ~ |
- rb16 rb8 rb16 cb8 cb |
+ 16 rb8 rb16 cb8 cb |
}
}
@end lilypond
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.17.18"
+@c \version "2.19.2"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
新しいシステム (訳者: 譜 1 行分のこと) の開始点でのみ譜刻されます:
@lilypond[verbatim,quote,relative=2]
-cis1 ~ cis ~
+cis1 ~ 1 ~
\break
cis
@end lilypond
e8 e g a a16( bes) a8 g
\improvisationOn
e8 ~
- e2 ~ e8 f4 f8 ~
- f2
+ 2 ~ 8 f4 f8 ~
+ 2
\improvisationOff
a16( bes) a8 g e
}
@end lilypond
-@snippets
-
-@lilypondfile[verbatim,quote,texidoc,doctitle]
-{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly}
-
@seealso
記譜法リファレンス:
@ref{Bar lines},
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
タイはチルド記号 @code{~} を使って入力します:
@lilypond[quote,verbatim,relative=2]
-a2 ~ a
+a2 ~ 2
@end lilypond
タイは、音符が小節線をまたがる場合か、リズムを表すためにドットを@c
@c KEEP LY
@lilypond[verbatim,quote]
\relative c' {
- r8 c8 ~ c2 r4 |
- r8^"こうすべきではありません" c2 ~ c8 r4
+ r8 c8 ~ 2 r4 |
+ r8^"こうすべきではありません" c2 ~ 8 r4
}
@end lilypond
@lilypond[quote, verbatim, relative=1]
\tieDotted
-c2 ~ c
+c2 ~ 2
\tieDashed
-c2 ~ c
+c2 ~ 2
\tieHalfDashed
-c2 ~ c
+c2 ~ 2
\tieHalfSolid
-c2 ~ c
+c2 ~ 2
\tieSolid
-c2 ~ c
+c2 ~ 2
@end lilypond
破線パターンのカスタマイズを指定することができます:
@lilypond[quote, verbatim, relative=1]
\tieDashPattern #0.3 #0.75
-c2 ~ c
+c2 ~ 2
\tieDashPattern #0.7 #1.5
-c2 ~ c
+c2 ~ 2
\tieSolid
-c2 ~ c
+c2 ~ 2
@end lilypond
タイの破線パターン定義の構造は、スラーの破線パターン定義と同じです。@c
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@c Translators: Yoshiki Sawada
\new Voice = "first"
{ \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d }
\new Voice= "second"
- { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+ { \voiceTwo d16 c d8~ 16 b c8~ 16 b c8~ 16 b8. }
>>
@end lilypond
<<
{ r8 r16 g e8. f16 g8[ c,] f e16 d }
\\
- { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+ { d16 c d8~ 16 b c8~ 16 b c8~ 16 b8. }
>>
@end lilypond
\parallelMusic #'(voiceA voiceB voiceC) {
% Bar 1
r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' |
- r16 e'8.~ e'4 r16 e'8.~ e'4 |
+ r16 e'8.~ 4 r16 e'8.~ 4 |
c'2 c'2 |
% Bar 2
r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' |
- r16 d'8.~ d'4 r16 d'8.~ d'4 |
+ r16 d'8.~ 4 r16 d'8.~ 4 |
c'2 c'2 |
}
\parallelMusic #'(voiceA voiceB voiceC) {
% Bar 1
r8 g16 c e g, c e r8 g,16 c e g, c e |
- r16 e8.~ e4 r16 e8.~ e4 |
+ r16 e8.~ 4 r16 e8.~ 4 |
c2 c |
% Bar 2
r8 a,16 d f a, d f r8 a,16 d f a, d f |
- r16 d8.~ d4 r16 d8.~ d4 |
+ r16 d8.~ 4 r16 d8.~ 4 |
c2 c |
}
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Yoshiki Sawada
R1*16
\instrumentSwitch "contrabassoon"
c,,2 g \break
- c,1 ~ | c1
+ c,1 ~ | 1
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
\new Voice = "melody" {
\time 3/4
f4 g2 ~ |
- g4 e2 ~ |
- e8
+ 4 e2 ~ |
+ 8
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- e __
\time 3/4
\set melismaBusyProperties = #'()
c4 d ( e )
- g8 [ f ] f4 ~ f
+ g8 [ f ] f4 ~ 4
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- e e -- le -- i -- son
\time 3/4
\set melismaBusyProperties = #'()
c4 d ( e )
- g8 [ f ] ~ f4 ~ f
+ g8 [ f ] ~ 4 ~ f
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- _ e __ _ _ _
@c `Usage' was born 1999-10-10 with git commit c82c30c...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 by the authors.
+Copyright @copyright{} 1999--2014 by the authors.
@end macro
@set FDL
@c `Web' was imported 2009-08-05 with git commit b938d71...
@c @macro copyrightDeclare
-@c Copyright @copyright{} 2009--2012 by the authors.
+@c Copyright @copyright{} 2009--2014 by the authors.
@c @end macro
@set FDL
@c Translators: Yoshiki Sawada, Yoshinobu Ishizaki
@copying
-Copyright @copyright{} 2009--2012 by the authors.
+Copyright @copyright{} 2009--2014 by the authors.
@c next line is necessary for broken pre-4.13 texinfo's
@c install-info, so leave it there until we officially
@c `Learning Manual' was born 1999-10-10 with git commit b9abaac...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 by the authors.
+Copyright @copyright{} 1999--2014 by the authors.
@end macro
@set FDL
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@ignore
Tutorial guidelines: (different from policy.txt!)
first note being tied.
@lilypond[verbatim,quote,relative=2]
-g4~ g c2~ | c4~ c8 a~ a2 |
+g4~ 4 c2~ | 4~ 8 a~ 2 |
@end lilypond
@node Slurs
larger groups of notes. Slurs and ties can be nested.
@lilypond[verbatim,quote,relative=2]
-c4~( c8 d~ d4 e)
+c4~( c8 d~ 4 e)
@end lilypond
\clef "bass"
\key c \major
\time 6/8
- c4.~ c8 d b | c8([ d]) b c d b | c8
+ c4.~ 8 d b | c8([ d]) b c d b | c8
}
\addlyrics {
Lar -- go_al fac -- | to -- tum del -- la cit -- | tà
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4
+ c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.29"
+@c \version "2.19.2"
@node Fundamental concepts
@chapter Fundamental concepts
For now, though, let us return to the first example and examine the
@code{\score} command, leaving the others to default.
-A @code{\score} block must always contain just one music expression,
-and this must appear immediately after the @code{\score} command.
-Remember that a music expression could be anything from a single
-note to a huge compound expression like
+A @code{\score} block must always contain exactly one music
+expression. Remember that a music expression could be anything
+from a single note to a huge compound expression like
@example
@{
there @emph{is} no mystery. This line explains it all:
@quotation
-@emph{A @code{\score} block must begin with a compound music expression.}
+@emph{A @code{\score} block must contain exactly one music expression.}
@end quotation
@noindent
-To understand what is meant by a music expression and a compound
+To understand what is meant by a
music expression, you may find it useful to review the tutorial,
@ref{Music expressions explained}. In that section, we saw how to
build big music expressions from small pieces -- we started from
c16 d e f
% Voice "1" Voice "2" Voice "3"
<< { g4 f e } \\ { r8 e4 d c8~ } >> |
- << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> |
+ << { d2 e } \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
}
@end lilypond
{ d2 e }
\\
% Voice 2 continues
- { c8 b16 a b8 g~ g2 }
+ { c8 b16 a b8 g~ 2 }
\\
{
\voiceThreeStyle
@lilypond[quote,ragged-right,verbatim]
\relative c' {
% Default behavior or behavior after \oneVoice
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceOne
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceTwo
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
\new Voice {
% Set stems, etc., down
\voiceTwo
- r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
\voiceTwo
r8 e4 d c8~ |
<<
- { c8 b16 a b8 g~ g2 | }
+ { c8 b16 a b8 g~ 2 | }
\new Voice {
\voiceThree
s4 b c2 |
\new Voice {
% Set stems, etc, down
\voiceTwo
- s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ s4 r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
global = { \key f \major \time 6/8 \partial 8 }
SopOneMusic = \relative c'' {
- c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4
+ c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ 4
}
SopOneLyrics = \lyricmode {
Let | flee -- cy flocks the | hills a -- dorn, __
}
@end lilypond
-None of the templates provides this layout exactly. The nearest is
+@warning{This layout can be achieved very easily using the built-in
+template: @code{satb.ly}, see @ref{Built-in templates}. But for ease
+of use this template deliberately hides the necessary context
+structure, instead providing it automatically. So for purposes of
+learning let us see how to build this up from scratch. You may need
+to do this if the built-in template does not meet your needs
+adequately.}
+
+The nearest copy-and-edit template to this layout is
@ref{SATB vocal score and automatic piano reduction} -- but we need
to change the layout and add a piano
accompaniment which is not derived automatically from the vocal parts.
d2 c |
}
ManualOneVoiceTwoMusic = \relative c' {
- ees16 d ees8~ ees16 f ees d c8 d~ d c~ |
- c8 c4 b8 c8. g16 c b c d |
+ ees16 d ees8~ 16 f ees d c8 d~ d c~ |
+ 8 c4 b8 c8. g16 c b c d |
}
ManualTwoMusic = \relative c' {
- c16 b c8~ c16 b c g a8 g~ g16 g aes ees |
- f16 ees f d g aes g f ees d ees8~ ees16 f ees d |
+ c16 b c8~ 16 b c g a8 g~ 16 g aes ees |
+ f16 ees f d g aes g f ees d ees8~ 16 f ees d |
}
PedalOrganMusic = \relative c {
- r8 c16 d ees d ees8~ ees16 a, b g c b c8 |
+ r8 c16 d ees d ees8~ 16 a, b g c b c8 |
r16 g ees f g f g8 c,2 |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.19.2"
@node Templates
@appendix Templates
beautiful printed scores!
@menu
+* Built-in templates::
* Single staff templates::
* Piano templates::
* String quartet templates::
@end menu
+@node Built-in templates
+@appendixsec Built-in templates
+
+A template, suitable for a range of choral music, is built into
+LilyPond. This may be used to create simple choral music, with or
+without piano accompaniment, in two or four staves. Unlike other
+templates, this template is @q{built-in}, which means it does not
+need to be copied and edited: instead it is simply
+@code{\include}'d in the input file.
+
+@warning {Unlike most included files, this built-in template must be
+@code{\include}'d at the @emph{end} of the input file.}
+
+The required music expressions are entered by defining values for
+specific variables. These definition must come before the
+@code{\include}'d file.
+
+The music may be set out with one or two voices per staff by setting
+@code{TwoVoicesPerStaff} to @code{##f} or @code{##t} respectively.
+
+Here's the complete input file for producing a full four-part SATB
+arrangement with individual lyrics and piano accompaniment:
+
+@lilypond[verbatim, quote]
+ SopranoMusic = \relative { a'4\f a8 a a4 a }
+ SopranoLyrics = \lyricmode { Sop -- ra -- no ly -- rics }
+ AltoMusic = \relative { d'4\f d d d }
+ AltoLyrics = \lyricmode { Al -- to ly -- rics }
+ TenorMusic = \relative { a4\p a a a }
+ TenorLyrics = \lyricmode { Te -- nor ly -- rics }
+ BassMusic = \relative { c2\p c4 c }
+ BassLyrics = \lyricmode { Bass ly -- rics }
+ PianoRHMusic = \relative { c' e g c }
+ PianoDynamics = { s2\mp s4 s4 }
+ PianoLHMusic = \relative { c e g c }
+ \include "satb.ly"
+@end lilypond
+
+The same input can be used to produce a score with two voices
+per staff just by setting @code{TwoVoicesPerStaff} to @code{##t}.
+Again, each voice has individual lyrics.
+
+
+@lilypond[verbatim, quote]
+ SopranoMusic = \relative { a'4\f a8 a a4 a }
+ SopranoLyrics = \lyricmode { Sop -- ra -- no ly -- rics }
+ AltoMusic = \relative { d'4\f d d d }
+ AltoLyrics = \lyricmode { Al -- to ly -- rics }
+ TenorMusic = \relative { a4\p a a a }
+ TenorLyrics = \lyricmode { Te -- nor ly -- rics }
+ BassMusic = \relative { c2\p c4 c }
+ BassLyrics = \lyricmode { Bass ly -- rics }
+ PianoRHMusic = \relative { c' e g c }
+ PianoDynamics = { s2\mp s4 s4 }
+ PianoLHMusic = \relative { c e g c }
+ TwoVoicesPerStaff = ##t
+ \include "satb.ly"
+@end lilypond
+
+When @code{TwoVoicesPerStaff} is set to false or allowed to default,
+any of the music variables may be omitted to produce arrangements
+with fewer voices. Here, for example, is how the input file for a
+Soprano/Bass duet might be written:
+
+@lilypond[verbatim,quote]
+ SopranoMusic = \relative { c'' c c c }
+ SopranoLyrics = \lyricmode { High voice ly -- rics }
+ BassMusic = \relative { a a a a }
+ BassLyrics = \lyricmode { Low voice ly -- rics }
+ \include "satb.ly"
+@end lilypond
+
+A second verse or alternative lyrics may be added to each of the
+parts:
+
+@lilypond[verbatim, quote]
+ SopranoMusic = \relative { a'4 a a a }
+ SopranoLyricsOne = \lyricsto "Soprano" {
+ \set stanza = "1."
+ Words to verse one
+ }
+ SopranoLyricsTwo = \lyricsto "Soprano" {
+ \set stanza = "2."
+ Words to verse two
+ }
+ \include "satb.ly"
+@end lilypond
+
+When the lyrics and rhythms are the same for every part, the vocal
+music is best arranged on two staves with two voices in each. Up to
+nine verses may be provided. Here's an unaccompanied example with
+just three verses.
+
+@lilypond[verbatim, quote]
+ SopranoMusic = \relative { a' a a a }
+ AltoMusic = \relative { f' f f f }
+ VerseOne = \lyricmode {
+ \set stanza = "1."
+ Words to verse one
+ }
+ VerseTwo = \lyricmode {
+ \set stanza = "2."
+ Words to verse two
+ }
+ VerseThree = \lyricmode {
+ \set stanza = "3."
+ Words to verse three
+ }
+ TenorMusic = \relative { a a a a }
+ BassMusic = \relative { f f f f }
+ TwoVoicesPerStaff = ##t
+ \include "satb.ly"
+@end lilypond
+
+Other variables may be given values. The key signature and
+the time signature may be changed from the default:
+
+@lilypond[verbatim, quote]
+ Key = \key a \major
+ Time = {
+ \time 5/4
+ \tempo "Allegro" 4 = 144
+ }
+ SopranoMusic = \relative { gis' gis gis gis gis }
+ AltoMusic = \relative { cis' cis cis cis cis }
+ VerseOne = \lyricmode { Words to this du -- et }
+ TwoVoicesPerStaff = ##t
+ \include "satb.ly"
+@end lilypond
+
+The instrument names and/or the short instrument names may be
+changed:
+
+@lilypond[verbatim,quote]
+ SopranoMusic = \relative { c'' c c c }
+ SopranoLyrics = \lyricmode { High voice ly -- rics }
+ SopranoInstrumentName = "Soprano 1"
+ SopranoShortInstrumentName = "S1"
+ AltoMusic = \relative { a' a a a }
+ AltoLyrics = \lyricmode { Low voice ly -- rics }
+ AltoInstrumentName = "Soprano 2"
+ AltoShortInstrumentName = "S2"
+ \include "satb.ly"
+@end lilypond
+
+A descant may be added by defining values for the variable
+@code{DescantMusic} and descant lyrics may be provided by
+defining values for @code{DescantLyrics}.
+
+@code{\header} and @code{\paper} blocks may be added as normal.
+A @code{\layout} block may be provided as the value of the
+@code{Layout} variable:
+
+@example
+Layout = \layout @{ ... @}
+@end example
+
+The complete set of variables which may be changed can be seen by
+examining the file @file{ly/satb.ly}.
+
+@seealso
+Learning Manual:
+@ref{Organizing pieces with variables},
+@ref{Vocal ensembles templates},
+@ref{Extending the templates}.
+
+@knownissues
+More complex arrangements of SATB choral music are not possible with
+these simple built-in templates.
+
+
@node Single staff templates
@appendixsec Single staff templates
@node Vocal ensembles templates
@appendixsec Vocal ensembles templates
+The templates shown below should be copied into your score and edited
+there. If you have a relatively simple SATB layout you may prefer to
+use the built-in templates, which can simply be @code{\include}'d, see
+@ref{Built-in templates}.
+
@menu
* SATB vocal score::
* SATB vocal score and automatic piano reduction::
@ The `line-width' is for \header.
@li lypond[quote,verbatim,ragged-right,line-width]
-\version "2.16.0"
+\version "2.19.2"
\header {
dedication = "dedication"
title = "Title"
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.20"
+@c \version "2.19.2"
@node Tweaking output
@chapter Tweaking output
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{
\override Beam.positions = #'(-1 . -1)
}
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
\time 6/4
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
- bes2.^\markup { \bold "Moderato" } r8
+ bes2.\tempo "Moderato" r8
<<
{ c,8 d fis bes a }
\new Voice {
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
@end lilypond
On to bar three and the start of the Moderato section. The tutorial
-showed how to add bold text with the @code{\markup} command, so
-adding @qq{Moderato} in bold is easy. But how do we merge notes in
+showed how to add a tempo indication with the @code{\tempo} command, so
+adding @qq{Moderato} is easy. But how do we merge notes in
different voices together? This is where we need to turn again to
the Notation Reference for help. A search for @qq{merge} in the
Notation Reference index quickly leads us to the commands for merging
bes1~ |
\bar "||"
\time 6/4
- bes2.^\markup { \bold "Moderato" } r8
+ bes2.\tempo "Moderato" r8
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
% Start polyphonic section of four voices
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
bes1~ |
\bar "||"
\time 6/4
- bes2.^\markup { \bold "Moderato" } r8
+ bes2.\tempo "Moderato" r8
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
% Start polyphonic section of four voices
bes1~ |
\bar "||"
\time 6/4
- bes2.^\markup { \bold "Moderato" } r8
+ bes2.\tempo "Moderato" r8
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
% Start polyphonic section of four voices
with the tied notes in one of them
@lilypond[quote,fragment,relative=2]
-<< { b8~ b\noBeam } \\ { b8[ g] } >>
+<< { b8~ 8\noBeam } \\ { b8[ g] } >>
@end lilypond
@noindent
<<
{
\tweak Stem.transparent ##t
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
{
\tweak Stem.transparent ##t
\tweak Stem.length #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
\single \hide Stem
\single \hide Flag
\tweak Stem.length #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
$Texi2HTML::THISDOC{'CSS_LINES'} .= "<script language=\"JavaScript\" src=\"${reldir}lily_search.js\"></script>\n";
}
}
+
+ ## This section makes the manual name visible to CSS through the body tag
+ ## so that styles can be applied per manual. It will add the manual
+ ## directory name (e.g., 'notation' or 'learning') as a CSS class, as well
+ ## as a development status.
+
+ # Parse the input file name to determine the manual we're dealing with.
+ my ($docu_dir, $docu_name) = split_texi_filename ($Texi2HTML::THISDOC{'input_file_name'});
+
+ # Hard-coded value to indicate if this is a development version
+ # ('devStatus') or stable version ('stableStatus')
+ # TODO: Figure out how to automatically set this value based on the even/odd minor revision number or some other mechanism.
+ $documentstatus = 'devStatus';
+
+ # Create the extra information for the <body> tag.
+ # For example, the development Notation reference in English
+ # will output in HTML as <body lang='en' class='notation devStatus'>
+ $Texi2HTML::Config::BODYTEXT = 'lang="' . $Texi2HTML::THISDOC{current_lang} . '" class="' . $docu_name . ' ' . $documentstatus . '"';
+
}
--- /dev/null
+\version "2.18.0"
+
+\paper {
+ tagline = ##f
+ paper-height = 70\mm
+}
+
+measIu = {
+ \override TupletBracket.outside-staff-priority = #500
+ \set subdivideBeams = ##t
+ \tupletUp
+ \tweak style #'dashed-line
+ \tuplet 3/2 {
+ \tuplet 3/2 {
+ \override NoteHead.color = #red
+ \once \override DynamicLineSpanner.outside-staff-priority = ##f
+ d'4 -\tweak X-offset #-2 -\tweak Y-offset #0 ^\ff r8
+ }
+ r8
+ }
+}
+
+measIl = {
+ \set subdivideBeams = ##t
+ \tupletDown
+ \override NoteHead.color = #red
+ <<
+ {
+ \voiceOne
+ \override NoteHead.color = #red
+ ees4 ^\f
+ }
+ \new Voice {
+ \voiceTwo
+ \override NoteHead.color = #red
+ \override TupletBracket.outside-staff-priority = #500
+ \tweak style #'dashed-line
+ \tuplet 3/2 {
+ f,4~ -\tweak X-offset #-2 _\f
+ \tuplet 3/2 {
+ f,16 r8
+ }
+ }
+ }
+ >>
+ \oneVoice
+ | %1
+}
+
+measIIu = {
+ \override TupletBracket.positions = #'(10.5 . 10.5)
+ \tupletUp
+ \tuplet 5/4 {
+ \override NoteHead.color = #blue
+ b'''16[ -\tweak X-offset #-4.5 ^\mf
+ a''16.~^\ff
+ }
+ \tuplet 5/4 {
+ \override NoteHead.color = #blue
+ a''32
+ \override NoteHead.color = #red
+ d'''8^\ff
+ }
+ \tuplet 5/4 {
+ \override NoteHead.color = #blue
+ r16. << g''16] aes'''16]^\p >>
+ }
+ | % 2
+}
+
+measIIl = {
+ \set subdivideBeams = ##t
+ \tupletUp
+ \clef treble
+ \tuplet 5/4 {
+ \override NoteHead.color = #blue
+ \set stemRightBeamCount = #1
+ r16.[ gis'16~_\f
+ }
+ \tuplet 5/4 {
+ gis'32
+ \override NoteHead.color = #red
+ c'8_\pp
+ }
+ \tuplet 5/4 {
+ cis''16. _\mf
+ \override NoteHead.color = #blue
+ fis'16] _\p
+ }
+}
+
+measIIIu = {
+ \tupletUp
+ \override TupletBracket.bracket-visibility = ##t
+ \tweak style #'dashed-line
+ \tweak text #tuplet-number::calc-fraction-text
+ \tweak positions #'(20 . 20)
+ \tuplet 4/3 {
+ \tweak positions #'(17.5 . 17.5)
+ \tuplet 5/4 {
+ \override NoteHead.color = #red
+ \change Staff = lower
+ \voiceOne
+ <d'' es'> 8[ _\laissezVibrer
+ \change Staff = upper
+ \voiceTwo
+ f''32^\f\laissezVibrer
+ }
+ \override NoteHead.color = #blue
+ b''32^\ff\laissezVibrer
+ a'16.^\ff\laissezVibrer
+ gis''8^\ff\laissezVibrer
+ \change Staff = lower
+ \voiceOne
+ \clef bass
+ \override NoteHead.color = #red
+ cis'8]_\pp
+ \oneVoice
+ }
+}
+
+measIIIl = {
+ \textSpannerDown
+ \override TextSpanner.bound-details.left.text = \markup { \musicglyph #"pedal.Ped" }
+ \override TextSpanner.bound-details.right.text = \markup { \musicglyph #"pedal.*" }
+ \override TextSpanner.dash-fraction = #0.05
+ \override TextSpanner.dash-period = #1
+ s8 _\pp\startTextSpan s8
+ s16 s32 s32 \stopTextSpan
+}
+
+measIVu = {
+ \revert TupletBracket.positions
+ \override NoteHead.color = #red
+ \change Staff = upper
+ \tupletUp
+ c''4.~_\p
+ \tuplet 5/4 {
+ c''32 r8
+ }
+}
+
+measIVl = {
+ \override NoteHead.color = #red
+ d,4.~_\mf
+ \tuplet 5/4 {
+ d,32 r8
+ }
+}
+
+\score {
+ \new PianoStaff <<
+ \new Staff = "upper"
+ {
+ \override Staff.TimeSignature #'transparent = ##t
+ \override Staff.TimeSignature #'extra-spacing-width = #'(0.0 . 3.0)
+ \accidentalStyle dodecaphonic
+ \autoBeamOff
+ \clef treble
+ \measIu
+ \measIIu
+ \measIIIu
+ \measIVu
+ }
+ \new Dynamics \with { \consists "Time_signature_engraver" }
+ {
+ \override Dynamics.TimeSignature.font-size = #4
+ \override Dynamics.TimeSignature.font-name = "New Century Schoolbook"
+ \time 2/8
+ s4 |
+ \time 3/8
+ s4. |
+ s4. |
+ \time 4/8
+ s2
+ }
+ \new Staff = "lower"
+ {
+ \override Staff.TimeSignature #'transparent = ##t
+ \accidentalStyle dodecaphonic
+ \autoBeamOff
+ \clef bass
+ \measIl
+ \measIIl
+ \measIIIl
+ \measIVl
+ }
+ >>
+}
-\version "2.17.30"
+\version "2.19.2"
\include "example-header.ily"
\paper {
% the \scaleDurations command below makes 5 notes last the
% duration of a dotted quarter
e8 c4 \scaleDurations 3/2 { \tuplet 5/4{e16[ d e d e]} } e8 f4 | % 2
- g2. ~ g4. | % 3
+ g2. ~ 4. | % 3
f8 d4 f4. \scaleDurations 3/2 { \tuplet 6/4{ g16[ f e f e f]}} % 4
g8 g4 g4. e4. | % 5
fis8 d4 e8\startGroup g4\stopGroup f8[ e d] | % 6
c2. c8\startGroup b8 \slash c\stopGroup | % 1
a2. c4. | d2. e4. | % 2-3
f2. f8 e d | % 4
- c2. ~ c4. | r2. r4. | % 5-6
+ c2. ~ 4. | r2. r4. | % 5-6
g'4. g g8 f e | % 7
}
-\version "2.17.6"
+\version "2.19.2"
%\include "example-header.ily"
\global
\halsdown
\repeat volta 2 {
- es16 d es8~ es16 f es d c8 d~ d c
+ es16 d es8~ 16 f es d c8 d~ d c
c8 c4 h8 c8. \staffdown g16 \staffup c h c d
- es16 d es8~ es16 f es d c8 d16 es f as g f~
- f16 e f8~ f16 g f es d es d8~ d16 es f d
+ es16 d es8~ 16 f es d c8 d16 es f as g f~
+ 16 e f8~ 16 g f es d es d8~ 16 es f d
%% Takt 5 ==============================================
g8 f es16 g as es f es f d g as g f
- e8 f16 g as g as e f g f8~ f16 f es d
+ e8 f16 g as g as e f g f8~ 16 f es d
}
- es16 d es8~ es16 f es des c8 \staffdown b~ b16 b c g
- as16 g as f b c b as g f g8~ g16 b \staffup c d
- es16 d es8~ es16 f es d c8 d16 es f as g f
+ es16 d es8~ 16 f es des c8 \staffdown b~ 16 b c g
+ as16 g as f b c b as g f g8~ 16 b \staffup c d
+ es16 d es8~ 16 f es d c8 d16 es f as g f
%% Takt 10 =============================================
es16 d es8 d g~g g4 fis8
g16 d es c \staffdown d h c a h a h c d h g h
- c16 h c \staffup d es d es8~ es d4 c8~
- c16 h c8~ c h c16 \staffdown g as8 g4\fermata
+ c16 h c \staffup d es d es8~ 8 d4 c8~
+ 16 h c8~ 8 h c16 \staffdown g as8 g4\fermata
}
}
\new Voice \relative c' {
\global
\repeat volta 2 {
- c16 h c8~ c16 h c g a8 g~ g16 g as es
- f16 es f d g as g f es d \tieDown es8~ es16 \tieNeutral f es d
+ c16 h c8~ 16 h c g a8 g~ 16 g as es
+ f16 es f d g as g f es d \tieDown es8~ 16 \tieNeutral f es d
c16 h c g' c h c c, f8. g16 as!4~
- as16 g as b c h c8 d8. c16 h c d h
+ 16 g as b c h c8 d8. c16 h c d h
%% Takt 5 ==============================================
- es16 d es d~ d8 c~c c4 h8
- c4~ c8. b16 as b as8 g16 as g f
+ es16 d es d~ 8 c~c c4 h8
+ c4~ 8. b16 as b as8 g16 as g f
}
- \halsdown es16 f g as b des c b as g f8~ f es
+ \halsdown es16 f g as b des c b as g f8~ 8 es
es8 es4 d8 es8. b16 es d es f
- es16 f g8 c16 d c b a g f8~ f4
+ es16 f g8 c16 d c b a g f8~ 4
%% Takt 10 =============================================
g16 fis g a b a b g c b c a d es d c
h8 c16 a h g a fis g8 d16 es f es f8~
- f16 d es h c h c8 r16 f g d es g as fis
- g16 d f! es f as g f e8. f16~ f d e8\fermata
+ 16 d es h c h c8 r16 f g d es g as fis
+ g16 d f! es f as g f e8. f16~ 16 d e8\fermata
}
}
\clef "bass"
\relative c {
\repeat volta 2 {
- r8 c16 d es d es8~ es16 a, h g c h c8
+ r8 c16 d es d es8~ 16 a, h g c h c8
r16 g as f g f g8 c,2
- r8 c'16 d es d es8~ es16 c f es d c d8
- c8 f16 g as g as8~ as16 d, fis d g fis g8
+ r8 c'16 d es d es8~ 16 c f es d c d8
+ c8 f16 g as g as8~ 16 d, fis d g fis g8
%% Takt 5 ==============================================
r8 a16 h c h c8
r16 g as f g f g8
r16 g as e f e f8 r16 e f h, c h c8
}
- r8 es16 f g f g8~ g16 c, d! b es d es8
+ r8 es16 f g f g8~ 16 c, d! b es d es8
r16 b c as b as b8 es,2
- r8 c'16 d es d es8~ es16 c f es d c d8
+ r8 c'16 d es d es8~ 16 c f es d c d8
%% Takt 10 =============================================
c8 es16 f! g fis g8 r16 d es c d c d8
g,1
\override Score.MetronomeMark.extra-offset = #'(0 . 6)
\override Score.MetronomeMark.font-size = #3
\tempo 8=42
- \time 5/16 s4 ~ s16 \noBreak % measure 6
+ \time 5/16 s4 s16 \noBreak % measure 6
\time 4/8 s2 \noBreak % measure 7
\time 4/8 s2 \noBreak % measure 8
-\version "2.17.6"
+\version "2.19.0"
\header {
tagline = ##f
ees r r r4 r8 r4 r8 |
}
- trian = \relative c' {
+ trian = {
\clef percussion \time 6/8
R2.*4 |
\time 9/8
R1*9/8 |
}
- cym = \relative c' {
+ cym = {
\clef percussion \time 6/8
R2.*4 |
\time 9/8
R1*9/8 |
}
- tamt = \relative c' {
+ tamt = {
\clef percussion \time 6/8
R2. |
r4 r8 r c4\mf\<^"*" ~ |
- c8\!\ff r r r4 r8 | R2. |
+ 8\!\ff r r r4 r8 | R2. |
\time 9/8
R1*9/8 |
}
- tamb = \relative c' {
+ tamb = {
\clef percussion \time 6/8
R2.*4 |
\time 9/8
R1*9/8 |
}
- snare = \relative c' {
+ snare = {
\clef percussion \time 6/8
R2.*4 |
\time 9/8
- c8\pp c c c c c c c c |
+ c8\pp 8 8 8 8 8 8 8 8 |
}
- bsdrum = \relative c' {
+ bsdrum = {
\clef percussion \time 6/8
- c2.:32\pp\< ~ | c: ~ |
- c8\!\ff \offCr r r r4 r8 | R2. |
+ c2.:32\pp\< ~ | 2.: ~ |
+ 8\!\ff \offCr r r r4 r8 | R2. |
\time 9/8
- c2.:32\pp ~ c4.: |
+ 2.:32\pp ~ 4.: |
}
harprh = \relative c'' {
%%%
%%% Nicolas Sceaux <nicolas.sceaux@free.fr>
-\version "2.16.0"
+\version "2.19.2"
\include "sesto.ily"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\set Staff.instrumentName = \markup \smallCaps Sesto.
\global \clef treble \sesto
>>
- \lyricsto "sesto" \new Lyrics \sestoLyrics
+ \new Lyrics \lyricsto "sesto" \sestoLyrics
>>
\new Staff <<
\set Staff.instrumentName = "Bassi."
%%%
%%% Nicolas Sceaux <nicolas.sceaux@free.fr>
-\version "2.16.0"
+\version "2.19.2"
\include "sesto.ily"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\set Staff.instrumentName = \markup \smallCaps Sesto.
\global \clef treble \sesto
>>
- \lyricsto "sesto" \new Lyrics \sestoLyrics
+ \new Lyrics \lyricsto "sesto" \sestoLyrics
>>
\new PianoStaff <<
\new Staff <<
%%%
%%% Nicolas Sceaux <nicolas.sceaux@free.fr>
-\version "2.16.0"
+\version "2.19.2"
\header {
title = "Giulio Cesare in Egitto"
subtitle = "Sesto: Svegliatevi nel core, furie d'un alma offesa (excerpt)"
sesto = {
R1*6 |
r4 r8 g' c'' ees''16[ d''] c''8 c'' |
- c'' g' ees''4 ~ ees''8 d''16 ees'' f''8 aes' |
+ c'' g' ees''4 ~ 8 d''16 ees'' f''8 aes' |
aes' g' r c'' c'' b'16[ c''] d''8 g' |
%{
c'' c'' r c'' f' f''16[ ees''] d''8 c'' |
b'16[ a'] g'8 r4 ees''8 ees''16 d'' c''8 bes' |
aes' g' r g' aes' f' d'' b' |
- f''2 ~ f''8 d'' b' g' |
+ f''2 ~ 8 d'' b' g' |
ees'4 r8 d'' ees'' d''16[ c''] b'4 |
%%25
c'' r8 g' c'' g' ees' g' |
c'4 r8 g' aes' f' d'' b' |
- f''2 ~ f''8 d'' b' g' |
+ f''2 ~ 8 d'' b' g' |
ees'4 r8 g'' ees'' d''16[ c''] b'4 |
c''2 r |
%%30
violinoI = {
r4 r8 g' c'' ees''16 d'' c''8 c'' |
- c'' c' ees''4 ~ ees''8 d''16 ees'' f''8 aes' |
+ c'' c' ees''4 ~ 8 d''16 ees'' f''8 aes' |
aes' g' r c'' c''8.^\trill b'32 c'' d''8 g' |
f'4. d''8 ees'' d''16 c'' b'4 |
%%5
c''16 g'' f'' g'' ees'' g'' f'' g'' ees'' g'' f'' g'' ees'' g'' f'' g'' |
c'' g'' f'' g'' ees'' g'' f'' g'' aes''8 g''16 f'' f''4^\trill |
ees'' r8 g'_\p c'' ees''16 d'' c''8 c'' |
- c'' g' ees''4 ~ ees''8 d''16 ees'' f''8 aes' |
+ c'' g' ees''4 ~ 8 d''16 ees'' f''8 aes' |
aes' g' r c'' c'' b'16 c'' d''8 g' |
%{
%%10
c'' ees'' ees'' f'' g'' ees'' f'' g'' aes'' f'' g'' ees'' f'' d'' ees'' c'' |
\tag #'violin { g'' g' g'' g'' } \tag #'reduction { g'' d'' g'' g'' } g'' b' g'' g'' g'' f'' ees'' d'' c''8 bes' |
aes' g' r g' aes' f' d'' b' |
- f''2 ~ f''8 d'' b' g' |
+ f''2 ~ 8 d'' b' g' |
ees'16 c' g' ees' c'' g' g'' d'' g'4 r |
%%25
c'''16 ees''' d''' ees''' c''' ees''' d''' ees''' g'' c''' b'' c''' g'' c''' b'' c''' |
ees'' g'' f'' g'' ees'' g'' f'' g'' \tag #'violin { aes'8 f' } \tag #'reduction { c''8 aes' } d'' b' |
- f''2 ~ f''8 d'' b' g' |
+ f''2 ~ 8 d'' b' g' |
ees'4^\fermata r r2 |
r4 r8 c'_\f c'' ees''16 d'' c''8 c'' |
%%30
- c'' c' ees''4 ~ ees''8 d''16 ees'' f''8 aes' |
+ c'' c' ees''4 ~ 8 d''16 ees'' f''8 aes' |
aes' g' r g' aes' f' d'' b' |
- f''2 ~ f''8 d'' b' g' |
+ f''2 ~ 8 d'' b' g' |
c''16 g'' f'' g'' ees'' g'' f'' g'' c'' g'' f'' g'' ees'' g'' f'' g'' |
b'8 c''16 d'' ees''8 d'' c''4^\fermata r
%}
violinoII = {
r4 r8 g' c'' ees''16 d'' c''8 c'' |
- c'' c' ees''4 ~ ees''8 d''16 ees'' f''8 aes' |
+ c'' c' ees''4 ~ 8 d''16 ees'' f''8 aes' |
aes' g' r c'' c''8.^\trill b'32 c'' d''8 g' |
f'4. d''8 ees'' d''16 c'' b'4 |
%%5
c''16 ees'' d'' ees'' c'' ees'' d'' ees'' c'' ees'' d'' ees'' c'' ees'' d'' ees'' |
c'' ees'' d'' ees'' c'' ees'' d'' ees'' d''8[ ees''] ees'' d'' |
ees''4 r8 g' c'' ees''16 d'' c''8 c'' |
- c'' g' ees''4 ~ ees''8 d''16 ees'' f''8 aes' |
+ c'' g' ees''4 ~ 8 d''16 ees'' f''8 aes' |
aes' g' r c'' c'' b'16 c'' d''8 g' |
%{
%%10
aes' c'' c'' d'' ees'' c'' d'' ees'' f'' d'' ees'' c'' d'' b' c'' a' |
\tag #'violin { b' d' d' b' } \tag #'reduction { b' g' d'' b' } b' g' b' d'' g'' f'' ees'' d'' c''8 bes' |
d' ees' r g' aes' f' d'' b' |
- f''2 ~ f''8 d'' b' g' |
+ f''2 ~ 8 d'' b' g' |
ees'16 c' g' ees' c'' g' g'' d'' g'4 r |
%%25
ees''16 g'' f'' g'' ees'' g'' f'' g'' ees'' ees'' d'' ees'' c'' ees'' d'' ees'' |
g' ees'' d'' ees'' c'' ees'' d'' ees'' \tag #'violin { c''8 aes' } \tag #'reduction { aes'8 f' } f' d' |
- f''2 ~ f''8 d'' b' g' |
+ f''2 ~ 8 d'' b' g' |
ees'4^\fermata r r2 |
r4 r8 c' c'' ees''16 d'' c''8 c'' |
%%30
- c'' c' ees''4 ~ ees''8 d''16 ees'' f''8 aes' |
+ c'' c' ees''4 ~ 8 d''16 ees'' f''8 aes' |
aes' g' r g' aes' f' d'' b' |
- f''2 ~ f''8 d'' b' g' |
+ f''2 ~ 8 d'' b' g' |
c''16 ees'' d'' ees'' c'' ees'' d'' ees'' c'' ees'' d'' ees'' c'' ees'' d'' ees'' |
d'8 ees'16 f' g'8 b' c''4^\fermata r
%}
-\version "2.17.30"
+\version "2.19.2"
#(define (glissando::calc-extra-dy grob)
(let* ((original (ly:grob-original grob))
s4 e,4 s2
s2 s8 < e'-3 >4. ~
e4 \hideNotes \grace { b8 \glissando s4 } \unHideNotes < e-2 >4\5 e,2 ~
- e2 < e'\6\harmonic >
+ 2 < e'\6\harmonic >
}
\score {
@c `Music Glossary' was born 1999-10-04 with git commit 280a0bb...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 by the authors
+Copyright @copyright{} 1999--2014 by the authors
@end macro
@set FDL
@c `Learning Manual' was born 1999-10-10 with git commit b9abaac...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 door de auteurs.
+Copyright @copyright{} 1999--2014 door de auteurs.
@end macro
@set FDL
@c Translation checker:
@c Translation checker committish:
-@c \version "2.17.28"
+@c \version "2.19.2"
@ignore
Tutorial guidelines: (different from policy.txt!)
wordt.
@lilypond[verbatim,quote,relative=2]
-g4~ g c2~ | c4~ c8 a~ a2 |
+g4~ 4 c2~ | 4~ 8 a~ 2 |
@end lilypond
@subheading Legatobogen
overbindingen kunnen worden genest.
@lilypond[verbatim,quote,relative=2]
-c4~( c8 d~ d4 e)
+c4~( c8 d~ 4 e)
@end lilypond
\clef "bass"
\key c \major
\time 6/8
- c4.~ c8 d b | c8([ d]) b c d b | c8
+ c4.~ 8 d b | c8([ d]) b c d b | c8
}
\addlyrics {
Lar -- go_al fac -- | to -- tum del -- la cit -- | tà
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ c4
+ c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
@c Translation checker:
@c Translation checker committish:
-@c \version "2.17.29"
+@c \version "2.19.2"
@node Fundamentele concepten
@translationof Fundamental concepts
c16 d e f
% Voice "1" Voice "2" Voice "3"
<< { g4 f e } \\ { r8 e4 d c8~ } >> |
- << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> |
+ << { d2 e } \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
}
@end lilypond
{ d2 e }
\\
% Voice 2 continues
- { c8 b16 a b8 g~ g2 }
+ { c8 b16 a b8 g~ 2 }
\\
{
\voiceThreeStyle
@lilypond[quote,ragged-right,verbatim]
\relative c' {
% Default behavior or behavior after \oneVoice
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceOne
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\voiceTwo
- c4 d8~ d e4( f | g4 a) b-> c |
+ c4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
- c,4 d8~ d e4( f | g4 a) b-> c |
+ c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
\new Voice {
% Set stems, etc., down
\voiceTwo
- r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
\voiceTwo
r8 e4 d c8~ |
<<
- { c8 b16 a b8 g~ g2 | }
+ { c8 b16 a b8 g~ 2 | }
\new Voice {
\voiceThree
s4 b c2 |
\new Voice {
% Set stems, etc, down
\voiceTwo
- s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 |
+ s4 r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
}
% Initiate third voice
\new Voice {
global = { \key f \major \time 6/8 \partial 8 }
SopOneMusic = \relative c'' {
- c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4
+ c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ 4
}
SopOneLyrics = \lyricmode {
Let | flee -- cy flocks the | hills a -- dorn, __
d2 c |
}
ManualOneVoiceTwoMusic = \relative c' {
- ees16 d ees8~ ees16 f ees d c8 d~ d c~ |
- c8 c4 b8 c8. g16 c b c d |
+ ees16 d ees8~ 16 f ees d c8 d~ d c~ |
+ 8 c4 b8 c8. g16 c b c d |
}
ManualTwoMusic = \relative c' {
- c16 b c8~ c16 b c g a8 g~ g16 g aes ees |
- f16 ees f d g aes g f ees d ees8~ ees16 f ees d |
+ c16 b c8~ 16 b c g a8 g~ 16 g aes ees |
+ f16 ees f d g aes g f ees d ees8~ 16 f ees d |
}
PedalOrganMusic = \relative c {
- r8 c16 d ees d ees8~ ees16 a, b g c b c8 |
+ r8 c16 d ees d ees8~ 16 a, b g c b c8 |
r16 g ees f g f g8 c,2 |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.20"
+@c \version "2.19.2"
@node Tweaking output
@chapter Tweaking output
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{
\override Beam.positions = #'(-1 . -1)
}
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ { c'1 ~ 2. e'8 f' }
\\
{ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
with the tied notes in one of them
@lilypond[quote,fragment,relative=2]
-<< { b8~ b\noBeam } \\ { b8[ g] } >>
+<< { b8~ 8\noBeam } \\ { b8[ g] } >>
@end lilypond
@noindent
<<
{
\tweak Stem.transparent ##t
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
{
\tweak Stem.transparent ##t
\tweak Stem.length #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
\single \hide Stem
\single \hide Flag
\tweak Stem.length #8
- b8~ b\noBeam
+ b8~ 8\noBeam
}
\\
{ b8[ g] }
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org +v2.17 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org +v2.17 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org +v2.17 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Zoek met Google">
<input type="text" name="brute_query" onfocus="this.value=''" value="Zoek">
@copying
-Copyright @copyright{} 2009--2012 by the authors.
+Copyright @copyright{} 2009--2014 by the authors.
@c next line is necessary for broken pre-4.13 texinfo's
@c install-info, so leave it there until we officially
@c `Notation Reference' was born 1999-10-11 with git commit 940dda0...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 by the authors.
+Copyright @copyright{} 1999--2014 by the authors.
@end macro
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.7"
@node Changing defaults
@chapter Changing defaults
Contexts properties are usually named in
@code{studlyCaps}. They mostly control the translation from
-music to notation, e.g. @code{localKeySignature} (for determining
+music to notation, e.g. @code{localAlterations} (for determining
whether to print accidentals), or @code{measurePosition} (for
determining when to print a bar line). Context properties can
change value over time while interpreting a piece of music;
key-values individually with a nested declaration.
@warning{Nested declarations will not work for context property
-alists (such as @code{beamExceptions}, @code{keySignature},
+alists (such as @code{beamExceptions}, @code{keyAlterations},
@code{timeSignatureSettings}, etc.). These properties can only be
modified by completely re-defining them as alists.}
@lilypond[verbatim,quote,relative=1]
<<
- { e1~ e }
+ { e1~ 1 }
\\
{ r4 <g c,> <g c,> <g c,> }
>>
<<
{
\shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
- e1~ e
+ e1~ 1
}
\\
{ r4 <g c,> <g c,> <g c,> }
@funindex fontSize
@funindex font-size
+@funindex magnification->font-size
@funindex magstep
-@funindex \huge
-@funindex \large
+@funindex magnifyMusic
+@funindex teeny
+@funindex tiny
+@funindex small
+@funindex normalsize
+@funindex large
+@funindex huge
+@funindex \magnifyMusic
+@funindex \teeny
+@funindex \tiny
@funindex \normalsize
@funindex \small
-@funindex \tiny
-@funindex \teeny
-@funindex huge
-@funindex large
-@funindex normalsize
-@funindex small
-@funindex tiny
-@funindex teeny
+@funindex \large
+@funindex \huge
+
+@warning{@*
+For font sizes of text, see @ref{Selecting font and font size}.@*
+For staff size, see @ref{Setting the staff size}.@*
+For cue notes, see @ref{Formatting cue notes}.@*
+For ossia staves, see @ref{Ossia staves}.}
-The font size of notation elements may be altered. It does not
-change the size of variable symbols, such as beams or slurs.
+To change the size of the notation without changing the staff
+size, specify a magnification factor with the @code{\magnifyMusic}
+command:
+
+@c Grieg Piano Concerto (mvt.1 cadenza)
+@lilypond[verbatim,quote]
+\new Staff <<
+ \new Voice \relative {
+ \voiceOne
+ <e' e'>4 <f f'>8. <g g'>16 <f f'>8 <e e'>4 r8
+ }
+ \new Voice \relative {
+ \voiceTwo
+ \magnifyMusic 0.63 {
+ r32 c'' a c a c a c r c a c a c a c
+ r c a c a c a c a c a c a c a c
+ }
+ }
+>>
+@end lilypond
-@warning{For font sizes of text, see
-@ref{Selecting font and font size}.}
+If a normal sized note head is merged with a smaller one, the size
+of the smaller note may need to be reset (with
+@w{@samp{\once@tie{}\normalsize}}) so that the stems and
+accidentals align properly:
+
+@c Chopin Prelude op.28 no.8
+@lilypond[verbatim,quote]
+\new Staff <<
+ \key fis \minor
+ \mergeDifferentlyDottedOn
+ \new Voice \relative {
+ \voiceOne
+ \magnifyMusic 0.63 {
+ \once \normalsize cis'32( cis' gis b a fis \once \normalsize d d'
+ \once \normalsize cis, cis' gis b a gis \once \normalsize fis fis'
+ \once \normalsize fis, fis' ais, cis b gis \once \normalsize eis eis'
+ \once \normalsize a, a' bis, d cis b \once \normalsize gis gis')
+ }
+ }
+ \new Voice \relative {
+ \voiceTwo
+ cis'8. d16 cis8. fis16 fis8. eis16 a8. gis16
+ }
+>>
+@end lilypond
+
+The @code{\magnifyMusic} command is not intended for cue notes,
+grace notes, or ossia staves---there are more appropriate methods
+of entering each of those constructs. Instead, it is useful when
+the notation size changes in a single instrumental part on one
+staff, and where grace notes are not appropriate, such as in
+cadenza-like passages or in cases such as the above examples.
+Setting the @code{\magnifyMusic} value to 0.63 duplicates the
+dimensions of the @code{CueVoice} context.
+
+@warning{The @code{@bs{}magnifyMusic} command should @i{not} be
+used when also resizing the staff. See @ref{Setting the staff
+size}.}
+
+
+@subsubsubheading Resizing individual layout objects
+
+An individual layout object can be resized by using the
+@code{\tweak} or @code{\override} commands to adjust its
+@code{font-size} property:
+
+@lilypond[quote,verbatim,relative=1]
+% resize a note head
+<f \tweak font-size -4 b e>-5
+% resize a fingering
+bes-\tweak font-size 0 -3
+% resize an accidental
+\once \override Accidental.font-size = -4 bes!-^
+% resize an articulation
+\once \override Script.font-size = 4 bes!-^
+@end lilypond
+
+The default @code{font-size} value for each layout object is
+listed in the Internals Reference. The @code{font-size} property
+can only be set for layout objects that support the
+@code{font-interface} layout interface. If @code{font-size} is
+not specified in the object's @q{Standard@tie{}settings} list, its
+value is 0. See @rinternals{All layout objects}.
+
+
+@subsubsubheading Understanding the @code{fontSize} property
+
+The @code{fontSize} context property adjusts the relative size of
+all glyph-based notational elements in a context:
@lilypond[verbatim,quote,relative=2]
-\huge
-c4.-> d8---3
-\large
-c4.-> d8---3
-\normalsize
-c4.-> d8---3
-\small
-c4.-> d8---3
-\tiny
-c4.-> d8---3
-\teeny
-c4.-> d8---3
+\time 3/4
+d4---5 c8( b a g) |
+\set fontSize = -6
+e'4-- c!8-4( b a g) |
+\set fontSize = 0
+fis4---3 e8( d) fis4 |
+g2.
+@end lilypond
+
+The @code{fontSize} value is a number indicating the size relative
+to the standard size for the current staff height. The default
+@code{fontSize} is 0; adding 6 to any @code{fontSize} value
+doubles the printed size of the glyphs, and subtracting 6 halves
+the size. Each step increases the size by approximately 12%.
+
+The scheme function @code{magnification->font-size} is provided
+for convenience since the logarithmic units of the
+@code{font-size} property are not entirely intuitive. For
+example, to adjust the musical notation to 75% of the default
+size, use:
+
+@example
+\set fontSize = #(magnification->font-size 0.75)
+@end example
+
+The scheme function @code{magstep} does the opposite: it converts
+a @code{font-size} value into a magnification factor.
+
+The @code{fontSize} property will only affect notational elements
+that are drawn with glyphs, such as noteheads, accidentals,
+scripts, etc. It will not affect the size of the staff itself,
+nor will it scale stems, beams, or horizontal spacing. To scale
+stems, beams, and horizontal spacing along with the notation size
+(without changing the staff size), use the @code{\magnifyMusic}
+command discussed above. To scale everything, including the staff
+size, see @ref{Setting the staff size}.
+
+Whenever the @code{fontSize} @i{context property} is set, its
+value is added to the value of the @code{font-size} @i{grob
+property} for individual layout objects, before any glyphs are
+printed. This can cause confusion when setting individual
+@code{font-size} properties while @code{fontSize} is already set:
+
+@lilypond[verbatim,quote,relative=2]
+% the default font-size for NoteHead is 0
+% the default font-size for Fingering is -5
+c4-3
+
+\set fontSize = -3
+% the effective font size for NoteHead is now -3
+% the effective font size for Fingering is now -8
+c4-3
+
+\override Fingering.font-size = 0
+% the effective font size for Fingering is now -3
+c4-3
@end lilypond
-Internally, this sets the @code{fontSize} property. This in turn
-causes the @code{font-size} property to be set in all layout
-objects. The value of @code{font-size} is a number indicating the
-size relative to the standard size for the current staff height.
-Each step up is an increase of approximately 12% of the font size.
-Six steps is exactly a factor of two. The Scheme function
-@code{magstep} converts a @code{font-size} number to a scaling
-factor. The @code{font-size} property can also be set directly,
-so that only certain layout objects are affected.
+The following shorthand commands are also available:
+
+@multitable @columnfractions .2 .4 .4
+@item @b{Command} @tab @b{Equivalent to} @tab @b{Relative size}
+@item @code{\teeny} @tab @code{\set fontSize = -3} @tab 71%
+@item @code{\tiny} @tab @code{\set fontSize = -2} @tab 79%
+@item @code{\small} @tab @code{\set fontSize = -1} @tab 89%
+@item @code{\normalsize} @tab @code{\set fontSize = 0} @tab 100%
+@item @code{\large} @tab @code{\set fontSize = 1} @tab 112%
+@item @code{\huge} @tab @code{\set fontSize = 2} @tab 126%
+@end multitable
@lilypond[verbatim,quote,relative=2]
-\set fontSize = #3
+\teeny
c4.-> d8---3
-\override NoteHead.font-size = #-4
+\tiny
c4.-> d8---3
-\override Script.font-size = #2
+\small
c4.-> d8---3
-\override Stem.font-size = #-5
+\normalsize
+c4.-> d8---3
+\large
+c4.-> d8---3
+\huge
c4.-> d8---3
@end lilypond
+
@cindex standard font size (notation)
@cindex font size (notation), standard
Font size changes are achieved by scaling the design size that is
closest to the desired size. The standard font size (for
-@w{@code{font-size = #0}}) depends on the standard staff height.
+@w{@code{font-size = 0}}) depends on the standard staff height.
For a 20pt staff, a 10pt font is selected.
-The @code{font-size} property can only be set on layout objects
-that use fonts. These are the ones supporting the
-@code{font-interface} layout interface.
-
@predefined
+@code{\magnifyMusic},
@code{\teeny},
@code{\tiny},
@code{\small},
@endpredefined
@seealso
+Notation Reference:
+@ref{Selecting font and font size},
+@ref{Setting the staff size},
+@ref{Formatting cue notes},
+@ref{Ossia staves}.
+
+Installed Files:
+@file{ly/music-functions-init.ly},
+@file{ly/property-init.ly}.
+
Snippets:
@rlsr{Editorial annotations}.
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.25"
+@c \version "2.18.0"
@node Expressive marks
@section Expressive marks
c2. \breathe d4
@end lilypond
+Unlike other expressive marks, a breath mark is not associated with
+the preceding note but is a separate music event. So all the
+expressive marks which are attached to the preceding note, any square
+brackets indicating manual beams, and any brackets indicating slurs
+and phrasing slurs must be placed before @code{\breathe}.
+
A breath mark will end an automatic beam; to override this behavior, see
@ref{Manual beams}.
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@node Fretted string instruments
@section Fretted string instruments
c4-.^"Allegro" d( e)
f4-.\f g a^\fermata
\mark \default
- c8_.\<\( c16 c~ c2\!
+ c8_.\<\( c16 c~ 2\!
c'2.\prall\)
}
c4-.^"Allegro" d( e)
f4-.\f g a^\fermata
\mark \default
- c8_.\<\( c16 c~ c2\!
+ c8_.\<\( c16 c~ 2\!
c'2.\prall\)
}
@funindex \tabChordRepeats
@funindex \chordRepeats
-@cindex Chord, repetition
+@cindex chord, repetition
@cindex repetition, using @code{q}
+@cindex @code{q}, chord repetition
Chord constructs can be repeated by the chord repetition symbol
@code{q}. In combination with tabulatures, its behavior of removing
@lilypond[quote,verbatim]
guitar = \relative c' {
- r8 <gis-2 cis-3 b-0>~ q4 q8~ q q4
+ r8 <gis-2 cis-3 b-0>~ q4 q8~ 8 q4
}
\new StaffGroup <<
ties = \relative c' {
\repeat volta 2 {
e2. f4~
- f2 g2~
+ 2 g2~
}
\alternative {
{ g4 f2. }
ties = \relative c' {
\repeat volta 2 {
e2. f4~
- f2 g2~ }
+ 2 g2~ }
\alternative {
{ g4 f2. }
{ g4\repeatTie c,2. }
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.19.2"
@node General input and output
@chapter General input and output
}
\addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } }
}
-\markup { "Copyright 2008--2012" \char ##x00A9 }
+\markup { "Copyright 2008--2014" \char ##x00A9 }
@end lilypond
@cindex copyright sign
@cindex Sound
@cindex MIDI
-MIDI (Musical Instrument Digital Interface) is a standard for
-connecting and controlling digital instruments. A MIDI file is a
-series of notes in a number of tracks. It is not an actual
-sound file; you need special software to translate between the
-series of notes and actual sounds.
+MIDI (Musical Instrument Digital Interface) is a standard for connecting
+and controlling digital instruments. A MIDI file is a series of notes
+in a number of tracks. It is not an actual sound file; you need special
+software to translate between the series of notes and actual sounds.
Pieces of music can be converted to MIDI files, so you can listen to
what was entered. This is convenient for checking the music; octaves
-that are off or accidentals that were mistyped stand out very much
-when listening to the MIDI output.
+that are off or accidentals that were mistyped stand out very much when
+listening to the MIDI output.
Standard MIDI output is somewhat crude; optionally, an enhanced and
more realistic MIDI output is available by means of
specified within the music notation will be reflected in the MIDI
output.
-Usually it is enough to leave the @code{\midi} block empty, but it
-can contain context rearrangements, new context definitions or code
-to set the values of properties. Here the tempo is set to 72
-quarter-note beats per minute, but @emph{only} for the MIDI's
-audio playback.
+Usually it is enough to leave the @code{\midi} block empty, but it can
+contain context rearrangements, new context definitions or code to set
+the values of properties. Here the tempo is set to 72 quarter-note
+beats per minute, but @emph{only} for the MIDI's audio playback.
@example
\score @{
@end example
Note that @code{\tempo} is actually a command for setting properties
-during the interpretation of the music and in the context of output definitions, like a @code{\midi} block, is reinterpreted as if it
-were a context modification.
+during the interpretation of the music and in the context of output
+definitions, like a @code{\midi} block, is reinterpreted as if it were a
+context modification.
@cindex MIDI context definitions
removes the effect of dynamics from the MIDI output. Translation
modules for sound are called @q{performers}.
-
@snippets
-
@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
{changing-midi-output-to-one-channel-per-voice.ly}
-@knownissues
+@seealso
+Learning Manual:
+@rlearning{Other sources of information}.
+
+Notation Reference:
+@ref{Expressive marks},
+@ref{Score layout}.
+
+Installed Files:
+@file{ly/performer-init.ly}.
-Some operating systems require a @emph{specific} file extension for
-MIDI files. If a different extension is preferred insert the following
-line at the top-level of the input file, before the start of any
+Snippets:
+@rlsr{MIDI}.
+
+Internals Reference:
+@rinternals{Dynamic_performer}.
+
+@knownissues
+Some operating systems require a @emph{specific} file extension for MIDI
+files. If a different extension is preferred insert the following line
+at the top-level of the input file, before the start of any
@code{\book}, @code{\bookpart} or @code{\score} blocks;
@example
Some MIDI players may not always correctly handle tempo changes in the
midi output.
-@seealso
-Installed Files:
-@file{../ly/performer-init.ly}.
-
-Learning Manual:
-@rlearning{Other sources of information}.
+Changes to @code{midiInstrument} (and other MIDI options) at the
+beginning of a staff may appear twice in the MIDI output.
@node MIDI Instruments
@funindex Staff.midiInstrument
The MIDI instrument to be used is specified by setting the
-@code{Staff.midiInstrument} property to the instrument name.
-The name should be chosen from the list in @ref{MIDI instruments}.
+@code{Staff.midiInstrument} property to the instrument name. The name
+should be chosen from the list in @ref{MIDI instruments}.
@example
\new Staff @{
the list of MIDI instruments, the Grand Piano (@code{"acoustic grand"})
instrument is used.
+@seealso
+Notation Reference:
+@ref{MIDI instruments}.
+
+Internals Reference:
+@rinternals{Dynamic_performer}.
+
@node What goes into the MIDI output?
@subsection What goes into the MIDI output?
@item Crescendi, decrescendi over multiple notes
@item Tempo changes entered with a tempo marking
@item Lyrics
+@item Simple articulations: staccato, staccatissimo, accent, marcato, portato
+@item @ref{Breath marks}
@end itemize
-Using @ref{The Articulate script}, a number of items are added to the
-above list:
+There is a script that adds the following items; see
+@ref{The Articulate script}:
@itemize
-@item Articulations (slurs, staccato, etc)
-@item Trills, turns
-@item Rallentando and accelerando
+@item Slurs and phrasing slurs
+@item Ornaments (mordents, trills, turns, etc.)
+@item Rallentando, accelerando, ritard, and a tempo
@end itemize
+@seealso
+Notation Reference:
+@ref{Accidentals},
+@ref{Breath marks},
+@ref{Expressive marks}.
+
+Installed Files:
+@file{ly/articulate.ly}.
+
@node Unsupported in MIDI
@unnumberedsubsubsec Unsupported in MIDI
@c TODO index as above
-The following items of notation have no effect on the MIDI output,
-unless you use @ref{The Articulate script}:
+The following items of notation have no effect on the MIDI output, even
+if you use @ref{The Articulate script}:
@itemize
@item Rhythms entered as annotations, e.g. swing
@item Tempo changes entered as annotations with no tempo marking
-@item Staccato and other articulations and ornamentations
-@item Slurs and Phrasing slurs
+@item Fermatas
+@item Other articulations
@item Crescendi, decrescendi over a single note
@item Tremolos entered with @q{@code{:}[@var{number}]}
@item Figured bass
@item Microtonal chords
+@item Glissandi, falls and doits
@end itemize
+@seealso
+Installed Files:
+@file{ly/articulate.ly}.
+
@node Repeats in MIDI
@subsection Repeats in MIDI
@cindex repeats in MIDI
@funindex \unfoldRepeats
-With a few minor additions, all types of repeats can be represented
-in the MIDI output. This is achieved by applying the
-@code{\unfoldRepeats} music function. This function changes all
-repeats to unfold repeats.
+With a few minor additions, all types of repeats can be represented in
+the MIDI output. This is achieved by applying the @code{\unfoldRepeats}
+music function. This function changes all repeats to unfold repeats.
@lilypond[quote,verbatim]
\unfoldRepeats {
output will only occur correctly if @emph{each} voice contains fully
notated repeat indications.
-When creating a score file using @code{\unfoldRepeats} for MIDI,
-it is necessary to make two @code{\score} blocks: one for MIDI
-(with unfolded repeats) and one for notation (with volta, tremolo,
-and percent repeats). For example,
+When creating a score file using @code{\unfoldRepeats} for MIDI, it is
+necessary to make two @code{\score} blocks: one for MIDI (with unfolded
+repeats) and one for notation (with volta, tremolo, and percent
+repeats):
@example
\score @{
@}
@end example
+@seealso
+Notation Reference:
+@ref{Score layout}.
+
+Installed Files:
+@file{ly/articulate.ly}.
+
+
@node Controlling MIDI dynamics
@subsection Controlling MIDI dynamics
-MIDI dynamics are implemented by the Dynamic_performer which lives
-by default in the Voice context. It is possible to control the
-overall MIDI volume, the relative volume of dynamic markings and
-the relative volume of different instruments.
+MIDI dynamics are implemented by the Dynamic_performer which lives by
+default in the Voice context. It is possible to control the overall
+MIDI volume, the relative volume of dynamic markings and the relative
+volume of different instruments.
@menu
* Dynamic marks::
@node Dynamic marks
@unnumberedsubsubsec Dynamic marks
-Dynamic marks are translated to a fixed fraction of the available
-MIDI volume range. The default fractions range from 0.25 for
+Dynamic marks are translated to a fixed fraction of the available MIDI
+volume range. The default fractions range from 0.25 for
@notation{ppppp} to 0.95 for @notation{fffff}. The set of dynamic
marks and the associated fractions can be seen in
@file{../scm/midi.scm}, see @rlearning{Other sources of information}.
required fraction, and setting
@code{Score.dynamicAbsoluteVolumeFunction} to this function.
-For example, if a @notation{rinforzando} dynamic marking,
-@code{\rfz}, is required, this will not by default
-have any effect on the MIDI volume, as this dynamic marking is not
-included in the default set. Similarly, if a new dynamic marking
-has been defined with @code{make-dynamic-script} that too will not
-be included in the default set. The following example shows how the
-MIDI volume for such dynamic markings might be added. The Scheme
-function sets the fraction to 0.9 if a dynamic mark of rfz is
-found, or calls the default function otherwise.
+For example, if a @notation{rinforzando} dynamic marking, @code{\rfz},
+is required, this will not by default have any effect on the MIDI
+volume, as this dynamic marking is not included in the default set.
+Similarly, if a new dynamic marking has been defined with
+@code{make-dynamic-script} that too will not be included in the default
+set. The following example shows how the MIDI volume for such dynamic
+markings might be added. The Scheme function sets the fraction to 0.9
+if a dynamic mark of @code{rfz} is found, or calls the default function
+otherwise.
@lilypond[verbatim,quote]
#(define (myDynamics dynamic)
}
@end lilypond
-Alternatively, if the whole table of fractions needs to be
-redefined, it would be better to use the
-@notation{default-dynamic-absolute-volume} procedure in
-@file{../scm/midi.scm} and the associated table as a model.
+Alternatively, if the whole table of fractions needs to be redefined, it
+would be better to use the @notation{default-dynamic-absolute-volume}
+procedure in @file{../scm/midi.scm} and the associated table as a model.
The final example in this section shows how this might be done.
+@seealso
+Notation Reference:
+@ref{Expressive marks},
+@ref{Score layout}.
+
+Installed Files:
+@file{scm/midi.scm}.
+
+Internals Reference:
+@rinternals{Dynamic_performer}.
+
+
+
@node Overall MIDI volume
@unnumberedsubsubsec Overall MIDI volume
\set Staff.midiInstrument = #"flute"
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
}
@end lilypond
+@seealso
+Notation Reference:
+@ref{Score layout}.
+
+Internals Reference:
+@rinternals{Dynamic_performer}.
+
+
+
@node Equalizing different instruments (i)
@unnumberedsubsubsec Equalizing different instruments (i)
-If the minimum and maximum MIDI volume properties are set in
-the @code{Staff} context the relative volumes of the MIDI
-instruments can be controlled. This gives a basic instrument
-equalizer, which can enhance the quality of the MIDI output
-remarkably.
+If the minimum and maximum MIDI volume properties are set in the
+@code{Staff} context the relative volumes of the MIDI instruments can be
+controlled. This gives a basic instrument equalizer, which can enhance
+the quality of the MIDI output remarkably.
-In this example the volume of the clarinet is reduced relative
-to the volume of the flute.
+In this example the volume of the clarinet is reduced relative to the
+volume of the flute.
@lilypond[verbatim,quote]
\score {
\set Staff.midiMaximumVolume = #0.9
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
}
@end lilypond
+@seealso
+Notation Reference:
+@ref{Score layout}.
+
@node Equalizing different instruments (ii)
@unnumberedsubsubsec Equalizing different instruments (ii)
-If the MIDI minimum and maximum volume properties are not set
-LilyPond will, by default, apply a small degree of equalization
-to a few instruments. The instruments and the equalization
-applied are shown in the table @notation{instrument-equalizer-alist}
-in @file{../scm/midi.scm}.
+If the MIDI minimum and maximum volume properties are not set LilyPond
+will, by default, apply a small degree of equalization to a few
+instruments. The instruments and the equalization applied are shown in
+the table @notation{instrument-equalizer-alist} in
+@file{../scm/midi.scm}.
This basic default equalizer can be replaced by setting
-@code{instrumentEqualizer} in the @code{Score} context to a new
-Scheme procedure which accepts a MIDI instrument name as its only
-argument and returns a pair of fractions giving the minimum and
-maximum volumes to be applied to that instrument. This replacement
-is done in the same way as shown for resetting the
-@code{dynamicAbsoluteVolumeFunction} at the start of this section.
-The default equalizer, @notation{default-instrument-equalizer}, in
-@file{../scm/midi.scm} shows how such a procedure might be written.
-
-The following example sets the relative flute and clarinet volumes
-to the same values as the previous example.
+@code{instrumentEqualizer} in the @code{Score} context to a new Scheme
+procedure which accepts a MIDI instrument name as its only argument and
+returns a pair of fractions giving the minimum and maximum volumes to be
+applied to that instrument. This replacement is done in the same way as
+shown for resetting the @code{dynamicAbsoluteVolumeFunction} at the
+start of this section. The default equalizer,
+@notation{default-instrument-equalizer}, in @file{../scm/midi.scm} shows
+how such a procedure might be written.
+
+The following example sets the relative flute and clarinet volumes to
+the same values as the previous example.
@lilypond[verbatim,quote]
#(define my-instrument-equalizer-alist '())
\set Staff.midiInstrument = #"flute"
\new Voice \relative c''' {
r2 g\mp g fis~
- fis4 g8 fis e2~
- e4 d8 cis d2
+ 4 g8 fis e2~
+ 4 d8 cis d2
}
}
\new Staff {
}
@end lilypond
+@seealso
+Installed Files:
+@file{scm/midi.scm}.
+
+Internals Reference:
+@rinternals{Dynamic_performer}.
+
@ignore
@c Delete when satisfied this is adequately covered elsewhere -td
@subsection Percussion in MIDI
Percussion instruments are generally notated in a @code{DrumStaff}
-context and when notated in this way they are outputted correctly
-to MIDI channel@tie{}10, but some pitched percussion instruments,
-like the xylophone, marimba, vibraphone, timpani, etc., are
-treated like @qq{normal} instruments and music for these instruments
-should be entered in a normal @code{Staff} context, not a
-@code{DrumStaff} context, to obtain the correct MIDI output.
+context and when notated in this way they are outputted correctly to
+MIDI channel@tie{}10, but some pitched percussion instruments, like the
+xylophone, marimba, vibraphone, timpani, etc., are treated like
+@qq{normal} instruments and music for these instruments should be
+entered in a normal @code{Staff} context, not a @code{DrumStaff}
+context, to obtain the correct MIDI output.
Some non-pitched percussion sounds included in the general MIDI
-standard, like melodic tom, taiko drum, synth drum, etc., cannot
-be reached via MIDI channel@tie{}10, so the notation for such
-instruments should also be entered in a normal @code{Staff}
-context, using suitable normal pitches.
+standard, like melodic tom, taiko drum, synth drum, etc., cannot be
+reached via MIDI channel@tie{}10, so the notation for such instruments
+should also be entered in a normal @code{Staff} context, using suitable
+normal pitches.
Many percussion instruments are not included in the general MIDI
-standard, e.g. castanets. The easiest, although unsatisfactory,
-method of producing some MIDI output when writing for such
-instruments is to substitute the nearest sound from the standard
-set.
+standard, e.g. castanets. The easiest, although unsatisfactory, method
+of producing some MIDI output when writing for such instruments is to
+substitute the nearest sound from the standard set.
@c TODO Expand with examples, and any other issues
-@knownissues
+@seealso
+Notation Reference:
+@ref{Percussion},
+@ref{Score layout}.
+
+Internals Reference:
+@rinternals{Dynamic_performer}.
+@knownissues
Because the general MIDI standard does not contain rim shots, the
sidestick is used for this purpose instead.
+
+
@node The Articulate script
@subsection The Articulate script
A more realistic MIDI output is possible when using the Articulate
script. It tries to take articulations (slurs, staccato, etc) into
account, by replacing notes with sequential music of suitably
-time-scaled note plus skip. It also tries to unfold trills turns
-etc., and take rallentando and accelerando into account.
+time-scaled note plus skip. It also tries to unfold trills turns etc.,
+and take rallentando and accelerando into account.
-To use the Articulate script, you have to include it at the top of
-your input file,
+To use the Articulate script, you have to include it at the top of your
+input file,
@example
\include "articulate.ly"
@example
\unfoldRepeats \articulate <<
- all the rest of the score@dots{}
+ all the rest of the score@dots{}
>>
@end example
example shown above as it enables performing abbreviatures such as
@notation{trills}.
-@knownissues
+@seealso
+Notation Reference:
+@ref{Score layout}.
+Installed Files:
+@file{ly/articulate.ly}.
+
+Internals Reference:
+@rinternals{UnfoldedRepeatedMusic}.
+
+@knownissues
Articulate shortens chords and some music (esp. organ music) could
sound worse.
@lilypond[quote,ragged-right,verbatim]
\drums {
\clef percussion
- bd4 bd bd bd
+ bd4 4 4 4
\clef treble
- hh4 hh hh hh
+ hh4 4 4 4
}
@end lilypond
@lilypond[quote,verbatim]
\drums {
\time 2/4
- sn16 sn8 sn16 sn8 sn8:32 ~
- sn8 sn8 sn4:32 ~
- sn4 sn8 sn16 sn16
- sn4 r4
+ sn16 8 16 8 8:32 ~
+ 8 8 4:32 ~
+ 4 8 16 16
+ 4 r4
}
@end lilypond
@lilypond[quote,verbatim]
\drums {
\repeat unfold 2 {
- sn16^"L" sn^"R" sn^"L" sn^"L" sn^"R" sn^"L" sn^"R" sn^"R"
+ sn16^"L" 16^"R" 16^"L" 16^"L" 16^"R" 16^"L" 16^"R" 16^"R"
\stemUp
- sn16_"L" sn_"R" sn_"L" sn_"L" sn_"R" sn_"L" sn_"R" sn_"R"
+ sn16_"L" 16_"R" 16_"L" 16_"L" 16_"R" 16_"L" 16_"R" 16_"R"
}
}
@end lilypond
\drummode {
\time 2/4
- wbl8 wbl16 wbl wbh8-> wbl |
- wbl8 wbl16 wbh-> ~ wbh wbl16 r8 |
+ wbl8 16 16 8-> 8 |
+ wbl8 16 16-> ~ 16 16 r8 |
}
}
@end lilypond
\drummode {
\time 6/8
- tamb8. tamb16 tamb8 tamb tamb tamb |
- tamb4. tamb8 tamb tamb |
+ tamb8. 16 8 8 8 8 |
+ tamb4. 8 8 8 |
% the trick with the scaled duration and the shorter rest
% is neccessary for the correct ending of the trill-span!
tamb2.*5/6 \startTrillSpan s8 \stopTrillSpan |
\bellstaff
\drummode {
\time 2/4
- rb8 rb cb cb16 rb-> ~ |
- rb16 rb8 rb16 cb8 cb |
+ rb8 8 cb8 16 rb16-> ~ |
+ 16 8 16 cb8 8 |
}
}
@end lilypond
\drummode {
<<
{
- hh8[ hh] <hh sn> hh16
+ hh8[ 8] <hh sn> hh16
\parenthesize sn hh
\parenthesize sn hh8 <hh sn> hh
} \\
{
- bd4 r4 bd8 bd r8 bd
+ bd4 r4 bd8 8 r8 bd
}
>>
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.18"
+@c \version "2.19.2"
@node Pitches
new system:
@lilypond[verbatim,quote,relative=2,ragged-right]
-cis1~ cis~
+cis1~ 1~
\break
cis
@end lilypond
applied, as a separate @code{\override}, to the @var{ClefModifier}
grob.
-@lilypond[fragment,quote,relative=1]
+@lilypond[fragment,quote,verbatim,relative=1]
\new Staff \with {
- \override ClefModifier.color = #red
\override Clef.color = #blue
+ \override ClefModifier.color = #red
}
\clef "treble_8" c4
}
@end lilypond
+@item dodecaphonic-no-repeat
+
+@cindex dodecaphonic accidental style
+@cindex dodecaphonic style, neo-modern
+
+@funindex dodecaphonic-no-repeat
+
+Like with the dodecaphonic accidental style @emph{every} note
+gets an accidental sign by default, but accidentals are
+suppressed for pitches immediately repeated within one voice.
+
+@lilypond[quote]
+musicA = {
+ <<
+ \relative c' {
+ cis'8 fis, bes4 <a cis>8 f bis4 |
+ cis2. <c, g'>4 |
+ }
+ \\
+ \relative c' {
+ ais'2 cis, |
+ fis8 b a4 cis2 |
+ }
+ >>
+}
+
+musicB = {
+ \clef bass
+ \new Voice {
+ \voiceTwo \relative c' {
+ <fis, a cis>8[ <fis a cis>
+ \change Staff = up
+ cis' cis
+ \change Staff = down
+ <fis, a> <fis a>]
+ \showStaffSwitch
+ \change Staff = up
+ dis'4 |
+ \change Staff = down
+ <fis, a cis>4 gis <f a d>2 |
+ }
+ }
+}
+
+\new PianoStaff {
+ <<
+ \context Staff = "up" {
+ \accidentalStyle dodecaphonic-no-repeat
+ \musicA
+ }
+ \context Staff = "down" {
+ \accidentalStyle dodecaphonic-no-repeat
+ \musicB
+ }
+ >>
+}
+@end lilypond
+
+
+@item dodecaphonic-first
+
+@cindex dodecaphonic accidental style
+@cindex dodecaphonic style, neo-modern
+
+@funindex dodecaphonic-first
+
+Similar to the dodecaphonic accidental style @emph{every} pitch
+gets an accidental sign, but only the first time it is encountered
+in a measure. Accidentals are only remembered for the actual octave
+but throughout voices.
+
+@lilypond[quote]
+musicA = {
+ <<
+ \relative c' {
+ cis'8 fis, bes4 <a cis>8 f bis4 |
+ cis2. <c, g'>4 |
+ }
+ \\
+ \relative c' {
+ ais'2 cis, |
+ fis8 b a4 cis2 |
+ }
+ >>
+}
+
+musicB = {
+ \clef bass
+ \new Voice {
+ \voiceTwo \relative c' {
+ <fis, a cis>8[ <fis a cis>
+ \change Staff = up
+ cis' cis
+ \change Staff = down
+ <fis, a> <fis a>]
+ \showStaffSwitch
+ \change Staff = up
+ dis'4 |
+ \change Staff = down
+ <fis, a cis>4 gis <f a d>2 |
+ }
+ }
+}
+
+\new PianoStaff {
+ <<
+ \context Staff = "up" {
+ \accidentalStyle dodecaphonic-first
+ \musicA
+ }
+ \context Staff = "down" {
+ \accidentalStyle dodecaphonic-first
+ \musicB
+ }
+ >>
+}
+@end lilypond
+
@item teaching
e8 e g a a16( bes) a8 g
\improvisationOn
e8 ~
- e2 ~ e8 f4 f8 ~
- f2
+ 2 ~ 8 f4 f8 ~
+ 2
\improvisationOff
a16( bes) a8 g e
}
\repeat volta 2 { d4 e f g }
@end lilypond
+An @q{opening} repeat mark is not, by default, printed in the first full
+measure. However it is possible to add one by using @code{\bar ".|:"}
+before the first note.
+
+@lilypond[verbatim,fragment,quote,relative=2]
+\repeat volta 2 { \bar ".|:" c4 d e f }
+c2 d
+\repeat volta 2 { d4 e f g }
+@end lilypond
+
Alternative endings can be produced using @code{\alternative}. Each
group of alternatives must be themselves, enclosed in a set of braces.
g1 |
@end lilypond
-When alternate endings are added to a repeat that begins with an
-incomplete measure, it becomes necessary to set the
-@code{Timing.measureLength} context property manually, in the
-following specific places:
-
-@itemize
-@item
-at the start of any incomplete measures in the @code{\alternative}
-block, which normally occur at the end of each alternative, except
-(in most cases) the last.
-
-@item
-at the start of each alternative, except the first.
-@end itemize
-
-@lilypond[verbatim,quote,relative=1]
-\partial 4
-\repeat volta 2 { e4 | c2 e | }
-\alternative {
- {
- f2 d |
- \set Timing.measureLength = #(ly:make-moment 3/4)
- g4 g g % optional bar check is allowed here
- }
- {
- \set Timing.measureLength = #(ly:make-moment 4/4)
- a2 a |
- }
-}
-g1 |
-@end lilypond
-
-The @code{measureLength} property is described in @ref{Time
-administration}.
-
@cindex repeats, with ties
@cindex alternative endings, with ties
@cindex ties, in repeats
@ref{Modifying ties and slurs},
@ref{Time administration}.
+Installed Files:
+@file{ly/engraver-init.ly}.
+
Snippets:
@rlsr{Repeats}.
}
@end lilypond
-
-@snippets
-
-@lilypondfile[verbatim,quote,texidoc,doctitle]
-{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly}
-
@seealso
Notation Reference:
@ref{Bar lines},
@end lilypond
@cindex tremolo marks
-@funindex tremoloFlags
@funindex :
The same output can be obtained by adding @code{:@var{N}} after
the note, where @code{@var{N}} indicates the duration of the
subdivision (it must be at least 8). If @code{@var{N}} is 8, one
beam is added to the note's stem. If @code{@var{N}} is omitted,
-the last value (stored in @code{tremoloFlags}) is used:
+the last value is used:
@lilypond[quote,verbatim,relative=2]
c2:8 c:32
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@node Rhythms
@section Rhythms
a a a2 a a4 a a1 a
@end lilypond
+Durations occuring on their own within a music sequence will take
+their pitches from the preceding note or chord.
+
+@lilypond[quote,verbatim,relative=2]
+\time 8/1
+c \longa \breve 1 2
+4 8 16 32 64 128 128
+@end lilypond
+
@cindex notes, dotted
@cindex dotted notes
@cindex notes, double-dotted
normally allowed for@tie{}2:
@lilypond[quote,verbatim,relative=2]
-a2 \tuplet 3/2 { b4 b b }
+a2 \tuplet 3/2 { b4 4 4 }
c4 c \tuplet 3/2 { b4 a g }
@end lilypond
should be tied to the following note, which must be at the same pitch.
@lilypond[quote,verbatim,relative=2]
-a2~ a4~ a16 r r8
+a2~ 4~ 16 r r8
+@end lilypond
+
+Ties can make use of the @q{last explicit pitch} interpretation of
+isolated durations:
+
+@lilypond[quote,verbatim,relative=2]
+a2~ 4~ 16 r r8
@end lilypond
Ties are used either when the note crosses a bar line, or when
@lilypond[verbatim,quote]
\relative c' {
- r8 c~ c2 r4 |
- r8^"not" c2~ c8 r4
+ r8 c~ 2 r4 |
+ r8^"not" c2~ 8 r4
}
@end lilypond
the chord.
@lilypond[quote,verbatim,relative=1]
-<c e g>~ <c e g c>
+<c e g>2 ~ 2
+<c e g>4~ <c e g c>
<c~ e g~ b> <c e g b>
@end lilypond
@lilypond[quote, verbatim, relative=1]
\tieDotted
-c2~ c
+c2~ 2
\tieDashed
-c2~ c
+c2~ 2
\tieHalfDashed
-c2~ c
+c2~ 2
\tieHalfSolid
-c2~ c
+c2~ 2
\tieSolid
-c2~ c
+c2~ 2
@end lilypond
Custom dash patterns can be specified:
@lilypond[quote, verbatim, relative=1]
\tieDashPattern #0.3 #0.75
-c2~ c
+c2~ 2
\tieDashPattern #0.7 #1.5
-c2~ c
+c2~ 2
\tieSolid
-c2~ c
+c2~ 2
@end lilypond
Dash pattern definitions for ties have the same structure as dash
e8 | a4 c8 b c4 |
@end lilypond
-The property @code{measurePosition} contains a rational number, which
-is usually positive and indicates how much of the measure has passed
-at this point. The @code{\partial @var{duration}} command sets it to
-a negative number, when it has a different meaning: it then says that
-the current (first) bar will be @emph{preceded} by a bar 0 (the partial
-bar) with a duration given by @var{duration}.
+The property @code{measurePosition} contains a rational number,
+which is usually positive and indicates how much of the measure
+has passed at this point. @code{\partial @var{duration}} is
+defined such that no numbered bar gets created: when used at the
+beginning of a score, @code{measurePosition} is set to a
+negative number, implying that the current bar will be
+@emph{preceded} by additional material. When used elsewhere, it
+moves the requested distance before the @emph{end} of the bar.
+
+@lilypond[quote,verbatim,relative=1]
+\set Score.barNumberVisibility = #all-bar-numbers-visible
+\override Score.BarNumber.break-visibility =
+ #end-of-line-invisible
+\time 6/8
+\partial 8
+e8 | a4 c8 b[ c b] |
+\partial 4
+r8 e,8 | a4 \bar "||"
+\partial 4
+r8 e8 | a4
+c8 b[ c b] |
+@end lilypond
+
@seealso
Music Glossary:
Internal Reference:
@rinternals{Timing_translator}.
-@knownissues
-The @code{\partial} command should be used only at the beginning of a
-piece. If you use it after the beginning, warnings or problems may
-occur, so use @code{\set Timing.measurePosition} instead.
-
-@lilypond[quote,verbatim,relative=1]
-\time 6/8
-\partial 8
-e8 | a4 c8 b[ c b] |
-\set Timing.measurePosition = #(ly:make-moment -1/4)
-r8 e,8 | a4 c8 b[ c b] |
-@end lilypond
-
@node Unmetered music
@unnumberedsubsubsec Unmetered music
the measures are not entirely filled, then the ties show exactly how
much each measure is off.
+The property @code{completionUnit} sets a preferred duration for
+the split notes.
+
+@lilypond[quote,verbatim,relative=2]
+\new Voice \with {
+ \remove "Note_heads_engraver"
+ \consists "Completion_heads_engraver"
+} {
+ \time 9/8 g\breve. d4. \bar "||"
+ \set completionUnit = #(ly:make-moment 3 8)
+ g\breve. d4.
+}
+@end lilypond
+
+These engravers split notes with scaled duration, such as those in tuplets,
+into notes with the same scale-factor as in the input note.
+
+@lilypond[quote,verbatim,relative=2]
+\new Voice \with {
+ \remove "Note_heads_engraver"
+ \consists "Completion_heads_engraver"
+} {
+ \time 2/4 r4
+ \tuplet 3/2 {g4 a b}
+ \scaleDurations 2/3 {g a b}
+ g4*2/3 a b
+ \tuplet 3/2 {g4 a b}
+ r4
+}
+@end lilypond
+
@seealso
Music Glossary:
@rglos{tie}
@rinternals{Forbid_line_break_engraver}.
@knownissues
-Not all durations (especially those containing tuplets) can be
-represented exactly with normal notes and dots, but the
-@code{Completion_heads_engraver} will not insert tuplets.
-
-The @code{Completion_heads_engraver} only affects notes; it does not
-split rests.
+For consistency with previous behavior, notes and rests with
+duration longer than a measure, such as @code{c1*2}, are split into
+notes without any scale factor, @code{@{ c1 c1 @}}. The property
+@code{completionFactor} controls this behavior, and setting it to
+@code{#f} cause split notes and rest to have the scale factor
+of the input durations.
@node Showing melody rhythms
@funindex autoBeaming
@funindex baseMoment
@funindex beamExceptions
+@funindex \beamExceptions
@funindex beatStructure
@funindex measureLength
@funindex \time
Special autobeaming rules (other than ending a beam on a beat)
are defined in the @code{beamExceptions} property.
+The value for @code{beamExceptions}, a somewhat complex Scheme
+data structure, is easiest generated with the
+@code{\beamExceptions} function. This function is given one or
+more manually beamed measure-length rhythmic patterns (measures
+have to be separated by a bar check@tie{}@code{|} since the
+function has no other way to discern the measure length). Here is
+a simple example:
+
@lilypond[quote,relative=2,verbatim]
\time 3/16
\set Timing.beatStructure = #'(2 1)
\set Timing.beamExceptions =
- #'( ;start of alist
- (end . ;entry for end of beams
- ( ;start of alist of end points
- ((1 . 32) . (2 2 2)) ;rule for 1/32 beams -- end each 1/16
- ))) %close all entries
+ \beamExceptions { 32[ 32] 32[ 32] 32[ 32] }
c16 c c |
\repeat unfold 6 { c32 } |
@end lilypond
-@code{beamExceptions} is an alist with a key of rule-type and a value
-of beaming-rules.
-
-At this time the only available value of rule-type is
-@code{'end} for beam ending.
-
-Beaming-rules is a scheme alist (or list of pairs) that indicates the
-beam type and the grouping to be applied to beams containing notes with
-a shortest duration of that beam type.
-
-@example
-#'((beam-type1 . grouping-1)
- (beam-type2 . grouping-2)
- (beam-type3 . grouping-3))
-@end example
-
-Beam type is a scheme pair indicating the duration of the beam,
-e.g., @code{(1 . 16)}.
-
-Grouping is a scheme list indicating the grouping to be applied to
-the beam. The grouping is in units of the beam type.
-
-@warning{ A @code{beamExceptions} value must be @emph{complete}
+@warning{A @code{beamExceptions} value must be @emph{complete}
exceptions list. That is, every exception that should be applied
must be included in the setting. It is not possible to add, remove,
or change only one of the exceptions. While this may seem cumbersome,
>>
@end lilypond
+Please make sure that you use the @code{\grace} command for the
+spacer part, even if the visual part uses @code{\acciaccatura} or
+@code{\appoggiatura} because otherwise an ugly slur fragment will
+be printed, connecting the invisible grace note with the following
+note.
+
The use of grace notes within voice contexts confuses the way the voice
is typeset. This can be overcome by inserting a rest or note between the
voice command and the grace note.
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@node Simultaneous notes
@node Chord repetition
@unnumberedsubsubsec Chord repetition
-@cindex Chord, repetition
+@cindex chord, repetition
@cindex repetition, using @code{q}
+@cindex @code{q}, chord repetition
In order to save typing, a shortcut can be used to repeat the preceding
chord. The chord repetition symbol is @code{q}:
\new Voice = "first"
{ \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d }
\new Voice= "second"
- { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+ { \voiceTwo d16 c d8~ 16 b c8~ 16 b c8~ 16 b8. }
>>
@end lilypond
<<
{ r8 r16 g e8. f16 g8[ c,] f e16 d }
\\
- { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+ { d16 c d8~ 16 b c8~ 16 b c8~ 16 b8. }
>>
@end lilypond
\parallelMusic #'(voiceA voiceB voiceC) {
% Bar 1
r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' |
- r16 e'8.~ e'4 r16 e'8.~ e'4 |
+ r16 e'8.~ 4 r16 e'8.~ 4 |
c'2 c'2 |
% Bar 2
r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' |
- r16 d'8.~ d'4 r16 d'8.~ d'4 |
+ r16 d'8.~ 4 r16 d'8.~ 4 |
c'2 c'2 |
}
\parallelMusic #'(voiceA voiceB voiceC) {
% Bar 1
r8 g16 c e g, c e r8 g,16 c e g, c e |
- r16 e8.~ e4 r16 e8.~ e4 |
+ r16 e8.~ 4 r16 e8.~ 4 |
c2 c |
% Bar 2
r8 a,16 d f a, d f r8 a,16 d f a, d f |
- r16 d8.~ d4 r16 d8.~ d4 |
+ r16 d8.~ 4 r16 d8.~ 4 |
c2 c |
}
> and prints page number -1 on the second page, for example.
-In 5.2.1 the @refbugs (line 495 in spacing.itely on master) it
-states:
-
-"@code{layout-set-staff-size} does not change the distance between
-the
-staff lines."
-
-Could we add a sentence:
-"Use instead the pair fontSize = #@var{N}
- \override StaffSymbol.staff-space = #(magstep
-@var{N})
-inside the Staff context to change the size of the font and the
-distance between
-staff lines accordingly."
-
-Actually I found, that the @internalsref{StaffSymbol} at line 481
-sends to an incomplete
-documentation. The property staff-space is not explained here. I
-thought Y-extent might be of
-help, but it is in turn explained by x-space which again is
-missing from the list. Who has the
-knowledge to fix this?
-
-
Clarify
http://code.google.com/p/lilypond/issues/detail?id=68
@item ragged-bottom
@funindex ragged-bottom
-If set to true, systems will not spread vertically down the page.
-This does not affect the last page. This should be set to true
-for pieces that have only two or three systems per page, for
-example orchestral scores.
+If this is set to true,
+systems will be set at their natural spacing, neither compressed
+nor stretched vertically to fit the page.
@item ragged-last-bottom
@funindex ragged-last-bottom
-If set to false, systems will spread vertically down the last
-page. Pieces that amply fill two pages or more should have this
-set to false. It also affects the last page of book parts, i.e.
-parts of a book created with @code{\bookpart} blocks.
+If this is set to false, then the last page,
+and the last page in each section created with a @code{\bookpart} block,
+will be vertically justified in the same way as the earlier pages.
@end table
@cindex font size, setting
@cindex staff size, setting
@funindex layout file
+@funindex magnification->font-size
+@funindex magstep
+@funindex set-global-staff-size
+@funindex layout-set-staff-size
-The default @strong{staff size} is set to 20 points.
-This may be changed in two ways:
+The default @strong{staff size} is 20 points, which corresponds to
+a staff height of 7.03mm (one point is equal to 100/7227 of an
+inch, or 2540/7227 mm). The staff size may be changed in three
+ways:
-To set the staff size globally for all scores in a file (or
-in a @code{book} block, to be precise), use @code{set-global-staff-size}.
+@enumerate
+
+@item
+To set the staff size globally for all scores in a file (or in a
+@code{\book} block, to be precise), use
+@code{set-global-staff-size}:
@example
#(set-global-staff-size 14)
@end example
@noindent
-This sets the global default size to 14pt staff height and scales all
-fonts accordingly.
+The above example sets the global default staff size to 14pt
+(4.92mm) and scales all fonts accordingly.
+
+@item
+To set the staff size for a single score within a book, use
+@code{layout-set-staff-size} inside that score's @code{\layout}
+block:
-To set the staff size individually for each score, use
@example
-\score@{
+\score @{
@dots{}
\layout @{
- #(layout-set-staff-size 15)
+ #(layout-set-staff-size 14)
@}
@}
@end example
+@item
+To set the staff size for a single staff within a system, set the
+staff's font-size and staff-space using units relative to the
+score's default staff size. Using relative units prevents the
+proportion of staff sizes from being altered if the default staff
+size is modified with @code{set-global-staff-size} or
+@code{layout-set-staff-size}.
+
+For example, traditionally engraved chamber music scores with
+piano often used 7mm piano staves while the other staves were up
+to 5/7 as large (if space allowed), or down to 3/5 as large (if
+space was cramped). To achieve the 5/7 proportion, use:
+
+@example
+\score @{
+ <<
+ \new Staff \with @{
+ fontSize = #(magnification->font-size 5/7)
+ \override StaffSymbol.staff-space = #5/7
+ @} @{ @dots{} @}
+ \new PianoStaff @{ @dots{} @}
+ >>
+@}
+@end example
+
+If you happen to know which @code{fontSize} you wish to use, you
+could use the following form:
+
+@example
+\score @{
+ <<
+ \new Staff \with @{
+ fontSize = -3
+ \override StaffSymbol.staff-space = #(magstep -3)
+ @} @{ @dots{} @}
+ \new PianoStaff @{ @dots{} @}
+ >>
+@}
+@end example
+
+To emulate the look of traditional engraving, it is best to avoid
+reducing the thickness of the staff lines.
+
+@end enumerate
+
+
+@subheading Automatic font weight at different sizes
+
The Feta font provides musical symbols at eight different
sizes. Each font is tuned for a different staff size: at a smaller size
the font becomes heavier, to match the relatively heavier staff lines.
The recommended font sizes are listed in the following table:
-@quotation
@multitable @columnfractions .15 .2 .22 .2
-
-@item @b{font name}
-@tab @b{staff height (pt)}
-@tab @b{staff height (mm)}
-@tab @b{use}
-
-@item feta11
-@tab 11.22
-@tab 3.9
-@tab pocket scores
-
-@item feta13
-@tab 12.60
-@tab 4.4
-@tab
-
-@item feta14
-@tab 14.14
-@tab 5.0
-@tab
-
-@item feta16
-@tab 15.87
-@tab 5.6
-@tab
-
-@item feta18
-@tab 17.82
-@tab 6.3
-@tab song books
-
-@item feta20
-@tab 20
-@tab 7.0
-@tab standard parts
-
-@item feta23
-@tab 22.45
-@tab 7.9
-@tab
-
-@item feta26
-@tab 25.2
-@tab 8.9
-@tab
-@c modern rental material?
-
+@item @b{font name} @tab @b{staff height (pt)} @tab @b{staff height (mm)} @tab @b{use}
+@item feta11 @tab 11.22 @tab 3.9 @tab pocket scores
+@item feta13 @tab 12.60 @tab 4.4 @tab
+@item feta14 @tab 14.14 @tab 5.0 @tab
+@item feta16 @tab 15.87 @tab 5.6 @tab
+@item feta18 @tab 17.82 @tab 6.3 @tab song books
+@item feta20 @tab 20 @tab 7.0 @tab standard parts
+@item feta23 @tab 22.45 @tab 7.9 @tab
+@item feta26 @tab 25.2 @tab 8.9 @tab @c modern rental material?
@end multitable
-@end quotation
-
-These fonts are available in any sizes. The context property
-@code{fontSize} and the layout property @code{staff-space} (in
-@rinternals{StaffSymbol}) can be used to tune the size for individual
-staves. The sizes of individual staves are relative to the global size.
@seealso
Notation Reference:
inserted at top-level, between scores and top-level markups.
There are also analogous settings to @code{ragged-right} and
-@code{ragged-last} which have the same effect on vertical spacing:
-@code{ragged-bottom} and @code{ragged-last-bottom}. If set to
-@code{#t} the systems on all pages or just the last page
-respectively will not be justified vertically. See
+@code{ragged-last} which have the same effect on vertical spacing.
+If @code{ragged-bottom} is set to @code{#t} the systems will not
+be justified vertically. When @code{ragged-last-bottom} is set
+to @code{#t}, as it is by default, empty space is allowed at the
+bottom of the final page (or the final page in each
+@code{\bookpart}). See
@ref{Fixed vertical spacing paper variables,,Fixed vertical spacing @code{@bs{}paper} variables}.
Page breaks are computed by the @code{page-breaking} function. LilyPond
fixed amount of space (which is controlled by
@code{shortest-duration-space} in the @rinternals{SpacingSpanner}
object). The longer the duration, the more space it gets: doubling a
-duration adds a fixed amount (this amount is controlled by
-@code{spacing-increment}) of space to the note.
+duration adds @code{spacing-increment} of space to the note.
For example, the following piece contains lots of half, quarter, and
8th notes; the eighth note is followed by 1 note head width (NHW).
We start with the following one-measure example, which uses classical
spacing with ragged-right turned on.
+@c The initial pitch is not necessary as long as RhythmicStaff is
+@c not preceded by other material in the score, but we don't want
+@c to explain that.
@lilypond[quote,verbatim,ragged-right]
\score {
<<
\new RhythmicStaff {
- c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
+ c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
}
>>
}
\score {
<<
\new RhythmicStaff {
- c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
+ c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
}
>>
\layout {
\score {
<<
\new RhythmicStaff {
- c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
+ c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
}
>>
\layout {
\score {
<<
\new RhythmicStaff {
- c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
+ c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
}
>>
\layout {
\score {
<<
\new RhythmicStaff {
- c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
+ c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
}
>>
\layout {
\score {
<<
\new RhythmicStaff {
- c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
+ c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
}
\new RhythmicStaff {
- \tuplet 9/8 { c'8 c' c' c' c' c' c' c' c' }
+ \tuplet 9/8 { c8 8 8 8 8 8 8 8 8 }
}
>>
}
\score {
<<
\new RhythmicStaff {
- c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
+ c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
}
\new RhythmicStaff {
- \tuplet 9/8 { c'8 c' c' c' c' c' c' c' c' }
+ \tuplet 9/8 { c8 8 8 8 8 8 8 8 8 }
}
>>
\layout {
\score {
<<
\new RhythmicStaff {
- c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
+ c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
}
\new RhythmicStaff {
- \tuplet 9/8 { c'8 c' c' c' c' c' c' c' c' }
+ \tuplet 9/8 { c8 8 8 8 8 8 8 8 8 }
}
>>
\layout {
@lilypond[quote,verbatim,ragged-right]
\new Staff {
\set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
- c''8 c'' c'' \clef alto d' d'2
+ c''8 8 8 \clef alto d'2 2
}
\new Staff {
\set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\override Score.SpacingSpanner.strict-note-spacing = ##t
- c''8 c'' c'' \clef alto d' d'2
+ c''8 8 8 \clef alto d'2 2
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@node Staff notation
@section Staff notation
R1*16
\instrumentSwitch "contrabassoon"
c,,2 g \break
- c,1 ~ | c1
+ c,1 ~ | 1
}
@end lilypond
@funindex show-available-fonts
-The following command displays a list of all available fonts on the
-operating system:
+Running lilypond with the following option displays a list of all
+available fonts on the operating system:
@example
lilypond -dshow-available-fonts x
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.30"
+@c \version "2.19.2"
@node Vocal music
@section Vocal music
\new Voice = "melody" {
\time 3/4
f4 g2 ~ |
- g4 e2 ~ |
- e8
+ 4 e2 ~ |
+ 8
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- e __
\time 3/4
\set melismaBusyProperties = #'()
c4 d ( e )
- g8 [ f ] f4 ~ f
+ g8 [ f ] f4 ~ 4
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- e e -- le -- i -- son
\time 3/4
\set melismaBusyProperties = #'()
c4 d ( e )
- g8 [ f ] ~ f4 ~ f
+ g8 [ f ] ~ 4 ~ f
}
\new Lyrics \lyricsto "melody" {
Ky -- ri -- _ e __ _ _ _
@item
An introduction to creating an SATB vocal score can be found in
the Learning Manual, see @rlearning{Four-part SATB vocal score}.
+There is also a built-in template which simplifies the entry of
+SATB vocal music, see @rlearning{Built-in templates}.
@item
Several templates suitable for various styles of choral music can
# translation of LilyPond documentation to Italian
-# Copyright (C) 2009--2012 Han-Wen Nienhuys, Jan Nieuwenhuizen
+# Copyright (C) 2009--2014 Han-Wen Nienhuys, Jan Nieuwenhuizen
# This file is distributed under the same license as the lilypond package.
# Federico Bruni <fedelogy@gmail.com>, 2009, 2012.
#
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Google Search">
<input type="text" name="brute_query" onfocus="this.value=''" value="Search">
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.19.2"
\header {
lsrtags = "text, vocal-music"
c d~^\markup "reset to default" d e
}
}
- \new Lyrics \lyricsto "vocal" \lyricmode {
+ \new Lyrics \lyricsto "vocal" {
word word word
\set lyricMelismaAlignment = #RIGHT
word word word
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.17.27
-\version "2.17.27"
+%% Note: this file works from version 2.19.2
+\version "2.19.2"
\header {
lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs"
des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
\with-color #white
\filled-box #'(2 . 7) #'(0 . 2) #0
- r8. des4 ~ des16->\sff
+ r8. des4 ~ 16->\sff
}
>>
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.19.2"
\header {
lsrtags = "contexts-and-engravers, midi, real-music"
\time 2/2
r2 g-"Flute" ~
g fis ~
- fis4 g8 fis e2 ~
- e4 d8 cis d2
+ 4 g8 fis e2 ~
+ 4 d8 cis d2
}
\new Voice \relative c'' {
\set midiInstrument = #"clarinet"
%
% This file is in the public domain.
%% Note: this file works from version 2.16.0
-\version "2.16.0"
+\version "2.19.7"
\header {
0))
(set! (ambitus-start-key-sig ambitus)
(ly:context-property (ly:translator-context translator)
- 'keySignature)))))
+ 'keyAlterations)))))
#(define-method (update-ambitus-notes (ambitus <ambitus>) note-grob)
"Update the upper and lower ambitus pithes of @var{ambitus}, using
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.29"
+\version "2.19.7"
\header {
lsrtags = "contexts-and-engravers, specific-notation"
\consists "Pitch_squash_engraver"
- localKeySignature = #'()
+ localAlterations = #'()
% explicitly set instrumentName, so we don't get
% weird effects when doing instrument names for
You have to instantiate this explicitly if you want to have
multiple voices on the same staff."
- localKeySignature = #'()
+ localAlterations = #'()
\consists "Font_size_engraver"
% must come before all
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.19.2"
\header {
lsrtags = "headword"
r16 d16 |
d4 bes,4 a,4 f4 |
g8 f16 g16 a8 a,8 d4 d'4 ~ |
- d'8 c'8 b4 c'8 c'16 bes16 a4 |
+ 8 c'8 b4 c'8 c'16 bes16 a4 |
bes8 bes16 a16 g4 a8 a,4 a16 g16 |
fis8 d8 e8 fis8 g8 g,4 g16 f16 |
e8 c8 d8 e8 f8 f,4 a,8 |
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.19.0
+\version "2.19.0"
\header {
lsrtags = "contemporary-notation, rhythms"
(Note that @code{\\set stemLeftBeamCount} is always equivalent to
@code{\\once \\set}. In other words, the beam count settings are not
@qq{sticky}, so the pair of flat flags attached to the lone
-@code{c'16[]} in the last example have nothing to do with the
+@code{16[]} in the last example have nothing to do with the
@code{\\set} two notes prior.)
\new RhythmicStaff {
r8.
\set stemRightBeamCount = #0
- c16[]
+ 16[]
}
% Example 3
\new RhythmicStaff {
- c16 c
+ 16 16
\set stemRightBeamCount = #2
- c16 r r
+ 16 r r
\set stemLeftBeamCount = #2
- c16 c c
+ 16 16 16
}
% Example 4
\new RhythmicStaff {
- c16 c
+ 16 16
\set stemRightBeamCount = #2
- c16 r
- c16[]
+ 16 r16
+ 16[]
r16
\set stemLeftBeamCount = #2
- c16 c
+ 16 16
}
>>
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.19.2"
\header {
lsrtags = "pitches"
\relative c'' {
\override Accidental.hide-tied-accidental-after-break = ##t
- cis1~ cis~
+ cis1~ 1~
\break
cis
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.19.2"
\header {
lsrtags = "fretted-strings, specific-notation, tweaks-and-overrides"
b4.~^\markup { \fret-diagram #"6-x;5-2;4-4;3-2;2-2;1-4;" } b4. a8\break
% HERE IS THE SECOND METHOD
<<
- { a8 b4.~ b4. a8}
+ { a8 b4.~ 4. a8}
{ s4 s4 s4^\markup { \fret-diagram #"6-x;5-2;4-4;3-2;2-2;1-4;" }
}
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.19.7"
\header {
lsrtags = "pitches, version-specific, world-music"
\include "makam.ly"
\relative c' {
- \set Staff.keySignature = #`((6 . ,(- KOMA)) (3 . ,BAKIYE))
+ \set Staff.keyAlterations = #`((6 . ,(- KOMA)) (3 . ,BAKIYE))
c4 cc db fk
gbm4 gfc gfb efk
fk4 db cc c
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.17.30
-\version "2.17.30"
+%% Note: this file works from version 2.19.2
+\version "2.19.2"
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
{
\once \hide Stem
\once \override Stem.length = #8
- b8 ~ b\noBeam
+ b8 ~ 8\noBeam
\once \hide Stem
\once \override Stem.length = #8
- g8 ~ g\noBeam
+ g8 ~ 8\noBeam
}
\\
{
variables @code{dashHat}, @code{dashPlus}, @code{dashDash},
@code{dashBang}, @code{dashLarger}, @code{dashDot}, and
@code{dashUnderscore} are assigned default values. The default values
-for the shorthands can be modified. For example, to associate the
-@code{-+} (@code{dashPlus}) shorthand with the trill symbol instead of
-the default + symbol, assign the value @code{trill} to the variable
+for the shorthands can be modified. For example, to make the @code{-+}
+(@code{dashPlus}) shorthand create a trill instead of the default +
+(@code{stopped}), assign the value of @code{trill} to the variable
@code{dashPlus}:
"
\relative c'' { c1-+ }
-dashPlus = "trill"
+dashPlus = \trill
\relative c'' { c1-+ }
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.17.11"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.19.0
+\version "2.19.0"
\header {
lsrtags = "really-simple, rhythms"
% ...to cover all items up to the next note
\set tupletFullLengthNote = ##t
\time 2/4
- \tuplet 3/2 { c4 c c }
+ \tuplet 3/2 { c4 4 4 }
% ...or to cover just whitespace
\set tupletFullLengthNote = ##f
\time 4/4
- \tuplet 5/4 { c4 c1 }
+ \tuplet 5/4 { 4 1 }
\time 3/4
- c2.
+ 2.
}
-\version "2.17.27"
+\version "2.19.2"
\header {
lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs"
des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
\with-color #white
\filled-box #'(2 . 7) #'(0 . 2) #0
- r8. des4 ~ des16->\sff
+ r8. des4 ~ 16->\sff
}
>>
}
-\version "2.16.0"
+\version "2.19.7"
\header {
0))
(set! (ambitus-start-key-sig ambitus)
(ly:context-property (ly:translator-context translator)
- 'keySignature)))))
+ 'keyAlterations)))))
#(define-method (update-ambitus-notes (ambitus <ambitus>) note-grob)
"Update the upper and lower ambitus pithes of @var{ambitus}, using
--- /dev/null
+\version "2.19.0"
+
+\header {
+ lsrtags = "contemporary-notation, rhythms"
+
+ texidoc = "
+ Flat flags on lone notes and beam nibs at the ends of beamed figures
+are both possible with a combination of @code{stemLeftBeamCount},
+@code{stemRightBeamCount} and paired @code{[]} beam indicators.
+
+
+
+
+For right-pointing flat flags on lone notes, use paired @code{[]} beam
+indicators and set @code{stemLeftBeamCount} to zero (see Example 1).
+
+
+
+
+For left-pointing flat flags, set @code{stemRightBeamCount} instead
+(Example 2).
+
+
+
+
+For right-pointing nibs at the end of a run of beamed notes, set
+@code{stemRightBeamCount} to a positive value. And for left-pointing
+nibs at the start of a run of beamed notes, set
+@code{stemLeftBeamCount} instead (Example 3).
+
+
+
+
+Sometimes it may make sense for a lone note surrounded by rests to
+carry both a left- and right-pointing flat flag. Do this with paired
+@code{[]} beam indicators alone (Example 4).
+
+
+
+
+(Note that @code{\\set stemLeftBeamCount} is always equivalent to
+@code{\\once \\set}. In other words, the beam count settings are not
+@qq{sticky}, so the pair of flat flags attached to the lone
+@code{16[]} in the last example have nothing to do with the
+@code{\\set} two notes prior.)
+
+
+
+
+"
+ doctitle = "Flat flags and beam nibs"
+}
+\score {
+ <<
+ % Example 1
+ \new RhythmicStaff {
+ \set stemLeftBeamCount = #0
+ c16[]
+ r8.
+ }
+ % Example 2
+ \new RhythmicStaff {
+ r8.
+ \set stemRightBeamCount = #0
+ 16[]
+ }
+ % Example 3
+ \new RhythmicStaff {
+ 16 16
+ \set stemRightBeamCount = #2
+ 16 r r
+ \set stemLeftBeamCount = #2
+ 16 16 16
+ }
+ % Example 4
+ \new RhythmicStaff {
+ 16 16
+ \set stemRightBeamCount = #2
+ 16 r16
+ 16[]
+ r16
+ \set stemLeftBeamCount = #2
+ 16 16
+ }
+ >>
+}
-\version "2.17.30"
+\version "2.19.2"
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
{
\once \hide Stem
\once \override Stem.length = #8
- b8 ~ b\noBeam
+ b8 ~ 8\noBeam
\once \hide Stem
\once \override Stem.length = #8
- g8 ~ g\noBeam
+ g8 ~ 8\noBeam
}
\\
{
--- /dev/null
+\version "2.19.0"
+
+\header {
+ lsrtags = "really-simple, rhythms"
+
+ texidoc = "
+Tuplet brackets can be made to run to prefatory matter or the next
+note. Default tuplet brackets end at the right edge of the final note
+of the tuplet; full-length tuplet brackets extend farther to the right,
+either to cover all the non-rhythmic notation up to the following note,
+or to cover only the whitespace before the next item of notation, be
+that a clef, time signature, key signature, or another note. The
+example shows how to switch tuplets to full length mode and how to
+modify what material they cover.
+
+"
+ doctitle = "Modifying tuplet bracket length"
+}
+
+\new RhythmicStaff {
+ % Set tuplets to be extendable...
+ \set tupletFullLength = ##t
+ % ...to cover all items up to the next note
+ \set tupletFullLengthNote = ##t
+ \time 2/4
+ \tuplet 3/2 { c4 4 4 }
+ % ...or to cover just whitespace
+ \set tupletFullLengthNote = ##f
+ \time 4/4
+ \tuplet 5/4 { 4 1 }
+ \time 3/4
+ 2.
+}
--- /dev/null
+\version "2.19.7"
+
+\header {
+ lsrtags = "contemporary-notation, pitches, really-cool, staff-notation, version-specific"
+
+ texidoc = "
+The commonly used @code{\\key} command sets the @code{keyAlterations}
+property, in the @code{Staff} context.
+
+To create non-standard key signatures, set this property directly. The
+format of this command is a list:
+
+@code{ \\set Staff.keyAlterations = #`(((octave . step) . alter) ((octave
+. step) . alter) ...) } where, for each element in the list,
+@code{octave} specifies the octave (0 being the octave from middle C to
+the B above), @code{step} specifies the note within the octave (0 means
+C and 6 means B), and @code{alter} is @code{,SHARP ,FLAT ,DOUBLE-SHARP}
+etc. (Note the leading comma.)
+
+
+Alternatively, for each item in the list, using the more concise format
+@code{(step . alter)} specifies that the same alteration should hold in
+all octaves.
+
+
+For microtonal scales where a @qq{sharp} is not 100 cents, @code{alter}
+refers to the alteration as a proportion of a 200-cent whole tone.
+
+
+Here is an example of a possible key signature for generating a
+whole-tone scale:
+
+"
+ doctitle = "Non-traditional key signatures"
+}
+
+
+\relative c' {
+ \set Staff.keyAlterations = #`((6 . ,FLAT)
+ (5 . ,FLAT)
+ (3 . ,SHARP))
+ c4 d e fis
+ aes4 bes c2
+}
+++ /dev/null
-\version "2.17.6"
-
-\header {
- lsrtags = "repeats, tweaks-and-overrides"
-
- texidoc = "
-A @code{.|:} bar line can be printed at the beginning of a piece, by
-overriding the relevant property:
-
-"
- doctitle = "Printing a repeat sign at the beginning of a piece"
-}
-
-
-\relative c'' {
- \once \override Score.BreakAlignment.break-align-orders =
- #(make-vector 3 '(instrument-name
- left-edge
- ambitus
- breathing-sign
- clef
- key-signature
- time-signature
- staff-bar
- custos))
- \once \override Staff.TimeSignature.space-alist =
- #'((first-note . (fixed-space . 2.0))
- (right-edge . (extra-space . 0.5))
- ;; free up some space between time signature
- ;; and repeat bar line
- (staff-bar . (extra-space . 1)))
- \bar ".|:"
- c1
- d1
- d4 e f g
-}
do8-. r8 sib4-> |
}
-tambourin = \relative do' {
+tambourin = \drummode {
\time 2/4
- r8 do16 do do8 do |
- r8 do16 do do8 do |
- r8 do r do |
- r8 do16 do do8 do |
- r8 do r do |
-}
-
-tambourinMidi = \drummode {
- \time 2/4
- r8 tamb16 tamb tamb8 tamb |
- r8 tamb16 tamb tamb8 tamb |
- r8 tamb r tamb |
- r8 tamb16 tamb tamb8 tamb |
- r8 tamb r tamb |
+ r8 tamb16 16 8 8 |
+ r8 16 16 8 8 |
+ r8 8 r8 8 |
+ r8 16 16 8 8 |
+ r8 8 r8 8 |
}
upper = \relative do' {
\trompette
}
\context DrumStaff = "tambourin" {
- \tambourinMidi
+ \tambourin
}
\context Staff = "piano" <<
\upper
\tempo 4 = 72
}
}
-
-\version "2.17.30"
+\version "2.19.2"
\header {
lsrtags = "headword"
\time 15/4
<<
{ \shift d2 \glissando ^\markup \colmark { \quatre \dubetc \pvib \norm } \shifta e1 \glissando d2 } \\
- { d2 \open \mf \< ~ d1 ~ d2 \ff ~ d1 \> ~ d2 ^\markup \colmark { " " " " \svib } ~ d4 \pp}
+ { d2 \open \mf \< ~ d1 ~ 2 \ff ~ d1 \> ~ d2 ^\markup \colmark { " " " " \svib } ~ d4 \pp}
>>
\break
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.19.7
+\version "2.19.7"
\header {
lsrtags = "contemporary-notation, pitches, really-cool, staff-notation, version-specific"
texidoc = "
-The commonly used @code{\\key} command sets the @code{keySignature}
+The commonly used @code{\\key} command sets the @code{keyAlterations}
property, in the @code{Staff} context.
To create non-standard key signatures, set this property directly. The
format of this command is a list:
-@code{ \\set Staff.keySignature = #`(((octave . step) . alter) ((octave
+@code{ \\set Staff.keyAlterations = #`(((octave . step) . alter) ((octave
. step) . alter) ...) } where, for each element in the list,
@code{octave} specifies the octave (0 being the octave from middle C to
the B above), @code{step} specifies the note within the octave (0 means
C and 6 means B), and @code{alter} is @code{,SHARP ,FLAT ,DOUBLE-SHARP}
-etc. (Note the leading comma.) The accidentals in the key signature
-will appear in the reverse order to that in which they are specified.
+etc. (Note the leading comma.)
Alternatively, for each item in the list, using the more concise format
} % begin verbatim
+
\relative c' {
- \set Staff.keySignature = #`(((0 . 6) . ,FLAT)
- ((0 . 5) . ,FLAT)
- ((0 . 3) . ,SHARP))
+ \set Staff.keyAlterations = #`((6 . ,FLAT)
+ (5 . ,FLAT)
+ (3 . ,SHARP))
c4 d e fis
aes4 bes c2
}
+++ /dev/null
-% DO NOT EDIT this file manually; it is automatically
-% generated from Documentation/snippets/new
-% Make any changes in Documentation/snippets/new/
-% and then run scripts/auxiliar/makelsr.py
-%
-% This file is in the public domain.
-%% Note: this file works from version 2.17.6
-\version "2.17.6"
-
-\header {
- lsrtags = "repeats, tweaks-and-overrides"
-
- texidoc = "
-A @code{.|:} bar line can be printed at the beginning of a piece, by
-overriding the relevant property:
-
-"
- doctitle = "Printing a repeat sign at the beginning of a piece"
-} % begin verbatim
-
-
-
-\relative c'' {
- \once \override Score.BreakAlignment.break-align-orders =
- #(make-vector 3 '(instrument-name
- left-edge
- ambitus
- breathing-sign
- clef
- key-signature
- time-signature
- staff-bar
- custos))
- \once \override Staff.TimeSignature.space-alist =
- #'((first-note . (fixed-space . 2.0))
- (right-edge . (extra-space . 0.5))
- ;; free up some space between time signature
- ;; and repeat bar line
- (staff-bar . (extra-space . 1)))
- \bar ".|:"
- c1
- d1
- d4 e f g
-}
percent-repeat-count-visibility.ly
percent-repeat-counter.ly
positioning-segno-and-coda-with-line-break.ly
-printing-a-repeat-sign-at-the-beginning-of-a-piece.ly
setting-the-double-repeat-default-for-volte.ly
shortening-volta-brackets.ly
volta-below-chords.ly
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.11"
+\version "2.19.2"
\header {
lsrtags = "headword"
c'''32 ) \!
g''8 (
~
- g''32 [
+ 32 [
a''64
g''64 ) ]
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.19.2"
\header {
lsrtags = "template, vocal-music"
\global
\sopranonotes
>>
- \lyricsto "soprano" \new Lyrics \sopranowords
+ \new Lyrics \lyricsto "soprano" \sopranowords
>>
\new Staff <<
\new Voice = "alto" <<
\global
\altonotes
>>
- \lyricsto "alto" \new Lyrics \altowords
+ \new Lyrics \lyricsto "alto" \altowords
>>
\new Staff <<
\new Voice = "tenor" <<
\global
\tenornotes
>>
- \lyricsto "tenor" \new Lyrics \tenorwords
+ \new Lyrics \lyricsto "tenor" \tenorwords
>>
\new Staff <<
\new Voice = "bass" <<
\global
\bassnotes
>>
- \lyricsto "bass" \new Lyrics \basswords
+ \new Lyrics \lyricsto "bass" \basswords
>>
>>
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.11"
+\version "2.19.2"
\header {
lsrtags = "headword"
\trillFlat
af''4.~ \startTrillSpan
af''8.~ |
- af''4.~ af''8.~ |
+ 4.~ 8.~ |
\oneVoice
<af'' d''>8.[ a''8. \p \< bf''8.]~ |
- bf''8.[ b''8. c'''8.]~
+ 8.[ b''8. c'''8.]~
\bar "||"
\key ef \major
c'''8.[ cs'''8.] \f \stopTrillSpan
\override Voice.TrillSpanner.direction = #DOWN
d''4.~ \f \startTrillSpan
d''8.~ |
- d''4.~ d''8.~ |
- d''8. \stopTrillSpan
+ 4.~ 8.~ |
+ 8. \stopTrillSpan
\trillFlat
d''4.~ \startTrillSpan |
- d''4.~ d''8.~ |
- d''4.~ d''8.~ |
- d''4.~ d''8.~ \stopTrillSpan |
+ d''4.~ 8.~ |
+ 4.~ 8.~ |
+ 4.~ 8.~ \stopTrillSpan |
\trillFlat
d''4.~ \startTrillSpan
d''8. ~ |
- d''4.~ d''8.~ |
+ 4.~ 8.~ |
\once \override NoteColumn.ignore-collision = ##t
\hideNotes
d''8. \stopTrillSpan
\override Voice.TrillSpanner.direction = #UP
f'4.~ \startTrillSpan
f'8.~ |
- f'4.~ f'8.~ |
- f'8. \stopTrillSpan
+ 4.~ 8.~ |
+ 8. \stopTrillSpan
}
\new Voice {
\voiceTwo
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.19.2"
\header {
lsrtags = "chords, really-simple, template"
\time 4/4
f4 e8[ c] d4 g
- a2 ~ a
+ a2 ~ 2
}
harmonies = \chordmode {
do8-. r8 sib4-> |
}
-tambourin = \relative do' {
+tambourin = \drummode {
\time 2/4
- r8 do16 do do8 do |
- r8 do16 do do8 do |
- r8 do r do |
- r8 do16 do do8 do |
- r8 do r do |
-}
-
-tambourinMidi = \drummode {
- \time 2/4
- r8 tamb16 tamb tamb8 tamb |
- r8 tamb16 tamb tamb8 tamb |
- r8 tamb r tamb |
- r8 tamb16 tamb tamb8 tamb |
- r8 tamb r tamb |
+ r8 tamb16 16 8 8 |
+ r8 16 16 8 8 |
+ r8 8 r8 8 |
+ r8 16 16 8 8 |
+ r8 8 r8 8 |
}
upper = \relative do' {
\trompette
}
\context DrumStaff = "tambourin" {
- \tambourinMidi
+ \tambourin
}
\context Staff = "piano" <<
\upper
positioning-arpeggios.ly
positioning-multi-measure-rests.ly
positioning-text-markups-inside-slurs.ly
-printing-a-repeat-sign-at-the-beginning-of-a-piece.ly
printing-bar-numbers-inside-boxes-or-circles.ly
printing-metronome-and-rehearsal-marks-below-the-staff.ly
printing-note-names-with-and-without-an-octave-marker.ly
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.17.30
-\version "2.17.30"
+%% Note: this file works from version 2.19.2
+\version "2.19.2"
\header {
lsrtags = "headword"
\time 15/4
<<
{ \shift d2 \glissando ^\markup \colmark { \quatre \dubetc \pvib \norm } \shifta e1 \glissando d2 } \\
- { d2 \open \mf \< ~ d1 ~ d2 \ff ~ d1 \> ~ d2 ^\markup \colmark { " " " " \svib } ~ d4 \pp}
+ { d2 \open \mf \< ~ d1 ~ 2 \ff ~ d1 \> ~ d2 ^\markup \colmark { " " " " \svib } ~ d4 \pp}
>>
\break
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.19.2"
\header {
lsrtags = "expressive-marks, vocal-music"
\new Voice = "lower"
{ \voiceTwo
a1 ~
- a
+ 1
a ~
- a4 \bar "|."
+ 4 \bar "|."
}
>>
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.19.2"
\header {
lsrtags = "headword"
\autoBeamOff
r4^\markup { \small Baritono } r a
\appoggiatura a8 e'2. ~
- e4 d8[ cis d e]
+ 4 d8[ cis d e]
e4 g, r8 g
bes2 a8 e
g4 f r
@c `Usage' was born 1999-10-10 with git commit c82c30c...
@macro copyrightDeclare
-Copyright @copyright{} 1999--2012 by the authors.
+Copyright @copyright{} 1999--2014 by the authors.
@end macro
@set FDL
@cindex point and click
Point and click lets you find notes in the input by clicking on them
-in the PDF viewer. This makes it easier to find input that causes
-some error in the sheet music.
+in the PDF viewer. This makes it easier to find input that causes some
+error in the sheet music.
@menu
* Configuring the system for point and click::
@node Configuring the system for point and click
@subsection Configuring the system
-When this functionality is active, LilyPond adds hyperlinks to the
-PDF file. These hyperlinks are sent to a @q{URI helper} or a
-web-browser, which opens a text-editor with the cursor in the
-right place.
+When this functionality is active, LilyPond adds hyperlinks to PDF and
+SVG files. These hyperlinks are sent to a @q{URI helper} or a
+web-browser, which opens a text-editor with the cursor in the right
+place.
To make this chain work, you should configure your PDF viewer to
follow hyperlinks using the @file{lilypond-invoke-editor} script
@cindex file size, output
Point and click functionality is enabled by default when creating
-PDF files.
+PDF or SVG files.
The point and click links enlarge the output files significantly. For
-reducing the size of PDF and PS files, point and click may be switched
-off by issuing
+reducing the size of these (and PS) files, point and click may
+be switched off by issuing
@example
\pointAndClickOff
@warning{You should always turn off point and click in any LilyPond
files to be distributed to avoid including path information about
-your computer in the .pdf file, which can pose a security risk.}
+your computer in the PDF file, which can pose a security risk.}
@node Selective point-and-click
@unnumberedsubsec Selective point-and-click
@item
@tab @code{svg}
-@tab Scalable Vector Graphics. This creates a single @code{SVG} file,
+@tab Scalable Vector Graphics. This creates a single SVG file,
without embedded fonts, for every page of output. It is recommended to
install the Century Schoolbook fonts, included with your LilyPond
installation, for optimal rendering. Under UNIX, simply copy these
fonts from the LilyPond directory (typically
-@file{/usr/share/lilypond/VERSION/fonts/otf/}) to @file{~/.fonts/}. The
-@code{SVG} output should be compatible with any SVG editor or user
-agent. There is also an option @code{svg-woff} (below) for use of woff
-font files in the SVG backend.
+@file{/usr/share/lilypond/VERSION/fonts/otf/}) to @file{~/.fonts/}.
+There is also an option @code{svg-woff} (below) for use of woff font
+files in the SVG backend.
@item
@tab @code{scm}
@tab Set GhostScript's output format for pixel images.
@item @code{point-and-click}
-@tab @code{#f}
-@tab Add @q{point & click} links to @code{PDF} output. See
-@ref{Point and click}.
+@tab @code{#t}
+@tab Add @q{point & click} links to PDF and SVG output.
+See @ref{Point and click}.
@item @code{preview}
@tab @code{#f}
@quotation
@verbatim
-#(system "rm -rf /")
+#(s ystem "rm -rf /") % too dangerous to write correctly
{
- c4^$(ly:gulp-file "/etc/passwd")
+ c4^$(ly:gulp-file "/etc/passwd") % malicious but not destructive
}
@end verbatim
@end quotation
@item @code{strokeadjust}
@tab @code{#f}
@tab Force PostScript stroke adjustment. This option is mostly
-relevant when @code{PDF} is generated from PostScript output
-(stroke adjustment is usually enabled automatically for
-low-resolution bitmap devices). Without this option,
-@code{PDF}@tie{}previewers tend to produce widely inconsistent
-stem widths at resolutions typical for screen display. The option
-does not noticeably affect print quality and causes large file
-size increases in @code{PDF} files.
+relevant when a PDF is generated from PostScript output (stroke
+adjustment is usually enabled automatically for low-resolution bitmap
+devices). Without this option, PDF previewers tend to produce widely
+inconsistent stem widths at resolutions typical for screen display. The
+option does not noticeably affect print quality and causes large file
+size increases in PDF files.
@item @code{svg-woff}
@tab @code{#f}
@item -d, --diff-version-update
increase the @code{\version} string only if the file has actually
been changed. In that case, the version header will correspond to
-the version after the last actual change. Without that option,
-the version will reflect the last @emph{attempted} conversion.
+the version after the last actual change. An unstable version
+number will be rounded up to the next stable version number unless
+that would exceed the target version number. Without this option,
+the version will instead reflect the last @emph{attempted}
+conversion.
@item -e, --edit
Apply the conversions direct to the input file, modifying it
@c `Web' was imported 2009-08-05 with git commit b938d71...
@c @macro copyrightDeclare
-@c Copyright @copyright{} 2009--2012 by the authors.
+@c Copyright @copyright{} 2009--2014 by the authors.
@c @end macro
@set FDL
@end ignore
@copying
-Copyright @copyright{} 2009--2012 by the authors.
+Copyright @copyright{} 2009--2014 by the authors.
@c next line is necessary for broken pre-4.13 texinfo's
@c install-info, so leave it there until we officially
@divClass{column-center-top}
@subheading Generic Packages or Distribution-Specific Packages?
-Many distributions already include LilyPond within their normal
-package repositories and these are often much easier to install than the
-generic packages found here. However the version of LilyPond in those
-repositories may be @emph{significantly} older than the current stable
-version. If you wish to use our generic packages, please check that
-your LilyPond editor is using the correct version of lilypond. See
-@ref{Easier editing}.
+Many distributions include LilyPond within their normal package
+repositories that are often @emph{significantly} older than the current
+stable version. While these older packages may be easier to install, we
+@emph{strongly} recommend that you use our generic packages. In this
+case, check that your LilyPond editor is using the correct version.
+See @ref{Easier editing}.
@divEnd
@ifset web_version
@downloadStableLinuxNormal
@end ifset
-
-(if in doubt, use this)
+32bit Systems.
@item
@sourceimage{logo-linux,,,}
@downloadStableLinuxBig
+64bit Systems.
@item
@sourceimage{logo-linux,,,}
@item
@sourceimage{logo-freebsd,,,}
@downloadStableFreeBSDNormal
+32bit Systems.
@item
@sourceimage{logo-freebsd,,,}
@downloadStableFreeBSDBig
+64bit Systems
@end itemize
@divClass{column-right-top}
-@subheading Distribution-specific Packages
-
-Please use your distribution's package manager to install or
-upgrade to these versions.
-
-@itemize
-
-@item
-@sourceimage{logo-fedora,,,}
-@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447,
-Fedora: LilyPond 2.14.2}
-
-@item
-@sourceimage{logo-ubuntu,,,}
-@uref{http://packages.ubuntu.com/search?keywords=lilypond,
-Ubuntu: LilyPond 2.14.2}
-
-@item
-@sourceimage{logo-slackware,,,}
-@uref{http://www.johannes-schoepfer.de/lilypond/,
-Slackware: LilyPond 2.14.2}
-
-@item
-@sourceimage{logo-debian,,,}
-@uref{http://packages.debian.org/search?keywords=lilypond,
-Debian: LilyPond 2.12.3}
-
-@item
-@sourceimage{logo-suse,,,}
-@uref{http://software.opensuse.org/search?baseproject=openSUSE%3A11.2&p=1&q=lilypond,
-openSUSE: LilyPond 2.12.3}
-
-@end itemize
-
-@divEnd
-
-
-@divClass{column-center-top}
@subheading Compiling a file
@lilypadCommandLine
reading beautiful music, so why couldn't programmers write
software to produce elegant printed parts?
-The result is a system which frees musicians from the details of
-layout, allowing them to focus on making music. LilyPond works
-with them to create publication-quality parts, crafted in the best
-traditions of classical music engraving.
+The result is a program that creates beautiful sheet music
+following the best traditions of classical music engraving.
+It takes care of the details of layout programmatically,
+allowing composers, transcribers and publishers to focus
+on the @emph{music} instead of improving their software's
+default output. Performers will get parts that let them
+concentrate on @emph{playing} music instead of @emph{reading} it.
+
@divEnd
@divClass{column-center-top}
-@subheading Elegance
-@subsubheading Excellent classical engraving
+@subheading Excellent classical engraving
@imageFloat{flat-design,png,right}
@ref{Essay}.
+@divEnd
-@subsubheading Effective layout choices
+@divClass{column-center-top}
+@subheading Text input
-Spend less time with tweaking the output; LilyPond gets the
-formatting correct right from the start. It determines spacing by
-itself, and breaks lines and pages to provide a tight and uniform
-layout. Clashes between lyrics, notes, and chords are resolved
-and slurs and beams are sloped, automatically!
+@subsubheading Everything is explicit
+
+LilyPond processes text input, which contains all information
+about the @emph{content} of your score and can easily be read
+by any human or another program. There are no obscure
+settings hidden behind menu items and binary file storage.
+
+Read more about this concept on @ref{Text input}.
+@subsubheading Tweaks are robust and traceable
+
+If you have to change anything in the layout this tweak will
+also be explicitly visible in the input file in human-readable
+form, so you will always be able to retrace what you've done.
+If you should accidentally break anything you can easily revert
+or modify any decision without being at the mercy of an
+@emph{Undo} function.
+
+
+@subsubheading Text files are failure- and future-proof
+
+Text files are very robust against file corruption. And as they are
+human-readable, you will always be able to interpret them even if
+you don't have access to the programs that created them.
+
+
+@subsubheading Manage your scores with version control
+
+Text files are applicable to be managed by version control. Go
+for it and experience infinite and selective undo/redo mechanisms
+and the full development history of your scores. Version control
+may also open up new (collaborative) workflows for you.
+
@divEnd
-@divClass{color2}
-@subheading Ease of use
+@divClass{column-center-top}
+@subheading Usability
@imageFloat{lilypond-book,png,right}
-@subsubheading Text-based input
-LilyPond takes ASCII input, which you can produce in your favorite
-text editor, quickly and comfortably. The input contains all the
-information, so there is no need to remember complex command sequences:
-simply save a file for later reference.
+@subsubheading Effective layout choices
+
+Spend less time with tweaking the output; LilyPond gets the
+formatting correct right from the start. It determines spacing by
+itself, and breaks lines and pages to provide a tight and uniform
+layout. Clashes between lyrics, notes, and chords are resolved
+and slurs and beams are sloped, automatically!
+
@subsubheading Mix music and text
Put fragments of music into texts without cutting and pasting
-pictures. Integrate music into @LaTeX{} and HTML seamlessly, or add
-music to OpenOffice.org or LibreOffice with OOoLilyPond. Plugins are
+pictures. Integrate music into @LaTeX{} or HTML seamlessly, or add
+music to OpenOffice.org/LibreOffice with OOoLilyPond. Plugins are
also available to allow LilyPond code in various blogs and wikis, making
online collaboration possible.
who are totally blind can use screen-reading software to write
LilyPond files -- an impossible task in graphical-based
score-writing programs.
+You can see a spectacular score on @ref{Examples}.
+
+@subsubheading Editor diversity
-@subsubheading Extensible design
+Several developers, themselves active LilyPond users,
+have written tools specifically aimed at making the process of editing
+LilyPond files faster and more effective; you are not tied to
+a single user interface but can use different tools for different tasks.
+You can even use a full-fledged LilyPond editor at home and use your
+mobile phone's notepad app to edit the files on the go. For some examples,
+see @ref{Easier editing}.
+@c TODO: Change this when the new pages have been written and pushed
-All settings can be changed to suit your personal typographical
-taste. If that still is not enough, there is always the built-in
-scripting language Scheme, a dialect of the powerful language
-LISP. Settings, variables and functions are all documented in the
+
+@divEnd
+
+@divClass{column-center-top}
+
+@subheading Extensible design
+
+@subsubheading Easy management of style sheets
+
+All layout settings can be changed to suit your personal typographical
+taste. So you can easily write style sheets that change every aspect of
+LilyPond scores' default appearance. As these are also written as text
+and can be stored in separate files you can simply switch between two
+stylesheets to produce scores with a completely different appearance or
+layout.
+You want to print a score on A4 paper and project it with a beamer,
+one system per page? LilyPond's layout engine will effortlessly produce
+both from the same input.
+
+@subsubheading Add your own functions
+
+If that still is not enough, there is always the built-in
+scripting language Scheme, which can access LilyPond's layout
+engine at the same level as LilyPond itself does, making it
+a @emph{very} powerful tool.
+Settings, variables and functions are all documented in the
comprehensive program reference manual.
+@subsubheading Process scores programmatically
+
+LilyPond input files can fully be edited or even generated by programs
+and scripts. This can for example be used for algorithmical composition.
+But you can also access the musical content for analysis, or manage
+input fragments in a database. There are no limitations except your
+imagination.
+
+
+@subsubheading Create new tools using LilyPond
+
+As LilyPond isn't a monolithic GUI program but a command line tool it
+can be used from within other applications too. This way it is possible
+to equip tools like e.g. web applications with LilyPond's engraving
+power. There already exist several online tools using LilyPond.
+
+@c (TBD: Add a link to the new @ref{Applications} page.
+
+
@divEnd
-@divClass{color3}
+@divClass{column-center-top}
@subheading Environment
@imageFloat{frescobaldi-lilypond-editor-small,png,right}
-@subsubheading Free software
-
-LilyPond can be downloaded free of charge! Yep - It's free. Get
-it from the download page.
-
-It's also free (as in @qq{speech}) software. It comes with source
-code, and permission to change and copy it. So, are you irritated
-by a bug, or yearning for a feature? Simply add it yourself, or
-pay someone else to do it.
@subsubheading Excellent support
LilyPond runs on all popular platforms: GNU/Linux, MacOS X, and
Windows. LilyPond comes with extensive documentation and hundreds
of example files. There is an active user community answering
-questions on the lilypond-user mailing list, while the development
-team makes sure that problems are solved quickly.
+questions on the lilypond-user mailing list, offering you friendly
+help. The response time is usually very short, and often brillant
+solutions to reported problems are developed. Thanks to the close
+interaction with the development team such solutions are regularly
+included in LilyPond itself.
+Read more in @ref{Community}.
-@subsubheading Enhanced editors
+@subsubheading Free software
+LilyPond can be downloaded free of charge! Yep - It's free. Get
+it from the download page.
-Several developers, themselves active LilyPond users, have also
-written tools specifically aimed at making the process of editing
-LilyPond files faster and more effective. For some examples, see
-@ref{Easier editing}.
+It's also free (as in @qq{speech}) software. It comes with source
+code, and permission to change and copy it. So, are you irritated
+by a bug, or yearning for a feature? Simply add it yourself, or
+pay someone else to do it.
+Read more on @ref{Freedom}.
@divEnd
@divClass{column-center-bottom}
@node Examples
@unnumberedsec Examples
+@divClass{column-center-top}
+
+@subheading Beautiful examples
+
LilyPond is a powerful and flexible tool for engraving tasks of
all kinds. Please browse our gallery of examples and be inspired!
@exampleImage{bach-schenker}
@newsEnd
+@newsItem
+@subsubheading Customized Output
+
+A short excerpt from Stockhausen's Klavierstück II to demonstrate
+Lilypond's ability to provide customised output.
+
+@exampleImage{Stockhausen_Klavierstueck2}
+@newsEnd
+
@newsItem
@subsubheading Vocal Music
@exampleImage{orchestra}
@newsEnd
+@divEnd
@divClass{column-center-bottom}
@subheading Where now?
We have an extensive essay describing computational aesthetics:
the art of creating beauty with a computer.
-If you just want a quick introduction to LilyPond, the essay might
-be too much material to read. If you would like to read it now,
-please progress to @ref{Essay}.
+This is interesting reading if you are interested in an in-depth
+discussion of our fundamental ideas. Due to its volume the
+essay is available as a "manual". If you would like to read
+it now, please progress to @ref{Essay}. However, if you just
+want a quick introduction to LilyPond, you might skip it for now.
@divEnd
@divClass{column-center-bottom}
@node Productions
@unnumberedsec Productions
+@divClass{column-center-top}
+
+@subheading Productions using LilyPond
+
+Here you can read about people who actually use LilyPond
+in their productions, be it for performances of their
+music or as published scores.
+
+@divEnd
+
@divClass{column-left-top}
@subheading Concerts
@node Reviews
@unnumberedsec Reviews
+@divClass{column-center-top}
+@subheading What do people say about LilyPond?
+
+@divEnd
+
+
@divClass{column-left-top}
@subheading Published articles
Manual is the best place to start, as many questions are answered
before they come up!
-Please read the Learning Manual before complaining about bugs!
-New users occasionally believe that LilyPond is not working
-correctly, when in fact it is working precisely as designed.
+Occasionally new users are unnecessarily confused by some aspects
+of LilyPond's behaviour. Please read this manual before doubting
+whether LilyPond is working correctly.
More in-depth information is available in @ref{Manuals}.
@c used for news about the upcoming release; see CG 10.2
@newsItem
-@subsubheading LilyPond 2.17.95 released! @emph{November 3, 2013}
-
-We are excited to announce the release of LilyPond@tie{}2.17.95 as
-beta release for the upcoming stable release@tie{}2.18. The
-developers are still busy finding solutions for some last-minute
-problems, but the release is supposed to be feature-complete, the
-documentation to be accurate, and no important issues to be
-overlooked. For upgrading the syntax of your input files to the
-latest version, see @rprogram{Updating files with convert-ly}.
-Please test this release and report back any problems, see
-@rweb{Bug reports}.
+@subsubheading LilyPond 2.19.8 released @emph{June 15, 2014}
+
+We are happy to announce the release of LilyPond 2.19.8. This
+release includes a number of enhancements, and contains some work
+in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you
+require a stable version of Lilypond, we recommend using the 2.18
+version.
+
+@newsEnd
+
+@newsItem
+@subsubheading Lilypond 2.18.2 released! @emph{March 23, 2014}
+
+We are proud to announce the release of GNU LilyPond 2.18.2.
+LilyPond is a music engraving program devoted to producing the
+highest-quality sheet music possible. It brings the aesthetics of
+traditionally engraved music to computer printouts.
+
+This version provides a number of updates to 2.18.0, including
+updated manuals. We recommend all users to upgrade to this version.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond production named BEST EDITION 2014 @emph{March 11, 2014}
+
+We are thrilled to announce that the new edition of the songs of Oskar
+Fried (1871-1941), published recently by our fellow contributors Urs Liska
+and Janek Warchoł [1], will receive the "Musikeditionspreis BEST EDITION
+2014" of the German Music Publishers' Association [2]! The ceremony will
+take place in a few days at the Frankfurt Musikmesse [3].
+
+We congratulate Janek and Urs for gaining such public recognition of
+typographical and editorial excellence of their work. We are also delighted
+to inform you that they intend to make their work available under a Free
+license as soon as the publisher expenses are covered. Please support this
+initiative by buying the printed volume through the publisher [4] or by
+pledging a contribution at the Indiegogo campaign [5]!
+
+[1] @uref{http://lilypondblog.org/category/fried-songs}@*
+[2] @uref{http://www.best-edition.de}@*
+[3] @uref{https://musik.messefrankfurt.com/frankfurt/en/besucher/events/awards/best_edition.html}@*
+[4] @uref{http://www.sound-rel.de}@*
+[5] @uref{http://igg.me/at/free-fried}
+
+@newsEnd
+
+
+@newsItem
+@subsubheading Lilypond 2.18.0 released! @emph{December 29, 2013}
+
+We are proud to announce the release of GNU LilyPond 2.18.0.
+LilyPond is a music engraving program devoted to producing the
+highest-quality sheet music possible. It brings the aesthetics of
+traditionally engraved music to computer printouts.
+
+Among the numerous improvements and changes, the following might
+be most visible:
+
+@itemize @bullet
+@item
+Many items are now positioned using their actual outline rather
+than a@tie{}rectangular bounding box. This greatly reduces
+the occurrence of unsightly large gaps.
+
+@item
+Sets and overrides can now use the syntax
+@example
+\override Voice.TextSpanner.bound-details.left.text = "rit."
+@end example
+instead of the previous
+@example
+\override Voice.TextSpanner #'(bound-details left text) = "rit."
+@end example
+
+@item
+Triplets with a given group length can now be written as
+@example
+\tuplet 3/2 4 @{ c8 c c c c c @}
+@end example
+instead of
+@example
+\times 2/3 @{ c8 c c @} \times 2/3 @{ c8 c c @}
+@end example
+@end itemize
+
+A full list of noteworthy new features is given in:
+
+@example
+@uref{http://lilypond.org/doc/v2.18/Documentation/changes/index.html}
+@end example
+
+Great thanks go to the large number of LilyPond enthusiasts whose
+financial backing enabled one core developer, David Kastrup, to
+focus exclusively on LilyPond during the entire development cycle.
+
+LilyPond 2.18 has been brought to you by
+
+@table @asis
+@item Main Developers:
+Bertrand Bordage, Trevor Daniels, Colin Hall, Phil Holmes, Ian
+Hulin, Reinhold Kainhofer, David Kastrup, Jonathan Kulp, Werner
+Lemberg, John Mandereau, Patrick McCarty, Joe Neeman, Han-Wen
+Nienhuys, Jan Nieuwenhuizen, Graham Percival, Mark Polesky, Neil
+Puttock, Mike Solomon, Carl Sorensen, Francisco Vila, Valentin
+Villenave, Janek Warchoł
+
+@item Core Contributors:
+Aleksandr Andreev, Frédéric Bron, Torsten Hämmerle, Marc Hohl,
+James Lowe, Andrew Main, Thomas Morley, David Nalesnik, Keith
+OHara, Benkő Pál, Anders Pilegaard, Julien Rioux, Johannes Rohrer,
+Adam Spiers, Heikki Tauriainen
+
+@item Documentation Writers:
+Frédéric Bron, Federico Bruni, Colin Campbell, Urs Liska, James
+Lowe, Thomas Morley, Jean-Charles Malahieude, Guy Stalnaker,
+Martin Tarenskeen, Arnold Theresius, Rodolfo Zitellini
+
+@item Bug Squad:
+Colin Campbell, Eluze, Marc Hohl, Phil Holmes, Marek Klein, Ralph
+Palmer
+
+@item Support Team:
+Colin Campbell, Eluze, Marc Hohl, Marek Klein, Kieren MacMillan,
+Urs Liska, Ralph Palmer
+
+@item Translators:
+Federico Bruni, Luca Rossetto Casel, Felipe Castro, Pavel Fric,
+Jean-Charles Malahieude, Till Paala, Yoshiki Sawada
+
+@end table
+and numerous other contributors.
@newsEnd
* don't duplicate entries from news-front.itexi
@end ignore
+@newsItem
+@subsubheading LilyPond 2.19.7 released @emph{May 25, 2014}
+
+We are happy to announce the release of LilyPond 2.19.7. This
+release includes a number of enhancements, and contains some work
+in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you
+require a stable version of Lilypond, we recommend using the 2.18
+version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.19.6 released @emph{May 11, 2014}
+
+We are happy to announce the release of LilyPond 2.19.6. This
+release includes a number of enhancements, and contains some work
+in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you
+require a stable version of Lilypond, we recommend using the 2.18
+version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.19.5 released @emph{April 20, 2014}
+
+We are happy to announce the release of LilyPond 2.19.5. This
+release includes a number of enhancements, and contains
+some work in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you require
+a stable version of Lilypond, we recommend using the 2.18 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.19.4 released @emph{April 6, 2014}
+
+We are happy to announce the release of LilyPond 2.19.4. This
+release includes a number of enhancements, and contains
+some work in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you require
+a stable version of Lilypond, we recommend using the 2.18 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.19.3 released @emph{March 2, 2014}
+
+We are happy to announce the release of LilyPond 2.19.3. This
+release includes a number of enhancements, and contains
+some work in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you require
+a stable version of Lilypond, we recommend using the 2.18 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.18.1 @emph{February 16, 2014}
+
+We have released updated manuals for LilyPond's stable version, 2.18.
+The manuals are now for 2.18.1 and have a number of updates and improvements
+over 2.18.0. There will be a further release of 2.18 in the future (2.18.2),
+and this will include the updates to the manuals as well as some minor
+enhancements to the LilyPond core functionality.
+
+To summarise the current situation: stable LilyPond application: 2.18.0;
+stable LilyPond manuals: 2.18.1; development for both: 2.19.2.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.19.2 released @emph{February 2, 2014}
+
+We are happy to announce the release of LilyPond 2.19.2. This
+release includes a number of enhancements, and contains
+some work in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you require
+a stable version of Lilypond, we recommend using the 2.18 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.19.1 released @emph{January 19, 2014}
+
+We are happy to announce the release of LilyPond 2.19.1. This
+release includes a number of enhancements, and contains
+some work in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you require
+a stable version of Lilypond, we recommend using the 2.18 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.19.0 released @emph{January 5, 2014}
+
+We are happy to announce the release of LilyPond 2.19.0. This
+release includes a number of enhancements, and contains
+some work in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you require
+a stable version of Lilypond, we recommend using the 2.18 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.97 released! @emph{December 8, 2013}
+
+We are excited to announce the release of LilyPond@tie{}2.17.97 as
+a potential final beta release for the upcoming stable release@tie{}2.18. The
+developers believe this to be feature-complete, the
+documentation to be accurate, and no important issues to be
+overlooked. For upgrading the syntax of your input files to the
+latest version, see @uref{http://www.lilypond.org/doc/v2.17/Documentation/usage/updating-files-with-convert_002dly, Updating files with convert-ly}.
+Please test this release and report back any problems, see
+@uref{http://www.lilypond.org/website/bug-reports.html, Bug reports}.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.96 released! @emph{November 24, 2013}
+
+We are excited to announce the release of LilyPond@tie{}2.17.96 as
+a further beta release for the upcoming stable release@tie{}2.18. The
+developers believe the release to be feature-complete, the
+documentation to be accurate, and no important issues to be
+overlooked. For upgrading the syntax of your input files to the
+latest version, see @uref{http://www.lilypond.org/doc/v2.17/Documentation/usage/updating-files-with-convert_002dly, Updating files with convert-ly}.
+Please test this release and report back any problems, see
+@uref{http://www.lilypond.org/website/bug-reports.html, Bug reports}.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.95 released! @emph{November 3, 2013}
+
+We are excited to announce the release of LilyPond@tie{}2.17.95 as
+beta release for the upcoming stable release@tie{}2.18. The
+developers are still busy finding solutions for some last-minute
+problems, but the release is supposed to be feature-complete, the
+documentation to be accurate, and no important issues to be
+overlooked. For upgrading the syntax of your input files to the
+latest version, see @rprogram{Updating files with convert-ly}.
+Please test this release and report back any problems, see
+@rweb{Bug reports}.
+
+@newsEnd
+
@newsItem
@subsubheading LilyPond 2.17.29 released! @emph{October 20, 2013}
#RedirectMatch ^/development /doc/development
#old# default doc dir
-RedirectMatch ^/doc/*$ /doc/v2.16
+RedirectMatch ^/doc/*$ /doc/v2.18
# make attempt at `latest' symlink avoid ^v catch-all doc fix rule below
-RedirectMatch ^/doc//*latest/*(.*)$ /doc/v2.17/$1
-RedirectMatch ^/doc//*development/*(.*)$ /doc/v2.17/$1
-RedirectMatch ^/doc//*stable/*(.*)$ /doc/v2.16/$1
-RedirectMatch ^/doc//*([^v].*)$ /doc/v2.16/$1
-RedirectMatch ^(/Documentation.*)$ /doc/v2.16$1
+RedirectMatch ^/doc//*latest/*(.*)$ /doc/v2.19/$1
+RedirectMatch ^/doc//*development/*(.*)$ /doc/v2.19/$1
+RedirectMatch ^/doc//*stable/*(.*)$ /doc/v2.18/$1
+RedirectMatch ^/doc//*([^v].*)$ /doc/v2.18/$1
+RedirectMatch ^(/Documentation.*)$ /doc/v2.18$1
RedirectMatch ^/index$ /
# fix root calculation: no double slashes
###########################################
-## Rewrite all non-existing files at toplevel to the /web/ dir, so our
+## Rewrite all non-existing files at toplevel to the /website/ dir, so our
## internal structure for rsync doesn't have to be changed.
## This works for the current/old site as well as the new one.
SetEnvIf REQUEST_URI .* WEB=/website
-# Rewrite empty to /web
+# Rewrite empty to /website
RewriteCond %{REQUEST_URI} ^/*$
RewriteRule ^(/*)$ %{ENV:WEB}/ [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
# ...and does not match an existing directory
RewriteCond %{REQUEST_FILENAME} !-d
-# ...prefix with web
+# ...prefix with website
RewriteRule ^(.+)$ %{ENV:WEB}/$1 [QSA,L]
# Request without trailing slash
RewriteCond %{REQUEST_URI} !.*/$
-# ...that would access a directory in /web
+# ...that would access a directory in /website
RewriteCond %{DOCUMENT_ROOT}%{ENV:WEB}%{REQUEST_URI} -d
# ...and does not start with /web
RewriteCond %{REQUEST_URI} !^%{ENV:WEB}
# ...add trailing slash for [menu] and to avoid /web/ in browser url
RewriteRule ^(.+)$ http://%{HTTP_HOST}/$1/ [R,QSA,L]
-# Request that does not start with /web
+# Request that does not start with /website
RewriteCond %{REQUEST_URI} !^/website
RewriteCond %{REQUEST_URI} !^%{ENV:WEB}
# ...and does not start with /doc/
# ..prefix with /web
RewriteRule ^(.+)$ %{ENV:WEB}/$1 [QSA,L]
+## Redirect the old web/ to the homepage
+RedirectMatch 301 ^/web/.* /
+
###########################################
# latin1 version copied to web and doc/2.x
Disallow: /doc/v2.13/
Disallow: /doc/v2.14/
Disallow: /doc/v2.15/
+Disallow: /doc/v2.16/
+Disallow: /doc/v2.17/
+
+Disallow: /web/
href="http://www.lilypondblog.org">here</a>! Anyone can
follow and leave comments on the blog. To contribute,
contact <a
- href="mailto:janek.lilypond@gmail.com">Janek Warchoł</a>.
+ href="mailto:ul@openlilylib.org">Urs Liska</a>.
</tweet>
<tweet>
- Adam Spiers has build a web site which uses LilyPond to dynamically
+ Adam Spiers has built a web site which uses LilyPond to dynamically
generate images of chords and scales called <a
href="http://scalematcher.adamspiers.org/">Scale matcher</a>.
</tweet>
Turkish Ebook <a href="http://acim.name.tr/lilypond/my_EBook_Promotion/index.php">
"GNU/LilyPond, Özgür Bir Nota Yazma Programı"</a>.
</tweet>
- <tweet>
- Aurélien Bello, has re-orchestrated a 100-minute version of "Der
- Ring des Nibelungen" for children, being performed in Berlin on the
- 5th and 6th of April 2014. Click
- <a href="http://www.rsb-online.de/content/konzerte/wagnerzyklus-10-13/wagner-fuer-kinder/index_ger.html">
- here </a> for more details.
- </tweet>
+ <tweet>
+ Aurélien Bello's 100-minute version of "Der Ring des Nibelungen"
+ for children will be broadcast by Deutschlandradio Kultur on 21st
+ of June 2014. Click
+ <a href="http://www.deutschlandradiokultur.de/der-ring-in-111-minuten.1091.de.html?dram:article_id=282592">
+ here </a> for more details. Also available as live stream.
+ </tweet>
</tweets>
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.19 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Google 搜索">
<input type="text" name="brute_query" onfocus="this.value=''" value="搜索">
@c `Web' was imported 2009-08-05 with git commit b938d71...
@c @macro copyrightDeclare
-@c Copyright @copyright{} 2009--2012 by the authors.
+@c Copyright @copyright{} 2009--2014 by the authors.
@c @end macro
@c Translators: Ben Luo, Anthony Fok
@end ignore
@copying
-Copyright @copyright{} 2009--2012 by the authors.
+Copyright @copyright{} 2009--2014 by the authors.
@c next line is necessary for broken pre-4.13 texinfo's
@c install-info, so leave it there until we officially
-Copyright (c) 1996--2013, The LilyPond authors (lilypond.org)
+Copyright (c) 1996--2014, The LilyPond authors (lilypond.org)
with Reserved Font Name "Emmentaler" and "Feta".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
-MINOR_VERSION=18
-PATCH_LEVEL=2
+MINOR_VERSION=19
+PATCH_LEVEL=9
MY_PATCH_LEVEL=
-VERSION_STABLE=2.18.0
-VERSION_DEVEL=2.19.2
+VERSION_STABLE=2.18.2
+VERSION_DEVEL=2.19.8
;;;; lilypond-mode.el -- Major mode for editing GNU LilyPond music scores
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1999--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1999--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Changed 2001--2003 Heikki Junes <heikki.junes@hut.fi>
;;;; * Add PS-compilation, PS-viewing and MIDI-play (29th Aug 2001)
;;;; * Keyboard shortcuts (12th Sep 2001)
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys, <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys, <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
{
string str;
if (shortname_char_)
- str += "-" + shortname_char_;
+ str += string ("-") + shortname_char_;
if (shortname_char_ && longname_str0_)
str += ", ";
if (longname_str0_)
- str += string ("`--") + longname_str0_ + "'";
+ str += string ("--") + longname_str0_;
return str;
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1993--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1993--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#ifndef POLY_H
#define POLY_H
+#include <sys/types.h>
#include "std-vector.hh"
#include "arithmetic-operator.hh"
#include "real.hh"
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2006--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2006--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#endif
#endif
+#include "config.hh" /* needed at least for HAVE_STL_DATA_METHOD */
#include <algorithm> /* find, reverse, sort */
#include <functional> /* unary_function */
#include <cassert>
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1993--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1993--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2006--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
String_convert::bin2hex (Byte bin_char)
{
string str;
- str += to_string ((char) nibble2hex_byte ((Byte) (bin_char >> 4)));
- str += to_string ((char) nibble2hex_byte (bin_char++));
+ str += ::to_string ((char) nibble2hex_byte ((Byte) (bin_char >> 4)));
+ str += ::to_string ((char) nibble2hex_byte (bin_char++));
return str;
}
Byte const *byte = (Byte const *)bin_string.data ();
for (ssize i = 0; i < bin_string.length (); i++)
{
- str += to_string ((char)nibble2hex_byte ((Byte) (*byte >> 4)));
- str += to_string ((char)nibble2hex_byte (*byte++));
+ str += ::to_string ((char)nibble2hex_byte ((Byte) (*byte >> 4)));
+ str += ::to_string ((char)nibble2hex_byte (*byte++));
}
return str;
}
int low_i = hex2nibble (*byte++);
if (high_i < 0 || low_i < 0)
return 1; // invalid char
- bin_string_r += to_string ((char) (high_i << 4 | low_i), 1);
+ bin_string_r += ::to_string ((char) (high_i << 4 | low_i), 1);
i += 2;
}
return 0;
fill_char = '0';
// ugh
- string dec_string = to_string (i);
+ string dec_string = ::to_string (i);
// ugh
- return to_string (fill_char, ssize_t (length_i - dec_string.length ())) + dec_string;
+ return ::to_string (fill_char, ssize_t (length_i - dec_string.length ())) + dec_string;
}
// stupido. Should use int_string ()
#if 1 // both go...
while (u)
{
- str = to_string ((char) ((u % 16)["0123456789abcdef"])) + str;
+ str = ::to_string ((char) ((u % 16)["0123456789abcdef"])) + str;
u /= 16;
}
#else
str += int_string (u, "%x"); // hmm. %lx vs. %x -> portability?
#endif
- str = to_string (fill_char, ssize_t (length - str.length ())) + str;
+ str = ::to_string (fill_char, ssize_t (length - str.length ())) + str;
while ((str.length () > length) && (str[ 0 ] == 'f'))
str = str.substr (2);
string
String_convert::precision_string (double x, int n)
{
- string format = "%." + to_string (max (0, n - 1)) + "e";
+ string format = "%." + ::to_string (max (0, n - 1)) + "e";
string str = double_string (abs (x), format.c_str ());
int exp = dec2int (str.substr (str.length () - 3));
str = str.substr (0, 1) + str.substr (2);
ssize dot = 1 + exp;
if (dot <= 0)
- str = "0." + to_string ('0', -dot) + str;
+ str = "0." + ::to_string ('0', -dot) + str;
else if (dot >= str.length ())
- str += to_string ('0', dot - str.length ());
+ str += ::to_string ('0', dot - str.length ());
else if ((dot > 0) && (dot < str.length ()))
str = str.substr (0, dot) + "." + str.substr (dot);
else
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-\version "2.17.6"
+\version "2.19.2"
\header {
texidoc = "The second and third notes should not get accidentals,
mus = \relative c' {
f1~
- f2~f4 % ~ f8
+ 2~4 % ~ f8
fis8 gis8 ~
\break
gis1
\override Accidental.hide-tied-accidental-after-break = ##t
f1~
- f2~f4 % ~ f8
+ 2~4 % ~ f8
fis8 gis8 ~
\break
gis1
-\version "2.16.0"
+\version "2.19.0"
\header {
\relative c' {
\time 2/4
- \set Score.beamExceptions = #'(
- ( end .
- (
- ( (1 . 32) . (4 4 4 4) )
- )
- )
- )
+ \set Score.beamExceptions =
+ \beamExceptions \repeat unfold 4 { 32[ 32 32 32] }
\repeat unfold 16 c32
\time 3/4
- \set Score.beamExceptions = #'(
- ( end .
- (
- ( (1 . 32) . (4 4 4 4 4 4) )
- )
- )
- )
+ \set Score.beamExceptions =
+ \beamExceptions \repeat unfold 6 { 32[ 32 32 32] }
\repeat unfold 24 c32
c8 c32 c32 c32 c32 c16 c16 c32 c32 c32 c32 c16 c32 c32 c32 c32 c32 c32
\time 4/4
- \set Score.beamExceptions = #'(
- ( end .
- (
- ( (1 . 32) . (4 4 4 4 4 4 4 4) )
- )
- )
- )
+ \set Score.beamExceptions =
+ \beamExceptions \repeat unfold 8 { 32[ 32 32 32] }
\repeat unfold 32 c32
\time 6/8
- \set Score.beamExceptions = #'(
- ( end .
- (
- ( (1 . 32) . (4 4 4 4 4 4) )
- )
- )
- )
+ \set Score.beamExceptions =
+ \beamExceptions \repeat unfold 6 { 32[ 32 32 32] }
\repeat unfold 24 c32
}
\version "2.17.6"
-forcedLastBreak = { \break }
+forcedLastBreak = {} %% { \break } if needed to match original breaks
%% We want this to perfectly match the Bärenreiter spacing.
%% If we're not using 6 systems, there's definitely a problem.
ragged-bottom = ##t
indent = 7. \mm
line-width =183.5 \mm
- obsolete-between-system-space = 25\mm
- system-system-spacing #'basic-distance = #(/ obsolete-between-system-space staff-space)
+ system-system-spacing #'basic-distance = 14.22 % 25mm, in staff-spaces
system-system-spacing #'padding = #0
- score-system-spacing #'basic-distance = #(/ obsolete-between-system-space staff-space)
+ score-system-spacing #'basic-distance = #0
score-system-spacing #'padding = #0
system-count = 6
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc = "When a beam goes over a rest, beamlets should be as necessary
\relative c' {
c8[ r16 c32 c32]
c32[ r16 c32 c8]
- c32[ r16 c64 c64 ~ c16.. c64]
+ c32[ r16 c64 c64 ~ 16.. c64]
c32[ c32 r16 c8]
c16[ r32 c32 r16 c16]
c16[ r16 c32 r32 c16]
--- /dev/null
+\version "2.18.0"
+
+\header {
+ texidoc = "Chord change detection in repeat alternatives
+happens in relation to the chord active at the beginning of the
+first alternative.
+"
+}
+
+\score {
+ <<
+ \new ChordNames {
+ \set chordChanges = ##t
+ \chordmode { \repeat volta 3 { g1 | }
+ \alternative { {c |} {c4 g c c |} {g2 c |} } } }
+ \new Voice {
+ \relative c'' {
+ \repeat volta 3 { g4 f e d | }
+ \alternative { {c r r r |} {c g c r |} {b g c2 |} } }
+ \bar "|." }
+ >>
+}
--- /dev/null
+\version "2.17.16"
+
+\header {
+ texidoc =
+"The column of dots on a chord is limited to the height
+of the chord plus @code{chord-dots-limit} staff-positions."
+}
+
+\layout{ ragged-right = ##t }
+
+\new Staff \transpose c c' {
+ \override Staff.DotColumn.chord-dots-limit = #1
+ <<
+ { <g a b c' d' e'>4. r8 <c' d' e' f' g' a' b'>4. r8 } \\
+ { f4.. r16 <c d e f g a b>4.. r16}
+ >>
+}
-\version "2.17.6"
+\version "2.19.2"
\header{
ragged-right = ##t
}
+clefs = {
+ \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 "varC" c'1^"varC" \bar "||"
+ \clef "treble" c'1^"treble" \bar "||"
+ \clef "altovarC" c'1^"altovarC" \bar "||"
+ \clef "tenor" c'1^"tenor" \bar "||"
+ \clef "tenorvarC" c'1^"tenorvarC" \bar "||"
+ \clef "tenorG" c'^"tenorG" \bar "||"
+ \clef "GG" c'1^"GG" \bar "||"
+ \clef "baritone" c'1^"baritone" \bar "||"
+ \clef "varbaritone" c'1^"varbaritone" \bar "||"
+ \clef "baritonevarC" c'1^"baritonevarC" \bar "||"
+ \clef "baritonevarF" c'1^"baritonevarF" \bar "||"
+ \clef "bass" c'1^"bass" \bar "||"
+ \clef "subbass" c'1^"subbass" \bar "||"
+ \clef "percussion" c'1^"percussion" \bar "||"
+ \clef "varpercussion" c'1^"varpercussion" \bar "||"
+}
{
+ \override Score.RehearsalMark.self-alignment-X = #LEFT
\textLengthOn
- \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 "bass"c'1^"bass" \bar "||"
- \clef "subbass"c'1^"subbass" \bar "||"
- \override Staff.Clef.full-size-change = ##t
- \clef "treble" c'1^"full-size-change = #t" \bar "|."
+ \mark "clefs:"
+ \clefs
+ \override Staff.Clef.full-size-change = ##t \break
+ \mark "with full-size-change = #t:"
+ \clefs
+ \bar "|."
}
-\version "2.16.0"
+\version "2.19.0"
\header{
texidoc="
If the @code{Note_heads_engraver} is replaced by the @code{Completion_heads_engraver},
-notes with a duration factor still keep their requested appearance.
-
-"
+long notes, longer than @code{measureLength}, are split into un-scaled notes,
+even if the original note used a scale-factor.
+@code{completionFactor} controls this behavior."
}
\layout { ragged-right= ##t }
c\breve |
c1*2 |
c2*4 |
- c8*20
+ c8*20 r2 \break
+ \tuplet 3/2 { d1 d d }
+ % \breve*2/3 is longer than a measure, but we want a tuplet, not repeats.
+ \set completionFactor = ##f
+ \tuplet 3/2 { e\breve e e }
+ \set completionFactor = #2/3
+ \tuplet 3/2 { e\breve e e }
}
}
-\version "2.16.0"
+\version "2.19.2"
\paper{ ragged-right=##t }
\remove "Note_heads_engraver"
\consists "Completion_heads_engraver"
} {
- \relative c'' { r2 d1 ~ d1 d2 }
+ \relative c'' { r2 d1 ~ 1 d2 }
}
-\version "2.16.0"
+\version "2.19.0"
\header{
texidoc="
If the @code{Rest_engraver} is replaced by the @code{Completion_rest_engraver},
-rests with a duration factor still keep their requested appearance.
-
-"
+long rests, longer than @code{measureLength}, are split into
+un-scaled rests, even if the original duration used a scale-factor.
+@code{completionFactor} controls this behavior."
}
\layout { ragged-right= ##t }
r\breve |
r1*2 |
r2*4 |
- r8*20
+ r8*20 r2 \break
+ \bar "||" \time 2/4
+ r\breve.*2/3
+ \set completionFactor = #1/2
+ r\breve.*2/3^"explicity request r1*1/2 rests"
}
\test ##[ c4 ~ #] % TieEvent
\test ##[ c\noBeam #] % BeamForbidEvent
\test ##[ c\1 #] % StringNumberEvent
-\test ##[ { c: c:1 } #] % TremoloEvent
+\test ##[ { c:8 c:1 } #] % TremoloEvent
\test ##[ { c-^ c^^ c_^ } #] % ArticulationEvent
\test ##[ { c-+ c^+ c_+ } #]
\test ##[ { c-- c^- c_- } #]
\test ##[ \tuplet 3/2 { c4 d e \tuplet 5/2 { f4 e d2 d4 } c4 } #]
\test ##[ \tuplet 3/2 2 { c4 d e \tuplet 5/2 2 { f4 e d2 d4 } c4 } #]
+%% pure rhythm
+\test ##[ { 4 4 8 \tuplet 3/2 { 8[ 16] } 16 } #]
+
%% \relative and \tranpose
\test #"NOT A BUG" ##[ \relative c' { c b } #] % RelativeOctaveMusic
\test #"NOT A BUG" ##[ \transpose c d { c d } #] % TransposedMusic
+++ /dev/null
-\version "2.17.10"
-
-\header {
- texidoc = "Dynamics are correctly nested over/under cross staff stems.
-They are, however, not yet factored into horizontal spacing - the fff
-collides with other grobs.
-"
-}
-
-\new GrandStaff <<
- \new Staff = "PnRH" {
- \relative g {
- \stemDown gis8 \p [ \change Staff = "PnLH" \stemUp a, \fff ]
- a8 \p [ \change Staff = "PnRH" \stemDown gis'8 \fff ]
- \change Staff = "PnRH" r4
- }
- }
- \new Staff = "PnLH" { \clef "F" { s2 r4 } }
->>
-\version "2.17.15"
+\version "2.19.2"
\header
{
"
}
\relative c' {
- \slashedGrace c16~ c1
+ \slashedGrace c16~ 1
}
ragged-right = ##T
}
-\version "2.16.0"
+\version "2.19.2"
<<
\new Voice = melody \relative c'{
r2 r4 r8 e8 |\break
e16 e8.
}
- \lyricsto "melody" \lyrics {
+ \new Lyrics \lyricsto "melody" {
\set stanza = "Verse 2."
_ bla bla }
>>
--- /dev/null
+\version "2.19.0"
+\header {
+ texidoc="
+Header blocks may appear before and after the actual music in a score.
+"
+}
+
+\markup \vspace #3
+\markup { \bold Note: expect piece and opus. }
+\markup \vspace #3
+
+\score {
+ \header {
+ piece = "Piece correct (set in score)"
+ opus = "Opus incorrect (to be superseded at score level)"
+ }
+ \new Staff { c'1 }
+ \header {
+ % This should NOT overwrite the piece from above!
+ opus = "Opus correct (superseded at score level)"
+ }
+}
}
-\version "2.17.6"
+\version "2.19.7"
{
\override Staff.KeySignature.padding-pairs
= #'((("accidentals.flat" . "accidentals.sharp.slashslash.stemstemstem") . 0.5))
- \set Staff.keySignature = #`((4 . ,FLAT) (6 . ,THREE-Q-SHARP) (2 . ,SEMI-FLAT))
+ \set Staff.keyAlterations = #`((4 . ,FLAT) (6 . ,THREE-Q-SHARP) (2 . ,SEMI-FLAT))
e2
}
-\version "2.16.0"
+\version "2.19.7"
\header {
texidoc = "When a custom key signature has entries which are
indefinitely or until a new key signature is set.
Here, only the fis' shows an accidental, since it is outside the
-octave defined in @code{keySignature}.
+octave defined in @code{keyAlterations}.
"
}
\relative c' {
- \set Staff.keySignature = #`(((0 . 3) . ,SHARP)
+ \set Staff.keyAlterations = #`(((0 . 3) . ,SHARP)
((0 . 5) . ,FLAT)
((0 . 6) . ,FLAT))
fis fis as bes
-\version "2.16.0"
+\version "2.19.7"
-\header { texidoc = "By setting @code{Staff.keySignature} directly,
+\header { texidoc = "By setting @code{Staff.keyAlterations} directly,
key signatures can be set invidually per pitch.
"
}
\relative c'
\new Staff {
- \set Staff.keySignature = #`(((0 . 3) . ,FLAT) ((1 . 2) . ,SHARP))
+ \set Staff.keyAlterations = #`(((0 . 3) . ,FLAT) ((1 . 2) . ,SHARP))
f8 a c e
- \set Staff.keySignature = #`(((0 . 4) . ,DOUBLE-SHARP) ((1 . 2) . ,FLAT))
+ \set Staff.keyAlterations = #`(((0 . 4) . ,DOUBLE-SHARP) ((1 . 2) . ,FLAT))
e a, g a
}
-\version "2.17.15"
+\version "2.19.7"
\header{
texidoc="
Key signatures may appear on key changes, even without a barline.
\break
\key bes \major % \major
c2 \clef alto c2 \key d \major \clef treble c2
- \set Staff.keySignature = #`((4 . ,FLAT) (6 . ,THREE-Q-SHARP) (2 . ,SEMI-FLAT))
+ \set Staff.keyAlterations = #`((4 . ,FLAT) (6 . ,THREE-Q-SHARP) (2 . ,SEMI-FLAT))
e2
}
-\version "2.17.10"
+\version "2.19.0"
\header {
composer = "ARTHUR GRAY"
theScore = \score{
\context PianoStaff <<
\new Staff = "treble" <<
- \set beamExceptions = #'((end . (((1 . 8) . (2 2 2 2))
- ((1 . 32) . (4 4 4 4 4 4 4 4)))))
+ \set beamExceptions =
+ \beamExceptions { 8[ 8] 8[ 8] 8[ 8] 8[ 8] |
+ \repeat unfold 8 { 32[ 32 32 32] } }
\treble
\trebleTwo
>>
-\version "2.16.0"
+\version "2.19.2"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (ly:translate-cpp-warning-scheme "cannot find Voice `%s'") "not-existing-notes")
c1
}
% This should not give a warning (empty lyrics, existing voice):
- \new Lyrics \lyricsto "notes" \lyricmode { }
+ \new Lyrics \lyricsto "notes" { }
% This should give a warning (non-existing voice):
- \new Lyrics \lyricsto "not-existing-notes" \lyricmode { Test }
+ \new Lyrics \lyricsto "not-existing-notes" { Test }
% This should NOT give a warning (non-existing voice, but also no lyrics):
- \new Lyrics \lyricsto "not-existing-notes" \lyricmode { }
+ \new Lyrics \lyricsto "not-existing-notes" { }
>>
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc = "With the @code{\\lyricsto} mechanism, individual lyric
lines can be associated with one melody line. Each lyric line
\autoBeamOff
c2( d4) e8[ c b c] f4
}
- \lyricsto "bla" \new Lyrics { bla ab blob blob }
- \lyricsto "bla" \new Lyrics {
+ \new Lyrics \lyricsto "bla" { bla ab blob blob }
+ \new Lyrics \lyricsto "bla" {
bla
\set ignoreMelismata = ##t
blob
}
- \lyricsto "bla" \new Lyrics {
+ \new Lyrics \lyricsto "bla" {
nes ted lyrics voice with more words than no tes
}
>>
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc ="Polyphonic rhythms and rests do not disturb
bes'4 bes'4
bes'4 bes'4
}
- \lyricsto "one" \context Lyrics = sop {
+ \context Lyrics = sop \lyricsto "one" {
Do mi nus ex
}
\new Voice = "two" {
\voiceTwo
ees'8 r8 r8 r8 ees' r8 r8 r8
}
- \lyricsto "two" \new Lyrics {
+ \new Lyrics \lyricsto "two" {
Do na
}
>>
-\version "2.16.0"
+\version "2.19.2"
\header
{
a) a2( b) \break
a2
}
- \lyricsto A \context Lyrics \lyricmode { a __ a __ ha }
+ \context Lyrics \lyricsto A { a __ a __ ha }
>>
-\version "2.16.0"
+\version "2.19.2"
\header {
d |
}
}
-\new Lyrics \lyricsto "upper" \lyricmode { Ah __ }
+\new Lyrics \lyricsto "upper" { Ah __ }
>>
}
-\version "2.16.0"
+\version "2.19.2"
\layout {
ragged-right = ##t
\relative c'' {
\time 3/4
- d4~ d4 r4
+ d4~ 4 r4
\grace es8
d4
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc = "
d16[ e f g]
}
- \lyricsto "bla" \context Lyrics \lyricmode {
+ \context Lyrics \lyricsto "bla" {
alllll __ tijd
izzz
}
}
-\version "2.16.0"
+\version "2.19.2"
\paper {
ragged-right = ##t
}
\new Voice = "myVoice" {
\afterGrace c''2 { e''32( } c''2)
}}
- \new Lyrics \lyricsto "myVoice" \lyricmode { foo -- bar }
+ \new Lyrics \lyricsto "myVoice" { foo -- bar }
>>
-\version "2.16.0"
+\version "2.19.2"
\header
{
texidoc = "Melismata are triggered by manual beams. Notes in a
\set Staff.autoBeaming = ##f
g4 d8[ b8 d8 g8] g4
}
- \lyricsto "" \new Lyrics \lyricmode { bla blaa -- bla }
+ \new Lyrics \lyricsto "" { bla blaa -- bla }
>>
--- /dev/null
+\version "2.19.8"
+
+\header {
+ texidoc = "Stem lengths, beam spacing/thickness, and horizontal
+spacing should be scaled along with notation size when using the
+@code{\magnifyMusic} command."
+}
+
+\layout { ragged-right = ##t }
+
+\relative <<
+ { \repeat unfold 7 { g'32[ a b c] } }
+ {
+ \magnifyMusic 0.50 { s8_"50%" }
+ \magnifyMusic 0.63 { s }
+ \magnifyMusic 0.80 { s }
+ \magnifyMusic 1.00 { s_"100%" }
+ \magnifyMusic 1.26 { s }
+ \magnifyMusic 1.59 { s }
+ \magnifyMusic 2.00 { s_"200%" }
+ }
+>>
--- /dev/null
+\version "2.18.0"
+
+\header {
+ texidoc = "@code{make-relative} has to copy its argument expressions
+in case the generated music expression is getting copied and modified.
+
+The code here defines a @code{\\reltranspose} function working inside
+of @code{\\relative} and uses it. Both staves should appear
+identical."
+}
+
+\layout {
+ ragged-right = ##t
+}
+
+reltranspose =
+#(define-music-function (parser location from to music)
+ (ly:pitch? ly:pitch? ly:music?)
+ (make-relative (music) music
+ #{ \transpose #from #to $music #}))
+
+mus =
+\reltranspose c g {
+ \partial 4. c8 e g |
+ c2 r8 c, e g c1 | \bar "|."
+}
+
+<<
+ \new Staff \relative \mus
+ \new Staff \relative \mus
+>>
--- /dev/null
+\version "2.19.0"
+
+\header {
+ texidoc = "@code{make-relative} can make relativization on music
+function calls behave as one would expect from looking at the
+function's arguments rather than at the actually resulting
+expressions. This regtest defines an example function
+@code{\\withOctave} which works equally well inside and outside of
+@code{\\relative}."
+}
+
+withOctave =
+#(define-music-function (parser location music)
+ (ly:music?)
+ (make-relative
+ (music) music
+ #{ \context Bottom << $music \transpose c c' $music >> #}))
+
+mus = {
+ \partial 4. c'8 e g |
+ c2 e,4 g |
+ c,8 c' b a <g d'> <f c'> <e b'> <d a'> |
+ <c g'>1 | \bar "|."
+}
+
+<<
+ \relative \new Staff { <>^"original" \mus }
+ \relative \new Staff { <>^\markup \typewriter "\\relative \\withOctave"
+ \withOctave \mus }
+ \new Staff { <>^\markup \typewriter "\\withOctave \\relative"
+ \withOctave \relative \mus }
+>>
-\version "2.17.11"
+\version "2.19.2"
\header {
texidoc = "@code{make-relative} is a Scheme utility macro mainly
ph =
#(define-music-function (parser location p1 p2 p3 p4 p5)
(ly:pitch? ly:pitch? ly:pitch? ly:pitch? ly:pitch?)
- (make-relative (p1 p2 p3 p4 p5) p1
+ (make-relative (p1 p2 p3 p4 p5) (make-event-chord (list p1 p2 p3 p4 p5))
#{
\repeat unfold 2 { $p1 2 } |
\repeat unfold 2 { r16 $p2 8. ~ $p2 4 } |
\ph d a d' fis' c''
\oneVoice R1*21 \voiceTwo | \skip 1*21 | R1*21 |
\ph c, c g bes e'
- c,2~ c, | r16 c8. ~ c4 ~ c2
+ c,2~ 2 | r16 c8. ~ 4 ~ 2
| r8 f16 a c' f' c' a c' a f a f d f d |
- c,2~ c, | r16 b,8. ~ b,4 ~ b,2
+ c,2~ 2 | r16 b,8. ~ 4 ~ 2
| r8 g'16 b' d'' f'' d'' b' d'' b' g' b' d' f' e' d' |
c,1\fermata | c1 | <e' g' c''>1\fermata \bar "|." |
}
\ph d, a' d fis c'
\oneVoice R1*21 \voiceTwo | \skip 1*21 | R1*21 |
\ph c, c' g' bes e
- c2~ c | r16 c'8. ~ c4 ~ c2
+ c2~ 2 | r16 c'8. ~ 4 ~ 2
| r8 f16 a c f c' a c a f a f d f d |
- c,,2~ c | r16 b'8. ~ b4 ~ b2
+ c,,2~ 2 | r16 b'8. ~ 4 ~ 2
| r8 g'16 b d f d b d b g b d f e d |
c,,1\fermata | c'1 | <e' g c>1\fermata \bar "|." |
}
--- /dev/null
+\header {
+ texidoc = "Grace notes shorten previous notes only if they'd overlap
+them. The A should be a full quarter note, but the C should be shortened
+to 1/4 - 9/40 * 1/8 = 71/320 (rounded down to 340/384 in MIDI)."
+}
+\version "2.18.0"
+\score {
+ \relative c' {
+ a4 r
+ \grace b8 c8... r64
+ \grace d8 e4
+ }
+ \midi { }
+}
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc = "Lyrics in MIDI are aligned to ties and beams:
<<\relative c'' \new Voice = A {
\autoBeamOff
c8[ c] c2.
- c1~c4 c2.
+ c1~4 c2.
c4 ( d e) d
c1
}
- \lyricsto "A" \lyrics { bla bla | bla bla | bla bla | bla }
+ \new Lyrics \lyricsto "A" { bla bla | bla bla | bla bla | bla }
>>
\layout {}
\midi {}
}
-\version "2.17.6"
+\version "2.19.2"
manuscriptBreak = { \break }
d4 f8 a16[ g fis g] f[ d] |
g4. r8 gis gis |
a4 a16.[ b32] c4 fis,8 |
- g4.~ g8-\fermata g8 g |
+ g4.~ 8-\fermata g8 g |
as4 as8 g4 g8 |
fis4 fis8 r8 g g |
a!4 a8 g4 g8 |
\new Staff <<
\context Staff \accidentalStyle modern
\melody >>
- \lyricsto "singer" \new Lyrics \firstVerse
- \lyricsto "singer" \new Lyrics \secondVerse
+ \new Lyrics \lyricsto "singer" \firstVerse
+ \new Lyrics \lyricsto "singer" \secondVerse
\new PianoStaff <<
\set PianoStaff.instrumentName = \markup {
\bold
-\version "2.17.11"
+\version "2.19.2"
\include "mozart-hrn3-defs.ily"
allegro = \relative c' {
d8.[ c16 d8. e16]
c4 r r2
R1*3
- c,2 ~ c8[ e g c]
+ c,2 ~ 8[ e g c]
c[ b ] b4 r2
c,8[ ( e) g c] e[( g) e c]
c[( b)] b4 r2
g'[( d) ] d4 r4 d
d8[ ( c)] c4.( d16[ e] d8[ c)]
c8[(\trill b)] b4 r2 |
- d2( ~ d8[ e16 d] c8[ b)] |
+ d2( ~ 8[ e16 d] c8[ b)] |
b[( a)] a4 r8 a[ a a]
a4( cis e g)
\appoggiatura g16
a[( \< b c cis\!\> ] d4 c\!)
ais8[( b)] r8 b\cresc b[( c)] r c
cis[ ( d)] r4 r2
- g,1\!\f ~ g2 ~ g8[ a16 b] c[( d) e c]
+ g,1\!\f ~ g2 ~ 8[ a16 b] c[( d) e c]
%% 64
f4-. d-. b-. g-.
R1
R1*15
\mark "D"
bes2\mf d4 f
- g,2~ g8[ g' es c]|
+ g,2~ 8[ g' es c]|
bes4( a4.) c8[( d es)]
cis4( d) r8 bes[ (c d)]
es2 ( d4) r
c8[( g' es c)] bes4( c)
c4.( cis8 d4) r
R1*2
- es1~es1|
+ es1~1|
e!
d
c
c4 r r2
\mark "F"
R1*3
- c,2~ c8[ e g c]
+ c,2~ 8[ e g c]
c8[( b)] b4 r2
c,8[ e g c ] e[ ( g) e c]
c[( b)] b4 r2
c2 (bes a) a8[(b c cis)]
- d2( ~ d8[ e16 d] \appoggiatura d16
+ d2( ~ 8[ e16 d] \appoggiatura d16
c8[ b16 c)]
\appoggiatura c16
b8[( a16 g)] g4 r2 |
\mark "G"
d[( c) g'( e)] d[( c) a'( f)]
e[( d)] d4 r d8[ d]
- d4(~ d16[ e d e)] g8[( f) e d] |
+ d4(~ 16[ e d e)] g8[( f) e d] |
c4 r r2
R1
c1 ~
- c |
+ 1 |
c8[-. c-.] r c-. cis[( d)] r d-.\cresc |
dis[( e)] r e-. e[( f)] r f-. |
g4-.\f e-. c-. bes-. |
g-.\ff e-. c-. r |
- a'2 ~ a8[_\markup { \bold \italic "sempre " \dynamic "f" } b16 c] d[( e d e)]
+ a'2 ~ 8[_\markup { \bold \italic "sempre " \dynamic "f" } b16 c] d[( e d e)]
f4. ( d8) f8[ ( d) f d]
c[ (e] g2) \appoggiatura f16
-\version "2.17.6"
+\version "2.19.2"
\include "mozart-hrn3-defs.ily"
romanze = \relative c' {
f'4.(\p d8) b4 r8 g
g'4.( e8) c4 r8 cis |
% 39
- d4(~ d16[ e d e)] f8[ ( d) f( d)]
+ d4(~ 16[ e d e)] f8[ ( d) f( d)]
c2( b4) r
R1*4
e4. ( g8) c,4 ( cis)
\revert DynamicLineSpanner.staff-padding
R1*3
r8 c[\p c c] c2~
- c8[ c' c c] c2~
- c8[ \< e( g f] e[ d\!\> c bes]
+ 8[ c' c c] c2~
+ 8[ \< e( g f] e[ d\!\> c bes]
\mark "D"
a4\!) r r2
R1*3
-\version "2.16.0"
+\version "2.19.2"
\include "mozart-hrn3-defs.ily"
e4 r8 r4 r8
g4. e4 c8
g2.~
- g8[ a b] c[ d e ]
+ 8[ a b] c[ d e ]
e4.( d8) r r
R2.*4
e2.~ |
- e8[ d c] c[ b a]
+ 8[ d c] c[ b a]
d2.~
- d8[ c b] b[ a g]
+ 8[ c b] b[ a g]
g'4( e8) b4( cis8)
\mark "B"
d4 r8 r4 r8
r8 g[\f g] g[( b) b-.]
b[( d) d-.] d[( g) g-.]
g2.~
- g8[ \> a g] f[ e d]
+ 8[ \> a g] f[ e d]
<<
\rondotheme
r4 r8 r4 c8
\mark "D"
c4 f8 c4 a8
- a4.~a4 a8
+ a4.~4 a8
bes4 c8 d4 bes8
- g4. ~ g8 r r
+ g4. ~ 8 r r
R2.*3
r4 r8 r4 c8
a4. c
- f ~ f8.[ e16( d c)]
+ f ~ 8.[ e16( d c)]
bes4 g8 e4 g8
- c,4. ~ c8 r r
+ c,4. ~ 8 r r
R2.*3|
r4 r8 r4 c'8
b4( c8) b4( c8)
- bes4. ~ bes4 g8
+ bes4. ~ 4 g8
a4 ( c8) f4 ( b,8)
d4. ( c8) r r
R2.*3|
r4 r8 r4 c8
b4( c8) b4( c8)
- bes4. ~ bes4 g8
+ bes4. ~ 4 g8
a4 c8 f[ ( d) b!]
d4. ( c8) r r
\mark "E"
R2.*9 |
\lipbreaker
c,8[ c' c] c4.~
- c8[ c d] e[ e fis]
+ 8[ c d] e[ e fis]
g4 r8 r4 r8
R2.
r8 g,[ g] g[ g g] |
- es'4. ~ es8[ d c]
+ es'4. ~ 8[ d c]
b4 r8 r4 r8
R2. |
r8 g[ g] g[ g g]
- es'4. ~ es8[ d c]
+ es'4. ~ 8[ d c]
b4.\cresc c4. d4. e4.
\mark "F"
f2.\f ~ |
-\version "2.17.15"
+\version "2.19.0"
\header{
texidoc= "Test optional music function arguments.
\layout { ragged-right = ##t }
-% Get following pitch into Scheme
-pitch = #(define-scheme-function (parser location p) (ly:pitch?) p)
-% The same with a duration
-dur = #(define-scheme-function (parser location p) (ly:duration?) p)
-
% Just like \relative, but defaulting to f as reference, making the
% first note of the music the same as if written as absolute pitch
ablative =
#(define-music-function (parser location ref music)
- ((ly:pitch? #{ \pitch f #}) ly:music?)
+ ((ly:pitch? #{ f #}) ly:music?)
#{ \relative $ref $music #})
% Let's take a duration and four pitches, defaulting to 2 c' d' e'
zap =
#(define-music-function (parser location dur a b c d)
- ((ly:duration? #{ \dur 2 #}) (ly:pitch? #{ \pitch c' #})
- (ly:pitch? #{ \pitch d' #}) (ly:pitch? #{ \pitch e' #})
+ ((ly:duration? #{ 2 #}) (ly:pitch? #{ c' #})
+ (ly:pitch? #{ d' #}) (ly:pitch? #{ e' #})
ly:music?) #{ $a $dur $b $c ^\markup{!} $d #})
\new Voice { \relative c' e' \relative c' { e' } \ablative c' e' \ablative { e' }
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc = "Having markup after a non-staff line doesn't confuse
\new Staff <<
\new Voice = "asdf" { c' d' e' f' }
>>
- \new Lyrics \lyricsto "asdf" \lyricmode { a b c d }
+ \new Lyrics \lyricsto "asdf" { a b c d }
>>
}
\markup "next song"
-\version "2.17.6"
+\version "2.19.2"
\header {
texidoc = "Spacing rules between Staves coexist with rules affecting
\new Staff = "bass" \new Voice = "b" { \clef bass c2 c' }
\new Lyrics \with {
alignAboveContext = "bass"
- } \lyricsto "b" \lyricmode { bass \skip2 }
+ } \lyricsto "b" { bass \skip2 }
>>
\layout {
\context {
"
}
-\version "2.16.0"
+\version "2.19.2"
vone =
vtwo =
\relative c' {
\time 2/4
- f8[ f]~ f8[ f] |
+ f8[ f]~ 8[ f] |
f8[ f] f8[ f]
}
"
}
-vone = \relative a' { d4 r8 d8 d8 r8 d8 r8 d2 ~ d2 ~ d4 }
+vone = \relative a' { d4 r8 d8 d8 r8 d8 r8 d2 ~ 2 ~ 4 }
vtwo = \relative g' { g4. g8 r2 g4 r4 r2 g4 }
-\version "2.16.0"
+\version "2.19.2"
\paper { ragged-right = ##t }
\layout { ragged-right = ##t }
-\version "2.16.0"
+\version "2.19.2"
vone = \relative a' {
g2 g g g4 g f' c c( c) c c c ~ c
}
vtwo = \relative a' {
f2 f4 f f2 g4 g c, f f f f f~ f ~ f
- f4 f2. ~ f4
+ f4 f2. ~ 4
}
-\version "2.17.6"
+\version "2.19.2"
\header {
texidoc = "Nested properties may be overridden using Scheme list
syntax. This test performs two property overrides: the first
\once \override TextSpanner.bound-details.left.text = #"foo"
c4\startTextSpan
\once \override Tie.details.note-head-gap = #1
- c4 ~ c c\stopTextSpan
+ c4 ~ 4 c\stopTextSpan
\once \override TextSpanner.bound-details.left.text = #"foo"
c4\startTextSpan
\once \override Tie.details.note-head-gap = #1
- c4 ~ c c\stopTextSpan
+ c4 ~ 4 c\stopTextSpan
}
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc = "Voices from different cues must not be tied together. In
}
cueI = \relative c'' {
- a1 ~ | a | a |
+ a1 ~ | 1 | a |
}
\addQuote "cueI" { \cueI }
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc = "Measure repeats may be nested with beat repeats."
}
\set Score.skipBars = ##t
\time 4/4
% riff
- \repeat "percent" 2 { r8. a16 g8. a16 bes8. a16 f8 d | a c8 ~ c8 d8 ~ d8 r8 r4 }
+ \repeat "percent" 2 { r8. a16 g8. a16 bes8. a16 f8 d | a c8 ~ 8 d8 ~ 8 r8 r4 }
R1*2
\repeat "percent" 2 { \repeat "percent" 4 { c8 es } }
--- /dev/null
+\version "2.19.0"
+
+\header {
+ texidoc = "Durations without pitches are placed into note events
+without pitch information. Those are directly useful in
+@code{RhythmicStaff}."
+}
+
+\layout { ragged-right = ##t }
+
+\new RhythmicStaff { 4 4. r | 4 \tuplet 3/2 { 2 4 } 4 }
(interfaces . (font-interface
line-interface
line-spanner-interface
+ outside-staff-interface
side-position-interface))))))
#(define scheme-event-spanner-types
--- /dev/null
+\version "2.19.0"
+
+\header {
+ texidoc = "The @code{\\score-lines} markup returns individual score
+lines as stencils rather than a single stencil. Calling a function
+like @code{\\rotate} on @code{\\score-lines} rotates the lines
+individually, as contrasted with rotating an entire @code{\\score}
+markup."
+}
+
+\markup \fill-line {
+ \null
+ \column \rotate #-15 {
+ \score-lines
+ {
+ \new Staff \with { instrumentName = \markup \typewriter
+ "\\score-lines" }
+ \repeat unfold 16 c'4
+ \layout {
+ short-indent = 0
+ indent = 0
+ line-width = 4\cm
+ }
+ }
+ }
+ \column \rotate #-15 {
+ \score
+ {
+ \new Staff \with { instrumentName = \markup \typewriter
+ "\\score" }
+ \repeat unfold 16 c'4
+ \layout {
+ short-indent = 0
+ indent = 0
+ line-width = 4\cm
+ }
+ }
+ }
+ \null
+}
-\version "2.17.2"
+\version "2.19.2"
\header {
texidoc = "Scripts avoid ties.
r2. c4~-> | c-> r2. |
r2. c4-> | c-> r2. |
r2. c4~-> | c r2. |
- r2. c4~ | c-> r2. | \break
+ r2. c4~ | 4-> r2. | \break
r2. <g-- c-> >4--~ | <g-- c>-> ~ <g c---_>-> r2 |
- r2. c4~ | c-> ~ c-> r2 |
+ r2. c4~ | 4-> ~ c-> r2 |
r2. c4~-> | c ~ c-> r2 |
r2. c4~-> | c-> ~ c r2 |
r2. c4-> |
-\version "2.17.28"
+\version "2.19.2"
\header{
texidoc="
\new Voice \relative c' {
c'8[( c c c] g2 ~ | \break
g1) | \break
- \slurDown c8[( c] g4 ~ g2 ~ | \break
- g2 ~ g2)
+ \slurDown c8[( c] g4 ~ 2 ~ | \break
+ g2 ~ 2)
}
\relative c'' {
a4( c b4 e, ~ | \break
- e1 ~ | e1)
+ e1 ~ | 1)
}
}
}
-\version "2.17.28"
+\version "2.19.2"
\layout {
ragged-right = ##t
% #(define debug-slur-scoring #t)
\grace e=''16( d8.[) c16]
d=''8.[ \grace f16( e16)]
s2
- << {c=''8.([ es16] bes4~bes )}
+ << {c=''8.([ es16] bes4~4 )}
\\
{r8 <as es> r <f des> r }
>>
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc="Festival song synthesis output supports
melismas.
\melismaEnd
e2
}
- \lyricsto "lala" \new Lyrics {
+ \new Lyrics \lyricsto "lala" {
la di __ daah
}
>>
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc="Festival song synthesis output supports
repeat signs.
c2 e4 r4 | g2 e | c1 |
\context Voice = verse \repeat volta 2 {c4 d e f | g1 | }
a2 b | c1}
- \lyricsto melody \context Lyrics = mainlyrics \lyricmode {
+ \context Lyrics = mainlyrics \lyricsto melody {
do mi sol mi do
la si do }
- \lyricsto verse \context Lyrics = mainlyrics \lyricmode {
+ \context Lyrics = mainlyrics \lyricsto verse {
do re mi fa sol }
- \lyricsto verse \context Lyrics = repeatlyrics \lyricmode {
+ \context Lyrics = repeatlyrics \lyricsto verse {
dodo rere mimi fafa solsol }
>>
}
\header{
- texidoc = "Concurrent tuplets should be equidistant on all staves.
-Such equidistant spacing is at odds with elegant engraver spacing;
-hence it must be switched on explicitly with the
-@code{uniform-stretching} property of @code{SpacingSpanner}."
+ texidoc = "Concurrent tuplets should be equidistant on all staves."
}
-\layout{
- \context{
- \Score
- \override SpacingSpanner.uniform-stretching = ##t
- }
-}
+\paper {ragged-right = ##f }
\relative c' {
\context StaffGroup <<
\new Staff \context Voice {
- \tuplet 10/2 { c8[ c c c c c c c c c] }
- \tuplet 10/2 { c[ c c c c c c c c c] }
+ \tuplet 10/8 { c8[ c c c c c c c c c] }
}
\new Staff \context Voice {
- \tuplet 11/2 { c8[ c c c c c c c c c c] }
- \tuplet 11/2 { c[ c c c c c c c c c c] }
+ \tuplet 8/8 { c8[ c c c c c c c] }
}
>>
}
-\version "2.17.6"
+\version "2.19.2"
\header {
texidoc = "The @code{SpanBarStub} grob takes care of horizontal spacing
\once \override Staff.BarLine.allow-span-bar = ##f
c2 c c c
}
- \new Lyrics \lyricsto "upper" \lyricmode {
+ \new Lyrics \lyricsto "upper" {
long-syllable a b c long-syllable a b c
long-syllable a b c long-syllable a b c
}
\once \override Staff.BarLine.allow-span-bar = ##f
c2 c c c
}
- \new Lyrics \lyricsto "middle" \lyricmode {
+ \new Lyrics \lyricsto "middle" {
syllable a b c syllable a b c
syllable a b c syllable a b c
}
c2 c c c
c2 c c c
}
- \new Lyrics \lyricsto "lower" \lyricmode {
+ \new Lyrics \lyricsto "lower" {
word a b c word a b c
word a b c word a b c
}
}
\new Dynamics = "dynamics" {
\repeat unfold 2 {
- s1\cresc s1\f s1\dim s1\p
+ s1\cresc s1\f s1\dim s1\p \break
}
}
\new Staff = "down" {
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc = "Symbols that need on-staffline info (like dots and ties)
}
\relative c' {
\time 5/8
- f4 ~ f4
+ f4 ~ 4
f4 f4.
}
-\version "2.16.0"
+\version "2.19.2"
\header{
texidoc="
ragged-right = ##t
}
\context Voice \relative c {
- b''4 ~ b8(b8) e4 e,
+ b''4 ~ 8(b8) e4 e,
}
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc = "In a TabStaff, the chord repetition function needs
}
Guitar = \relative c' {
- r8 < gis-6 cis-6 b-0 > ~ q4 q8 ~ q q4
+ r8 < gis-6 cis-6 b-0 > ~ q4 q8 ~ 8 q4
}
\score {
-\version "2.17.30"
+\version "2.19.2"
\header {
texidoc = "In a TabStaff, the chord repetition function needs
\tabChordRepetition
Guitar = \relative c' {
- r8 < gis\4 cis\3 b\2 > ~ q4 q8 ~ q q4
+ r8 < gis\4 cis\3 b\2 > ~ q4 q8 ~ 8 q4
}
\score {
-\version "2.17.11"
+\version "2.19.2"
\header{ texidoc = "As default, tablature staves show only the fret numbers, because
in most situations, they are combined with normal staves.
c4^"test" d( e) |
f4\f g a^\fermata |
R2.*3 |
- c8\<\( c16 c ~ c2\! |
+ c8\<\( c16 c ~ 2\! |
\mark \default
c'2.\) |
\ottava #1
-\version "2.17.20"
+\version "2.19.0"
\header
{
guitarSolo = {
\time 3/4
- \set Timing.beamExceptions = #'((end . (((1 . 8) . (4 2)))))
+ \set Timing.beamExceptions =
+ \beamExceptions { 8[ 8 8 8] 8[ 8] }
<<
{bes'2( aes'8-. r)} \\
{r8 cis(-\tag #'beam [ b f'-\tag #'beam ]) <d f'>-. r}
-\version "2.17.30"
+\version "2.19.2"
\header{ texidoc = "In tablature, notes that are tied to are invisible
except after a line break or within a second volta;
}
firstpart = \relative c {
- f2 ~ f4 e
+ f2 ~ 4 e
g8 g ~ g g ~ g g~ g g ~
- g1
+ 1
}
secondpart = \relative c' {
- c1 ~ \break c2 ~ c
+ c1 ~ \break c2 ~ 2
}
thirdpart = \relative c' {
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc = "
}
music = {
- c'4 ~ c'4 ( d'2 ) |
- c'4 ~ c'4 \glissando d'2 |
- c'4 ~ c'4 d'2 |
+ c'4 ~ 4 ( d'2 ) |
+ c'4 ~ 4 \glissando d'2 |
+ c'4 ~ 4 d'2 |
c'4 \glissando d'2. |
}
-\version "2.17.6"
+\version "2.19.2"
\header {
texidoc = "The @code{\\removeWithTag} and @code{\\keepWithTag}
<<
\tag #'flood \new Voice { \voiceOne \repeat unfold 16 { c'''8 cis'''8 } }
\tag #'highball \new Voice { \voiceThree \repeat unfold 8 { a'4( as') } }
- \tag #'buffoon \new Voice { \voiceFour \repeat unfold 2 { f1~ f } }
+ \tag #'buffoon \new Voice { \voiceFour \repeat unfold 2 { f1~ 1 } }
>>
demo =
-\version "2.17.6"
+\version "2.19.2"
\header {texidoc = "@cindex Tie, dotted, dashed
The appearance of ties may be changed from solid to dotted or dashed.
"
\relative c'{
- c2 ~ c |
+ c2 ~ 2 |
\tieDotted
- c2 ~ c |
+ c2 ~ 2 |
\tieDashed
- c2 ~ c |
+ c2 ~ 2 |
\tieHalfDashed
- c2 ~ c |
+ c2 ~ 2 |
\tieHalfSolid
- c2 ~ c |
+ c2 ~ 2 |
\tieDashPattern #0.4 #2.0
- c2 ~ c |
+ c2 ~ 2 |
\once \override Tie.dash-definition = #'((0 0.25 1 1)
(0.3 0.7 0.4 0.75)
(0.75 1.0 1.0 1.0))
- c2 ~ c |
+ c2 ~ 2 |
\tieSolid
- c2 ~ c |
+ c2 ~ 2 |
}
texidoc = "Ties avoid collisions with dots."
}
-\version "2.16.0"
+\version "2.19.2"
\paper { ragged-right = ##T }
\relative c'' {
\time 12/8
d4*3/2~ d8[ e] r8
- d4.~ d8 e f
+ d4.~ 8 e f
}
-\version "2.16.0"
+\version "2.19.2"
\header {
texidoc = "Tying a grace to a following grace or main note works."
}
\layout { ragged-right= ##t }
\context Voice \relative c'' {
- c4 \grace { c8 ~ c16 ~ } c4
+ c4 \grace { c8 ~ 16 ~ } c4
}
}
-\version "2.17.6"
+\version "2.19.2"
\paper {
ragged-right = ##t
{
\override Tie.staff-position = #-5.5
- c'4 ~ c'
+ c'4 ~ 4
\override Tie.staff-position = #-6.5
- c'4 ~ c'
+ c'4 ~ 4
\override Tie.staff-position = #-7.5
- c'4 ~ c'
+ c'4 ~ 4
\revert Tie.staff-position
\override Tie.direction = #UP
- c'4 ~ c'
+ c'4 ~ 4
}
ragged-right = ##t
}
-\version "2.16.0"
+\version "2.19.2"
frag =
\relative c'' {
- c16 c2...~ c16 ~ c2... |
- c4~c8 c8~c16 c16~c32 c16.~[ c64]~ c64[ c8..] |
+ c16 c2...~ 16 ~ 2... |
+ c4~8 c8~16 c16~32 c16.~[ c64]~ 64[ c8..] |
}
-\version "2.16.0"
+\version "2.19.2"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (_ "unterminated tie"))
}
\relative c' {
- c1~ c |
+ c1~ 1 |
c1~ <e c> |
c1~ d |
<c e>1~ c |
--- /dev/null
+\version "2.19.4"
+
+\header {
+ texidoc = "Time signature changes in midmeasure generate warnings,
+except in an anacrusis or when @code{ignoreBarChecks} is true.
+@code{measurePosition} is reset to 0, so a full measure follows, regardless
+of the original position.
+
+This example should end at bar 3, with no barline before the 2/4."
+}
+
+#(ly:expect-warning (_ "\\time in mid-measure at 1/4"))
+
+\score {
+ \relative {
+ \override Score.BarNumber.break-visibility = #all-visible
+ \partial 8 \time 2/4
+ a'8 | d4
+ \time 6/8 \partial 4.
+ cis8 b a | g4. \barNumberCheck 2
+ \set Timing.ignoreBarChecks = ##t
+ \time 12/8
+ fis4. e d
+ \time 2/4
+ \set Timing.ignoreBarChecks = ##f
+ a'2 | \barNumberCheck 3
+ }
+}
--- /dev/null
+\version "2.19.3"
+
+\header {
+ texidoc = "Tuplet numbers are positioned correctly on kneed French-style beams."
+}
+
+\layout {
+ indent = 0
+ ragged-right = ##t
+}
+
+top = \change Staff = "1"
+bottom = \change Staff = "2"
+
+music =
+\relative c' {
+ \time 3/4
+ \override Beam.auto-knee-gap = 1
+ \override Stem.french-beaming = ##t
+ \override TupletBracket.bracket-visibility = ##f
+ \set subdivideBeams = ##t
+ \set baseMoment = #(ly:make-moment 1 8)
+ \tuplet 3/2 8 {
+ g16 e''' c e g,,, c
+ \bottom c,16. \top c''32 \bottom c,,16
+ \top c''16. \bottom c,,32 c,16
+ }
+ \tuplet 5/4 8 {
+ c'32 \top c''' \bottom c,,,, \top c''' \bottom c,,
+ \top c'''32 \bottom c,,,, \top c''' \bottom c,, \top c'''
+ }
+}
+
+\new PianoStaff <<
+ \new Staff = "1" {
+ \music
+ }
+ \new Staff = "2" {
+ \clef bass
+ s2.
+ }
+>>
--- /dev/null
+\version "2.19.3"
+
+\header {
+ texidoc = "In tuplets with an even number of stems, the number
+may be placed on either side of the beam when the central stems
+point in different directions. The exception to this is when
+there is a fractional beam on one of the central stems, in which
+case the number is placed opposite the partial beam."
+}
+
+\layout {
+ indent = 0
+ ragged-right = ##t
+}
+
+\relative c' {
+ \time 2/4
+ \override Beam.auto-knee-gap = 1
+ \tuplet 6/4 4 {
+ c16 c'' c,, c'' c,, c''
+ \once \override TupletNumber.direction = #UP
+ c,,16 c'' c,, c'' c,, c''
+ }
+ \time 6/16
+ \tuplet 4/3 8. {
+ c,,8. c''16
+ %% The following override has no effect:
+ \override TupletNumber.direction = #DOWN
+ c,,16 c''8.
+ }
+}
--- /dev/null
+\version "2.19.3"
+
+\header {
+ texidoc = "Tuplet numbers are placed next to the beam unless there is
+insufficient horizontal space for them, in which case bracket-based
+positioning is used and a programming error is issued.
+
+The first tuplet number should be between stems; the second should be
+below the noteheads."
+}
+
+#(ly:expect-warning (_ "not enough space for tuplet number against beam"))
+#(ly:expect-warning (_ "not enough space for tuplet number against beam"))
+
+\layout {
+ indent = 0
+ ragged-right = ##t
+}
+
+\score {
+ \relative c' {
+ \time 2/4
+ \override Beam.auto-knee-gap = 1
+ \tuplet 6/4 4 {
+ \once \override TupletNumber.text =
+ #tuplet-number::calc-fraction-text
+ c16 c'' c,, c'' c,, c''
+ \once \override TupletNumber.text =
+ #(tuplet-number::fraction-with-notes "16" "16")
+ c,,16 c'' c,, c'' c,, c''
+ }
+ }
+}
--- /dev/null
+\version "2.19.3"
+
+\header {
+ texidoc = "A tuplet number associated with a kneed beam is not placed between
+beam and staff where it may collide with ledger lines."
+}
+
+\layout {
+ indent = 0
+ ragged-right = ##t
+}
+
+\relative c'' {
+ \override Beam.auto-knee-gap = 1
+ \tuplet 3/2 4 {
+ c8 c''' cis,,,
+ c8 c'''' c,,,
+ c''8 c c,,
+ c,8 c,,, c'''
+ c,8 c,, c''
+ c,8 c,, c''
+ \override TupletNumber.font-size = 5
+ c,,8 c c''
+ }
+}
--- /dev/null
+\version "2.19.4"
+
+\header {
+ texidoc = "Tuplet numbers are placed next to kneed beams when
+@code{Beam.positions} is overridden."
+}
+
+\layout {
+ indent = 0
+ ragged-right = ##t
+}
+
+top = \change Staff = "1"
+bottom = \change Staff = "2"
+
+music = \relative c {
+ \override Beam.auto-knee-gap = 1
+ \tuplet 3/2 4 {
+ c8 \top e'' \bottom g,,
+ \once \override Beam.positions = #'(4.5 . 4.5)
+ c,8 \top e'' \bottom g,,
+ \once \override Beam.positions = #'(-7.0 . -7.0)
+ \top e''8 \bottom c,, c,
+ \once \override Beam.positions = #'(-4.5 . -4.5)
+ \top e'''8 \bottom c,, c,
+ }
+}
+
+\score {
+ \new PianoStaff <<
+ \new Staff = "1" {
+ s1
+ }
+ \new Staff = "2" {
+ \clef bass
+ \music
+ }
+ >>
+}
--- /dev/null
+\version "2.19.3"
+
+\header {
+ texidoc = "Tuplet numbers will maintain a constant distance from
+kneed beams when offset horizontally."
+}
+
+\layout {
+ indent = 0
+ ragged-right = ##f
+}
+
+\relative c' {
+ \tuplet 3/2 4 {
+ c8 g''' a
+ \once \offset X-offset 2 TupletNumber
+ c,,, g''' a
+ \once \offset X-offset #-2 TupletNumber
+ c,,, g''' a
+ \once \offset X-offset 6 TupletNumber
+ c,,, g''' a
+ }
+}
--- /dev/null
+\version "2.19.3"
+
+\header {
+ texidoc = "Tuplet numbers associated with kneed beams will
+avoid accidentals."
+}
+
+\layout {
+ indent = 0
+ ragged-right = ##t
+}
+
+top = \change Staff = "1"
+bottom = \change Staff = "2"
+
+music = \relative c {
+ \override Beam.auto-knee-gap = 1
+ \tuplet 5/4 4 {
+ c16[ \top g'' e' \bottom fis,, \top c']
+ e'16 \bottom g,, c, \top <eis' gis cis> \bottom g,
+ }
+ \tuplet 3/2 4 {
+ \top c8 c'' ceses,,
+ g'' g,, <aeses' ceses eses>
+ }
+}
+
+\score {
+ \new PianoStaff <<
+ \new Staff = "1" {
+ s1
+ }
+ \new Staff = "2" {
+ \clef bass
+ \music
+ }
+ >>
+}
--- /dev/null
+\version "2.19.3"
+
+\header {
+ texidoc = "Tuplet numbers are positioned next to kneed beams."
+}
+
+\layout {
+ indent = 0
+ ragged-right = ##t
+}
+
+top = \change Staff = "1"
+bottom = \change Staff = "2"
+
+music = \relative c {
+ \time 3/4
+ \override Beam.auto-knee-gap = 1
+ \tuplet 3/2 4 {
+ c8 g' \top e'
+ c'8 e, \bottom g,
+ \top e''8 \bottom c,, \top g''
+ g,8 e''' c,,
+ c''8 g,, e'
+ g,8 c''' e,,
+ }
+}
+
+\score {
+ \new PianoStaff <<
+ \new Staff = "1" {
+ s2.
+ s2.
+ }
+ \new Staff = "2" {
+ \clef bass
+ \music
+ }
+ >>
+}
}
-\version "2.17.6"
+\version "2.19.2"
#(ly:expect-warning (_ "(De)crescendo with unspecified starting volume in MIDI."))
ignoreMelisma = \set ignoreMelismata = ##t
\transpose a' e' \relative c'' { a16[ g fis! g] f![ d] } |
g4. r8 gis gis |
a4 a16.[ b32] c8[( a]) fis8 |
- g4.~ g8-\fermata
+ g4.~ 8-\fermata
}
} <<
\context Staff \accidentalStyle modern
\melody >>
- \lyricsto "singer" \new Lyrics \firstVerse
- \lyricsto "singer" \new Lyrics \secondVerse
+ \new Lyrics \lyricsto "singer" \firstVerse
+ \new Lyrics \lyricsto "singer" \secondVerse
\new PianoStaff <<
\set PianoStaff.instrumentName = \markup {
\bold
--- /dev/null
+\version "2.17.15"
+
+\header {
+
+ texidoc = "@code{\\once \\unset} should change a context property
+value for just one timestep and then return to the previous value."
+
+}
+\relative c' {
+ \set fingeringOrientations = #'(left)
+ <e-1>1 |
+ \once \unset fingeringOrientations
+ <e-1>-"default" |
+ <e-1>-"left" |
+
+ \unset fingeringOrientations
+ <e-1>-"default" |
+ \once\unset fingeringOrientations
+ <e-1>-"default" |
+ <e-1>-"default" |
+ \set Score.fingeringOrientations = #'(right)
+ <e-1>-"right"
+ \once\unset fingeringOrientations
+ <e-1>-"right"
+ <e-1>-"right"
+ \once\set fingeringOrientations = #'(left)
+ <e-1>-"left"
+ <e-1>-"right"
+ \set fingeringOrientations = #'(left)
+ <e-1>-"left"
+ \once \unset fingeringOrientations
+ <e-1>-"right"
+ <e-1>-"left"
+ \unset fingeringOrientations
+ \set Score.fingeringOrientations = #'(up down)
+ <e-1>-"default"
+}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Modified 2001--2002 by Rune Zedeler <rz@daimi.au.dk>
LilyPond is free software: you can redistribute it and/or modify
};
/*
- localKeySignature is changed at runtime, which means that references
+ localAlterations is changed at runtime, which means that references
in grobs should always store ly_deep_copy ()s of those.
*/
{
last_keysig_ = new_sig;
set_context_property_on_children (context (),
- ly_symbol2scm ("localKeySignature"),
+ ly_symbol2scm ("localAlterations"),
new_sig);
Context *trans = context ()->get_parent_context ();
*/
SCM val;
- while (trans && trans->where_defined (ly_symbol2scm ("localKeySignature"), &val) == trans)
+ while (trans && trans->where_defined (ly_symbol2scm ("localAlterations"), &val) == trans)
{
- trans->set_property ("localKeySignature", ly_deep_copy (last_keysig_));
+ trans->set_property ("localAlterations", ly_deep_copy (last_keysig_));
trans = trans->get_parent_context ();
}
}
SCM localsig = SCM_EOL;
while (origin
- && origin->where_defined (ly_symbol2scm ("localKeySignature"), &localsig))
+ && origin->where_defined (ly_symbol2scm ("localAlterations"), &localsig))
{
bool change = false;
if (accidentals_[i].tied_
}
if (change)
- origin->set_property ("localKeySignature", localsig);
+ origin->set_property ("localAlterations", localsig);
origin = origin->get_parent_context ();
}
void
Accidental_engraver::process_music ()
{
- SCM sig = get_property ("keySignature");
+ SCM sig = get_property ("keyAlterations");
if (last_keysig_ != sig)
update_local_key_signature (sig);
}
"extraNatural "
"harmonicAccidentals "
"accidentalGrouping "
- "keySignature "
- "localKeySignature ",
+ "keyAlterations "
+ "localAlterations ",
/* write */
- "localKeySignature "
+ "localAlterations "
);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
{
Real mh = ape->horizontal_skylines_[d].max_height ();
if (!isinf (mh))
- width.add_point (mh);
+ width.add_point (mh + offset);
}
last_offset = offset;
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
SCM alist = me->get_property ("glyph-name-alist");
SCM alt = me->get_property ("alteration");
SCM glyph_name = ly_assoc_get (alt, alist, SCM_BOOL_F);
+ Stencil mol;
if (!scm_is_string (glyph_name))
{
me->warning (_f ("Could not find glyph-name for alteration %s",
ly_scm_write_string (alt).c_str ()));
- return SCM_EOL;
+ mol = fm->find_by_name ("noteheads.s1cross");
}
+ else
+ mol = fm->find_by_name (ly_scm2string (glyph_name));
- Stencil mol (fm->find_by_name (ly_scm2string (glyph_name)));
if (to_boolean (me->get_property ("restore-first")))
{
/*
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
return SCM_BOOL_T;
}
-/* for each grob, find its upper and lower skylines. If the grob has
- an empty extent, delete it from the list instead. If the extent is
- non-empty but there is no skyline available (or pure is true), just
+/* Return upper and lower skylines for VerticalAxisGroup g. If the extent
+ is non-empty but there is no skyline available (or pure is true), just
create a flat skyline from the bounding box */
// TODO(jneem): the pure and non-pure parts seem to share very little
// code. Split them into 2 functions, perhaps?
-static void
-get_skylines (Grob *me,
- vector<Grob *> *const elements,
+static Skyline_pair
+get_skylines (Grob *g,
Axis a,
- bool pure, int start, int end,
- vector<Skyline_pair> *const ret)
+ Grob *other_common,
+ bool pure, int start, int end)
{
- Grob *other_common = common_refpoint_of_array (*elements, me, other_axis (a));
+ Skyline_pair skylines;
- for (vsize i = elements->size (); i--;)
+ if (!pure)
{
- Grob *g = (*elements)[i];
- Skyline_pair skylines;
-
- if (!pure)
- {
- Skyline_pair *skys = Skyline_pair::unsmob (g->get_property (a == Y_AXIS
- ? "vertical-skylines"
- : "horizontal-skylines"));
- if (skys)
- skylines = *skys;
-
- /* This skyline was calculated relative to the grob g. In order to compare it to
- skylines belonging to other grobs, we need to shift it so that it is relative
- to the common reference. */
- Real offset = g->relative_coordinate (other_common, other_axis (a));
- skylines.shift (offset);
- }
- else
+ Skyline_pair *skys = Skyline_pair::unsmob (g->get_property (a == Y_AXIS
+ ? "vertical-skylines"
+ : "horizontal-skylines"));
+ if (skys)
+ skylines = *skys;
+
+ /* This skyline was calculated relative to the grob g. In order to compare it to
+ skylines belonging to other grobs, we need to shift it so that it is relative
+ to the common reference. */
+ Real offset = g->relative_coordinate (other_common, other_axis (a));
+ skylines.shift (offset);
+ }
+ else if (Hara_kiri_group_spanner::request_suicide (g, start, end))
+ return skylines;
+ else
+ {
+ assert (a == Y_AXIS);
+ Interval extent = g->pure_height (g, start, end);
+
+ // This is a hack to get better accuracy on the pure-height of VerticalAlignment.
+ // It's quite common for a treble clef to be the highest element of one system
+ // and for a low note (or lyrics) to be the lowest note on another. The two will
+ // never collide, but the pure-height stuff only works with bounding boxes, so it
+ // doesn't know that. The result is a significant over-estimation of the pure-height,
+ // especially on systems with many staves. To correct for this, we build a skyline
+ // in two parts: the part we did above contains most of the grobs (note-heads, etc.)
+ // while the bit we're about to do only contains the breakable grobs at the beginning
+ // of the system. This way, the tall treble clefs are only compared with the treble
+ // clefs of the other staff and they will be ignored if the staff above is, for example,
+ // lyrics.
+ if (Axis_group_interface::has_interface (g))
{
- assert (a == Y_AXIS);
- Interval extent = g->pure_height (g, start, end);
-
- // This is a hack to get better accuracy on the pure-height of VerticalAlignment.
- // It's quite common for a treble clef to be the highest element of one system
- // and for a low note (or lyrics) to be the lowest note on another. The two will
- // never collide, but the pure-height stuff only works with bounding boxes, so it
- // doesn't know that. The result is a significant over-estimation of the pure-height,
- // especially on systems with many staves. To correct for this, we build a skyline
- // in two parts: the part we did above contains most of the grobs (note-heads, etc.)
- // while the bit we're about to do only contains the breakable grobs at the beginning
- // of the system. This way, the tall treble clefs are only compared with the treble
- // clefs of the other staff and they will be ignored if the staff above is, for example,
- // lyrics.
- if (Axis_group_interface::has_interface (g)
- && !Hara_kiri_group_spanner::request_suicide (g, start, end))
- {
- extent = Axis_group_interface::rest_of_line_pure_height (g, start, end);
- Interval begin_of_line_extent = Axis_group_interface::begin_of_line_pure_height (g, start);
- if (!begin_of_line_extent.is_empty ())
- {
- Box b;
- b[a] = begin_of_line_extent;
- b[other_axis (a)] = Interval (-infinity_f, -1);
- skylines.insert (b, other_axis (a));
- }
- }
-
- if (!extent.is_empty ())
+ extent = Axis_group_interface::rest_of_line_pure_height (g, start, end);
+ Interval begin_of_line_extent = Axis_group_interface::begin_of_line_pure_height (g, start);
+ if (!begin_of_line_extent.is_empty ())
{
Box b;
- b[a] = extent;
- b[other_axis (a)] = Interval (0, infinity_f);
+ b[a] = begin_of_line_extent;
+ b[other_axis (a)] = Interval (-infinity_f, -1);
skylines.insert (b, other_axis (a));
}
}
- if (skylines.is_empty ())
- elements->erase (elements->begin () + i);
- else
- ret->push_back (skylines);
+ if (!extent.is_empty ())
+ {
+ Box b;
+ b[a] = extent;
+ b[other_axis (a)] = Interval (0, infinity_f);
+ skylines.insert (b, other_axis (a));
+ }
}
- reverse (*ret);
+ return skylines;
}
vector<Real>
// else centered dynamics will break when there is a fixed alignment).
vector<Real>
Align_interface::internal_get_minimum_translations (Grob *me,
- vector<Grob *> const &all_grobs,
+ vector<Grob *> const &elems,
Axis a,
bool include_fixed_spacing,
bool pure, int start, int end)
Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"),
DOWN);
- vector<Grob *> elems (all_grobs); // writable copy
- vector<Skyline_pair> skylines;
- get_skylines (me, &elems, a, pure, start, end, &skylines);
+ Grob *other_common = common_refpoint_of_array (elems, me, other_axis (a));
Real where = 0;
Real default_padding = robust_scm2double (me->get_property ("padding"), 0.0);
vector<Real> translates;
Skyline down_skyline (stacking_dir);
+ Grob *last_nonempty_element = 0;
Real last_spaceable_element_pos = 0;
Grob *last_spaceable_element = 0;
Skyline last_spaceable_skyline (stacking_dir);
Real dy = 0;
Real padding = default_padding;
- if (j == 0)
- dy = skylines[j][-stacking_dir].max_height () + padding;
+ Skyline_pair skyline = get_skylines (elems[j], a, other_common, pure, start, end);
+
+ if (skyline.is_empty ())
+ {
+ translates.push_back (where);
+ continue;
+ }
+
+ if (!last_nonempty_element)
+ {
+ dy = skyline[-stacking_dir].max_height () + padding;
+ for (vsize k = j; k-- > 0;)
+ translates[k] = stacking_dir * dy;
+ }
else
{
- SCM spec = Page_layout_problem::get_spacing_spec (elems[j - 1], elems[j], pure, start, end);
+ SCM spec = Page_layout_problem::get_spacing_spec (last_nonempty_element, elems[j], pure, start, end);
Page_layout_problem::read_spacing_spec (spec, &padding, ly_symbol2scm ("padding"));
- dy = down_skyline.distance (skylines[j][-stacking_dir]) + padding;
+ dy = down_skyline.distance (skyline[-stacking_dir]) + padding;
Real spec_distance = 0;
if (Page_layout_problem::read_spacing_spec (spec, &spec_distance, ly_symbol2scm ("minimum-distance")))
Page_layout_problem::read_spacing_spec (spec,
&spaceable_padding,
ly_symbol2scm ("padding"));
- dy = max (dy, (last_spaceable_skyline.distance (skylines[j][-stacking_dir])
+ dy = max (dy, (last_spaceable_skyline.distance (skyline[-stacking_dir])
+ stacking_dir * (last_spaceable_element_pos - where) + spaceable_padding));
Real spaceable_min_distance = 0;
}
}
- if (isinf (dy)) /* if the skyline is empty, maybe max_height is infinity_f */
- dy = 0.0;
-
dy = max (0.0, dy);
down_skyline.raise (-stacking_dir * dy);
- down_skyline.merge (skylines[j][stacking_dir]);
+ down_skyline.merge (skyline[stacking_dir]);
where += stacking_dir * dy;
translates.push_back (where);
last_spaceable_element_pos = where;
last_spaceable_skyline = down_skyline;
}
- }
-
- // So far, we've computed the translates for all the non-empty elements.
- // Here, we set the translates for the empty elements: an empty element
- // gets the same translation as the last non-empty element before it.
- vector<Real> all_translates;
- if (!translates.empty ())
- {
- Real w = translates[0];
- for (vsize i = 0, j = 0; j < all_grobs.size (); j++)
- {
- if (i < elems.size () && all_grobs[j] == elems[i])
- w = translates[i++];
- all_translates.push_back (w);
- }
+ last_nonempty_element = elems[j];
}
if (pure)
{
SCM mta = me->get_property ("minimum-translations-alist");
mta = scm_cons (scm_cons (scm_cons (scm_from_int (start), scm_from_int (end)),
- ly_floatvector2scm (all_translates)),
+ ly_floatvector2scm (translates)),
mta);
me->set_property ("minimum-translations-alist", mta);
}
- return all_translates;
+ return translates;
}
void
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2007--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>
Han-Wen Nienhuys <hanwen@xs4all.nl
int offset = robust_scm2int (get_property ("middleCOffset"), 0);
start_c0_ = clef_pos + offset;
- start_key_sig_ = get_property ("keySignature");
+ start_key_sig_ = get_property ("keyAlterations");
is_typeset_ = true;
}
"AmbitusNoteHead ",
/* read */
- "keySignature "
+ "keyAlterations "
"middleCClefPosition "
"middleCOffset ",
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
if (dir)
{
Font_metric *fm = Font_interface::get_default_font (me);
- arrow = fm->find_by_name ("scripts.arpeggio.arrow." + to_string (dir));
+ arrow = fm->find_by_name ("scripts.arpeggio.arrow." + ::to_string (dir));
heads[dir] -= dir * arrow.extent (Y_AXIS).length ();
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2010--2012 Carl Sorensen <c_sorensen@byu.edu>
+ Copyright (C) 2010--2014 Carl Sorensen <c_sorensen@byu.edu>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
{
}
-Audio_note::Audio_note (Pitch p, Moment m, bool tie_event, Pitch transposing)
+Audio_note::Audio_note (Pitch p, Moment m, bool tie_event, Pitch transposing,
+ int velocity)
: pitch_ (p),
length_mom_ (m),
transposing_ (transposing),
dynamic_ (0),
+ extra_velocity_ (velocity),
tied_ (0),
tie_event_ (tie_event)
{
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
}
void
-Audio_staff::output (Midi_stream &midi_stream, int track, bool port)
+Audio_staff::output (Midi_stream &midi_stream, int track, bool port, int start_tick)
{
Midi_track midi_track (track, port);
- Midi_walker i (this, &midi_track);
+ Midi_walker i (this, &midi_track, start_tick);
for (; i.ok (); i++)
i.process ();
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1999--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
"nonstaff-nonstaff-spacing "
"nonstaff-relatedstaff-spacing "
"nonstaff-unrelatedstaff-spacing "
- "outside-staff-placement-directive "
"pure-relevant-grobs "
"pure-relevant-items "
"pure-relevant-spanners "
"staff-grouper "
"staff-staff-spacing "
"system-Y-offset "
- "vertical-skyline-elements "
"X-common "
"Y-common "
);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
+ Copyright (C) 2011--2014 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1996--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys
+ Copyright (C) 2006--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Michael Krause
+ Copyright (C) 1999--2014 Michael Krause
written for the GNU LilyPond music typesetter
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Michael Krause
- Extensions for ancient notation (c) 2003--2012 by Juergen Reuter
+ Copyright (C) 1999--2014 Michael Krause
+ Extensions for ancient notation (c) 2003--2014 by Juergen Reuter
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
void stop_translation_timestep ();
void process_music ();
virtual void finalize ();
- virtual void derived_mark () const;
DECLARE_TRANSLATOR_LISTENER (note);
DECLARE_TRANSLATOR_LISTENER (rest);
private:
Item *chord_name_;
vector<Stream_event *> notes_;
- SCM last_chord_;
Stream_event *rest_event_;
};
{
}
-void
-Chord_name_engraver::derived_mark () const
-{
- scm_gc_mark (last_chord_);
-}
-
Chord_name_engraver::Chord_name_engraver ()
{
chord_name_ = 0;
- last_chord_ = SCM_EOL;
rest_event_ = 0;
}
markup = maybe_markup;
SCM chord_changes = get_property ("chordChanges");
- if (to_boolean (chord_changes) && scm_is_pair (last_chord_)
- && ly_is_equal (markup, last_chord_))
+ SCM last_chord = get_property ("lastChord");
+ if (to_boolean (chord_changes) && scm_is_pair (last_chord)
+ && ly_is_equal (markup, last_chord))
chord_name_->set_property ("begin-of-line-visible", SCM_BOOL_T);
- last_chord_ = markup;
+ context ()->set_property ("lastChord", markup);
}
IMPLEMENT_TRANSLATOR_LISTENER (Chord_name_engraver, note);
"chordNoteNamer "
"chordRootNamer "
"chordNameExceptions "
+ "lastChord "
"majorSevenSymbol "
"noChordSymbol ",
/* write */
- ""
+ "lastChord "
);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1999--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
#include "chord-tremolo-iterator.hh"
-#include "input.hh"
-#include "international.hh"
-#include "misc.hh"
#include "repeated-music.hh"
Chord_tremolo_iterator::Chord_tremolo_iterator ()
Chord_tremolo_iterator::get_music_list () const
{
Music *mus = get_music ();
- Input *origin = mus->origin ();
- Music *body = Repeated_music::body (mus);
- bool body_is_sequential = body->is_mus_type ("sequential-music");
-
- int elt_count = body_is_sequential ? scm_ilength (body->get_property ("elements")) : 1;
-
- if (elt_count <= 0)
- elt_count = 1;
-
- if (elt_count == 1)
- {
- Music *ev = make_music_by_name (ly_symbol2scm ("TremoloEvent"));
- ev->set_spot (*origin);
- ev->set_property ("repeat-count", mus->get_property ("repeat-count"));
- ev->set_property ("tremolo-type", mus->get_property ("tremolo-type"));
- return scm_list_2 (ev->unprotect (), body->self_scm ());
- }
- else
- {
- SCM tremolo_symbol = ly_symbol2scm ("TremoloSpanEvent");
- SCM start_event_scm = scm_call_2 (ly_lily_module_constant ("make-span-event"), tremolo_symbol, scm_from_int (START));
- unsmob_music (start_event_scm)->set_spot (*origin);
- SCM stop_event_scm = scm_call_2 (ly_lily_module_constant ("make-span-event"), tremolo_symbol, scm_from_int (STOP));
-
- Music *start_event = unsmob_music (start_event_scm);
- Music *stop_event = unsmob_music (stop_event_scm);
- start_event->set_spot (*origin);
- stop_event->set_spot (*origin);
- start_event->set_property ("repeat-count", mus->get_property ("repeat-count"));
- start_event->set_property ("tremolo-type", mus->get_property ("tremolo-type"));
-
- return scm_list_3 (start_event_scm, body->self_scm (), stop_event_scm);
- }
+ SCM proc = ly_lily_module_constant ("tremolo::get-music-list");
+ return scm_call_1 (proc, mus->self_scm ());
}
IMPLEMENT_CTOR_CALLBACK (Chord_tremolo_iterator);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Mats Bengtsson <matsb@s3.kth.se>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2003--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
}
Moment result = *l - *e;
+ if (result < 0)
+ {
+ programming_error ("invalid measure position: "
+ + e->to_string () + " of " + l->to_string ());
+ return 0;
+ }
Moment const *unit = unsmob_moment (get_property ("completionUnit"));
if (unit)
note that note_dur may be strictly less than left_to_do_
(say, if left_to_do_ == 5/8)
*/
- if (factor_.denominator () == 1 && factor_ > Rational (1, 1))
- note_dur = Duration (left_to_do_, false);
- else
- note_dur = Duration (left_to_do_ / factor_, false).compressed (factor_);
+ note_dur = Duration (left_to_do_ / factor_, false).compressed (factor_);
}
else
{
orig = unsmob_duration (note_events_[0]->get_property ("duration"));
note_dur = *orig;
- factor_ = note_dur.factor ();
+ SCM factor = get_property ("completionFactor");
+ if (ly_is_procedure (factor))
+ factor = scm_call_2 (factor,
+ context ()->self_scm (),
+ note_dur.smobbed_copy ());
+ factor_ = robust_scm2rational (factor, note_dur.factor ());
left_to_do_ = orig->get_length ();
}
Moment nb = next_moment (note_dur.get_length ());
if (nb.main_part_ && nb < note_dur.get_length ())
{
- if (factor_.denominator () == 1 && factor_.numerator () > 1)
- note_dur = Duration (nb.main_part_, false);
- else
- note_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_);
+ note_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_);
}
do_nothing_until_ = now.main_part_ + note_dur.get_length ();
"TieColumn ",
/* read */
+ "completionFactor "
"completionUnit "
"measureLength "
"measurePosition "
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
note that rest_dur may be strictly less than left_to_do_
(say, if left_to_do_ == 5/8)
*/
- if (factor_.denominator () == 1 && factor_ > Rational (1, 1))
- rest_dur = Duration (left_to_do_, false);
- else
- rest_dur = Duration (left_to_do_ / factor_, false).compressed (factor_);
+ rest_dur = Duration (left_to_do_ / factor_, false).compressed (factor_);
}
else
{
orig = unsmob_duration (rest_events_[0]->get_property ("duration"));
rest_dur = *orig;
- factor_ = rest_dur.factor ();
+ SCM factor = get_property ("completionFactor");
+ if (ly_is_procedure (factor))
+ factor = scm_call_2 (factor,
+ context ()->self_scm (),
+ rest_dur.smobbed_copy ());
+ factor_ = robust_scm2rational (factor, rest_dur.factor());
left_to_do_ = orig->get_length ();
}
Moment nb = next_moment (rest_dur.get_length ());
if (nb.main_part_ && nb < rest_dur.get_length ())
{
- if (factor_.denominator () == 1 && factor_.numerator () > 1)
- rest_dur = Duration (nb.main_part_, false);
- else
- rest_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_);
+ rest_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_);
}
do_nothing_until_ = now.main_part_ + rest_dur.get_length ();
"Rest ",
/* read */
+ "completionFactor "
"completionUnit "
"middleCPosition "
"measurePosition "
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
+ Copyright (C) 2011--2014 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
LY_DEFINE (ly_context_def_lookup, "ly:context-def-lookup",
2, 1, 0, (SCM def, SCM sym, SCM val),
- "Return the value of @var{sym} in output definition @var{def}"
- " (e.g., @code{\\paper}). If no value is found, return"
- " @var{val} or @code{'()} if @var{val} is undefined.")
+ "Return the value of @var{sym} in context definition @var{def}"
+ " (e.g., @code{\\Voice}). If no value is found, return"
+ " @var{val} or @code{'()} if @var{val} is undefined."
+ " @var{sym} can be any of @samp{default-child}, @samp{consists},"
+ " @samp{description}, @samp{aliases}, @samp{accepts},"
+ " @samp{property-ops}, @samp{context-name}, @samp{group-type}.")
{
LY_ASSERT_SMOB (Context_def, def, 1);
Context_def *cd = unsmob_context_def (def);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2010--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2010--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2010--2012 Reinhold Kainhofer <reinhold@kainhofer.com>
+ Copyright (C) 2010--2014 Reinhold Kainhofer <reinhold@kainhofer.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Mats Bengtsson <matsb@s3.kth.se>
- Copyright (C) 2010--2012 Reinhold Kainhofer <reinhold@kainhofer.com>
+ Copyright (C) 2010--2014 Reinhold Kainhofer <reinhold@kainhofer.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Juergen Reuter <reuter@ipd.uka.de>,
+ Copyright (C) 2000--2014 Juergen Reuter <reuter@ipd.uka.de>,
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2000--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Erik Sandberg <mandolaerik@gmail.com>
+ Copyright (C) 2006--2014 Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Erik Sandberg <mandolaerik@gmail.com>
+ Copyright (C) 2005--2014 Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
vector<Grob *> dots
= extract_grob_array (me, "dots");
- vector<Grob *> main_heads;
+ vector<Grob *> parent_stems;
Real ss = 0;
Grob *commonx = me;
commonx = stem->common_refpoint (commonx, X_AXIS);
if (Stem::first_head (stem) == n)
- main_heads.push_back (n);
+ parent_stems.push_back (stem);
}
}
extract_grob_set (me, "side-support-elements", support);
Interval base_x;
- for (vsize i = 0; i < main_heads.size (); i++)
- base_x.unite (main_heads[i]->extent (commonx, X_AXIS));
+ for (vsize i = 0; i < parent_stems.size (); i++)
+ base_x.unite (Stem::first_head (parent_stems[i])->extent (commonx, X_AXIS));
for (vsize i = 0; i < support.size (); i++)
{
we instead must use their pure Y positions.
*/
vector_sort (dots, pure_position_less);
+
+ SCM chord_dots_limit = me->get_property ("chord-dots-limit");
+ if (scm_is_number (chord_dots_limit))
+ {
+ // Sort dots by stem, then check for dots above the limit for each stem
+ vector <vector <Grob *> > dots_each_stem (parent_stems.size ());
+ for (vsize i = 0; i < dots.size (); i++)
+ if (Grob *stem = unsmob_grob (dots[i]->get_parent (Y_AXIS)
+ -> get_object ("stem")))
+ for (vsize j = 0; j < parent_stems.size (); j++)
+ if (stem == parent_stems[j])
+ {
+ dots_each_stem[j].push_back (dots[i]);
+ break;
+ }
+ for (vsize j = 0; j < parent_stems.size (); j++)
+ {
+ Interval chord = Stem::head_positions (parent_stems[j]);
+ int total_room = ((int) chord.length () + 2
+ + scm_to_int (chord_dots_limit)) / 2;
+ int total_dots = dots_each_stem[j].size ();
+ // remove excessive dots from the ends of the stem
+ for (int first_dot = 0; total_dots > total_room; total_dots--)
+ if (0 == (total_dots - total_room) % 2)
+ dots_each_stem[j][first_dot++]->suicide ();
+ else
+ dots_each_stem[j][first_dot + total_dots - 1]->suicide ();
+ }
+ }
+
for (vsize i = dots.size (); i--;)
{
if (!dots[i]->is_live ())
" dots so they do not clash with staff lines.",
/* properties */
+ "chord-dots-limit "
"dots "
"positioning-done "
"direction "
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2007--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Neil Puttock <n.puttock@gmail.com>
+ Copyright (C) 2011--2014 Neil Puttock <n.puttock@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1996--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
{
SCM articulations = n->get_property ("articulations");
Stream_event *tie_event = 0;
- for (SCM s = articulations;
- !tie_event && scm_is_pair (s);
- s = scm_cdr (s))
+ Moment len = get_event_length (n, now_mom ());
+ int velocity = 0;
+ for (SCM s = articulations; scm_is_pair (s); s = scm_cdr (s))
{
Stream_event *ev = unsmob_stream_event (scm_car (s));
if (!ev)
if (ev->in_event_class ("tie-event"))
tie_event = ev;
+ SCM f = ev->get_property ("midi-length");
+ if (ly_is_procedure (f))
+ len = robust_scm2moment (scm_call_2 (f, len.smobbed_copy (),
+ context ()->self_scm ()),
+ len);
+ velocity += robust_scm2int (ev->get_property ("midi-extra-velocity"), 0);
}
- Moment len = get_event_length (n, now_mom ());
-
Audio_note *p = new Audio_note (*pit, len,
- tie_event, Pitch (0, 0, 0));
+ tie_event, Pitch (0, 0, 0), velocity);
Audio_element_info info (p, n);
announce_element (info);
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2008--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2008--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2008--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2008--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
if (script_ && !script_->get_parent (X_AXIS))
{
extract_grob_set (info.grob (), "note-heads", heads);
- Grob *stem = unsmob_grob (info.grob ()->get_object ("stem"));
/*
Spacing constraints may require dynamics to be aligned on rests,
so check for a rest if this note column has no note heads.
script_->set_parent (x_parent, X_AXIS);
Self_alignment_interface::set_center_parent (script_, X_AXIS);
}
- if (stem)
- Pointer_group_interface::add_grob (script_, ly_symbol2scm ("potential-X-colliding-grobs"), stem);
}
if (current_spanner_ && !current_spanner_->get_bound (LEFT))
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2010--2012 Neil Puttock <n.puttock@gmail.com>
+ Copyright (C) 2010--2014 Neil Puttock <n.puttock@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Glen Prideaux <glenprideaux@iname.com>,
+ Copyright (C) 1999--2014 Glen Prideaux <glenprideaux@iname.com>,
Han-Wen Nienhuys <hanwen@xs4all.nl>,
Jan Nieuwenhuizen <janneke@gnu.org>
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
char dir = (d == UP) ? 'u' : 'd';
string font_char = flag_style
- + to_string (dir) + staffline_offs + to_string (log);
+ + ::to_string (dir) + staffline_offs + ::to_string (log);
return ly_string2scm ("flags." + font_char);
}
string stroke_style = ly_scm2string (stroke_style_scm);
if (!stroke_style.empty ())
{
- string font_char = flag_style + to_string (dir) + stroke_style;
+ string font_char = flag_style + ::to_string (dir) + stroke_style;
Stencil stroke = fm->find_by_name ("flags." + font_char);
if (stroke.is_empty ())
{
- font_char = to_string (dir) + stroke_style;
+ font_char = ::to_string (dir) + stroke_style;
stroke = fm->find_by_name ("flags." + font_char);
}
if (stroke.is_empty ())
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2003--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
+ Copyright (C) 2011--2014 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2007--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys
+ Copyright (C) 2006--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
SCM lst = get_property ("finalizations");
set_property ("finalizations", SCM_EOL);
for (SCM s = lst; scm_is_pair (s); s = scm_cdr (s))
-
- /* TODO: make safe. */
- scm_primitive_eval (scm_car (s));
+ scm_apply_0 (scm_caar (s), scm_cdar (s));
}
/* Add a function to execute before stepping to the next time step. */
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2003--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2003--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Grob::internal_get_pure_property (SCM sym, int start, int end) const
{
SCM val = internal_get_property_data (sym);
- if (ly_is_procedure (val) || is_unpure_pure_container (val))
+ if (ly_is_procedure (val))
return call_pure_function (val, scm_list_1 (self_scm ()), start, end);
+
+ if (is_unpure_pure_container (val)) {
+ // Do cache, if the function ignores 'start' and 'end'
+ if (is_unchanging_unpure_pure_container (val))
+ return internal_get_property (sym);
+ else
+ return call_pure_function (val, scm_list_1 (self_scm ()), start, end);
+ }
+
if (is_simple_closure (val))
return evaluate_with_simple_closure (self_scm (),
simple_closure_expression (val),
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
"meta "
"minimum-X-extent "
"minimum-Y-extent "
- "outside-staff-horizontal-padding "
- "outside-staff-padding "
- "outside-staff-priority "
"pure-Y-offset-in-progress "
"rotation "
"skyline-horizontal-padding "
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
}
else
{
- if (Note_column::has_interface (b)
+ if (d == RIGHT // end at the left edge of a rest
+ && Note_column::has_interface (b)
&& Note_column::has_rests (b))
x_points[d] = e[-d];
else
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Glen Prideaux <glenprideaux@iname.com>,
+ Copyright (C) 1999--2014 Glen Prideaux <glenprideaux@iname.com>,
Han-Wen Nienhuys <hanwen@xs4all.nl>,
Jan Nieuwenhuizen <janneke@gnu.org>
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2010--2012 Carl Sorensen <c_sorensen@byu.edu>
+ Copyright (C) 2010--2014 Carl Sorensen <c_sorensen@byu.edu>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1996--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
class Audio_note : public Audio_item
{
public:
- Audio_note (Pitch p, Moment m, bool tie_event, Pitch transposition);
+ Audio_note (Pitch p, Moment m, bool tie_event, Pitch transposition, int velocity);
// with tieWaitForNote, there might be a skip between the tied notes!
void tie_to (Audio_note *, Moment skip = 0);
Moment length_mom_;
Pitch transposing_;
Audio_dynamic *dynamic_;
+ int extra_velocity_;
Audio_note *tied_;
bool tie_event_;
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1996--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
struct Audio_staff : public Audio_element
{
void add_audio_item (Audio_item *ai);
- void output (Midi_stream &midi_stream_r, int track, bool port);
+ void output (Midi_stream &midi_stream_r, int track, bool port, int start_tick);
Audio_staff ();
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
breathing-sign.hh
- Copyright (c) 1999--2012 Michael Krause
+ Copyright (c) 1999--2014 Michael Krause
written for the GNU LilyPond music typesetter
*/
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1999--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2003--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2010--2012 Reinhold Kainhofer <reinhold@kainhofer.com>
+ Copyright (C) 2010--2014 Reinhold Kainhofer <reinhold@kainhofer.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2000--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2007--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2003--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2003--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
+ Copyright (C) 2011--2014 Mike Solomon <mike@mikesolomon.org>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2013 Aleksandr Andreev <aleksandr.andreev@gmail.com>
+ Copyright (C) 2013--2014 Aleksandr Andreev <aleksandr.andreev@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Keyword_table *keytable_;
SCM scopes_;
SCM start_module_;
- int hidden_state_;
Input override_input_;
- SCM eval_scm (SCM, char extra_token = 0);
+ SCM eval_scm (SCM, Input, char extra_token = 0);
public:
- SCM eval_scm_token (SCM sval) { return eval_scm (sval, '#'); }
+ SCM eval_scm_token (SCM sval, Input w)
+ {
+ w.step_forward ();
+ return eval_scm (sval, w, '#');
+ }
SCM extra_tokens_;
SCM *lexval_;
Input *lexloc_;
SCM keyword_list () const;
SCM lookup_identifier (const string &s);
SCM lookup_identifier_symbol (SCM s);
- void push_extra_token (int token_type, SCM scm = SCM_UNSPECIFIED);
+ void push_extra_token (Input const &where,
+ int token_type, SCM scm = SCM_UNSPECIFIED);
+ int pop_extra_token ();
void push_chord_state (SCM alist);
void push_figuredbass_state ();
void push_lyric_state ();
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "pitch.hh"
/**
- State for the parser. Do not ever add any variables to parse
- musical content here. We still have to remove default_duration_.
+ State for the parser.
TODO: interface is too complicated
*/
{
DECLARE_SMOBS (Lily_parser);
- char const *here_str0 () const;
- Simultaneous_music *get_chord (Pitch tonic,
- vector<Pitch> *adds, vector<Pitch> *subs,
- Pitch *inversion, Pitch *bass, Duration d);
- void set_chord_tremolo (int type);
- void set_last_duration (Duration const *);
- void set_last_pitch (Pitch const *);
-
public:
Lily_lexer *lexer_;
Sources *sources_;
Duration default_duration_;
+ int default_tremolo_type_;
string output_basename_;
SCM closures_;
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1999--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
extender-spanner.hh -- part of GNU LilyPond
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
*/
#ifndef EXTENDER_SPANNER_HH
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Glen Prideaux <glenprideaux@iname.com>
+ Copyright (C) 1999--2014 Glen Prideaux <glenprideaux@iname.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>,
+ Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>,
Pal Benko <benkop@freestart.hu>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2007--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
class Midi_walker
{
public:
- Midi_walker (Audio_staff *audio_staff, Midi_track *midi_track);
+ Midi_walker (Audio_staff *audio_staff, Midi_track *midi_track, int start_tick);
~Midi_walker ();
void process ();
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2005--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Nicolas Sceaux <nicolas.sceaux@free.fr>
+ Copyright (C) 2007--2014 Nicolas Sceaux <nicolas.sceaux@free.fr>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Moment music_start_mom () const;
Music_iterator ();
void report_event (Music *);
- Context *get_outlet () const;
- void set_context (Context *);
+ virtual Context *get_outlet () const;
+ virtual void set_context (Context *);
static SCM get_static_get_iterator (Music *mus);
void init_context (Music *, Context *);
void quit ();
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Music_wrapper_iterator ();
DECLARE_CLASSNAME (Music_wrapper_iterator);
+ virtual Context *get_outlet () const;
+ virtual void set_context (Context *trans);
virtual void derived_substitute (Context *f, Context *t);
virtual void derived_mark () const;
virtual void construct_children ();
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
public:
DECLARE_GROB_INTERFACE ();
- static Spring get_spacing (Grob *me, Item *, Real, Real);
+ static Spring get_spacing (Grob *me, Item *, Spring, Real);
static void stem_dir_correction (Grob *me, Item *next_col, Real incr,
- Real *, Real *);
+ Real *space);
};
#endif /* NOTE_SPACING_HH */
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2009--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2009--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Nicolas Sceaux <nicolas.sceaux@free.fr>
+ Copyright (C) 2007--2014 Nicolas Sceaux <nicolas.sceaux@free.fr>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2007--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2004--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2004--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
extern bool parse_protect_global;
extern bool parsed_objects_should_be_dead;
-struct Parse_start
+class Parse_start
{
- char const *str;
- int nchars;
- Input start_location_;
- bool safe_;
- SCM (*func_) (Parse_start *ps);
+public:
SCM form_;
+ Input &location_;
+ bool safe_;
Lily_parser *parser_;
- Parse_start ()
+ Parse_start (SCM form, Input &location, bool safe, Lily_parser *parser) :
+ form_ (form), location_ (location), safe_ (safe), parser_ (parser)
{
- str = 0;
- nchars = 0;
- safe_ = false;
- parser_ = 0;
- form_ = SCM_UNDEFINED;
- func_ = 0;
}
};
SCM catch_protected_parse_body (void *);
SCM protected_ly_parse_scm (Parse_start *, bool);
-SCM ly_parse_scm (char const *, int *, Input, bool, Lily_parser *);
+SCM ly_parse_scm (Input&, bool, Lily_parser *);
SCM ly_eval_scm (SCM, Input, bool, Lily_parser *);
#endif /* PARSE_SCM_HH */
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2004--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2001--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
+ Copyright (C) 2011--2014 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
source file of the GNU LilyPond music typesetter
- Copyright (c) 2009--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (c) 2009--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Erik Sandberg <mandolaerik@gmail.com>
+ Copyright (C) 2006--2014 Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2008--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2008--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2013 Mike Solomon <mike@mikesolomon.org>
+ Copyright (C) 2013--2014 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Real free_head_distance_;
Real extra_encompass_collision_distance_;
Real extra_encompass_free_distance_;
+ Real gap_to_staffline_inside_;
+ Real gap_to_staffline_outside_;
Real absolute_closeness_measure_;
Real edge_slope_exponent_;
Real close_to_edge_length_;
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Drul_array<Offset> base_attachments_;
vector<Slur_configuration *> configurations_;
Real staff_space_;
+ Real line_thickness_;
Real thickness_;
Slur_score_state ();
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1999--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
static bool fills_measure (Grob *, Item *, Item *);
public:
static vector<Grob *> get_columns (Grob *me);
- static Real note_spacing (Grob *, Grob *, Grob *, Spacing_options const *);
+ static Spring note_spacing (Grob *, Grob *, Grob *, Spacing_options const *);
static Spring standard_breakable_column_spacing (Grob *me, Item *l, Item *r, Spacing_options const *);
DECLARE_SCHEME_CALLBACK (set_springs, (SCM));
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2009--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2009--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Erik Sandberg <mandolaerik@gmail.com>
+ Copyright (C) 2005--2014 Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2007--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>,
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>,
Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys
+ Copyright (C) 1996--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
--- /dev/null
+/*
+ This file is part of LilyPond, the GNU music typesetter.
+
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ LilyPond is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ LilyPond is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef Tuplet_number_HH
+#define Tuplet_number_HH
+
+#include "lily-proto.hh"
+#include "std-vector.hh"
+#include "grob-interface.hh"
+
+struct Tuplet_number
+{
+ DECLARE_SCHEME_CALLBACK (print, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_x_offset, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_y_offset, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM));
+ DECLARE_GROB_INTERFACE ();
+
+ static Real calc_offset (Spanner *me, Axis a); // not used
+
+ static Grob *select_reference_stem (Grob *me, vector<Grob *> const &cols);
+ static Drul_array<Grob *> adjacent_note_columns (Grob *me, Grob *ref_stem);
+ static bool knee_position_against_beam (Grob *me, Grob *ref_stem);
+};
+
+#endif // Tuplet_number_HH
+
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "lily-guile.hh"
bool is_unpure_pure_container (SCM s);
+bool is_unchanging_unpure_pure_container (SCM s);
SCM unpure_pure_container_unpure_part (SCM smob);
SCM unpure_pure_container_pure_part (SCM smob);
SCM ly_make_unpure_pure_container (SCM, SCM);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2003--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Input::line_number_string () const
{
if (source_file_)
- return to_string (source_file_->get_line (start_));
+ return ::to_string (source_file_->get_line (start_));
return "?";
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
+ Copyright (C) 2011--2014 Mike Solomon <mike@mikesolomon.org>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2010--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2010--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
item_->set_property ("c0-position",
get_property ("middleCClefPosition"));
- SCM last = get_property ("lastKeySignature");
- SCM key = get_property ("keySignature");
+ SCM last = get_property ("lastKeyAlterations");
+ SCM key = get_property ("keyAlterations");
if ((to_boolean (get_property ("printKeyCancellation"))
|| key == SCM_EOL)
cancellation_->set_property ("alteration-alist", restore);
cancellation_->set_property ("c0-position",
- get_property ("middleCPosition"));
+ get_property ("middleCClefPosition"));
}
}
void
Key_engraver::acknowledge_bar_line (Grob_info /* info */)
{
- if (scm_is_pair (get_property ("keySignature")))
+ if (scm_is_pair (get_property ("keyAlterations")))
create_key (true);
}
Key_engraver::process_music ()
{
if (key_event_
- || get_property ("lastKeySignature") != get_property ("keySignature"))
+ || get_property ("lastKeyAlterations") != get_property ("keyAlterations"))
create_key (false);
}
Key_engraver::stop_translation_timestep ()
{
item_ = 0;
- context ()->set_property ("lastKeySignature", get_property ("keySignature"));
+ context ()->set_property ("lastKeyAlterations", get_property ("keyAlterations"));
cancellation_ = 0;
key_event_ = 0;
}
r->origin ()->warning (_ ("Incomplete keyAlterationOrder for key signature"));
}
- context ()->set_property ("keySignature", scm_reverse_x (accs, SCM_EOL));
+ context ()->set_property ("keyAlterations", scm_reverse_x (accs, SCM_EOL));
context ()->set_property ("tonic",
r->get_property ("tonic"));
}
void
Key_engraver::initialize ()
{
- context ()->set_property ("keySignature", SCM_EOL);
- context ()->set_property ("lastKeySignature", SCM_EOL);
+ context ()->set_property ("keyAlterations", SCM_EOL);
+ context ()->set_property ("lastKeyAlterations", SCM_EOL);
Pitch p (0, 0, 0);
context ()->set_property ("tonic", p.smobbed_copy ());
"explicitKeySignatureVisibility "
"extraNatural "
"keyAlterationOrder "
- "keySignature "
- "lastKeySignature "
+ "keyAlterations "
+ "lastKeyAlterations "
"printKeyCancellation "
"middleCClefPosition ",
/* write */
- "keySignature "
- "lastKeySignature "
+ "keyAlterations "
+ "lastKeyAlterations "
"tonic "
);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
keyplacement by Mats Bengtsson
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2013 Aleksandr Andreev <aleksandr.andreev@gmail.com>
+ Copyright (C) 2013--2014 Aleksandr Andreev <aleksandr.andreev@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2013 Aleksandr Andreev <aleksandr.andreev@gmail.com>
+ Copyright (C) 2013--2014 Aleksandr Andreev <aleksandr.andreev@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Item *h = heads[i];
int pos = Staff_symbol_referencer::get_rounded_position (h);
- if (staff_extent.contains (pos))
+ if (Staff_symbol::ledger_positions (staff, pos).empty ())
continue;
/* Ambitus heads can appear out-of-order in heads[],
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
%option never-interactive
%option warn
-%x extratoken
%x chords
%x figures
%x incl
// swallow and ignore carriage returns
}
-<extratoken>{ANY_CHAR} {
- /* Generate a token without swallowing anything */
-
- /* First unswallow the eaten character */
- add_lexed_char (-YYLeng ());
- yyless (0);
-
- /* produce requested token */
- int type = scm_to_int (scm_caar (extra_tokens_));
- yylval = scm_cdar (extra_tokens_);
- extra_tokens_ = scm_cdr (extra_tokens_);
- if (scm_is_null (extra_tokens_))
- yy_pop_state ();
-
- return type;
-}
-
-<extratoken><<EOF>> {
- /* Generate a token without swallowing anything */
-
- /* produce requested token */
- int type = scm_to_int (scm_caar (extra_tokens_));
- yylval = scm_cdar (extra_tokens_);
- extra_tokens_ = scm_cdr (extra_tokens_);
- if (scm_is_null (extra_tokens_))
- yy_pop_state ();
-
- return type;
-}
-
/* Use the trailing context feature. Otherwise, the BOM will not be
found if the file starts with an identifier definition. */
<INITIAL,chords,lyrics,figures,notes>{BOM_UTF8}/.* {
}
}
<incl>(\$|#) { // scm for the filename
- int n = 0;
Input hi = here_input();
hi.step_forward ();
- SCM sval = ly_parse_scm (hi.start (), &n, hi,
- be_safe_global && is_main_input_, parser_);
- sval = eval_scm (sval);
+ SCM sval = ly_parse_scm (hi, be_safe_global && is_main_input_, parser_);
+ sval = eval_scm (sval, hi);
+ int n = hi.end () - hi.start ();
for (int i = 0; i < n; i++)
{
return MULTI_MEASURE_REST;
}
<INITIAL,chords,figures,lyrics,markup,notes># { //embedded scm
- int n = 0;
Input hi = here_input();
hi.step_forward ();
- SCM sval = ly_parse_scm (hi.start (), &n, hi,
- be_safe_global && is_main_input_, parser_);
+ SCM sval = ly_parse_scm (hi, be_safe_global && is_main_input_, parser_);
if (sval == SCM_UNDEFINED)
error_level_ = 1;
+ int n = hi.end () - hi.start ();
for (int i = 0; i < n; i++)
{
yyinput ();
}
<INITIAL,chords,figures,lyrics,markup,notes>\$ { //immediate scm
- int n = 0;
Input hi = here_input();
hi.step_forward ();
- SCM sval = ly_parse_scm (hi.start (), &n, hi,
- be_safe_global && is_main_input_, parser_);
+ SCM sval = ly_parse_scm (hi, be_safe_global && is_main_input_, parser_);
+
+ int n = hi.end () - hi.start ();
for (int i = 0; i < n; i++)
{
}
char_count_stack_.back () += n;
- sval = eval_scm (sval, '$');
+ sval = eval_scm (sval, hi, '$');
int token = scan_scm_id (sval);
if (!scm_is_eq (yylval, SCM_UNSPECIFIED))
yylval = SCM_UNSPECIFIED;
return SCORE;
}
+ \\score-lines {
+ yylval = SCM_UNSPECIFIED;
+ return SCORELINES;
+ }
\\\" {
start_command_quote ();
}
// value (for token type MARKUP_FUNCTION or
// MARKUP_LIST_FUNCTION).
- push_extra_token(EXPECT_NO_MORE_ARGS);
+ push_extra_token (here_input (), EXPECT_NO_MORE_ARGS);
s = scm_cdr(s);
for (; scm_is_pair(s); s = scm_cdr(s)) {
SCM predicate = scm_car(s);
if (predicate == ly_lily_module_constant ("markup-list?"))
- push_extra_token(EXPECT_MARKUP_LIST);
+ push_extra_token (here_input (), EXPECT_MARKUP_LIST);
else if (predicate == ly_lily_module_constant ("markup?"))
- push_extra_token(EXPECT_MARKUP);
+ push_extra_token (here_input (), EXPECT_MARKUP);
else
- push_extra_token(EXPECT_SCM, predicate);
+ push_extra_token (here_input (), EXPECT_SCM, predicate);
}
return token_type;
}
/* Make the lexer generate a token of the given type as the next token.
TODO: make it possible to define a value for the token as well */
void
-Lily_lexer::push_extra_token (int token_type, SCM scm)
+Lily_lexer::push_extra_token (Input const &where, int token_type, SCM scm)
+{
+ extra_tokens_ = scm_cons (scm_cons2 (make_input (where),
+ scm_from_int (token_type),
+ scm), extra_tokens_);
+}
+
+int
+Lily_lexer::pop_extra_token ()
{
if (scm_is_null (extra_tokens_))
- {
- if (YY_START != extratoken)
- hidden_state_ = YY_START;
- yy_push_state (extratoken);
- }
- extra_tokens_ = scm_acons (scm_from_int (token_type), scm, extra_tokens_);
+ return -1;
+
+ /* produce requested token */
+ yylloc = *unsmob_input (scm_caar (extra_tokens_));
+ int type = scm_to_int (scm_cadar (extra_tokens_));
+ yylval = scm_cddar (extra_tokens_);
+ extra_tokens_ = scm_cdr (extra_tokens_);
+ return type;
}
void
void
Lily_lexer::push_note_state (SCM alist)
{
- bool extra = (YYSTATE == extratoken);
-
SCM p = scm_assq (alist, pitchname_tab_stack_);
- if (extra)
- yy_pop_state ();
-
if (scm_is_false (p))
p = scm_cons (alist, alist_to_hashq (alist));
pitchname_tab_stack_ = scm_cons (p, pitchname_tab_stack_);
yy_push_state (notes);
-
- if (extra) {
- hidden_state_ = YYSTATE;
- yy_push_state (extratoken);
- }
}
void
Lily_lexer::pop_state ()
{
- bool extra = (YYSTATE == extratoken);
-
- if (extra)
- yy_pop_state ();
-
if (YYSTATE == notes || YYSTATE == chords)
pitchname_tab_stack_ = scm_cdr (pitchname_tab_stack_);
if (YYSTATE != maininput)
yy_pop_state ();
- if (extra) {
- hidden_state_ = YYSTATE;
- yy_push_state (extratoken);
- }
}
int
SCM sid = lookup_identifier (str);
if (Music *m = unsmob_music (sid))
{
- m->set_spot (override_input (last_input_));
+ m->set_spot (override_input (here_input ()));
}
if (sid != SCM_UNDEFINED)
SCM sid = lookup_identifier (str);
if (Music *m = unsmob_music (sid))
{
- m->set_spot (override_input (last_input_));
+ m->set_spot (override_input (here_input ()));
}
if (sid != SCM_UNDEFINED)
funtype = SCM_FUNCTION;
else programming_error ("Bad syntax function predicate");
- push_extra_token (EXPECT_NO_MORE_ARGS);
+ push_extra_token (here_input (), EXPECT_NO_MORE_ARGS);
for (s = scm_cdr (s); scm_is_pair (s); s = scm_cdr (s))
{
SCM optional = SCM_UNDEFINED;
}
if (ly_is_procedure (cs))
- push_extra_token (EXPECT_SCM, cs);
+ push_extra_token (here_input (), EXPECT_SCM, cs);
else
{
programming_error ("Function parameter without type-checking predicate");
continue;
}
if (!scm_is_eq (optional, SCM_UNDEFINED))
- push_extra_token (EXPECT_OPTIONAL, optional);
+ push_extra_token (here_input (), EXPECT_OPTIONAL, optional);
}
return funtype;
}
int
Lily_lexer::get_state () const
{
- if (YY_START == extratoken)
- return hidden_state_;
- else
- return YY_START;
+ return YY_START;
}
bool
// this function is private.
SCM
-Lily_lexer::eval_scm (SCM readerdata, char extra_token)
+Lily_lexer::eval_scm (SCM readerdata, Input hi, char extra_token)
{
SCM sval = SCM_UNDEFINED;
if (!SCM_UNBNDP (readerdata))
{
- sval = ly_eval_scm (scm_car (readerdata),
- *unsmob_input (scm_cdr (readerdata)),
+ sval = ly_eval_scm (readerdata,
+ hi,
be_safe_global && is_main_input_,
parser_);
}
if (Music *m = unsmob_music (v))
{
if (!unsmob_input (m->get_property ("origin")))
- m->set_spot (override_input (last_input_));
+ m->set_spot (override_input (here_input ()));
}
int token;
case '$':
token = scan_scm_id (v);
if (!scm_is_eq (yylval, SCM_UNSPECIFIED))
- push_extra_token (token, yylval);
+ push_extra_token (here_input (),
+ token, yylval);
break;
case '#':
- push_extra_token (SCM_IDENTIFIER, v);
+ push_extra_token (here_input (),
+ SCM_IDENTIFIER, v);
break;
}
}
if (Music *m = unsmob_music (sval))
{
if (!unsmob_input (m->get_property ("origin")))
- m->set_spot (override_input (last_input_));
+ m->set_spot (override_input (here_input ()));
}
return sval;
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
lexer_ = 0;
sources_ = sources;
default_duration_ = Duration (2, 0);
+ default_tremolo_type_ = 8;
error_level_ = 0;
closures_ = SCM_EOL;
lexer_ = 0;
sources_ = src.sources_;
default_duration_ = src.default_duration_;
+ default_tremolo_type_ = src.default_tremolo_type_;
error_level_ = 0;
output_basename_ = src.output_basename_;
closures_ = closures;
SCM mod = lexer_->set_current_scope ();
SCM parser = lexer_->lookup_identifier_symbol (ly_symbol2scm ("parser"));
lexer_->set_identifier (ly_symbol2scm ("parser"), self_scm ());
- lexer_->push_extra_token (EMBEDDED_LILY);
+ lexer_->push_extra_token (Input (), EMBEDDED_LILY);
SCM result = do_yyparse ();
lexer_->set_identifier (ly_symbol2scm ("parser"), parser);
lexer_ = 0;
}
-char const *
-Lily_parser::here_str0 () const
-{
- return lexer_->here_str0 ();
-}
-
void
Lily_parser::parser_error (const string &s)
{
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1999--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
VALUE "FileDescription", "LilyPond"
VALUE "FileVersion", "@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_LEVEL@.@BUILD_VERSION@"
VALUE "InternalName", "LilyPond@"
- VALUE "LegalCopyright ", "Copyright (C) 1995--2012 Han-Wen Nienhuys and Jan Nieuwenhuizen, and others."
+ VALUE "LegalCopyright ", "Copyright (C) 1995--2014 Han-Wen Nienhuys and Jan Nieuwenhuizen, and others."
VALUE "OriginalFilename", "lilypond.exe"
VALUE "ProductName", "LilyPond"
VALUE "ProductVersion", "@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_LEVEL@"
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2003--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*/
{
/* Do not update the copyright years here, run `make grand-replace' */
- printf ("%s", (_f ("Copyright (c) %s by\n%s and others.", "1996--2012",
+ printf ("%s", (_f ("Copyright (c) %s by\n%s and others.", "1996--2014",
AUTHORS).c_str ()));
printf ("\n");
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>,
+ Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>,
Pal Benko <benkop@freestart.hu>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>,
+ Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>,
Pal Benko <benkop@freestart.hu>
LilyPond is free software: you can redistribute it and/or modify
duration_log--;
case MLP_BREVIS:
duration_log--;
- suffix = to_string (duration_log) + color
+ suffix = ::to_string (duration_log) + color
+ (duration_log < -1 ? "lig" : "") + "mensural";
index = prefix + "s";
out = fm->find_by_name (index + "r" + suffix);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2007--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2013 by Heikki Tauriainen <g034737@welho.com>.
+ Copyright (C) 2013--2014 by Heikki Tauriainen <g034737@welho.com>.
Adapted from performer implementations
- Copyright (C) 1996--2012 Jan Nieuwenhuizen <janneke@gnu.org>,
+ Copyright (C) 1996--2014 Jan Nieuwenhuizen <janneke@gnu.org>,
Han-Wen Nienhyus <hanwen@xs4all.nl> and others.
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Midi_note::Midi_note (Audio_note *a)
: Midi_channel_item (a),
audio_ (a),
- dynamic_byte_ (a->dynamic_ && a->dynamic_->volume_ >= 0
- ? Byte (a->dynamic_->volume_ * 0x7f) : Byte (0x5a))
+ dynamic_byte_ (min (max (Byte ((a->dynamic_ && a->dynamic_->volume_ >= 0
+ ? a->dynamic_->volume_ * 0x7f : 0x5a)
+ + a->extra_velocity_),
+ Byte (0)), Byte (0x7f)))
{
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
return a->get_column ()->when_ < b->get_column ()->when_;
}
-Midi_walker::Midi_walker (Audio_staff *audio_staff, Midi_track *track)
+Midi_walker::Midi_walker (Audio_staff *audio_staff, Midi_track *track, int start_tick)
{
track_ = track;
index_ = 0;
items_ = audio_staff->audio_items_;
vector_sort (items_, audio_item_less);
- last_tick_ = 0;
+ //Scores that begin with grace notes start at negative times. This
+ //is OK - MIDI output doesn't use absolute ticks, only differences.
+ last_tick_ = start_tick;
percussion_ = audio_staff->percussion_;
merge_unisons_ = audio_staff->merge_unisons_;
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Nicolas Sceaux <nicolas.sceaux@free.fr>
+ Copyright (C) 2007--2014 Nicolas Sceaux <nicolas.sceaux@free.fr>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
int
intlog2 (int d)
{
- assert (d);
+ if (d <= 0)
+ error ("intlog2 with negative argument: " + ::to_string (d));
int i = 0;
while ((d != 1))
{
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Careful with GC, although we intend the following as pointers
only, we _must_ mark them.
*/
- if (mus->get_outlet ())
- scm_gc_mark (mus->get_outlet ()->self_scm ());
+ /* Use handle_ directly as get_outlet is a virtual function and we
+ need to protect the context until Music_iterator::quit is being
+ run. */
+ if (mus->handle_.get_context ())
+ scm_gc_mark (mus->handle_.get_context ()->self_scm ());
if (mus->music_)
scm_gc_mark (mus->music_->self_scm ());
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
1, 0, 0, (SCM lst),
"Is @var{lst} a list of music objects?")
{
- if (scm_list_p (lst) == SCM_BOOL_T)
- while (scm_is_pair (lst))
- {
- if (!unsmob_music (scm_car (lst)))
- return SCM_BOOL_F;
- lst = scm_cdr (lst);
- }
+ if (!ly_is_list (lst))
+ return SCM_BOOL_F;
+
+ while (scm_is_pair (lst))
+ {
+ if (!unsmob_music (scm_car (lst)))
+ return SCM_BOOL_F;
+ lst = scm_cdr (lst);
+ }
return SCM_BOOL_T;
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
return Music_iterator::pending_moment ();
}
+Context *
+Music_wrapper_iterator::get_outlet () const
+{
+ if (child_iter_)
+ return child_iter_->get_outlet ();
+ return Music_iterator::get_outlet ();
+}
+
+void
+Music_wrapper_iterator::set_context (Context *trans)
+{
+ if (child_iter_)
+ child_iter_->set_context (trans);
+ Music_iterator::set_context (trans);
+}
+
IMPLEMENT_CTOR_CALLBACK (Music_wrapper_iterator);
bool
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
if (Pitch *p = unsmob_pitch (val))
{
Pitch transposed = p->transposed (delta);
- if (transposed.get_alteration ().abs () > Rational (1, 1))
- {
- string delta_str;
- if (delta.get_alteration ().abs () > Rational (1, 1))
- delta_str = (delta.normalized ().to_string ()
- + " " + _ ("(normalized pitch)"));
- else
- delta_str = delta.to_string ();
-
- warning (_f ("Transposing %s by %s makes alteration larger than double",
- p->to_string (),
- delta_str));
- transposed = transposed.normalized ();
- }
if (prop == ly_symbol2scm ("tonic"))
transposed = Pitch (-1, transposed.get_notename (),
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2010--2012 Nicolas Sceaux <nicolas.sceaux@free.fr>
+ Copyright (C) 2010--2014 Nicolas Sceaux <nicolas.sceaux@free.fr>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
{
string style = robust_symbol2string (me->get_property ("style"), "default");
- string suffix = to_string (min (robust_scm2int (me->get_property ("duration-log"), 2), 2));
+ string suffix = ::to_string (min (robust_scm2int (me->get_property ("duration-log"), 2), 2));
if (style != "default")
suffix = robust_scm2string (me->get_property ("glyph-name"), "");
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1996--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
void process_music ();
DECLARE_TRANSLATOR_LISTENER (note);
+ DECLARE_TRANSLATOR_LISTENER (breathing);
private:
vector<Stream_event *> note_evs_;
vector<Audio_note *> notes_;
{
SCM articulations = n->get_property ("articulations");
Stream_event *tie_event = 0;
- for (SCM s = articulations;
- !tie_event && scm_is_pair (s);
- s = scm_cdr (s))
+ Moment len = get_event_length (n, now_mom ());
+ int velocity = 0;
+ for (SCM s = articulations; scm_is_pair (s); s = scm_cdr (s))
{
Stream_event *ev = unsmob_stream_event (scm_car (s));
if (!ev)
if (ev->in_event_class ("tie-event"))
tie_event = ev;
+ SCM f = ev->get_property ("midi-length");
+ if (ly_is_procedure (f))
+ len = robust_scm2moment (scm_call_2 (f, len.smobbed_copy (),
+ context ()->self_scm ()),
+ len);
+ velocity += robust_scm2int (ev->get_property ("midi-extra-velocity"), 0);
}
- Moment len = get_event_length (n, now_mom ());
-
Audio_note *p = new Audio_note (*pitp, len,
- tie_event, transposing);
+ tie_event, transposing, velocity);
Audio_element_info info (p, n);
announce_element (info);
notes_.push_back (p);
/*
- Shorten previous note. If it was part of a tie, shorten
- the first note in the tie.
+ Grace notes shorten the previous non-grace note. If it was
+ part of a tie, shorten the first note in the tie.
*/
if (now_mom ().grace_part_)
{
for (vsize i = 0; i < last_notes_.size (); i++)
{
Audio_note *tie_head = last_notes_[i]->tie_head ();
- tie_head->length_mom_ += Moment (0, now_mom ().grace_part_);
+ Moment start = tie_head->audio_column_->when ();
+ //Shorten the note if it would overlap. It might
+ //not if there's a rest in between.
+ if (start + tie_head->length_mom_ > now_mom ())
+ tie_head->length_mom_ = now_mom () - start;
}
}
}
note_evs_.push_back (ev);
}
+IMPLEMENT_TRANSLATOR_LISTENER (Note_performer, breathing)
+void
+Note_performer::listen_breathing (Stream_event *ev)
+{
+ //Shorten previous note if needed
+ SCM f = ev->get_property ("midi-length");
+ if (ly_is_procedure (f))
+ for (vsize i = 0; i < last_notes_.size (); i++)
+ {
+ //Pass midi-length the available time since the last note started,
+ //including any intervening rests. It returns how much is left for the
+ //note.
+ Moment start = last_notes_[i]->audio_column_->when ();
+ Moment available = now_mom () - start;
+ Moment len = robust_scm2moment (scm_call_2 (f, available.smobbed_copy (),
+ context ()->self_scm ()), available);
+ //Take time from the first note of the tie, since it has all the length.
+ Audio_note *tie_head = last_notes_[i]->tie_head ();
+ len += start - tie_head->audio_column_->when ();
+ if (len < tie_head->length_mom_)
+ tie_head->length_mom_ = len;
+ }
+}
+
ADD_TRANSLATOR (Note_performer,
/* doc */
"",
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "warn.hh"
/*
- TODO: detect hshifts due to collisions, and account for them in
- spacing?
+ Adjust the ideal and minimum distance between note columns,
+ based on the notehead size, skylines, and optical illusions.
*/
-
Spring
Note_spacing::get_spacing (Grob *me, Item *right_col,
- Real base_space, Real increment)
+ Spring base, Real increment)
{
vector<Item *> note_columns = Spacing_interface::left_note_columns (me);
Real left_head_end = 0;
The main factor that determines the amount of space is the width of the
note head (or the rest). For example, a quarter rest gets almost 0.5 ss
less horizontal space than a note.
-
- The other parts of a note column (eg. flags, accidentals, etc.) don't get
- the full amount of space. We give them half the amount of space, but then
- adjust things so there are no collisions.
*/
+ Real ideal = base.distance () - increment + left_head_end;
Drul_array<Skyline> skys = Spacing_interface::skylines (me, right_col);
Real distance = skys[LEFT].distance (skys[RIGHT], robust_scm2double (right_col->get_property ("skyline-vertical-padding"), 0.0));
Real min_dist = max (0.0, distance);
- Real min_desired_space = left_head_end + (min_dist - left_head_end + base_space - increment) / 2;
- Real ideal = base_space - increment + left_head_end;
+ base.set_min_distance (min_dist);
/* If we have a NonMusical column on the right, we measure the ideal distance
to the bar-line (if present), not the start of the column. */
Bar_line::non_empty_barline);
if (bar)
+ ideal -= bar->extent (right_col, X_AXIS)[LEFT];
+ else
{
- Real shift = bar->extent (right_col, X_AXIS)[LEFT];
- ideal -= shift;
- min_desired_space -= max (shift, 0.0);
+ /* Measure ideal distance to the right side of the NonMusical column
+ but keep at least half the gap we would have had to a note */
+ Real min_desired_space = (ideal + min_dist) / 2.0;
+ ideal -= right_col->extent (right_col, X_AXIS)[RIGHT];
+ ideal = max (ideal, min_desired_space);
}
- else
- ideal -= right_col->extent (right_col, X_AXIS)[RIGHT];
}
- ideal = max (ideal, min_desired_space);
- stem_dir_correction (me, right_col, increment, &ideal, &min_desired_space);
+ stem_dir_correction (me, right_col, increment, &ideal);
- /* TODO: grace notes look bad when things are stretched. Should we increase
- their stretch strength? */
- Spring ret (max (0.0, ideal), min_dist);
- ret.set_inverse_compress_strength (max (0.0, ideal - min_desired_space));
- ret.set_inverse_stretch_strength (max (0.1, base_space - increment));
- return ret;
+ base.set_distance (max (0.0, ideal));
+ return base;
}
static Real
void
Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn,
Real increment,
- Real *space, Real *fixed)
+ Real *space)
{
Drul_array<Direction> stem_dirs (CENTER, CENTER);
Drul_array<Interval> stem_posns;
&& !acc_right)
correction = same_direction_correction (me, head_posns);
- *fixed += correction;
*space += correction;
/* there used to be a correction for bar_xextent () here, but
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
if (page_count > 1 && best.systems_per_page_[page_count - 2] > 1)
min_sys_count -= best.systems_per_page_[page_count - 2];
- min_sys_count = max (min_sys_count, (vsize)1);
+ if (min_sys_count > ideal_sys_count // subtraction wrapped around
+ || min_sys_count <= 0)
+ min_sys_count = 1;
}
}
else
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys
+ Copyright (C) 2000--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
else
{
ret.push_back (orig[i]);
- ret.back ().force_ = 0;
}
}
return ret;
else
config = layout.solution (rag);
- last_page_force = layout.force ();
+ if ((ragged () && layout.force () < 0.0)
+ || isinf (layout.force ()))
+ warning (_f ("page %d has been compressed", page_num));
+ else
+ last_page_force = layout.force ();
systems_configs_fncounts = scm_cons (scm_cons (lines, config), systems_configs_fncounts);
footnote_count += fn_lines;
cur_page_height -= min_whitespace_at_top_of_page (cached_line_details_[page_starter]);
cur_page_height -= min_whitespace_at_bottom_of_page (cached_line_details_.back ());
- Real cur_height = cur_rod_height + ((ragged_last () || ragged ()) ? cur_spring_height : 0);
if (!too_few_lines (line_count - cached_line_details_.back ().compressed_nontitle_lines_count_)
- && cur_height > cur_page_height
+ && cur_rod_height > cur_page_height
/* don't increase the page count if the last page had only one system */
&& cur_rod_height > cached_line_details_.back ().full_height ())
ret++;
line_penalty += uncompressed_line_details_[i].break_penalty_;
}
- for (vsize i = 0; i < res.force_.size (); i++)
+ for (vsize i = ragged () ? res.force_.size () - 1 : 0;
+ i < res.force_.size () - ragged_last ();
+ i++)
{
Real f = res.force_[i];
page1_penalty[i] = line_count_penalty (page1_line_count);
page1_status[i] = line_count_status (page1_line_count);
- if (ragged2)
+ if (ragged1)
page2_force[page2_force.size () - 1 - i]
= (page2.force_ < 0 && i + 1 < page1_force.size ()) ? infinity_f : 0;
+ else if (ragged2 && page2.force_ > 0)
+ page2_force[page2_force.size () - 1 - i] = 0.0;
else
page2_force[page2_force.size () - 1 - i] = page2.force_;
page2_penalty[page2_penalty.size () - 1 - i] = line_count_penalty (page2_line_count);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2011--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2009--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2009--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Real overflow = spacer.configuration_length (spacer.force ())
- page_height_;
if (ragged && overflow < 1e-6)
- warning (_ ("cannot fit music on page: ragged-spacing was requested, but page was compressed"));
+ warning (_ ("ragged-bottom was specified, but page must be compressed"));
else
{
- warning (_f ("cannot fit music on page: overflow is %f",
+ warning (_f ("compressing over-full page by %.1f staff-spaces",
overflow));
- warning (_ ("compressing music to fit"));
+ force_ = -infinity_f;
vsize space_count = solution_.size ();
Real spacing_increment = overflow / (space_count - 2);
for (vsize i = 2; i < space_count; i++)
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Nicolas Sceaux <nicolas.sceaux@free.fr>
+ Copyright (C) 2007--2014 Nicolas Sceaux <nicolas.sceaux@free.fr>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Nicolas Sceaux <nicolas.sceaux@free.fr>
+ Copyright (C) 2007--2014 Nicolas Sceaux <nicolas.sceaux@free.fr>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2007--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
space.prepend_system (lines_[page_start]);
bool overfull = (space.rod_height_ > paper_height
- || (ragged
+ || (ragged_
&& (space.rod_height_ + space.spring_len_ > paper_height)));
// This 'if' statement is a little hard to parse. It won't consider this configuration
// if it is overfull unless the current configuration is the first one with this start
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
for (vsize i = 0; i < last_break_position (); i++)
{
calc_subproblem (i);
- progress_indication (string ("[") + to_string (i + 1) + "]");
+ progress_indication (string ("[") + ::to_string (i + 1) + "]");
}
progress_indication ("\n");
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2004--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Paper_column_engraver::finalize ()
{
if (! (breaks_ % 8))
- progress_indication ("[" + to_string (breaks_) + "]");
+ progress_indication ("[" + ::to_string (breaks_) + "]");
if (!made_columns_)
{
breaks_++;
if (! (breaks_ % 8))
- progress_indication ("[" + to_string (breaks_) + "]");
+ progress_indication ("[" + ::to_string (breaks_) + "]");
}
context ()->get_score_context ()->unset_property (ly_symbol2scm ("forbidBreak"));
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
{
Paper_column *me = dynamic_cast<Paper_column *> (unsmob_grob (p));
- string r = to_string (Paper_column::get_rank (me));
+ string r = ::to_string (Paper_column::get_rank (me));
Moment *mom = unsmob_moment (me->get_property ("when"));
string when = mom ? mom->to_string () : "?/?";
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2008--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2008--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2004--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
SCM
internal_ly_parse_scm (Parse_start *ps)
{
- Source_file *sf = ps->start_location_.get_source_file ();
+ Input &hi = ps->location_;
+ Source_file *sf = hi.get_source_file ();
SCM port = sf->get_port ();
- long off = ps->start_location_.start () - sf->c_str ();
+ long off = hi.start () - sf->c_str ();
scm_seek (port, scm_from_long (off), scm_from_long (SEEK_SET));
SCM from = scm_ftell (port);
- scm_set_port_line_x (port, scm_from_int (ps->start_location_.line_number () - 1));
- scm_set_port_column_x (port, scm_from_int (ps->start_location_.column_number () - 1));
+ scm_set_port_line_x (port, scm_from_int (hi.line_number () - 1));
+ scm_set_port_column_x (port, scm_from_int (hi.column_number () - 1));
bool multiple = ly_is_equal (scm_peek_char (port), SCM_MAKE_CHAR ('@'));
SCM form = scm_read (port);
SCM to = scm_ftell (port);
- ps->nchars = scm_to_int (to) - scm_to_int (from);
+ hi.set (hi.get_source_file (),
+ hi.start (),
+ hi.start () + scm_to_int (scm_difference (to, from)));
if (!SCM_EOF_OBJECT_P (form))
{
form = scm_list_3 (ly_symbol2scm ("apply"),
ly_symbol2scm ("values"),
form);
- return scm_cons (form, make_input (ps->start_location_));
+ return form;
}
/* Don't close the port here; if we re-enter this function via a
SCM
catch_protected_parse_body (void *p)
{
- Parse_start *ps = (Parse_start *) p;
+ return internal_ly_parse_scm (static_cast<Parse_start *> (p));
+}
- return (*ps->func_) (ps);
+SCM
+catch_protected_eval_body (void *p)
+{
+ return internal_ly_eval_scm (static_cast<Parse_start *> (p));
}
SCM
-parse_handler (void *data, SCM tag, SCM args)
+parse_handler (void *data, SCM /*tag*/, SCM args)
{
Parse_start *ps = (Parse_start *) data;
- ps->start_location_.error (_ ("GUILE signaled an error for the expression beginning here"));
+ ps->location_.error (_ ("GUILE signaled an error for the expression beginning here"));
if (scm_ilength (args) > 2)
scm_display_error_message (scm_cadr (args), scm_caddr (args), scm_current_error_port ());
- if (tag == ly_symbol2scm ("read-error"))
- ps->nchars = 1;
-
return SCM_UNDEFINED;
}
Catch #t : catch all Scheme level errors.
*/
return scm_internal_catch (SCM_BOOL_T,
- &catch_protected_parse_body,
+ catch_protected_parse_body,
+ (void *) ps,
+ &parse_handler, (void *) ps);
+}
+
+SCM
+protected_ly_eval_scm (Parse_start *ps)
+{
+ /*
+ Catch #t : catch all Scheme level errors.
+ */
+ return scm_internal_catch (SCM_BOOL_T,
+ catch_protected_eval_body,
(void *) ps,
&parse_handler, (void *) ps);
}
/* Try parsing. Upon failure return SCM_UNDEFINED. */
SCM
-ly_parse_scm (char const *s, int *n, Input i, bool safe, Lily_parser *parser)
+ly_parse_scm (Input &i, bool safe, Lily_parser *parser)
{
- Parse_start ps;
- ps.str = s;
- ps.start_location_ = i;
- ps.safe_ = safe;
- ps.form_ = SCM_UNDEFINED;
- ps.parser_ = parser;
- ps.func_ = internal_ly_parse_scm;
+ Parse_start ps (SCM_UNDEFINED, i, safe, parser);
SCM ans = parse_protect_global ? protected_ly_parse_scm (&ps)
: internal_ly_parse_scm (&ps);
- *n = ps.nchars;
return ans;
}
SCM
ly_eval_scm (SCM form, Input i, bool safe, Lily_parser *parser)
{
- Parse_start ps;
- ps.str = 0;
- ps.start_location_ = i;
- ps.safe_ = safe;
- ps.form_ = form;
- ps.parser_ = parser;
- ps.func_ = internal_ly_eval_scm;
+ Parse_start ps (form, i, safe, parser);
- SCM ans = parse_protect_global ? protected_ly_parse_scm (&ps)
+ SCM ans = parse_protect_global ? protected_ly_eval_scm (&ps)
: internal_ly_eval_scm (&ps);
scm_remember_upto_here_1 (form);
return ans;
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
#define YYLLOC_DEFAULT(Current,Rhs,N) \
((Current).set_location ((Rhs)[1], (Rhs)[N]))
-#define YYPRINT(file, type, value) \
- do { \
- if (scm_is_eq (value, SCM_UNSPECIFIED)) \
- break; \
- char *p = scm_to_locale_string \
- (scm_simple_format (SCM_BOOL_F, \
- scm_from_locale_string ("~S"), \
- scm_list_1 (value))); \
- fputs (p, file); \
- free (p); \
- } while (0)
+#define YYPRINT(file, type, value) \
+ do { \
+ if (scm_is_eq (value, SCM_UNSPECIFIED)) \
+ break; \
+ SCM s = scm_call_2 (ly_lily_module_constant ("value->lily-string"), \
+ value, \
+ parser->self_scm ()); \
+ char *p = scm_to_locale_string (s); \
+ fputs (p, file); \
+ free (p); \
+ } while (0)
%}
of the parse stack onto the heap. */
%left PREC_BOT
-%nonassoc REPEAT REPEAT_IDENTIFIER
+%nonassoc REPEAT
%nonassoc ALTERNATIVE
/* The above precedences tackle the shift/reduce problem
%left ADDLYRICS
%right ':' UNSIGNED REAL E_UNSIGNED EVENT_IDENTIFIER EVENT_FUNCTION '^' '_'
- HYPHEN EXTENDER DURATION_IDENTIFIER
+ HYPHEN EXTENDER DURATION_IDENTIFIER '!'
/* The above are needed for collecting tremoli and other items (that
could otherwise be interpreted as belonging to the next function
parser->parser_error (*i, s);
}
+// The following are somewhat precarious constructs as they may change
+// the value of the lookahead token. That implies that the lookahead
+// token must not yet have made an impact on the state stack other
+// than causing the reduction of the current rule, or switching the
+// lookahead token while Bison is mulling it over will cause trouble.
+
#define MYBACKUP(Token, Value, Location) \
-do \
- if (yychar == YYEMPTY) \
- { \
+ do { \
+ if (yychar != YYEMPTY) \
+ parser->lexer_->push_extra_token \
+ (yylloc, yychar, yylval); \
if (Token) \
- parser->lexer_->push_extra_token (Token, Value); \
- parser->lexer_->push_extra_token (BACKUP); \
- } else { \
- parser->parser_error \
- (Location, _("Too much lookahead")); \
- } \
-while (0)
+ parser->lexer_->push_extra_token \
+ (Location, Token, Value); \
+ parser->lexer_->push_extra_token (Location, BACKUP); \
+ yychar = YYEMPTY; \
+ } while (0)
#define MYREPARSE(Location, Pred, Token, Value) \
-do \
- if (yychar == YYEMPTY) \
- { \
- parser->lexer_->push_extra_token (Token, Value); \
- parser->lexer_->push_extra_token (REPARSE, \
- Pred); \
- } else { \
- parser->parser_error \
- (Location, _("Too much lookahead")); \
- } \
-while (0)
+ do { \
+ if (yychar != YYEMPTY) \
+ parser->lexer_->push_extra_token \
+ (yylloc, yychar, yylval); \
+ parser->lexer_->push_extra_token \
+ (Location, Token, Value); \
+ parser->lexer_->push_extra_token \
+ (Location, REPARSE, Pred); \
+ yychar = YYEMPTY; \
+ } while (0)
%}
%token REST "\\rest"
%token REVERT "\\revert"
%token SCORE "\\score"
+%token SCORELINES "\\score-lines"
%token SEQUENTIAL "\\sequential"
%token SET "\\set"
%token SIMULTANEOUS "\\simultaneous"
%token EMBEDDED_LILY "#{"
%token BOOK_IDENTIFIER
-%token CHORD_BODY_IDENTIFIER
%token CHORD_MODIFIER
%token CHORD_REPETITION
-%token CONTEXT_DEF_IDENTIFIER
%token CONTEXT_MOD_IDENTIFIER
%token DRUM_PITCH
%token PITCH_IDENTIFIER
%token MUSIC_IDENTIFIER
%token NOTENAME_PITCH
%token NUMBER_IDENTIFIER
-%token OUTPUT_DEF_IDENTIFIER
%token REAL
-%token REPEAT_IDENTIFIER
%token RESTNAME
%token SCM_ARG
%token SCM_FUNCTION
SCM proc = parser->lexer_->lookup_identifier ("toplevel-bookpart-handler");
scm_call_2 (proc, parser->self_scm (), $1);
}
+ | BOOK_IDENTIFIER {
+ SCM proc = parser->lexer_->lookup_identifier
+ (unsmob_book($1)->paper_
+ ? "toplevel-book-handler"
+ : "toplevel-bookpart-handler");
+ scm_call_2 (proc, parser->self_scm (), $1);
+ }
| score_block {
SCM proc = parser->lexer_->lookup_identifier ("toplevel-score-handler");
scm_call_2 (proc, parser->self_scm (), $1);
}
| SCM_TOKEN {
// Evaluate and ignore #xxx, as opposed to \xxx
- parser->lexer_->eval_scm_token ($1);
+ parser->lexer_->eval_scm_token ($1, @1);
}
| embedded_scm_active
{
{
SCM proc = parser->lexer_->lookup_identifier ("toplevel-text-handler");
scm_call_2 (proc, parser->self_scm (), out);
+ } else if (unsmob_score ($1))
+ {
+ SCM proc = parser->lexer_->lookup_identifier ("toplevel-score-handler");
+ scm_call_2 (proc, parser->self_scm (), $1);
+ } else if (Output_def * od = unsmob_output_def ($1)) {
+ SCM id = SCM_EOL;
+
+ if (od->c_variable ("is-paper") == SCM_BOOL_T)
+ id = ly_symbol2scm ("$defaultpaper");
+ else if (od->c_variable ("is-midi") == SCM_BOOL_T)
+ id = ly_symbol2scm ("$defaultmidi");
+ else if (od->c_variable ("is-layout") == SCM_BOOL_T)
+ id = ly_symbol2scm ("$defaultlayout");
+
+ parser->lexer_->set_identifier (id, $1);
} else if (!scm_is_eq ($1, SCM_UNSPECIFIED))
parser->parser_error (@1, _("bad expression type"));
}
embedded_scm_bare:
SCM_TOKEN
{
- $$ = parser->lexer_->eval_scm_token ($1);
+ $$ = parser->lexer_->eval_scm_token ($1, @1);
}
| SCM_IDENTIFIER
;
SCM_ARG
| SCM_TOKEN
{
- $$ = parser->lexer_->eval_scm_token ($1);
+ $$ = parser->lexer_->eval_scm_token ($1, @1);
}
+ | FRACTION
| full_markup_list
| context_modification
| score_block
}
;
+embedded_lilypond_number:
+ '-' embedded_lilypond_number
+ {
+ $$ = scm_difference ($2, SCM_UNDEFINED);
+ }
+ | bare_number_common
+ | UNSIGNED NUMBER_IDENTIFIER
+ {
+ $$ = scm_product ($1, $2);
+ }
+ ;
+
embedded_lilypond:
/* empty */
{
// contains no source location.
$$ = MAKE_SYNTAX ("void-music", @$);
}
- | identifier_init
+ | identifier_init_nonumber
+ | embedded_lilypond_number
+ | post_event post_events
+ {
+ $$ = scm_reverse_x ($2, SCM_EOL);
+ if (Music *m = unsmob_music ($1))
+ {
+ if (m->is_mus_type ("post-event-wrapper"))
+ $$ = scm_append
+ (scm_list_2 (m->get_property ("elements"),
+ $$));
+ else
+ $$ = scm_cons ($1, $$);
+ }
+ if (scm_is_pair ($$)
+ && scm_is_null (scm_cdr ($$)))
+ $$ = scm_car ($$);
+ else
+ {
+ Music * m = MY_MAKE_MUSIC ("PostEvents", @$);
+ m->set_property ("elements", $$);
+ $$ = m->unprotect ();
+ }
+ }
+ | multiplied_duration
| music_embedded music_embedded music_list {
$3 = scm_reverse_x ($3, SCM_EOL);
if (unsmob_music ($2))
parser->lexer_->set_identifier (path, $4);
$$ = SCM_UNSPECIFIED;
}
+ | assignment_id '.' property_path '=' identifier_init {
+ SCM path = scm_cons (scm_string_to_symbol ($1), $3);
+ parser->lexer_->set_identifier (path, $5);
+ $$ = SCM_UNSPECIFIED;
+ }
;
identifier_init:
- score_block
- | book_block
- | bookpart_block
- | output_def
- | context_def_spec_block
- | music_assign
+ identifier_init_nonumber
+ | number_expression
| post_event_nofinger post_events
{
$$ = scm_reverse_x ($2, SCM_EOL);
$$ = m->unprotect ();
}
}
- | number_expression
+ ;
+
+identifier_init_nonumber:
+ score_block
+ | book_block
+ | bookpart_block
+ | output_def
+ | context_def_spec_block
+ | music_assign
+ | pitch_or_music
| FRACTION
| string
| embedded_scm
context_def_spec_block:
CONTEXT '{' context_def_spec_body '}'
- {
+ {
$$ = $3;
- unsmob_context_def ($$)->origin ()->set_spot (@$);
+ Context_def *td = unsmob_context_def ($$);
+ if (!td) {
+ $$ = Context_def::make_scm ();
+ td = unsmob_context_def ($$);
+ }
+ td->origin ()->set_spot (@$);
}
;
}
;
-context_mod_embedded:
- context_mod_arg
- {
- if (unsmob_music ($1)) {
- SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
- $1 = scm_call_2 (proc, parser->self_scm (), $1);
- }
- if (unsmob_context_mod ($1))
- $$ = $1;
- else {
- parser->parser_error (@1, _ ("not a context mod"));
- $$ = Context_mod ().smobbed_copy ();
- }
- }
- ;
-
context_def_spec_body:
/**/ {
- $$ = Context_def::make_scm ();
- }
- | CONTEXT_DEF_IDENTIFIER {
- $$ = $1;
+ $$ = SCM_UNSPECIFIED;
}
| context_def_spec_body context_mod {
- if (!SCM_UNBNDP ($2))
+ if (!SCM_UNBNDP ($2)) {
+ Context_def *td = unsmob_context_def ($$);
+ if (!td) {
+ $$ = Context_def::make_scm ();
+ td = unsmob_context_def ($$);
+ }
unsmob_context_def ($$)->add_context_mod ($2);
+ }
}
| context_def_spec_body context_modification {
Context_def *td = unsmob_context_def ($$);
+ if (!td) {
+ $$ = Context_def::make_scm ();
+ td = unsmob_context_def ($$);
+ }
SCM new_mods = unsmob_context_mod ($2)->get_mods ();
for (SCM m = new_mods; scm_is_pair (m); m = scm_cdr (m)) {
td->add_context_mod (scm_car (m));
}
}
- | context_def_spec_body context_mod_embedded {
- Context_def *td = unsmob_context_def ($$);
- SCM new_mods = unsmob_context_mod ($2)->get_mods ();
- for (SCM m = new_mods; scm_is_pair (m); m = scm_cdr (m)) {
- td->add_context_mod (scm_car (m));
- }
+ | context_def_spec_body context_mod_arg {
+ Context_def *td = unsmob_context_def ($1);
+ if (scm_is_eq ($2, SCM_UNSPECIFIED))
+ ;
+ else if (!td && unsmob_context_def ($2))
+ $$ = $2;
+ else {
+ if (!td) {
+ $$ = Context_def::make_scm ();
+ td = unsmob_context_def ($$);
+ }
+ if (unsmob_music ($2)) {
+ SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
+ $2 = scm_call_2 (proc, parser->self_scm (), $2);
+ }
+ if (Context_mod *cm = unsmob_context_mod ($2)) {
+ for (SCM m = cm->get_mods (); scm_is_pair (m); m = scm_cdr (m)) {
+ td->add_context_mod (scm_car (m));
+ }
+ } else
+ parser->parser_error (@2, _ ("not a context mod"));
+ }
}
;
}
| book_body SCM_TOKEN {
// Evaluate and ignore #xxx, as opposed to \xxx
- parser->lexer_->eval_scm_token ($2);
+ parser->lexer_->eval_scm_token ($2, @2);
}
| book_body embedded_scm_active
{
{
SCM proc = parser->lexer_->lookup_identifier ("book-text-handler");
scm_call_2 (proc, $1, out);
+ } else if (unsmob_score ($2))
+ {
+ SCM proc = parser->lexer_->lookup_identifier ("book-score-handler");
+ scm_call_2 (proc, $1, $2);
+ } else if (Output_def *od = unsmob_output_def ($2)) {
+ SCM id = SCM_EOL;
+
+ if (od->c_variable ("is-paper") == SCM_BOOL_T)
+ id = ly_symbol2scm ("$defaultpaper");
+ else if (od->c_variable ("is-midi") == SCM_BOOL_T)
+ id = ly_symbol2scm ("$defaultmidi");
+ else if (od->c_variable ("is-layout") == SCM_BOOL_T)
+ id = ly_symbol2scm ("$defaultlayout");
+
+ parser->lexer_->set_identifier (id, $2);
} else if (!scm_is_eq ($2, SCM_UNSPECIFIED))
parser->parser_error (@2, _("bad expression type"));
}
}
| bookpart_body SCM_TOKEN {
// Evaluate and ignore #xxx, as opposed to \xxx
- parser->lexer_->eval_scm_token ($2);
+ parser->lexer_->eval_scm_token ($2, @2);
}
| bookpart_body embedded_scm_active
{
{
SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler");
scm_call_2 (proc, $1, out);
+ } else if (unsmob_score ($2))
+ {
+ SCM proc = parser->lexer_->lookup_identifier ("bookpart-score-handler");
+ scm_call_2 (proc, $1, $2);
+ } else if (Output_def *od = unsmob_output_def ($2)) {
+ SCM id = SCM_EOL;
+
+ if (od->c_variable ("is-paper") == SCM_BOOL_T)
+ id = ly_symbol2scm ("$defaultpaper");
+ else if (od->c_variable ("is-midi") == SCM_BOOL_T)
+ id = ly_symbol2scm ("$defaultmidi");
+ else if (od->c_variable ("is-layout") == SCM_BOOL_T)
+ id = ly_symbol2scm ("$defaultlayout");
+
+ parser->lexer_->set_identifier (id, $2);
} else if (!scm_is_eq ($2, SCM_UNSPECIFIED))
parser->parser_error (@2, _("bad expression type"));
}
score_block:
SCORE '{' score_body '}' {
+ unsmob_score ($3)->origin ()->set_spot (@$);
$$ = $3;
}
;
score_body:
- music {
- SCM scorify = ly_lily_module_constant ("scorify-music");
- $$ = scm_call_2 (scorify, $1, parser->self_scm ());
-
- unsmob_score ($$)->origin ()->set_spot (@$);
- }
- | embedded_scm_active {
- Score *score;
- if (unsmob_score ($1))
- score = new Score (*unsmob_score ($1));
- else {
- score = new Score;
- parser->parser_error (@1, _("score expected"));
+ score_items {
+ if (!unsmob_score ($1)) {
+ parser->parser_error (@1, _("Missing music in \\score"));
+ $$ = (new Score)->unprotect ();
+ if (scm_is_pair ($1) && ly_is_module (scm_car ($1)))
+ {
+ unsmob_score ($$)->set_header (scm_car ($1));
+ $1 = scm_cdr ($1);
+ }
+ for (SCM p = scm_reverse_x ($1, SCM_EOL);
+ scm_is_pair (p); p = scm_cdr (p))
+ {
+ unsmob_score ($$)->
+ add_output_def (unsmob_output_def (scm_car (p)));
+ }
}
- unsmob_score ($$)->origin ()->set_spot (@$);
- $$ = score->unprotect ();
}
- | score_body
- {
- Score *score = unsmob_score ($1);
- if (!ly_is_module (score->get_header ()))
- score->set_header (ly_make_module (false));
- parser->lexer_->add_scope (score->get_header ());
- } lilypond_header
- | score_body output_def {
- Output_def *od = unsmob_output_def ($2);
- if (od->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T)
- {
- parser->parser_error (@2, _("\\paper cannot be used in \\score, use \\layout instead"));
+ | score_body error {
+ unsmob_score ($$)->error_found_ = true;
+ }
+ ;
+score_item:
+ embedded_scm
+ | music
+ | output_def
+ ;
+
+score_items:
+ /* empty */
+ {
+ $$ = SCM_EOL;
+ }
+ | score_items score_item
+ {
+ Output_def *od = unsmob_output_def ($2);
+ if (od) {
+ if (od->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T)
+ {
+ parser->parser_error (@2, _("\\paper cannot be used in \\score, use \\layout instead"));
+ od = 0;
+ $2 = SCM_UNSPECIFIED;
+ }
+ } else if (!unsmob_score ($$)) {
+ if (unsmob_music ($2)) {
+ SCM scorify = ly_lily_module_constant ("scorify-music");
+ $2 = scm_call_2 (scorify, $2, parser->self_scm ());
+ }
+ if (unsmob_score ($2))
+ {
+ $$ = $2;
+ $2 = SCM_UNSPECIFIED;
+ }
}
- else
- {
- unsmob_score ($1)->add_output_def (od);
+ Score *score = unsmob_score ($$);
+ if (score && scm_is_pair ($1)) {
+ if (ly_is_module (scm_car ($1)))
+ {
+ score->set_header (scm_car ($1));
+ $1 = scm_cdr ($1);
+ }
+ for (SCM p = scm_reverse_x ($1, SCM_EOL);
+ scm_is_pair (p); p = scm_cdr (p))
+ {
+ score->add_output_def (unsmob_output_def (scm_car (p)));
+ }
}
+ if (od) {
+ if (score)
+ score->add_output_def (od);
+ else if (scm_is_pair ($$) && ly_is_module (scm_car ($$)))
+ scm_set_cdr_x ($$, scm_cons ($2, scm_cdr ($$)));
+ else
+ $$ = scm_cons ($2, $$);
+ } else if (!scm_is_eq ($2, SCM_UNSPECIFIED))
+ parser->parser_error (@2, _("Spurious expression in \\score"));
}
- | score_body error {
- unsmob_score ($$)->error_found_ = true;
+ | score_items
+ {
+ if (Score *score = unsmob_score ($1)) {
+ if (!ly_is_module (score->get_header ()))
+ score->set_header (ly_make_module (false));
+ parser->lexer_->add_scope (score->get_header ());
+ } else {
+ if (!scm_is_pair ($1) || !ly_is_module (scm_car ($1)))
+ $1 = scm_cons (ly_make_module (false), $1);
+ parser->lexer_->add_scope (scm_car ($1));
+ }
+ } lilypond_header
+ {
+ $$ = $1;
}
;
output_def:
output_def_body '}' {
- $$ = $1;
+ if (scm_is_pair ($1))
+ $$ = scm_car ($1);
parser->lexer_->remove_scope ();
parser->lexer_->pop_state ();
// is still time to escape from notes mode.
music_or_context_def:
- music_arg
+ music_assign
| context_def_spec_block
;
output_def_body:
output_def_head_with_mode_switch '{' {
- $$ = $1;
- unsmob_output_def ($$)->input_origin_.set_spot (@$);
- }
- | output_def_head_with_mode_switch '{' OUTPUT_DEF_IDENTIFIER {
- Output_def *o = unsmob_output_def ($3);
- o->input_origin_.set_spot (@$);
- $$ = o->self_scm ();
- parser->lexer_->remove_scope ();
- parser->lexer_->add_scope (o->scope_);
+ unsmob_output_def ($1)->input_origin_.set_spot (@$);
+ // This is a stupid trick to mark the beginning of the
+ // body for deciding whether to allow
+ // embedded_scm_active to have an output definition
+ $$ = scm_list_1 ($1);
}
| output_def_body assignment {
-
+ if (scm_is_pair ($1))
+ $$ = scm_car ($1);
}
- | output_def_body embedded_scm {
-
+ | output_def_body embedded_scm_active
+ {
+ // We don't switch into note mode for Scheme functions
+ // here. Does not seem warranted/required in output
+ // definitions.
+ if (scm_is_pair ($1))
+ {
+ Output_def *o = unsmob_output_def ($2);
+ if (o) {
+ o->input_origin_.set_spot (@$);
+ $1 = o->self_scm ();
+ parser->lexer_->remove_scope ();
+ parser->lexer_->add_scope (o->scope_);
+ $2 = SCM_UNSPECIFIED;
+ } else
+ $1 = scm_car ($1);
+ }
+ if (unsmob_context_def ($2))
+ assign_context_def (unsmob_output_def ($1), $2);
+ // Seems unlikely, but let's be complete:
+ else if (unsmob_music ($2))
+ {
+ SCM proc = parser->lexer_->lookup_identifier
+ ("output-def-music-handler");
+ scm_call_3 (proc, parser->self_scm (),
+ $1, $2);
+ } else if (!scm_is_eq ($2, SCM_UNSPECIFIED))
+ parser->parser_error (@2, _("bad expression type"));
+ $$ = $1;
+ }
+ | output_def_body SCM_TOKEN {
+ if (scm_is_pair ($1))
+ $$ = scm_car ($1);
+ // Evaluate and ignore #xxx, as opposed to \xxx
+ parser->lexer_->eval_scm_token ($2, @2);
}
| output_def_body
{
+ if (scm_is_pair ($1))
+ $1 = scm_car ($1);
SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
parser->lexer_->push_note_state (nn);
} music_or_context_def
scm_call_3 (proc, parser->self_scm (),
$1, $3);
}
+ $$ = $1;
}
| output_def_body error {
}
;
-music: music_arg
+music: music_assign
| lyric_element_music
+ | pitch_or_music
+ {
+ $$ = make_music_from_simple (parser, @1, $1);
+ if (!unsmob_music ($$))
+ {
+ parser->parser_error (@1, _ ("music expected"));
+ $$ = MAKE_SYNTAX ("void-music", @$);
+ }
+ }
;
music_embedded:
{
$$ = $3;
}
+ | multiplied_duration post_events
+ {
+ Music *n = MY_MAKE_MUSIC ("NoteEvent", @$);
+
+ parser->default_duration_ = *unsmob_duration ($1);
+ n->set_property ("duration", $1);
+
+ if (scm_is_pair ($2))
+ n->set_property ("articulations",
+ scm_reverse_x ($2, SCM_EOL));
+ $$ = n->unprotect ();
+ }
;
music_embedded_backup:
}
;
-music_arg:
- simple_music
- {
- $$ = make_music_from_simple (parser, @1, $1);
- if (!unsmob_music ($$))
- {
- parser->parser_error (@1, _ ("music expected"));
- $$ = MAKE_SYNTAX ("void-music", @$);
- }
- }
- | composite_music %prec COMPOSITE
- ;
-
+// music_assign does not need to contain lyrics: there are no
+// assignments in lyricmode.
music_assign:
simple_music
| composite_music %prec COMPOSITE
{
$$ = MAKE_SYNTAX ("repeat", @$, $2, $3, $4, SCM_EOL);
}
- | REPEAT_IDENTIFIER music
- {
- $$ = MAKE_SYNTAX ("repeat", @$, scm_car ($1), scm_cdr ($1),
- $2, SCM_EOL);
- }
| REPEAT simple_string unsigned_number music ALTERNATIVE braced_music_list
{
$$ = MAKE_SYNTAX ("repeat", @$, $2, $3, $4, $6);
}
- | REPEAT_IDENTIFIER music ALTERNATIVE braced_music_list
- {
- $$ = MAKE_SYNTAX ("repeat", @$, scm_car ($1), scm_cdr ($1),
- $2, $4);
- }
;
sequential_music:
;
context_modification_arg:
- embedded_scm_closed
+ embedded_scm
| MUSIC_IDENTIFIER
;
if (md)
unsmob_context_mod ($1)->add_context_mods (md->get_mods ());
}
- | context_mod_list context_mod_embedded {
- unsmob_context_mod ($1)->add_context_mods
- (unsmob_context_mod ($2)->get_mods ());
+ | context_mod_list context_mod_arg {
+ if (scm_is_eq ($2, SCM_UNSPECIFIED))
+ ;
+ else if (unsmob_music ($2)) {
+ SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
+ $2 = scm_call_2 (proc, parser->self_scm (), $2);
+ }
+ if (unsmob_context_mod ($2))
+ unsmob_context_mod ($$)->add_context_mods
+ (unsmob_context_mod ($2)->get_mods ());
+ else {
+ parser->parser_error (@2, _ ("not a context mod"));
+ }
}
;
| music_bare
;
-/* Music that can be parsed without lookahead */
-closed_music:
- music_bare
- | complex_music_prefix closed_music
- {
- $$ = FINISH_MAKE_SYNTAX ($1, @$, $2);
- }
- | music_function_call_closed
- ;
-
music_bare:
mode_changed_music
| MUSIC_IDENTIFIER
* will match and whether or not \default will be appearing in the
* argument list, and where.
*
- * Many of the basic nonterminals used for argument list scanning come
- * in a "normal" and a "closed" flavor. A closed expression is one
- * that can be parsed without a lookahead token. That makes it
- * feasible for an optional argument that may need to be skipped:
- * skipping can only be accomplished by pushing back the token into
- * the lexer, and that only works when there is no lookahead token.
- *
* Sequences of 0 or more optional arguments are scanned using either
* function_arglist_backup or function_arglist_nonbackup. The first
* is used when optional arguments are followed by at least one
*
*/
-function_arglist_nonbackup_common:
- EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup FRACTION
- {
- $$ = check_scheme_arg (parser, @4, $4, $3, $2);
- }
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup post_event_nofinger
- {
- $$ = check_scheme_arg (parser, @4, $4, $3, $2);
- }
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' UNSIGNED
- {
- SCM n = scm_difference ($5, SCM_UNDEFINED);
- if (scm_is_true (scm_call_1 ($2, n)))
- $$ = scm_cons (n, $3);
- else {
- Music *t = MY_MAKE_MUSIC ("FingeringEvent", @5);
- t->set_property ("digit", $5);
- $$ = check_scheme_arg (parser, @4, t->unprotect (),
- $3, $2, n);
- }
-
- }
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' REAL
- {
- $$ = check_scheme_arg (parser, @4,
- scm_difference ($5, SCM_UNDEFINED),
- $3, $2);
- }
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' NUMBER_IDENTIFIER
- {
- $$ = check_scheme_arg (parser, @4,
- scm_difference ($5, SCM_UNDEFINED),
- $3, $2);
- }
- ;
-
-function_arglist_closed_nonbackup:
- function_arglist_nonbackup_common
- | function_arglist_closed_common
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup embedded_scm_arg_closed
- {
- $$ = check_scheme_arg (parser, @4, $4, $3, $2);
- }
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup bare_number_closed
- {
- $$ = check_scheme_arg (parser, @4, $4, $3, $2);
- }
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup SCM_IDENTIFIER
- {
- $$ = check_scheme_arg (parser, @4,
- try_string_variants ($2, $4),
- $3, $2, $4);
- }
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup STRING
- {
- $$ = check_scheme_arg (parser, @4,
- try_string_variants ($2, $4),
- $3, $2, $4);
- }
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup full_markup
- {
- $$ = check_scheme_arg (parser, @4, $4, $3, $2);
- }
- ;
-
symbol_list_arg:
SYMBOL_LIST
| SYMBOL_LIST '.' symbol_list_rev
function_arglist_nonbackup:
- function_arglist_nonbackup_common
- | function_arglist_common
+ function_arglist_common
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup post_event_nofinger
+ {
+ $$ = check_scheme_arg (parser, @4, $4, $3, $2);
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' UNSIGNED
+ {
+ SCM n = scm_difference ($5, SCM_UNDEFINED);
+ if (scm_is_true (scm_call_1 ($2, n)))
+ $$ = scm_cons (n, $3);
+ else {
+ Music *t = MY_MAKE_MUSIC ("FingeringEvent", @5);
+ t->set_property ("digit", $5);
+ $$ = check_scheme_arg (parser, @4, t->unprotect (),
+ $3, $2, n);
+ }
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' REAL
+ {
+ $$ = check_scheme_arg (parser, @4,
+ scm_difference ($5, SCM_UNDEFINED),
+ $3, $2);
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' NUMBER_IDENTIFIER
+ {
+ $$ = check_scheme_arg (parser, @4,
+ scm_difference ($5, SCM_UNDEFINED),
+ $3, $2);
+ }
| EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup embedded_scm_arg
{
if (scm_is_true (scm_call_1 ($2, $4)))
{
$$ = check_scheme_arg (parser, @4, $4, $3, $2);
}
+ | function_arglist_nonbackup_reparse REPARSE pitch_or_music
+ {
+ if (scm_is_true (scm_call_1 ($2, $3)))
+ $$ = scm_cons ($3, $1);
+ else
+ $$ = check_scheme_arg (parser, @3,
+ make_music_from_simple
+ (parser, @3, $3),
+ $1, $2);
+ }
| function_arglist_nonbackup_reparse REPARSE duration_length
{
$$ = check_scheme_arg (parser, @3, $3, $1, $2);
else
MYREPARSE (@4, $2, SCM_ARG, $4);
}
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup pitch
+ {
+ $$ = $3;
+ if (scm_is_true
+ (scm_call_1
+ ($2, make_music_from_simple
+ (parser, @4, $4))))
+ MYREPARSE (@4, $2, PITCH_IDENTIFIER, $4);
+ else
+ MYREPARSE (@4, $2, SCM_ARG, $4);
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup steno_tonic_pitch
+ {
+ $$ = $3;
+ if (scm_is_true
+ (scm_call_1
+ ($2, make_music_from_simple
+ (parser, @4, $4))))
+ MYREPARSE (@4, $2, TONICNAME_PITCH, $4);
+ else
+ MYREPARSE (@4, $2, SCM_ARG, $4);
+ }
| EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup STRING
{
$$ = $3;
;
+// function_arglist_backup can't occur at the end of an argument
+// list.
function_arglist_backup:
- function_arglist_backup_common
- | function_arglist_common
- ;
-
-function_arglist_backup_common:
- EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup embedded_scm_arg_closed
+ function_arglist_common
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup embedded_scm_arg
{
if (scm_is_true (scm_call_1 ($2, $4)))
- {
$$ = scm_cons ($4, $3);
- } else {
- $$ = scm_cons (loc_on_music (@3, $1), $3);
- MYBACKUP (SCM_ARG, $4, @4);
+ else {
+ $$ = make_music_from_simple (parser, @4, $4);
+ if (scm_is_true (scm_call_1 ($2, $$)))
+ $$ = scm_cons ($$, $3);
+ else
+ {
+ $$ = scm_cons (loc_on_music (@3, $1), $3);
+ MYBACKUP (SCM_ARG, $4, @4);
+ }
}
}
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup REPEAT simple_string unsigned_number
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup post_event_nofinger
{
- $4 = MAKE_SYNTAX ("repeat", @4, $5, $6,
- MY_MAKE_MUSIC ("Music", @4)->unprotect (),
- SCM_EOL);
if (scm_is_true (scm_call_1 ($2, $4)))
{
- $$ = $3;
- MYREPARSE (@4, $2, REPEAT_IDENTIFIER, scm_cons ($5, $6));
+ $$ = scm_cons ($4, $3);
} else {
$$ = scm_cons (loc_on_music (@3, $1), $3);
- MYBACKUP (REPEAT_IDENTIFIER, scm_cons ($5, $6), @4);
+ MYBACKUP (EVENT_IDENTIFIER, $4, @4);
}
}
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup chord_body
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup pitch
{
- if (scm_is_true (scm_call_1 ($2, $4)))
+ if (scm_is_true
+ (scm_call_1
+ ($2, make_music_from_simple
+ (parser, @4, $4))))
{
$$ = $3;
- MYREPARSE (@4, $2, CHORD_BODY_IDENTIFIER, $4);
- } else {
+ MYREPARSE (@4, $2, PITCH_IDENTIFIER, $4);
+ } else if (scm_is_true (scm_call_1 ($2, $4)))
+ $$ = scm_cons ($4, $3);
+ else {
$$ = scm_cons (loc_on_music (@3, $1), $3);
- MYBACKUP (CHORD_BODY_IDENTIFIER, $4, @4);
+ MYBACKUP (PITCH_IDENTIFIER, $4, @4);
}
}
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup post_event_nofinger
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup steno_tonic_pitch
{
- if (scm_is_true (scm_call_1 ($2, $4)))
+ if (scm_is_true
+ (scm_call_1
+ ($2, make_music_from_simple
+ (parser, @4, $4))))
{
+ $$ = $3;
+ MYREPARSE (@4, $2, TONICNAME_PITCH, $4);
+ } else if (scm_is_true (scm_call_1 ($2, $4)))
$$ = scm_cons ($4, $3);
- } else {
+ else {
$$ = scm_cons (loc_on_music (@3, $1), $3);
- MYBACKUP (EVENT_IDENTIFIER, $4, @4);
+ MYBACKUP (TONICNAME_PITCH, $4, @4);
}
}
| EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup full_markup
MYBACKUP (NUMBER_IDENTIFIER, $4, @4);
}
}
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup FRACTION
- {
- if (scm_is_true (scm_call_1 ($2, $4)))
- {
- $$ = scm_cons ($4, $3);
- } else {
- $$ = scm_cons (loc_on_music (@3, $1), $3);
- MYBACKUP (FRACTION, $4, @4);
- }
- }
| EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup '-' UNSIGNED
{
SCM n = scm_difference ($5, SCM_UNDEFINED);
else {
$$ = scm_cons (loc_on_music (@3, $1), $3);
MYBACKUP (UNSIGNED, $5, @5);
- parser->lexer_->push_extra_token ('-');
+ parser->lexer_->push_extra_token (@4, '-');
}
}
-
}
| EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup '-' REAL
{
MYBACKUP (NUMBER_IDENTIFIER, n, @5);
}
}
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup PITCH_IDENTIFIER
- {
- if (scm_is_true (scm_call_1 ($2, $4)))
- {
- $$ = scm_cons ($4, $3);
- } else {
- $$ = scm_cons (loc_on_music (@3, $1), $3);
- MYBACKUP (PITCH_IDENTIFIER, $4, @4);
- }
- }
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup NOTENAME_PITCH
- {
- if (scm_is_true (scm_call_1 ($2, $4)))
- {
- MYREPARSE (@4, $2, NOTENAME_PITCH, $4);
- $$ = $3;
- } else {
- $$ = scm_cons (loc_on_music (@3, $1), $3);
- MYBACKUP (NOTENAME_PITCH, $4, @4);
- }
- }
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup TONICNAME_PITCH
- {
- if (scm_is_true (scm_call_1 ($2, $4)))
- {
- MYREPARSE (@4, $2, TONICNAME_PITCH, $4);
- $$ = $3;
- } else {
- $$ = scm_cons (loc_on_music (@3, $1), $3);
- MYBACKUP (TONICNAME_PITCH, $4, @4);
- }
- }
| EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup DURATION_IDENTIFIER
{
if (scm_is_true (scm_call_1 ($2, $4)))
MYBACKUP (STRING, $4, @4);
}
}
- | function_arglist_backup REPARSE music_assign
+ | function_arglist_backup REPARSE pitch_or_music
{
if (scm_is_true (scm_call_1 ($2, $3)))
$$ = scm_cons ($3, $1);
$$ = check_scheme_arg (parser, @3,
$3, $2, $1);
}
- | EXPECT_SCM function_arglist_optional FRACTION
- {
- $$ = check_scheme_arg (parser, @3,
- $3, $2, $1);
- }
| EXPECT_SCM function_arglist_optional post_event_nofinger
{
$$ = check_scheme_arg (parser, @3,
$$ = check_scheme_arg (parser, @3,
$3, $1, $2);
}
+ | function_arglist_common_reparse REPARSE pitch_or_music
+ {
+ if (scm_is_true (scm_call_1 ($2, $3)))
+ $$ = scm_cons ($3, $1);
+ else
+ $$ = check_scheme_arg (parser, @3,
+ make_music_from_simple
+ (parser, @3, $3),
+ $1, $2);
+ }
| function_arglist_common_reparse REPARSE bare_number_common
{
$$ = check_scheme_arg (parser, @3,
// know the predicate to be false.
MYREPARSE (@3, $1, SCM_ARG, $3);
}
+ | EXPECT_SCM function_arglist_optional pitch
+ {
+ $$ = $2;
+ if (scm_is_true
+ (scm_call_1
+ ($1, make_music_from_simple
+ (parser, @3, $3))))
+ MYREPARSE (@3, $1, PITCH_IDENTIFIER, $3);
+ else
+ MYREPARSE (@3, $1, SCM_ARG, $3);
+ }
+ | EXPECT_SCM function_arglist_optional steno_tonic_pitch
+ {
+ $$ = $2;
+ if (scm_is_true
+ (scm_call_1
+ ($1, make_music_from_simple
+ (parser, @3, $3))))
+ MYREPARSE (@3, $1, TONICNAME_PITCH, $3);
+ else
+ MYREPARSE (@3, $1, SCM_ARG, $3);
+ }
| EXPECT_SCM function_arglist_optional STRING
{
$$ = $2;
else
MYREPARSE (@4, $1, SCM_ARG, $4);
}
-
}
| EXPECT_SCM function_arglist_optional '-' REAL
{
}
;
-function_arglist_closed:
- function_arglist_closed_nonbackup
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_nonbackup DEFAULT
- {
- $$ = scm_cons (loc_on_music (@4, $1), $3);
- }
- ;
-
-function_arglist_closed_common:
- EXPECT_NO_MORE_ARGS {
- $$ = SCM_EOL;
- }
- | EXPECT_SCM function_arglist_optional embedded_scm_arg_closed
- {
- $$ = check_scheme_arg (parser, @3,
- $3, $2, $1);
- }
- | EXPECT_SCM function_arglist_optional bare_number_common_closed
- {
- $$ = check_scheme_arg (parser, @3,
- $3, $2, $1);
- }
- | EXPECT_SCM function_arglist_optional '-' NUMBER_IDENTIFIER
- {
- $$ = check_scheme_arg (parser, @3,
- scm_difference ($4, SCM_UNDEFINED),
- $2, $1);
- }
- | EXPECT_SCM function_arglist_optional post_event_nofinger
- {
- $$ = check_scheme_arg (parser, @3,
- $3, $2, $1);
- }
- | EXPECT_SCM function_arglist_optional FRACTION
- {
- $$ = check_scheme_arg (parser, @3,
- $3, $2, $1);
- }
- | function_arglist_common_reparse REPARSE SCM_ARG
- {
- $$ = check_scheme_arg (parser, @3,
- $3, $1, $2);
- }
- | function_arglist_common_reparse REPARSE bare_number_common_closed
- {
- $$ = check_scheme_arg (parser, @3,
- $3, $1, $2);
- }
- | function_arglist_common_reparse REPARSE symbol_list_arg
- {
- $$ = check_scheme_arg (parser, @3, $3, $1, $2);
- }
- ;
-
function_arglist_optional:
function_arglist_backup
| EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_backup DEFAULT
}
;
-embedded_scm_closed:
- embedded_scm_bare
- | scm_function_call_closed
- ;
-
-embedded_scm_arg_closed:
- embedded_scm_bare_arg
- | scm_function_call_closed
- | closed_music
- ;
-
-scm_function_call_closed:
- SCM_FUNCTION function_arglist_closed {
- $$ = MAKE_SYNTAX ("music-function", @$,
- $1, $2);
- }
- ;
-
music_function_call:
MUSIC_FUNCTION function_arglist {
$$ = MAKE_SYNTAX ("music-function", @$,
}
;
+// We must not have lookahead tokens parsed in lyric mode. In order
+// to save confusion, we take almost the same set as permitted with
+// \lyricmode and/or \lyrics. However, music identifiers are also
+// allowed, and they obviously do not require switching into lyrics
+// mode for parsing.
+
+lyric_mode_music:
+ {
+ parser->lexer_->push_lyric_state ();
+ } grouped_music_list
+ {
+ parser->lexer_->pop_state ();
+ $$ = $2;
+ }
+ | MUSIC_IDENTIFIER
+ ;
+
complex_music:
music_function_call
| repeated_music { $$ = $1; }
;
new_lyrics:
- ADDLYRICS { parser->lexer_->push_lyric_state (); }
- /*cont */
- composite_music {
- /* Can also use music at the expensive of two S/Rs similar to
- \repeat \alternative */
- parser->lexer_->pop_state ();
-
- $$ = scm_cons ($3, SCM_EOL);
+ ADDLYRICS lyric_mode_music {
+ $$ = scm_list_1 ($2);
}
- | new_lyrics ADDLYRICS {
- parser->lexer_->push_lyric_state ();
- } composite_music {
- parser->lexer_->pop_state ();
- $$ = scm_cons ($4, $1);
+ | new_lyrics ADDLYRICS lyric_mode_music {
+ $$ = scm_cons ($3, $1);
}
;
composite_music new_lyrics {
$$ = MAKE_SYNTAX ("add-lyrics", @$, $1, scm_reverse_x ($2, SCM_EOL));
} %prec COMPOSITE
- | LYRICSTO simple_string {
- parser->lexer_->push_lyric_state ();
- } music {
- parser->lexer_->pop_state ();
- $$ = MAKE_SYNTAX ("lyric-combine", @$, $2, $4);
+ | LYRICSTO simple_string lyric_mode_music {
+ $$ = MAKE_SYNTAX ("lyric-combine", @$, $2, $3);
}
;
context_change:
- CHANGE STRING '=' STRING {
- $$ = MAKE_SYNTAX ("context-change", @$, scm_string_to_symbol ($2), $4);
+ CHANGE symbol '=' simple_string {
+ $$ = MAKE_SYNTAX ("context-change", @$, $2, $4);
}
;
| revert_arg_backup BACKUP SCM_ARG symbol_list_part
{
$$ = scm_append_x (scm_list_2 ($4, $3));
- }
+ }
;
context_def_mod:
(scm_object_property (scm_car ($1),
ly_symbol2scm ("is-grob?")))) {
$$ = ly_symbol2scm ("Bottom");
- parser->lexer_->push_extra_token (SCM_IDENTIFIER, $1);
+ parser->lexer_->push_extra_token (@1, SCM_IDENTIFIER, $1);
} else {
$$ = scm_car ($1);
- parser->lexer_->push_extra_token (SCM_IDENTIFIER,
+ parser->lexer_->push_extra_token (@1, SCM_IDENTIFIER,
scm_cdr ($1));
}
}
scalar:
embedded_scm_arg
+ | pitch_or_music
| SCM_IDENTIFIER
| bare_number
// The following is a rather defensive variant of admitting
{
$$ = scm_difference ($2, SCM_UNDEFINED);
}
- | FRACTION
- | STRING
- | full_markup
+ | string
;
event_chord:
simple_element post_events {
// Let the rhythmic music iterator sort this mess out.
if (scm_is_pair ($2)) {
- $$ = make_music_from_simple (parser, @1, $1);
- if (unsmob_music ($$))
- unsmob_music ($$)->set_property ("articulations",
- scm_reverse_x ($2, SCM_EOL));
- else
- {
- parser->parser_error (@1, _("music expected"));
- $$ = MAKE_SYNTAX ("void-music", @1);
- }
+ unsmob_music ($$)->set_property ("articulations",
+ scm_reverse_x ($2, SCM_EOL));
}
} %prec ':'
- | simple_chord_elements post_events {
- SCM elts = ly_append2 ($1, scm_reverse_x ($2, SCM_EOL));
-
- Input i;
- /* why is this giving wrong start location? -ns
- * i = @$; */
- i.set_location (@1, @2);
- $$ = MAKE_SYNTAX ("event-chord", i, elts);
- } %prec ':'
| CHORD_REPETITION optional_notemode_duration post_events {
Input i;
i.set_location (@1, @3);
$$ = MAKE_SYNTAX ("multi-measure-rest", i, $2,
scm_reverse_x ($3, SCM_EOL));
} %prec ':'
- | command_element
+ | tempo_event
| note_chord_element
;
{
$$ = MAKE_SYNTAX ("event-chord", @$, scm_reverse_x ($2, SCM_EOL));
}
- | CHORD_BODY_IDENTIFIER
+ | FIGURE_OPEN figure_list FIGURE_CLOSE
+ {
+ $$ = MAKE_SYNTAX ("event-chord", @$, scm_reverse_x ($2, SCM_EOL));
+ }
;
chord_body_elements:
music_function_chord_body:
music_function_call
| MUSIC_IDENTIFIER
- ;
-
-// Event functions may only take closed arglists, otherwise it would
-// not be clear whether a following postevent should be associated
-// with the last argument of the event function or with the expression
-// for which the function call acts itself as event.
-
-music_function_call_closed:
- MUSIC_FUNCTION function_arglist_closed {
- $$ = MAKE_SYNTAX ("music-function", @$,
- $1, $2);
- }
+ | embedded_scm
;
event_function_event:
- EVENT_FUNCTION function_arglist_closed {
+ EVENT_FUNCTION function_arglist {
$$ = MAKE_SYNTAX ("music-function", @$,
$1, $2);
}
;
-command_element:
- command_event {
- $$ = $1;
- }
- ;
-
-command_event:
- tempo_event {
- $$ = $1;
- }
- ;
-
-
post_events:
/* empty */ {
$$ = SCM_EOL;
direction_less_event {
$$ = $1;
}
- | script_dir music_function_call_closed {
+ | script_dir music_function_call {
$$ = $2;
if (!unsmob_music ($2)->is_mus_type ("post-event")) {
parser->parser_error (@2, _ ("post-event expected"));
{
$$ = $2;
unsmob_music ($$)->set_property ("direction", scm_from_int (DOWN));
- }
+ }
;
post_event:
a->set_property ("tremolo-type", $1);
$$ = a->unprotect ();
}
- | event_function_event
+ | event_function_event
;
direction_reqd_event:
}
| script_abbreviation {
SCM s = parser->lexer_->lookup_identifier ("dash" + ly_scm2string ($1));
- Music *a = MY_MAKE_MUSIC ("ArticulationEvent", @$);
- if (scm_is_string (s))
+ if (scm_is_string (s)) {
+ Music *a = MY_MAKE_MUSIC ("ArticulationEvent", @$);
a->set_property ("articulation-type", s);
- else parser->parser_error (@1, _ ("expecting string as script definition"));
- $$ = a->unprotect ();
+ $$ = a->unprotect ();
+ } else {
+ Music *original = unsmob_music (s);
+ if (original && original->is_mus_type ("post-event")) {
+ Music *a = original->clone ();
+ a->set_spot (parser->lexer_->override_input (@$));
+ $$ = a->unprotect ();
+ } else {
+ parser->parser_error (@1, _ ("expecting string or post-event as script definition"));
+ $$ = MY_MAKE_MUSIC ("PostEvents", @$)->unprotect ();
+ }
+ }
}
;
pitch:
steno_pitch
- | PITCH_IDENTIFIER
+ | PITCH_IDENTIFIER quotes {
+ if (!scm_is_eq (SCM_INUM0, $2))
+ {
+ Pitch p = *unsmob_pitch ($1);
+ p = p.transposed (Pitch (scm_to_int ($2),0,0));
+ $$ = p.smobbed_copy ();
+ }
+ }
;
gen_text_def:
make_simple_markup ($1));
$$ = t->unprotect ();
}
- | embedded_scm_closed
+ | embedded_scm
{
Music *m = unsmob_music ($1);
if (m && m->is_mus_type ("post-event"))
tremolo_type:
':' {
- $$ = SCM_INUM0;
+ $$ = scm_from_int (parser->default_tremolo_type_);
}
| ':' UNSIGNED {
- if (SCM_UNBNDP (make_duration ($2)))
+ if (SCM_UNBNDP (make_duration ($2))) {
parser->parser_error (@2, _ ("not a duration"));
- $$ = $2;
+ $$ = scm_from_int (parser->default_tremolo_type_);
+ } else {
+ $$ = $2;
+ parser->default_tremolo_type_ = scm_to_int ($2);
+ }
}
;
}
;
-figure_spec:
- FIGURE_OPEN figure_list FIGURE_CLOSE {
- $$ = scm_reverse_x ($2, SCM_EOL);
- }
- ;
-
-
optional_rest:
/**/ { $$ = SCM_BOOL_F; }
| REST { $$ = SCM_BOOL_T; }
;
-simple_element:
- pitch exclamations questions octave_check maybe_notemode_duration optional_rest {
+pitch_or_music:
+ pitch exclamations questions octave_check maybe_notemode_duration optional_rest post_events {
if (!parser->lexer_->is_note_state ())
parser->parser_error (@1, _ ("have to be in Note mode for notes"));
if (!SCM_UNBNDP ($2)
|| !SCM_UNBNDP ($3)
|| scm_is_number ($4)
|| !SCM_UNBNDP ($5)
- || scm_is_true ($6))
+ || scm_is_true ($6)
+ || scm_is_pair ($7))
{
Music *n = 0;
if (scm_is_true ($6))
n = MY_MAKE_MUSIC ("RestEvent", @$);
else
n = MY_MAKE_MUSIC ("NoteEvent", @$);
-
+
n->set_property ("pitch", $1);
if (SCM_UNBNDP ($5))
n->set_property ("duration",
parser->default_duration_.smobbed_copy ());
else
n->set_property ("duration", $5);
-
+
if (scm_is_number ($4))
{
int q = scm_to_int ($4);
n->set_property ("absolute-octave", scm_from_int (q-1));
}
-
+
if (to_boolean ($3))
n->set_property ("cautionary", SCM_BOOL_T);
if (to_boolean ($2) || to_boolean ($3))
n->set_property ("force-accidental", SCM_BOOL_T);
-
+ if (scm_is_pair ($7))
+ n->set_property ("articulations",
+ scm_reverse_x ($7, SCM_EOL));
$$ = n->unprotect ();
}
- }
- | DRUM_PITCH optional_notemode_duration {
+ } %prec ':'
+ | new_chord post_events {
+ if (!parser->lexer_->is_chord_state ())
+ parser->parser_error (@1, _ ("have to be in Chord mode for chords"));
+ if (scm_is_pair ($2)) {
+ if (unsmob_pitch ($1))
+ $1 = make_chord_elements (@1,
+ $1,
+ parser->default_duration_.smobbed_copy (),
+ SCM_EOL);
+
+ SCM elts = ly_append2 ($1, scm_reverse_x ($2, SCM_EOL));
+
+ $$ = MAKE_SYNTAX ("event-chord", @1, elts);
+ } else if (!unsmob_pitch ($1))
+ $$ = MAKE_SYNTAX ("event-chord", @1, $1);
+ // A mere pitch drops through.
+ } %prec ':'
+ ;
+
+simple_element:
+ DRUM_PITCH optional_notemode_duration {
Music *n = MY_MAKE_MUSIC ("NoteEvent", @$);
n->set_property ("duration", $2);
n->set_property ("drum-type", $1);
}
;
-simple_chord_elements:
- new_chord {
- if (!parser->lexer_->is_chord_state ())
- parser->parser_error (@1, _ ("have to be in Chord mode for chords"));
- $$ = $1;
- }
- | figure_spec optional_notemode_duration {
- for (SCM s = $1; scm_is_pair (s); s = scm_cdr (s))
- {
- unsmob_music (scm_car (s))->set_property ("duration", $2);
- }
- $$ = $1;
- }
- ;
-
lyric_element:
full_markup {
if (!parser->lexer_->is_lyric_state ())
} %prec ':'
;
+// Can return a single pitch rather than a list.
new_chord:
- steno_tonic_pitch optional_notemode_duration {
- $$ = make_chord_elements (@$, $1, $2, SCM_EOL);
+ steno_tonic_pitch maybe_notemode_duration {
+ if (SCM_UNBNDP ($2))
+ $$ = $1;
+ else
+ $$ = make_chord_elements (@$, $1, $2, SCM_EOL);
}
| steno_tonic_pitch optional_notemode_duration chord_separator chord_items {
SCM its = scm_reverse_x ($4, SCM_EOL);
;
tempo_range:
- UNSIGNED {
+ unsigned_number {
$$ = $1;
- }
- | UNSIGNED '-' UNSIGNED {
+ } %prec ':'
+ | unsigned_number '-' unsigned_number {
$$ = scm_cons ($1, $3);
}
;
;
bare_number_common:
- bare_number_common_closed
+ REAL
+ | NUMBER_IDENTIFIER
| REAL NUMBER_IDENTIFIER
{
$$ = scm_product ($1, $2);
}
;
-bare_number_common_closed:
- REAL
- | NUMBER_IDENTIFIER
- ;
-
bare_number:
bare_number_common
| UNSIGNED
}
;
-bare_number_closed:
- UNSIGNED
- | bare_number_common_closed
- ;
-
unsigned_number:
UNSIGNED
| NUMBER_IDENTIFIER
+ {
+ if (!scm_is_integer ($1)
+ || scm_is_true (scm_negative_p ($1)))
+ {
+ parser->parser_error (@1, _("not an unsigned integer"));
+ $$ = SCM_INUM0;
+ }
+ }
+ | embedded_scm
+ {
+ if (!scm_is_integer ($1)
+ || scm_is_true (scm_negative_p ($1)))
+ {
+ parser->parser_error (@1, _("not an unsigned integer"));
+ $$ = SCM_INUM0;
+ }
+ }
;
exclamations:
;
questions:
- { $$ = SCM_UNDEFINED; }
+// This precedence rule is rather weird. It triggers when '!' is
+// encountered after a pitch, and is used for deciding whether to save
+// this instead for a figure modification. This should not actually
+// occur in practice as pitches and figures are generated in different
+// modes. Using a greedy (%right) precedence makes sure that we don't
+// get stuck in a wrong interpretation.
+ { $$ = SCM_UNDEFINED; } %prec ':'
| questions '?'
{
if (SCM_UNBNDP ($1))
;
markup_top:
- simple_markup_list {
+ markup_list {
$$ = scm_list_2 (ly_lily_module_constant ("line-markup"), $1);
}
| markup_head_1_list simple_markup
}
} BACKUP
;
-
-simple_markup_list:
+
+markup_list:
markup_composed_list {
$$ = $1;
}
{
$$ = $2;
}
- ;
-
-markup_list:
- simple_markup_list
- | markup_score
- {
- $$ = scm_list_1 (scm_list_2 (ly_lily_module_constant ("score-lines-markup-list"), $1));
- }
- ;
-
-markup_score:
- SCORE {
+ | SCORELINES {
SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
parser->lexer_->push_note_state (nn);
} '{' score_body '}' {
- $$ = $4;
+ Score *sc = unsmob_score ($4);
+ sc->origin ()->set_spot (@$);
+ if (sc->defs_.empty ()) {
+ Output_def *od = get_layout (parser);
+ sc->add_output_def (od);
+ od->unprotect ();
+ }
+ $$ = scm_list_1 (scm_list_2 (ly_lily_module_constant ("score-lines-markup-list"), $4));
parser->lexer_->pop_state ();
}
;
| markup_braced_list_body markup {
$$ = scm_cons ($2, $1);
}
- | markup_braced_list_body simple_markup_list {
+ | markup_braced_list_body markup_list {
$$ = scm_reverse_x ($2, $1);
}
;
EXPECT_MARKUP_LIST markup_command_list_arguments markup_list {
$$ = scm_cons ($3, $2);
}
- | EXPECT_SCM markup_command_list_arguments embedded_scm_closed {
+ | EXPECT_SCM markup_command_list_arguments embedded_scm {
$$ = check_scheme_arg (parser, @3, $3, $2, $1);
}
| EXPECT_NO_MORE_ARGS {
STRING {
$$ = make_simple_markup ($1);
}
+ | SCORE {
+ SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
+ parser->lexer_->push_note_state (nn);
+ } '{' score_body '}' {
+ Score *sc = unsmob_score ($4);
+ sc->origin ()->set_spot (@$);
+ if (sc->defs_.empty ()) {
+ Output_def *od = get_layout (parser);
+ sc->add_output_def (od);
+ od->unprotect ();
+ }
+ $$ = scm_list_2 (ly_lily_module_constant ("score-markup"), $4);
+ parser->lexer_->pop_state ();
+ }
| MARKUP_FUNCTION markup_command_basic_arguments {
$$ = scm_cons ($1, scm_reverse_x ($2, SCM_EOL));
}
{
$$ = $2;
}
- | markup_score
- {
- $$ = scm_list_2 (ly_lily_module_constant ("score-markup"), $1);
- }
;
markup:
} else if (scm_is_number (sid)) {
*destination = sid;
return NUMBER_IDENTIFIER;
- } else if (unsmob_context_def (sid)) {
- Context_def *def= unsmob_context_def (sid)->clone ();
-
- *destination = def->self_scm ();
- def->unprotect ();
-
- return CONTEXT_DEF_IDENTIFIER;
+ } else if (unsmob_context_def (sid))
+ {
+ *destination = unsmob_context_def (sid)->clone ()->unprotect ();
+ return SCM_IDENTIFIER;
} else if (unsmob_context_mod (sid)) {
*destination = unsmob_context_mod (sid)->smobbed_copy ();
-
return CONTEXT_MOD_IDENTIFIER;
} else if (Music *mus = unsmob_music (sid)) {
mus = mus->clone ();
*destination = unsmob_duration (sid)->smobbed_copy ();
return DURATION_IDENTIFIER;
} else if (unsmob_output_def (sid)) {
- Output_def *p = unsmob_output_def (sid);
- p = p->clone ();
-
- *destination = p->self_scm ();
- p->unprotect ();
- return OUTPUT_DEF_IDENTIFIER;
+ *destination = unsmob_output_def (sid)->clone ()->unprotect ();
+ return SCM_IDENTIFIER;
+ } else if (unsmob_score (sid)) {
+ *destination = unsmob_score (sid)->clone ()->unprotect ();
+ return SCM_IDENTIFIER;
}
return -1;
parser->default_duration_.smobbed_copy ());
} else if (parser->lexer_->is_chord_state ()) {
if (unsmob_pitch (simple))
- return make_chord_elements (loc, simple,
- parser->default_duration_.smobbed_copy (),
- SCM_EOL);
+ return MAKE_SYNTAX
+ ("event-chord",
+ loc,
+ make_chord_elements (loc, simple,
+ parser->default_duration_.smobbed_copy (),
+ SCM_EOL));
}
return simple;
}
lex->lexval_ = s;
lex->lexloc_ = loc;
+ int tok = lex->pop_extra_token ();
+ if (tok >= 0)
+ return tok;
lex->prepare_for_next_token ();
return lex->yylex ();
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys
+ Copyright (C) 2004--2014 Han-Wen Nienhuys
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2010--2012 Neil Puttock <n.puttock@gmail.com>
+ Copyright (C) 2010--2014 Neil Puttock <n.puttock@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
if (Duration * dur
= unsmob_duration (get_music ()->get_property ("duration")))
{
- Context *ctx = get_outlet ();
- Moment now = ctx->now_mom ();
- if (now.main_part_ > Rational (0))
- get_music ()->origin ()->
- warning (_ ("trying to use \\partial after the start of a piece"));
- Moment length = Moment (dur->get_length ());
- now = Moment (0, now.grace_part_);
- ctx->set_property ("measurePosition", (now - length).smobbed_copy ());
+ // Partial_iterator is an iterator rather than an engraver, so
+ // the active context it is getting called in does not depend on
+ // which context definition the engraver might be defined.
+ //
+ // Using where_defined to find the context where measurePosition
+ // should be overwritten does not actually work since the
+ // Timing_translator does not set measurePosition when
+ // initializing.
+
+ Context *timing = unsmob_context (scm_call_2 (ly_lily_module_constant ("ly:context-find"),
+ get_outlet ()->self_scm (),
+ ly_symbol2scm ("Timing")));
+
+ if (!timing)
+ programming_error ("missing Timing in \\partial");
+ else
+ {
+ Moment mp = robust_scm2moment (timing->get_property ("measurePosition"),
+ Rational (0));
+
+ if (get_outlet ()->now_mom () > 0)
+ mp.main_part_ = measure_length (timing);
+ else
+ mp.main_part_ = 0;
+
+ Moment length = Moment (dur->get_length ());
+ timing->set_property ("measurePosition", (mp - length).smobbed_copy ());
+ }
}
else
programming_error ("invalid duration in \\partial");
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Reinhold Kainhofer <reinhold@kainhofer.com>
+ Copyright (C) 2011--2014 Reinhold Kainhofer <reinhold@kainhofer.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg <mandolaerik@gmail.com>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
Percent_repeat_iterator::get_music_list () const
{
Music *mus = get_music ();
+
Music *child = Repeated_music::body (mus);
SCM length = child->get_length ().smobbed_copy ();
SCM child_list = SCM_EOL;
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
using namespace std;
#include "audio-column.hh"
+#include "audio-item.hh"
#include "audio-staff.hh"
#include "file-name.hh"
#include "international.hh"
midi_stream.write (Midi_header (1, tracks_, 384));
debug_output (_ ("Track...") + " ", false);
+ //Find the first Audio_item in the performance, so all staves start
+ //at the same tick.
+ Moment start_mom = 0;
+ for (vsize i = 0; i < audio_elements_.size (); i++)
+ if (Audio_item *item = dynamic_cast<Audio_item *>(audio_elements_[i]))
+ start_mom = min (start_mom, item->audio_column_->when ());
+
for (vsize i = 0; i < audio_staffs_.size (); i++)
{
Audio_staff *s = audio_staffs_[i];
- debug_output ("[" + to_string (i), true);
- s->output (midi_stream, i, ports_);
+ debug_output ("[" + ::to_string (i), true);
+ s->output (midi_stream, i, ports_, moment_to_ticks (start_mom));
debug_output ("]", false);
}
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2003--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>,
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>,
Erik Sandberg <mandolaerik@gmail.com>
Chris Jackson <chris@fluffhouse.org.uk> - extended to support
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
SCM scm_pitch = ev->get_property ("pitch");
Pitch *p = unsmob_pitch (scm_pitch);
- SCM keysig = get_property ("localKeySignature");
+ SCM keysig = get_property ("localAlterations");
SCM key = scm_cons (scm_from_int (p->get_octave ()),
scm_from_int (p->get_notename ()));
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2010--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2010--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2004--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2007--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
if (once)
{
Global_context *tg = get_outlet ()->get_global_context ();
- tg->add_finalization (scm_list_n (once_finalization_proc,
+ tg->add_finalization (scm_list_4 (once_finalization_proc,
o->self_scm (), m->self_scm (),
- ly_quote_scm (previous_value), SCM_UNDEFINED));
+ previous_value));
}
Simple_music_iterator::process (mom);
}
void
-Property_unset_iterator::process (Moment m)
+Property_unset_iterator::process (Moment mom)
{
- SCM sym = get_music ()->get_property ("symbol");
- send_stream_event (get_outlet (), "UnsetProperty", get_music ()->origin (),
- ly_symbol2scm ("symbol"), sym);
+ Context *o = get_outlet ();
+ Music *m = get_music ();
+ bool once = to_boolean (m->get_property ("once"));
+ SCM symbol = m->get_property ("symbol");
+ SCM previous_value = SCM_UNDEFINED;
+ if (once) {
+ Context *w = o->where_defined (symbol, &previous_value);
+ if (o != w)
+ previous_value = SCM_UNDEFINED;
+ }
+ send_stream_event (o, "UnsetProperty", m->origin (),
+ ly_symbol2scm ("symbol"), symbol);
- Simple_music_iterator::process (m);
+ /* For \once \unset install a finalization hook to reset the property to the
+ * previous value after the timestep */
+ if (once && !SCM_UNBNDP (previous_value))
+ {
+ Global_context *tg = get_outlet ()->get_global_context ();
+ tg->add_finalization (scm_list_4 (Property_iterator::once_finalization_proc,
+ o->self_scm (), m->self_scm (),
+ previous_value));
+ }
+
+ Simple_music_iterator::process (mom);
}
MAKE_SCHEME_CALLBACK (Property_iterator, once_finalization, 3);
SCM music = get_music ()->self_scm ();
Global_context *tg = get_outlet ()->get_global_context ();
- tg->add_finalization (scm_list_n (once_finalization_proc,
- trans, music, SCM_UNDEFINED));
+ tg->add_finalization (scm_list_3 (once_finalization_proc,
+ trans, music));
}
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
+ Copyright (C) 2011--2014 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
+ Copyright (C) 2011--2014 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
actual_style = "";
}
- return ("rests." + to_string (durlog) + (is_ledgered ? "o" : "")
+ return ("rests." + ::to_string (durlog) + (is_ledgered ? "o" : "")
+ actual_style);
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
2007--2008 Rune Zedeler
2008 Joe Neeman <joeneeman@gmail.com>
source file of the GNU LilyPond music typesetter
- Copyright (c) 2009--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (c) 2009--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Erik Sandberg <mandolaerik@gmail.com>
+ Copyright (C) 2006--2014 Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Erik Sandberg <mandolaerik@gmail.com>
+ Copyright (C) 2006--2014 Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1996--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
{
SCM last_outside_staff = last->get_property ("outside-staff-priority");
/*
- if outside_staff_priority is missing for previous grob, just
- use it as a support for the current grob
+ if outside_staff_priority is missing for previous grob,
+ use all the scripts so far as support for the current grob
*/
if (!scm_is_number (last_outside_staff))
- Side_position_interface::add_support (g, last);
+ for (SCM t = ss; !scm_is_eq (t, s); t = scm_cdr (t))
+ Side_position_interface::add_support (g, unsmob_grob (scm_car (t)));
/*
if outside_staff_priority is missing or is equal to original
outside_staff_priority of previous grob, set new
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "self-alignment-interface.hh"
-#include "directional-element-interface.hh"
#include "grob.hh"
-#include "grob-array.hh"
-#include "interval-minefield.hh"
#include "note-column.hh"
#include "paper-column.hh"
#include "pointer-group-interface.hh"
"@end table\n",
/* properties */
- "collision-bias "
- "collision-padding "
- "potential-X-colliding-grobs "
"self-alignment-X "
"self-alignment-Y "
- "X-colliding-grobs "
- "Y-colliding-grobs "
);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
#include "staff-symbol-referencer.hh"
ADD_INTERFACE (Semi_tie,
- "A tie which is only on one side connected to a note head.",
+ "A tie which is only connected to a note head on one side."
+ "\n"
+ "The following properties may be set in the @code{details}"
+ " list:\n"
+ "\n"
+ "@table @code\n"
+ "@item height-limit\n"
+ "Maximum tie height: The longer the tie, the closer it is"
+ " to this height.\n"
+ "@item ratio\n"
+ "Parameter for tie shape. The higher this number, the"
+ " quicker the tie attains its @code{height-limit}.\n"
+ "@end table\n",
/* properties */
"control-points "
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
TODO:
- add support for different stretch/shrink constants?
inv_hooke += springs_[i].inverse_stretch_strength ();
if (inv_hooke == 0.0) /* avoid division by zero. If springs are infinitely stiff */
- return 0.0; /* anyway, then it makes no difference what the force is */
+ inv_hooke = 1e-6; /* then report a very large stretching force */
assert (cur_len <= line_len_);
return (line_len_ - cur_len) / inv_hooke + force_;
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
SCM name = ly_symbol2scm (get_outlet ()->context_name ().c_str ());
Context *c = (j && create_separate_contexts_)
- ? get_outlet ()->find_create_context (name, to_string (j), SCM_EOL)
+ ? get_outlet ()->find_create_context (name, ::to_string (j), SCM_EOL)
: get_outlet ();
if (!c)
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2008--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2008--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg
<mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
&& (state.extremes_[LEFT].staff_ == state.extremes_[RIGHT].staff_)
&& state.extremes_[LEFT].staff_ && state.extremes_[RIGHT].staff_)
{
- Real y = bez.curve_point (ts[0])[Y_AXIS];
+ Real t = ts[0]; //the first (usually only) point where slur is horizontal
+ Real y = bez.curve_point (t)[Y_AXIS];
+ // A Bezier curve at t moves 3t-3t² as far as the middle control points
+ Real factor = 3.0 * t * (1.0 - t);
Grob *staff = state.extremes_[LEFT].staff_;
Real p = 2 * (y - staff->relative_coordinate (state.common_[Y_AXIS], Y_AXIS))
/ state.staff_space_;
- Real const round = my_round (p);
- Real const frac = p - round;
- if (fabs (frac) < 4 * state.thickness_
- && Staff_symbol_referencer::on_staff_line (staff, int (round)))
+ int round_p = (int) my_round (p);
+ if (!Staff_symbol_referencer::on_staff_line (staff, round_p))
+ round_p += (p > round_p) ? 1 : -1;
+ if (!Staff_symbol_referencer::on_staff_line (staff, round_p))
+ return bez;
+
+ Real const distance = (p - round_p) * state.staff_space_ / 2.0;
+ // Allow half the thickness of the slur at the point t, plus one basic
+ // blot-diameter (half for the slur outline, half for the staff line)
+ Real const min_distance = 0.5 * state.thickness_ * factor
+ + state.line_thickness_
+ + ((state.dir_ * distance > 0.0)
+ ? state.parameters_.gap_to_staffline_inside_
+ : state.parameters_.gap_to_staffline_outside_);
+ if (fabs (distance) < min_distance)
{
- Direction resolution_dir = frac ? state.dir_ : CENTER;
+ Direction resolution_dir = (distance > 0.0) ? UP : DOWN;
- // TODO: parameter
- Real newp = round + resolution_dir * 5 * state.thickness_;
-
- Real dy = (newp - p) * state.staff_space_ / 2.0;
+ Real dy = resolution_dir * (min_distance - fabs (distance));
+ // Shape the curve, moving the horizontal point by factor * dy
bez.control_[1][Y_AXIS] += dy;
bez.control_[2][Y_AXIS] += dy;
+ // Move the entire curve by the remaining amount
+ bez.translate (Offset (0.0, dy - factor * dy));
}
}
return bez;
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1996--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2013 Mike Solomon <mike@mikesolomon.org>
+ Copyright (C) 2013--2014 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
= get_detail (details, ly_symbol2scm ("max-slope-factor"));
free_head_distance_
= get_detail (details, ly_symbol2scm ("free-head-distance"));
+ gap_to_staffline_inside_
+ = get_detail (details, ly_symbol2scm ("gap-to-staffline-inside"));
+ gap_to_staffline_outside_
+ = get_detail (details, ly_symbol2scm ("gap-to-staffline-outside"));
absolute_closeness_measure_
= get_detail (details, ly_symbol2scm ("absolute-closeness-measure"));
extra_object_collision_penalty_
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
Slur::replace_breakable_encompass_objects (me);
staff_space_ = Staff_symbol_referencer::staff_space (me);
- Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
- thickness_ = robust_scm2double (me->get_property ("thickness"), 1.0) * lt;
+ line_thickness_ = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
+ thickness_ = robust_scm2double (me->get_property ("thickness"), 1.0) * line_thickness_;
dir_ = slur_direction ();
parameters_.fill (me);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
"@item head-slur-distance-max-ratio\n"
"The maximum value for the ratio of distance between a"
" note head and slur.\n"
+ "@item gap-to-staffline-inside\n"
+ "Minimum gap inside the curve of the slur"
+ " where the slur is parallel to a staffline.\n"
+ "@item gap-to-staffline-outside\n"
+ "Minimum gap outside the curve of the slur"
+ " where the slur is parallel to a staffline.\n"
"@item free-slur-distance\n"
"The amount of vertical free space that must exist"
" between adjacent slurs. This subproperty only works"
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
int l, ch, col, offset;
get_counts (context_str0, &l, &ch, &col, &offset);
- return name_string () + ":" + to_string (l)
- + ":" + to_string (col + 1);
+ return name_string () + ":" + ::to_string (l)
+ + ":" + ::to_string (col + 1);
}
}
get_counts (pos_str0, &l, &ch, &col, &offset);
string line = line_string (pos_str0);
string context = line.substr (0, offset)
- + to_string ('\n')
- + to_string (' ', col)
+ + ::to_string ('\n')
+ + ::to_string (' ', col)
+ line.substr (offset, line.length () - offset);
return context;
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
return 0;
}
-Real
+/* Basic spring based on duration alone */
+Spring
Spacing_spanner::note_spacing (Grob * /* me */,
Grob *lc,
Grob *rc,
shortest_playing_len = min (shortest_playing_len, *measure_len);
}
- Real dist = 0.0;
+ Spring ret;
if (delta_t.main_part_ && !lwhen.grace_part_)
{
- dist = options->get_duration_space (shortest_playing_len.main_part_);
- dist *= double (delta_t.main_part_ / shortest_playing_len.main_part_);
+ // A spring of length and stiffness based on the controlling duration
+ Real len = options->get_duration_space (shortest_playing_len.main_part_);
+ Real min = options->increment_; // canonical notehead width
+
+ // The portion of that spring proportional to the time between lc and rc
+ Real fraction = (delta_t.main_part_ / shortest_playing_len.main_part_);
+ ret = Spring (fraction * len, fraction * min);
+
+ // Stretch proportional to the space between canonical bare noteheads
+ ret.set_inverse_stretch_strength (fraction * max (0.1, (len - min)));
}
else if (delta_t.grace_part_)
{
- /*
- Crude hack for spacing graces: we take the shortest space
- available (namely the space for the global shortest note), and
- multiply that by grace-space-factor
- */
- dist = options->get_duration_space (options->global_shortest_) / 2.0;
Grob *grace_spacing = unsmob_grob (lc->get_object ("grace-spacing"));
if (grace_spacing)
{
Spacing_options grace_opts;
grace_opts.init_from_grob (grace_spacing);
- dist = grace_opts.get_duration_space (delta_t.grace_part_);
+ Real len = grace_opts.get_duration_space (delta_t.grace_part_);
+ Real min = grace_opts.increment_;
+ ret = Spring (len, min);
+ // Grace notes should not stretch very much
+ ret.set_inverse_stretch_strength (grace_opts.increment_ / 2.0);
}
-
+ else // Fallback to the old grace spacing: half that of the shortest note
+ ret = Spring (options->
+ get_duration_space (options->global_shortest_) / 2.0,
+ options->increment_ / 2.0);
}
- return dist;
+ return ret;
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
The note spacing should be taken from the musical
columns.
*/
- Real base = note_spacing (me, lc, rc, options);
+ Spring base = note_spacing (me, lc, rc, options);
Spring spring = Note_spacing::get_spacing (sp, rc, base, options->increment_);
dists[d] = max (dists[d], spring.min_distance ());
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2007--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
if (Paper_column::is_musical (next_col)
&& Paper_column::is_musical (loose_col))
{
- Real base = Spacing_spanner::note_spacing (spacing, loose_col, next_col,
- &options);
+ Spring spring = Spacing_spanner::note_spacing (spacing, loose_col,
+ next_col, &options);
if (Note_spacing::has_interface (spacing))
- {
- Spring spring = Note_spacing::get_spacing (spacing, next_col, base, options.increment_);;
- base_note_space = spring.distance ();
- tight_note_space = spring.min_distance ();
- }
- else
- {
- base_note_space = base;
- tight_note_space = base;
- }
+ spring = Note_spacing::get_spacing (spacing, next_col,
+ spring, options.increment_);
+
+ base_note_space = spring.distance ();
+ tight_note_space = spring.min_distance ();
}
else
{
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
Real
Spacing_options::get_duration_space (Rational d) const
{
- Real k = shortest_duration_space_;
+ Real ratio = d / global_shortest_;
- if (d < global_shortest_)
+ if (ratio < 1.0)
{
/*
We don't space really short notes using the log of the
*/
- Rational ratio = d / global_shortest_;
- return ((k - 1) + double (ratio)) * increment_;
+ return (shortest_duration_space_ + ratio - 1) * increment_;
}
else
{
Report OSU-CISRC-10/87-TR35, Department of Computer and
Information Science, The Ohio State University, 1987.
*/
- Real log = log_2 (global_shortest_);
- k -= log;
- return (log_2 (d) + k) * increment_;
+ return (shortest_duration_space_ + log_2 (ratio)) * increment_;
}
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Item *right_col,
Spacing_options const *options)
{
- Real base_note_space = note_spacing (me, left_col, right_col, options);
- Spring spring;
+ Spring spring = note_spacing (me, left_col, right_col, options);
if (options->stretch_uniformly_)
- spring = Spring (base_note_space, 0.0);
+ {
+ spring.set_min_distance (0.0);
+ spring.set_default_strength ();
+ }
else
{
vector<Spring> springs;
grace_opts.init_from_grob (gsp);
inc = grace_opts.increment_;
}
- springs.push_back (Note_spacing::get_spacing (wish, right_col, base_note_space, inc));
+ springs.push_back (Note_spacing::get_spacing (wish, right_col, spring, inc));
}
}
if (springs.empty ())
{
-
- if (!Paper_column::is_musical (right_col))
- {
- /*
- There used to be code that examined left_col->extent
- (X_AXIS), but this is resulted in unexpected wide
- spacing, because the width of s^"text" output is also
- taken into account here.
- */
- spring = Spring (max (base_note_space, options->increment_),
- options->increment_);
- }
- else
+ if (Paper_column::is_musical (right_col))
{
/*
Min distance should be 0.0. If there are no spacing
wishes, we're probably dealing with polyphonic spacing
of hemiolas.
*/
- spring = Spring (base_note_space, 0.0);
+ spring.set_min_distance (0.0);
}
}
else
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
+ Copyright (C) 2011--2014 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2007--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+ Copyright (C) 2007--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2007--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2007--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
+/*
+ Springs help chains of objects, such as the notes in a line of music,
+ distribute themselves evenly.
+ Each spring decides the length from the reference point of one object
+ along the line to the reference point of the next, based on a force
+ applied to the entire chain (see Spring::length() for details):
+ length = distance_ + flexibility * force
+
+ distance_ is the ideal separation between reference points
+ inverse_stretch_strength_ is the flexibility when the force is stretching
+ inverse_compress_strength_ is the flexibility when the force is compressing
+ min_distance_ sets a lower limit on length
+
+ Typically, the force applied to a list of objects ranges from about
+ -1 to about 1, though there are no set limits.
+*/
+
#include "spring.hh"
Spring::Spring ()
{
distance_ = max (min_distance_, distance_ * r);
inverse_compress_strength_ = max (0.0, distance_ - min_distance_);
- inverse_stretch_strength_ *= 0.8;
+ inverse_stretch_strength_ *= r;
update_blocking_force ();
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2009--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2009--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>, Glen Prideaux <glenprideaux@iname.com>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>, Glen Prideaux <glenprideaux@iname.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the first and last (quarter) note both get one tremolo flag. */
int requested_type
- = robust_scm2int (tremolo_ev_->get_property ("tremolo-type"), 0);
- SCM f = get_property ("tremoloFlags");
- if (!requested_type)
- {
- if (scm_is_number (f))
- requested_type = scm_to_int (f);
- else
- requested_type = 8;
- }
- else
- context ()->set_property ("tremoloFlags", scm_from_int (requested_type));
+ = robust_scm2int (tremolo_ev_->get_property ("tremolo-type"), 8);
/*
we take the duration log from the Event, since the duration-log
"StemTremolo ",
/* read */
- "tremoloFlags "
"stemLeftBeamCount "
"stemRightBeamCount "
"whichBar ",
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
TODO: This is way too hairy
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Erik Sandberg <mandolaerik@gmail.com>
+ Copyright (C) 2006--2014 Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Erik Sandberg <mandolaerik@gmail.com>
+ Copyright (C) 2005--2014 Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
}
while (hi - lo > 1);
- Stencil stil (fm->find_by_name ("brace" + to_string (lo)));
+ Stencil stil (fm->find_by_name ("brace" + ::to_string (lo)));
stil.translate_axis (-b[X_AXIS].length () / 2, X_AXIS);
stil.translate_axis (-0.2, X_AXIS);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
scm_vector_set_x (lines, scm_from_int (i),
system->get_paper_system ());
- debug_output (to_string (i) + "]", false);
+ debug_output (::to_string (i) + "]", false);
}
return lines;
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys, Jean-Baptiste Lamy <jiba@tuxfamily.org>,
+ Copyright (C) 2002--2014 Han-Wen Nienhuys, Jean-Baptiste Lamy <jiba@tuxfamily.org>,
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2010--2012 Carl D. Sorensen
+ Copyright (C) 2010--2014 Carl D. Sorensen
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
return numbered_time_signature (me, n, d);
if ((style == "default") || (style == ""))
- style = to_string ("C");
+ style = ::to_string ("C");
if (style == "C")
{
return numbered_time_signature (me, n, d);
}
- string char_name = style + to_string (n) + to_string (d);
+ string char_name = style + ::to_string (n) + ::to_string (d);
me->set_property ("font-encoding", ly_symbol2scm ("fetaMusic"));
Stencil out = Font_interface::get_default_font (me)
->find_by_name ("timesig." + char_name);
chain);
SCM sn = Text_interface::interpret_markup (me->layout ()->self_scm (), chain,
- ly_string2scm (to_string (num)));
+ ly_string2scm (::to_string (num)));
SCM sd = Text_interface::interpret_markup (me->layout ()->self_scm (), chain,
- ly_string2scm (to_string (den)));
+ ly_string2scm (::to_string (den)));
Stencil n = *unsmob_stencil (sn);
Stencil d = *unsmob_stencil (sd);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>,
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>,
Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
Real x1 = robust_relative_extent (rgr, commonx, X_AXIS)[RIGHT];
bool follow_beam = par_beam
&& get_grob_direction (par_beam) == dir
- && !to_boolean (par_beam->get_property ("knee"));
+ && !Beam::is_knee (par_beam);
vector<Offset> points;
if (columns.size ()
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>,
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>,
Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "tuplet-number.hh"
#include "tuplet-bracket.hh"
-#include "moment.hh"
+#include "moment.hh" // needed?
#include "paper-column.hh"
#include "text-interface.hh"
#include "spanner.hh"
#include "lookup.hh"
+#include "pointer-group-interface.hh"
+#include "staff-symbol-referencer.hh"
+#include "axis-group-interface.hh"
+#include "directional-element-interface.hh"
+#include "note-column.hh"
+#include "beam.hh"
+#include "stem.hh"
+#include "warn.hh"
-struct Tuplet_number
+/*
+ The reference stem is used to determine on which side of the beam to place
+ the tuplet number when it is positioned independently of a bracket. (The number
+ is always placed on the opposite side of this stem.)
+*/
+Grob *
+Tuplet_number::select_reference_stem (Grob *me_grob, vector<Grob *> const &cols)
+{
+ Spanner *me = dynamic_cast<Spanner *> (me_grob);
+
+ int col_count = cols.size ();
+
+ if (!col_count)
+ return 0;
+
+ /*
+ When we have an odd number of stems, we choose the middle stem as
+ our reference.
+ */
+ Grob *ref_stem = Note_column::get_stem (cols[col_count / 2]);
+
+ if (col_count % 2 == 1)
+ return ref_stem;
+
+ /*
+ When we have an even number of stems, we choose between the central
+ two stems.
+ */
+ Direction me_dir = robust_scm2dir (me->get_property ("direction"), UP);
+ Drul_array<Item *> bounding_stems (Note_column::get_stem (cols[col_count / 2 - 1]),
+ Note_column::get_stem (cols[col_count / 2]));
+
+ for (LEFT_and_RIGHT (d))
+ if (!bounding_stems[d])
+ return bounding_stems[-d];
+
+ /*
+ If the central stems point in opposite directions, the number may
+ be placed on either side unless there is a fractional beam, in which
+ case the number goes opposite to the partial beam.
+
+ When there is an option, we use the setting of TupletNumber.direction.
+
+ If the central stems are in the same direction, it doesn't matter
+ which is used as the reference. We use the one on the left.
+ */
+ Direction dir_left = get_grob_direction (bounding_stems[LEFT]);
+ Direction dir_right = get_grob_direction (bounding_stems[RIGHT]);
+
+ if (dir_left == dir_right)
+ ref_stem = bounding_stems[LEFT];
+ else
+ {
+ int beam_count_L_R = Stem::get_beaming (bounding_stems[LEFT], RIGHT);
+ int beam_count_R_L = Stem::get_beaming (bounding_stems[RIGHT], LEFT);
+ if (beam_count_L_R == beam_count_R_L)
+ ref_stem = (dir_left == me_dir) ? bounding_stems[LEFT] : bounding_stems[RIGHT];
+ else
+ ref_stem = (beam_count_L_R > beam_count_R_L)
+ ? bounding_stems[LEFT] : bounding_stems[RIGHT];
+ }
+
+ return ref_stem;
+}
+
+/*
+ When we place the number close to the beam, we need to consider the note
+ columns adjoining the tuplet number on the same side of the beam. The
+ number may not fit in the available space, or may need to be shifted
+ horizontally out of the way of stems and ledger lines.
+*/
+Drul_array<Grob *>
+Tuplet_number::adjacent_note_columns (Grob *me_grob, Grob *ref_stem)
+{
+ Spanner *me = dynamic_cast<Spanner *> (me_grob);
+ Spanner *tuplet = unsmob_spanner (me->get_object ("bracket"));
+
+ extract_grob_set (tuplet, "note-columns", columns);
+ Grob *ref_col = ref_stem->get_parent (X_AXIS); // X-parent of Stem = NoteColumn
+ Direction ref_stem_dir = get_grob_direction (ref_stem);
+ vector<Grob *> filtered_cols;
+ vsize ref_pos = 0;
+
+ for (vsize i = 0, counter = 0; i < columns.size (); ++i)
+ {
+ Grob *stem = Note_column::get_stem (columns[i]);
+ if (stem && get_grob_direction (stem) == -ref_stem_dir)
+ {
+ filtered_cols.push_back (columns[i]);
+ ++counter;
+ }
+ if (columns[i] == ref_col)
+ {
+ filtered_cols.push_back (columns[i]);
+ ref_pos = counter;
+ }
+ }
+
+ Drul_array<Grob *> adj_cols (0, 0);
+
+ if (ref_pos > 0)
+ adj_cols[LEFT] = filtered_cols[ref_pos - 1];
+ if (ref_pos < filtered_cols.size () - 1)
+ adj_cols[RIGHT] = filtered_cols[ref_pos + 1];
+
+ return adj_cols;
+}
+
+/*
+ We determine whether our tuplet number will be put next to the beam
+ independently of the positioning of the associated tuplet bracket.
+
+ Draw next to the beam if:
+ --bracket isn't visible, AND
+ --there is a beam above or below the number, AND
+ --this beam is kneed, AND
+ --the tuplet number will fit between adjoining note columns
+*/
+bool
+Tuplet_number::knee_position_against_beam (Grob *me_grob, Grob *ref_stem)
{
- DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_SCHEME_CALLBACK (calc_x_offset, (SCM));
- DECLARE_SCHEME_CALLBACK (calc_y_offset, (SCM));
- DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM));
- DECLARE_GROB_INTERFACE ();
+ Spanner *me = dynamic_cast<Spanner *> (me_grob);
+ Spanner *tuplet = unsmob_spanner (me->get_object ("bracket"));
+
+ bool bracket_visible = to_boolean (me->get_property ("bracket-visibility"))
+ || !tuplet->extent (tuplet, Y_AXIS).is_empty ();
+
+ if (bracket_visible || !to_boolean (me->get_property ("knee-to-beam")))
+ return false;
+
+ Grob *beam = Stem::get_beam (ref_stem);
+
+ if (!beam || !Beam::is_knee (beam))
+ return false;
+
+ Grob *commonx = Tuplet_bracket::get_common_x (tuplet);
+ commonx = commonx->common_refpoint (me, X_AXIS);
+
+ Interval number_ext = me->extent (commonx, X_AXIS);
- static Real calc_offset (Spanner *me, Axis a);
-};
+ Drul_array<Grob *> adj_cols = adjacent_note_columns (me, ref_stem);
+
+ Item *left = me->get_bound (LEFT);
+ Item *right = me->get_bound (RIGHT);
+
+ if (!left || !right)
+ return false;
+
+ Drul_array<Item *> bounds (left, right);
+
+ Interval available_ext;
+ Real padding = robust_scm2double (me->get_property ("padding"), 0.5);
+
+ /*
+ If there is no note column on a given side of the tuplet number, we use
+ a paper column instead to determine the available space. Padding is only
+ considered in the case of a note column.
+ */
+ for (LEFT_and_RIGHT (d))
+ {
+ if (adj_cols[d])
+ available_ext[d] = Axis_group_interface::generic_bound_extent (adj_cols[d], commonx, X_AXIS)[-d] + (-d * padding);
+ else
+ available_ext[d] = Axis_group_interface::generic_bound_extent (bounds[d], commonx, X_AXIS)[-d];
+ }
+
+ if (number_ext.length () > available_ext.length ())
+ {
+ programming_error ("not enough space for tuplet number against beam");
+ return false;
+ }
+
+ return true;
+}
MAKE_SCHEME_CALLBACK (Tuplet_number, print, 1);
SCM
return stc->smobbed_copy ();
}
+/*
+ For a given horizontal displacement of the tuplet number, how much
+ vertical shift is necessary to keep it the same distance from the beam?
+*/
+Real
+calc_beam_y_shift (Grob *ref_stem, Real dx)
+{
+ Grob *beam = Stem::get_beam (ref_stem);
+ Interval x_pos = robust_scm2interval (beam->get_property ("X-positions"), Interval (0.0, 0.0));
+ Interval y_pos = robust_scm2interval (beam->get_property ("quantized-positions"), Interval (0.0, 0.0));
+ Real beam_dx = x_pos.length ();
+ Real beam_dy = y_pos[RIGHT] - y_pos[LEFT];
+ Real slope = beam_dx ? beam_dy / beam_dx : 0.0;
+
+ return (slope * dx);
+}
+
+/*
+ The X- and Y-offset of the tuplet number are calculated in relation either
+ to the bracket associated with it, or with the beam it is placed against.
+*/
+
MAKE_SCHEME_CALLBACK (Tuplet_number, calc_x_offset, 1);
SCM
Tuplet_number::calc_x_offset (SCM smob)
{
Spanner *me = unsmob_spanner (smob);
+
+ Item *left_bound = me->get_bound (LEFT);
+ Item *right_bound = me->get_bound (RIGHT);
+ Drul_array<Item *> bounds (left_bound, right_bound);
+
Spanner *tuplet = unsmob_spanner (me->get_object ("bracket"));
- Interval x_positions = robust_scm2interval (tuplet->get_property ("X-positions"), Interval (0.0, 0.0));
+ Grob *commonx = Tuplet_bracket::get_common_x (tuplet);
+ commonx = commonx->common_refpoint (me, X_AXIS);
+
+ Interval bound_poss;
+
+ for (LEFT_and_RIGHT (d))
+ {
+ if (Note_column::has_interface (bounds[d])
+ && Note_column::get_stem (bounds[d]))
+ bounds[d] = Note_column::get_stem (bounds[d]);
+ bound_poss[d] = Axis_group_interface::generic_bound_extent (bounds[d], commonx, X_AXIS)[-d];
+ }
- return scm_from_double (x_positions.center ());
+ extract_grob_set (tuplet, "note-columns", cols);
+ Grob *ref_stem = select_reference_stem (me, cols);
+
+ /*
+ Return bracket-based positioning.
+ */
+ if (!ref_stem
+ || !knee_position_against_beam (me, ref_stem))
+ {
+ Interval x_positions;
+ x_positions = robust_scm2interval (tuplet->get_property ("X-positions"),
+ Interval (0.0, 0.0));
+ return scm_from_double (x_positions.center ());
+ }
+
+ /*
+ Horizontally center the number on the beam.
+ */
+ Real col_pos = left_bound->relative_coordinate (commonx, X_AXIS);
+ Real x_offset = bound_poss.center () - col_pos;
+
+ /*
+ Consider possible collisions with adjacent note columns.
+ */
+ Drul_array<Grob *> adj_cols = adjacent_note_columns (me, ref_stem);
+ Interval number_ext = me->extent (commonx, X_AXIS);
+ number_ext.translate (x_offset);
+ Real padding = robust_scm2double (me->get_property ("padding"), 0.5);
+ number_ext.widen (padding);
+
+ Interval cor (0.0, 0.0);
+
+ for (LEFT_and_RIGHT (d))
+ if (adj_cols[d])
+ {
+ Interval nc_ext = adj_cols[d]->extent (commonx, X_AXIS);
+ Interval overlap (nc_ext);
+ overlap.intersect (number_ext);
+ if (!overlap.is_empty ())
+ cor[d] = overlap.length () * -d;
+ x_offset += cor[d];
+ }
+
+ return scm_from_double (x_offset);
+}
+
+/*
+ When a number is placed against the beam (independently of a bracket), the
+ Y-extent of a reference stem is used to determine the vertical placement of
+ the number. When French beams are used the stem may not reach all beams.
+*/
+int
+count_beams_not_touching_stem (SCM beaming)
+{
+ int count = 0;
+
+ for (SCM s = scm_car (beaming); scm_is_pair (s); s = scm_cdr (s))
+ {
+ if (scm_c_memq (scm_car (s), scm_cdr (beaming)) != SCM_BOOL_F)
+ ++count;
+ }
+
+ return max (0, count - 1);
}
MAKE_SCHEME_CALLBACK (Tuplet_number, calc_y_offset, 1);
SCM
Tuplet_number::calc_y_offset (SCM smob)
{
-
Spanner *me = unsmob_spanner (smob);
Spanner *tuplet = unsmob_spanner (me->get_object ("bracket"));
+ Drul_array<Real> positions = robust_scm2drul (tuplet->get_property ("positions"),
+ Drul_array<Real> (0.0, 0.0));
+ SCM to_bracket = scm_from_double ((positions[LEFT] + positions[RIGHT]) / 2.0);
+
+ Grob *commonx = Tuplet_bracket::get_common_x (me);
+ commonx = commonx->common_refpoint (me, X_AXIS);
+ Real x_coord = me->relative_coordinate (commonx, X_AXIS);
+ extract_grob_set (tuplet, "note-columns", columns);
+ Grob *ref_stem = select_reference_stem (me, columns);
+
+ if (!ref_stem || !knee_position_against_beam (me, ref_stem))
+ return to_bracket;
+
+ /*
+ First, we calculate the Y-offset of the tuplet number as if it
+ is positioned at the reference stem.
+ */
+ Grob *commony = common_refpoint_of_array (columns, tuplet, Y_AXIS);
+ commony = commony->common_refpoint (me, Y_AXIS);
+ extract_grob_set (me, "tuplets", tuplets);
+ commony = common_refpoint_of_array (tuplets, commony, Y_AXIS);
+ if (Grob *st = Staff_symbol_referencer::get_staff_symbol (me))
+ commony = st->common_refpoint (commony, Y_AXIS);
+
+ Interval ref_stem_ext = ref_stem->extent (commony, Y_AXIS);
+ Real tuplet_y = tuplet->relative_coordinate (commony, Y_AXIS);
+ Direction ref_stem_dir = get_grob_direction (ref_stem);
+
+ Real y_offset = ref_stem_ext[ref_stem_dir] - tuplet_y;
+
+ /*
+ Additional displacement for French beaming.
+ */
+ if (to_boolean (ref_stem->get_property ("french-beaming")))
+ {
+ Grob *beam = Stem::get_beam (ref_stem);
+ Real beam_translation = Beam::get_beam_translation (beam);
+ SCM beaming = ref_stem->get_property ("beaming");
+ y_offset += ref_stem_dir
+ * count_beams_not_touching_stem (beaming)
+ * beam_translation;
+ }
+
+ Real padding = robust_scm2double (me->get_property ("padding"), 0.5);
+ Real num_height = me->extent (commony, Y_AXIS).length ();
+
+ y_offset += ref_stem_dir * (padding + num_height / 2.0);
+
+ /*
+ Now we adjust the vertical position of the number to reflect
+ its actual horizontal placement along the beam.
+ */
+ Real ref_stem_x = ref_stem->relative_coordinate (commonx, X_AXIS);
+ y_offset += calc_beam_y_shift (ref_stem, x_coord - ref_stem_x);
+
+ /*
+ Check if the number is between the beam and the staff. If so, it will collide
+ with ledger lines. Move it into the staff.
+ */
+ if (Grob *st = Staff_symbol_referencer::get_staff_symbol (ref_stem))
+ {
+ Interval staff_ext_y = st->extent (commony, Y_AXIS);
+ bool move = ref_stem_dir == DOWN
+ ? ref_stem_ext[DOWN] > staff_ext_y[UP]
+ : staff_ext_y[DOWN] > ref_stem_ext[UP];
+ if (move)
+ {
+ Interval ledger_domain = Interval (min (staff_ext_y[UP], ref_stem_ext[UP]),
+ max (staff_ext_y[DOWN], ref_stem_ext[DOWN]));
+ Interval num_y (me->extent (commony, Y_AXIS));
+ num_y.translate (y_offset);
+ Interval num_ledger_overlap (num_y);
+ num_ledger_overlap.intersect (ledger_domain);
+ Real line_thickness = Staff_symbol_referencer::line_thickness (st);
+ Real staff_space = Staff_symbol_referencer::staff_space (st);
+ // Number will touch outer staff line.
+ if (!num_ledger_overlap.is_empty ()
+ && num_ledger_overlap.length () > (staff_space / 2.0)
+ && move)
+ y_offset += staff_ext_y[-ref_stem_dir] - num_y[-ref_stem_dir]
+ + line_thickness * ref_stem_dir;
+ }
+ }
+
+ /*
+ Now consider possible collisions with accidentals on the right. We
+ move the accidental away from the beam.
+ */
+ Drul_array<Grob *> adj_cols = adjacent_note_columns (me, ref_stem);
+
+ if (!adj_cols[RIGHT])
+ return scm_from_double (y_offset);
+
+ /*
+ Collect Y-extents of accidentals that overlap the number
+ along the X-axis.
+ */
+ extract_grob_set (adj_cols[RIGHT], "note-heads", heads);
+ Interval colliding_acc_ext_y;
+
+ for (vsize i = 0; i < heads.size (); i++)
+ if (Grob *acc = unsmob_grob (heads[i]->get_object ("accidental-grob")))
+ {
+ commony = commony->common_refpoint (acc, Y_AXIS);
+ Interval acc_ext_y = acc->extent (commony, Y_AXIS);
+
+ commonx = commonx->common_refpoint (acc, X_AXIS);
+ Interval num_ext_x = me->extent (commonx, X_AXIS);
+ num_ext_x.widen (padding);
+ Interval overlap_x (num_ext_x);
+ Interval acc_x = acc->extent (commonx, X_AXIS);
+ overlap_x.intersect (acc_x);
+
+ if (!overlap_x.is_empty ())
+ colliding_acc_ext_y.unite (acc_ext_y);
+ }
+ /*
+ Does our number intersect vertically with the accidental Y-extents we
+ combined above? If so, move it.
+ */
+ Interval overlap_acc_y (colliding_acc_ext_y);
+ Interval num_ext_y (me->extent (commony, Y_AXIS));
+ num_ext_y.translate (y_offset);
+ overlap_acc_y.intersect (num_ext_y);
+
+ if (!overlap_acc_y.is_empty ())
+ y_offset += colliding_acc_ext_y[ref_stem_dir] - num_ext_y[-ref_stem_dir] + padding * ref_stem_dir;
- Drul_array<Real> positions = robust_scm2drul (tuplet->get_property ("positions"), Drul_array<Real> (0.0, 0.0));
- return scm_from_double ((positions[LEFT] + positions[RIGHT]) / 2.0);
+ return scm_from_double (y_offset);
}
MAKE_SCHEME_CALLBACK (Tuplet_number, calc_cross_staff, 1)
"avoid-slur " // UGH.
"bracket "
"direction "
+ "knee-to-beam "
);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
+ Copyright (C) 2011--2014 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
return (SCM_NIMP (s) && SCM_CELL_TYPE (s) == unpure_pure_container_tag);
}
+bool
+is_unchanging_unpure_pure_container (SCM s)
+// A container that has the same callback for both 'pure' and 'unpure' lookups
+// and which ignores the 'start' and 'end' columnns.
+// Such a callback will give the same answer for tentative or final layouts.
+{
+ LY_ASSERT_TYPE (is_unpure_pure_container, s, 1);
+ SCM pure_part = SCM_SMOB_OBJECT_2 (s);
+ return (SCM_UNBNDP (pure_part));
+}
+
SCM
unpure_pure_container_unpure_part (SCM smob)
{
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2003--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2012 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2003--2014 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2002--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2002--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
virtual void next_element (bool);
virtual void construct_children ();
virtual void process (Moment);
+ virtual void derived_mark () const;
bool first_time_;
int alt_count_;
int rep_count_;
int done_count_;
+ SCM alt_restores_;
};
Volta_repeat_iterator::Volta_repeat_iterator ()
{
done_count_ = alt_count_ = rep_count_ = 0;
first_time_ = true;
+ alt_restores_ = SCM_EOL;
+}
+
+void
+Volta_repeat_iterator::derived_mark () const
+{
+ scm_gc_mark (alt_restores_);
+ Sequential_iterator::derived_mark ();
}
SCM
{
if (alt_count_)
{
- string repstr = to_string (rep_count_ - alt_count_ + done_count_) + ".";
- if (done_count_ > 1)
+ string repstr = ::to_string (rep_count_ - alt_count_ + done_count_) + ".";
+ if (done_count_ <= 1)
{
+ alt_restores_ = SCM_EOL;
+ if (to_boolean (get_outlet ()->get_property ("timing")))
+ {
+ for (SCM lst = get_outlet ()->get_property ("alternativeRestores");
+ scm_is_pair (lst);
+ lst = scm_cdr (lst))
+ {
+ SCM res = SCM_EOL;
+ Context *t = get_outlet ()->where_defined (scm_car (lst),
+ &res);
+ if (t)
+ {
+ alt_restores_ = scm_cons
+ (scm_list_3 (t->self_scm (), scm_car (lst), res),
+ alt_restores_);
+ }
+ }
+ }
+ }
+ else
+ {
+
add_repeat_command (scm_list_n (ly_symbol2scm ("volta"), SCM_BOOL_F, SCM_UNDEFINED));
if (done_count_ - 1 < alt_count_)
- add_repeat_command (ly_symbol2scm ("end-repeat"));
+ {
+ add_repeat_command (ly_symbol2scm ("end-repeat"));
+
+ if (to_boolean (get_outlet ()->get_property ("timing")))
+ {
+ for (SCM p = alt_restores_; scm_is_pair (p); p = scm_cdr (p))
+ scm_apply_0 (ly_lily_module_constant ("ly:context-set-property!"),
+ scm_car (p));
+ }
+ }
}
if (done_count_ == 1 && alt_count_ < rep_count_)
- repstr = "1.--" + to_string (rep_count_ - alt_count_ + done_count_) + ".";
+ repstr = "1.--" + ::to_string (rep_count_ - alt_count_ + done_count_) + ".";
if (done_count_ <= alt_count_)
add_repeat_command (scm_list_n (ly_symbol2scm ("volta"),
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
%}
-\version "2.16.0" % necessary for upgrading to future LilyPond versions.
+\version "2.19.8" % necessary for upgrading to future LilyPond versions.
\header{
title = "A scale in LilyPond"
%}
-\version "2.16.0" % necessary for upgrading to future LilyPond versions.
+\version "2.19.8" % necessary for upgrading to future LilyPond versions.
\header{
title = "A scale in LilyPond"
$Id: bagpipe.ly,v 1.12 2006/03/16 14:39:46 hanwen Exp $
%}
-\version "2.17.30"
+\version "2.19.0"
% Notes of the scale of the Great Highland Bagpipe. Extra high notes for bombarde.
% Flat notes used mainly in some modern music.
\set Staff.beamExceptions = #'()
}
halfBeaming = {
- \set Staff.beamExceptions = #'((end . (((1 . 8) . (4 4))
- ((1 . 12) . (3 3)))))
+ \set Staff.beamExceptions =
+ \beamExceptions { 8[ 8 8 8] |
+ \tuplet 3/2 { 8[ 8 8] 8[ 8 8] 8[ 8 8] 8[ 8 8] } }
}
% Reels are in allabreve time with half note beaming.
%%%% common Catalan names for notes
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2010--2012 Valentin Villenave <valentin@villenave.net>
+%%%% Copyright (C) 2010--2014 Valentin Villenave <valentin@villenave.net>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2011--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%%%% Copyright (C) 2011--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%%%% Jan Nieuwenhuizen <janneke@gnu.org>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%%%% Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%%%% Jan Nieuwenhuizen <janneke@gnu.org>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% common German names for notes
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2010--2012 Valentin Villenave <valentin@villenave.net>
+%%%% Copyright (C) 2010--2014 Valentin Villenave <valentin@villenave.net>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% common English names for notes
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2010--2012 Valentin Villenave <valentin@villenave.net>
+%%%% Copyright (C) 2010--2014 Valentin Villenave <valentin@villenave.net>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%%%% Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%%%% Jan Nieuwenhuizen <janneke@gnu.org>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
\consists "Cue_clef_engraver"
\consists "Fingering_column_engraver"
- localKeySignature = #'()
+ localAlterations = #'()
createSpacing = ##t
ignoreFiguredBassRest = ##f
\context{
\type "Engraver_group"
- localKeySignature = #'()
+ localAlterations = #'()
createSpacing = ##t
squashedPosition = #0
\name RhythmicStaff
\alias "Staff"
- \override BarLine.bar-extent = #'(-2 . 2)
\override VoltaBracket.staff-padding = #3
\override StaffSymbol.line-count = #1
\context{
\type "Engraver_group"
\name GrandStaff
- localKeySignature = #'()
+ localAlterations = #'()
\description "A group of staves, with a brace on the left
side, grouping the staves together. The bar lines of the
\consists "Instrument_name_engraver"
\consists "Span_bar_engraver"
+% The default for DynamicText.extra-spacing-width causes dynamics to
+% be placed across span bars, so switch it off:
+ \override DynamicText.extra-spacing-width = ##f
\consists "Span_bar_stub_engraver"
\consists "Span_arpeggio_engraver"
\consists "System_start_delimiter_engraver"
\consists "Instrument_name_engraver"
\consists "Span_bar_engraver"
+% The default for DynamicText.extra-spacing-width causes dynamics to
+% be placed across span bars, so switch it off:
+ \override DynamicText.extra-spacing-width = ##f
\consists "Span_bar_stub_engraver"
\consists "Span_arpeggio_engraver"
\consists "Output_property_engraver"
doubleRepeatType = #":..:"
startRepeatType = #".|:"
endRepeatType = #":|."
+ alternativeRestores = #'(measurePosition measureLength lastChord)
barNumberVisibility = #first-bar-number-invisible-and-no-parenthesized-bar-numbers
barNumberFormatter = #robust-bar-number-function
clefTranspositionFormatter = #clef-transposition-markup
autoBeaming = ##t
autoBeamCheck = #default-auto-beam-check
+ completionFactor = #unity-if-multimeasure
+
scriptDefinitions = #default-script-alist
pedalSustainStrings = #'("Ped." "*Ped." "*")
%%%% common Spanish names for notes
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2010--2012 Valentin Villenave <valentin@villenave.net>
+%%%% Copyright (C) 2010--2014 Valentin Villenave <valentin@villenave.net>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2011--2012 Graham Percival <graham@percival-music.ca>
+%%%% Copyright (C) 2011--2014 Graham Percival <graham@percival-music.ca>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2009--2012 by Ian Hulin <ian@hulin.org.uk>
+%%%% Copyright (C) 2009--2014 by Ian Hulin <ian@hulin.org.uk>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% common Italian names for notes
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2010--2012 Valentin Villenave <valentin@villenave.net>
+%%%% Copyright (C) 2010--2014 Valentin Villenave <valentin@villenave.net>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%%%% Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%%%% Jan Nieuwenhuizen <janneke@gnu.org>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2003--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%%%% Copyright (C) 2003--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%%%% Jan Nieuwenhuizen <janneke@gnu.org>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
"Barcheck failed got ~a expect ~a"
cbn n))))))
+beamExceptions =
+#(define-scheme-function (parser location music) (ly:music?)
+ (_i "Extract a value suitable for setting
+@code{Timing.beamExceptions} from the given pattern with explicit
+beams in @var{music}. A bar check @code{|} has to be used between
+bars of patterns in order to reset the timing.")
+ (extract-beam-exceptions music))
+
bendAfter =
#(define-event-function (parser location delta) (real?)
(_i "Create a fall or doit of pitch interval @var{delta}.")
breathe =
#(define-music-function (parser location) ()
(_i "Insert a breath mark.")
- (make-music 'BreathingEvent))
+ (make-music 'BreathingEvent
+ 'midi-length
+ (lambda (len context)
+ ;;Shorten by half, or by up to a second, but always by a power of 2
+ (let* ((desired (min (ly:moment-main (seconds->moment 1 context))
+ (* (ly:moment-main len) 1/2)))
+ (scale (inexact->exact (ceiling (/ (log desired) (log 1/2)))))
+ (breath (ly:make-moment (expt 1/2 scale))))
+ (ly:moment-sub (ly:make-moment (ly:moment-main len)) breath)))))
clef =
#(define-music-function (parser location type) (string?)
(timesig (cons (ly:moment-main-numerator mlen)
(ly:moment-main-denominator mlen))))
#{
- \once \override Staff.TimeSignature.stencil = #(lambda (grob)
+ \once \override Timing.TimeSignature.stencil = #(lambda (grob)
(grob-interpret-markup grob (format-compound-time args)))
\set Timing.timeSignatureFraction = #timesig
\set Timing.baseMoment = #beat
displayLilyMusic =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (parser location port music) ((output-port?) ly:music?)
(_i "Display the LilyPond input representation of @var{music}
-to the console.")
- (newline)
- (display-lily-music music parser)
+to @var{port}, defaulting to the console.")
+ (let ((port (or port (current-output-port))))
+ (newline port)
+ (display-lily-music music parser port))
music)
displayMusic =
-#(define-music-function (parser location music) (ly:music?)
- (_i "Display the internal representation of @var{music} to the console.")
- (newline)
- (display-scheme-music music)
+#(define-music-function (parser location port music) ((output-port?) ly:music?)
+ (_i "Display the internal representation of @var{music} to
+@var{port}, default to the console.")
+ (let ((port (or port (current-output-port))))
+ (newline port)
+ (display-scheme-music music port))
music)
displayScheme =
-#(define-scheme-function (parser location expr) (scheme?)
- (_i "Display the internal representation of @var{expr} to the console.")
- (newline)
- (display-scheme-music expr)
+#(define-scheme-function (parser location port expr) ((output-port?) scheme?)
+ (_i "Display the internal representation of @var{expr} to
+@var{port}, default to the console.")
+ (let ((port (or port (current-output-port))))
+ (newline port)
+ (display-scheme-music expr port))
expr)
(ly:input-warning location (_ "No other language was defined previously. Ignoring."))))
+magnifyMusic =
+#(define-music-function (parser location mag mus) (number? ly:music?)
+ (_i "Magnify the notation of @var{mus} without changing the
+staff-size, using @var{mag} as a size factor. Stems, beams, and
+horizontal spacing are adjusted automatically.")
+ #{
+ \set fontSize = #(magnification->font-size mag)
+ % gives beam-thickness=0.48 when mag=1 (like default),
+ % gives beam-thickness=0.35 when mag=0.63 (like CueVoice)
+ \temporary \override Beam.beam-thickness = #(+ 119/925 (* mag 13/37))
+ \temporary \override Beam.length-fraction = #mag
+ \temporary \override Stem.length-fraction = #mag
+ \temporary \override Stem.thickness = #(* 1.3 (max 1 mag))
+ \temporary \override Score.SpacingSpanner.spacing-increment = #(* 1.2 mag)
+ #mus
+ \set fontSize = 0
+ \revert Beam.beam-thickness
+ \revert Beam.length-fraction
+ \revert Stem.length-fraction
+ \revert Stem.thickness
+ \revert Score.SpacingSpanner.spacing-increment
+ #})
+
makeClusters =
#(define-music-function (parser location arg) (ly:music?)
(_i "Display chords in @var{arg} as clusters.")
\override #prop-path = #(offsetter (third prop-path) offsets)
#}
(make-music 'Music)))))
-
+
omit =
#(define-music-function (parser location item) (symbol-list-or-music?)
(_i "Set @var{item}'s @samp{stencil} property to @code{#f},
(_i "Change the duration of @var{arg} by adding @var{dur} to the
@code{durlog} of @var{arg} and @var{dots} to the @code{dots} of @var{arg}.")
- (music-map
- (lambda (x)
- (shift-one-duration-log x dur dots)) arg))
+ (shift-duration-log arg dur dots))
single =
#(define-music-function (parser location overrides music)
%%%% common Dutch names for notes
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%%%% Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% common Norwegian names for notes
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2010--2012 Valentin Villenave <valentin@villenave.net>
+%%%% Copyright (C) 2010--2014 Valentin Villenave <valentin@villenave.net>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%%%% Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%%%% Jan Nieuwenhuizen <janneke@gnu.org>
%%%% Neil Puttock <n.puttock@gmail.com>
%%%%
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%%%% Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%%%% Jan Nieuwenhuizen <janneke@gnu.org>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
\name Staff
\accepts Voice
\accepts CueVoice
+ \accepts NullVoice
\defaultchild Voice
\consists "Staff_performer"
\name "Devnull"
}
+\context {
+ \type "Performer_group"
+ \name NullVoice
+ \alias Staff
+ \alias Voice
+ %% needed for melismata
+ %% TODO: at least the tie performer likely does not work without the
+ %% Note_performer, but I don't know how to shut note output off in
+ %% MIDI.
+ \consists "Tie_performer"
+ \consists "Beam_performer"
+ \consists "Slur_performer"
+}
+
\context {
\Staff
\name TabStaff
%%%% common Portuguese names for notes
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2010--2012 Valentin Villenave <valentin@villenave.net>
+%%%% Copyright (C) 2010--2014 Valentin Villenave <valentin@villenave.net>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2008--2012 Carl D. Sorensen <c_sorensen@byu.edu>
+%%%% Copyright (C) 2008--2014 Carl D. Sorensen <c_sorensen@byu.edu>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2008--2012 Carl D. Sorensen <c_sorensen@byu.edu>
+%%%% Copyright (C) 2008--2014 Carl D. Sorensen <c_sorensen@byu.edu>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
#"x;x;o;1-1;o;1-2;"
\storePredefinedDiagram #default-fret-table \chordmode {b:7}
#guitar-tuning
- #(offset-fret 1 (chord-shape 'bes:7 guitar-tuning))
+ #"x;2-2;1-1;2-3;o;2-4;"
\storePredefinedDiagram #default-fret-table \chordmode {b:maj7}
#guitar-tuning
#"x;2-1;4-3;3-2;4-4;x;"
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2008--2012 by Jonathan Kulp
+%%%% Copyright (C) 2008--2014 by Jonathan Kulp
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2011--2012 Marc Hohl <marc@hohlart.de>
+%%%% Copyright (C) 2011--2014 Marc Hohl <marc@hohlart.de>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2009--2012 Matt Corks <mvcorks@alumni.uwaterloo.ca>
+%%%% Copyright (C) 2009--2014 Matt Corks <mvcorks@alumni.uwaterloo.ca>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
improvisationOn = {
\set squashedPosition = #0
\override NoteHead.style = #'slash
+ \override TabNoteHead.style = #'slash
\override Accidental.stencil = ##f
\override AccidentalCautionary.stencil = ##f
}
improvisationOff = {
\unset squashedPosition
\revert NoteHead.style
+ \revert TabNoteHead.style
\revert Accidental.stencil
\revert AccidentalCautionary.stencil
}
--- /dev/null
+\version "2.18.0"
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% Accompanied Choir with Multiple Verses %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%{
+ This file may be \include'd in a score to provide the
+ context structure for a score arrangement consisting
+ of the following staves:
+
+ Descant Staff
+ Soprano and Alto (optionally on two Staves or one Staff)
+ Multiple verses (up to 9)
+ Tenor and Bass (optionally on two Staves or one Staff)
+ Piano Staff
+
+ It is intended primarily to hide the complexity of the context
+ structure from newcomers to LilyPond, but is also useful as a
+ shorthand for seasoned users.
+
+ Usage:
+
+ satb.ly should be included at the *end* of the input file. Before
+ it are placed the required music and lyrics by redefining specific
+ variables, like this:
+
+ \paper { ... }
+ \header { ... }
+ Key = { ... }
+ Time = { ... }
+ DescantMusic = \relative { ... }
+ DescantLyrics = \lyricmode { ... }
+ SopranoMusic = \relative { ... }
+ SopranoLyrics = \lyricmode { ... }
+ AltoMusic = \relative { ... }
+ AltoLyrics = \lyricmode { ... }
+ VerseOne = \lyricmode { ... }
+ VerseTwo = \lyricmode { ... }
+ ...
+ VerseNine = \lyricmode { ... }
+ TenorMusic = \relative { ... }
+ TenorLyrics = \lyricmode { ... }
+ BassMusic = \relative { ... }
+ BassLyrics = \lyricmode { ... }
+ PianoRHMusic = \relative { ... }
+ PianoDynamics = { ... }
+ PianoLHMusic = \relative { ... }
+ TwoVoicesPerStaff = ##f
+ \include "satb.ly"
+
+ All of the definitions are optional. Staves with no music will be
+ omitted from the output.
+
+ Other variables, such as the instrumentName, can also be changed by
+ defining variables like AltoInstrumentName. The key is defined in
+ the variable Key, and the structure of time and repeats in the
+ variable Time, using spacer rests. A \layout block may be defined in
+ the variable Layout. There is no default \header block and no default
+ \paper block.
+
+ Music may be tagged with #'print or #'play to be included only in
+ the printed score or in the MIDI file respectively.
+
+%}
+
+#(defmacro defaulting (name . default)
+ (if (defined? name) name (if (pair? default) (car default) '#{#})))
+
+#(define (sym . strings) (string->symbol (apply string-append strings)))
+
+#(defmacro short-name (part)
+ "Use PartShortInstrumentName, or the first letter of
+PartInstrumentName or its default."
+ (if (defined? (sym part "Music"))
+ (let ((sname (sym part "ShortInstrumentName")))
+ (if (defined? sname)
+ sname
+ `(substring (defaulting ,(sym part "InstrumentName") ,part)
+ 0 1)))
+ ""))
+
+#(defmacro lyrics-if-defined (name voice . optionals)
+ (let ((above (if (pair? optionals) (car optionals) #f)))
+ (if (defined? name)
+ `(make-music 'ContextSpeccedMusic
+ 'create-new #t
+ 'context-type 'Lyrics
+ 'property-operations ',(if above `((assign alignAboveContext ,above)) '())
+ 'element (make-music 'LyricCombineMusic
+ 'associated-context ,voice
+ 'element ,name))
+ #{#})))
+
+#(defmacro one-voice-staff (name clef)
+ `#{ <<
+ \new Staff = #(identity ,name) \with {
+ instrumentName = \markup \smallCaps
+ #(defaulting ,(sym name "InstrumentName") ,name)
+ shortInstrumentName = \markup \smallCaps #(short-name ,name)
+ midiInstrument = "clarinet"
+ } {
+ #(defaulting Key)
+ \clef #(identity ,clef)
+ \new Voice = #(identity ,name) <<
+ #(defaulting Time)
+ \dynamicUp
+ #(defaulting ,(sym name "Music"))
+ >>
+ }
+ #(lyrics-if-defined ,(sym name "Lyrics") ,name)
+ #(lyrics-if-defined ,(sym name "LyricsOne") ,name)
+ #(lyrics-if-defined ,(sym name "LyricsTwo") ,name)
+ #(lyrics-if-defined ,(sym name "LyricsThree") ,name)
+ >> #})
+
+#(defmacro two-voice-staff (name clef v1name v2name)
+ `#{ <<
+ \new Staff = #(identity ,name) \with {
+ instrumentName = \markup \right-column \smallCaps {
+ #(defaulting ,(sym v1name "InstrumentName") ,v1name)
+ #(defaulting ,(sym v2name "InstrumentName") ,v2name)
+ }
+ shortInstrumentName = \markup \right-column \smallCaps {
+ #(short-name ,v1name)
+ #(short-name ,v2name)
+ }
+ midiInstrument = "clarinet"
+ } <<
+ #(defaulting Key)
+ \clef #(identity ,clef)
+ \new Voice = #(identity ,v1name) <<
+ #(defaulting Time)
+ \voiceOne
+ \dynamicUp
+ #(defaulting ,(sym v1name "Music"))
+ >>
+ \new Voice = #(identity ,v2name) <<
+ #(defaulting Time)
+ \voiceTwo
+ #(defaulting ,(sym v2name "Music"))
+ >>
+ >>
+ #(lyrics-if-defined ,(sym v1name "Lyrics") ,v1name ,name)
+ #(lyrics-if-defined ,(sym v1name "LyricsOne") ,v1name ,name)
+ #(lyrics-if-defined ,(sym v1name "LyricsTwo") ,v1name ,name)
+ #(lyrics-if-defined ,(sym v1name "LyricsThree") ,v1name ,name)
+ #(lyrics-if-defined ,(sym v2name "Lyrics") ,v2name)
+ #(lyrics-if-defined ,(sym v2name "LyricsOne") ,v2name)
+ #(lyrics-if-defined ,(sym v2name "LyricsTwo") ,v2name)
+ #(lyrics-if-defined ,(sym v2name "LyricsThree") ,v2name)
+ >> #})
+
+SATB = <<
+ \new ChoirStaff
+ \with {
+ \override VerticalAxisGroup.remove-empty = ##t
+ \override VerticalAxisGroup.remove-first = ##t
+ }
+ <<
+ #(one-voice-staff "Descant" "treble")
+
+ #(if (defaulting TwoVoicesPerStaff #f)
+ (two-voice-staff "Women" "treble" "Soprano" "Alto")
+ (make-simultaneous-music (list (one-voice-staff "Soprano" "treble")
+ (one-voice-staff "Alto" "treble"))))
+
+ #(lyrics-if-defined VerseOne "Soprano")
+ #(lyrics-if-defined VerseTwo "Soprano")
+ #(lyrics-if-defined VerseThree "Soprano")
+ #(lyrics-if-defined VerseFour "Soprano")
+ #(lyrics-if-defined VerseFive "Soprano")
+ #(lyrics-if-defined VerseSix "Soprano")
+ #(lyrics-if-defined VerseSeven "Soprano")
+ #(lyrics-if-defined VerseEight "Soprano")
+ #(lyrics-if-defined VerseNine "Soprano")
+
+ #(if (defaulting TwoVoicesPerStaff #f)
+ (two-voice-staff "Men" "bass" "Tenor" "Bass")
+ (make-simultaneous-music (list (one-voice-staff "Tenor" "treble_8")
+ (one-voice-staff "Bass" "bass"))))
+ >> % End ChoirStaff
+
+ \new PianoStaff
+ \with {
+ instrumentName = \markup \smallCaps
+ #(defaulting PianoInstrumentName "Piano" )
+ shortInstrumentName = \markup \smallCaps #(short-name "Piano" )
+ \override VerticalAxisGroup.remove-empty = ##t
+ \override VerticalAxisGroup.remove-first = ##t
+ }
+ <<
+ \new Staff {
+ \clef "treble"
+ #(defaulting Key)
+ \new Voice <<
+ #(defaulting Time)
+ #(defaulting PianoRHMusic)
+ >>
+ }
+ \new Dynamics {
+ #(defaulting PianoDynamics)
+ }
+ \new Staff {
+ \clef "bass"
+ #(defaulting Key)
+ \new Voice <<
+ #(defaulting Time)
+ #(defaulting PianoLHMusic)
+ >>
+ }
+ >>
+>>
+
+\score {
+ \keepWithTag #'print \SATB
+ \layout { #(defaulting Layout) }
+}
+
+\score {
+ \keepWithTag #'play \SATB
+ \midi { }
+}
+
\version "2.17.25"
-% code char abbreviations
-dashHat = "marcato"
-dashPlus = "stopped"
-dashDash = "tenuto"
-dashBang = "staccatissimo"
-dashLarger = "accent"
-dashDot = "staccato"
-dashUnderscore = "portato"
-
harmonic = #(make-music 'HarmonicEvent)
-accent = #(make-articulation "accent")
+accent = #(make-articulation "accent"
+ 'midi-extra-velocity 20)
coda = #(make-articulation "coda")
downbow = #(make-articulation "downbow")
downmordent = #(make-articulation "downmordent")
lineprall = #(make-articulation "lineprall")
longfermata = #(make-articulation "longfermata")
ltoe = #(make-articulation "ltoe")
-marcato = #(make-articulation "marcato")
+marcato = #(make-articulation "marcato"
+ 'midi-extra-velocity 40)
mordent = #(make-articulation "mordent")
open = #(make-articulation "open")
-portato = #(make-articulation "portato")
+
+portato = #(make-articulation "portato"
+ 'midi-length
+ (lambda (len context)
+ (ly:moment-mul len (ly:make-moment 3/4))))
prall = #(make-articulation "prall")
pralldown = #(make-articulation "pralldown")
prallmordent = #(make-articulation "prallmordent")
shortfermata = #(make-articulation "shortfermata")
signumcongruentiae = #(make-articulation "signumcongruentiae")
snappizzicato = #(make-articulation "snappizzicato")
-staccatissimo = #(make-articulation "staccatissimo")
-staccato = #(make-articulation "staccato")
+staccatissimo = #(make-articulation "staccatissimo"
+ 'midi-length
+ (lambda (len context)
+ (seconds->moment 1/8 context))
+ 'midi-extra-velocity 6)
+staccato = #(make-articulation "staccato"
+ 'midi-length
+ (lambda (len context)
+ (moment-min (ly:moment-mul len (ly:make-moment 1/2))
+ (seconds->moment 1/2 context)))
+ 'midi-extra-velocity 4)
stopped = #(make-articulation "stopped")
tenuto = #(make-articulation "tenuto")
thumb = \finger \markup \scale #(cons (magstep 5) (magstep 5))
upprall = #(make-articulation "upprall")
varcoda = #(make-articulation "varcoda")
verylongfermata = #(make-articulation "verylongfermata")
+
+% code char abbreviations
+dashHat = \marcato
+dashPlus = \stopped
+dashDash = \tenuto
+dashBang = \staccatissimo
+dashLarger = \accent
+dashDot = \staccato
+dashUnderscore = \portato
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2010--2012 Carl D. Sorensen <c_sorensen@byu.edu>
+%%%% Copyright (C) 2010--2014 Carl D. Sorensen <c_sorensen@byu.edu>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% common Finnish names for notes
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2010--2012 Valentin Villenave <valentin@villenave.net>
+%%%% Copyright (C) 2010--2014 Valentin Villenave <valentin@villenave.net>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% common Swedish names for notes
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2010--2012 Valentin Villenave <valentin@villenave.net>
+%%%% Copyright (C) 2010--2014 Valentin Villenave <valentin@villenave.net>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2011--2012 Bertrand Bordage <bordage.bertrand@gmail.com>
+%%%% Copyright (C) 2011--2014 Bertrand Bordage <bordage.bertrand@gmail.com>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
%%%% common Flemish names for notes
%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2010--2012 Valentin Villenave <valentin@villenave.net>
+%%%% Copyright (C) 2010--2014 Valentin Villenave <valentin@villenave.net>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
%%%% it under the terms of the GNU General Public License as published by
OTF_FILES = $(STAFF_SIZES:%=$(outdir)/emmentaler-%.otf) \
$(outdir)/emmentaler-brace.otf
-PE_SCRIPTS = $(STAFF_SIZES:%=$(outdir)/emmentaler-%.pe)
OTF_TABLES = $(STAFF_SIZES:%=$(outdir)/feta%.otf-table) \
$(BRACES:%=$(outdir)/feta-braces-%.otf-table)
SVG_FILES = $(OTF_FILES:%.otf=%.svg)
ENC_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.enc)
TFM_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.tfm)
-$(outdir)/emmentaler-brace.otf-table: $(BRACES:%=$(outdir)/feta-braces-%.otf-table)
- cat $^ > $@
-
$(outdir)/emmentaler-brace.otf-gtable: $(BRACES:%=$(outdir)/feta-braces-%.otf-gtable)
echo '(design_size . 20)' > $@
+$(outdir)/feta%.otf-table: $(outdir)/feta%.lisp $(outdir)/parmesan%.lisp \
+ $(outdir)/parmesan-noteheads%.lisp \
+ $(outdir)/feta-noteheads%.lisp \
+ $(outdir)/feta-flags%.lisp \
+ $(outdir)/feta-alphabet%.lisp
+ cat $^ > $@
-
-## ugh -- we want this to prevent failing -j2 compiles.
-define FETAxx-PREREQUISITES
-
-
-$(outdir)/feta$(i).otf-table: $(outdir)/feta$(i).lisp \
- $(outdir)/feta-noteheads$(i).lisp \
- $(outdir)/feta-flags$(i).lisp \
- $(outdir)/parmesan$(i).lisp \
- $(outdir)/parmesan-noteheads$(i).lisp \
- $(outdir)/feta-alphabet$(i).lisp
-endef
-
-$(eval $(foreach i,$(STAFF_SIZES),$(FETAxx-PREREQUISITES)))
-
-$(outdir)/%.otf-table: $(outdir)/%.lisp
- cat $< $(if $(findstring brace,$<),,$(subst feta,parmesan,$<)) \
- $(if $(findstring brace,$<),,$(subst feta,parmesan-noteheads,$<)) \
- $(if $(findstring brace,$<),,$(subst feta,feta-noteheads,$<)) \
- $(if $(findstring brace,$<),,$(subst feta,feta-flags,$<)) \
- $(if $(findstring brace,$<),,$(subst feta,feta-alphabet,$<)) > $@
-
+$(outdir)/emmentaler-brace.otf-table: $(foreach x, a b c d e f g h i,$(outdir)/feta-braces-$(x).lisp)
+ cat $^ > $@
$(outdir)/emmentaler-brace.otf: $(outdir)/emmentaler-brace.subfonts \
$(outdir)/emmentaler-brace.fontname \
$(outdir)/emmentaler-brace.otf-gtable \
$(outdir)/emmentaler-brace.pe
-$(outdir)/emmentaler-brace.otf\
- $(outdir)/emmentaler-brace.svg\
- $(outdir)/emmentaler-brace.woff: $(BRACES:%=$(outdir)/feta-braces-%.pfb)
-
$(outdir)/emmentaler-brace.fontname:
printf 'emmentaler-brace' > $@
$(outdir)/emmentaler-brace.subfonts:
echo $(subst .mf,,$(call src-wildcard,feta-braces-[a-z].mf)) > $@
-$(PE_SCRIPTS): $(buildscript-dir)/gen-emmentaler-scripts
- $< --dir=$(outdir)
-
+$(outdir)/emmentaler-%.genpe: $(buildscript-dir)/gen-emmentaler-scripts
+ $< --dir=$(outdir) --design-size=$(patsubst emmentaler-%.genpe,%,$(notdir $@))
-# Generate emmentaler-*.pe scripts first, and *.otf, *.svg, *.woff files last,
-# so that normally these files aren't regenerated on a subsequent call to make.
-ALL_GEN_FILES = $(PE_SCRIPTS) \
- $(LOG_FILES) \
- $(ENC_FILES) \
- $(LISP_FILES) \
- $(OTF_TABLES) \
+ALL_GEN_FILES = $(ENC_FILES) \
$(NCSB_OTFS) \
$(OTF_FILES) \
$(SVG_FILES) \
export MFINPUTS := .:$(MFINPUTS)
+# A few rules here generate multiple files from one command line. For
+# treating this case, we only declare one output explicitly, and use a
+# dummy rules for the other outputs. The dummy rule uses
+# $(UPDATE_TARGET) so the order of writing in the real command does
+# not confuse make.
+UPDATE_TARGET = if test -f $@; then touch $@ ; fi
+
# only for fonts which
#
# 1. are mentioned in font.scm
#
# 2. are not included with teTeX
#
-$(outdir)/%.lisp \
-$(outdir)/%.otf-gtable \
-$(outdir)/%.enc \
-$(outdir)/%.pe: $(outdir)/%.log $(outdir)/%.tfm
+$(outdir)/%.lisp: $(outdir)/%.log $(outdir)/%.tfm
$(buildscript-dir)/mf-to-table \
--global-lisp=$(outdir)/$(<F:.log=.otf-gtable) \
--lisp=$(outdir)/$(<F:.log=.lisp) \
--enc $(outdir)/$(<F:.log=.enc) \
$<
+$(outdir)/%.otf-gtable $(outdir)/%.enc: $(outdir)/%.lisp
+ $(UPDATE_TARGET)
+
## Putting pfb here forces all .pfb fonts to be built before
# fontforge starts generating emmentaler-*.* fonts.
-$(outdir)/emmentaler-%.otf \
-$(outdir)/emmentaler-%.svg \
-$(outdir)/emmentaler-%.woff: $(outdir)/emmentaler-%.pe \
+$(outdir)/emmentaler-%.otf: $(outdir)/emmentaler-%.genpe \
$(outdir)/feta%.pfb \
$(outdir)/feta-noteheads%.pfb \
$(outdir)/feta-flags%.pfb \
| pfb
cd $(outdir) && $(FONTFORGE) -script $(notdir $<)
-$(outdir)/emmentaler-brace.otf\
- $(outdir)/emmentaler-brace.svg\
- $(outdir)/emmentaler-brace.woff: $(outdir)/emmentaler-brace.pe\
+$(outdir)/emmentaler-%.svg $(outdir)/emmentaler-%.woff: $(outdir)/emmentaler-%.otf
+ $(UPDATE_TARGET)
+
+$(outdir)/emmentaler-brace.otf: $(outdir)/emmentaler-brace.pe\
$(foreach s,$(BRACES),$(outdir)/feta-braces-$(s).pfb) \
$(outdir)/emmentaler-brace.otf-table $(outdir)/emmentaler-brace.otf-gtable \
| pfb
cd $(outdir) && $(FONTFORGE) -script emmentaler-brace.pe
-default: $(ALL_GEN_FILES) \
- $(outdir)/emmentaler-20.otf \
- tree-regen \
+$(outdir)/emmentaler-brace.svg $(outdir)/emmentaler-brace.woff: $(outdir)/emmentaler-brace.otf
+ $(UPDATE_TARGET)
+
+default: tree-regen \
$(outdir)/fonts.conf
.PHONY: tree-regen
-# FIXME: temporary hack: must regenerate after building fonts
tree-regen: $(ALL_GEN_FILES)
${MAKE} -C $(top-build-dir) link-mf-tree
-$(outdir)/%.lisp \
-$(outdir)/%.otf-gtable \
-$(outdir)/%.enc \
-$(outdir)/%.pe: $(outdir)/%.log $(outdir)/%.tfm
- $(buildscript-dir)/mf-to-table \
- --global-lisp=$(outdir)/$(<F:.log=.otf-gtable) \
- --lisp=$(outdir)/$(<F:.log=.lisp) \
- --outdir=$(outdir) \
- --enc $(outdir)/$(<F:.log=.enc) \
- $<
local-clean:
rm -f mfplain.mem mfplain.log
$(outdir)/fonts.conf:
echo '<fontconfig><dir>'$(shell cd $(outdir); pwd)'</dir></fontconfig>' > $@
-$(NCSB_OTFS): $(NCSB_SOURCE_FILES) \
+
+$(outdir)/CenturySchL-Roma.otf: $(NCSB_SOURCE_FILES) \
$(auxscript-dir)/pfx2ttf.fontforge
$(foreach i, $(basename $(NCSB_SOURCE_FILES)), \
$(FONTFORGE) -script $(auxscript-dir)/pfx2ttf.fontforge \
$(i).pfb $(i).afm $(outdir)/ && ) true
-# eof
+
+$(addprefix $(outdir)/,CenturySchL-Ital.otf \
+ CenturySchL-Bold.otf \
+ CenturySchL-BoldItal.otf): $(outdir)/CenturySchL-Roma.otf
+ $(UPDATE_TARGET)
--- /dev/null
+
+staffsize# := design_size * pt#;
+input debugging-settings;
+input feta-autometric;
+input feta-macros;
+mode_setup;
+input feta-params;
--- /dev/null
+
+% Used for example to print glyphs with stafflines
+test := 0;
+
+if test = -1:
+ % TODO: what's this? Seems to be broken...
+ mode := smoke;
+fi;
+
+% change this to 0.5 to have glyphs positioned on
+% staff spaces instead of stafflines in testing mode
+% (useful e.g. to check how accidentals visually interact
+% with stafflines in different configurations).
+stafflines_y_offset := 0;
--- /dev/null
+% TODO: i'm not sure if the name is right - is this declaring or something else?
+
+autometric_parameter ("staffsize", staffsize#);
+autometric_parameter ("stafflinethickness", stafflinethickness#);
+autometric_parameter ("staff_space", staff_space#);
+autometric_parameter ("linethickness", linethickness#);
+autometric_parameter ("black_notehead_width", black_notehead_width#);
+autometric_parameter ("ledgerlinethickness", ledgerlinethickness#);
+autometric_parameter ("blot_diameter", blot_diameter#);
% Feta (not the Font-En-Tja) music font -- Accidentals
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-%
-% also show in other configuration wrt staff lines.
-%
-def draw_shifted_too =
-if test > 0:
- fet_beginchar ("shifted too", "");
- set_char_box (0, 0, 0, 0);
- currentpicture := remember_pic;
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-enddef;
-
-
%
% Accidentals from various sources, notably
%
fet_begingroup ("accidentals");
-
-%
-% Draw an arrow
-%
-% * `stemslant' gives the direction of the stem's left boundary
-% (needed for brushed stems, equals "up" for straight stems)
-% * `extend' is used to make the stem longer or shorter (if negative);
-% different kinds of accidentals need different values here
-%
-def draw_arrow (expr attach, stemwidth, stemslant, extend, pointingdown) =
-begingroup;
- save htip; % tip height
- save wwing; % wing `radius'
- save angle_wing_bot, angle_wing_top, angle_tip;
- save upshift;
- clearxy;
-
- wwing := 0.26 stemwidth;
- htip := staff_space * 0.85 + stafflinethickness - wwing;
-
- % `flip' is used to reflect the arrow vertically
- % if arrow points downward
- transform flip;
- if pointingdown:
- flip = identity reflectedabout (origin, right);
- else:
- flip = identity;
- fi;
-
- z1 = attach shifted (-stemwidth / 2, 0);
- upshift := max (0, wwing + 0.1 staff_space + extend);
- z2 = z1 shifted (((unitvector stemslant)
- scaled upshift) transformed flip);
-
- z7 = attach shifted ((stemwidth/2),0);
- z6 = z7 shifted (((unitvector (-xpart stemslant, ypart stemslant))
- scaled upshift) transformed flip);
- z2 - z3 = ( 0.38 staff_space, 0.05 htip) transformed flip;
- z6 - z5 = (-0.38 staff_space, 0.05 htip) transformed flip;
-
- z4 = attach shifted ((-0.2 stemwidth, upshift + htip)
- transformed flip);
- z4'= attach shifted (( 0.2 stemwidth, upshift + htip)
- transformed flip);
-
- % `angle_wing_bot' is the angle at which the arc
- % from z2 to z3a enters z3a
- % `angle_wing_top' is the angle at which the arc
- % from z3b to z4 leaves z3b
- % `angle_tip' is the angle at which the arc
- % from z4 to z4' leaves z4
- angle_wing_bot = 30;
- angle_wing_top = 55;
- angle_tip = 68;
-
- z3a = z3 shifted ((((dir angle_wing_bot) rotated -90)
- scaled wwing) transformed flip);
- z3b = z3 shifted ((((dir angle_wing_top) rotated 90)
- scaled wwing) transformed flip);
-
- z5a = z5 shifted ((((dir (180 - angle_wing_bot)) rotated 90)
- scaled wwing) transformed flip);
- z5b = z5 shifted ((((dir (180 - angle_wing_top)) rotated -90)
- scaled wwing) transformed flip);
-
- % Draw the arrow
- pickup pencircle scaled 1;
- fill z1
- -- z2{stemslant transformed flip}
- .. {(-dir angle_wing_bot) transformed flip}z3a
- .. z3b{(dir angle_wing_top) transformed flip}
- .. z4{(dir angle_tip) transformed flip}
- .. z4'{(dir (-angle_tip)) transformed flip}
- .. {(dir (-angle_wing_top)) transformed flip}z5b
- .. z5a{(-dir (-angle_wing_bot)) transformed flip}
- .. z6{((-stemslant) reflectedabout (origin, up)) transformed flip}
- -- z7
- -- cycle;
-
- labels (range 0 thru 7, 4', 3a, 3b, 5a, 5b);
-endgroup;
-enddef;
-
-save remember_pic;
-picture remember_pic;
-
-save sharp_beamheight;
-sharp_beamheight# := 0.3 staff_space# + stafflinethickness#;
-
-%
-% The beams of most sharps have horizontal endings (as if drawn with
-% a square pen). [Wanske] does not mention this, so we'll just ignore
-% this fact.
-%
-
-def draw_meta_sharp (expr width, offset) =
- save beamwidth, beamslope;
- save ne, nw_dist;
- pair ne, nw_dist;
-
- beamwidth := width;
-
- define_whole_vertical_blacker_pixels (sharp_beamheight);
-
- clearxy;
-
- beamslope = sharp_beamheight / beamwidth;
-
- pickup pencircle scaled 2 blot_diameter;
-
- rt x2 - lft x1 = beamwidth;
- z2 = z1 + whatever * (beamwidth, sharp_beamheight);
- .5 [z1, z3] = (.5 w, offset);
- x3 = x2;
- top y2 - bot y3 = sharp_beamheight;
- x4 = x1;
- top y1 - bot y4 = sharp_beamheight;
-
- ne = unitvector (z2 - z1);
- nw_dist = (ne rotated 90) * blot_diameter;
-
- fill lft z1{up}
- ... (z1 + nw_dist){ne}
- -- (z2 + nw_dist){ne}
- ... rt z2{down}
- -- rt z3{down}
- ... (z3 - nw_dist){-ne}
- -- (z4 - nw_dist){-ne}
- ... lft z4{up}
- -- cycle;
-
- labels (1, 2, 3, 4);
-enddef;
-
-
-def draw_sharp(expr arrowup, arrowdown) =
- save stem, stemx, stemwidth;
- save outer_space, interbeam;
- save stemlength, extendleft, extendright, height, depth;
-
- stemwidth# := stafflinethickness# + .05 staff_space#;
- define_whole_blacker_pixels (stemwidth);
-
- interbeam := 1.05 staff_space_rounded;
-
- stemlength# := 1.5 staff_space#;
- define_pixels (stemlength);
-
- height# = stemlength#;
- depth# = stemlength#;
- extendright# = 0;
- extendleft# = 0;
- if arrowup:
- height# := height# + 1.2 staff_space#;
- extendright# := extendright# + 1.5 stafflinethickness#;
- fi;
- if arrowdown:
- depth# := depth# + 1.2 staff_space#;
- extendleft# := extendleft# + 1.5 stafflinethickness#;
- fi;
- define_pixels (extendleft, extendright);
- set_char_box (extendleft#, 1.1 staff_space#, depth#, height#);
-
- stem := 7 / 16 * w;
- stemx := hround stem;
- outer_space := hround ((w - stemx - stemwidth) / 2);
-
- w := 2 outer_space + stemx + stemwidth;
- d := d - feta_space_shift;
-
- draw_meta_sharp (w, -.5 interbeam);
- draw_meta_sharp (w, -.5 interbeam + vround interbeam);
-
- % expand the charbox so that it encloses the whole arrow;
- % this must not happen earlier because some commands above
- % still rely on the old width
- w := w + extendright;
-
- pickup pencircle scaled stemwidth;
-
- lft x5 = lft x6 = outer_space;
- lft x7 = lft x8 = outer_space + stemx;
- bot y5 = -stemlength;
- top y6 = vround (1.5 staff_space - stem * beamslope);
- bot y7 = -top y6 + feta_space_shift;
- top y8 = stemlength;
-
- labels (5, 6, 7, 8);
-
- draw_gridline (z5, z6, stemwidth);
- draw_gridline (z7, z8, stemwidth);
-
- if arrowup:
- draw_arrow (z8, stemwidth, up,
- stafflinethickness / 2 + stemwidth / 2, false);
- fi;
- if arrowdown:
- draw_arrow (z5, stemwidth, up,
- stafflinethickness / 2 + stemwidth / 2, true);
- fi;
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-enddef;
-
-
-fet_beginchar ("Sharp", "sharp");
- draw_sharp (false, false);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Arrowed Sharp (arrow up)", "sharp.arrowup");
- draw_sharp (true, false);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Arrowed Sharp (arrow down)", "sharp.arrowdown");
- draw_sharp (false, true);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Arrowed Sharp (arrows up and down)", "sharp.arrowboth");
- draw_sharp (true, true);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("1/2 Sharp", "sharp.slashslash.stem");
- save stem, stemwidth;
- save outer_space, interbeam;
-
- stemwidth# := stafflinethickness# + .05 staff_space#;
- define_whole_blacker_pixels (stemwidth);
-
- interbeam := 1.05 staff_space_rounded;
-
- set_char_box (0, 0.7 staff_space#,
- 1.5 staff_space#, 1.5 staff_space#);
-
- stem := 7 / 16 * w;
- outer_space := hround ((w - stemwidth) / 2);
-
- w := 2 outer_space + stemwidth;
- d := d - feta_space_shift;
-
- draw_meta_sharp (w, -.5 interbeam);
- draw_meta_sharp (w, -.5 interbeam + vround interbeam);
-
- pickup pencircle scaled stemwidth;
-
- lft x5 = lft x6 = outer_space;
- top y6 = vround (1.5 staff_space - .5 stem);
- bot y5 = -top y6 + feta_space_shift;
-
- labels (5, 6);
-
- draw_gridline (z5, z6, stemwidth);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Sharp (3 beams)", "sharp.slashslashslash.stemstem");
- save stem, stemx, stemwidth;
- save outer_space, interbeam;
- save sharp_beamheight;
-
- sharp_beamheight# := 0.22 staff_space# + stafflinethickness#;
-
- stemwidth# := stafflinethickness# + .05 staff_space#;
- define_whole_blacker_pixels (stemwidth);
-
- interbeam := 1.2 staff_space_rounded;
-
- set_char_box (0, 1.1 staff_space#,
- 1.5 staff_space#, 1.5 staff_space#);
-
- stem := 7 / 16 * w;
- stemx := hround stem;
- outer_space := hround ((w - stemx - stemwidth) / 2);
-
- w := 2 outer_space + stemx + stemwidth;
- d := d - feta_space_shift;
-
- draw_meta_sharp (.88 w, -.5 interbeam);
- draw_meta_sharp (.88 w, -.5 interbeam + vround interbeam);
- sharp_beamheight# := 1/.88 sharp_beamheight#;
- draw_meta_sharp (w, 0);
-
- pickup pencircle scaled stemwidth;
-
- lft x5 = lft x6 = outer_space;
- lft x7 = lft x8 = outer_space + stemx;
- bot y5 = -d;
- top y6 = vround (1.5 staff_space - stem * beamslope);
- bot y7 = -top y6 + feta_space_shift;
- top y8 = h;
-
- labels (5, 6, 7, 8);
-
- draw_gridline (z5, z6, stemwidth);
- draw_gridline (z7, z8, stemwidth);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("1/2 Sharp (3 beams)", "sharp.slashslashslash.stem");
- save stem, stemx, stemwidth;
- save outer_space, interbeam;
- save sharp_beamheight;
-
- sharp_beamheight# := 0.22 staff_space# + stafflinethickness#;
-
- stemwidth# := stafflinethickness# + .05 staff_space#;
- define_whole_blacker_pixels (stemwidth);
-
- interbeam := 1.2 staff_space_rounded;
-
- set_char_box (0, 0.95 staff_space#,
- 1.3 staff_space#, 1.3 staff_space#);
-
- stem := 7 / 16 * w;
- outer_space := hround ((w - stemwidth) / 2);
-
- w := 2 outer_space + stemwidth;
- d := d - feta_space_shift;
-
- draw_meta_sharp (.8 w, -.5 interbeam);
- draw_meta_sharp (.8 w, -.5 interbeam + vround interbeam);
- sharp_beamheight# := 1/.8 sharp_beamheight#;
- draw_meta_sharp (w, 0);
-
- pickup pencircle scaled stemwidth;
-
- lft x5 = lft x6 = outer_space;
- top y6 = vround (1.5 staff_space - .5 stem);
- bot y5 = -top y6 + feta_space_shift;
- labels (5, 6);
-
- draw_gridline (z5, z6, stemwidth);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("3/4 Sharp", "sharp.slashslash.stemstemstem");
- save stem, stemx, stemwidth;
- save outer_space, interbeam;
-
- stemwidth# := stafflinethickness# + .05 staff_space#;
- define_whole_blacker_pixels (stemwidth);
-
- interbeam := 1.05 staff_space_rounded;
-
- set_char_box (0, 1.6 staff_space#,
- 1.5 staff_space#, 1.5 staff_space#);
-
- stem := 9 / 32 * w;
- stemx := hround stem;
- outer_space := hround ((w - 2 stemx - stemwidth) / 2);
-
- w := 2 outer_space + 2 stemx + stemwidth;
- d := d - feta_space_shift;
-
- draw_meta_sharp (w, -.5 interbeam);
- draw_meta_sharp (w, -.5 interbeam + vround interbeam);
-
- pickup pencircle scaled stemwidth;
-
- lft x5 = lft x6 = outer_space;
- lft x7 = lft x8 = outer_space + stemx;
- lft x9 = lft x10 = outer_space + 2 stemx;
- bot y5 = -d;
- top y6 = vround (1.5 staff_space - 2 stem * beamslope);
- bot y9 = -top y6 + feta_space_shift;
- top y10 = h;
- y7 = .5 [y5, y9];
- y8 = .5 [y6, y10];
-
- labels (5, 6, 7, 8, 9, 10);
-
- draw_gridline (z5, z6, stemwidth);
- draw_gridline (z7, z8, stemwidth);
- draw_gridline (z9, z10, stemwidth);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-%
-% The stems of the natural are brushed (at least, in Barenreiter SCS)
-%
-
-def draw_natural (expr arrowup, arrowdown) =
- save stemwidth, top_stem_thick;
- save ne, pat_top, pat_bottom;
- save depth, height, extendleft, extendright, stemlength;
- save brush_scale_up, brush_scale_down;
- pair ne;
- path pat_top, pat_bottom;
-
- top_stem_thick# = stafflinethickness# + .10 staff_space#;
- stemwidth# = 0.09 staff_space# + .5 stafflinethickness#;
- define_whole_blacker_pixels (top_stem_thick, stemwidth);
-
- stemlength# = 1.5 staff_space#;
- define_pixels (stemlength);
-
- height# = stemlength#;
- depth# = stemlength#;
- extendleft# = 0;
- extendright# = 0;
- if arrowup:
- extendleft# := 3 stafflinethickness#;
- height# := height# + 1.2 staff_space#;
- fi;
- if arrowdown:
- extendright# := 3.15 stafflinethickness#;
- depth# := depth# + 1.2 staff_space#;
- fi;
- define_pixels (extendright);
-
- set_char_box (extendleft#, 2/3 staff_space#, depth#, height#);
-
- d := d - feta_space_shift;
-
- pickup pencircle scaled stemwidth;
-
- brush_scale_up := 1.0;
- brush_scale_down := 1.0;
- % to look nice, arrowed stems must be less brushed
- if arrowup:
- brush_scale_up := 0.85;
- fi;
- if arrowdown:
- brush_scale_down := 0.85;
- fi;
-
- penpos1 (top_stem_thick, 0);
- penpos3 (top_stem_thick, 0);
- penpos2 (stemwidth, 0);
- penpos4 (stemwidth, 0);
- % z1' and z3' are needed for the arrowed accidentals
- penpos1' (top_stem_thick * brush_scale_up, 0);
- penpos3' (top_stem_thick * brush_scale_down, 0);
-
- x2r = w;
- x4l = 0;
- x3 = x3' = x2;
- x1 = x1' = x4;
-
- y1 = y1' = stemlength;
- y3 = y3' = -stemlength;
- top y2 = vround (staff_space - 3/2 stafflinethickness);
- y4 = -y2 + feta_space_shift;
-
- pat_bottom := z4r{z4r - z1r}
- .. bot z4
- .. z4l{z1l - z4l};
- fill simple_serif (z1'l, z1'r, -30)
- -- pat_bottom
- -- cycle;
-
- pat_top := z2r{z2r - z3r}
- .. top z2
- .. z2l{z3l - z2l};
- fill simple_serif (z3'l, z3'r, 30)
- -- pat_top
- -- cycle;
-
- ne = (x2 - x4, stafflinethickness);
-
- z11' = z3l + whatever * (z2l - z3l);
- y11' = vround (.5 (staff_space - stafflinethickness));
- z11 = z11' + whatever * ne;
- x11 = x12;
- z12 = directionpoint -ne of pat_top;
- z13 = z12 + whatever * ne;
- x13 = x1;
- z14 = z11 + whatever * ne;
- x14 = x1;
-
- z21' = z4r + whatever * (z1r - z4r);
- y21' = -y11' + feta_space_shift;
- z21 = z21' + whatever * ne;
- x21 = x22;
- z22 = directionpoint -ne of pat_bottom;
- z23 = z22 + whatever * ne;
- x23 = x3;
- z24 = z21 + whatever * ne;
- x24 = x3;
-
- fill z11
- -- z12
- -- z13
- -- z14
- -- cycle;
- fill z21
- -- z22
- -- z23
- -- z24
- -- cycle;
-
- penlabels (1, 1', 2, 3, 3', 4);
- labels (11, 11', 12, 13, 14, 21, 21', 22, 23, 24);
-
- if arrowup:
- draw_arrow (z1, top_stem_thick * brush_scale_up,
- z1'l - z4l, stafflinethickness / 2, false);
- fi;
- if arrowdown:
- draw_arrow (z3, top_stem_thick * brush_scale_down,
- z2r - z3'r, stafflinethickness / 2, true);
- w := w + extendright;
- fi;
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-enddef;
-
-
-fet_beginchar ("Natural", "natural");
- draw_natural (false, false);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Arrowed Natural (arrow up)", "natural.arrowup");
- draw_natural (true, false);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Arrowed Natural (arrow down)", "natural.arrowdown");
- draw_natural (false, true);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Arrowed Natural (arrows up and down)", "natural.arrowboth");
- draw_natural (true, true);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-%
-% Dedicated to my mom. (3/10/97)
-%
-% Mamma, ik hou van je; kom je alsjeblieft terug?
-% -- HW
-%
-%
-% TODO: remove crook_fatness
-% TODO: document, simplify!
-%
-
-def draw_meta_flat (expr xcenter, w, crook_fatness, arrowup, arrowdown) =
- save crook_thinness;
- save bottom_overshoot, bot_crook_dir;
- save top_stem_thick, top_stem_thick_orig;
- save bottom_stem_thick, hair, smaller_hole;
- save top_crook_thinness;
- save zwiep;
- save center;
- pair center, bot_crook_dir;
- save clearing, clearing_orig;
-
- clearxy;
-
- % the stem shouldn't reach the top staff line.
- %% TODO: should take from height.
- %
- % TODO: parameterize this
- %
- if w >= 0.75 staff_space:
- smaller_hole = 0.35 stafflinethickness;
- else:
- smaller_hole = 0;
- fi;
- crook_thinness = .7 stafflinethickness + .06 staff_space;
- top_crook_thinness = 1 stafflinethickness + .065 staff_space;
- clearing = 1.7 stafflinethickness;
- clearing_orig = clearing;
- if arrowup:
- clearing := 0.5 staff_space;
- fi;
- bottom_overshoot = stafflinethickness;
-
- bottom_stem_thick# = 0.06 staff_space# + 0.6 stafflinethickness#;
- top_stem_thick# = 0.1 staff_space# + 1.2 stafflinethickness#;
- top_stem_thick_orig# = top_stem_thick#;
- if arrowup:
- % to look nice, arrowed stems should be less brushed
- top_stem_thick# := top_stem_thick# * 0.8;
- fi;
- define_whole_blacker_pixels (bottom_stem_thick, top_stem_thick,
- top_stem_thick_orig);
-
- if odd (top_stem_thick - bottom_stem_thick):
- top_stem_thick := top_stem_thick - 1;
- fi;
- if odd (top_stem_thick_orig - bottom_stem_thick):
- top_stem_thick_orig := top_stem_thick_orig - 1;
- fi;
-
- center = (xcenter, 0);
-
- x1l = hround (xcenter - .5 top_stem_thick);
- y1 = vround (2 staff_space - clearing);
- x2l = hround (xcenter - .5 bottom_stem_thick);
- y2 = -.5 staff_space - .5 stafflinethickness;
- % z16 and the `*_orig' variables are needed for arrowed accidentals
- % because their inner part should be unchanged from plain ones but
- % the points z3l, z3r, and z10 depend on values that are different
- % for arrowed accidentals
- x16l = hround (xcenter -.5 top_stem_thick_orig);
- y16 = vround (2 staff_space - clearing_orig);
-
- penpos1 (top_stem_thick, 0);
- penpos16 (top_stem_thick_orig, 0);
- penpos2 (bottom_stem_thick, 0);
-
- y3l = vfloor ((staff_space - stafflinethickness) / 2);
- z3l = whatever [z2r, z1r];
- z3r = .3 [z2r,
- (z16r shifted (0, clearing_orig - 1.7 stafflinethickness))]
- + (smaller_hole, 0);
- x3r := hceiling x3r;
-
- % we insert z3l to get better conversion with mf2pt1
- fill simple_serif (z1r, z1l, 30)
- -- z2l
- -- z2r
- -- z3l
- -- cycle;
-
- z10 = whatever [z2r, z16r] + (smaller_hole, 0);
- y10 = -1/10 staff_space;
- x10 := hceiling x10;
-
- x11 = xcenter + bottom_overshoot / 3;
- y11 = -vround (.5 (staff_space + stafflinethickness)
- + bottom_overshoot);
-
- x2a = 0.2[x2r, x7];
- y2a = 1.5[y2, y11];
-
- penpos4 (whatever, 53);
-
- y4l - y4r = top_crook_thinness;
- y5r = .15 staff_space;
- x5l = hround (w + xcenter);
- y4 = staff_space / 2;
- x4r = .45 [x5r, x3r];
- y4l := vround y4l;
-
- penpos5 (crook_fatness, -175);
-
- bot_crook_dir = unitvector ((x5l, 0) - z11);
- z8 = z11 + whatever * bot_crook_dir;
- y8 = -staff_space / 2;
-
- z7 = z8
- + whatever * bot_crook_dir
- + crook_thinness * (bot_crook_dir rotated 90);
- x7 = .1 [x3r, x8];
-
- unfill z3r{z3r - z10}
- .. z4r{right}
- .. z5r{down}
- .. z7{-bot_crook_dir}
- & z7
- .. z10{z3r - z10}
- -- cycle;
-
- if arrowdown:
- fill z2l{down}
- .. z2a{up}
- .. z8{bot_crook_dir}
- .. z5l{up}
- .. z4l{left}
- .. z3l
- -- cycle;
- else:
- fill z2l{down}
- .. z11{right}
- .. z8{bot_crook_dir}
- .. z5l{up}
- .. z4l{left}
- .. z3l
- -- cycle;
- fi;
-
- if arrowup:
- draw_arrow (z1, top_stem_thick, z1l - z2l,
- 0.5 stafflinethickness, false);
- fi;
- if arrowdown:
- draw_arrow ((0.5 [x2l, x2a], y2), x2a - x2l, up,
- staff_space / 2, true);
- fi;
-enddef;
-
-
-def draw_arrowed_meta_flat (expr xcenter, width, crook_fatness,
- arrowup, arrowdown) =
- save depth, height, extendleft;
-
- depth# = 0.6 staff_space#;
- height# = 1.9 staff_space#;
- extendleft# := 1.2 stafflinethickness#;
- if arrowup:
- extendleft# := 3.45 stafflinethickness#;
- height# := height# + 0.8 staff_space#;
- fi;
- if arrowdown:
- extendleft# := 3.45 stafflinethickness#;
- depth# := depth# + 1.6 staff_space#;
- fi;
-
- set_char_box (extendleft#, width, depth#, height#);
- draw_meta_flat(xcenter, w, crook_fatness, arrowup, arrowdown);
-enddef;
-
-%
-% unfortunately, 600dpi is not enough to show the brush of the stem.
-%
-
-fet_beginchar ("Flat", "flat");
- draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space,
- false, false);
- penlabels (range 0 thru 11);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Arrowed Flat (arrow up)", "flat.arrowup");
- draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space,
- true, false);
- penlabels (range 0 thru 23);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Arrowed Flat (arrow down)", "flat.arrowdown");
- draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space,
- false, true);
- penlabels (range 0 thru 23);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Arrowed Flat (arrow up and down)", "flat.arrowboth");
- draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space,
- true, true);
- penlabels (range 0 thru 23);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Flat (slashed)", "flat.slash");
- set_char_box (.4 staff_space#, .8 staff_space#,
- 0.6 staff_space#, 1.9 staff_space#);
-
- draw_meta_flat (0, w, 0.31 staff_space, false, false);
-
- clearxy;
-
- save slope, slash_width;
- slope = 0.5;
- slash_width = w;
-
- z11 = (0, h / 2);
- z12 = z11 - (slash_width, slash_width * slope) / 2;
- z13 = z11 + (slash_width, slash_width * slope) / 2;
- penpos12 (1.5 stafflinethickness, angle (z13 - z12) - 90);
- penpos13 (1.5 stafflinethickness, angle (z13 - z12) - 90);
-
- z14 = z12 - .75 stafflinethickness * unitvector (z13 - z12);
- z15 = z13 + .75 stafflinethickness * unitvector (z13 - z12);
-
- fill z13r
- .. z15
- .. z13l
- -- z12l
- .. z14
- .. z12r
- -- z13r
- .. cycle;
-
- penlabels (12, 13);
- labels (14, 15);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-fet_beginchar ("Flat (slashed twice)", "flat.slashslash");
- set_char_box (.4 staff_space#, .8 staff_space#,
- 0.6 staff_space#, 1.9 staff_space#);
-
- draw_meta_flat (0, w, 0.31 staff_space, false, false);
-
- clearxy;
-
- save slope, slash_width;
- slope = 0.5;
- slash_width = w;
-
- z11 = (0, 5/12 h);
- z12 = z11 - (slash_width, slash_width * slope) / 2;
- z13 = z11 + (slash_width, slash_width * slope) / 2;
- penpos12 (1.5 stafflinethickness, angle (z13 - z12) - 90);
- penpos13 (1.5 stafflinethickness, angle (z13 - z12) - 90);
-
- z14 = z12 - .75 stafflinethickness * unitvector (z13 - z12);
- z15 = z13 + .75 stafflinethickness * unitvector (z13 - z12);
-
- fill z13r
- .. z15
- .. z13l
- -- z12l
- .. z14
- .. z12r
- -- z13r
- .. cycle;
-
- penlabels (12, 13);
- labels (14, 15);
-
- z21 = (0, 2/3 h);
- z22 = z21 - (slash_width, slash_width * slope) / 2;
- z23 = z21 + (slash_width, slash_width * slope) / 2;
- penpos22 (1.5 stafflinethickness, angle (z23 - z22) - 90);
- penpos23 (1.5 stafflinethickness, angle (z23 - z22) - 90);
-
- z24 = z22 - .75 stafflinethickness * unitvector (z23 - z22);
- z25 = z23 + .75 stafflinethickness * unitvector (z23 - z22);
-
- fill z23r
- .. z25
- .. z23l
- -- z22l
- .. z24
- .. z22r
- -- z23r
- .. cycle;
-
- penlabels (22, 23);
- labels (24, 25);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-fet_beginchar ("Flatflat (mirrored)", "mirroredflat.flat");
- set_char_box (0, 1.6 staff_space#,
- 0.6 staff_space#, 1.9 staff_space#);
-
- % This is a modified version of `draw_meta_flat'.
-
- save crook_thinness, crook_fatness;
- save bottom_overshoot, bot_crook_dir;
- save top_stem_thick, bottom_stem_thick, hair, smaller_hole;
- save top_crook_thinness;
- save zwiep;
- save center;
- pair center, bot_crook_dir;
- save clearing, wid;
- save pat;
- path pat;
-
- clearxy;
-
- wid = w / 2;
-
- % the stem shouldn't reach the top staff line.
- %% TODO: should take from height.
- %
- % TODO: parameterize this
- %
- if wid >= 0.75 staff_space:
- smaller_hole = 0.35 stafflinethickness;
- else:
- smaller_hole = 0;
- fi;
- clearing = 1.7 stafflinethickness;
- crook_thinness = .7 stafflinethickness + .06 staff_space;
- crook_fatness = 0.31 staff_space;
- top_crook_thinness = 1 stafflinethickness + .065 staff_space;
- bottom_overshoot = stafflinethickness;
-
- bottom_stem_thick# = 0.06 staff_space# + 0.6 stafflinethickness#;
- top_stem_thick# = 0.1 staff_space# + 1.2 stafflinethickness#;
- define_whole_blacker_pixels (bottom_stem_thick, top_stem_thick);
-
- if odd (top_stem_thick - bottom_stem_thick):
- top_stem_thick := top_stem_thick - 1;
- fi;
-
- center = (0, 0);
-
- x1l = hround (-.5 top_stem_thick);
- y1 = vround (2 staff_space - clearing);
- x2l = hround (-.5 bottom_stem_thick);
- y2 = -.5 staff_space - .5 stafflinethickness;
-
- penpos1 (top_stem_thick, 0);
- penpos2 (bottom_stem_thick, 0);
-
- y3l = vfloor ((staff_space - stafflinethickness) / 2);
- z3l = whatever [z2r, z1r];
- z3r = .3 [z2r, z1r] + (smaller_hole, 0);
- x3r := hceiling x3r;
-
- z10 = whatever [z2r, z1r] + (smaller_hole, 0);
- y10 = -1/10 staff_space;
- x10 := hceiling x10;
-
- x11 = bottom_overshoot / 3;
- y11 = -vround (.5 (staff_space + stafflinethickness)
- + bottom_overshoot);
-
- penpos4 (whatever, 53);
-
- y4l - y4r = top_crook_thinness;
- y5r = .15 staff_space;
- x5l = hround (wid);
- y4 = staff_space / 2;
- x4r = .45 [x5r, x3r];
- y4l := vround y4l;
-
- penpos5 (crook_fatness, -175);
-
- bot_crook_dir = unitvector ((x5l, 0) - z11);
- z8 = z11 + whatever * bot_crook_dir;
- y8 = -staff_space / 2;
-
- z7 = z8
- + whatever * bot_crook_dir
- + crook_thinness * (bot_crook_dir rotated 90);
- x7 = .1 [x3r, x8];
-
- pat := z3r{z3r - z10}
- .. z4r{right}
- .. z5r{down}
- .. z7{-bot_crook_dir}
- & z7
- .. z10{z3r - z10}
- -- cycle;
- unfill pat;
- unfill pat xscaled -1;
-
- pat := z11{right}
- .. z8{bot_crook_dir}
- .. z5l{up}
- .. z4l{left}
- .. z3l;
- fill pat
- -- simple_serif (z1r, z1l, 30)
- -- reverse pat xscaled -1 shifted (-feta_eps, 0)
- -- cycle;
-
- currentpicture := currentpicture shifted (w/2, 0);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Semi flat", "mirroredflat");
- set_char_box (1.2 stafflinethickness#, .8 staff_space#,
- 0.6 staff_space#, 1.9 staff_space#);
-
- draw_meta_flat (0, w, 0.31 staff_space, false, false);
- currentpicture := currentpicture xscaled -1 shifted (w - b, 0);
-fet_endchar;
-
-
-fet_beginchar ("Semi flat", "mirroredflat.backslash");
- set_char_box (.4 staff_space#, .8 staff_space#,
- 0.6 staff_space#, 1.9 staff_space#);
-
- draw_meta_flat (0, w, 0.31 staff_space, false, false);
-
- clearxy;
-
- save slope, slash_width;
- slope = 0.5;
- slash_width = w;
-
- z11 = (0, h / 2);
- z12 = z11 - (slash_width, slash_width * slope) / 2;
- z13 = z11 + (slash_width, slash_width * slope) / 2;
- penpos12 (1.5 stafflinethickness, angle (z13 - z12) - 90);
- penpos13 (1.5 stafflinethickness, angle (z13 - z12) - 90);
-
- z14 = z12 - .75 stafflinethickness * unitvector (z13 - z12);
- z15 = z13 + .75 stafflinethickness * unitvector (z13 - z12);
-
- fill z13r
- .. z15
- .. z13l
- -- z12l
- .. z14
- .. z12r
- -- z13r
- .. cycle;
-
- currentpicture := currentpicture xscaled -1 shifted (w - b, 0);
-
- labels (1, 2, 3);
-fet_endchar;
-
-
-fet_beginchar ("Double Flat", "flatflat");
- save left_wid, overlap, right_wid;
-
- left_wid = .7;
- right_wid = .8;
- overlap = .05;
-
- set_char_box (1.2 stafflinethickness#,
- (left_wid + right_wid - overlap) * staff_space#,
- .6 staff_space#, 1.9 staff_space#);
- draw_meta_flat (0, left_wid * staff_space, 1/3 staff_space,
- false, false);
- draw_meta_flat (hround ((left_wid - overlap) * staff_space),
- right_wid * staff_space, 1/3 staff_space,
- false, false);
-fet_endchar;
-
-
-fet_beginchar ("3/4 Flat", "flatflat.slash");
- save left_wid, overlap, right_wid;
-
- left_wid = .7;
- right_wid = .8;
- overlap = .05;
-
- set_char_box (1.2 stafflinethickness#,
- (left_wid + right_wid - overlap) * staff_space#,
- .6 staff_space#, 1.9 staff_space#);
- draw_meta_flat (0, left_wid * staff_space, 1/3 staff_space,
- false, false);
- draw_meta_flat (hround ((left_wid - overlap) * staff_space),
- right_wid * staff_space, 1/3 staff_space,
- false, false);
-
- %% maybe we should clip part of the stems?
- %% or make the 1st flat smaller?
- %% or reverse it?
- pickup pencircle scaled 2 stafflinethickness;
-
- z12 = round (-.25 w - b, .55 staff_space) + feta_offset;
- z13 = round (.75 w, 1.45 staff_space) + feta_offset;
- penpos12 (2 stafflinethickness, angle (z13 - z12) - 90);
- penpos13 (2 stafflinethickness, angle (z13 - z12) - 90);
-
- z14 = z12 - stafflinethickness * unitvector (z13 - z12);
- z15 = z13 + stafflinethickness * unitvector (z13 - z12);
-
- fill z13r
- .. z15
- .. z13l
- -- z12l
- .. z14
- .. z12r
- -- z13r
- .. cycle;
-
- penlabels (12, 13);
- labels (14, 15);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Double Sharp", "doublesharp");
- save klaverblad, klaversteel;
- save pat;
- path pat;
-
- klaversteel = 1/15 staff_space;
- klaverblad = .4 staff_space - .5 stafflinethickness;
-
- set_char_box (0, staff_space#, .5 staff_space#, .5 staff_space#);
-
- z1 = (klaversteel, 0);
- z2 = (w / 2 - klaverblad / 10, h - klaverblad);
- z3 = (w / 2, h);
- z4 = z2 reflectedabout ((0, 0), (1, 1));
- z5 = z1 reflectedabout ((0, 0), (1, 1));
-
- labels (1, 2, 3, 4, 5);
-
- pickup pencircle scaled blot_diameter;
-
- x2 := hfloor (rt x2) - blot_diameter / 2;
- x3 := hfloor (rt x3) - blot_diameter / 2;
- y3 := vfloor (top y3) - blot_diameter / 2;
- y4 := vfloor (top y4) - blot_diameter / 2;
-
- pat = (rt z1){dir45}
- .. {right}(bot z2)
- .. rt z2
- -- rt z3{z3 - z2}
- .. top z3{z4 - z3}
- -- top z4{z4 - z3}
- .. (lft z4){down}
- .. {dir 225}(top z5);
- pat := pat
- -- reverse pat xscaled -1 shifted (-feta_eps, 0);
-
- % assure symmetry -- it's more important to center the glyph on the
- % staff line than centering it between staff lines, so we use
- % feta_shift, not feta_space_shift.
- h := h + feta_shift;
-
- fill pat shifted (0, feta_shift)
- -- reverse pat yscaled -1 shifted (0, -feta_eps)
- -- cycle;
-
- % ugh
- currentpicture := currentpicture shifted (hround (w / 2), 0);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-def draw_paren =
- save leftindent;
-
- leftindent := .2 staff_space;
-
- set_char_box (0, .5 staff_space# + stafflinethickness#,
- staff_space#, staff_space#);
-
- d := d - feta_shift;
-
- z1 = (leftindent, h);
- z2 = (w - stafflinethickness, .5 (h - d));
- z3 = (leftindent, -d);
-
- penpos1 (stafflinethickness, 35);
- penpos2 (.1 staff_space + stafflinethickness, 0);
- penpos3 (stafflinethickness, -35);
-
- fill z2l{down}
- .. simple_serif (z3l, z3r, 90)
- .. z2r{up}
- .. simple_serif (z1r, z1l, 90)
- .. z2l{down}
- -- cycle;
-enddef;
-
-
-fet_beginchar ("Right Parenthesis", "rightparen");
- draw_paren;
- penlabels (1, 2, 3);
-
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
-fet_endchar;
-
-
-draw_shifted_too;
-
-
-fet_beginchar ("Left Parenthesis", "leftparen");
- draw_paren;
-
- currentpicture := currentpicture xscaled -1;
-
- set_char_box (charwd, charbp, chardp, charht);
-fet_endchar;
-
+ input feta-arrow;
+ input feta-sharps;
+ input feta-naturals;
+ input feta-flats;
+ input feta-parenthesis;
fet_endgroup ("accidentals");
% Feta (not the Font-En-Tja) music font -- draw accordion symbols
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
--- /dev/null
+% This file is part of LilyPond, the GNU music typesetter.
+%
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%
+% The LilyPond font is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version, or under the SIL Open Font License.
+
+
+input common-modules-and-initialization;
+
+fet_beginfont ("feta-alphabet", design_size, "fetaNumber");
+ number_design_size := design_size / 2;
+ dynamic_design_size := 14 design_size / 20;
+
+ input feta-numbers;
+ input feta-dynamics;
+fet_endfont ("feta-numbers");
+++ /dev/null
-test := 0;
-
-staffsize# := design_size * pt#;
-
-input feta-autometric;
-input feta-macros;
-input feta-params;
-
-fet_beginfont ("feta-alphabet", design_size, "fetaNumber");
-
-mode_setup;
-
-number_design_size := design_size / 2;
-dynamic_design_size := 14 design_size / 20;
-
-input feta-numbers;
-input feta-dynamics;
-
-fet_endfont ("feta-numbers");
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 11.22;
-input feta-alphabet;
+input feta-alphabet-generic;
end.
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 12.60;
-input feta-alphabet;
+input feta-alphabet-generic;
end.
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 14.14;
-input feta-alphabet;
+input feta-alphabet-generic;
end.
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 15.87;
-input feta-alphabet;
+input feta-alphabet-generic;
end.
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 17.82;
-input feta-alphabet;
+input feta-alphabet-generic;
end.
-% feta-alphabet20.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 20;
-input feta-alphabet;
+input feta-alphabet-generic;
end.
-% feta-alphabet23.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 22.45;
-input feta-alphabet;
+input feta-alphabet-generic;
end.
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 25.20;
-input feta-alphabet;
+input feta-alphabet-generic;
end.
--- /dev/null
+
+%
+% Draw an arrow
+%
+% * `stemslant' gives the direction of the stem's left boundary
+% (needed for brushed stems, equals "up" for straight stems)
+% * `extend' is used to make the stem longer or shorter (if negative);
+% different kinds of accidentals need different values here
+%
+def draw_arrow (expr attach, stemwidth, stemslant, extend, pointingdown) =
+begingroup;
+ save htip; % tip height
+ save wwing; % wing `radius'
+ save angle_wing_bot, angle_wing_top, angle_tip;
+ save upshift;
+ clearxy;
+
+ wwing := 0.26 stemwidth;
+ htip := staff_space * 0.85 + stafflinethickness - wwing;
+
+ % `flip' is used to reflect the arrow vertically
+ % if arrow points downward
+ transform flip;
+ if pointingdown:
+ flip = identity reflectedabout (origin, right);
+ else:
+ flip = identity;
+ fi;
+
+ z1 = attach shifted (-stemwidth / 2, 0);
+ upshift := max (0, wwing + 0.1 staff_space + extend);
+ z2 = z1 shifted (((unitvector stemslant)
+ scaled upshift) transformed flip);
+
+ z7 = attach shifted ((stemwidth/2),0);
+ z6 = z7 shifted (((unitvector (-xpart stemslant, ypart stemslant))
+ scaled upshift) transformed flip);
+ z2 - z3 = ( 0.38 staff_space, 0.05 htip) transformed flip;
+ z6 - z5 = (-0.38 staff_space, 0.05 htip) transformed flip;
+
+ z4 = attach shifted ((-0.2 stemwidth, upshift + htip)
+ transformed flip);
+ z4'= attach shifted (( 0.2 stemwidth, upshift + htip)
+ transformed flip);
+
+ % `angle_wing_bot' is the angle at which the arc
+ % from z2 to z3a enters z3a
+ % `angle_wing_top' is the angle at which the arc
+ % from z3b to z4 leaves z3b
+ % `angle_tip' is the angle at which the arc
+ % from z4 to z4' leaves z4
+ angle_wing_bot = 30;
+ angle_wing_top = 55;
+ angle_tip = 68;
+
+ z3a = z3 shifted ((((dir angle_wing_bot) rotated -90)
+ scaled wwing) transformed flip);
+ z3b = z3 shifted ((((dir angle_wing_top) rotated 90)
+ scaled wwing) transformed flip);
+
+ z5a = z5 shifted ((((dir (180 - angle_wing_bot)) rotated 90)
+ scaled wwing) transformed flip);
+ z5b = z5 shifted ((((dir (180 - angle_wing_top)) rotated -90)
+ scaled wwing) transformed flip);
+
+ % Draw the arrow
+ pickup pencircle scaled 1;
+ fill z1
+ -- z2{stemslant transformed flip}
+ .. {(-dir angle_wing_bot) transformed flip}z3a
+ .. z3b{(dir angle_wing_top) transformed flip}
+ .. z4{(dir angle_tip) transformed flip}
+ .. z4'{(dir (-angle_tip)) transformed flip}
+ .. {(dir (-angle_wing_top)) transformed flip}z5b
+ .. z5a{(-dir (-angle_wing_bot)) transformed flip}
+ .. z6{((-stemslant) reflectedabout (origin, up)) transformed flip}
+ -- z7
+ -- cycle;
+
+ labels (range 0 thru 7, 4', 3a, 3b, 5a, 5b);
+endgroup;
+enddef;
% Feta (not the Font-En-Tja) music font -- draw arrow heads
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% Feta (not the Font-En-Tja) music font -- administrative MF routines
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
% Jan Nieuwenhuizen <janneke@gnu.org>
%
% These macros help create ascii logging output
% Feta (not the Font-En-Tja) music font -- 256 smallest braces
-% This file is part of LilyPond, the GNU music typesetter.
-%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-%
-%
-% The LilyPond font is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
font_count := 0;
-input feta-braces;
+input feta-braces-generic;
end.
% Feta (not the Font-En-Tja) music font -- next 256 braces
-% This file is part of LilyPond, the GNU music typesetter.
-%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-%
-%
-% The LilyPond font is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
font_count := 1;
-input feta-braces;
+input feta-braces-generic;
end.
% Feta (not the Font-En-Tja) music font -- next 256 braces
-% This file is part of LilyPond, the GNU music typesetter.
-%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-%
-%
-% The LilyPond font is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
font_count := 2;
-input feta-braces;
+input feta-braces-generic;
end.
% Feta (not the Font-En-Tja) music font -- next 256 braces
-% This file is part of LilyPond, the GNU music typesetter.
-%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-%
-%
-% The LilyPond font is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
font_count := 3;
-input feta-braces;
+input feta-braces-generic;
end.
% Feta (not the Font-En-Tja) music font -- next 256 braces
-% This file is part of LilyPond, the GNU music typesetter.
-%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-%
-%
-% The LilyPond font is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
font_count := 4;
-input feta-braces;
+input feta-braces-generic;
end.
% Feta (not the Font-En-Tja) music font -- next 256 braces
-% This file is part of LilyPond, the GNU music typesetter.
-%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-%
-%
-% The LilyPond font is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
font_count := 5;
-input feta-braces;
+input feta-braces-generic;
end.
% Feta (not the Font-En-Tja) music font -- next 256 braces
-% This file is part of LilyPond, the GNU music typesetter.
-%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-%
-%
-% The LilyPond font is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
font_count := 6;
-input feta-braces;
+input feta-braces-generic;
end.
--- /dev/null
+% This file is part of LilyPond, the GNU music typesetter.
+%
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Jan Nieuwenhuizen <janneke@gnu.org>
+%
+% The LilyPond font is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version, or under the SIL Open Font License.
+
+
+% We have to reduce the pixel-per-point value to
+% support large brace glyphs in case we are using MetaPost
+% (which by default sets `hppp' to 49.80244, regardless of
+% the used `mag' value)
+
+if known miterlimit:
+ bpppix_ := 0.2; % ten times larger than original
+
+ numeric mm, pt, dd, bp, cm, pc, cc, in;
+
+ mm * bpppix_ = 2.83464;
+ pt * bpppix_ = 0.99626;
+ dd * bpppix_ = 1.06601;
+ bp * bpppix_ = 1;
+ cm * bpppix_ = 28.34645;
+ pc * bpppix_ = 11.95517;
+ cc * bpppix_ = 12.79213;
+ in * bpppix_ = 72;
+
+ hppp := pt;
+ vppp := pt;
+fi;
+
+design_size := 20; %% arbitrary
+
+input common-modules-and-initialization;
+
+%
+% We must let the design increase for each font to make sure that mftrace
+% doesn't jack up the resolution too highly for the longer braces.
+%
+
+fet_beginfont ("feta-braces-" & char (97 + font_count),
+ (font_count + 1) * 20, "fetaBraces");
+ input feta-braces;
+fet_endfont ("feta-braces");
% Feta (not the Font-En-Tja) music font -- next 256 braces
-% This file is part of LilyPond, the GNU music typesetter.
-%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-%
-%
-% The LilyPond font is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
font_count := 7;
-input feta-braces;
+input feta-braces-generic;
end.
% Feta (not the Font-En-Tja) music font -- next 256 braces
-% This file is part of LilyPond, the GNU music typesetter.
-%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-%
-%
-% The LilyPond font is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
font_count := 8;
-input feta-braces;
+input feta-braces-generic;
end.
% Feta (not the Font-En-Tja) music font -- Staff braces
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
% Jan Nieuwenhuizen <janneke@gnu.org>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% You should have received a copy of the GNU General Public License
% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-
-% We have to reduce the pixel-per-point value to
-% support large brace glyphs in case we are using MetaPost
-% (which by default sets `hppp' to 49.80244, regardless of
-% the used `mag' value)
-
-if known miterlimit:
- bpppix_ := 0.2; % ten times larger than original
-
- numeric mm, pt, dd, bp, cm, pc, cc, in;
-
- mm * bpppix_ = 2.83464;
- pt * bpppix_ = 0.99626;
- dd * bpppix_ = 1.06601;
- bp * bpppix_ = 1;
- cm * bpppix_ = 28.34645;
- pc * bpppix_ = 11.95517;
- cc * bpppix_ = 12.79213;
- in * bpppix_ = 72;
-
- hppp := pt;
- vppp := pt;
-fi;
-
-
-input feta-autometric;
-input feta-macros;
-
-staffsize# := 20 pt#; %% arbitrary
-
-input feta-params;
-
%
% We must let the design increase for each font to make sure that mftrace
% doesn't jack up the resolution too highly for the longer braces.
%
-fet_beginfont ("feta-braces-" & char (97 + font_count),
- (font_count + 1) * 20, "fetaBraces");
-
-mode_setup;
-
-
save code, braces_per_font;
code := 64;
braces_per_font := 64;
number := number + 1;
endfor;
endfor;
-
-fet_endfont ("feta-braces");
% Feta (not the Font-En-Tja) music font -- bracket tips -*-Fundamental-*-
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% Feta (not the Font-En-Tja) music font -- implement Clefs -*-Fundamental-*-
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>,
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>,
% Jan Nieuwenhuizen <janneke@gnu.org>,
% Juergen Reuter <reuter@ipd.uka.de>
%
fet_begingroup ("clefs");
+
+%
+% New bulb routine:
+%
+% Insert a brushed piece of the path, and draw the rest of the bulb
+% separately.
+%
+% The bulb has circular form. Neat merging of the bulb and brushed path
+% is done by playing with tension.
+%
+
+def new_bulb (expr start_point, start_angle,
+ outer_tangent_point,
+ end_point, end_angle,
+ big_radius, bulb_radius, flare,
+ direction, turning_dir) =
+begingroup;
+ save pat, before, after;
+ save center;
+ save u, v;
+ path pat, before, after;
+ pair center;
+
+ clearxy;
+
+ center = outer_tangent_point
+ + big_radius * dir (0);
+% + (big_radius - bulb_radius) * dir (-turning_dir * 90)
+
+ z1' = center + bulb_radius * dir (turning_dir * 180);
+ z2' = outer_tangent_point + flare * dir (0);
+ z3' = center + bulb_radius * dir (0);
+ z4' = center + bulb_radius * dir (turning_dir * 90);
+ z5' = center - 0.5 [big_radius, bulb_radius] * dir (turning_dir * 90);
+
+ labels (1', 2', 3', 4', 5');
+
+ before := z3'{dir (turning_dir * 90)}
+ .. z4'{-dir (0)}
+ ..tension 1.1.. z1'{-dir (turning_dir* 90)};
+ after := z2'{dir (turning_dir * 90)}
+ .. end_point{dir (end_angle)};
+ (u, v) = before intersectiontimes after;
+
+ pat := start_point{dir (start_angle)}
+ .. outer_tangent_point{dir (-turning_dir * 90)}
+ ..tension 1.02.. z5'{dir (0)}
+ .. subpath (0, u) of before
+ .. subpath (v, infinity) of after;
+
+ if direction = 0:
+ pat := reverse pat;
+ fi
+
+pat
+endgroup
+enddef;
+
+
%
% [Wanske] says the bulbs should be positioned about 1/4 right of the
% `arrow'.
% ugh, should be bulb, not flare?
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
enddef;
draw_c_clef (.8);
fet_endchar;
+def draw_varc_clef (expr reduction) =
+ save hair, norm, reduced_ss;
+ save thick, thin, upper_stroke;
-%
-% New bulb routine:
-%
-% Insert a brushed piece of the path, and draw the rest of the bulb
-% separately.
-%
-% The bulb has circular form. Neat merging of the bulb and brushed path
-% is done by playing with tension.
-%
+ path upper_stroke;
-def new_bulb (expr start_point, start_angle,
- outer_tangent_point,
- end_point, end_angle,
- big_radius, bulb_radius, flare,
- direction, turning_dir) =
-begingroup;
- save pat, before, after;
- save center;
- save u, v;
- path pat, before, after;
- pair center;
+ reduced_ss# = staff_space# * reduction;
+ norm# := 2/3 reduced_ss#;
+ hair# := 0.06 reduced_ss# + 0.5 linethickness#;
+ define_pixels (norm, reduced_ss);
+ define_whole_vertical_blacker_pixels (hair);
- clearxy;
+ set_char_box (0, 2.25 reduced_ss#, 2 reduced_ss#, 2 reduced_ss#);
- center = outer_tangent_point
- + big_radius * dir (0);
-% + (big_radius - bulb_radius) * dir (-turning_dir * 90)
+ % make unreduced glyph fit exactly into five staff lines
+ if reduction = 1:
+ h := d := 2 staff_space_rounded;
+ fi;
- z1' = center + bulb_radius * dir (turning_dir * 180);
- z2' = outer_tangent_point + flare * dir (0);
- z3' = center + bulb_radius * dir (0);
- z4' = center + bulb_radius * dir (turning_dir * 90);
- z5' = center - 0.5 [big_radius, bulb_radius] * dir (turning_dir * 90);
+ % assure that the gap between the left and right stem
+ % has the same number of pixels as the thickness of the right
+ % stem
+ draw_block ((0, -d + feta_shift),
+ (3/4 norm + 1/2 hair, h));
+ draw_block ((3/4 norm + 1/2 hair + hround (3/2 hair), -d + feta_shift),
+ (3/4 norm + 1/2 hair + 2 hround (3/2 hair), h));
- labels (1', 2', 3', 4', 5');
+ % assure symmetry
+ h := h - feta_shift;
- before := z3'{dir (turning_dir * 90)}
- .. z4'{-dir (0)}
- ..tension 1.1.. z1'{-dir (turning_dir* 90)};
- after := z2'{dir (turning_dir * 90)}
- .. end_point{dir (end_angle)};
- (u, v) = before intersectiontimes after;
+ thin := hround (3/2 hair);
+ thick := hround (3/4 norm);
- pat := start_point{dir (start_angle)}
- .. outer_tangent_point{dir (-turning_dir * 90)}
- ..tension 1.02.. z5'{dir (0)}
- .. subpath (0, u) of before
- .. subpath (v, infinity) of after;
+ x1'' = x8'' = x6'' - reduced_ss = 3/4 norm + 1/2 hair + 1.5 hround (3/2 hair);
+ x7'' = x6'' - 1/2 hair;
+ % the thick part of the c clef should be placed in the
+ % center of the forth staff space
+ y1'' = y2'' = 0.5 reduced_ss + thick/2;
- if direction = 0:
- pat := reverse pat;
- fi
+ y7'' = y8'' = y6'' - 1/2 hair = y1'' - thick;
-pat
-endgroup
+ x2'' = x3'' = x4'' = x6'' - thin;
+
+ y5'' = y3'' = y2'' + 0.6 reduced_ss;
+ x5'' = x6'';
+
+ y4'' = 2.25 reduced_ss;
+
+ upper_stroke := z1'' -- z2''
+ -- new_bulb (z3'', 90, z4'', z5'', 270,
+ 0.37 reduced_ss, 0.33 reduced_ss, thin, 1, -1)
+ -- z6''{down} .. z7''{left} -- z8'' -- cycle;
+
+ fill upper_stroke;
+ % the c clef parts should be symmetrical to the forth staff line
+ fill upper_stroke yscaled -1;
+
+ penlabels (1'', 2'', 3'', 4'', 5'', 6'', 7'', 8'');
+
+ draw_staff_if_debugging (-2, 2);
enddef;
+fet_beginchar ("Variant C clef", "varC");
+ draw_varc_clef (1.0);
+fet_endchar;
+
+
+fet_beginchar ("Variant C clef", "varC_change");
+ draw_varc_clef (0.8);
+fet_endchar;
+
+
%
% There is some variation in the shape of bass clefs.
%
penlabels (1, 2, 3, 4, 5, 6);
- draw_staff (-3, 1, 0);
+ draw_staff_if_debugging (-3, 1);
enddef;
def debugfill = fill enddef;
-def draw_gclef (expr reduction) =
- save reduced_ss, downstroke_dir, downstroke_angle, center;
+def draw_gclef (expr reduction, double_shift, extra_width) =
+ save reduced_ss, double_shift_ss, extra_width_ss;
+ save downstroke_dir, downstroke_angle, center;
save breapth_factor, inner_thick_end, thinness, thickness, thinnib;
save start_angle, inner_start_angle;
save upward_swoosh_angle, bot_angle;
- save pat;
+ save swirl, bulb, pat;
save corr_angle, corr, left_, right_, up_, down_, bot_angle_;
- path pat;
+ path swirl, bulb, pat;
pair downstroke_dir, center;
transform corr;
pair left_, right_, up_, down_;
thinnib = thinness;
- set_char_box (0, 1.71 * breapth_factor * reduced_ss#,
+ set_char_box (0, (1.71 * breapth_factor + double_shift + extra_width) * reduced_ss#,
2.55 * reduced_ss#, 4.8 * reduced_ss# / reduced_loop_correction);
center := (breapth_factor * reduced_ss, 0);
.. z110l{down}
.. z110'l;
- fill z102l{right}
- .. z103l
- .. z104l{left_}
- ..tension 1.07.. z105l{up_}% inside curve
- .. z107l{up_}
- ..tension 1.2.. z120r{curl 1}
- .. {direction 0 of pat}z120l
- -- z108
- -- z109r % {dir (downstroke_angle + 0)}
- ..tension 0.8.. z107r{down_}
- .. z105r{down_}
- .. z104r{right_}
- .. z103r
- .. z102r{left_}
- ..tension .95.. z101r
- -- simple_serif (z101r, z101l, 80)
- -- z101l
- ..tension 0.85.. cycle;
+ swirl := z102l{right}
+ .. z103l
+ .. z104l{left_}
+ ..tension 1.07.. z105l{up_}% inside curve
+ .. z107l{up_}
+ ..tension 1.2.. z120r{curl 1}
+ .. {direction 0 of pat}z120l
+ -- z108
+ -- z109r % {dir (downstroke_angle + 0)}
+ ..tension 0.8.. z107r{down_}
+ .. z105r{down_}
+ .. z104r{right_}
+ .. z103r
+ .. z102r{left_}
+ ..tension .95.. z101r
+ -- simple_serif (z101r, z101l, 80)
+ -- z101l
+ ..tension 0.85.. cycle;
+ fill swirl;
penstroke z121e
.. z110e{down_}
.. z111e{dir (-95 + corr_angle)}
.. z112e{dir (bot_angle_)};
- fill new_bulb (z112r, bot_angle_, z113r, z112l, bot_angle_ + 180,
- 0.45 reduced_ss, 0.38 reduced_ss,
- thinnib + .05 staff_space, 1, -1)
- -- cycle;
+ bulb := new_bulb (z112r, bot_angle_, z113r, z112l, bot_angle_ + 180,
+ 0.45 reduced_ss, 0.38 reduced_ss,
+ thinnib + .05 staff_space, 1, -1)
+ -- cycle;
+
+ fill bulb;
+
+ if double_shift <> 0:
+ addto currentpicture also
+ currentpicture shifted (double_shift * reduced_ss, 0);
+ fi;
penlabels (range 101 thru 121);
penlabels (110', 111');
- draw_staff (-1, 3, 0);
+ draw_staff_if_debugging (-1, 3);
enddef;
fet_beginchar ("G clef", "G");
- draw_gclef (1.0);
+ draw_gclef (1.0, 0, 0);
fet_endchar;
fet_beginchar ("G clef", "G_change");
- draw_gclef (0.8);
+ draw_gclef (0.8, 0, 0);
+fet_endchar;
+
+
+fet_beginchar ("double G clef", "GG");
+ draw_gclef (1.0, 1.5, 0);
+fet_endchar;
+
+
+fet_beginchar ("double G clef", "GG_change");
+ draw_gclef (0.8, 1.5, 0);
fet_endchar;
+def draw_tenor_extension (expr reduction) =
+ save reduced_ss, thick, thin, upper_stroke, ne_beam_dir, nw_dist;
+ path upper_stroke;
+ pair ne_beam_dir, nw_dist;
+
+ reduced_ss# = staff_space# * reduction;
+ define_pixels (reduced_ss);
+
+ thin := hround (0.17 reduced_ss);
+ thick := hround (0.51 reduced_ss);
+
+ % the slanted left edge should protrude the g clef by a
+ % fixed amount relative to the width of the g clef:
+ x1'' = x6'' - 1.8 reduced_ss - 0.5 staff_space = 0.62 reduced_ss * reduction;
+ x8'' = x1'' - 2 thin;
+ x2'' = x3'' = x4'' = x6'' - thin;
+ x5'' = x6'';
+ x7'' = x6'' - 1/3 thin;
+ % the thick part of the c clef should be placed in the
+ % center of the forth staff space
+ y1'' = y2'' = 2.5 staff_space + thick/2;
+ y7'' = y8'' = y6'' - 1/3 thin = y1'' - thick;
+ y5'' = y3'' = y2'' + reduced_ss;
+ y4'' = 4.5 reduced_ss;
+
+ upper_stroke := z2''
+ -- new_bulb (z3'', 90, z4'', z5'', 270,
+ 0.35 reduced_ss, 0.22 reduced_ss, thin, 1, -1)
+ -- z6''{down} .. z7''{left};
+
+ % z1'' and z8'' are helper points that are responsible for
+ % hiding the lower left slant in the g clef's stroke
+ % z9'' and z10'' are computed to obtain nice rounded corners
+
+ pickup pencircle scaled 2/3 thin;
+ lft x9'' = x1'';
+ lft x10'' = x8'';
+
+ top y9'' = y1'';
+ bot y10'' = y8'';
+
+ ne_beam_dir = unitvector (z9'' - z10'');
+ nw_dist = (ne_beam_dir rotated 90) * 1/3 thin;
+
+ fill (z9''+nw_dist){ne_beam_dir}
+ ... top z9''{right}
+ -- upper_stroke
+ -- bot z10''{left}
+ ... (z10''+nw_dist){ne_beam_dir}
+ -- cycle;
+
+ % the slanted edge of the lower hook must not be visible, so it is
+ % shifted accordingly in x direction;
+ z1''' = z1'' shifted (staff_space - 0.9 reduced_ss, - staff_space);
+ z8''' = z8'' shifted (staff_space - 0.9 reduced_ss, - staff_space);
+
+ % the visible c clef parts should be symmetrical to the forth staff line
+ fill z1'''
+ -- reverse upper_stroke yscaled -1 shifted (0, 4 staff_space)
+ -- z8''' -- cycle;
+
+ penlabels (1''',2'',3'',4'',5'',6'',7'',8''',9'',10'');
+
+ draw_staff_if_debugging (-1, 3);
+enddef;
+
+fet_beginchar ("Tenor G clef", "tenorG");
+ draw_gclef (1.0, 0, 0.75);
+ draw_tenor_extension (1.0);
+fet_endchar;
+
+
+fet_beginchar ("Tenor G clef", "tenorG_change");
+ draw_gclef (0.8, 0, 0.75);
+ draw_tenor_extension (0.8);
+fet_endchar;
%%%%
%
draw_block ((-b, -d), (-b + razt, h));
draw_block ((w - razt, -d), (w, h));
- draw_staff (-3, 1, 1);
+ draw_staff_if_debugging (-3, 1);
enddef;
draw_percussion_clef (.8);
fet_endchar;
+def draw_varpercussion_clef (expr reduction) =
+ save reduced_ss, thin, thick;
+
+ reduced_ss# = staff_space# * reduction;
+ define_pixels (reduced_ss);
+
+ set_char_box (-.67 reduced_ss#, 1.75 reduced_ss#,
+ 1.675 reduced_ss#, 1.675 reduced_ss#);
+
+ thin := hround (0.175 reduced_ss);
+ thick := hround (0.35 reduced_ss);
+
+ d := d - feta_shift;
+
+ draw_block ((-b, -d), (-b + thin, h));
+ draw_block ((w - thin, -d), (w, h));
+
+ pickup penrazor scaled thick rotated 90;
+
+ top z1 = (-b + thin/2, h);
+ top z2 = (w - thin/2, h);
+
+ bot z3 = (-b + thin/2, -d);
+ bot z4 = (w - thin/2, -d);
+
+ draw z1 -- z2;
+ draw z3 -- z4;
+
+ penlabels (range 1 thru 4);
+
+ draw_staff_if_debugging (-3, 1);
+enddef;
+
+
+fet_beginchar ("variant percussion clef", "varpercussion");
+ draw_varpercussion_clef (1.0);
+fet_endchar;
+
+
+fet_beginchar ("variant percussion clef (reduced)", "varpercussion_change");
+ draw_varpercussion_clef (.8);
+fet_endchar;
+
def draw_tab_T (expr pos, siz, slant) =
begingroup;
draw_tab_B ((-b + .025 reduced_ss, -d),
(2.1 reduced_ss, letterheight), 0.25);
- draw_staff (-3, 2, 0.5);
+ draw_staff_if_debugging (-3, 2);
enddef;
% Feta (not the Font-En-Tja) music font -- a duration dot
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% Feta (not the Font-En-Tja) music font -- dynamic signs
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+% Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
-% Feta (not the Font-En-Tja) music font -- generic stuff: include lots of files, but don't
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-
-
-if test = -1:
- mode := smoke;
-fi
-staffsize# := design_size * pt#;
-mode_setup;
-
-input feta-macros;
-
-input feta-params;
+input common-modules-and-initialization;
font_x_height staff_space#;
fet_beginfont ("feta", design_size, "fetaMusic");
+ input feta-flags;
-input feta-flags;
-
-autometric_parameter ("staffsize", staffsize#);
-autometric_parameter ("stafflinethickness", stafflinethickness#);
-autometric_parameter ("staff_space", staff_space#);
-autometric_parameter ("linethickness", linethickness#);
-autometric_parameter ("black_notehead_width", black_notehead_width#);
-autometric_parameter ("ledgerlinethickness", ledgerlinethickness#);
-autometric_parameter ("blot_diameter", blot_diameter#);
-
+ input declare-autometric-parameters;
fet_endfont;
% Feta (not the Font-En-Tja) music font -- draw flags
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
-% feta-flags11.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 11.22;
-test := 0;
-
-
input feta-flags-generic;
-
end.
-
-% feta-flags13.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 12.60;
-test := 0;
-
-
input feta-flags-generic;
-
end.
-
-% feta-flags14.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 14.14;
-test := 0;
-
-
input feta-flags-generic;
-
end.
-
-% feta-flags16.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 15.87;
-test := 0;
-
-
input feta-flags-generic;
-
end.
-
-% feta-flags18.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 17.82;
-test := 0;
-
-
input feta-flags-generic;
-
end.
-
-% feta-flags20.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 20;
-test := 0;
-
-
input feta-flags-generic;
-
end.
-
-% feta-flags23.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 22.45;
-test := 0;
-
-
input feta-flags-generic;
-
end.
-
-% feta-flags26.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 25.20;
-test := 0;
-
-
input feta-flags-generic;
-
end.
-
--- /dev/null
+
+%
+% Dedicated to my mom. (3/10/97)
+%
+% Mamma, ik hou van je; kom je alsjeblieft terug?
+% -- HW
+%
+%
+% TODO: remove crook_fatness
+% TODO: document, simplify!
+%
+
+def draw_meta_flat (expr xcenter, w, crook_fatness, arrowup, arrowdown) =
+ save crook_thinness;
+ save bottom_overshoot, bot_crook_dir;
+ save top_stem_thick, top_stem_thick_orig;
+ save bottom_stem_thick, hair, smaller_hole;
+ save top_crook_thinness;
+ save zwiep;
+ save center;
+ pair center, bot_crook_dir;
+ save clearing, clearing_orig;
+
+ clearxy;
+
+ % the stem shouldn't reach the top staff line.
+ %% TODO: should take from height.
+ %
+ % TODO: parameterize this
+ %
+ if w >= 0.75 staff_space:
+ smaller_hole = 0.35 stafflinethickness;
+ else:
+ smaller_hole = 0;
+ fi;
+ crook_thinness = .7 stafflinethickness + .06 staff_space;
+ top_crook_thinness = 1 stafflinethickness + .065 staff_space;
+ clearing = 1.7 stafflinethickness;
+ clearing_orig = clearing;
+ if arrowup:
+ clearing := 0.5 staff_space;
+ fi;
+ bottom_overshoot = stafflinethickness;
+
+ bottom_stem_thick# = 0.06 staff_space# + 0.6 stafflinethickness#;
+ top_stem_thick# = 0.1 staff_space# + 1.2 stafflinethickness#;
+ top_stem_thick_orig# = top_stem_thick#;
+ if arrowup:
+ % to look nice, arrowed stems should be less brushed
+ top_stem_thick# := top_stem_thick# * 0.8;
+ fi;
+ define_whole_blacker_pixels (bottom_stem_thick, top_stem_thick,
+ top_stem_thick_orig);
+
+ if odd (top_stem_thick - bottom_stem_thick):
+ top_stem_thick := top_stem_thick - 1;
+ fi;
+ if odd (top_stem_thick_orig - bottom_stem_thick):
+ top_stem_thick_orig := top_stem_thick_orig - 1;
+ fi;
+
+ center = (xcenter, 0);
+
+ x1l = hround (xcenter - .5 top_stem_thick);
+ y1 = vround (2 staff_space - clearing);
+ x2l = hround (xcenter - .5 bottom_stem_thick);
+ y2 = -.5 staff_space - .5 stafflinethickness;
+ % z16 and the `*_orig' variables are needed for arrowed accidentals
+ % because their inner part should be unchanged from plain ones but
+ % the points z3l, z3r, and z10 depend on values that are different
+ % for arrowed accidentals
+ x16l = hround (xcenter -.5 top_stem_thick_orig);
+ y16 = vround (2 staff_space - clearing_orig);
+
+ penpos1 (top_stem_thick, 0);
+ penpos16 (top_stem_thick_orig, 0);
+ penpos2 (bottom_stem_thick, 0);
+
+ y3l = vfloor ((staff_space - stafflinethickness) / 2);
+ z3l = whatever [z2r, z1r];
+ z3r = .3 [z2r,
+ (z16r shifted (0, clearing_orig - 1.7 stafflinethickness))]
+ + (smaller_hole, 0);
+ x3r := hceiling x3r;
+
+ % we insert z3l to get better conversion with mf2pt1
+ fill simple_serif (z1r, z1l, 30)
+ -- z2l
+ -- z2r
+ -- z3l
+ -- cycle;
+
+ z10 = whatever [z2r, z16r] + (smaller_hole, 0);
+ y10 = -1/10 staff_space;
+ x10 := hceiling x10;
+
+ x11 = xcenter + bottom_overshoot / 3;
+ y11 = -vround (.5 (staff_space + stafflinethickness)
+ + bottom_overshoot);
+
+ x2a = 0.2[x2r, x7];
+ y2a = 1.5[y2, y11];
+
+ penpos4 (whatever, 53);
+
+ y4l - y4r = top_crook_thinness;
+ y5r = .15 staff_space;
+ x5l = hround (w + xcenter);
+ y4 = staff_space / 2;
+ x4r = .45 [x5r, x3r];
+ y4l := vround y4l;
+
+ penpos5 (crook_fatness, -175);
+
+ bot_crook_dir = unitvector ((x5l, 0) - z11);
+ z8 = z11 + whatever * bot_crook_dir;
+ y8 = -staff_space / 2;
+
+ z7 = z8
+ + whatever * bot_crook_dir
+ + crook_thinness * (bot_crook_dir rotated 90);
+ x7 = .1 [x3r, x8];
+
+ unfill z3r{z3r - z10}
+ .. z4r{right}
+ .. z5r{down}
+ .. z7{-bot_crook_dir}
+ & z7
+ .. z10{z3r - z10}
+ -- cycle;
+
+ if arrowdown:
+ fill z2l{down}
+ .. z2a{up}
+ .. z8{bot_crook_dir}
+ .. z5l{up}
+ .. z4l{left}
+ .. z3l
+ -- cycle;
+ else:
+ fill z2l{down}
+ .. z11{right}
+ .. z8{bot_crook_dir}
+ .. z5l{up}
+ .. z4l{left}
+ .. z3l
+ -- cycle;
+ fi;
+
+ if arrowup:
+ draw_arrow (z1, top_stem_thick, z1l - z2l,
+ 0.5 stafflinethickness, false);
+ fi;
+ if arrowdown:
+ draw_arrow ((0.5 [x2l, x2a], y2), x2a - x2l, up,
+ staff_space / 2, true);
+ fi;
+enddef;
+
+
+def draw_arrowed_meta_flat (expr xcenter, width, crook_fatness,
+ arrowup, arrowdown) =
+ save depth, height, extendleft;
+
+ depth# = 0.6 staff_space#;
+ height# = 1.9 staff_space#;
+ extendleft# := 1.2 stafflinethickness#;
+ if arrowup:
+ extendleft# := 3.45 stafflinethickness#;
+ height# := height# + 0.8 staff_space#;
+ fi;
+ if arrowdown:
+ extendleft# := 3.45 stafflinethickness#;
+ depth# := depth# + 1.6 staff_space#;
+ fi;
+
+ set_char_box (extendleft#, width, depth#, height#);
+ draw_meta_flat(xcenter, w, crook_fatness, arrowup, arrowdown);
+enddef;
+
+%
+% unfortunately, 600dpi is not enough to show the brush of the stem.
+%
+
+fet_beginchar ("Flat", "flat");
+ draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space,
+ false, false);
+ penlabels (range 0 thru 11);
+
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+
+
+fet_beginchar ("Arrowed Flat (arrow up)", "flat.arrowup");
+ draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space,
+ true, false);
+ penlabels (range 0 thru 23);
+
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+
+
+fet_beginchar ("Arrowed Flat (arrow down)", "flat.arrowdown");
+ draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space,
+ false, true);
+ penlabels (range 0 thru 23);
+
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+
+
+fet_beginchar ("Arrowed Flat (arrow up and down)", "flat.arrowboth");
+ draw_arrowed_meta_flat (0, 0.8 staff_space#, 0.31 staff_space,
+ true, true);
+ penlabels (range 0 thru 23);
+
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+
+
+fet_beginchar ("Flat (slashed)", "flat.slash");
+ set_char_box (.4 staff_space#, .8 staff_space#,
+ 0.6 staff_space#, 1.9 staff_space#);
+
+ draw_meta_flat (0, w, 0.31 staff_space, false, false);
+
+ clearxy;
+
+ save slope, slash_width;
+ slope = 0.5;
+ slash_width = w;
+
+ z11 = (0, h / 2);
+ z12 = z11 - (slash_width, slash_width * slope) / 2;
+ z13 = z11 + (slash_width, slash_width * slope) / 2;
+ penpos12 (1.5 stafflinethickness, angle (z13 - z12) - 90);
+ penpos13 (1.5 stafflinethickness, angle (z13 - z12) - 90);
+
+ z14 = z12 - .75 stafflinethickness * unitvector (z13 - z12);
+ z15 = z13 + .75 stafflinethickness * unitvector (z13 - z12);
+
+ fill z13r
+ .. z15
+ .. z13l
+ -- z12l
+ .. z14
+ .. z12r
+ -- z13r
+ .. cycle;
+
+ penlabels (12, 13);
+ labels (14, 15);
+
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+
+
+fet_beginchar ("Flat (slashed twice)", "flat.slashslash");
+ set_char_box (.4 staff_space#, .8 staff_space#,
+ 0.6 staff_space#, 1.9 staff_space#);
+
+ draw_meta_flat (0, w, 0.31 staff_space, false, false);
+
+ clearxy;
+
+ save slope, slash_width;
+ slope = 0.5;
+ slash_width = w;
+
+ z11 = (0, 5/12 h);
+ z12 = z11 - (slash_width, slash_width * slope) / 2;
+ z13 = z11 + (slash_width, slash_width * slope) / 2;
+ penpos12 (1.5 stafflinethickness, angle (z13 - z12) - 90);
+ penpos13 (1.5 stafflinethickness, angle (z13 - z12) - 90);
+
+ z14 = z12 - .75 stafflinethickness * unitvector (z13 - z12);
+ z15 = z13 + .75 stafflinethickness * unitvector (z13 - z12);
+
+ fill z13r
+ .. z15
+ .. z13l
+ -- z12l
+ .. z14
+ .. z12r
+ -- z13r
+ .. cycle;
+
+ penlabels (12, 13);
+ labels (14, 15);
+
+ z21 = (0, 2/3 h);
+ z22 = z21 - (slash_width, slash_width * slope) / 2;
+ z23 = z21 + (slash_width, slash_width * slope) / 2;
+ penpos22 (1.5 stafflinethickness, angle (z23 - z22) - 90);
+ penpos23 (1.5 stafflinethickness, angle (z23 - z22) - 90);
+
+ z24 = z22 - .75 stafflinethickness * unitvector (z23 - z22);
+ z25 = z23 + .75 stafflinethickness * unitvector (z23 - z22);
+
+ fill z23r
+ .. z25
+ .. z23l
+ -- z22l
+ .. z24
+ .. z22r
+ -- z23r
+ .. cycle;
+
+ penlabels (22, 23);
+ labels (24, 25);
+
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+
+
+fet_beginchar ("Flatflat (mirrored)", "mirroredflat.flat");
+ set_char_box (0, 1.6 staff_space#,
+ 0.6 staff_space#, 1.9 staff_space#);
+
+ % This is a modified version of `draw_meta_flat'.
+
+ save crook_thinness, crook_fatness;
+ save bottom_overshoot, bot_crook_dir;
+ save top_stem_thick, bottom_stem_thick, hair, smaller_hole;
+ save top_crook_thinness;
+ save zwiep;
+ save center;
+ pair center, bot_crook_dir;
+ save clearing, wid;
+ save pat;
+ path pat;
+
+ clearxy;
+
+ wid = w / 2;
+
+ % the stem shouldn't reach the top staff line.
+ %% TODO: should take from height.
+ %
+ % TODO: parameterize this
+ %
+ if wid >= 0.75 staff_space:
+ smaller_hole = 0.35 stafflinethickness;
+ else:
+ smaller_hole = 0;
+ fi;
+ clearing = 1.7 stafflinethickness;
+ crook_thinness = .7 stafflinethickness + .06 staff_space;
+ crook_fatness = 0.31 staff_space;
+ top_crook_thinness = 1 stafflinethickness + .065 staff_space;
+ bottom_overshoot = stafflinethickness;
+
+ bottom_stem_thick# = 0.06 staff_space# + 0.6 stafflinethickness#;
+ top_stem_thick# = 0.1 staff_space# + 1.2 stafflinethickness#;
+ define_whole_blacker_pixels (bottom_stem_thick, top_stem_thick);
+
+ if odd (top_stem_thick - bottom_stem_thick):
+ top_stem_thick := top_stem_thick - 1;
+ fi;
+
+ center = (0, 0);
+
+ x1l = hround (-.5 top_stem_thick);
+ y1 = vround (2 staff_space - clearing);
+ x2l = hround (-.5 bottom_stem_thick);
+ y2 = -.5 staff_space - .5 stafflinethickness;
+
+ penpos1 (top_stem_thick, 0);
+ penpos2 (bottom_stem_thick, 0);
+
+ y3l = vfloor ((staff_space - stafflinethickness) / 2);
+ z3l = whatever [z2r, z1r];
+ z3r = .3 [z2r, z1r] + (smaller_hole, 0);
+ x3r := hceiling x3r;
+
+ z10 = whatever [z2r, z1r] + (smaller_hole, 0);
+ y10 = -1/10 staff_space;
+ x10 := hceiling x10;
+
+ x11 = bottom_overshoot / 3;
+ y11 = -vround (.5 (staff_space + stafflinethickness)
+ + bottom_overshoot);
+
+ penpos4 (whatever, 53);
+
+ y4l - y4r = top_crook_thinness;
+ y5r = .15 staff_space;
+ x5l = hround (wid);
+ y4 = staff_space / 2;
+ x4r = .45 [x5r, x3r];
+ y4l := vround y4l;
+
+ penpos5 (crook_fatness, -175);
+
+ bot_crook_dir = unitvector ((x5l, 0) - z11);
+ z8 = z11 + whatever * bot_crook_dir;
+ y8 = -staff_space / 2;
+
+ z7 = z8
+ + whatever * bot_crook_dir
+ + crook_thinness * (bot_crook_dir rotated 90);
+ x7 = .1 [x3r, x8];
+
+ pat := z3r{z3r - z10}
+ .. z4r{right}
+ .. z5r{down}
+ .. z7{-bot_crook_dir}
+ & z7
+ .. z10{z3r - z10}
+ -- cycle;
+ unfill pat;
+ unfill pat xscaled -1;
+
+ pat := z11{right}
+ .. z8{bot_crook_dir}
+ .. z5l{up}
+ .. z4l{left}
+ .. z3l;
+ fill pat
+ -- simple_serif (z1r, z1l, 30)
+ -- reverse pat xscaled -1 shifted (-feta_eps, 0)
+ -- cycle;
+
+ currentpicture := currentpicture shifted (w/2, 0);
+
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+
+
+fet_beginchar ("Semi flat", "mirroredflat");
+ set_char_box (1.2 stafflinethickness#, .8 staff_space#,
+ 0.6 staff_space#, 1.9 staff_space#);
+
+ draw_meta_flat (0, w, 0.31 staff_space, false, false);
+ currentpicture := currentpicture xscaled -1 shifted (w - b, 0);
+fet_endchar;
+
+
+fet_beginchar ("Semi flat", "mirroredflat.backslash");
+ set_char_box (.4 staff_space#, .8 staff_space#,
+ 0.6 staff_space#, 1.9 staff_space#);
+
+ draw_meta_flat (0, w, 0.31 staff_space, false, false);
+
+ clearxy;
+
+ save slope, slash_width;
+ slope = 0.5;
+ slash_width = w;
+
+ z11 = (0, h / 2);
+ z12 = z11 - (slash_width, slash_width * slope) / 2;
+ z13 = z11 + (slash_width, slash_width * slope) / 2;
+ penpos12 (1.5 stafflinethickness, angle (z13 - z12) - 90);
+ penpos13 (1.5 stafflinethickness, angle (z13 - z12) - 90);
+
+ z14 = z12 - .75 stafflinethickness * unitvector (z13 - z12);
+ z15 = z13 + .75 stafflinethickness * unitvector (z13 - z12);
+
+ fill z13r
+ .. z15
+ .. z13l
+ -- z12l
+ .. z14
+ .. z12r
+ -- z13r
+ .. cycle;
+
+ currentpicture := currentpicture xscaled -1 shifted (w - b, 0);
+
+ labels (1, 2, 3);
+fet_endchar;
+
+
+fet_beginchar ("Double Flat", "flatflat");
+ save left_wid, overlap, right_wid;
+
+ left_wid = .7;
+ right_wid = .8;
+ overlap = .05;
+
+ set_char_box (1.2 stafflinethickness#,
+ (left_wid + right_wid - overlap) * staff_space#,
+ .6 staff_space#, 1.9 staff_space#);
+ draw_meta_flat (0, left_wid * staff_space, 1/3 staff_space,
+ false, false);
+ draw_meta_flat (hround ((left_wid - overlap) * staff_space),
+ right_wid * staff_space, 1/3 staff_space,
+ false, false);
+fet_endchar;
+
+
+fet_beginchar ("3/4 Flat", "flatflat.slash");
+ save left_wid, overlap, right_wid;
+
+ left_wid = .7;
+ right_wid = .8;
+ overlap = .05;
+
+ set_char_box (1.2 stafflinethickness#,
+ (left_wid + right_wid - overlap) * staff_space#,
+ .6 staff_space#, 1.9 staff_space#);
+ draw_meta_flat (0, left_wid * staff_space, 1/3 staff_space,
+ false, false);
+ draw_meta_flat (hround ((left_wid - overlap) * staff_space),
+ right_wid * staff_space, 1/3 staff_space,
+ false, false);
+
+ %% maybe we should clip part of the stems?
+ %% or make the 1st flat smaller?
+ %% or reverse it?
+ pickup pencircle scaled 2 stafflinethickness;
+
+ z12 = round (-.25 w - b, .55 staff_space) + feta_offset;
+ z13 = round (.75 w, 1.45 staff_space) + feta_offset;
+ penpos12 (2 stafflinethickness, angle (z13 - z12) - 90);
+ penpos13 (2 stafflinethickness, angle (z13 - z12) - 90);
+
+ z14 = z12 - stafflinethickness * unitvector (z13 - z12);
+ z15 = z13 + stafflinethickness * unitvector (z13 - z12);
+
+ fill z13r
+ .. z15
+ .. z13l
+ -- z12l
+ .. z14
+ .. z12r
+ -- z13r
+ .. cycle;
+
+ penlabels (12, 13);
+ labels (14, 15);
+
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+++ /dev/null
-% Feta (not the Font-En-Tja) music font -- generic stuff: include lots of files, but don't
-% This file is part of LilyPond, the GNU music typesetter.
-%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-%
-% The LilyPond font is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-
-
-if test = -1:
- mode := smoke;
-fi
-
-staffsize# := design_size * pt#;
-
-mode_setup;
-
-input feta-macros;
-
-input feta-params;
-
-font_x_height staff_space#;
-
-fet_beginfont ("feta", design_size, "fetaMusic");
-
-if test = 0:
- input feta-rests;
- input feta-accidentals;
- input feta-arrowheads;
- input feta-dots;
- input feta-scripts;
- input feta-clefs;
- input feta-timesignatures;
- input feta-pedals;
- input feta-brackettips;
- input feta-accordion;
- input feta-ties;
-else:
- input feta-test-generic.mf;
-fi
-
-autometric_parameter ("staffsize", staffsize#);
-autometric_parameter ("stafflinethickness", stafflinethickness#);
-autometric_parameter ("staff_space", staff_space#);
-autometric_parameter ("linethickness", linethickness#);
-autometric_parameter ("black_notehead_width", black_notehead_width#);
-autometric_parameter ("ledgerlinethickness", ledgerlinethickness#);
-autometric_parameter ("blot_diameter", blot_diameter#);
-
-fet_endfont;
% Feta (not the Font-En-Tja) music font -- auxiliary macros for both feta and parmesan fonts
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% debugging
%
+
def print_penpos (suffix $) =
message
"z" & str$ & "l = (" & decimal x.$.l & ", " &decimal y.$.l & ");"
enddef;
-def draw_staff (expr first, last, offset) =
+def draw_staff_if_debugging (expr first, last) =
if test <> 0:
pickup pencircle scaled stafflinethickness;
for i := first step 1 until last:
draw (-staff_space,
- (i + offset) * staff_space_rounded)
+ (i + stafflines_y_offset) * staff_space_rounded)
-- (4 staff_space,
- (i + offset) * staff_space_rounded);
+ (i + stafflines_y_offset) * staff_space_rounded);
endfor;
fi;
enddef;
--- /dev/null
+
+%
+% The stems of the natural are brushed (at least, in Barenreiter SCS)
+%
+
+% general parameters:
+save full_width, full_height;
+save stem_thickness, stem_end_thickness_multiplier;
+save beam_thickness, beam_slant, hole_highest_point;
+
+full_height# := 3 staff_space#;
+full_width# := 2/3 staff_space#;
+stem_thickness# := 0.09 staff_space# + 0.5 stafflinethickness#;
+stem_end_thickness_multiplier := 10/7;
+beam_slant := 1.266 stafflinethickness;
+beam_thickness := 0.485 staff_space - stafflinethickness;
+hole_highest_point := 0.5 (staff_space - stafflinethickness);
+
+
+def draw_natural (expr arrowup, arrowdown) =
+ save upstem_factor, downstem_factor;
+ save upstem_end_thickness, downstem_end_thickness;
+ save half_height, half_box_height;
+ save beam_direction, r_stem_top_path, l_stem_bottom_path;
+ pair beam_direction;
+ path r_stem_top_path, l_stem_bottom_path;
+
+ upstem_factor = downstem_factor = stem_end_thickness_multiplier;
+
+ half_height# := 0.5 full_height#;
+ define_pixels (half_height);
+ define_pixels (full_width);
+
+ set_char_box (0, full_width#, half_height#, half_height#);
+ d := d - feta_space_shift;
+
+ if arrowup:
+ b := b + 3 stafflinethickness;
+ h := h + 1.2 staff_space;
+ % to look nice, arrowed stems must be less brushed
+ upstem_factor := 0.5 (1 + upstem_factor);
+ fi;
+ if arrowdown:
+ w := w + 3 stafflinethickness;
+ d := d + 1.2 staff_space;
+ % to look nice, arrowed stems must be less brushed
+ downstem_factor := 0.5 (1 + downstem_factor);
+ fi;
+
+ upstem_end_thickness# = upstem_factor * stem_thickness#;
+ downstem_end_thickness# = downstem_factor * stem_thickness#;
+ define_whole_blacker_pixels (upstem_end_thickness, downstem_end_thickness);
+ define_whole_blacker_pixels (stem_thickness);
+
+ half_box_height := hole_highest_point + beam_thickness
+ %% correction for the fact that x11 != x12.
+ %% ideally y2 should be calculated from y11
+ %% and beam_thickness, but the brushed stems
+ %% would cause a cyclic dependency:
+ %% y2 -> x11 -> y14 -> y13 -> y12 -> y2
+ + 0.5 stem_thickness * beam_slant / full_width;
+
+ %% stems:
+
+ pickup pencircle scaled stem_thickness;
+
+ penpos1 (upstem_end_thickness, 0);
+ penpos3 (downstem_end_thickness, 0);
+ penpos2 (stem_thickness, 0);
+ penpos4 (stem_thickness, 0);
+
+ x2r = full_width;
+ x4l = 0;
+ x3 = x2;
+ x1 = x4;
+
+ y1 = half_height;
+ y3 = -half_height;
+ top y2 = vround (half_box_height);
+ y4 = -y2 + feta_space_shift;
+
+ l_stem_bottom_path := z4r{z4r - z1r}
+ .. bot z4
+ .. z4l{z1l - z4l};
+
+ r_stem_top_path := z2r{z2r - z3r}
+ .. top z2
+ .. z2l{z3l - z2l};
+
+ fill simple_serif (z1l, z1r, -30)
+ -- l_stem_bottom_path
+ -- cycle;
+
+ fill simple_serif (z3l, z3r, 30)
+ -- r_stem_top_path
+ -- cycle;
+
+ %% beams:
+
+ beam_direction = (full_width, beam_slant);
+
+ z11 = z3l + whatever * (z2l - z3l);
+ y11 = vround (hole_highest_point);
+ z12 = directionpoint -beam_direction of r_stem_top_path;
+ z13 = z12 + whatever * beam_direction;
+ x13 = x1;
+ z14 = z11 + whatever * beam_direction;
+ x14 = x1;
+
+ z21 = z4r + whatever * (z1r - z4r);
+ y21 = -y11 + feta_space_shift;
+ z22 = directionpoint -beam_direction of l_stem_bottom_path;
+ z23 = z22 + whatever * beam_direction;
+ x23 = x3;
+ z24 = z21 + whatever * beam_direction;
+ x24 = x3;
+
+ fill z11
+ -- z12
+ -- z13
+ -- z14
+ -- cycle;
+
+ fill z21
+ -- z22
+ -- z23
+ -- z24
+ -- cycle;
+
+ if arrowup:
+ draw_arrow (z1, upstem_end_thickness,
+ z1l - z4l, stafflinethickness / 2, false);
+ fi;
+ if arrowdown:
+ draw_arrow (z3, downstem_end_thickness,
+ z2r - z3r, stafflinethickness / 2, true);
+ fi;
+
+ %% debugging:
+ penlabels (1, 2, 3, 4);
+ labels (11, 12, 13, 14, 21, 22, 23, 24);
+ draw_staff_if_debugging (-2, 2);
+enddef;
+
+
+fet_beginchar ("Natural", "natural");
+ draw_natural (false, false);
+fet_endchar;
+
+
+fet_beginchar ("Arrowed Natural (arrow up)", "natural.arrowup");
+ draw_natural (true, false);
+fet_endchar;
+
+
+fet_beginchar ("Arrowed Natural (arrow down)", "natural.arrowdown");
+ draw_natural (false, true);
+fet_endchar;
+
+
+fet_beginchar ("Arrowed Natural (arrows up and down)", "natural.arrowboth");
+ draw_natural (true, true);
+fet_endchar;
-% Feta (not the Font-En-Tja) music font -- generic stuff: include lots of files, but don't
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-
-
-if test = -1:
- mode := smoke;
-fi
-staffsize# := design_size * pt#;
-mode_setup;
-
-input feta-macros;
-
-input feta-params;
+input common-modules-and-initialization;
font_x_height staff_space#;
fet_beginfont ("feta", design_size, "fetaMusic");
+ input feta-noteheads;
-input feta-noteheads;
-
-autometric_parameter ("staffsize", staffsize#);
-autometric_parameter ("stafflinethickness", stafflinethickness#);
-autometric_parameter ("staff_space", staff_space#);
-autometric_parameter ("linethickness", linethickness#);
-autometric_parameter ("black_notehead_width", black_notehead_width#);
-autometric_parameter ("ledgerlinethickness", ledgerlinethickness#);
-autometric_parameter ("blot_diameter", blot_diameter#);
-
+ input declare-autometric-parameters;
fet_endfont;
% Feta (not the Font-En-Tja) music font -- implement noteheads
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+% Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
% & Han-Wen Nienhuys <hanwen@xs4all.nl>
% & Juergen Reuter <reuter@ipd.uka.de>
%
test_outlines := 0;
-save remember_pic;
-picture remember_pic;
-
-
% Most beautiful noteheads are pronounced, not circular,
% and not even symmetric.
% These examples are inspired by [Wanske]; see literature list.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% NOTE HEAD VARIABLES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fet_beginchar ("Longa notehead", "uM2");
draw_longa (true);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
fet_beginchar ("Longa notehead", "dM2");
draw_longa (false);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Longa notehead", "uM2");
- draw_longa (true);
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-
-
- fet_beginchar ("Longa notehead", "dM2");
- draw_longa (false);
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
def draw_brevis (expr linecount, line_thickness_multiplier) =
save stemthick, fudge, gap;
fet_beginchar ("Brevis notehead", "sM1");
draw_brevis (1, 1);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Brevis notehead", "sM1");
- draw_brevis(1, 1);
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
fet_beginchar ("Double-lined brevis notehead", "sM1double");
draw_brevis (2, 0.8);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Double-lined brevis notehead", "sM1double");
- draw_brevis (2, 0.8);
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
fet_beginchar ("Whole notehead", "s0");
draw_outside_ellipse (1.80 - puff_up_factor / 3.0, 0, 0.707, 0);
undraw_inside_ellipse (1.30, 125 - puff_up_factor * 10,
whole_notehead_width# := charwd;
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Whole notehead", "s0");
- draw_outside_ellipse (1.80 - puff_up_factor / 3.0, 0,
- 0.707, 0);
- undraw_inside_ellipse (1.30, 125 - puff_up_factor * 10,
- 0.68, 2 stafflinethickness#);
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
fet_beginchar ("Half notehead", "s1");
draw_outside_ellipse (1.53 - puff_up_factor / 3.0, 34, 0.66, 0.17);
undraw_inside_ellipse (3.25, 33, 0.81, 2.5 stafflinethickness#);
half_notehead_width# := charwd;
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Half notehead", "s1");
- draw_outside_ellipse (1.53 - puff_up_factor / 3.0, 34,
- 0.66, 0.17);
- undraw_inside_ellipse (3.25, 33, 0.81,
- 2.5 stafflinethickness#);
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
fet_beginchar ("Quarter notehead", "s2");
draw_quarter_path;
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Quarter notehead", "s2");
- draw_outside_ellipse (1.49 - puff_up_factor / 3.0, 31,
- 0.707, 0);
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
undraw_inside_ellipse (1.30, 125, 0.6,
.4 staff_space# + stafflinethickness#);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Whole diamondhead", "s0diamond");
- draw_outside_ellipse (1.80, 0, 0.495, 0);
- undraw_inside_ellipse (1.30, 125, 0.6,
- .4 staff_space# + stafflinethickness#);
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
fet_beginchar ("Half diamondhead", "s1diamond");
draw_outside_ellipse (1.50, 34, 0.49, 0.17);
undraw_inside_ellipse (3.5, 33, 0.80,
.3 staff_space# + 1.5 stafflinethickness#);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Half diamondhead", "s1diamond");
- draw_outside_ellipse (1.50, 34, 0.49, 0.17);
- undraw_inside_ellipse (3.5, 33, 0.80,
- .3 staff_space#
- + 1.5 stafflinethickness#);
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
fet_beginchar ("Quarter diamondhead", "s2diamond");
draw_outside_ellipse (1.80, 35, 0.495, -0.25);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Quarter diamondhead", "s2diamond");
- draw_outside_ellipse (1.80, 35, 0.495, -0.25);
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fet_beginchar ("Whole trianglehead", "s0triangle");
draw_whole_triangle_head;
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Whole trianglehead", "s0triangle");
- draw_whole_triangle_head;
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
def draw_small_triangle_head (expr dir) =
save hei, xs;
save llap;
fet_beginchar ("Half trianglehead (downstem)", "d1triangle");
draw_small_triangle_head (-1);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
fet_beginchar ("Half trianglehead (upstem)", "u1triangle");
draw_small_triangle_head (1);
- draw_staff (-2, 2, 0.5);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
fet_beginchar ("Quarter trianglehead (upstem)", "u2triangle");
draw_closed_triangle_head (1);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
fet_beginchar ("Quarter trianglehead (downstem)", "d2triangle");
draw_closed_triangle_head (-1);
- draw_staff (-2, 2, 0.5);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
fet_beginchar ("Whole slashhead", "s0slash");
draw_slash (4 slash_thick# + 0.5 staff_space#);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
fet_beginchar ("Half slashhead", "s1slash");
draw_slash (3.0 slash_thick# + 0.15 staff_space#);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
fet_beginchar ("Quarter slashhead", "s2slash");
draw_slash (1.5 slash_thick#);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
draw_cross (3.75);
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Whole Crossed notehead", "s0cross");
- save wid, hei;
-
- wid# := black_notehead_width# + 4 stafflinethickness#;
- hei# := noteheight# + stafflinethickness#;
-
- set_char_box (0, wid#, hei# / 2, hei# / 2);
-
- currentpicture := remember_pic;
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
fet_beginchar ("Half Crossed notehead", "s1cross");
save wid, hei;
draw_cross (3.0);
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Half Crossed notehead", "s1cross");
- save wid, hei;
-
- wid# := black_notehead_width# + 2 stafflinethickness#;
- hei# := noteheight# + stafflinethickness# / 2;
-
- set_char_box (0, wid#, hei# / 2, hei# / 2);
-
- currentpicture := remember_pic;
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
fet_beginchar ("Crossed notehead", "s2cross");
wid# := black_notehead_width#;
hei# := noteheight#;
draw_cross (1.0);
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("Crossed notehead", "s2cross");
- wid# := black_notehead_width#;
- hei# := noteheight#;
- set_char_box (0, wid#, hei# / 2, hei# / 2);
-
- currentpicture := remember_pic;
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
fet_beginchar ("X-Circled notehead", "s2xcircle");
save wid, hei;
save cthick, cxd, cyd, dy;
z12 = (charwx * hppp, charwy * vppp);
labels (12);
- remember_pic := currentpicture;
-
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-if test > 0:
- fet_beginchar ("X-Circled notehead", "s2xcircle");
- save wid, hei;
- save cthick, cxr, cyr;
-
- wid# := black_notehead_width# * sqrt (sqrt2);
- hei# := noteheight# * sqrt (sqrt2);
-
- set_char_box (0, wid#, hei# / 2, hei# / 2);
-
- currentpicture := remember_pic;
-
- draw_staff (-2, 2, 0.5);
- fet_endchar;
-fi;
-
-
%%%%%%%%
%
% SOLFA SHAPED NOTES
enddef;
-save mi_weight, mi_width;
+save mi_weight;
mi_weight := 2;
-mi_width := 1.2;
fet_beginchar ("Whole mihead", "s0mi");
- draw_mi_head (mi_width * solfa_whole_width, mi_weight, false);
+ draw_mi_head (solfa_whole_width, mi_weight, false);
fill path_out;
unfill path_in;
fet_endchar;
fet_beginchar ("Half mihead", "s1mi");
- draw_mi_head (mi_width * solfa_quarter_width, mi_weight, false);
+ draw_mi_head (solfa_quarter_width, mi_weight, false);
fill path_out;
unfill path_in;
fet_endchar;
fet_beginchar ("Quarter mihead", "s2mi");
- draw_mi_head (mi_width * solfa_quarter_width, mi_weight, false);
+ draw_mi_head (solfa_quarter_width, mi_weight, false);
fill path_out;
fet_endchar;
fet_beginchar ("Whole mirror mihead", "s0miMirror");
- draw_mi_head (mi_width * solfa_whole_width, mi_weight, true);
+ draw_mi_head (solfa_whole_width, mi_weight, true);
fill path_out;
unfill path_in;
fet_endchar;
fet_beginchar ("Half mirror mihead", "s1miMirror");
- draw_mi_head (mi_width * solfa_quarter_width, mi_weight, true);
+ draw_mi_head (solfa_quarter_width, mi_weight, true);
fill path_out;
unfill path_in;
fet_endchar;
fet_beginchar ("Quarter mirror mihead", "s2miMirror");
- draw_mi_head (mi_width * solfa_quarter_width, mi_weight, true);
+ draw_mi_head (solfa_quarter_width, mi_weight, true);
fill path_out;
fet_endchar;
fet_beginchar ("Whole thin mihead", "s0miThin");
- draw_mi_head (mi_width * solfa_whole_width, 1, false);
+ draw_mi_head (solfa_whole_width, 1, false);
fill path_out;
unfill path_in;
fet_endchar;
fet_beginchar ("Half thin mihead", "s1miThin");
- draw_mi_head (mi_width * solfa_quarter_width, 1, false);
+ draw_mi_head (solfa_quarter_width, 1, false);
fill path_out;
unfill path_in;
fet_endchar;
fet_beginchar ("Quarter thin mihead", "s2miThin");
- draw_mi_head (mi_width * solfa_quarter_width, 1, false);
+ draw_mi_head (solfa_quarter_width, 1, false);
fill path_out;
fet_endchar;
% so we can't just use the standard note font.
%
def draw_sol_head (expr filled) =
- draw_outside_ellipse (1.53 - puff_up_factor / 3.0, 34, 0.66, 0.17);
+ draw_outside_ellipse (1.49 - puff_up_factor / 3.0, 31, 0.707, 0);
if not filled:
- undraw_inside_ellipse (3.25, 33, 0.81, 2.5 stafflinethickness#);
+ undraw_inside_ellipse (2.5 - puff_up_factor / 3.0, 31, 0.707,
+ 3.5 stafflinethickness#);
fi
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
enddef;
fet_beginchar ("Whole solhead", "s0sol");
% Diamond shape
% Has up and down shapes for all hollow notes
%
-save funk_mi_width, funk_mi_weight;
-funk_mi_width := 1.2;
+save funk_mi_weight;
funk_mi_weight := 1.9;
fet_beginchar ("Whole up Funk mihead", "u0miFunk");
- draw_mi_head (funk_mi_width * funk_notehead_width,
+ draw_mi_head (funk_notehead_width,
funk_mi_weight, false);
fill path_out;
unfill path_in;
fet_beginchar ("Whole down Funk mihead", "d0miFunk");
- draw_mi_head (funk_mi_width * funk_notehead_width,
+ draw_mi_head (funk_notehead_width,
funk_mi_weight, true);
fill path_out;
unfill path_in;
fet_beginchar ("Half up Funk mihead", "u1miFunk");
- draw_mi_head (funk_mi_width * funk_notehead_width,
+ draw_mi_head (funk_notehead_width,
funk_mi_weight, false);
fill path_out;
unfill path_in;
fet_beginchar ("Half down Funk mihead", "d1miFunk");
- draw_mi_head (funk_mi_width * funk_notehead_width,
+ draw_mi_head (funk_notehead_width,
funk_mi_weight, true);
fill path_out;
unfill path_in;
fet_beginchar ("Quarter Funk mihead", "s2miFunk");
- draw_mi_head (funk_mi_width * funk_notehead_width,
+ draw_mi_head (funk_notehead_width,
funk_mi_weight, false);
fill path_out;
fet_endchar;
if not filled:
undraw_inside_ellipse (1.9, 33, 0.74, 5.5 stafflinethickness#);
fi
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
endgroup
enddef;
% Symmetric for all hollow notes
%
save walker_mi_width, walker_mi_weight;
-walker_mi_width := 1.2;
+walker_mi_width := 1;
walker_mi_weight := 1.5;
fet_beginchar ("Whole Walker mihead", "s0miWalker");
-% feta-noteheads11.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 11.22;
-test := 0;
-
-
input feta-noteheads-generic;
-
end.
-
-% feta-noteheads13.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 12.60;
-test := 0;
-
-
input feta-noteheads-generic;
-
end.
-
-% feta-noteheads14.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 14.14;
-test := 0;
-
-
input feta-noteheads-generic;
-
end.
-
-% feta-noteheads16.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 15.87;
-test := 0;
-
-
input feta-noteheads-generic;
-
end.
-
-% feta-noteheads18.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 17.82;
-test := 0;
-
-
input feta-noteheads-generic;
-
end.
-
-% feta-noteheads20.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 20;
-test := 0;
-
-
input feta-noteheads-generic;
-
end.
-
-% feta-noteheads23.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 22.45;
-test := 0;
-
-
input feta-noteheads-generic;
-
end.
-
-% feta-noteheads26.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 25.20;
-test := 0;
-
-
input feta-noteheads-generic;
-
end.
-
% Feta (not the Font-En-Tja) music font -- bold Orator numerals
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+% Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
--- /dev/null
+% This file is part of LilyPond, the GNU music typesetter.
+%
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%
+% The LilyPond font is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version, or under the SIL Open Font License.
+
+
+input common-modules-and-initialization;
+
+font_x_height staff_space#;
+
+fet_beginfont ("feta", design_size, "fetaMusic");
+ input feta-rests;
+ input feta-accidentals;
+ input feta-arrowheads;
+ input feta-dots;
+ input feta-scripts;
+ input feta-clefs;
+ input feta-timesignatures;
+ input feta-pedals;
+ input feta-brackettips;
+ input feta-accordion;
+ input feta-ties;
+
+ input declare-autometric-parameters;
+fet_endfont;
% Feta (not the Font-En-Tja) music font -- global parameters for both feta and parmesan fonts
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
--- /dev/null
+
+
+def draw_paren =
+ save leftindent;
+
+ leftindent := .2 staff_space;
+
+ set_char_box (0, .5 staff_space# + stafflinethickness#,
+ staff_space#, staff_space#);
+
+ d := d - feta_shift;
+
+ z1 = (leftindent, h);
+ z2 = (w - stafflinethickness, .5 (h - d));
+ z3 = (leftindent, -d);
+
+ penpos1 (stafflinethickness, 35);
+ penpos2 (.1 staff_space + stafflinethickness, 0);
+ penpos3 (stafflinethickness, -35);
+
+ fill z2l{down}
+ .. simple_serif (z3l, z3r, 90)
+ .. z2r{up}
+ .. simple_serif (z1r, z1l, 90)
+ .. z2l{down}
+ -- cycle;
+enddef;
+
+
+fet_beginchar ("Right Parenthesis", "rightparen");
+ draw_paren;
+ penlabels (1, 2, 3);
+
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+
+
+fet_beginchar ("Left Parenthesis", "leftparen");
+ draw_paren;
+
+ currentpicture := currentpicture xscaled -1;
+
+ set_char_box (charwd, charbp, chardp, charht);
+fet_endchar;
% Feta (not the Font-En-Tja) music font -- piano pedal markings
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+% Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
%
% Voor Cup
%
% Feta (not the Font-En-Tja) music font -- rest symbols -*-Fundamental-*-
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+% Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
currentpicture := currentpicture
shifted (0, -block_rest_y + feta_space_shift);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
block_rest;
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
lft x5 = -b - block_rest_y;
rt x6 = w + block_rest_y;
draw_gridline (z5, z6, ledgerlinethickness_rounded);
-
- draw_staff (-2, 2, -3);
fet_endchar;
rt x6 = w + block_rest_y;
draw_gridline (z5, z6, ledgerlinethickness_rounded);
-
- draw_staff (-2, 2, 3);
fet_endchar;
addto currentpicture also currentpicture shifted (2 breve_rest_x, 0);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
draw_block ((0, -breve_rest_y + feta_shift),
(breve_rest_x, breve_rest_y));
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
draw_block ((0, 0), (breve_rest_x, breve_rest_y));
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
fet_beginchar ("breve rest (outside staff)", "M1o");
draw_gridline (z5, z6, ledgerlinethickness_rounded);
draw_gridline ((x5, 0), (x6, 0), ledgerlinethickness_rounded);
-
- draw_staff (-2, 2, 3);
fet_endchar;
penlabels (1, 2, 3, 4, 5, 6, 7);
penlabels (10, 11, 12, 13);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
-- z1l
.. cycle;
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
enddef;
penlabels (1, 2);
labels (9);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
penlabels (1, 2);
labels (9);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
penlabels (1, 2);
labels (9);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
penlabels (1, 2);
labels (9);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
fet_endchar;
% Feta (not the Font-En-Tja) music font -- implement scripts
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
% Jan Nieuwenhuizen <janneke@gnu.org>
%
%
addto currentpicture also currentpicture scaled -1;
penlabels (1, 1', 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
- % draw_staff (-2, 2, 0);
fet_endchar;
draw_arpeggio;
penlabels (range 1 thru 9);
- draw_staff (-2, 2, 0.0);
+ draw_staff_if_debugging (-2, 2);
endgroup;
fet_endchar;
--- /dev/null
+
+%
+% The beams of most sharps have horizontal endings (as if drawn with
+% a square pen). [Wanske] does not mention this, so we'll just ignore
+% this fact.
+%
+
+save default_width, default_height, onestemmed_height;
+save default_interbeam_dist, triples_interbeam_dist;
+save default_beam_thickness, stem_thickness;
+
+default_width# := 1.1 staff_space#;
+default_height# := 3 staff_space#;
+onestemmed_height# := 2.66 staff_space#;
+define_pixels (default_width);
+
+default_interbeam_dist := 1.05 staff_space_rounded;
+triples_interbeam_dist := 1.2 staff_space_rounded;
+
+default_beam_thickness# := 0.3 staff_space# + stafflinethickness#;
+stem_thickness# := stafflinethickness# + .05 staff_space#;
+define_whole_blacker_pixels (stem_thickness);
+
+
+def draw_sharp_beam (expr length, y_offset) =
+ save beam_length;
+ save ne_beam_dir, nw_dist;
+ pair ne_beam_dir, nw_dist;
+
+ beam_length := length;
+
+ define_whole_vertical_blacker_pixels (default_beam_thickness);
+
+ clearxy;
+
+ pickup pencircle scaled 2 blot_diameter;
+
+ rt x2 - lft x1 = beam_length;
+ z2 = z1 + whatever * (beam_length, default_beam_thickness);
+ .5 [z1, z3] = (.5 w, y_offset);
+ x3 = x2;
+ top y2 - bot y3 = default_beam_thickness;
+ x4 = x1;
+ top y1 - bot y4 = default_beam_thickness;
+
+ ne_beam_dir = unitvector (z2 - z1);
+ nw_dist = (ne_beam_dir rotated 90) * blot_diameter;
+
+ fill lft z1{up}
+ ... (z1 + nw_dist){ne_beam_dir}
+ -- (z2 + nw_dist){ne_beam_dir}
+ ... rt z2{down}
+ -- rt z3{down}
+ ... (z3 - nw_dist){-ne_beam_dir}
+ -- (z4 - nw_dist){-ne_beam_dir}
+ ... lft z4{up}
+ -- cycle;
+
+ labels (1, 2, 3, 4);
+enddef;
+
+
+def draw_sharp (expr arrowup, arrowdown) =
+ save dist_between_stems;
+ save outer_space;
+ save half_height, interbeam_dist;
+
+ half_height# := 0.5 default_height#;
+ define_pixels (half_height);
+ interbeam_dist := default_interbeam_dist;
+
+ set_char_box (0, default_width#, half_height#, half_height#);
+ d := d - feta_space_shift;
+
+ dist_between_stems := hround (7 / 16 * default_width);
+ outer_space := hround ((w - dist_between_stems - stem_thickness) / 2);
+
+ w := 2 outer_space + dist_between_stems + stem_thickness;
+
+ draw_sharp_beam (w, -.5 interbeam_dist);
+ draw_sharp_beam (w, -.5 interbeam_dist + vround interbeam_dist);
+
+ % expand the charbox so that it encloses the whole arrow;
+ % this must not happen earlier because some commands above
+ % still rely on the old width
+ if arrowup:
+ w := w + 1.5 stafflinethickness;
+ h := h + 1.2 staff_space;
+ fi;
+ if arrowdown:
+ b := b + 1.5 stafflinethickness;
+ d := d + 1.2 staff_space;
+ fi;
+
+ pickup pencircle scaled stem_thickness;
+
+ lft x5 = lft x6 = outer_space;
+ lft x7 = lft x8 = outer_space + dist_between_stems;
+ bot y5 = -half_height;
+ top y8 = half_height;
+ z6 = z8 + whatever * ne_beam_dir;
+ bot y7 = -top y6 + feta_space_shift;
+
+ draw_gridline (z5, z6, stem_thickness);
+ draw_gridline (z7, z8, stem_thickness);
+
+ if arrowup:
+ draw_arrow (z8, stem_thickness, up,
+ stafflinethickness / 2 + stem_thickness / 2, false);
+ fi;
+ if arrowdown:
+ draw_arrow (z5, stem_thickness, up,
+ stafflinethickness / 2 + stem_thickness / 2, true);
+ fi;
+
+ labels (5, 6, 7, 8);
+ draw_staff_if_debugging (-2, 2);
+enddef;
+
+
+fet_beginchar ("Sharp", "sharp");
+ draw_sharp (false, false);
+fet_endchar;
+
+
+fet_beginchar ("Arrowed Sharp (arrow up)", "sharp.arrowup");
+ draw_sharp (true, false);
+fet_endchar;
+
+
+fet_beginchar ("Arrowed Sharp (arrow down)", "sharp.arrowdown");
+ draw_sharp (false, true);
+fet_endchar;
+
+
+fet_beginchar ("Arrowed Sharp (arrows up and down)", "sharp.arrowboth");
+ draw_sharp (true, true);
+fet_endchar;
+
+
+fet_beginchar ("1/2 Sharp", "sharp.slashslash.stem");
+ save outer_space;
+ save half_height, interbeam_dist;
+
+ half_height# := 0.5 onestemmed_height#;
+ define_pixels (half_height);
+ interbeam_dist := default_interbeam_dist;
+
+ set_char_box (0, 0.7 staff_space#, half_height#, half_height#);
+ d := d - feta_space_shift;
+
+ outer_space := hround ((w - stem_thickness) / 2);
+
+ w := 2 outer_space + stem_thickness;
+
+ draw_sharp_beam (w, -.5 interbeam_dist);
+ draw_sharp_beam (w, -.5 interbeam_dist + vround interbeam_dist);
+
+ pickup pencircle scaled stem_thickness;
+
+ lft x5 = lft x6 = outer_space;
+ top y6 = half_height;
+ bot y5 = -top y6 + feta_space_shift;
+
+ draw_gridline (z5, z6, stem_thickness);
+
+ labels (5, 6);
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+
+
+fet_beginchar ("Sharp (3 beams)", "sharp.slashslashslash.stemstem");
+ save dist_between_stems;
+ save outer_space;
+ save half_height, interbeam_dist;
+ save default_beam_thickness;
+
+ half_height# := 0.5 default_height#;
+ define_pixels (half_height);
+ interbeam_dist := triples_interbeam_dist;
+
+ default_beam_thickness# := 0.22 staff_space# + stafflinethickness#;
+
+ set_char_box (0, default_width#, half_height#, half_height#);
+
+ dist_between_stems := hround (7 / 16 * default_width);
+ outer_space := hround ((w - dist_between_stems - stem_thickness) / 2);
+
+ w := 2 outer_space + dist_between_stems + stem_thickness;
+ d := d - feta_space_shift;
+
+ draw_sharp_beam (.88 w, -.5 interbeam_dist);
+ draw_sharp_beam (.88 w, -.5 interbeam_dist + vround interbeam_dist);
+ default_beam_thickness# := 1/.88 default_beam_thickness#;
+ draw_sharp_beam (w, 0);
+
+ pickup pencircle scaled stem_thickness;
+
+ lft x5 = lft x6 = outer_space;
+ lft x7 = lft x8 = outer_space + dist_between_stems;
+ bot y5 = -half_height;
+ top y8 = half_height;
+ z6 = z8 + whatever * ne_beam_dir;
+ bot y7 = -top y6 + feta_space_shift;
+
+ draw_gridline (z5, z6, stem_thickness);
+ draw_gridline (z7, z8, stem_thickness);
+
+ labels (5, 6, 7, 8);
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+
+
+fet_beginchar ("1/2 Sharp (3 beams)", "sharp.slashslashslash.stem");
+ save outer_space;
+ save half_height, interbeam_dist;
+ save default_beam_thickness;
+
+ half_height# := 0.5 onestemmed_height#;
+ define_pixels (half_height);
+ interbeam_dist := triples_interbeam_dist;
+
+ default_beam_thickness# := 0.22 staff_space# + stafflinethickness#;
+
+ set_char_box (0, 0.95 staff_space#, half_height#, half_height#);
+
+ outer_space := hround ((w - stem_thickness) / 2);
+
+ w := 2 outer_space + stem_thickness;
+ d := d - feta_space_shift;
+
+ draw_sharp_beam (.8 w, -.5 interbeam_dist);
+ draw_sharp_beam (.8 w, -.5 interbeam_dist + vround interbeam_dist);
+ default_beam_thickness# := 1/.8 default_beam_thickness#;
+ draw_sharp_beam (w, 0);
+
+ pickup pencircle scaled stem_thickness;
+
+ lft x5 = lft x6 = outer_space;
+ top y6 = half_height;
+ bot y5 = -top y6 + feta_space_shift;
+
+ draw_gridline (z5, z6, stem_thickness);
+
+ labels (5, 6);
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+
+
+fet_beginchar ("3/4 Sharp", "sharp.slashslash.stemstemstem");
+ save dist_between_stems;
+ save outer_space;
+ save half_height, interbeam_dist;
+
+ half_height# := 0.5 default_height#;
+ define_pixels (half_height);
+ interbeam_dist := default_interbeam_dist;
+
+ set_char_box (0, 1.6 staff_space#, half_height#, half_height#);
+ d := d - feta_space_shift;
+
+ dist_between_stems := hround (9 / 32 * w);
+ outer_space := hround ((w - 2 dist_between_stems - stem_thickness) / 2);
+
+ w := 2 outer_space + 2 dist_between_stems + stem_thickness;
+
+ draw_sharp_beam (w, -.5 interbeam_dist);
+ draw_sharp_beam (w, -.5 interbeam_dist + vround interbeam_dist);
+
+ pickup pencircle scaled stem_thickness;
+
+ lft x5 = lft x6 = outer_space;
+ lft x9 = lft x10 = outer_space + dist_between_stems;
+ lft x7 = lft x8 = outer_space + 2 dist_between_stems;
+ bot y5 = -half_height;
+ top y8 = half_height;
+ z6 = z8 + whatever * ne_beam_dir;
+ bot y7 = -top y6 + feta_space_shift;
+ y9 = .5 [y5, y7];
+ y10 = .5 [y6, y8];
+
+ draw_gridline (z5, z6, stem_thickness);
+ draw_gridline (z7, z8, stem_thickness);
+ draw_gridline (z9, z10, stem_thickness);
+
+ labels (5, 6, 7, 8, 9, 10);
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+
+
+fet_beginchar ("Double Sharp", "doublesharp");
+ save klaverblad, klaversteel;
+ save pat;
+ path pat;
+
+ klaversteel = 1/15 staff_space;
+ klaverblad = .4 staff_space - .5 stafflinethickness;
+
+ set_char_box (0, staff_space#, .5 staff_space#, .5 staff_space#);
+
+ z1 = (klaversteel, 0);
+ z2 = (w / 2 - klaverblad / 10, h - klaverblad);
+ z3 = (w / 2, h);
+ z4 = z2 reflectedabout ((0, 0), (1, 1));
+ z5 = z1 reflectedabout ((0, 0), (1, 1));
+
+ pickup pencircle scaled blot_diameter;
+
+ x2 := hfloor (rt x2) - blot_diameter / 2;
+ x3 := hfloor (rt x3) - blot_diameter / 2;
+ y3 := vfloor (top y3) - blot_diameter / 2;
+ y4 := vfloor (top y4) - blot_diameter / 2;
+
+ pat = (rt z1){dir45}
+ .. {right}(bot z2)
+ .. rt z2
+ -- rt z3{z3 - z2}
+ .. top z3{z4 - z3}
+ -- top z4{z4 - z3}
+ .. (lft z4){down}
+ .. {dir 225}(top z5);
+ pat := pat
+ -- reverse pat xscaled -1 shifted (-feta_eps, 0);
+
+ % assure symmetry -- it's more important to center the glyph on the
+ % staff line than centering it between staff lines, so we use
+ % feta_shift, not feta_space_shift.
+ h := h + feta_shift;
+
+ fill pat shifted (0, feta_shift)
+ -- reverse pat yscaled -1 shifted (0, -feta_eps)
+ -- cycle;
+
+ % ugh
+ currentpicture := currentpicture shifted (hround (w / 2), 0);
+
+ labels (1, 2, 3, 4, 5);
+ draw_staff_if_debugging (-2, 2);
+fet_endchar;
+++ /dev/null
-%
-% test stuff.
-% in a separate file to avoid tainting non-test font files for testing.
-%
-
-%input feta-rests;
-input feta-accidentals;
-%input feta-dots;
-%input feta-arrowheads;
-%input feta-scripts;
-%input feta-trills;
-%input feta-clefs;
-%input feta-brackettips;
-%input feta-timesignatures;
-%input feta-pedals;
-%input feta-accordion;
-%input feta-ties;
+++ /dev/null
-% feta-test11.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
-
-design_size := 11;
-test := 1;
-
-% smoked cheese
-% test := -1;
-
-input feta-generic;
-
-end.
-
+++ /dev/null
-% feta-test13.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
-
-design_size := 13;
-test := 1;
-
-% smoked cheese
-% test := -1;
-
-input feta-generic;
-
-
-end.
-
+++ /dev/null
-% feta-test16.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
-
-design_size := 16;
-test := 1;
-
-% smoked cheese
-% test := -1;
-
-input feta-generic;
-
-
-end.
-
+++ /dev/null
-% feta-test20.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
-
-design_size := 20;
-test := 1;
-
-% smoked cheese
-% test := -1;
-
-input feta-generic;
-
-
-end.
-
+++ /dev/null
-% feta-test23.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
-
-design_size := 23;
-test := 1;
-
-% smoked cheese
-% test := -1;
-
-input feta-generic;
-
-
-end.
-
+++ /dev/null
-% feta-test26.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
-
-design_size := 26;
-test := 1;
-
-% smoked cheese
-% test := -1;
-
-input feta-generic;
-
-
-end.
% Feta (not the Font-En-Tja) music font -- small ties
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2011--2012 Bertrand Bordage <bordage.bertrand@gmail.com>
+% Copyright (C) 2011--2014 Bertrand Bordage <bordage.bertrand@gmail.com>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% Feta (not the Font-En-Tja) music font -- implement Time Signatures
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1998--2012 Mats Bengtsson <matsb@s3.kth.se>,
+% Copyright (C) 1998--2014 Mats Bengtsson <matsb@s3.kth.se>,
% Christian Mondrup <scancm@biobase.dk>
%
% The LilyPond font is free software: you can redistribute it and/or modify
penlabels (1, 2, 3, 4, 5);
- draw_staff (-2, 2, 0);
+ draw_staff_if_debugging (-2, 2);
enddef;
% Feta (not the Font-En-Tja) music font -- implement trill symbols
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+% Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
-% feta11.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 11.22;
-test := 0;
-
-
-input feta-generic;
+input feta-other-generic;
end.
-
-% feta13.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 12.60;
-test := 0;
-
-
-input feta-generic;
+input feta-other-generic;
end.
-
-% feta14.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 14.14;
-test := 0;
-
-
-input feta-generic;
-
+input feta-other-generic;
end.
-
-% feta16.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 15.87;
-test := 0;
-
-
-input feta-generic;
+input feta-other-generic;
end.
-
-% feta18.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
-input feta-autometric;
-
-% todo change file name
design_size := 17.82;
-test := 0;
-
-
-input feta-generic;
-
+input feta-other-generic;
end.
-% feta20.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 20;
-input feta-autometric;
-
-
% use feta-test for debugging.
-test := 0;
-input feta-generic;
-
-
+input feta-other-generic;
end.
-% feta23.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
-input feta-autometric;
-
-% todo change file name
design_size := 22.45;
-test := 0;
-
-
-input feta-generic;
-
+input feta-other-generic;
end.
-
-% feta26.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 25.20;
-test := 0;
-
-
-input feta-generic;
-
+input feta-other-generic;
end.
-
-
% Feta (not the Font-En-Tja) music font -- ancient accidentals
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
+% Copyright (C) 2001--2014 Juergen Reuter <reuter@ipd.uka.de>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% Feta (not the Font-En-Tja) music font -- ancient clefs
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
+% Copyright (C) 2001--2014 Juergen Reuter <reuter@ipd.uka.de>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
fet_beginchar ("Ed. Vat. do clef", "vaticana.do");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_vaticana_do_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("Ed. Vat. fa clef", "vaticana.fa");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_vaticana_fa_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("Ed. Med. do clef", "medicaea.do");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_medicaea_do_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("Ed. Med. fa clef", "medicaea.fa");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_medicaea_fa_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("neo-mensural c clef", "neomensural.c");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_neomensural_c_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("petrucci c1 clef", "petrucci.c1");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_c_clef ((0, 0), +2, 1.0);
fet_endchar;
fet_beginchar ("petrucci c2 clef", "petrucci.c2");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_c_clef ((0, 0), +1, 1.0);
fet_endchar;
fet_beginchar ("petrucci c3 clef", "petrucci.c3");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_c_clef ((0, 0), 0, 1.0);
fet_endchar;
fet_beginchar ("petrucci c4 clef", "petrucci.c4");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_c_clef ((0, 0), -1, 1.0);
fet_endchar;
fet_beginchar ("petrucci c5 clef", "petrucci.c5");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_c_clef ((0, 0), -2, 1.0);
fet_endchar;
fet_beginchar ("mensural c clef", "mensural.c");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_mensural_c_clef ((0, 0), 1.0, true);
fet_endchar;
fet_beginchar ("black mensural c clef", "blackmensural.c");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_mensural_c_clef ((0, 0), 1.0, false);
fet_endchar;
fet_beginchar ("petrucci f clef", "petrucci.f");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_f_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("mensural f clef", "mensural.f");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_mensural_f_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("petrucci g clef", "petrucci.g");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_g_clef ((0, 0), 1.0);
fet_endchar;
% until the code for the mensural g clef will be rewritten.
%
fet_beginchar ("mensural g clef", "mensural.g");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_g_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("Hufnagel do clef", "hufnagel.do");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_hufnagel_do_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("Hufnagel fa clef", "hufnagel.fa");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_hufnagel_fa_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("Hufnagel do/fa clef", "hufnagel.do.fa");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_hufnagel_do_fa_clef ((0, 0), 1.0);
fet_endchar;
% Feta (not the Font-En-Tja) music font -- ancient custodes
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2000--2012 Juergen Reuter <reuter@ipd.uka.de>
+% Copyright (C) 2000--2014 Juergen Reuter <reuter@ipd.uka.de>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% Feta (not the Font-En-Tja) music font -- dot vaticana
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2006--2012 Juergen Reuter <reuter@ipd.uka.de>
+% Copyright (C) 2006--2014 Juergen Reuter <reuter@ipd.uka.de>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% Feta (not the Font-En-Tja) music font -- ancient flags
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
+% Copyright (C) 2001--2014 Juergen Reuter <reuter@ipd.uka.de>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
+++ /dev/null
-% Feta (not the Font-En-Tja) music font -- generic stuff: include lots of files,
-% This file is part of LilyPond, the GNU music typesetter.
-%
-% Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
-%
-% The LilyPond font is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-
-
-if test = -1:
- mode := smoke;
-fi;
-
-mode_setup;
-
-staffsize# := design_size * pt#;
-
-input feta-macros;
-input feta-params;
-
-input parmesan-macros;
-
-
-font_x_height staff_space#;
-
-
-fet_beginfont ("parmesan", design_size, "parmesanMusic");
- if test = 0:
- input parmesan-rests;
- input parmesan-clefs;
- input parmesan-custodes
- input parmesan-accidentals;
- input parmesan-flags;
- input parmesan-timesignatures;
- input parmesan-scripts;
- input parmesan-dots;
- else:
-
- fi;
-fet_endfont;
% Feta (not the Font-En-Tja) music font -- macros for parmesan font
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
+% Copyright (C) 2001--2014 Juergen Reuter <reuter@ipd.uka.de>
%
%
% The LilyPond font is free software: you can redistribute it and/or modify
-% Feta (not the Font-En-Tja) music font -- generic stuff: include lots of files
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version, or under the SIL Open Font License.
-%
-% LilyPond is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-
-
-if test = -1:
- mode := smoke;
-fi
-
-staffsize# := design_size * pt#;
-
-mode_setup;
-
-input feta-macros;
-input feta-params;
+input common-modules-and-initialization;
input parmesan-macros;
font_x_height staff_space#;
% Feta (not the Font-En-Tja) music font -- ancient note heads
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
+% Copyright (C) 2001--2014 Juergen Reuter <reuter@ipd.uka.de>
%
% Neo-mensural heads originally by
% Christian Mondrup and Mats Bengtsson
-% feta-noteheads11.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 11.22;
-test := 0;
-
-
input parmesan-noteheads-generic;
-
end.
-
-% feta-noteheads13.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 12.60;
-test := 0;
-
-
input parmesan-noteheads-generic;
-
end.
-
-% feta-noteheads14.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 14.14;
-test := 0;
-
-
input parmesan-noteheads-generic;
-
end.
-
-% feta-noteheads16.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 15.87;
-test := 0;
-
-
input parmesan-noteheads-generic;
-
end.
-
-% feta-noteheads18.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 17.82;
-test := 0;
-
-
input parmesan-noteheads-generic;
-
end.
-
-% feta-noteheads20.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 20;
-test := 0;
-
-
input parmesan-noteheads-generic;
-
end.
-
-% feta-noteheads23.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 22.45;
-test := 0;
-
-
input parmesan-noteheads-generic;
-
end.
-
-% feta-noteheads26.mf
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
+% Produce font files at specified size.
design_size := 25.20;
-test := 0;
-
-
input parmesan-noteheads-generic;
-
end.
-
--- /dev/null
+% This file is part of LilyPond, the GNU music typesetter.
+%
+% Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>
+%
+% The LilyPond font is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version, or under the SIL Open Font License.
+
+
+
+input common-modules-and-initialization;
+input parmesan-macros;
+
+font_x_height staff_space#;
+
+fet_beginfont ("parmesan", design_size, "parmesanMusic");
+ input parmesan-rests;
+ input parmesan-clefs;
+ input parmesan-custodes
+ input parmesan-accidentals;
+ input parmesan-flags;
+ input parmesan-timesignatures;
+ input parmesan-scripts;
+ input parmesan-dots;
+fet_endfont;
% Feta (not the Font-En-Tja) music font -- ancient rests
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
+% Copyright (C) 2001--2014 Juergen Reuter <reuter@ipd.uka.de>
%
% Neo-mensural rests originally by
% Christian Mondrup and Mats Bengtsson.
% Feta (not the Font-En-Tja) music font -- ancient script symbols
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
+% Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>
%
%
% The LilyPond font is free software: you can redistribute it and/or modify
% Feta (not the Font-En-Tja) music font -- ancient time signatures
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1998--2012 Mats Bengtsson <matsb@s3.kth.se>,
+% Copyright (C) 1998--2014 Mats Bengtsson <matsb@s3.kth.se>,
% Christian Mondrup <scancm@biobase.dk>
-% Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
+% Copyright (C) 2002--2014 Juergen Reuter <reuter@ipd.uka.de>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
-% parmesan11.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 11.22;
-input feta-autometric;
-
-test := 0;
-
-input parmesan-generic;
-
+input parmesan-other-generic;
end.
-
-% parmesan13.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 12.60;
-input feta-autometric;
-
-test := 0;
-
-input parmesan-generic;
-
-
+input parmesan-other-generic;
end.
-
-% parmesan14.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 14.14;
-
-input feta-autometric;
-
-test := 0;
-
-input parmesan-generic;
-
-
+input parmesan-other-generic;
end.
-
-% parmesan16.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 15.87;
-input feta-autometric;
-
-test := 0;
-
-input parmesan-generic;
-
-
+input parmesan-other-generic;
end.
-
-% parmesan18.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 17.82;
-input feta-autometric;
-
-test := 0;
-
-input parmesan-generic;
-
-
+input parmesan-other-generic;
end.
-
-% parmesan20.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 20;
-input feta-autometric;
-
-test := 0;
-
-input parmesan-generic;
-
-
+input parmesan-other-generic;
end.
-
-% parmesan23.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 22.45;
-input feta-autometric;
-
-test := 0;
-
-input parmesan-generic;
-
-
+input parmesan-other-generic;
end.
-
-% parmesan26.mf
-% part of LilyPond's pretty-but-neat music font
+% Produce font files at specified size.
design_size := 25.20;
-input feta-autometric;
-
-test := 0;
-
-input parmesan-generic;
-
-
+input parmesan-other-generic;
end.
-
# Translation of LilyPond.
-# Copyright (C) 1998--2012 Han-Wen Nienhuys, Jan Nieuwenhuizen
+# Copyright (C) 1998--2014 Han-Wen Nienhuys, Jan Nieuwenhuizen
# This file is distributed under the same license as the lilypond package.
# Walter Garcia-Fontes <walter.garcia@upf.edu>, 2013.
#
#: musicxml2ly.py:2576
msgid ""
-"Copyright (c) 2005--2012 by\n"
+"Copyright (c) 2005--2014 by\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
msgstr ""
-"Copyright (c) 2005--2012 per\n"
+"Copyright (c) 2005--2014 per\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> i\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
#: musicxml2ly.py:2574
msgid ""
-"Copyright (c) 2005--2012 by\n"
+"Copyright (c) 2005--2014 by\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
msgstr ""
-"Autorské právo (c) 2005--2012\n"
+"Autorské právo (c) 2005--2014\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> a\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
# German Translation of lilypond.
-# Copyright (C) 2013 Han-Wen Nienhuys, Jan Nieuwenhuizen
+# Copyright (C) 2013--2014 Han-Wen Nienhuys, Jan Nieuwenhuizen
# This file is distributed under the same license as the lilypond package.
# Erwin Dieterich <bamse@gmx.de>, 1999
# Roland Stigge <stigge@antcom.de>, 2003, 2004, 2005, 2006, 2007
#: musicxml2ly.py:2576
msgid ""
-"Copyright (c) 2005--2012 by\n"
+"Copyright (c) 2005--2014 by\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
msgstr ""
-"Copyright (c) 2005--2012\n"
+"Copyright (c) 2005--2014\n"
"····Han-Wen·Nienhuys·<hanwen@xs4all.nl>,\n"
"····Jan·Nieuwenhuizen·<janneke@gnu.org>·and\n"
"····Reinhold·Kainhofer·<reinhold@kainhofer.com>\n"
#: musicxml2ly.py:2669
msgid ""
-"Copyright (c) 2005--2011 by\n"
+"Copyright (c) 2005--2014 by\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
msgstr ""
-"Copyright (c) 2005--2011 από\n"
+"Copyright (c) 2005--2014 από\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> και\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
#: musicxml2ly.py:2576
msgid ""
-"Copyright (c) 2005--2012 by\n"
+"Copyright (c) 2005--2014 by\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
msgstr ""
-"Kopirajto (c) 2005--2012 de\n"
+"Kopirajto (c) 2005--2014 de\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> kaj\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
#: musicxml2ly.py:2576
msgid ""
-"Copyright (c) 2005--2012 by\n"
+"Copyright (c) 2005--2014 by\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
msgstr ""
-"Copyright (c) 2005--2012 por\n"
+"Copyright (c) 2005--2014 por\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> y\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
#: musicxml2ly.py:2576
msgid ""
-"Copyright (c) 2005--2012 by\n"
+"Copyright (c) 2005--2014 by\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
msgstr ""
-"Copyright (c) 2005--2012 par\n"
+"Copyright (c) 2005--2014 par\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> et\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
#: musicxml2ly.py:2576
msgid ""
-"Copyright (c) 2005--2012 by\n"
+"Copyright (c) 2005--2014 by\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
msgstr ""
-"Copyright (c) 2005--2012 di\n"
+"Copyright (c) 2005--2014 di\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> e\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
#: musicxml2ly.py:2574
msgid ""
-"Copyright (c) 2005--2012 by\n"
+"Copyright (c) 2005--2014 by\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
# Translation of LilyPond
-# Copyright (C) 1998--2012 Han-Wen Nienhuys, Jan Nieuwenhuizen.
+# Copyright (C) 1998--2014 Han-Wen Nienhuys, Jan Nieuwenhuizen.
# This file is distributed under the same license as the LilyPond package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: lilypond 2.17.95\n"
+"Project-Id-Version: lilypond 2.19.8\n"
"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
"lilypond.bugs\n"
-"POT-Creation-Date: 2013-11-04 10:26+0100\n"
+"POT-Creation-Date: 2014-06-15 16:22+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "Running `%s' on file `%s' to detect default page settings.\n"
msgstr ""
-#: book_latex.py:212 book_texinfo.py:228
+#: book_latex.py:219 book_texinfo.py:228
msgid "Unable to auto-detect default settings:\n"
msgstr ""
-#: book_latex.py:224 book_texinfo.py:240
+#: book_latex.py:231 book_texinfo.py:240
#, python-format
msgid ""
"Unable to auto-detect default settings:\n"
"%s"
msgstr ""
-#: book_latex.py:247
+#: book_latex.py:254
msgid "cannot detect textwidth from LaTeX"
msgstr ""
#: convertrules.py:82 convertrules.py:1856 convertrules.py:2032
#: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801
-#: convertrules.py:3151 convertrules.py:3385
+#: convertrules.py:3151 convertrules.py:3385 convertrules.py:3697
msgid "bump version for release"
msgstr ""
msgid "Processing `%s'... "
msgstr ""
-#: convert-ly.py:367
+#: convert-ly.py:368
#, python-format
msgid "%s: Unable to open file"
msgstr ""
-#: convert-ly.py:373
+#: convert-ly.py:374
#, python-format
msgid "%s: Unable to determine version. Skipping"
msgstr ""
-#: convert-ly.py:379
+#: convert-ly.py:380
#, python-format
msgid ""
"%s: Invalid version string `%s' \n"
"`2.8.12'"
msgstr ""
-#: convert-ly.py:385
+#: convert-ly.py:386
#, python-format
msgid "There was %d error."
msgid_plural "There were %d errors."
#: musicxml2ly.py:2576
msgid ""
-"Copyright (c) 2005--2012 by\n"
+"Copyright (c) 2005--2014 by\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
msgid "procedure or context-name expected for accidental rule, found %s"
msgstr ""
-#: accidental.cc:169
+#: accidental.cc:170
#, c-format
msgid "Could not find glyph-name for alteration %s"
msgstr ""
-#: accidental.cc:184
+#: accidental.cc:186
msgid "natural alteration glyph not found"
msgstr ""
msgid "Asking for broken bound padding at a non-broken bound."
msgstr ""
-#: hairpin.cc:256
+#: hairpin.cc:257
msgid "decrescendo too small"
msgstr ""
"include-string instead."
msgstr ""
-#: lily-parser.cc:107
+#: lily-parser.cc:109
msgid "Parsing..."
msgstr ""
msgid "octave check failed; expected \"%s\", found: \"%s\""
msgstr ""
-#: music.cc:219
-msgid "(normalized pitch)"
-msgstr ""
-
-#: music.cc:223
-#, c-format
-msgid "Transposing %s by %s makes alteration larger than double"
-msgstr ""
-
#: new-fingering-engraver.cc:113
msgid "cannot add text scripts to individual note heads"
msgstr ""
msgid "NoteEvent without pitch"
msgstr ""
-#: open-type-font.cc:45
+#: open-type-font.cc:46
#, c-format
msgid "cannot allocate %lu bytes"
msgstr ""
-#: open-type-font.cc:49
+#: open-type-font.cc:50
#, c-format
msgid "cannot load font table: %s"
msgstr ""
-#: open-type-font.cc:54
+#: open-type-font.cc:55
#, c-format
msgid "FreeType error: %s"
msgstr ""
-#: open-type-font.cc:111
+#: open-type-font.cc:112
#, c-format
msgid "unsupported font format: %s"
msgstr ""
-#: open-type-font.cc:113
+#: open-type-font.cc:114
#, c-format
msgid "error reading font file %s: %s"
msgstr ""
-#: open-type-font.cc:188
+#: open-type-font.cc:189
#, c-format
msgid "FT_Get_Glyph_Name () Freetype error: %s"
msgstr ""
-#: open-type-font.cc:336 pango-font.cc:256
+#: open-type-font.cc:337 pango-font.cc:257
#, c-format
msgid "FT_Get_Glyph_Name () error: %s"
msgstr ""
msgid "Finding the ideal number of pages..."
msgstr ""
-#: optimal-page-breaking.cc:92
+#: optimal-page-breaking.cc:94
msgid ""
"could not satisfy systems-per-page and page-count at the same time, ignoring "
"systems-per-page"
msgstr ""
-#: optimal-page-breaking.cc:112
+#: optimal-page-breaking.cc:114
msgid "Fitting music on 1 page..."
msgstr ""
-#: optimal-page-breaking.cc:114
+#: optimal-page-breaking.cc:116
#, c-format
msgid "Fitting music on %d pages..."
msgstr ""
-#: optimal-page-breaking.cc:116
+#: optimal-page-breaking.cc:118
#, c-format
msgid "Fitting music on %d or %d pages..."
msgstr ""
-#: optimal-page-breaking.cc:126 optimal-page-breaking.cc:179
+#: optimal-page-breaking.cc:128 optimal-page-breaking.cc:181
#, c-format
msgid "trying %d systems"
msgstr ""
-#: optimal-page-breaking.cc:145 optimal-page-breaking.cc:207
+#: optimal-page-breaking.cc:147 optimal-page-breaking.cc:209
#, c-format
msgid "best score for this sys-count: %f"
msgstr ""
-#: optimal-page-breaking.cc:214 page-turn-page-breaking.cc:248
+#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248
#: paper-score.cc:162
msgid "Drawing systems..."
msgstr ""
"values"
msgstr ""
-#: page-breaking.cc:277
+#: page-breaking.cc:276
msgid ""
"ignoring min-systems-per-page and max-systems-per-page because systems-per-"
"page was set"
msgstr ""
-#: page-breaking.cc:282
+#: page-breaking.cc:281
msgid ""
"min-systems-per-page is larger than max-systems-per-page, ignoring both "
"values"
msgstr ""
+#: page-breaking.cc:636
+#, c-format
+msgid "page %d has been compressed"
+msgstr ""
+
#: page-layout-problem.cc:402
msgid ""
"A page layout problem has been initiated that cannot accommodate footnotes."
msgstr ""
#: page-layout-problem.cc:731
-msgid ""
-"cannot fit music on page: ragged-spacing was requested, but page was "
-"compressed"
+msgid "ragged-bottom was specified, but page must be compressed"
msgstr ""
#: page-layout-problem.cc:734
#, c-format
-msgid "cannot fit music on page: overflow is %f"
-msgstr ""
-
-#: page-layout-problem.cc:736
-msgid "compressing music to fit"
+msgid "compressing over-full page by %.1f staff-spaces"
msgstr ""
#: page-layout-problem.cc:1199
msgid "\tprevious break: %d"
msgstr ""
-#: pango-font.cc:245
+#: pango-font.cc:246
#, c-format
msgid "no glyph for character U+%0X in font `%s'"
msgstr ""
-#: pango-font.cc:272
+#: pango-font.cc:273
#, c-format
msgid ""
"Glyph has no name, but font supports glyph naming.\n"
"Skipping glyph U+%0X, file %s"
msgstr ""
-#: pango-font.cc:322
+#: pango-font.cc:323
#, c-format
msgid "no PostScript font name for font `%s'"
msgstr ""
-#: pango-font.cc:372
+#: pango-font.cc:373
msgid "FreeType face has no PostScript font name"
msgstr ""
msgid "Preprocessing graphical objects..."
msgstr ""
-#: parse-scm.cc:121
+#: parse-scm.cc:128
msgid "GUILE signaled an error for the expression beginning here"
msgstr ""
-#: partial-iterator.cc:45
-msgid "trying to use \\partial after the start of a piece"
-msgstr ""
-
#: pdf-scheme.cc:65
#, c-format
msgid "Conversion of string `%s' to UTF-16be failed: %s"
msgid "unterminated percent repeat"
msgstr ""
-#: performance.cc:54
+#: performance.cc:55
msgid "Track..."
msgstr ""
-#: performance.cc:82
+#: performance.cc:90
#, c-format
msgid "MIDI output to `%s'..."
msgstr ""
msgid "no such internal option: %s"
msgstr ""
-#: property-iterator.cc:100
+#: property-iterator.cc:119
#, c-format
msgid "not a grob name, `%s'"
msgstr ""
msgid "remapping modulo 16"
msgstr ""
-#: stem-engraver.cc:110
+#: stem-engraver.cc:100
msgid "tremolo duration is too long"
msgstr ""
-#: stem-engraver.cc:162
+#: stem-engraver.cc:152
#, c-format
msgid "adding note head to incompatible stem (type = %d/%d)"
msgstr ""
-#: stem-engraver.cc:165
+#: stem-engraver.cc:155
msgid "maybe input should specify polyphonic voices"
msgstr ""
msgid "giving up"
msgstr ""
-#: parser.yy:158 parser.yy:172
-msgid "Too much lookahead"
-msgstr ""
-
-#: parser.yy:440 parser.yy:750 parser.yy:816
+#: parser.yy:463 parser.yy:847 parser.yy:928 parser.yy:1150
msgid "bad expression type"
msgstr ""
-#: parser.yy:648 parser.yy:1157
+#: parser.yy:759 parser.yy:1357 parser.yy:1402
msgid "not a context mod"
msgstr ""
-#: parser.yy:851
-msgid "score expected"
+#: parser.yy:954
+msgid "Missing music in \\score"
msgstr ""
-#: parser.yy:867
+#: parser.yy:991
msgid "\\paper cannot be used in \\score, use \\layout instead"
msgstr ""
-#: parser.yy:891
+#: parser.yy:1027
+msgid "Spurious expression in \\score"
+msgstr ""
+
+#: parser.yy:1057
msgid "need \\paper for paper block"
msgstr ""
-#: parser.yy:1031 parser.yy:1053
-msgid "unexpected post-event"
+#: parser.yy:1230
+msgid "music expected"
msgstr ""
-#: parser.yy:1061
-msgid "Ignoring non-music expression"
+#: parser.yy:1240 parser.yy:1274
+msgid "unexpected post-event"
msgstr ""
-#: parser.yy:1073 parser.yy:2494
-msgid "music expected"
+#: parser.yy:1282
+msgid "Ignoring non-music expression"
msgstr ""
-#: parser.yy:1372
+#: parser.yy:1500
msgid "not a symbol"
msgstr ""
-#: parser.yy:2182 parser.yy:2296 parser.yy:2309 parser.yy:2318
+#: parser.yy:2295 parser.yy:2409 parser.yy:2422 parser.yy:2431
msgid "bad grob property path"
msgstr ""
-#: parser.yy:2276
+#: parser.yy:2389
msgid "only \\consists and \\remove take non-string argument."
msgstr ""
-#: parser.yy:2337
+#: parser.yy:2450
msgid "bad context property path"
msgstr ""
-#: parser.yy:2438
+#: parser.yy:2551
msgid "simple string expected"
msgstr ""
-#: parser.yy:2456
+#: parser.yy:2569
msgid "symbol expected"
msgstr ""
-#: parser.yy:2606
+#: parser.yy:2705
msgid "not a rhythmic event"
msgstr ""
-#: parser.yy:2680
+#: parser.yy:2755
msgid "post-event expected"
msgstr ""
-#: parser.yy:2689 parser.yy:2694
+#: parser.yy:2764 parser.yy:2769
msgid "have to be in Lyric mode for lyrics"
msgstr ""
-#: parser.yy:2762
-msgid "expecting string as script definition"
+#: parser.yy:2845
+msgid "expecting string or post-event as script definition"
msgstr ""
-#: parser.yy:2852
+#: parser.yy:2944
msgid "not an articulation"
msgstr ""
-#: parser.yy:2924 parser.yy:2967
+#: parser.yy:3016 parser.yy:3059
msgid "not a duration"
msgstr ""
-#: parser.yy:2984
+#: parser.yy:3080
msgid "bass number expected"
msgstr ""
-#: parser.yy:3083
+#: parser.yy:3172
msgid "have to be in Note mode for notes"
msgstr ""
-#: parser.yy:3142
+#: parser.yy:3211
msgid "have to be in Chord mode for chords"
msgstr ""
-#: parser.yy:3157
+#: parser.yy:3254
msgid "markup outside of text script or \\lyricmode"
msgstr ""
-#: parser.yy:3162
+#: parser.yy:3259
msgid "unrecognized string, not in text script or \\lyricmode"
msgstr ""
-#: parser.yy:3379
+#: parser.yy:3411 parser.yy:3420
+msgid "not an unsigned integer"
+msgstr ""
+
+#: parser.yy:3494
msgid "not a markup"
msgstr ""
-#: lexer.ll:224
+#: lexer.ll:193
msgid "stray UTF-8 BOM encountered"
msgstr ""
-#: lexer.ll:227
+#: lexer.ll:196
msgid "Skipping UTF-8 BOM"
msgstr ""
-#: lexer.ll:279
+#: lexer.ll:248
#, c-format
msgid "Renaming input to: `%s'"
msgstr ""
-#: lexer.ll:296
+#: lexer.ll:265
msgid "quoted string expected after \\version"
msgstr ""
-#: lexer.ll:300
+#: lexer.ll:269
msgid "quoted string expected after \\sourcefilename"
msgstr ""
-#: lexer.ll:304
+#: lexer.ll:273
msgid "integer expected after \\sourcefileline"
msgstr ""
-#: lexer.ll:331
+#: lexer.ll:300
msgid "\\maininput not allowed outside init files"
msgstr ""
-#: lexer.ll:355
+#: lexer.ll:324
#, c-format
msgid "wrong or undefined identifier: `%s'"
msgstr ""
-#: lexer.ll:381
+#: lexer.ll:349
msgid "string expected after \\include"
msgstr ""
-#: lexer.ll:391
+#: lexer.ll:359
msgid "end quote missing"
msgstr ""
-#: lexer.ll:743
+#: lexer.ll:714
msgid "EOF found inside a comment"
msgstr ""
-#: lexer.ll:748
+#: lexer.ll:719
msgid "EOF found inside string"
msgstr ""
-#: lexer.ll:763
+#: lexer.ll:734
msgid "Unfinished main input"
msgstr ""
-#: lexer.ll:834
+#: lexer.ll:805
#, c-format
msgid "invalid character: `%s'"
msgstr ""
-#: lexer.ll:963
+#: lexer.ll:925
#, c-format
msgid "unknown escaped string: `\\%s'"
msgstr ""
-#: lexer.ll:983
+#: lexer.ll:945
#, c-format
msgid "undefined character or shorthand: %s"
msgstr ""
-#: lexer.ll:1275
+#: lexer.ll:1236
msgid "non-UTF-8 input"
msgstr ""
-#: lexer.ll:1319
+#: lexer.ll:1280
#, c-format
msgid "file too old: %s (oldest supported: %s)"
msgstr ""
-#: lexer.ll:1320
+#: lexer.ll:1281
msgid "consider updating the input with the convert-ly script"
msgstr ""
-#: lexer.ll:1326
+#: lexer.ll:1287
#, c-format
msgid "program too old: %s (file requires: %s)"
msgstr ""
+#: auto-beam.scm:147
+msgid "Beam end fits no pattern"
+msgstr ""
+
#: backend-library.scm:27
#, scheme-format
msgid "Invoking `~a'..."
msgid "no systems found in \\score markup, does it have a \\layout block?"
msgstr ""
-#: define-markup-commands.scm:2856
+#: define-markup-commands.scm:2907
#, scheme-format
msgid "Cannot find glyph ~a"
msgstr ""
-#: define-markup-commands.scm:3282
+#: define-markup-commands.scm:3333
#, scheme-format
msgid "no brace found for point size ~S "
msgstr ""
-#: define-markup-commands.scm:3283
+#: define-markup-commands.scm:3334
#, scheme-format
msgid "defaulting to ~S pt"
msgstr ""
-#: define-markup-commands.scm:3535
+#: define-markup-commands.scm:3586
#, scheme-format
msgid "not a valid duration string: ~a"
msgstr ""
-#: define-markup-commands.scm:3746
+#: define-markup-commands.scm:3797
#, scheme-format
msgid "not a valid duration string: ~a - ignoring"
msgstr ""
-#: define-music-types.scm:792
+#: define-music-callbacks.scm:114
#, scheme-format
-msgid "symbol expected: ~S"
+msgid "\\time in mid-measure at ~A"
msgstr ""
-#: define-music-types.scm:795
+#: define-music-types.scm:791
#, scheme-format
-msgid "cannot find music object: ~S"
+msgid "symbol expected: ~S"
msgstr ""
-#: define-music-types.scm:815
+#: define-music-types.scm:794
#, scheme-format
-msgid "bad make-music argument: ~S"
+msgid "cannot find music object: ~S"
msgstr ""
-#: define-music-types.scm:827
+#: define-music-types.scm:814
#, scheme-format
-msgid "unknown repeat type `~S'"
-msgstr ""
-
-#: define-music-types.scm:828
-msgid "See define-music-types.scm for supported repeats"
+msgid "bad make-music argument: ~S"
msgstr ""
#: define-note-names.scm:972
msgid "Could not find language `~a'. Ignoring."
msgstr ""
-#: document-backend.scm:132
+#: document-backend.scm:135
#, scheme-format
msgid "pair expected in doc ~s"
msgstr ""
-#: document-backend.scm:189
+#: document-backend.scm:192
#, scheme-format
msgid "cannot find interface for property: ~S"
msgstr ""
-#: document-backend.scm:199
+#: document-backend.scm:202
#, scheme-format
msgid "unknown Grob interface: ~S"
msgstr ""
msgid "Processing ~S..."
msgstr ""
-#: documentation-lib.scm:176
+#: documentation-lib.scm:175
#, scheme-format
msgid "Writing ~S..."
msgstr ""
-#: documentation-lib.scm:188
+#: documentation-lib.scm:187
#, scheme-format
msgid "cannot find description for property `~S' (~S)"
msgstr ""
-#: documentation-lib.scm:209
+#: documentation-lib.scm:208
#, scheme-format
msgid "cannot find description for property ~S (~S)"
msgstr ""
msgid "Writing ~a..."
msgstr ""
-#: framework-ps.scm:250
+#: framework-ps.scm:251
#, scheme-format
msgid "cannot embed ~S=~S"
msgstr ""
-#: framework-ps.scm:293
+#: framework-ps.scm:294
#, scheme-format
msgid "cannot extract file matching ~a from ~a"
msgstr ""
-#: framework-ps.scm:311
+#: framework-ps.scm:312
#, scheme-format
msgid "do not know how to embed ~S=~S"
msgstr ""
-#: framework-ps.scm:336
+#: framework-ps.scm:337
#, scheme-format
msgid "do not know how to embed font ~s ~s ~s"
msgstr ""
-#: framework-ps.scm:687
+#: framework-ps.scm:688
msgid ""
"\n"
"The PostScript backend does not support the\n"
msgid "Error in beam quanting. Expected ~S 0, found ~S."
msgstr ""
-#: lily-library.scm:333
+#: lily-library.scm:350
msgid "Music unsuitable for context-mod"
msgstr ""
-#: lily-library.scm:388
+#: lily-library.scm:405
#, scheme-format
msgid "Cannot find context-def \\~a"
msgstr ""
-#: lily-library.scm:404
+#: lily-library.scm:421
msgid "Music unsuitable for output-def"
msgstr ""
-#: lily-library.scm:884
+#: lily-library.scm:901
msgid ""
"Find the index between @var{start} and @var{end} (an integer)\n"
"which produces the closest match to @var{target-val} if\n"
"applied to function @var{getter}."
msgstr ""
-#: lily-library.scm:955
+#: lily-library.scm:995
#, scheme-format
msgid "unknown unit: ~S"
msgstr ""
-#: lily-library.scm:980
+#: lily-library.scm:1020
#, scheme-format
msgid "no \\version statement found, please add~afor future compatibility"
msgstr ""
msgid "define-session used after session start"
msgstr ""
-#: lily.scm:393
+#: lily.scm:399
msgid "Using (ice-9 curried-definitions) module\n"
msgstr ""
-#: lily.scm:396
+#: lily.scm:402
msgid "Guile 1.8\n"
msgstr ""
-#: lily.scm:455
+#: lily.scm:459
#, scheme-format
msgid "cannot find: ~A"
msgstr ""
-#: lily.scm:878
+#: lily.scm:884
msgid "Success: compilation successfully completed"
msgstr ""
-#: lily.scm:879
+#: lily.scm:885
msgid "Compilation completed with warnings or errors"
msgstr ""
-#: lily.scm:940
+#: lily.scm:946
#, scheme-format
msgid "job ~a terminated with signal: ~a"
msgstr ""
-#: lily.scm:943
+#: lily.scm:949
#, scheme-format
msgid ""
"logfile ~a (exit ~a):\n"
"~a"
msgstr ""
-#: lily.scm:965 lily.scm:1054
+#: lily.scm:971 lily.scm:1060
#, scheme-format
msgid "failed files: ~S"
msgstr ""
-#: lily.scm:1045
+#: lily.scm:1051
#, scheme-format
msgid "Redirecting output to ~a..."
msgstr ""
-#: lily.scm:1064 ps-to-png.scm:66
+#: lily.scm:1070 ps-to-png.scm:66
#, scheme-format
msgid "Invoking `~a'...\n"
msgstr ""
msgid "negative replication count; ignoring"
msgstr ""
-#: music-functions.scm:272
-msgid "More alternatives than repeats. Junking excess alternatives"
+#: music-functions.scm:311
+#, scheme-format
+msgid "invalid tremolo repeat count: ~a"
msgstr ""
-#: music-functions.scm:303
+#: music-functions.scm:340
#, scheme-format
-msgid "invalid tremolo repeat count: ~a"
+msgid "unknown repeat type `~S': must be volta, unfold, percent, or tremolo"
+msgstr ""
+
+#: music-functions.scm:344
+msgid "More alternatives than repeats. Junking excess alternatives"
msgstr ""
-#: music-functions.scm:459
+#: music-functions.scm:491
#, scheme-format
msgid "bad grob property path ~a"
msgstr ""
-#: music-functions.scm:753
+#: music-functions.scm:786
msgid "Bad chord repetition"
msgstr ""
-#: music-functions.scm:788
+#: music-functions.scm:888
#, scheme-format
msgid "music expected: ~S"
msgstr ""
-#: music-functions.scm:1144
+#: music-functions.scm:1244
#, scheme-format
msgid "cannot find quoted music: `~S'"
msgstr ""
-#: music-functions.scm:1282
+#: music-functions.scm:1383
msgid "Add @var{octave-shift} to the octave of @var{pitch}."
msgstr ""
-#: music-functions.scm:1342
+#: music-functions.scm:1446
#, scheme-format
msgid "Unknown octaveness type: ~S "
msgstr ""
-#: music-functions.scm:1343
+#: music-functions.scm:1447
msgid "Defaulting to 'any-octave."
msgstr ""
-#: music-functions.scm:1688
+#: music-functions.scm:1833
#, scheme-format
msgid "unknown accidental style: ~S"
msgstr ""
+#: music-functions.scm:2051
+msgid "Missing duration"
+msgstr ""
+
#: output-ps.scm:278 output-svg.scm:539
#, scheme-format
msgid "unknown line-cap-style: ~S"
msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
msgstr ""
-#: parser-clef.scm:164
+#: parser-clef.scm:176
#, scheme-format
msgid "unknown clef type `~a'"
msgstr ""
-#: parser-clef.scm:165
+#: parser-clef.scm:177
#, scheme-format
msgid "supported clefs: ~a"
msgstr ""
msgid "error in #{ ... #}"
msgstr ""
-#: part-combiner.scm:598
+#: part-combiner.scm:608
#, scheme-format
msgid "quoted music `~a' is empty"
msgstr ""
# Dutch translations for GNU Lilypond.
-# Copyright (C) 2013 Free Software Foundation, Inc.
+# Copyright (C) 2013--2014 Free Software Foundation, Inc.
# This file is distributed under the same license as the lilypond package.
#
# "Occasionally it troubles me just how far one strays
#: musicxml2ly.py:2576
msgid ""
-"Copyright (c) 2005--2012 by\n"
+"Copyright (c) 2005--2014 by\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
#.
#. source file of the GNU LilyPond music typesetter
#.
-#. (c) 1998--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+#. (c) 1998--2014 Han-Wen Nienhuys <hanwen@cs.uu.nl>
#. Jan Nieuwenhuizen <janneke@gnu.org>
#. ## subst:\(^\|[^._a-z]\)\(abspath\|identify\|warranty\|progress\|warning\|error\|exit\|getopt_args\|option_help_str\|options_help_str\|help\|setup_temp\|read_pipe\|system\|cleanup_temp\|strip_extension\|cp_to_dir\|mkdir_p\|init\) *(
#. ## replace:\1ly.\2 (
msgstr "Copyright © %s av"
#: lilylib.py:114
-msgid " 1998--2003"
+msgid " 1998--2014"
msgstr " 1998-2003"
#: lilylib.py:118
#.
#. source file of the GNU LilyPond music typesetter
#.
-#. (c) 1998--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+#. (c) 1998--2014 Han-Wen Nienhuys <hanwen@cs.uu.nl>
#. Jan Nieuwenhuizen <janneke@gnu.org>
#. TODO
#. use -f and -t for -s output
#.
#. source file of the GNU LilyPond music typesetter
#.
-#. (c) 1998--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+#. (c) 1998--2014 Han-Wen Nienhuys <hanwen@cs.uu.nl>
#. Jan Nieuwenhuizen <janneke@gnu.org>
#. This is the third incarnation of ly2dvi.
#.
#.
#. source file of the GNU LilyPond music typesetter
#.
-#. (c) 1998--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+#. (c) 1998--2014 Han-Wen Nienhuys <hanwen@cs.uu.nl>
#. Jan Nieuwenhuizen <janneke@gnu.org>
#. ###############################################################
#. Users of python modules should include this snippet.
-%!PS-Adobe-1.0: music-drawing-routines.ps
+%!PS-Adobe-2.0
%
% Functions for direct and embedded PostScript
0 setgray 0 setlinecap % Prepare graphics state
1 setlinewidth 0 setlinejoin
10 setmiterlimit [ ] 0 setdash newpath
- /languagelevel where % If level not equal to 1 then
- {pop languagelevel % set strokeadjust and
- 1 ne % overprint to their defaults.
- {false setstrokeadjust false setoverprint
- } if
- } if
+ false setoverprint
} bind def
/EndEPSF { %def
b4_Inc_state restore
} bind def
-/stroke_and_fill {
+/stroke_and_fill? {
+ {
gsave
- stroke
+ false setstrokeadjust
+ stroke
grestore
fill
+ }
+ {
+ stroke
+ }
+ ifelse
} bind def
/vector_add { % x1 y1 x2 y2 vector_add x1+x2 y1+y2
/draw_round_box % width height x y blot
{
- dup
- 0.0 gt {
- setlinewidth % w h x y
- rmoveto % w h
- 2 copy 0 ne exch 0 ne and
+ 0 max setlinewidth
+ matrix currentmatrix 5 1 roll
+ currentpoint translate newpath translate
+ 2 copy 0 min exch 0 min exch translate
+ abs exch abs exch
+ currentlinewidth 0 eq
+ { % straight corners
+ 2 copy 2 mul gt
+ { % horizontal
+ 0 1 index 2 div moveto
+ setlinewidth
+ 0 rlineto
+ 0 setlinecap
+ stroke
+ }
+ {
+ 2 copy exch 2 mul gt
+ { % vertical
+ 1 index 2 div 0 moveto
+ exch setlinewidth
+ 0 exch rlineto
+ 0 setlinecap
+ stroke
+ }
+ {
+ 0 0 4 2 roll rectfill
+ }
+ ifelse
+ }
+ ifelse
+ }
+ { % rounded corners
+ 2 copy 0 eq exch 0 eq or
+ { % line shape
+ 0 0 moveto
+ rlineto
+ 1 setlinecap
+ stroke
+ 0 setlinecap
+ }
+ { % full shape
+ currentstrokeadjust {
+ currentlinewidth 2 div
+ 0 0 2 index 180 270 arc
+ 2 index 0 2 index 270 360 arc
+ 3 copy 0 90 arc
+ 0 2 index 3 -1 roll 90 180 arc
+ closepath
+ 2 copy 2 mul gt
+ { % horizontal
+ 2 copy add currentlinewidth add 10 add % large enough
+ 0 1 index neg moveto
+ 2 index 1 index neg lineto
+ 2 index 1 index lineto
+ 0 exch lineto closepath
+ gsave clip newpath
+ 0 1 index 2 div moveto
+ currentlinewidth add setlinewidth
+ 0 rlineto
+ 2 setlinecap
+ stroke
+ grestore
+ }
{
- 0 setlinecap
- 1 setlinejoin
- currentpoint % w h x1 y1
- 4 2 roll % x1 y1 w h
- 4 copy
- rectfill
- rectstroke
- } {
- 1 setlinecap
- rlineto stroke
- } ifelse
- } {
- pop % w h x y
- rmoveto % w h
- currentpoint % w h x1 y1
- 4 2 roll % x1 y1 w h
- rectfill
- } ifelse
+ 2 copy exch 2 mul gt
+ { % vertical
+ 2 copy add currentlinewidth add 10 add % large enough
+ dup neg 0 moveto
+ dup 0 lineto
+ dup 2 index lineto
+ neg 1 index lineto closepath
+ gsave clip newpath
+ 1 index 2 div 0 moveto
+ exch currentlinewidth add setlinewidth
+ 0 exch rlineto
+ 2 setlinecap
+ stroke
+ grestore
+ }
+ {
+ pop pop
+ fill
+ }
+ ifelse
+ }
+ ifelse
+ newpath
+ }
+ {
+ 1 setlinejoin
+ 0 0 4 2 roll 4 copy rectstroke rectfill
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ setmatrix
} bind def
/draw_polygon % fill? x(n) y(n) x(n-1) y(n-1) ... x(0) y(0) n blot
rmoveto % x(0) y(0)
{ polygon_x polygon_y vector_add lineto } repeat % n times
closepath
- { %fill?
- stroke_and_fill
- }{
- stroke
- } ifelse
+ stroke_and_fill?
} bind def
/draw_circle % filled? radius thickness draw_circle
3 2 roll % f? x0 y0 r
dup 0 rmoveto
0 360 arc closepath
- { stroke_and_fill }
- { stroke }
- ifelse
+ stroke_and_fill?
} bind def
/draw_ellipse % filled? x-radius y-radius thickness draw_ellipse
1 0 rmoveto
1 0 360 arc closepath
savematrix setmatrix
- { stroke_and_fill}
- { stroke }
- ifelse
+ stroke_and_fill?
} bind def
/draw_partial_ellipse % filled connect x-radius y-radius startangle endangle thickness draw_partial_ellipse
connect {
startangle cos startangle sin moveto endangle cos endangle sin lineto }
if
- savematrix setmatrix filled { stroke_and_fill } { stroke } ifelse
+ savematrix setmatrix filled stroke_and_fill?
grestore
} bind def
{
setlinewidth % dx dy x1 y1
1 setlinecap
- 1 setlinejoin
rmoveto % dx dy
rlineto
stroke
/draw_dashed_line % dx dy thickness dashpattern offset draw_dashed_line
{
1 setlinecap
- 1 setlinejoin
setdash % dx dy thickness
setlinewidth %dx dy
rlineto
progress (_ ("Running `%s' on file `%s' to detect default page settings.\n")
% (global_options.latex_program, tmpfile))
- cmd = 'TEXINPUTS="%s:$TEXINPUTS" %s %s' \
- % (global_options.input_dir, global_options.latex_program, tmpfile)
+ cmd = '%s %s' % (global_options.latex_program, tmpfile)
debug ("Executing: %s\n" % cmd)
run_env = os.environ.copy()
run_env['LC_ALL'] = 'C'
+ run_env['TEXINPUTS'] = '%s:%s' % \
+ (global_options.input_dir, run_env.get('TEXINPUTS',""))
### unknown why this is necessary
universal_newlines = True
output_filename = os.path.join(output_dir, 'output.txt')
# call command
cmd += " > %s" % output_filename
+ oldtexinputs = os.environ.get ('TEXINPUTS')
+ os.environ['TEXINPUTS'] = run_env['TEXINPUTS']
returncode = os.system(cmd)
+ if oldtexinputs:
+ os.environ['TEXINPUTS'] = oldtexinputs
+ else:
+ del os.environ['TEXINPUTS']
parameter_string = open(output_filename).read()
if returncode != 0:
warning (_ ("Unable to auto-detect default settings:\n"))
str = re.sub ("New_dynamic_engraver", "Dynamic_engraver", str)
return str
+@rule ((2, 17, 97), r'''(make-relative (a b) b ...) -> make-relative (a b) #{ a b #}...''')
+def conv (str):
+ str = re.sub (r"(\(make-relative\s+\(\s*(([A-Za-z][-_A-Za-z0-9]*)" +
+ r"(?:\s+[A-Za-z][-_A-Za-z0-9]*)*)\s*\)\s*)\3(?=\s)",
+ r"\1(make-event-chord (list \2))", str)
+ str = re.sub (r"(\(make-relative\s+\(\s*([A-Za-z][-_A-Za-z0-9]*" +
+ r"(?:\s+([A-Za-z][-_A-Za-z0-9]*))+)\s*\)\s*)\3(?=\s)",
+ r"\1(make-sequential-music (list \2))", str)
+ return str
+
+@rule ((2, 18, 0),
+ _ ("bump version for release"))
+def conv (str):
+ return str
+
+@rule ((2, 19, 2), r"\lyricsto \new/\context/... -> \new/\context/... \lyricsto")
+def conv (str):
+ word=r'(?:#?"[^"]*"|\b' + wordsyntax + r'\b)'
+ str = re.sub (r"(\\lyricsto\s*" + word + r"\s*)(\\(?:new|context)\s*" + word
+ + r"(?:\s*=\s*" + word + r")?\s*)",
+ r"\2\1", str)
+ str = re.sub (r"(\\lyricsto\s*" + word + r"\s*)\\lyricmode\b\s*",
+ r"\1", str)
+ str = re.sub (r"(\\lyricsto\s*" + word + r"\s*)\\lyrics\b\s*",
+ r"\\new Lyrics \1", str)
+ str = re.sub (r'\\lyricmode\s*(\\lyricsto\b)', r"\1", str)
+ return str
+
+@rule ((2, 19, 7), "keySignature -> keyAlterations")
+def conv(str):
+ str = re.sub (r'\bkeySignature\b', 'keyAlterations', str)
+ str = re.sub (r'\blastKeySignature\b', 'lastKeyAlterations', str)
+ str = re.sub (r'\blocalKeySignature\b', 'localAlterations', str)
+ return str
+
# Guidelines to write rules (please keep this at the end of this file)
#
# - keep at most one rule per version; if several conversions should be done,
# This file is part of LilyPond, the GNU music typesetter.
#
-# Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+# Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
# Jan Nieuwenhuizen <janneke@gnu.org>
#
# LilyPond is free software: you can redistribute it and/or modify
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2001--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
elif self.non_standard_alterations:
alterations = [self.format_non_standard_alteration (a) for
a in self.non_standard_alterations]
- return "\\set Staff.keySignature = #`(%s)" % string.join (alterations, " ")
+ return "\\set Staff.keyAlterations = #`(%s)" % string.join (alterations, " ")
else:
return ''
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
(let ((value (ly:context-property context name)))
(if (not (null? value)) value default)))
- (define (beaming<? a b)
- (ly:moment<? (fraction->moment (car a))
- (fraction->moment (car b))))
-
- (define (ending-moments group-list start-beat base-moment)
+ (define (ending-moments group-list start-beat base-length)
(if (null? group-list)
'()
(let ((new-start (+ start-beat (car group-list))))
- (cons (ly:moment-mul (ly:make-moment new-start 1) base-moment)
- (ending-moments (cdr group-list) new-start base-moment)))))
+ (cons (* new-start base-length)
+ (ending-moments (cdr group-list) new-start base-length)))))
- (define (larger-setting test-beam sorted-alist)
- (if (null? sorted-alist)
- '()
- (let* ((first-key (caar sorted-alist))
- (first-moment (fraction->moment first-key)))
- (if (moment<=? test-beam first-moment)
- (car sorted-alist)
- (larger-setting test-beam (cdr sorted-alist))))))
+ (define (larger-setting type sorted-alist)
+ (assoc type sorted-alist <=))
- (define (beat-end? moment beat-structure)
- (pair? (member moment beat-structure))) ;; member returns a list if found, not #t
+ (define (beat-end? moment beat-endings)
+ (pair? (memv moment beat-endings))) ;; member returns a list if found, not #t
;; Start of actual auto-beam test routine
;;
;;
;; Don't start auto beams on grace notes
- (if (and (!= (ly:moment-grace-numerator (ly:context-now context)) 0)
- (= dir START))
- #f
- (let* ((base-moment (get 'baseMoment (ly:make-moment 1 4)))
- (measure-length (get 'measureLength (ly:make-moment 1 1)))
+ (and (or (zero? (ly:moment-grace (ly:context-now context)))
+ (!= dir START))
+ (let* ((base-length (cond ((get 'baseMoment #f) => ly:moment-main)
+ (else 1/4)))
+ (measure-length (cond ((get 'measureLength #f) => ly:moment-main)
+ (else 1)))
(time-signature-fraction
(get 'timeSignatureFraction '(4 . 4)))
(beat-structure (get 'beatStructure '(1 1 1 1)))
- (beat-endings (ending-moments beat-structure 0 base-moment))
- (exceptions (sort (assoc-get 'end
- (get 'beamExceptions '())
- '())
- beaming<?))
+ (beat-endings (ending-moments beat-structure 0 base-length))
+ (exceptions (sort (map
+ (lambda (a)
+ (if (pair? (car a))
+ (cons (/ (caar a) (cdar a))
+ (cdr a))
+ a))
+ (assoc-get 'end
+ (get 'beamExceptions '())
+ '()))
+ car<))
(function (if (= dir START) 'begin 'end))
(beam-half-measure (get 'beamHalfMeasure #t))
- (type (moment->fraction test-beam))
- (non-grace (ly:make-moment
- (ly:moment-main-numerator measure-pos)
- (ly:moment-main-denominator measure-pos)))
- (pos (if (ly:moment<? non-grace ZERO-MOMENT)
- (ly:moment-add measure-length non-grace)
+ (type (ly:moment-main test-beam))
+ (non-grace (ly:moment-main measure-pos))
+ (pos (if (negative? non-grace)
+ (+ measure-length non-grace)
non-grace))
(type-grouping (assoc-get type exceptions '()))
- (default-rule (if (null? type-grouping)
- (larger-setting test-beam exceptions)
- '()))
- (default-grouping (if (pair? default-rule)
- (cdr default-rule)
- '()))
- (default-beat-length (if (pair? default-rule)
- (car default-rule)
- '()))
+ (default-rule (and (null? type-grouping)
+ (larger-setting type exceptions)))
+ (default-grouping (and default-rule (cdr default-rule)))
+ (default-beat-length (and default-rule (car default-rule)))
(exception-grouping (if (null? type-grouping)
default-grouping
type-grouping))
(grouping-moment (if (null? type-grouping)
- (fraction->moment default-beat-length)
- test-beam))
- (exception-moments (ending-moments
- exception-grouping 0 grouping-moment)))
+ default-beat-length
+ type))
+ (exception-moments (and exception-grouping
+ (ending-moments
+ exception-grouping 0 grouping-moment))))
(if (= dir START)
;; Start rules -- #t if beam is allowed to start
(or beam-half-measure ;; Start anywhere, but option for mid-measure
- (not (equal? (ly:moment-add pos pos) measure-length))
+ (not (= (+ pos pos) measure-length))
(not (= 3 (car time-signature-fraction))) ;; in triple meter
- (not (= (cdr type) ;; when the beamed note is 1/6 of a measure
+ (not (= (denominator type) ;; when the beamed note is 1/6 of a measure
(* 2 (cdr time-signature-fraction)))))
;; End rules -- #t if beam is required to end
- (or (= (ly:moment-main-numerator pos) 0) ;; end at measure beginning
- (if (null? exception-grouping)
- (beat-end? pos beat-endings) ;; no exception, so check beat ending
- (member pos exception-moments))))))) ;; check exception rule
+ (or (zero? pos) ;; end at measure beginning
+ (if exception-grouping
+ (beat-end? pos exception-moments) ;; check exception rule
+ (beat-end? pos beat-endings))))))) ;; no exception, so check beat ending
+
+
+(define-public (extract-beam-exceptions music)
+ "Creates a value useful for setting @code{beamExceptions} from @var{music}."
+ (define (car> a b) (> (car a) (car b)))
+ (define (beatify! lst)
+ ;; takes a collection of end points, sorts them, and returns the
+ ;; non-zero differences as beaming pattern
+ (let ((s (sort-list! lst <)))
+ (remove! zero?
+ (map - s (cons 0 s)))))
+ (let ((res '()))
+ (let analyze ((m (unfold-repeats-fully (event-chord-reduce music)))
+ (pos 0))
+ ;; enter beam ends from m starting at pos into res, return new pos
+ (cond ((music-is-of-type? m 'bar-check) 0)
+ ((music-is-of-type? m 'simultaneous-music)
+ (fold (lambda (m prev) (max (analyze m pos) prev))
+ pos
+ (ly:music-property m 'elements)))
+ ((not (music-is-of-type? m 'rhythmic-event))
+ (let ((elt (ly:music-property m 'element)))
+ (fold analyze
+ (if (ly:music? elt) (analyze elt pos) pos)
+ (ly:music-property m 'elements))))
+ ;; Have rhythmic event.
+ ((any
+ (lambda (art)
+ (and (music-is-of-type? art 'beam-event)
+ (= (ly:music-property art 'span-direction START) STOP)))
+ (ly:music-property m 'articulations))
+ (let* ((len (duration-length (ly:music-property m 'duration)))
+ (pos (+ pos len))
+ (ass (assv len res)))
+ (cond ((or (zero? len) (not (integer? (/ pos len))))
+ (ly:warning m (_ "Beam end fits no pattern")))
+ (ass
+ (set-cdr! ass (cons (/ pos len) (cdr ass))))
+ (else
+ (set! res (cons (list len (/ pos len)) res))))
+ pos))
+ (else
+ (+ pos (duration-length (ly:music-property m 'duration))))))
+
+ ;; takes the output from the loop, generates actual beam exceptions
+ (list
+ (cons 'end
+ (map!
+ (lambda (l)
+ (cons (car l)
+ (beatify! (cdr l))))
+ (sort-list! res car>))))))
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2005--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2005--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2009--2012 Marc Hohl <marc@hohlart.de>
+;;;; Copyright (C) 2009--2014 Marc Hohl <marc@hohlart.de>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
line-thickness
1/2))
(bar-array (ly:grob-object grob 'bars))
- (bar-array-length (ly:grob-array-length bar-array))
;; the bar-array starts with the uppermost bar line grob that is
;; covered by the left edge of the volta bracket; more (span)
;; bar line grobs from other staves may follow
- (left-bar-line (if (> bar-array-length 0)
- (ly:grob-array-ref bar-array 0)
- '()))
+ (left-bar-line (and (ly:grob-array? bar-array)
+ (positive? (ly:grob-array-length bar-array))
+ (ly:grob-array-ref bar-array 0)))
;; we need the vertical-axis-group-index of the left-bar-line
;; to find the corresponding right-bar-line
- (vag-index (if (null? left-bar-line)
- -1
- (ly:grob-get-vertical-axis-group-index left-bar-line)))
+ (vag-index (and left-bar-line
+ (ly:grob-get-vertical-axis-group-index left-bar-line)))
;; the bar line corresponding to the right edge of the volta bracket
;; is the last entry with the same vag-index, so we transform the array to a list,
- ;; reverse it and search for suitable entries:
- (filtered-grobs (filter (lambda (e)
- (eq? (ly:grob-get-vertical-axis-group-index e)
- vag-index))
- (reverse (ly:grob-array->list bar-array))))
- ;; we need the first one (if any)
- (right-bar-line (if (pair? filtered-grobs)
- (car filtered-grobs)
- '()))
+ ;; reverse it and search for the first suitable entry from
+ ;; the back
+ (right-bar-line (and left-bar-line
+ (find (lambda (e)
+ (eqv? (ly:grob-get-vertical-axis-group-index e)
+ vag-index))
+ (reverse (ly:grob-array->list bar-array)))))
;; the left-bar-line may be a #'<Grob Item >,
;; so we add "" as a fallback return value
- (left-bar-glyph-name (if (null? left-bar-line)
- (string annotation-char)
- (ly:grob-property left-bar-line 'glyph-name "")))
- (right-bar-glyph-name (if (null? right-bar-line)
- (string annotation-char)
- (ly:grob-property right-bar-line 'glyph-name "")))
- (left-bar-broken (or (null? left-bar-line)
- (not (zero? (ly:item-break-dir left-bar-line)))))
- (right-bar-broken (or (null? right-bar-line)
- (not (zero? (ly:item-break-dir right-bar-line)))))
+ (left-bar-glyph-name (if left-bar-line
+ (ly:grob-property left-bar-line 'glyph-name "")
+ (string annotation-char)))
+ (right-bar-glyph-name (if right-bar-line
+ (ly:grob-property right-bar-line 'glyph-name "")
+ (string annotation-char)))
+ ;; This is the original logic. It flags left-bar-broken if
+ ;; there is no left-bar-line. That seems strange.
+ (left-bar-broken (not (and left-bar-line
+ (zero? (ly:item-break-dir left-bar-line)))))
+ (right-bar-broken (not (and right-bar-line
+ (zero? (ly:item-break-dir
+ right-bar-line)))))
+ ;; Revert to current grob for getting layout info if no
+ ;; left-bar-line available
(left-span-stencil-extent (ly:stencil-extent
(span-bar::compound-bar-line
- left-bar-line
+ (or left-bar-line grob)
left-bar-glyph-name
dummy-extent)
X))
(right-span-stencil-extent (ly:stencil-extent
(span-bar::compound-bar-line
- right-bar-line
+ (or right-bar-line grob)
right-bar-glyph-name
dummy-extent)
X))
(- (max 0 (interval-end left-span-stencil-extent))
(max 0 (interval-end (ly:stencil-extent
(bar-line::compound-bar-line
- left-bar-line
+ (or left-bar-line grob)
left-bar-glyph-name
dummy-extent)
X)))
(define-bar-line ":|." ":|." #f " |.")
(define-bar-line ".|:" "|" ".|:" ".|")
(define-bar-line "[|:" "|" "[|:" " |")
-(define-bar-line ":|]" ":|]" #f " |")
+(define-bar-line ":|]" ":|]" #f " | ")
(define-bar-line ":|][|:" ":|]" "[|:" " | |")
(define-bar-line ".|:-||" "||" ".|:" ".|")
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2010--2012 Carl D. Sorensen <c_sorensen@byu.edu>
+;;;; Copyright (C) 2010--2014 Carl D. Sorensen <c_sorensen@byu.edu>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
(and (pair? x)
(index? (car x)) (index? (cdr x))))
+(define-public (rational-or-procedure? x)
+ (or
+ (and (rational? x) (exact? x))
+ (procedure? x)))
+
(define-public (number-or-grob? x)
(or (ly:grob? x) (number? x)))
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2003--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2003--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+;;;; Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
numbers. Can be @code{numbers} for going back to the same number or
@code{numbers-with-letters} for going back to the same number with letter
suffixes. No setting will not go back in measure-number time.")
+ (alternativeRestores ,symbol-list? "Timing variables that are
+restored to their value at the end of the first alternative in
+subsequent alternatives.")
(associatedVoice ,string? "Name of the @code{Voice} that has the
melody for this @code{Lyrics} line.")
(autoAccidentals ,list? "List of different ways to typeset an
symbol go, measured in half staff spaces from the center of the
staff.")
(completionBusy ,boolean? "Whether a completion-note head is playing.")
+ (completionFactor ,rational-or-procedure?
+"When @code{Completion_heads_engraver} and
+@code{Completion_rest_engraver} need to split a note or rest with a
+scaled duration, such as @code{c2*3}, this specifies the scale factor
+to use for the newly-split notes and rests created by the engraver.
+
+If @code{#f}, the completion engraver uses the scale-factor of
+each duration being split.
+
+If set to a callback procedure, that procedure is called with the
+context of the completion engraver, and the duration to be split.")
(completionUnit ,ly:moment? "Sub-bar unit of completion.")
(connectArpeggios ,boolean? "If set, connect arpeggios across
piano staff.")
@code{(@var{step} . @var{alter})},
where @var{step} is a number from 0 to@tie{}6 and
@var{alter} from -2 (sharp) to 2 (flat).")
- (keySignature ,list? "The current key signature. This is an alist
+ (keyAlterations ,list? "The current key signature. This is an alist
containing @code{(@var{step} . @var{alter})} or
@code{((@var{octave} . @var{step}) . @var{alter})}, where @var{step}
is a number in the range 0 to@tie{}6 and @var{alter} a fraction,
denoting alteration. For alterations, use symbols, e.g.
-@code{keySignature = #`((6 . ,FLAT))}.")
+@code{keyAlterations = #`((6 . ,FLAT))}.")
(lyricMelismaAlignment ,number? "Alignment to use for a melisma syllable.")
where the values@tie{}@w{-1} (@code{#LEFT}),@tie{}0 (@code{#CENTER})
and@tie{}1 (@code{#RIGHT}) correspond to hard left, center, and hard
right, respectively.")
- (midiReverbLevel ,number? "Reverb effect level for the MIDI channel
-associated with the current context. Ranges from 0 to@tie{}1
-(0=off,@tie{}1=full effect).")
- (midiChorusLevel ,number? "Chorus effect level for the MIDI channel
-associated with the current context. Ranges from 0 to@tie{}1
-(0=off,@tie{}1=full effect).")
+ (midiReverbLevel ,number? "Reverb effect level for the MIDI
+channel associated with the current context. Ranges from 0
+to@tie{}1 (0=off,@tie{}1=full effect).")
+ (midiChorusLevel ,number? "Chorus effect level for the MIDI
+channel associated with the current context. Ranges from 0
+to@tie{}1 (0=off,@tie{}1=full effect).")
(minimumFret ,number? "The tablature auto string-selecting
mechanism selects the highest string with a fret at least
@code{minimumFret}.")
(trebleStaffProperties ,list? "An alist of property settings to
apply for the up staff of @code{PianoStaff}. Used by
@code{\\autochange}.")
- (tremoloFlags ,integer? "The number of tremolo flags to add if no
-number is specified.")
(tupletFullLength ,boolean? "If set, the tuplet is printed up to
the start of the next note.")
(tupletFullLengthNote ,boolean? "If set, end at the next note,
@code{CommandColumn} contains items that will affect spacing.")
- (lastKeySignature ,list? "Last key signature before a key
+ (lastChord ,markup? "Last chord, used for detecting chord changes.")
+ (lastKeyAlterations ,list? "Last key signature before a key
signature change.")
- (localKeySignature ,list? "The key signature at this point in the
-measure. The format is the same as for @code{keySignature}, but can
+ (localAlterations ,list? "The key signature at this point in the
+measure. The format is the same as for @code{keyAlterations}, but can
also contain @code{((@var{octave} . @var{name}) . (@var{alter}
@var{barnumber} . @var{measureposition}))} pairs.")
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2005--2012 Erik Sandberg <mandolaerik@gmail.com>
+;;;; Copyright (C) 2005--2014 Erik Sandberg <mandolaerik@gmail.com>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
"Kill this grob after the line breaking process."
'())
+(ly:add-interface
+ 'outside-staff-axis-group-interface
+ "A vertical axis group on which outside-staff skyline calculations are done."
+ '(outside-staff-placement-directive vertical-skyline-elements))
+
+(ly:add-interface
+ 'outside-staff-interface
+ "A grob that could be placed outside staff."
+ '(outside-staff-horizontal-padding outside-staff-padding outside-staff-priority))
+
(ly:add-interface
'parentheses-interface
"Parentheses for other objects."
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;
;;; c
;;;
+ (chord-dots-limit ,integer? "Limits the column of dots
+on each chord to the height of the chord plus
+@code{chord-dots-limit} staff-positions.")
(circled-tip ,boolean? "Put a circle at start/@/end of
hairpins (al/@/del niente).")
(clip-edges ,boolean? "Allow outward pointing beamlets at the
edges of beams?")
(collapse-height ,ly:dimension? "Minimum height of system start
delimiter. If equal or smaller, the bracket/@/brace/@/line is removed.")
- (collision-bias ,number? "Number determining how much to favor the
-left (negative) or right (positive). Larger absolute values in either
-direction will push a collision in this direction.")
(collision-interfaces ,list? "A list of interfaces for which
automatic beam-collision resolution is run.")
- (collision-padding ,number? "Amount of padding to apply after
-a collision is detected via the self-alignment-interface.")
(collision-voice-only ,boolean? "Does automatic beam collsion apply
only to the voice in which the beam was created?")
(color ,color? "The color of this grob.")
@q{normal}@tie{}size. @code{0}@tie{}is style-sheet's normal size,
@w{@code{-1}} is smaller, @code{+1} is bigger. Each step of@tie{}1 is
approximately 12% larger; 6@tie{}steps are exactly a factor@tie{}2
-larger. Fractional values are allowed.")
+larger. If the context property @code{fontSize} is set, its value is
+added to this before the glyph is printed. Fractional values are
+allowed.")
(footnote ,boolean? "Should this be a footnote or in-note?")
(footnote-music ,ly:music? "Music creating a footnote.")
(footnote-text ,markup? "A footnote for the grob.")
(knee-spacing-correction ,number? "Factor for the optical
correction amount for kneed beams. Set between @code{0} for no
correction and @code{1} for full correction.")
+ (knee-to-beam ,boolean? "Determines whether a tuplet number
+will be positioned next to a kneed beam.")
;;;
(shorten-pair ,number-pair? "The lengths to shorten a
text-spanner on both sides, for example a pedal bracket. Positive
values shorten the text-spanner, while negative values lengthen it.")
- (shortest-duration-space ,ly:dimension? "Start with this much
-space for the shortest duration. This is expressed in
-@code{spacing-increment} as unit. See also
+ (shortest-duration-space ,number? "Start with this multiple of
+@code{spacing-increment} space for the shortest duration. See also
@rinternals{spacing-spanner-interface}.")
(shortest-playing-duration ,ly:moment? "The duration of the
shortest note playing here.")
clef change followed by a bar line, for example, this means that we
will try to space the non-musical column as though the clef is not
there.")
- (spacing-increment ,number? "Add this much space for a doubled
-duration. Typically, the width of a note head. See also
+ (spacing-increment ,ly:dimension? "The unit of length for
+note-spacing. Typically, the width of a note head. See also
@rinternals{spacing-spanner-interface}.")
(spacing-pair ,pair? "A pair of alignment symbols which set an object's
spacing relative to its left and right @code{BreakAlignment}s.
;;; u
;;;
(uniform-stretching ,boolean? "If set, items stretch
-proportionally to their durations. This looks better in complex
-polyphonic patterns.")
+proportionally to their natural separation based on durations.
+This looks better in complex polyphonic patterns.")
(used ,boolean? "If set, this spacing column is kept in the
spacing problem.")
(usable-duration-logs ,list? "List of @code{duration-log}s that
;;;
;;; x
;;;
- (X-extent ,number-pair? "Hard coded extent in X@tie{}direction.")
+ (X-extent ,number-pair? "Extent (size) in the X@tie{}direction,
+measured in staff-space units, relative to object's reference point.")
(X-offset ,number? "The horizontal amount that this object is
moved relative to its X-parent.")
(X-positions ,number-pair? "Pair of X staff coordinates of a spanner
;;;
;;; y
;;;
- (Y-extent ,number-pair? "Hard coded extent in Y@tie{}direction.")
+ (Y-extent ,number-pair? "Extent (size) in the Y@tie{}direction,
+measured in staff-space units, relative to object's reference point.")
(Y-offset ,number? "The vertical amount that this object is moved
relative to its Y-parent.")
(note-heads ,ly:grob-array? "An array of note head grobs.")
(pedal-text ,ly:grob? "A pointer to the text of a mixed-style piano
pedal.")
- (potential-X-colliding-grobs ,ly:grob-array? "Grobs that can potentially
-collide with a self-aligned grob on the X-axis.")
(pure-relevant-grobs ,ly:grob-array? "All the grobs (items and spanners)
that are relevant for finding the @code{pure-Y-extent}")
(pure-relevant-items ,ly:grob-array? "A subset of elements that are
(vertical-skyline-elements ,ly:grob-array? "An array of grobs
used to create vertical skylines.")
- (X-colliding-grobs ,ly:grob-array? "Grobs that can collide
-with a self-aligned grob on the X-axis.")
- (Y-colliding-grobs ,ly:grob-array? "Grobs that can collide
-with a self-aligned grob on the Y-axis.")
(X-common ,ly:grob? "Common reference point for axis group.")
(Y-common ,ly:grob? "See @code{X-common}.")
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
(interfaces . (accidental-interface
accidental-suggestion-interface
font-interface
+ outside-staff-interface
script-interface
self-alignment-interface
side-position-interface))))))
(Arpeggio
. (
- (cross-staff . ,ly:arpeggio::calc-cross-staff)
+ (cross-staff . ,ly:arpeggio::calc-cross-staff)
(direction . ,LEFT)
(padding . 0.5)
(positions . ,ly:arpeggio::calc-positions)
((class . Item)
(interfaces . (break-alignable-interface
font-interface
+ outside-staff-interface
self-alignment-interface
side-position-interface
text-interface))))))
(object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
(interfaces . (axis-group-interface
+ outside-staff-interface
side-position-interface))))))
(BassFigureBracket
(meta . ((class . Spanner)
(object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
- (interfaces . (axis-group-interface))))))
+ (interfaces . (axis-group-interface
+ outside-staff-axis-group-interface))))))
(Beam
(interfaces . (break-aligned-interface
breathing-sign-interface
font-interface
+ outside-staff-interface
text-interface))))))
(ChordName
(meta . ((class . Item)
(interfaces . (chord-name-interface
font-interface
+ outside-staff-interface
rhythmic-grob-interface
text-interface))))))
(meta . ((class . Item)
(interfaces . (clef-modifier-interface
font-interface
+ outside-staff-interface
self-alignment-interface
side-position-interface
text-interface))))))
(Y-extent . ,grob::always-Y-extent-from-stencil)
(meta . ((class . Item)
(interfaces . (font-interface
+ outside-staff-interface
side-position-interface
text-interface
text-script-interface))))))
(DotColumn
. (
(axes . (,X))
+ (chord-dots-limit . 3)
(direction . ,RIGHT)
(positioning-done . ,ly:dot-column::calc-positioning-done)
(X-extent . ,ly:axis-group-interface::width)
(Y-extent . ,grob::always-Y-extent-from-stencil)
(meta . ((class . Item)
(interfaces . (font-interface
+ outside-staff-interface
percent-repeat-interface
percent-repeat-item-interface
self-alignment-interface
(thickness . 0.48)
(meta . ((class . Item)
(interfaces . (font-interface
+ outside-staff-interface
percent-repeat-interface
percent-repeat-item-interface
rhythmic-grob-interface))))))
(interfaces . (axis-group-interface
dynamic-interface
dynamic-line-spanner-interface
+ outside-staff-interface
side-position-interface))))))
(DynamicText
;; todo.
- (collision-bias . -2.0)
- (collision-padding . 0.5)
(direction . ,ly:script-interface::calc-direction)
(extra-spacing-width . (+inf.0 . -inf.0))
(font-encoding . fetaText)
(interfaces . (dynamic-interface
dynamic-text-interface
font-interface
+ outside-staff-interface
script-interface
self-alignment-interface
text-interface))))))
font-interface
line-interface
line-spanner-interface
+ ;for now, LilyPond never will typeset
+ ;these without a DynamicLineSpanner
+ ;as their controlling element
+ ;so, they do not need the
+ ;outside-staff-interface
spanner-interface
text-interface))))))
(meta . ((class . Item)
(interfaces . (finger-interface
font-interface
+ outside-staff-interface
self-alignment-interface
side-position-interface
text-interface
(interfaces . (chord-name-interface
font-interface
fret-diagram-interface
+ outside-staff-interface
rhythmic-grob-interface))))))
(interfaces . (dynamic-interface
hairpin-interface
line-interface
+ outside-staff-interface
self-alignment-interface
spanner-interface))))))
(meta . ((class . Spanner)
(interfaces . (horizontal-bracket-interface
line-interface
+ outside-staff-interface
side-position-interface
spanner-interface))))))
(Y-offset . ,side-position-interface::y-aligned-side)
(meta . ((class . Item)
(interfaces . (font-interface
+ outside-staff-interface
self-alignment-interface
side-position-interface
text-interface))))))
. (
(break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
(break-align-symbol . left-edge)
- (break-visibility . ,center-invisible)
+ (break-visibility . ,begin-of-line-visible)
(non-musical . #t)
- (extra-spacing-height . (+inf.0 . -inf.0))
(space-alist . (
(ambitus . (extra-space . 2.0))
(breathing-sign . (minimum-space . 0.0))
(right-edge . (extra-space . 0.0))
))
(X-extent . (0 . 0))
+ (Y-extent . (0 . 0))
(meta . ((class . Item)
(interfaces . (break-aligned-interface))))))
(meta . ((class . Spanner)
(interfaces . (font-interface
measure-counter-interface
+ outside-staff-interface
self-alignment-interface
side-position-interface
text-interface))))))
(Y-offset . ,side-position-interface::y-aligned-side)
(meta . ((class . Spanner)
(interfaces . (measure-grouping-interface
+ outside-staff-interface
side-position-interface))))))
(MelodyItem
(interfaces . (break-alignable-interface
font-interface
metronome-mark-interface
+ outside-staff-interface
self-alignment-interface
side-position-interface
text-interface))))))
(meta . ((class . Spanner)
(interfaces . (font-interface
multi-measure-interface
+ outside-staff-interface
multi-measure-rest-interface
rest-interface
staff-symbol-referencer-interface))))))
(meta . ((class . Spanner)
(interfaces . (font-interface
multi-measure-interface
+ outside-staff-interface
self-alignment-interface
side-position-interface
text-interface))))))
(meta . ((class . Spanner)
(interfaces . (font-interface
multi-measure-interface
+ outside-staff-interface
self-alignment-interface
side-position-interface
text-interface))))))
(interfaces . (font-interface
horizontal-bracket-interface
line-interface
+ outside-staff-interface
ottava-bracket-interface
side-position-interface
text-interface))))))
(meta . ((class . Spanner)
(interfaces . (font-interface
percent-repeat-interface
+ outside-staff-interface
self-alignment-interface
side-position-interface
text-interface))))))
(vertical-skylines . ,(ly:make-unpure-pure-container ly:slur::vertical-skylines ly:grob::pure-simple-vertical-skylines-from-extents))
(Y-extent . ,slur::height)
(meta . ((class . Spanner)
- (interfaces . (slur-interface))))))
+ (interfaces . (outside-staff-interface
+ slur-interface))))))
;; an example of a text spanner
(PianoPedalBracket
(interfaces . (break-alignable-interface
font-interface
mark-interface
+ outside-staff-interface
self-alignment-interface
side-position-interface
text-interface))))))
(cross-staff . ,ly:script-interface::calc-cross-staff)
(direction . ,ly:script-interface::calc-direction)
(font-encoding . fetaMusic)
+ (horizon-padding . 0.1) ; to avoid interleaving with accidentals
(positioning-done . ,ly:script-interface::calc-positioning-done)
(side-axis . ,Y)
(Y-offset . ,side-position-interface::y-aligned-side)
(meta . ((class . Item)
(interfaces . (font-interface
+ outside-staff-interface
script-interface
side-position-interface))))))
(vertical-skylines . ,(ly:make-unpure-pure-container ly:slur::vertical-skylines ly:grob::pure-simple-vertical-skylines-from-extents))
(Y-extent . ,slur::height)
(meta . ((class . Spanner)
- (interfaces . (slur-interface))))))
+ (interfaces . (outside-staff-interface
+ slur-interface))))))
(SostenutoPedal
. (
(object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
(interfaces . (axis-group-interface
+ outside-staff-interface
piano-pedal-interface
side-position-interface))))))
(meta . ((class . Item)
(interfaces . (font-interface
self-alignment-interface
+ outside-staff-interface
side-position-interface
string-number-interface
text-interface
(Y-extent . ,grob::always-Y-extent-from-stencil)
(meta . ((class . Item)
(interfaces . (font-interface
+ outside-staff-interface
self-alignment-interface
side-position-interface
stroke-finger-interface
(object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
(interfaces . (axis-group-interface
+ outside-staff-interface
piano-pedal-interface
side-position-interface))))))
(vertical-skyline-elements . ,ly:system::vertical-skyline-elements)
(vertical-alignment . ,ly:system::get-vertical-alignment)))
(interfaces . (axis-group-interface
- system-interface))))))
+ system-interface
+ outside-staff-axis-group-interface))))))
(SystemStartBar
. (
(meta . ((class . Item)
(interfaces . (font-interface
instrument-specific-markup-interface
+ outside-staff-interface
self-alignment-interface
side-position-interface
text-interface
(interfaces . (font-interface
line-interface
line-spanner-interface
+ outside-staff-interface
side-position-interface))))))
(Tie
(axes . (,X))
(direction . ,RIGHT)
(font-size . -4)
+ ;; minimum shift to the right, in case the parent note has no stem
+ (minimum-space . 2.5)
+ (horizon-padding . 0.1) ; to avoid interleaving with augmentation dots
(padding . 0.3)
(side-axis . ,X)
(stencil . ,parenthesize-elements)
(stencils . ,parentheses-item::calc-parenthesis-stencils)
- ;; offset a bit to the right, further if needed to clear the main note
- (X-offset . ,(lambda (grob)
- (ly:side-position-interface::x-aligned-side grob 2.5)))
+ (X-offset . ,ly:side-position-interface::x-aligned-side)
(Y-extent . ,grob::always-Y-extent-from-stencil)
(meta . ((class . Item)
(interfaces . (axis-group-interface
(interfaces . (font-interface
line-interface
line-spanner-interface
+ outside-staff-interface
side-position-interface
trill-spanner-interface))))))
(meta . ((class . Spanner)
(interfaces . (line-interface
+ outside-staff-interface
tuplet-bracket-interface))))))
(TupletNumber
(direction . ,tuplet-number::calc-direction)
(font-shape . italic)
(font-size . -2)
+ (knee-to-beam . #t)
(stencil . ,ly:tuplet-number::print)
(text . ,tuplet-number::calc-denominator-text)
(X-offset . ,ly:tuplet-number::calc-x-offset)
(Y-offset . ,ly:tuplet-number::calc-y-offset)
(meta . ((class . Spanner)
(interfaces . (font-interface
+ outside-staff-interface
text-interface
tuplet-number-interface))))))
(object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
(interfaces . (axis-group-interface
+ outside-staff-interface
piano-pedal-interface
side-position-interface))))))
(pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
(interfaces . (axis-group-interface
- hara-kiri-group-spanner-interface))))))
+ hara-kiri-group-spanner-interface
+ outside-staff-axis-group-interface))))))
(VoiceFollower
. (
(VoltaBracket
. (
+ (baseline-skip . 1.7)
(direction . ,UP)
(edge-height . (2.0 . 2.0)) ;; staff-space;
(font-encoding . fetaText)
(object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
(interfaces . (axis-group-interface
+ outside-staff-interface
side-position-interface
volta-interface))))))
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
(define-markup-list-command (score-lines layout props score)
(ly:score?)
- "
-This is the same as the @code{\\score} markup but delivers its
-systems as a list of lines. This is not usually called directly by
-the user. Instead, it is called when the parser encounters
-@code{\\score} in a context where only markup lists are allowed. When
-used as the argument of a toplevel @code{\\markuplist}, the result can
-be split across pages."
+ "This is the same as the @code{\\score} markup but delivers its
+systems as a list of lines. Its @var{score} argument is entered in
+braces like it would be for @code{\\score}."
(let ((output (ly:score-embedded-format score layout)))
(if (ly:music-output? output)
(make-simple-markup ""))
;; helper for justifying lines.
-(define (get-fill-space word-count line-width word-space text-widths)
- "Calculate the necessary paddings between each two adjacent texts.
- The lengths of all texts are stored in @var{text-widths}.
- The normal formula for the padding between texts a and b is:
- padding = line-width/(word-count - 1) - (length(a) + length(b))/2
- The first and last padding have to be calculated specially using the
- whole length of the first or last text.
- All paddings are checked to be at least word-space, to ensure that
- no texts collide.
- Return a list of paddings."
+(define (get-fill-space
+ word-count line-width word-space text-widths constant-space?)
+ "Calculate the necessary paddings between adjacent texts in a
+single justified line. The lengths of all texts are stored in
+@var{text-widths}.
+When @var{constant-space?} is @code{#t}, the formula for the padding
+between texts is:
+padding = (line-width - total-text-width)/(word-count - 1)
+When @var{constant-space?} is @code{#f}, the formula for the
+padding between interior texts a and b is:
+padding = line-width/(word-count - 1) - (length(a) + length(b))/2
+In this case, the first and last padding have to be calculated
+specially using the whole length of the first or last text.
+All paddings are checked to be at least word-space, to ensure that
+no texts collide.
+Return a list of paddings."
(cond
- ((null? text-widths) '())
-
- ;; special case first padding
- ((= (length text-widths) word-count)
- (cons
- (- (- (/ line-width (1- word-count)) (car text-widths))
- (/ (car (cdr text-widths)) 2))
- (get-fill-space word-count line-width word-space (cdr text-widths))))
- ;; special case last padding
- ((= (length text-widths) 2)
- (list (- (/ line-width (1- word-count))
- (+ (/ (car text-widths) 2) (car (cdr text-widths)))) 0))
- (else
- (let ((default-padding
- (- (/ line-width (1- word-count))
- (/ (+ (car text-widths) (car (cdr text-widths))) 2))))
- (cons
- (if (> word-space default-padding)
- word-space
- default-padding)
- (get-fill-space word-count line-width word-space (cdr text-widths)))))))
+ ((null? text-widths) '())
+ (constant-space?
+ (make-list
+ (1- word-count)
+ ;; Ensure that space between words cannot be
+ ;; less than word-space.
+ (max
+ word-space
+ (/ (- line-width (apply + text-widths))
+ (1- word-count)))))
+
+ ;; special case first padding
+ ((= (length text-widths) word-count)
+ (cons
+ (- (- (/ line-width (1- word-count)) (car text-widths))
+ (/ (cadr text-widths) 2))
+ (get-fill-space
+ word-count line-width word-space (cdr text-widths)
+ constant-space?)))
+ ;; special case last padding
+ ((= (length text-widths) 2)
+ (list (- (/ line-width (1- word-count))
+ (+ (/ (car text-widths) 2) (cadr text-widths)))
+ 0))
+ (else
+ (let ((default-padding
+ (- (/ line-width (1- word-count))
+ (/ (+ (car text-widths) (cadr text-widths)) 2))))
+ (cons
+ (if (> word-space default-padding)
+ word-space
+ default-padding)
+ (get-fill-space
+ word-count line-width word-space (cdr text-widths)
+ constant-space?))))))
+
+(define (justify-line-helper
+ layout props args text-direction word-space line-width constant-space?)
+ "Return a stencil which spreads @var{args} along a line of width
+@var{line-width}. If @var{constant-space?} is set to @code{#t}, the
+space between words is constant. If @code{#f}, the distance between
+words varies according to their relative lengths."
+ (let* ((orig-stencils (interpret-markup-list layout props args))
+ (stencils
+ (map (lambda (stc)
+ (if (ly:stencil-empty? stc)
+ point-stencil
+ stc))
+ orig-stencils))
+ (text-widths
+ (map (lambda (stc)
+ (if (ly:stencil-empty? stc)
+ 0.0
+ (interval-length (ly:stencil-extent stc X))))
+ stencils))
+ (text-width (apply + text-widths))
+ (word-count (length stencils))
+ (line-width (or line-width (ly:output-def-lookup layout 'line-width)))
+ (fill-space
+ (cond
+ ((= word-count 1)
+ (list
+ (/ (- line-width text-width) 2)
+ (/ (- line-width text-width) 2)))
+ ((= word-count 2)
+ (list
+ (- line-width text-width)))
+ (else
+ (get-fill-space
+ word-count line-width word-space text-widths
+ constant-space?))))
+ (line-contents (if (= word-count 1)
+ (list
+ point-stencil
+ (car stencils)
+ point-stencil)
+ stencils)))
+
+ (if (null? (remove ly:stencil-empty? orig-stencils))
+ empty-stencil
+ (begin
+ (if (= text-direction LEFT)
+ (set! line-contents (reverse line-contents)))
+ (set! line-contents
+ (stack-stencils-padding-list
+ X RIGHT fill-space line-contents))
+ (if (> word-count 1)
+ ;; shift s.t. stencils align on the left edge, even if
+ ;; first stencil had negative X-extent (e.g. center-column)
+ ;; (if word-count = 1, X-extents are already normalized in
+ ;; the definition of line-contents)
+ (set! line-contents
+ (ly:stencil-translate-axis
+ line-contents
+ (- (car (ly:stencil-extent (car stencils) X)))
+ X)))
+ line-contents))))
(define-markup-command (fill-line layout props args)
(markup-list?)
}
}
@end lilypond"
- (let* ((orig-stencils (interpret-markup-list layout props args))
- (stencils
- (map (lambda (stc)
- (if (ly:stencil-empty? stc)
- point-stencil
- stc)) orig-stencils))
- (text-widths
- (map (lambda (stc)
- (if (ly:stencil-empty? stc)
- 0.0
- (interval-length (ly:stencil-extent stc X))))
- stencils))
- (text-width (apply + text-widths))
- (word-count (length stencils))
- (line-width (or line-width (ly:output-def-lookup layout 'line-width)))
- (fill-space
- (cond
- ((= word-count 1)
- (list
- (/ (- line-width text-width) 2)
- (/ (- line-width text-width) 2)))
- ((= word-count 2)
- (list
- (- line-width text-width)))
- (else
- (get-fill-space word-count line-width word-space text-widths))))
+ (justify-line-helper
+ layout props args text-direction word-space line-width #f))
- (line-contents (if (= word-count 1)
- (list
- point-stencil
- (car stencils)
- point-stencil)
- stencils)))
+(define-markup-command (justify-line layout props args)
+ (markup-list?)
+ #:category align
+ #:properties ((text-direction RIGHT)
+ (word-space 0.6)
+ (line-width #f))
+ "Put @var{markups} in a horizontal line of width @var{line-width}.
+The markups are spread to fill the entire line and separated by equal
+space. If there are no arguments, return an empty stencil.
- (if (null? (remove ly:stencil-empty? orig-stencils))
- empty-stencil
- (begin
- (if (= text-direction LEFT)
- (set! line-contents (reverse line-contents)))
- (set! line-contents
- (stack-stencils-padding-list
- X RIGHT fill-space line-contents))
- (if (> word-count 1)
- ;; shift s.t. stencils align on the left edge, even if
- ;; first stencil had negative X-extent (e.g. center-column)
- ;; (if word-count = 1, X-extents are already normalized in
- ;; the definition of line-contents)
- (set! line-contents
- (ly:stencil-translate-axis
- line-contents
- (- (car (ly:stencil-extent (car stencils) X)))
- X)))
- line-contents))))
+@lilypond[verbatim,quote]
+\\markup {
+ \\justify-line {
+ Space between neighboring words is constant
+ }
+}
+@end lilypond"
+ (justify-line-helper
+ layout props args text-direction word-space line-width #t))
(define-markup-command (line layout props args)
(markup-list?)
(define-markup-command (normal-size-super layout props arg)
(markup?)
#:category font
- #:properties ((baseline-skip))
+ #:properties ((font-size 0))
"
@cindex setting superscript in standard font size
@end lilypond"
(ly:stencil-translate-axis
(interpret-markup layout props arg)
- (* 0.5 baseline-skip) Y))
+ (* 1.0 (magstep font-size)) Y))
(define-markup-command (super layout props arg)
(markup?)
#:category font
- #:properties ((font-size 0)
- (baseline-skip))
+ #:properties ((font-size 0))
"
@cindex superscript text
layout
(cons `((font-size . ,(- font-size 3))) props)
arg)
- (* 0.5 baseline-skip)
+ (* 1.0 (magstep font-size)) ; original font-size
Y))
(define-markup-command (translate layout props offset arg)
(define-markup-command (sub layout props arg)
(markup?)
#:category font
- #:properties ((font-size 0)
- (baseline-skip))
+ #:properties ((font-size 0))
"
@cindex subscript text
layout
(cons `((font-size . ,(- font-size 3))) props)
arg)
- (* -0.5 baseline-skip)
+ (* -0.75 (magstep font-size)) ; original font-size
Y))
(define-markup-command (normal-size-sub layout props arg)
(markup?)
#:category font
- #:properties ((baseline-skip))
+ #:properties ((font-size 0))
"
@cindex setting subscript in standard font size
@end lilypond"
(ly:stencil-translate-axis
(interpret-markup layout props arg)
- (* -0.5 baseline-skip)
+ (* -0.75 (magstep font-size))
Y))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Neil Puttock <n.puttock@gmail.com>
;;;; Carl Sorensen <c_sorensen@byu.edu>
structure))
(beaming-exception
(beam-exceptions fraction time-signature-settings))
- (new-measure-length (ly:make-moment num den)))
+ (new-measure-length (ly:make-moment num den))
+ (pos (ly:context-property context 'measurePosition)))
+ ;;\time is OK at a negative measurePosition (after \partial),
+ ;;but at a positive position it's probably a mistake, so warn
+ ;;(like a barcheck) and reset it to 0 to prevent errors.
+ (if (> (ly:moment-main pos) 0)
+ (begin
+ (if (not (ly:context-property context 'ignoreBarChecks #f))
+ (ly:music-warning music
+ (_ "\\time in mid-measure at ~A")
+ (ly:moment-main pos)))
+ (ly:context-set-property!
+ context 'measurePosition (ly:make-moment 0))))
(ly:context-set-property!
context 'timeSignatureFraction fraction)
(ly:context-set-property!
;;; define-music-display-methods.scm -- data for displaying music
;;; expressions using LilyPond notation.
;;;
-;;; Copyright (C) 2005--2012 Nicolas Sceaux <nicolas.sceaux@free.fr>
+;;; Copyright (C) 2005--2014 Nicolas Sceaux <nicolas.sceaux@free.fr>
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-display-method TremoloEvent (event parser)
- (let ((tremolo-type (ly:music-property event 'tremolo-type)))
- (format #f ":~a" (if (= 0 tremolo-type)
- ""
- tremolo-type))))
+ (let ((tremolo-type (ly:music-property event 'tremolo-type 8)))
+ (format #f ":~a" tremolo-type)))
(define-display-method ArticulationEvent (event parser) #t
(let* ((articulation (ly:music-property event 'articulation-type))
(map-in-order (lambda (event)
(music->lily-string event parser))
(ly:music-property note 'articulations))))
- (else ;; unknown?
- "")))
+ (else
+ ;; pure duration
+ ;; FIXME: { c4 c4 4 4 } must not be output as { c4 c 4 4 }
+ ;; quite tricky to do. Do it when outputting sequences?
+ (format #f "~a~{~a~}"
+ (duration->lily-string (ly:music-property note 'duration)
+ #:force-duration #t
+ #:remember #t)
+ (map-in-order (lambda (event)
+ (music->lily-string event parser))
+ (ly:music-property note 'articulations))))))
(define-display-method ClusterNoteEvent (note parser)
(simple-note->lily-string note parser))
(repeat->lily-string expr "percent" parser))
(define-display-method TremoloRepeatedMusic (expr parser)
- (let* ((main (ly:music-property expr 'element))
- (children (if (music-is-of-type? main 'sequential-music)
- ;; \repeat tremolo n { ... }
- (length (extract-named-music main '(EventChord
- NoteEvent)))
- ;; \repeat tremolo n c4
- 1))
- (times (ly:music-property expr 'repeat-count))
-
- ;; # of dots is equal to the 1 in bitwise representation (minus 1)!
- (dots (1- (logcount (* times children))))
- ;; The remaining missing multiplicator to scale the notes by
- ;; times * children
- (mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots))))
- (shift (- (ly:intlog2 (floor mult)))))
- (set! main (ly:music-deep-copy main))
- ;; Adjust the time of the notes
- (ly:music-compress main (ly:make-moment children 1))
- ;; Adjust the displayed note durations
- (shift-duration-log main (- shift) (- dots))
- (format #f "\\repeat tremolo ~a ~a"
- times
- (music->lily-string main parser))))
+ (repeat->lily-string expr "tremolo" parser))
;;;
;;; Contexts
(music->lily-string element parser))
#f)))
-(define (property-value->lily-string arg parser)
+(define-public (value->lily-string arg parser)
(cond ((ly:music? arg)
(music->lily-string arg parser))
((string? arg)
(format #f "#~s" arg))
((markup? arg)
(markup->lily-string arg))
+ ((ly:duration? arg)
+ (format #f "##{ ~a #}" (duration->lily-string arg #:force-duration #t)))
+ ((ly:pitch? arg)
+ (format #f "~a~a"
+ (note-name->lily-string arg parser)
+ (octave->lily-string arg)))
(else
(format #f "#~a" (scheme-expr->lily-string arg)))))
""
(format #f "~a . " (*current-context*)))
property
- (property-value->lily-string value parser)
+ (value->lily-string value parser)
(new-line->lily-string))))
(define-display-method PropertyUnset (expr parser)
(if (eqv? (*current-context*) 'Bottom)
(cons symbol properties)
(cons* (*current-context*) symbol properties))
- (property-value->lily-string value parser)
+ (value->lily-string value parser)
(new-line->lily-string))))
(define-display-method RevertProperty (expr parser)
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
whether to allow, forbid or force a line break.")
(metronome-count ,number-or-pair? "How many beats in a minute?")
+ (midi-extra-velocity ,integer? "How much louder or softer should
+this note be in MIDI output? The default is 0.")
+ (midi-length ,procedure? "Function to determine how long to play
+a note in MIDI. It should take a moment (the written length of the
+note) and a context, and return a moment (the length to play the
+note).")
(moment ,ly:moment? "The moment at which an event happens.")
(music-cause ,ly:music? "The music object that is the cause of
an event.")
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
. ((description . "Repeated notes denoted by tremolo beams.")
(iterator-ctor . ,ly:chord-tremolo-iterator::constructor)
(start-callback . ,ly:repeated-music::first-start)
- ;; the length of the repeat is handled by shifting the note logs
- (length-callback . ,ly:repeated-music::folded-music-length)
+ (length-callback . ,ly:repeated-music::unfolded-music-length)
(types . (general-music repeated-music tremolo-repeated-music))
))
(ly:error (_ "bad make-music argument: ~S") e))))))
(set-props music-properties)
m)))
-
-(define-public (make-repeated-music name)
- (let* ((repeated-music (assoc-get name '(("volta" . VoltaRepeatedMusic)
- ("unfold" . UnfoldedRepeatedMusic)
- ("percent" . PercentRepeatedMusic)
- ("tremolo" . TremoloRepeatedMusic))))
- (repeated-music-name (if repeated-music
- repeated-music
- (begin
- (ly:warning (_ "unknown repeat type `~S'") name)
- (ly:warning (_ "See define-music-types.scm for supported repeats"))
- 'VoltaRepeatedMusic))))
- (make-music repeated-music-name)))
;;;; Common note names in various languages.
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2010--2012 Valentin Villenave <valentin@villenave.net> et al:
+;;;; Copyright (C) 2010--2014 Valentin Villenave <valentin@villenave.net> et al:
;;;;
-;;;; Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl> (Nederlands)
-;;;; Copyright (C) 1998--2012 Jaume Obrador <jobrador@ipc4.uib.es> (Catalan)
-;;;; Copyright (C) 1997--2012 Roland Meier <meier@informatik.th-darmstadt.de>
+;;;; Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl> (Nederlands)
+;;;; Copyright (C) 1998--2014 Jaume Obrador <jobrador@ipc4.uib.es> (Catalan)
+;;;; Copyright (C) 1997--2014 Roland Meier <meier@informatik.th-darmstadt.de>
;;;; Bjoern Jacke <bjoern.jacke@gmx.de> (Deutsch)
-;;;; Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl> (English)
-;;;; Copyright (C) 2002--2012 Carlos García Suárez <cgscqmp@terra.es>
+;;;; Copyright (C) 1996--2014 Han-Wen Nienhuys <hanwen@xs4all.nl> (English)
+;;;; Copyright (C) 2002--2014 Carlos García Suárez <cgscqmp@terra.es>
;;;; Maximiliano G. G. <mxgdvg@yahoo.it> (Espanol)
-;;;; Copyright (C) 1998--2012 Paolo Zuliani <zuliap@easynet.it>
+;;;; Copyright (C) 1998--2014 Paolo Zuliani <zuliap@easynet.it>
;;;; Eric Wurbel <wurbel@univ-tln.fr> (Italiano)
-;;;; Copyright (C) 1998--2012 Arvid Grøtting <arvidg@ifi.uio.no> (Norsk)
-;;;; Copyright (C) 2004--2012 Pedro Kröger <kroeger@pedrokroeger.net> (Portugues)
-;;;; Copyright (C) 2001--2012 Heikki Junes <heikki.junes@hut.fi> (Suomi)
-;;;; Copyright (C) 1997--2012 Mats Bengtsson <mabe@violin.s3.kth.se> (Svenska)
-;;;; Copyright (C) 2004--2012 Hendrik Maryns <hendrik.maryns@ugent.be> (Vlaams)
+;;;; Copyright (C) 1998--2014 Arvid Grøtting <arvidg@ifi.uio.no> (Norsk)
+;;;; Copyright (C) 2004--2014 Pedro Kröger <kroeger@pedrokroeger.net> (Portugues)
+;;;; Copyright (C) 2001--2014 Heikki Junes <heikki.junes@hut.fi> (Suomi)
+;;;; Copyright (C) 1997--2014 Mats Bengtsson <mabe@violin.s3.kth.se> (Svenska)
+;;;; Copyright (C) 2004--2014 Hendrik Maryns <hendrik.maryns@ugent.be> (Vlaams)
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2010--2012 Mike Solomon <mikesol@stanfordalumni.org>
+;;;; Copyright (C) 2010--2014 Mike Solomon <mikesol@stanfordalumni.org>
;;;; Clarinet drawings copied from diagrams created by
;;;; Gilles Thibault <gilles.thibault@free.fr>
;;;;
;;;
;;;
;;;
-;;; Copyright (C) 2005--2012 Nicolas Sceaux <nicolas.sceaux@free.fr>
+;;; Copyright (C) 2005--2014 Nicolas Sceaux <nicolas.sceaux@free.fr>
;;;
;;; - This file defines the procedures used to define display methods for each
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2010--2012 Mike Solomon <mikesol@stanfordalumni.org>
+;;;; Copyright (C) 2010--2014 Mike Solomon <mikesol@stanfordalumni.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; You should have received a copy of the GNU General Public License
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-(define (sort-grob-properties x)
+(define (sort-grob-properties props)
;; force 'meta to the end of each prop-list
- (let ((meta (assoc 'meta x)))
- (append (sort (assoc-remove! x 'meta) ly:alist-ci<?)
+ (let ((meta (assoc 'meta props)))
+ (append (sort (assoc-remove! props 'meta) ly:alist-ci<?)
(list meta))))
-;; properly sort all grobs, properties, and interfaces
+;; properly sort all properties and interfaces
;; within the all-grob-descriptions alist
-(for-each
- (lambda (x)
- (let* ((props (assoc-ref all-grob-descriptions (car x)))
- (meta (assoc-ref props 'meta))
- (interfaces (assoc-ref meta 'interfaces)))
- (set! all-grob-descriptions
- (sort (assoc-set! all-grob-descriptions (car x)
- (sort-grob-properties
- (assoc-set! props 'meta
- (assoc-set! meta 'interfaces
- (sort interfaces ly:symbol-ci<?)))))
- ly:alist-ci<?))))
- all-grob-descriptions)
+(set! all-grob-descriptions
+ (map!
+ (lambda (grob-description)
+ (let* ((grob-key (car grob-description))
+ (props (assoc-ref all-grob-descriptions grob-key))
+ (meta (assoc-ref props 'meta))
+ (interfaces (assoc-ref meta 'interfaces))
+ (sorted-ifaces (sort interfaces ly:symbol-ci<?))
+ (new-meta (assoc-set! meta 'interfaces sorted-ifaces))
+ (new-props (assoc-set! props 'meta new-meta))
+ (sorted-props (sort-grob-properties new-props)))
+ (cons grob-key sorted-props)))
+ all-grob-descriptions))
+
+;; sort all grobs in the all-grob-descriptions alist
+(set! all-grob-descriptions (sort all-grob-descriptions ly:alist-ci<?))
(define (interface-doc-string interface grob-description)
(let* ((name (car interface))
engraver-list))
"."
- "\n\nStandard settings:\n\n"
+ "\n\nStandard settings:\n"
(grob-alist->texi description)
"\n\nThis object supports the following interface(s):\n"
(human-listify ifacedoc)
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2011--2012 Neil Puttock <n.puttock@gmail.com>
+;;;; Copyright (C) 2011--2014 Neil Puttock <n.puttock@gmail.com>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
(let ((value (car args))
(path (cdr args)))
(string-append
- "@item Sets "
- (format "grob property @code{~a} "
+ (format "@item Sets grob property @code{~a} "
(grob-property-path path))
- (format "in @code{@rinternals{~a}} to ~a."
- name-sym
- (scm->texi value))
- "\n")))
+ (format "in @code{@rinternals{~a}} to" name-sym)
+ (if (pretty-printable? value)
+ (format ":~a\n" (scm->texi value))
+ (format " ~a.\n" (scm->texi value))))))
((pop)
(string-append
- "@item Reverts "
- (format "grob property @code{~a} "
+ (format "@item Reverts grob property @code{~a} "
(grob-property-path (car args)))
- (format "in @code{@rinternals{~a}}."
- name-sym)
- "\n"))
+ (format "in @code{@rinternals{~a}}.\n"
+ name-sym)))
((assign)
- (format "@item Sets translator property @code{~a} to ~a.\n"
- name-sym
- (scm->texi (car args))))
+ (string-append
+ (format "@item Sets translator property @code{~a} to" name-sym)
+ (if (pretty-printable? value)
+ (format ":~a\n" (scm->texi (car args)))
+ (format " ~a.\n" (scm->texi (car args))))))
((unset)
(format "@item Unsets translator property @code{~a}.\n"
name-sym))
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
+;;;; Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
(sig-type-names (map type-name sig))
(signature-str
(string-join
- (map (lambda (x) (string-append
- "@var{" (car x) "} (" (cadr x) ")" ))
- (zip arg-names sig-type-names))
+ (map (lambda (x y) (string-append
+ "@var{" x "} (" y ")" ))
+ arg-names sig-type-names)
" " )))
(string-append
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
(path (cdr args)))
(string-append
- "@item Set "
- (format #f "grob-property @code{~a} "
+ (format #f "@item Set grob-property @code{~a} "
(string-join (map symbol->string path) " "))
- (format #f "in @ref{~a} to ~a."
- context-sym (scm->texi value))
- "\n")))
+ (format #f "in @ref{~a} to" context-sym)
+ (if (pretty-printable? value)
+ (format #f ":~a\n" (scm->texi value))
+ (format #f " ~a.\n" (scm->texi value))))))
((equal? (object-property context-sym 'is-grob?) #t) "")
((equal? tag 'assign)
- (format #f "@item Set translator property @code{~a} to ~a.\n"
- context-sym
- (scm->texi (car args))))
- )))
+ (string-append
+ (format #f "@item Set translator property @code{~a} to" context-sym)
+ (if (pretty-printable? (car args))
+ (format #f ":~a\n" (scm->texi (car args)))
+ (format #f " ~a.\n" (scm->texi (car args)))))))))
(define (context-doc context-desc)
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2010--2012 Mark Polesky <markpolesky@yahoo.com>
+;;;; Copyright (C) 2010--2014 Mark Polesky <markpolesky@yahoo.com>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
@author The LilyPond development team
@c `Internals Reference' was born 2000-10-21 with git commit 01e371f...
-Copyright @copyright{} 2000--2012 by the authors
+Copyright @copyright{} 2000--2014 by the authors
@vskip 20pt
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
(define (processing name)
(ly:basic-progress (_ "Processing ~S...") name))
-(define (self-evaluating? x)
- (or (number? x) (string? x) (procedure? x) (boolean? x)))
-
-(define (texify x)
- x)
-
-(define (scm->texi x)
- (string-append "@code{" (texify (scm->string x)) "}"))
-
-
+(define (scm->texi val)
+ (let* (; always start on a new line
+ (open-texi (if (pretty-printable? val)
+ "\n@verbatim\n"
+ "\n@code{"))
+ (close-texi (if (pretty-printable? val)
+ "@end verbatim"
+ "}")))
+ (string-append open-texi (scm->string val) close-texi)))
(define (texi-section-command level)
(assoc-get level '(
"Document one (LABEL . DESC); return empty string if LABEL is empty string."
(if (eq? (car label-desc-pair) "")
""
- (string-append "\n@item " (car label-desc-pair) "\n" (cdr label-desc-pair))))
+ (string-append "\n\n@item " (car label-desc-pair) "\n" (cdr label-desc-pair))))
(define (description-list->texi items-alist quote?)
(string-append
"\n"
(if quote? "@quotation\n" "")
- "@table @asis\n"
+ "@table @asis"
(string-concatenate (map one-item->texi items-alist))
- "\n"
+ "\n\n"
"@end table\n"
(if quote? "@end quotation\n" "")))
(ly:error (_ "cannot find description for property ~S (~S)") sym where))
(cons
- (string-append "@code{" name "} "
- "(" typename ")"
+ (string-append "@code{" name "} (" typename ")"
(if init-value
- (string-append
- ":\n\n"
- (scm->texi init-value)
- "\n\n")
- ""))
+ (string-append ":" (scm->texi init-value) "\n")
+ ""))
desc)))
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2005--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2005--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2004--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2008--2012 Reinhold Kainhofer <reinhold@kainhofer.com>
+;;;; Copyright (C) 2008--2014 Reinhold Kainhofer <reinhold@kainhofer.com>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
"/output-scale "
(number->string (ly:output-def-lookup layout 'output-scale)) " def\n"
(output-entry "page-height" 'paper-height)
- (output-entry "page-width" 'paper-width)))
+ (output-entry "page-width" 'paper-width)
+ (if (ly:get-option 'strokeadjust) "true setstrokeadjust\n" "")
+ ))
(define (dump-page outputter page page-number page-count landscape?)
(ly:outputter-dump-string
"")
"%%EndPageSetup\n"
"\n"
- "true setstrokeadjust\n"
"gsave 0 paper-height translate set-ps-scale-to-lily-scale\n"))
(ly:outputter-dump-stencil outputter page)
(ly:outputter-dump-string outputter "stroke grestore\nshowpage\n"))
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2004--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Patrick McCarty <pnorcks@gmail.com>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Carl D. Sorensen <c_sorensen@byu.edu>
+;;;; Copyright (C) 2004--2014 Carl D. Sorensen <c_sorensen@byu.edu>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2007--2012 Joe Neeman <joeneeman@gmail.com>
+;;;; Copyright (C) 2007--2014 Joe Neeman <joeneeman@gmail.com>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2010--2012 Ian Hulin <ian@hulin.org.uk>
+;;;; Copyright (C) 2010--2014 Ian Hulin <ian@hulin.org.uk>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2008--2012 Reinhold Kainhofer <reinhold@kainhofer.com>
+;;;; Copyright (C) 2008--2014 Reinhold Kainhofer <reinhold@kainhofer.com>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
(max-slope-factor . 10)
(free-head-distance . 0.3)
(free-slur-distance . 0.8)
+ (gap-to-staffline-inside . 0.2)
+ (gap-to-staffline-outside . 0.1)
(extra-object-collision-penalty . 50)
(accidental-collision . 3)
(extra-encompass-free-distance . 0.3)
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;; for define-safe-public when byte-compiling using Guile V2
(use-modules (scm safe-utility-defs))
+(use-modules (ice-9 pretty-print))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; constants.
(cons (ly:moment-main-numerator moment)
(ly:moment-main-denominator moment)))
+(define-public (seconds->moment s context)
+ "Return a moment equivalent to s seconds at the current tempo."
+ (ly:moment-mul (ly:context-property context 'tempoWholesPerMinute)
+ (ly:make-moment (/ s 60))))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; durations
duration (base note length and dot count), as a number of whole notes."
(duration-length (duration-visual dur)))
+(define-public (unity-if-multimeasure context dur)
+ "Given a context and a duration, return @code{1} if the duration is
+longer than the @code{measureLength} in that context, and @code{#f} otherwise.
+This supports historic use of @code{Completion_heads_engraver} to split
+@code{c1*3} into three whole notes."
+ (if (ly:moment<? (ly:context-property context 'measureLength)
+ (ly:duration-length dur))
+ 1
+ #f))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; arithmetic
(define-public (average x . lst)
;; x)
(define-public (stderr string . rest)
- (apply format (cons (current-error-port) (cons string rest)))
+ (apply format (current-error-port) string rest)
(force-output (current-error-port)))
(define-public (debugf string . rest)
(if #f
- (apply stderr (cons string rest))))
+ (apply stderr string rest)))
(define (index-cell cell dir)
(if (equal? dir 1)
(object->string def))
def))))
-;;
-;; don't confuse users with #<procedure .. > syntax.
-;;
+(define (self-evaluating? x)
+ (or (number? x) (string? x) (procedure? x) (boolean? x)))
+
+(define (ly-type? x)
+ (any (lambda (p) ((car p) x)) lilypond-exported-predicates))
+
+(define-public (pretty-printable? val)
+ (and (not (self-evaluating? val))
+ (not (symbol? val))
+ (not (hash-table? val))
+ (not (ly-type? val))))
+
(define-public (scm->string val)
- (if (and (procedure? val)
- (symbol? (procedure-name val)))
- (symbol->string (procedure-name val))
- (string-append
- (if (self-evaluating? val)
- (if (string? val)
- "\""
- "")
- "'")
- (call-with-output-string (lambda (port) (display val port)))
- (if (string? val)
- "\""
- ""))))
+ (let* ((quote-style (if (string? val)
+ 'double
+ (if (or (null? val) ; (ly-type? '()) => #t
+ (and (not (self-evaluating? val))
+ (not (vector? val))
+ (not (hash-table? val))
+ (not (ly-type? val))))
+ 'single
+ 'none)))
+ ; don't confuse users with #<procedure ...> syntax
+ (str (if (and (procedure? val)
+ (symbol? (procedure-name val)))
+ (symbol->string (procedure-name val))
+ (call-with-output-string
+ (if (pretty-printable? val)
+ ; property values in PDF hit margin after 64 columns
+ (lambda (port)
+ (pretty-print val port #:width (case quote-style
+ ((single) 63)
+ (else 64))))
+ (lambda (port) (display val port)))))))
+ (case quote-style
+ ((single) (string-append
+ "'"
+ (string-regexp-substitute "\n " "\n " str)))
+ ((double) (string-append "\"" str "\""))
+ (else str))))
(define-public (!= lst r)
(not (= lst r)))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; Copyright 2009--2012 Mark Polesky <markpolesky@yahoo.com>
+;;;; Copyright 2009--2014 Mark Polesky <markpolesky@yahoo.com>
;; This file implements a LilyPond-specific character-sorting algorithm
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
to a music font.")
(point-and-click
#t
- "Add point & click links to PDF output.")
+ "Add point & click links to PDF and SVG output.")
(paper-size
"a4"
"Set default paper size.")
#t
"Don't use directories from input files while
constructing output file names.")
+ (strokeadjust
+ #f
+ "Set the PostScript strokeadjust operator explicitly.
+This employs different drawing primitives, resulting in
+large PDF file size increases but often markedly better
+PDF previews.")
(svg-woff
#f
"Use woff font files in SVG backend.")
(define-public (ergonomic-simple-format dest . rest)
"Like ice-9's @code{format}, but without the memory consumption."
(if (string? dest)
- (apply simple-format (cons #f (cons dest rest)))
- (apply simple-format (cons dest rest))))
+ (apply simple-format #f dest rest)
+ (apply simple-format dest rest)))
(define format
ergonomic-simple-format)
v)
(define-public (print . args)
- (apply format (cons (current-output-port) args)))
+ (apply format (current-output-port) args))
;;; General settings.
(if (ly:get-option 'trace-scheme-coverage)
(coverage:enable))
-(define-public parser #f)
-
(define music-string-to-path-backends
'(svg))
(,number-or-string? . "number or string")
(,number-pair? . "pair of numbers")
(,number-pair-list? . "list of number pairs")
+ (,rational-or-procedure? . "an exact rational or procedure")
(,rhythmic-location? . "rhythmic location")
(,scheme? . "any type")
(,string-or-pair? . "string or pair")
(,ly:stream-event? . "stream event")
(,ly:translator? . "translator")
(,ly:translator-group? . "translator group")
+ (,ly:undead? . "undead container")
(,ly:unpure-pure-container? . "unpure/pure container")
))
(define (dump-profile base last this)
(let* ((outname (format #f "~a.profile" (dir-basename base ".ly")))
- (diff (map (lambda (y) (apply - y)) (zip this last))))
+ (diff (map - this last)))
(ly:progress "\nWriting timing to ~a..." outname)
(format (open-file outname "w")
"time: ~a\ncells: ~a\n"
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2006--2012 Erik Sandberg <mandolaerik@gmail.com>
+;;;; Copyright (C) 2006--2014 Erik Sandberg <mandolaerik@gmail.com>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
parser
(format #f
(_ "wrong type for argument ~a. Expecting ~a, found ~s")
- n (type-name pred) arg)
+ n (type-name pred) (music->make-music arg))
location))
(define-ly-syntax-simple (void-music)
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2003--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2003--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2003--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2003--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2000--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2000--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;; modal-transforms.scm --- Modal transposition, inversion, and retrograde.
-;; Copyright (C) 2011--2012 Ellis & Grant, Inc.
+;; Copyright (C) 2011--2014 Ellis & Grant, Inc.
;; Author: Michael Ellis <michael.f.ellis@gmail.com>
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
(use-modules (scm safe-utility-defs))
(use-modules (ice-9 optargs))
+(use-modules (srfi srfi-11))
;;; ly:music-property with setter
;;; (ly:music-property my-music 'elements)
"Generate an expression that, once evaluated, may return an object
equivalent to @var{obj}, that is, for a music expression, a
@code{(make-music ...)} form."
+ (define (if-nonzero num)
+ (if (zero? num) '() (list num)))
(cond (;; markup expression
(markup? obj)
(markup-expression->make-markup obj))
(ly:music-mutable-properties obj)))))
(;; moment
(ly:moment? obj)
- `(ly:make-moment ,(ly:moment-main-numerator obj)
- ,(ly:moment-main-denominator obj)
- ,(ly:moment-grace-numerator obj)
- ,(ly:moment-grace-denominator obj)))
+ `(ly:make-moment
+ ,@(let ((main (ly:moment-main obj))
+ (grace (ly:moment-grace obj)))
+ (cond ((zero? grace) (list main))
+ ((negative? grace) (list main grace))
+ (else ;;positive grace requires 4-arg form
+ (list (numerator main)
+ (denominator main)
+ (numerator grace)
+ (denominator grace)))))))
(;; note duration
(ly:duration? obj)
`(ly:make-duration ,(ly:duration-log obj)
- ,(ly:duration-dot-count obj)
- ,(ly:duration-scale obj)))
+ ,@(if (= (ly:duration-scale obj) 1)
+ (if-nonzero (ly:duration-dot-count obj))
+ (list (ly:duration-dot-count obj)
+ (ly:duration-scale obj)))))
(;; note pitch
(ly:pitch? obj)
`(ly:make-pitch ,(ly:pitch-octave obj)
,(ly:pitch-notename obj)
- ,(ly:pitch-alteration obj)))
+ ,@(if-nonzero (ly:pitch-alteration obj))))
(;; scheme procedure
(procedure? obj)
(or (procedure-name obj) obj))
(max 0 (+ dot (ly:duration-dot-count d)))
cp)))
(set! (ly:music-property music 'duration) nd)))
+ ;clear cached length, since it's no longer valid
+ (set! (ly:music-property music 'length) '())
music))
(define-public (shift-duration-log music shift dot)
(music-map (lambda (x) (shift-one-duration-log x shift dot))
music))
-(define-public (make-repeat name times main alts)
- "Create a repeat music expression, with all properties initialized
-properly."
+(define-public (tremolo::get-music-list tremolo)
+ "Given a tremolo repeat, return a list of music to engrave for it.
+This will be a stretched copy of its body, plus a TremoloEvent or
+TremoloSpanEvent.
+
+This is called only by Chord_tremolo_iterator."
(define (first-note-duration music)
- "Finds the duration of the first NoteEvent by searching depth-first
-through MUSIC."
+ "Finds the duration of the first NoteEvent by searching
+depth-first through MUSIC."
;; NoteEvent or a non-expanded chord-repetition
;; We just take anything that actually sports an announced duration.
(if (ly:duration? (ly:music-property music 'duration))
(if (ly:duration? dur)
dur
(loop (cdr elts))))))))
-
- (let ((talts (if (< times (length alts))
- (begin
- (ly:warning (_ "More alternatives than repeats. Junking excess alternatives"))
- (take alts times))
- alts))
- (r (make-repeated-music name)))
- (set! (ly:music-property r 'element) main)
- (set! (ly:music-property r 'repeat-count) (max times 1))
- (set! (ly:music-property r 'elements) talts)
- (if (and (equal? name "tremolo")
- (pair? (extract-named-music main '(EventChord NoteEvent))))
- ;; This works for single-note and multi-note tremolos!
- (let* ((children (if (music-is-of-type? main 'sequential-music)
- ;; \repeat tremolo n { ... }
- (length (extract-named-music main '(EventChord
- NoteEvent)))
- ;; \repeat tremolo n c4
- 1))
- ;; # of dots is equal to the 1 in bitwise representation (minus 1)!
- (dots (1- (logcount (* times children))))
- ;; The remaining missing multiplicator to scale the notes by
+ (let* ((times (ly:music-property tremolo 'repeat-count))
+ (body (ly:music-property tremolo 'element))
+ (children (if (music-is-of-type? body 'sequential-music)
+ ;; \repeat tremolo n { ... }
+ (length (extract-named-music body '(EventChord
+ NoteEvent)))
+ ;; \repeat tremolo n c4
+ 1))
+ (tremolo-type (if (positive? children)
+ (let* ((note-duration (first-note-duration body))
+ (duration-log (if (ly:duration? note-duration)
+ (ly:duration-log note-duration)
+ 1)))
+ (ash 1 duration-log))
+ '()))
+ (stretched (ly:music-deep-copy body)))
+ (if (positive? children)
+ ;; # of dots is equal to the 1 in bitwise representation (minus 1)!
+ (let* ((dots (1- (logcount (* times children))))
+ ;; The remaining missing multiplier to scale the notes by
;; times * children
(mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots))))
- (shift (- (ly:intlog2 (floor mult))))
- (note-duration (first-note-duration r))
- (duration-log (if (ly:duration? note-duration)
- (ly:duration-log note-duration)
- 1))
- (tremolo-type (ash 1 duration-log)))
- (set! (ly:music-property r 'tremolo-type) tremolo-type)
+ (shift (- (ly:intlog2 (floor mult)))))
(if (not (and (integer? mult) (= (logcount mult) 1)))
(ly:music-warning
- main
+ body
(ly:format (_ "invalid tremolo repeat count: ~a") times)))
- ;; Adjust the time of the notes
- (ly:music-compress r (ly:make-moment 1 children))
+ ;; Make each note take the full duration
+ (ly:music-compress stretched (ly:make-moment 1 children))
;; Adjust the displayed note durations
- (shift-duration-log r shift dots))
- r)))
+ (shift-duration-log stretched shift dots)))
+ ;; Return the stretched body plus a tremolo event
+ (if (= children 1)
+ (list (make-music 'TremoloEvent
+ 'repeat-count times
+ 'tremolo-type tremolo-type
+ 'origin (ly:music-property tremolo 'origin))
+ stretched)
+ (list (make-music 'TremoloSpanEvent
+ 'span-direction START
+ 'repeat-count times
+ 'tremolo-type tremolo-type
+ 'origin (ly:music-property tremolo 'origin))
+ stretched
+ (make-music 'TremoloSpanEvent
+ 'span-direction STOP
+ 'origin (ly:music-property tremolo 'origin))))))
+
+(define-public (make-repeat name times main alts)
+ "Create a repeat music expression, with all properties initialized
+properly."
+ (let ((type (or (assoc-get name '(("volta" . VoltaRepeatedMusic)
+ ("unfold" . UnfoldedRepeatedMusic)
+ ("percent" . PercentRepeatedMusic)
+ ("tremolo" . TremoloRepeatedMusic)))
+ (begin (ly:warning (_ "unknown repeat type `~S': must be volta, unfold, percent, or tremolo") name)
+ 'VoltaRepeatedMusic)))
+ (talts (if (< times (length alts))
+ (begin
+ (ly:warning (_ "More alternatives than repeats. Junking excess alternatives"))
+ (take alts times))
+ alts)))
+ (make-music type
+ 'element main
+ 'repeat-count (max times 1)
+ 'elements talts)))
(define (calc-repeat-slash-count music)
"Given the child-list @var{music} in @code{PercentRepeatMusic},
(define-public (unfold-repeats music)
"Replace all repeats with unfolded repeats."
-
(let ((es (ly:music-property music 'elements))
(e (ly:music-property music 'element)))
-
(if (music-is-of-type? music 'repeated-music)
- (let* ((props (ly:music-mutable-properties music))
- (old-name (ly:music-property music 'name))
- (flattened (flatten-alist props)))
- (set! music (apply make-music (cons 'UnfoldedRepeatedMusic
- flattened)))
-
- (if (and (equal? old-name 'TremoloRepeatedMusic)
- (pair? (extract-named-music e '(EventChord NoteEvent))))
- ;; This works for single-note and multi-note tremolos!
- (let* ((children (if (music-is-of-type? e 'sequential-music)
- ;; \repeat tremolo n { ... }
- (length (extract-named-music e '(EventChord
- NoteEvent)))
- ;; \repeat tremolo n c4
- 1))
- (times (ly:music-property music 'repeat-count))
-
- ;; # of dots is equal to the 1 in bitwise representation (minus 1)!
- (dots (1- (logcount (* times children))))
- ;; The remaining missing multiplicator to scale the notes by
- ;; times * children
- (mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots))))
- (shift (- (ly:intlog2 (floor mult)))))
-
- ;; Adjust the time of the notes
- (ly:music-compress music (ly:make-moment children 1))
- ;; Adjust the displayed note durations
- (shift-duration-log music (- shift) (- dots))))))
-
+ (set! music (make-music 'UnfoldedRepeatedMusic music)))
(if (pair? es)
(set! (ly:music-property music 'elements)
(map unfold-repeats es)))
(unfold-repeats e)))
music))
+(define-public (unfold-repeats-fully music)
+ "Unfolds repeats and expands the resulting @code{unfolded-repeated-music}."
+ (map-some-music
+ (lambda (m)
+ (and (music-is-of-type? m 'unfolded-repeated-music)
+ (make-sequential-music
+ (ly:music-deep-copy
+ (let ((n (ly:music-property m 'repeat-count))
+ (alts (ly:music-property m 'elements))
+ (body (ly:music-property m 'element)))
+ (cond ((<= n 0) '())
+ ((null? alts) (make-list n body))
+ (else
+ (concatenate
+ (zip (make-list n body)
+ (append! (make-list (max 0 (- n (length alts)))
+ (car alts))
+ alts))))))))))
+ (unfold-repeats music)))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; property setting music objs.
(make-music 'PropertyUnset
'symbol sym))
-(define-safe-public (make-articulation name)
- (make-music 'ArticulationEvent
- 'articulation-type name))
+(define-safe-public (make-articulation name . properties)
+ (apply make-music 'ArticulationEvent
+ 'articulation-type name
+ properties))
(define-public (make-lyric-event string duration)
(make-music 'LyricEvent
(set! (ly:music-property repeat-chord 'articulations)
(append!
(set-origin! (ly:music-deep-copy arts))
- (ly:music-property repeat-chord 'articulations))))))
+ (ly:music-property repeat-chord 'articulations)))))
+ repeat-chord)
(define-public (expand-repeat-chords! event-types music)
last-chord))
(last-chord
(set! (ly:music-property music 'duration) '())
- (copy-repeat-chord last-chord music chord-repeat event-types)
- music)
+ (copy-repeat-chord last-chord music chord-repeat event-types))
(else
(ly:music-warning music (_ "Bad chord repetition"))
#f)))
(ly:music-property music 'elements)))))
music)
+;;; This does _not_ copy any articulations. Rationale: one main
+;;; incentive for pitch-repeating durations is after ties, such that
+;;; 4~2~8. can stand in for a 15/16 note in \partial 4 position. In
+;;; this use case, any repeated articulations will be a nuisance.
+;;;
+;;; String assignments in TabStaff might seem like a worthwhile
+;;; exception, but they would be better tackled by the respective
+;;; engravers themselves (see issue 3662).
+;;;
+;;; Repeating chords as well seems problematic for things like
+;;; \score {
+;;; <<
+;;; \new Staff { c4 c c <c e> }
+;;; \new RhythmicStaff { 4 4 4 4 }
+;;; >>
+;;; }
+;;;
+;;; However, because of MIDI it is not advisable to use RhythmicStaff
+;;; without any initial pitch/drum-type. For music functions taking
+;;; pure rhythms as an argument, the running of expand-repeat-notes!
+;;; at scorification time is irrelevant: at that point of time, the
+;;; music function has already run.
+
+(define-public (expand-repeat-notes! music)
+ "Walks through @var{music} and gives pitchless notes (not having a
+pitch in code{pitch} or a drum type in @code{drum-type}) the pitch(es)
+from the predecessor note/chord if available."
+ (let ((last-pitch #f))
+ (map-some-music
+ (lambda (m)
+ (define (set-and-ret last)
+ (set! last-pitch last)
+ m)
+ (cond
+ ((music-is-of-type? m 'event-chord)
+ (set-and-ret m))
+ ((music-is-of-type? m 'note-event)
+ (cond
+ ((or (ly:music-property m 'pitch #f)
+ (ly:music-property m 'drum-type #f))
+ => set-and-ret)
+ ;; ok, naked rhythm. Go through the various cases of
+ ;; last-pitch
+ ;; nothing available: just keep as-is
+ ((not last-pitch) m)
+ ((ly:pitch? last-pitch)
+ (set! (ly:music-property m 'pitch) last-pitch)
+ m)
+ ((symbol? last-pitch)
+ (set! (ly:music-property m 'drum-type) last-pitch)
+ m)
+ ;; Ok, this is the big bad one: the reference is a chord.
+ ;; For now, we use the repeat chord logic. That's not
+ ;; really efficient as cleaning out all articulations is
+ ;; quite simpler than what copy-repeat-chord does.
+ (else
+ (copy-repeat-chord last-pitch
+ (make-music 'EventChord
+ 'elements
+ (ly:music-property m 'articulations)
+ 'origin
+ (ly:music-property m 'origin))
+ (ly:music-property m 'duration)
+ '(rhythmic-event)))))
+ (else #f)))
+ music)))
+
;;; splitting chords into voices.
(define (voicify-list lst number)
"Make a list of Musics.
(else music))))
-(define-public toplevel-music-functions
+(define-session-public toplevel-music-functions
(list
(lambda (music parser) (expand-repeat-chords!
(cons 'rhythmic-event
(ly:parser-lookup parser '$chord-repeat-events))
music))
+ (lambda (music parser) (expand-repeat-notes! music))
(lambda (music parser) (voicify-music music))
(lambda (x parser) (music-map music-check-error x))
(lambda (x parser) (music-map precompute-music-length x))
(car alteration-def))
(else 0)))
-(define (check-pitch-against-signature context pitch barnum laziness octaveness)
+(define (check-pitch-against-signature context pitch barnum laziness octaveness all-naturals)
"Checks the need for an accidental and a @q{restore} accidental against
-@code{localKeySignature}. The @var{laziness} is the number of measures
+@code{localAlterations} and @code{keyAlterations}.
+The @var{laziness} is the number of measures
for which reminder accidentals are used (i.e., if @var{laziness} is zero,
only cancel accidentals in the same measure; if @var{laziness} is three,
we cancel accidentals up to three measures after they first appear.
@var{octaveness} is either @code{'same-octave} or @code{'any-octave} and
-specifies whether accidentals should be canceled in different octaves."
+specifies whether accidentals should be canceled in different octaves.
+If @var{all-naturals} is ##t, notes that do not occur in @code{keyAlterations}
+also get an accidental."
(let* ((ignore-octave (cond ((equal? octaveness 'any-octave) #t)
((equal? octaveness 'same-octave) #f)
(else
(ly:warning (_ "Unknown octaveness type: ~S ") octaveness)
(ly:warning (_ "Defaulting to 'any-octave."))
#t)))
- (key-sig (ly:context-property context 'keySignature))
- (local-key-sig (ly:context-property context 'localKeySignature))
+ (key (ly:context-property context 'keyAlterations))
+ (local (ly:context-property context 'localAlterations))
(notename (ly:pitch-notename pitch))
(octave (ly:pitch-octave pitch))
(pitch-handle (cons octave notename))
(need-accidental #f)
(previous-alteration #f)
(from-other-octaves #f)
- (from-same-octave (assoc-get pitch-handle local-key-sig))
- (from-key-sig (or (assoc-get notename local-key-sig)
+ (from-same-octave (assoc-get pitch-handle local))
+ (from-key-sig (or (assoc-get notename local)
- ;; If no key signature match is found from localKeySignature, we may have a custom
+ ;; If no notename match is found from localAlterations, we may have a custom
;; type with octave-specific entries of the form ((octave . pitch) alteration)
;; instead of (pitch . alteration). Since this type cannot coexist with entries in
- ;; localKeySignature, try extracting from keySignature instead.
- (assoc-get pitch-handle key-sig))))
+ ;; localAlterations, try extracting from keyAlterations instead.
+ (assoc-get pitch-handle key))))
- ;; loop through localKeySignature to search for a notename match from other octaves
- (let loop ((l local-key-sig))
+ ;; loop through localAlterations to search for a notename match from other octaves
+ (let loop ((l local))
(if (pair? l)
(let ((entry (car l)))
(if (and (pair? (car entry))
(let* ((prev-alt (extract-alteration previous-alteration))
(this-alt (ly:pitch-alteration pitch)))
- (if (not (= this-alt prev-alt))
+ (if (or (and all-naturals (eq? #f previous-alteration)) (not (= this-alt prev-alt)))
(begin
(set! need-accidental #t)
(if (and (not (= this-alt 0))
accidental lasts over that many bar lines. @w{@code{-1}} is `forget
immediately', that is, only look at key signature. @code{#t} is `forever'."
- (check-pitch-against-signature context pitch barnum laziness octaveness))
+ (check-pitch-against-signature context pitch barnum laziness octaveness #f))
+
+(define-public ((make-accidental-dodecaphonic-rule octaveness laziness) context pitch barnum measurepos)
+ "Variation on function make-accidental-rule that creates an dodecaphonic
+accidental rule."
+
+ (check-pitch-against-signature context pitch barnum laziness octaveness #t))
(define (key-entry-notename entry)
- "Return the pitch of an @var{entry} in @code{localKeySignature}.
+ "Return the pitch of an @var{entry} in @code{localAlterations}.
The @samp{car} of the entry is either of the form @code{notename} or
of the form @code{(octave . notename)}. The latter form is used for special
key signatures or to indicate an explicit accidental.
(car entry)))
(define (key-entry-octave entry)
- "Return the octave of an entry in @code{localKeySignature}
+ "Return the octave of an entry in @code{localAlterations}
or @code{#f} if the entry does not have an octave.
See @code{key-entry-notename} for details."
(and (pair? (car entry)) (caar entry)))
(define (key-entry-bar-number entry)
- "Return the bar number of an entry in @code{localKeySignature}
+ "Return the bar number of an entry in @code{localAlterations}
or @code {#f} if the entry does not have a bar number.
See @code{key-entry-notename} for details."
(and (pair? (cdr entry)) (caddr entry)))
(define (key-entry-measure-position entry)
- "Return the measure position of an entry in @code{localKeySignature}
+ "Return the measure position of an entry in @code{localAlterations}
or @code {#f} if the entry does not have a measure position.
See @code{key-entry-notename} for details."
(and (pair? (cdr entry)) (cdddr entry)))
(define (key-entry-alteration entry)
- "Return the alteration of an entry in localKeySignature.
+ "Return the alteration of an entry in localAlterations
For convenience, returns @code{0} if entry is @code{#f}."
(if entry
key signature @emph{and} does not directly follow a note on the same
staff line. This rule should not be used alone because it does neither
look at bar lines nor different accidentals at the same note name."
- (let* ((keysig (ly:context-property context 'localKeySignature))
+ (let* ((keysig (ly:context-property context 'localAlterations))
(entry (find-pitch-entry keysig pitch #t #t)))
(if (not entry)
(cons #f #f)
(cons #f (not (or (equal? acc key-acc)
(and (equal? entrybn barnum) (equal? entrymp measurepos)))))))))
+(define-public (dodecaphonic-no-repeat-rule context pitch barnum measurepos)
+ "An accidental rule that typesets an accidental before every
+note (just as in the dodecaphonic accidental style) @emph{except} if
+the note is immediately preceded by a note with the same pitch. This
+is a common accidental style in contemporary notation."
+ (let* ((keysig (ly:context-property context 'localKeySignature))
+ (entry (find-pitch-entry keysig pitch #t #t)))
+ (if (not entry)
+ (cons #f #t)
+ (let* ((entrymp (key-entry-measure-position entry))
+ (entrybn (key-entry-bar-number entry)))
+ (cons #f
+ (not
+ (and (equal? entrybn barnum) (equal? entrymp measurepos))))))))
+
(define-public (teaching-accidental-rule context pitch barnum measurepos)
"An accidental rule that typesets a cautionary accidental if it is
included in the key signature @emph{and} does not directly follow a note
on the same staff line."
- (let* ((keysig (ly:context-property context 'localKeySignature))
+ (let* ((keysig (ly:context-property context 'localAlterations))
(entry (find-pitch-entry keysig pitch #t #t)))
(if (not entry)
(cons #f #f)
- (let* ((entrymp (key-entry-measure-position entry))
+ (let* ((global-entry (find-pitch-entry keysig pitch #f #f))
+ (key-acc (key-entry-alteration global-entry))
+ (acc (ly:pitch-alteration pitch))
+ (entrymp (key-entry-measure-position entry))
(entrybn (key-entry-bar-number entry)))
- (cons #f (not (and (equal? entrybn barnum) (equal? entrymp measurepos))))))))
+ (cons #f (not (or (equal? acc key-acc)
+ (and (equal? entrybn barnum) (equal? entrymp measurepos)))))))))
(define-public (set-accidentals-properties extra-natural
auto-accs auto-cauts
`(Staff ,(lambda (c p bn mp) '(#f . #t)))
'()
context))
+ ;; As in dodecaphonic style with the exception that immediately
+ ;; repeated notes (in the same voice) don't get an accidental
+ ((equal? style 'dodecaphonic-no-repeat)
+ (set-accidentals-properties #f
+ `(Staff ,(make-accidental-rule 'same-octave 0)
+ ,dodecaphonic-no-repeat-rule)
+ '()
+ context))
+ ;; Variety of the dodecaphonic style. Each note gets an accidental,
+ ;; except notes that were already handled in the same measure.
+ ((equal? style 'dodecaphonic-first)
+ (set-accidentals-properties #f
+ `(Staff ,(make-accidental-dodecaphonic-rule 'same-octave 0))
+ '()
+ context))
+
;; Multivoice accidentals to be read both by musicians playing one voice
;; and musicians playing all voices.
;; Accidentals are typeset for each voice, but they ARE canceled across voices.
,teaching-accidental-rule)
context))
- ;; do not set localKeySignature when a note alterated differently from
- ;; localKeySignature is found.
+ ;; do not set localAlterations when a note alterated differently from
+ ;; localAlterations is found.
;; Causes accidentals to be printed at every note instead of
;; remembered for the duration of a measure.
;; accidentals not being remembered, causing accidentals always to
(define-public (invalidate-alterations context)
"Invalidate alterations in @var{context}.
-Elements of @code{'localKeySignature} corresponding to local
+Elements of @code{'localAlterations} corresponding to local
alterations of the key signature have the form
@code{'((octave . notename) . (alter barnum . measurepos))}.
Replace them with a version where @code{alter} is set to @code{'clef}
to force a repetition of accidentals.
Entries that conform with the current key signature are not invalidated."
- (let* ((keysig (ly:context-property context 'keySignature)))
- (set! (ly:context-property context 'localKeySignature)
+ (let* ((keysig (ly:context-property context 'keyAlterations)))
+ (set! (ly:context-property context 'localAlterations)
(map-in-order
(lambda (entry)
(let* ((localalt (key-entry-alteration entry)))
#t #t))))
entry
(cons (car entry) (cons 'clef (cddr entry))))))
- (ly:context-property context 'localKeySignature)))))
+ (ly:context-property context 'localAlterations)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(map (lambda (x) (ly:music-property x 'pitch))
(event-chord-notes event-chord)))
-(defmacro-public make-relative (pitches last-pitch music)
- "The list of pitch-carrying variables in @var{pitches} is used as a
-sequence for creating relativable music from @var{music}.
-The variables in @var{pitches} are, when considered inside of
-@code{\\relative}, all considered to be specifications to the preceding
-variable. The first variable is relative to the preceding musical
-context, and @var{last-pitch} specifies the pitch passed as relative
-base onto the following musical context."
+(define-public (event-chord-reduce music)
+ "Reduces event chords in @var{music} to their first note event,
+retaining only the chord articulations. Returns the modified music."
+ (map-some-music
+ (lambda (m)
+ (and (music-is-of-type? m 'event-chord)
+ (let*-values (((notes arts) (partition
+ (lambda (mus)
+ (music-is-of-type? mus 'rhythmic-event))
+ (ly:music-property m 'elements)))
+ ((dur) (ly:music-property m 'duration))
+ ((full-arts) (append arts
+ (ly:music-property m 'articulations)))
+ ((first-note) (and (pair? notes) (car notes))))
+ (cond (first-note
+ (set! (ly:music-property first-note 'articulations)
+ full-arts)
+ first-note)
+ ((ly:duration? dur)
+ ;; A repeat chord. Produce an unpitched note.
+ (make-music 'NoteEvent
+ 'duration dur
+ 'articulations full-arts))
+ (else
+ (ly:music-error m (_ "Missing duration"))
+ (make-music 'NoteEvent
+ 'duration (ly:make-duration 2 0 0)
+ 'articulations full-arts))))))
+ music))
+
+
+(defmacro-public make-relative (variables reference music)
+ "The list of pitch or music variables in @var{variables} is used as
+a sequence for creating relativable music from @var{music}.
+
+When the constructed music is used outside of @code{\\relative}, it
+just reflects plugging in the @var{variables} into @var{music}.
+
+The action inside of @code{\\relative}, however, is determined by
+first relativizing the surrogate @var{reference} with the variables
+plugged in and then using the variables relativized as a side effect
+of relativizing @var{reference} for evaluating @var{music}.
+
+Since pitches don't have the object identity required for tracing the
+effect of the reference call, they are replaced @emph{only} for the
+purpose of evaluating @var{reference} with simple pitched note events.
+
+The surrogate @var{reference} expression has to be written with that
+in mind. In addition, it must @emph{not} contain @emph{copies} of
+music that is supposed to be relativized but rather the
+@emph{originals}. This @emph{includes} the pitch expressions. As a
+rule, inside of @code{#@{@dots{}#@}} variables must @emph{only} be
+introduced using @code{#}, never via the copying construct @code{$}.
+The reference expression will usually just be a sequential or chord
+expression naming all variables in sequence, implying that following
+music will be relativized according to the resulting pitch of the last
+or first variable, respectively.
+
+Since the usual purpose is to create more complex music from general
+arguments and since music expression parts must not occur more than
+once, one @emph{does} generally need to use copying operators in the
+@emph{replacement} expression @var{music} when using an argument more
+than once there. Using an argument more than once in @var{reference},
+in contrast, does not make sense.
+
+There is another fine point to mind: @var{music} must @emph{only}
+contain freshly constructed elements or copied constructs. This will
+be the case anyway for regular LilyPond code inside of
+@code{#@{@dots{}#@}}, but any other elements (apart from the
+@var{variables} themselves which are already copied) must be created
+or copied as well.
+
+The reason is that it is usually permitted to change music in-place as
+long as one does a @var{ly:music-deep-copy} on it, and such a copy of
+the whole resulting expression will @emph{not} be able to copy
+variables/values inside of closures where the information for
+relativization is being stored.
+"
;; pitch and music generator might be stored instead in music
;; properties, and it might make sense to create a music type of its
;; own for this kind of construct rather than using
;; RelativeOctaveMusic
- (define ((make-relative::to-relative-callback pitches p->m p->p) music pitch)
- (let* ((chord (make-event-chord
- (map
- (lambda (p)
- (make-music 'NoteEvent
- 'pitch p))
- pitches)))
- (pitchout (begin
- (ly:make-music-relative! chord pitch)
- (event-chord-pitches chord))))
- (set! (ly:music-property music 'element)
- (apply p->m pitchout))
- (apply p->p pitchout)))
+ (define ((make-relative::to-relative-callback variables music-call ref-call)
+ music pitch)
+ (let* ((ref-vars (map (lambda (v)
+ (if (ly:pitch? v)
+ (make-music 'NoteEvent 'pitch v)
+ (ly:music-deep-copy v)))
+ variables))
+ (after-pitch (ly:make-music-relative! (apply ref-call ref-vars) pitch))
+ (actual-vars (map (lambda (v r)
+ (if (ly:pitch? v)
+ (ly:music-property r 'pitch)
+ r))
+ variables ref-vars))
+ (rel-music (apply music-call actual-vars)))
+ (set! (ly:music-property music 'element) rel-music)
+ after-pitch))
`(make-music 'RelativeOctaveMusic
'to-relative-callback
(,make-relative::to-relative-callback
- (list ,@pitches)
- (lambda ,pitches ,music)
- (lambda ,pitches ,last-pitch))
+ (list ,@variables)
+ (lambda ,variables ,music)
+ (lambda ,variables ,reference))
'element ,music))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2002--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2002--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Patrick McCarty <pnorcks@gmail.com>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
(string-append "<!-- " s " -->\n"))
(define-public (entity entity string . attributes-alist)
- (if (equal? string "")
+ (if (string-null? string)
(apply eoc entity attributes-alist)
(string-append
- (apply eo (cons entity attributes-alist)) string (ec entity))))
+ (apply eo entity attributes-alist) string (ec entity))))
(define (offset->point o)
(ly:format "~4f ~4f" (car o) (- (cdr o))))
(define (helper lst)
(if (null? lst)
'()
- (cons (format #f "~S ~S" (car lst) (- (cadr lst)))
+ (cons (ly:format "~4f ~4f" (car lst) (- (cadr lst)))
(helper (cddr lst)))))
(string-join (helper lst) " "))
'(fill . "currentColor")))
(define (setcolor r g b)
- (format #f "<g color=\"rgb(~a%, ~a%, ~a%)\">\n"
+ (ly:format "<g color=\"rgb(~4f%, ~4f%, ~4f%)\">\n"
(* 100 r) (* 100 g) (* 100 b)))
;; rotate around given point
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
(define (page-translate-systems page)
(for-each
- (lambda (sys-off)
- (let*
- ((sys (car sys-off))
- (off (cadr sys-off)))
+ (lambda (sys off)
+ (if (not (number? (ly:prob-property sys 'Y-offset)))
+ (ly:prob-set-property! sys 'Y-offset off)))
- (if (not (number? (ly:prob-property sys 'Y-offset)))
- (ly:prob-set-property! sys 'Y-offset off))))
-
- (zip (page-property page 'lines)
- (page-property page 'configuration))))
+ (page-property page 'lines)
+ (page-property page 'configuration)))
(define (annotate-top-space first-system layout header-stencil stencil)
(let* ((top-margin (ly:output-def-lookup layout 'top-margin))
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2006--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
("violin" . ("clefs.G" -2 0))
("G" . ("clefs.G" -2 0))
("G2" . ("clefs.G" -2 0))
+ ("GG" . ("clefs.GG" -2 0))
+ ("tenorG" . ("clefs.tenorG" -2 0))
("french" . ("clefs.G" -4 0))
("soprano" . ("clefs.C" -4 0))
("mezzosoprano" . ("clefs.C" -2 0))
("alto" . ("clefs.C" 0 0))
("C" . ("clefs.C" 0 0))
+ ("varC" . ("clefs.varC" 0 0))
+ ("altovarC" . ("clefs.varC" 0 0))
("tenor" . ("clefs.C" 2 0))
+ ("tenorvarC" . ("clefs.varC" 2 0))
("baritone" . ("clefs.C" 4 0))
+ ("baritonevarC" . ("clefs.varC" 4 0))
("varbaritone" . ("clefs.F" 0 0))
+ ("baritonevarF" . ("clefs.F" 0 0))
("bass" . ("clefs.F" 2 0))
("F" . ("clefs.F" 2 0))
("subbass" . ("clefs.F" 4 0))
("percussion" . ("clefs.percussion" 0 0))
+ ("varpercussion" . ("clefs.varpercussion" 0 0))
("tab" . ("clefs.tab" 0 0))
;; should move mensural stuff to separate file?
;; that symbol"
(define c0-pitch-alist
'(("clefs.G" . -4)
+ ("clefs.GG" . 3)
+ ("clefs.tenorG" . 3)
("clefs.C" . 0)
+ ("clefs.varC" . 0)
("clefs.F" . 4)
("clefs.percussion" . 0)
+ ("clefs.varpercussion" . 0)
("clefs.tab" . 0 )
("clefs.vaticana.do" . 0)
("clefs.vaticana.fa" . 4)
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Nicolas Sceaux <nicolas.sceaux@free.fr>
+;;;; Copyright (C) 2004--2014 Nicolas Sceaux <nicolas.sceaux@free.fr>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
(helper 0 '()))
+(define recording-group-functions
+ ;;Selected parts from @var{toplevel-music-functions} not requiring @code{parser}.
+ (list
+ (lambda (music) (expand-repeat-chords! '(rhythmic-event) music))
+ expand-repeat-notes!))
+
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-public (recording-group-emulate music odef)
"Interpret @var{music} according to @var{odef}, but store all events
(ly:add-listener new-context-listener
(ly:context-events-below global) 'AnnounceNewContext)
(ly:add-listener mom-listener (ly:context-event-source global) 'Prepare)
- (ly:interpret-music-expression (make-non-relative-music music) global)
+ (ly:interpret-music-expression
+ (make-non-relative-music
+ (fold (lambda (x m) (x m)) music recording-group-functions))
+ global)
context-list))
(define-public (make-part-combine-music parser music-list direction)
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2008--2012 Carl D. Sorensen <c_sorensen@byu.edu>
+;;;; Copyright (C) 2008--2014 Carl D. Sorensen <c_sorensen@byu.edu>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2005--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2005--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2000--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2013 Mike Solomon <mike@mikesolomon.org>
+;;;; Copyright (C) 2013--2014 Mike Solomon <mike@mikesolomon.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2003--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2003--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
upper-end-point
;; Step 1: move to lower end point.
lower-end-point)
- line-width
+ (* 2 half-thickness)
(interval-widen x-extent (/ line-width 2))
(interval-widen y-extent (/ line-width 2)))))
(append (list origin)
(reverse (cdr (reverse pointlist)))) pointlist))))
-(define-public (make-connected-path-stencil pointlist thickness
- x-scale y-scale connect fill)
- "Make a connected path described by the list @var{pointlist}, with
-thickness @var{thickness}, and scaled by @var{x-scale} in the X direction
-and @var{y-scale} in the Y direction. @var{connect} and @var{fill} are
-boolean arguments that specify if the path should be connected or filled,
-respectively."
-
- ;; paths using this routine are designed to begin at point '(0 . 0)
- (let* ((origin (list 0 0))
- (boundlist (path-min-max origin pointlist))
- ;; modify pointlist to scale the coordinates
- (path (map (lambda (x)
- (apply
- (if (= 6 (length x))
- (lambda (x1 x2 x3 x4 x5 x6)
- (list 'curveto
- (* x1 x-scale)
- (* x2 y-scale)
- (* x3 x-scale)
- (* x4 y-scale)
- (* x5 x-scale)
- (* x6 y-scale)))
- (lambda (x1 x2)
- (list 'lineto
- (* x1 x-scale)
- (* x2 y-scale))))
- x))
- pointlist))
- ;; a path must begin with a `moveto'
- (prepend-origin (cons (cons 'moveto origin) path))
- ;; if this path is connected, add closepath to the end
- (final-path (if connect
- (append prepend-origin (list '(closepath)))
- prepend-origin))
- (command-list (concatenate final-path)))
+(define-public (make-path-stencil path thickness x-scale y-scale fill)
+ "Make a stencil based on the path described by the list @var{path},
+with thickness @var{thickness}, and scaled by @var{x-scale} in the X
+direction and @var{y-scale} in the Y direction. @var{fill} is a boolean
+argument that specifies if the path should be filled. Valid path
+commands are: moveto rmoveto lineto rlineto curveto rcurveto closepath,
+and their standard SVG single letter equivalents: M m L l C c Z z."
+
+ (define (convert-path path origin previous-point)
+ "Recursive function to standardize command names and
+convert any relative path expressions (in @var{path}) to absolute
+values. Returns a list of lists. @var{origin} is a pair of x and y
+coordinates for the origin point of the path (used for closepath and
+reset by moveto commands). @var{previous-point} is a pair of x and y
+coordinates for the previous point in the path."
+ (if (pair? path)
+ (let*
+ ((head-raw (car path))
+ (rest (cdr path))
+ (head (cond
+ ((memq head-raw '(rmoveto M m)) 'moveto)
+ ((memq head-raw '(rlineto L l)) 'lineto)
+ ((memq head-raw '(rcurveto C c)) 'curveto)
+ ((memq head-raw '(Z z)) 'closepath)
+ (else head-raw)))
+ (arity (cond
+ ((memq head '(lineto moveto)) 2)
+ ((eq? head 'curveto) 6)
+ (else 0)))
+ (coordinates-raw (take rest arity))
+ (absolute? (if (memq head-raw
+ '(rmoveto m rlineto l rcurveto c)) #f #t))
+ (coordinates (if absolute?
+ coordinates-raw
+ ;; convert relative coordinates to absolute by
+ ;; adding them to previous point values
+ (map (lambda (c n)
+ (if (even? n)
+ (+ c (car previous-point))
+ (+ c (cdr previous-point))))
+ coordinates-raw
+ (iota arity))))
+ (new-point (if (eq? head 'closepath)
+ origin
+ (cons
+ (list-ref coordinates (- arity 2))
+ (list-ref coordinates (- arity 1)))))
+ (new-origin (if (eq? head 'moveto)
+ new-point
+ origin)))
+ (cons (cons head coordinates)
+ (convert-path (drop rest arity) new-origin new-point)))
+ '()))
+
+ (let* ((path-absolute (convert-path path (cons 0 0) (cons 0 0)))
+ ;; scale coordinates
+ (path-scaled (if (and (= 1 x-scale) (= 1 y-scale))
+ path-absolute
+ (map (lambda (path-unit)
+ (map (lambda (c n)
+ (cond
+ ((= 0 n) c)
+ ((odd? n) (* c x-scale))
+ (else (* c y-scale))))
+ path-unit
+ (iota (length path-unit))))
+ path-absolute)))
+ ;; a path must begin with a 'moveto'
+ (path-final (if (eq? 'moveto (car (car path-scaled)))
+ path-scaled
+ (append (list (list 'moveto 0 0)) path-scaled)))
+ ;; remove all commands in order to calculate bounds
+ (path-headless (map cdr (delete (list 'closepath) path-final)))
+ (bound-list (path-min-max
+ (car path-headless)
+ (cdr path-headless))))
(ly:make-stencil
`(path ,thickness
- `(,@',command-list)
- 'round
- 'round
- ,(if fill #t #f))
+ `(,@',(concatenate path-final))
+ 'round
+ 'round
+ ,(if fill #t #f))
(coord-translate
((if (< x-scale 0) reverse-interval identity)
- (cons (* x-scale (list-ref boundlist 0))
- (* x-scale (list-ref boundlist 1))))
+ (cons
+ (list-ref bound-list 0)
+ (list-ref bound-list 1)))
`(,(/ thickness -2) . ,(/ thickness 2)))
(coord-translate
((if (< y-scale 0) reverse-interval identity)
- (cons (* y-scale (list-ref boundlist 2))
- (* y-scale (list-ref boundlist 3))))
+ (cons
+ (list-ref bound-list 2)
+ (list-ref bound-list 3)))
`(,(/ thickness -2) . ,(/ thickness 2))))))
+(define-public (make-connected-path-stencil pointlist thickness
+ x-scale y-scale connect fill)
+ "Make a connected path described by the list @var{pointlist}, beginning
+at point '(0 . 0), with thickness @var{thickness}, and scaled by
+@var{x-scale} in the X direction and @var{y-scale} in the Y direction.
+@var{connect} and @var{fill} are boolean arguments that specify if the
+path should be connected or filled, respectively."
+ (make-path-stencil
+ (concatenate
+ (append
+ (map (lambda (path-unit)
+ (case (length path-unit)
+ ((2) (append (list 'lineto) path-unit))
+ ((6) (append (list 'curveto) path-unit))))
+ pointlist)
+ ;; if this path is connected, add closepath to the end
+ (if connect (list '(closepath)) '())))
+ thickness x-scale y-scale fill))
+
(define-public (make-ellipse-stencil x-radius y-radius thickness fill)
"Make an ellipse of x@tie{}radius @var{x-radius}, y@tie{}radius
@code{y-radius}, and thickness @var{thickness} with fill defined by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2009--2012 Marc Hohl <marc@hohlart.de>
+;;;; Copyright (C) 2009--2014 Marc Hohl <marc@hohlart.de>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
(let ((style (ly:grob-property grob 'style)))
(case style
- ((cross) "2cross"))))
+ ((cross) "2cross")
+ ((slash) "2slash")
+ (else #f))))
;; ensure we only call note head callback when
-;; 'style = 'cross
+;; style is set to a known value
(define-public (tab-note-head::whiteout-if-style-set grob)
(let ((style (ly:grob-property grob 'style)))
- (if (and (symbol? style)
- (eq? style 'cross))
- (stencil-whiteout (ly:note-head::print grob))
- (tab-note-head::print grob))))
+ (case style
+ ((cross slash) (stencil-whiteout (ly:note-head::print grob)))
+ (else (tab-note-head::print grob)))))
;; definitions for the "moderntab" clef:
;; the "moderntab" clef will be added to the list of known clefs,
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2011--2012 Bertrand Bordage <bordage.bertrand@gmail.com>
+;;;; Copyright (C) 2011--2014 Bertrand Bordage <bordage.bertrand@gmail.com>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2009--2012 Carl Sorensen <c_sorensen@byu.edu>
+;;;; Copyright (C) 2009--2014 Carl Sorensen <c_sorensen@byu.edu>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;; time signature. Each default-properties set can contain the
;;; following entries:
;;;
-;;; (baseMoment . (numerator . denominator))
+;;; (baseMoment . (/ numerator denominator))
;;; (beatStructure . structure-list)
;;; (beamExceptions . (alist of beam exceptions that don't follow beats))
;;;
;;;
;;; grouping-rules is an alist containing (beam-type . grouping-list) entries
;;;
-;;; beam-type is (numerator . denominator)
+;;; beam-type is the length as a rational number
;;; grouping-list is a list that specifies the
;;; number of stems of the given duration that are grouped in a beamed unit.
;;; For an exception, the duration used is beam-type. For measureBeats,
;;;
;;; If an exception is specified for a given beam-type, it will apply to all
;;; beams of shorter durations that don't have an individual exception, so
-;;; ((1 . 8) . (3 3 2))
+;;; (1/8 . (3 3 2))
;;; will cause all primary beams to be broken at 3/8, 6/8, and 8/8.
;;;
-;;; ((1 . 32) . (16 8 4 4))
+;;; (1/32 . (16 8 4 4))
;;; will cause all 1/32, 1/64, and 1/128 beams to be broken at 1/2, 3/4,
;;; 7/8, and 8/8.
;;;
+;;; Tuplets are referenced using their actual (scaled) length, so
+;;; a 3/2 tuplet of the 1/8 kind would get exceptions looked up
+;;; under 1/12.
+;;;
;;; If no values are given for baseMoment and measureBeats, default values
;;; will be assigned:
-;;; baseMoment gets the value (ly:make-moment 1 time-signature-denominator)
+;;; baseMoment gets the value (/ time-signature-denominator)
;;; beatStructure gets a list of (3 3 3 ...), where the number of entries is the
;;; number of beats, each containing 3 base-moments, if the time
;;; signature numerator is greater than 3 and divisible by 3, and
;;; a list of (1 1 1 ...), where the number of entries is the
;;; number of base moments in a measure otherwise.
-;;;
-;;; NOTE: numerator is kept in beam-type because of
-;;; tuplets, e.g. (2 . 24) = (2 . 3) * (1 . 8)
-;;; for eighth-note triplets.
-;;;
(define-public default-time-signature-settings
'(
;; in 2/2 time:
;; use defaults, but end beams with 32nd notes each 1 4 beat
((2 . 2) .
- ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8))))))))
+ ((beamExceptions . ((end . ((1/32 . (8 8 8 8))))))))
;; in 2/4, 2/8 and 2/16 time:
;; use defaults, so no entries are necessary
;; use defaults, but end beams with 32nd notes and higher each 1 4 beat
((3 . 2) .
- ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8))))))))
+ ((beamExceptions . ((end . ((1/32 . (8 8 8 8 8 8))))))))
;; in 3 4 time:
;; use defaults, but combine all beats into a unit if possible
;; in order to avoid beaming every beam type for the entire measure, we set
;; triplets back to every beat.
((3 . 4) .
- ((beamExceptions . ((end . (((1 . 8) . (6)) ;1/8 note whole measure
- ((1 . 12) . (3 3 3)))))))) ;Anything shorter by beat
+ ((beamExceptions . ((end . ((1/8 . (6)) ;1/8 note whole measure
+ (1/12 . (3 3 3)))))))) ;Anything shorter by beat
;; in 3 8 time:
;; beam entire measure together
- ((3 . 8) . ((beamExceptions . ((end . (((1 . 8) . (3))))))))
+ ((3 . 8) . ((beamExceptions . ((end . ((1/8 . (3))))))))
;; in 3 16 time:
;; use defaults -- no entries necessary
;; in 4 2 time:
;; use defaults, but end beams with 16th notes or finer each 1 4 beat
((4 . 2) .
- ((beamExceptions . ((end . (((1 . 16) . (4 4 4 4 4 4 4 4))))))))
+ ((beamExceptions . ((end . ((1/16 . (4 4 4 4 4 4 4 4))))))))
;; in 4 4 (common) time:
;; use defaults, but combine beats 1,2 and 3,4 if only 8th notes
;; ly/engraver-init.ly where the default time signature is set
;; are set
((4 . 4) .
- ((beamExceptions . ((end . (((1 . 8) . (4 4)) ; 1/8 notes half measure
- ((1 . 12) . (3 3 3 3)))))))) ;Anything shorter by beat
+ ((beamExceptions . ((end . ((1/8 . (4 4)) ; 1/8 notes half measure
+ (1/12 . (3 3 3 3)))))))) ;Anything shorter by beat
;; in 4/8 time:
;; combine beats 1 and 2, so beam in 2
;; in 6 4 time:
;; use defaults, but end beams with 32nd or finer each 1/4 beat
((6 . 4) .
- ((beamExceptions . ((end . (((1 . 16) . (4 4 4 4 4 4))))))))
+ ((beamExceptions . ((end . ((1/16 . (4 4 4 4 4 4))))))))
;; in 6 8 time:
;; use defaults, so no entries necessary
;; in 9 4 time:
;; use defaults, but end beams with 32nd or finer each 1 4 beat
((9 . 4) .
- ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8 8 8))))))))
+ ((beamExceptions . ((end . ((1/32 . (8 8 8 8 8 8 8 8))))))))
;; in 9 8 time
;; use defaults, so no entries necessary
;; in 12 4 time:
;; use defaults, but end beams with 32nd or finer notes each 1 4 beat
((12 . 4) .
- ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8 8 8 8 8 8 8))))))))
+ ((beamExceptions . ((end . ((1/32 . (8 8 8 8 8 8 8 8 8 8 8 8))))))))
;; in 12 8 time:
;; use defaults, so no entries necessary
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2004--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2004--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2003--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 2003--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; (c) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2005--2012 Bernard Hurley <bernard@fong-hurley.org.uk>
+;;;; Copyright (C) 2005--2014 Bernard Hurley <bernard@fong-hurley.org.uk>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
typedef std::map < AFM_Ligature const *, int > Bar;
/**
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
/* ||
#!/usr/bin/wish
# GUI interface for common LilyPond git repository commands
-# Copyright 2009--2012 by Johannes Schindelin and Carl Sorensen
+# Copyright 2009--2014 by Johannes Schindelin and Carl Sorensen
#
package require Tk
fi
### make sure convert-ly is up-to-date
-touch python/convertrules.py
-touch scripts/convert-ly.py
cd $BUILD_DIR
-make
+make pythonmodules
cd $TOP_SRC_DIR
### update manuals
(options, files) = \
getopt.getopt (sys.argv[1:],
- '',
- ['dir='])
-
+ '',
+ ['dir=', 'design-size='])
+design_size = 0
outdir = ''
for opt in options:
o = opt[0]
a = opt[1]
if o == '--dir':
outdir = a
+ elif o == '--design-size':
+ design_size = int(a)
else:
print o
raise getopt.error
-# Ugh
-for design_size in [11,13,14,16,18,20,23,26]:
- name = 'Emmentaler'
- filename = name.lower ()
- script = '''#!@FONTFORGE@
+
+name = 'Emmentaler'
+filename = name.lower ()
+script = '''#!@FONTFORGE@
New();
Generate("%(filename)s-%(design_size)d.woff");
''' % vars()
- basename = '%s-%d' % (filename, design_size)
- path = os.path.join (outdir, basename + '.pe')
- open (path, 'w').write (script)
-
- subfonts = ['feta%(design_size)d',
- 'parmesan%(design_size)d',
- 'feta-alphabet%(design_size)d']
+basename = '%s-%d' % (filename, design_size)
+path = os.path.join (outdir, basename + '.genpe')
+open (path, 'w').write (script)
- ns = []
- for s in subfonts:
- ns.append ('%s' % (s % vars()))
+subfonts = ['feta%(design_size)d',
+ 'feta-noteheads%(design_size)d',
+ 'feta-flags%(design_size)d',
+ 'parmesan%(design_size)d',
+ 'parmesan-noteheads%(design_size)d',
+ 'feta-alphabet%(design_size)d']
- subfonts_str = ' '.join (ns)
+ns = []
+for s in subfonts:
+ ns.append ('%s' % (s % vars()))
- open (os.path.join (outdir, '%(filename)s-%(design_size)d.subfonts' % vars()), 'w').write (subfonts_str)
+subfonts_str = ' '.join (ns)
- path = os.path.join (outdir, '%s-%d.dep' % (filename, design_size))
-
- deps = r'''%(filename)s-%(design_size)d.otf: $(outdir)/feta%(design_size)d.pfa \
- $(outdir)/parmesan%(design_size)d.pfa \
- $(outdir)/feta-alphabet%(design_size)d.pfa feta%(design_size)d.otf-table \
- $(outdir)/feta-alphabet%(design_size)d.pfa feta%(design_size)d.otf-gtable
-''' % vars()
- open (path, 'w').write (deps)
+open (os.path.join (outdir, '%(filename)s-%(design_size)d.subfonts' % vars()), 'w').write (subfonts_str)
- open (os.path.join (outdir, basename + '.fontname'), 'w').write ("%s-%d" % (name, design_size))
+open (os.path.join (outdir, basename + '.fontname'), 'w').write ("%s-%d" % (name, design_size))
# This file is part of LilyPond, the GNU music typesetter.
#
-# Copyright (C) 2009--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+# Copyright (C) 2009--2014 Jan Nieuwenhuizen <janneke@gnu.org>
#
# LilyPond is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# This file is part of LilyPond, the GNU music typesetter.
#
-# Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+# Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@cs.uu.nl>
#
# LilyPond is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
open (global_lisp_nm, 'w').write (global_lisp_table (g))
if depfile_nm:
open (depfile_nm, 'wb').write (get_deps (deps,
- [base + '.log', base + '.dvi', base + '.pfa',
+ [base + '.log', base + '.dvi',
depfile_nm,
base + '.pfb']))
#! /usr/bin/python
'''
- Copyright (C) 2008--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2008--2014 Jan Nieuwenhuizen <janneke@gnu.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
# This file is part of LilyPond, the GNU music typesetter.
#
-# Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+# Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
# Jan Nieuwenhuizen <janneke@gnu.org>
#
# LilyPond is free software: you can redistribute it and/or modify
%s
%s
-''' % ( _ ('Copyright (c) %s by') % '2001--2012',
+''' % ( _ ('Copyright (c) %s by') % '2001--2014',
' '.join (authors),
_ ('Distributed under terms of the GNU General Public License.'),
_ ('It comes with NO WARRANTY.')))
# Note that last_change can be set even if the result is
# the same if two conversion rules cancelled out
if result == input:
- # check the y in x.y.z (minor version number)
- previous_stable = (last[0], 2*(last[1]/2), 0)
- if ((last[0:2] != from_version[0:2]) and
- (previous_stable > from_version)):
- # previous stable version
- last = previous_stable
- else:
- # make no (actual) change to the version number
- last = from_version
+ # make no (actual) change to the version number
+ last = from_version
else:
last = last_change
+ # If the last update was to an unstable version
+ # number, and the final update target is no longer in
+ # the same unstable series, we update to the stable
+ # series following the unstable version.
+ if last[1]%2: # unstable
+ next_stable = (last[0], last[1]+1, 0)
+ if next_stable <= to_version:
+ last = next_stable
newversion = r'\version "%s"' % tup_to_str (last)
if lilypond_version_re.search (result):
%s
%s
-''' % ( _ ('Copyright (c) %s by') % '2001--2012',
+''' % ( _ ('Copyright (c) %s by') % '2001--2014',
'\n '.join (authors),
_ ('Distributed under terms of the GNU General Public License.'),
_ ('It comes with NO WARRANTY.')))
#!@TARGET_PYTHON@
-# Copyright (C) 2006--2012 Brailcom, o.p.s.
+# Copyright (C) 2006--2014 Brailcom, o.p.s.
#
# Author: Milan Zamazal <pdm@brailcom.org>
#
%s
%s
-''' % ( _ ('Copyright (c) %s by') % '2001--2012',
+''' % ( _ ('Copyright (c) %s by') % '2001--2014',
'\n '.join (authors),
_ ("Distributed under terms of the GNU General Public License."),
_ ("It comes with NO WARRANTY.")))
!#
;;;; lilypond-invoke-editor.scm -- Invoke an editor in file:line:column mode
-;;;; Copyright (C) 2005--2012 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 2005--2014 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
#!@TARGET_PYTHON@
-# Copyright (c) 2006--2012 Brailcom, o.p.s.
+# Copyright (c) 2006--2014 Brailcom, o.p.s.
#
# Author: Milan Zamazal <pdm@brailcom.org>
#
# This file is part of LilyPond, the GNU music typesetter.
#
-# Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+# Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
# Jan Nieuwenhuizen <janneke@gnu.org>
#
# LilyPond is free software: you can redistribute it and/or modify
%s
%s
-''' % ( _ ('Copyright (c) %s by') % '1998--2012',
+''' % ( _ ('Copyright (c) %s by') % '1998--2014',
'\n '.join (authors),
_ ('Distributed under terms of the GNU General Public License.'),
_ ('It comes with NO WARRANTY.')))
p.version = ('''%prog (LilyPond) @TOPLEVEL_VERSION@\n\n'''
+
-_ ("""Copyright (c) 2005--2012 by
+_ ("""Copyright (c) 2005--2014 by
Han-Wen Nienhuys <hanwen@xs4all.nl>,
Jan Nieuwenhuizen <janneke@gnu.org> and
Reinhold Kainhofer <reinhold@kainhofer.com>
$(foreach a, $(MODULE_LIBS), $(eval $(call MODULE_LIB_template,$(a))))
-$(EXECUTABLE): $(outdir)/config.hh $(O_FILES) $(outdir)/version.hh $(MODULE_LIBS:%=%/$(outdir)/library.a)
+$(O_FILES): $(outdir)/config.hh
+
+$(EXECUTABLE): $(O_FILES) $(outdir)/version.hh $(MODULE_LIBS:%=%/$(outdir)/library.a)
$(foreach a, $(MODULE_LIBS), $(MAKE) -C $(a) && ) true
$(LD) -o $@ $(O_FILES) $(LOADLIBES) $(ALL_LDFLAGS)
-top-build-dir = $(shell cd $(depth) && pwd)
-build-dir = $(shell cd . && pwd)
-tree-dir = $(subst $(top-build-dir),,$(build-dir))
-
-absdir = $(shell cd $(1) ; pwd)
+top-build-dir := $(realpath $(depth) )
+build-dir := $(realpath . )
+tree-dir = $(subst $(top-build-dir),,$(build-dir))
ifneq ($(configure-srcdir),.)
srcdir-build = 1
src-depth = $(configure-srcdir)
endif
-top-src-dir := $(shell cd $(src-depth); pwd)
+top-src-dir := $(realpath $(src-depth))
ifndef srcdir-build
src-dir = .
INSTALLPY=$(buildscript-dir)/install -c
INSTALL=$(INSTALLPY)
-group-dir = $(shell cd $(DEPTH);pwd)/..
-patch-dir = $(group-dir)/patches
-rpm-sources = $(release-dir)
-rpm-build = $(group-dir)/RedHat/BUILD
package-icon = $(outdir)/$(package)-icon.xpm
ifneq ($(strip $(MY_PATCH_LEVEL)),)
ifeq ($(strip $(CROSS)),no)
$(outdir)/%.1: $(outdir)/% $(buildscript-dir)/help2man
+ echo $(buildscript-dir)/help2man
$(HELP2MAN_COMMAND)
else
# When cross building, some manpages will not build because the
-$(LIBRARY): $(outdir)/config.hh $(O_FILES)
+$(O_FILES): $(outdir)/config.hh
+
+$(LIBRARY): $(O_FILES)
$(AR) $(ARFLAGS) $@ $(O_FILES)
# thanks to Nelson Beebe for this trick.
$(RANLIB) $@ || $(AR) ts $@ || true
&& ( cd $$TMP \
&& ln -s ../mf2pt1.mem . \
&& ln -s ../../mf2pt1.mp . \
- && MFINPUTS=$(abs-src-dir):..:: $(buildscript-dir)/mf2pt1 $(MF2PT1_OPTIONS) $< $(METAFONT_QUIET)) \
+ && MFINPUTS=$(abs-src-dir):..:: \
+ FONTFORGE=$(FONTFORGE) \
+ $(buildscript-dir)/mf2pt1 $(MF2PT1_OPTIONS) $< $(METAFONT_QUIET)) \
&& mv $$TMP/*pfb $(outdir); \
rm -rf $$TMP
)
# Find dependencies for the target $@, based on the metafont source file $<,
-# and write the dependencies to a .dep file.
-DO_MF_DEP = ( echo ./$@: $(call scan-mf,$<) > $(basename $@).dep ) &&
+# and write the dependencies to a .dep file. We cannot strip the extension of $@,
+# because we have multiple rules generating .dep files.
+DO_MF_DEP = ( echo ./$@: $(call scan-mf,$<) > $@.dep ) &&
--package-name=$(package) \
--package-version=$(VERSION)
-sed-header = \# Translation of LilyPond\n\# Copyright \(C\) 1998--2012 Han-Wen Nienhuys, Jan Nieuwenhuizen.\n\# This file is distributed under the same license as the LilyPond package.
+sed-header = \# Translation of LilyPond\n\# Copyright \(C\) 1998--2014 Han-Wen Nienhuys, Jan Nieuwenhuizen.\n\# This file is distributed under the same license as the LilyPond package.
sed-content = "Content-Type: text\/plain; charset=UTF-8\\n"
####
+$(O_FILES): $(outdir)/config.hh
-$(SHARED_LIBRARY): $(outdir)/config.hh $(LO_FILES)
+$(SHARED_LIBRARY): $(LO_FILES)
$(LD) $(SHARED_FLAGS) -o $@ $(LO_FILES) $(ALL_LDFLAGS)
$(foreach a, $(MODULE_LIBS), $(eval $(call MODULE_LIB_template,$(a))))
-$(TEST_EXECUTABLE): $(outdir)/config.hh $(TEST_O_FILES) $(TEST_MODULE_LIBS:%=%/$(outdir)/library.a)
+$(TEST_EXECUTABLE): $(TEST_O_FILES) $(TEST_MODULE_LIBS:%=%/$(outdir)/library.a)
$(foreach a, $(TEST_MODULE_LIBS), $(MAKE) -C $(a) && ) true
$(LD) -o $@ $(TEST_O_FILES) $(TEST_LOADLIBES) $(ALL_LDFLAGS)
" LilyPond filetype plugin
" Language: LilyPond (ft=ly)
-" Maintainer: Heikki Junes <hjunes@cc.hut.fi>
-" Last Change: 2010 Jul 26
"
" Installed As: vim/ftplugin/lilypond.vim
" Uses Generated File: vim/syntax/lilypond-words.vim
" <F5> save & make
map <buffer> <F5> :w<Return>:se makeprg=lilypond\ \"%<\"<Return>:make<Return>
"
-" <F6> view ps with ghostview
-map <buffer> <F6> :!gv --watch "%<.ps" &<Return>
+" <F6> view pdf with ghostview
+map <buffer> <F6> :!gv --watch "%<.pdf" &<Return>
"
" <F7> prev error
map <buffer> <F7> :cp<Return>