@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 {}
+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
-Several articulations can be put into a single variable or
-returned from an event function:
-
-@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 } }
+@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
-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.
+@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
-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 \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" }
- >>
- }
->>
-@end lilypond
+Scheme functions and identifiers can now be used as output definitions.
@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
-@end lilypond
+Scheme expressions can now be used as chord constituents.
@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.
-@end lilypond
+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
-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{LeftEdge} now has a definable @code{Y-extent} (i.e.vertical). See
+@rinternals{LeftEdge}.
@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
+Added a new @code{make-path-stencil} function that supports all
+@code{path} commands both relative and absolute:
-@item
-The articulation shorthand for @code{\staccatissimo} has been
-renamed from @code{-|} to@tie{}@code{-!}.
-
-@item
-Tempo change ranges are now written as @code{\tempo 4 = 60 - 68}
-rather than @code{\tempo 4 = 60 ~ 68}.
-
-@item
-Grob @code{OctavateEight} was renamed to @code{ClefModifier}.
-Related context properties were renamed from @code{xxxOctavationyyy}
-to @code{xxxTranspositionyyy}.
-
-@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
+@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:
-@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{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
@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.2"
@c Translators: Till Paala
@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.2"
@node Cambiar los valores por omisión
@chapter Cambiar los valores por omisión
@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.2"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Gilles Thibault
@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.2"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
@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'' }
>>
{ 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] }
$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.2"
@node Changing defaults
@chapter Changing defaults
@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.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\)
}
@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 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 measure, @code{measurePosition} is set to a
+negative number, implying that the current bar will be
+@emph{preceded} by additional material. When used after a measure
+has already started, however, 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,
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.28"
+@c \version "2.19.2"
@node Simultaneous notes
\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 |
}
@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
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"
%% 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.
-%% 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
}
>>
}
--- /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.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
+++ /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 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.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.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.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: /web/
<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=4
MY_PATCH_LEVEL=
VERSION_STABLE=2.18.0
-VERSION_DEVEL=2.19.2
+VERSION_DEVEL=2.19.3
;;;; 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
/*
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.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.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.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."
+}
+
+#(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.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
/*
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
/*
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
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
/*
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
/*
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
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
/*
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
/*
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
/*
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
/*
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
index_ = 0;
items_ = audio_staff->audio_items_;
vector_sort (items_, audio_item_less);
- last_tick_ = 0;
+ //Pieces that begin with grace notes start at negative times. This
+ //is OK - MIDI output doesn't use absolute ticks, only differences.
+ last_tick_ = items_.empty () ? 0 : items_[0]->audio_column_->ticks ();
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
/*
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
/*
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 (!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 (!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 (!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_headers:
+ /* empty */
+ {
+ $$ = SCM_EOL;
+ }
+ | score_headers
+ {
+ 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;
+ }
+ | score_headers 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"));
+
+ }
+ else
+ {
+ if (scm_is_pair ($1) && ly_is_module (scm_car ($1)))
+ scm_set_cdr_x ($1, scm_cons ($2, scm_cdr ($1)));
+ else
+ $$ = scm_cons ($2, $1);
+ }
+ }
+ ;
+
+
+
score_body:
- music {
+ score_headers music {
SCM scorify = ly_lily_module_constant ("scorify-music");
- $$ = scm_call_2 (scorify, $1, parser->self_scm ());
+ $$ = scm_call_2 (scorify, $2, parser->self_scm ());
- unsmob_score ($$)->origin ()->set_spot (@$);
+ 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)));
+ }
}
| embedded_scm_active {
- Score *score;
- if (unsmob_score ($1))
- score = new Score (*unsmob_score ($1));
- else {
- score = new Score;
+ if (!unsmob_score ($1))
+ {
+ $$ = (new Score)->unprotect ();
parser->parser_error (@1, _("score expected"));
}
- unsmob_score ($$)->origin ()->set_spot (@$);
- $$ = score->unprotect ();
}
| score_body
{
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, '-');
}
}
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;
}
;
-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);
}
;
(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
;
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"));
}
| 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);
+ }
}
;
| 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->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 ':'
+ | simple_chord_elements post_events {
+ 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);
}
;
+// Can return a single pitch rather than a list.
simple_chord_elements:
new_chord {
if (!parser->lexer_->is_chord_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
;
-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 (mp.main_part_ > Rational (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
for (vsize i = 0; i < audio_staffs_.size (); i++)
{
Audio_staff *s = audio_staffs_[i];
- debug_output ("[" + to_string (i), true);
+ debug_output ("[" + ::to_string (i), true);
s->output (midi_stream, i, ports_);
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
/*
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
/*
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
/*
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
/*
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 || !to_boolean (beam->get_property ("knee")))
+ 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];
+ }
+
+ 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 scm_from_double (x_positions.center ());
+ 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;
+
+ Grob *beam = Stem::get_beam (ref_stem);
+ if (!beam || !to_boolean (beam->get_property ("knee")))
+ 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")))
+ {
+ 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
$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
\name RhythmicStaff
\alias "Staff"
- \override BarLine.bar-extent = #'(-2 . 2)
\override VoltaBracket.staff-padding = #3
\override StaffSymbol.line-count = #1
\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?)
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)
(_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
--- /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.3\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-03-02 16:41+0000\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:214 book_texinfo.py:228
msgid "Unable to auto-detect default settings:\n"
msgstr ""
-#: book_latex.py:224 book_texinfo.py:240
+#: book_latex.py:226 book_texinfo.py:240
#, python-format
msgid ""
"Unable to auto-detect default settings:\n"
"%s"
msgstr ""
-#: book_latex.py:247
+#: book_latex.py:249
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 "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:452 parser.yy:825 parser.yy:895 parser.yy:1105
msgid "bad expression type"
msgstr ""
-#: parser.yy:648 parser.yy:1157
+#: parser.yy:748 parser.yy:1312 parser.yy:1357
msgid "not a context mod"
msgstr ""
-#: parser.yy:851
-msgid "score expected"
+#: parser.yy:938 parser.yy:988
+msgid "\\paper cannot be used in \\score, use \\layout instead"
msgstr ""
-#: parser.yy:867
-msgid "\\paper cannot be used in \\score, use \\layout instead"
+#: parser.yy:974
+msgid "score expected"
msgstr ""
-#: parser.yy:891
+#: parser.yy:1012
msgid "need \\paper for paper block"
msgstr ""
-#: parser.yy:1031 parser.yy:1053
-msgid "unexpected post-event"
+#: parser.yy:1185
+msgid "music expected"
msgstr ""
-#: parser.yy:1061
-msgid "Ignoring non-music expression"
+#: parser.yy:1195 parser.yy:1229
+msgid "unexpected post-event"
msgstr ""
-#: parser.yy:1073 parser.yy:2494
-msgid "music expected"
+#: parser.yy:1237
+msgid "Ignoring non-music expression"
msgstr ""
-#: parser.yy:1372
+#: parser.yy:1455
msgid "not a symbol"
msgstr ""
-#: parser.yy:2182 parser.yy:2296 parser.yy:2309 parser.yy:2318
+#: parser.yy:2253 parser.yy:2367 parser.yy:2380 parser.yy:2389
msgid "bad grob property path"
msgstr ""
-#: parser.yy:2276
+#: parser.yy:2347
msgid "only \\consists and \\remove take non-string argument."
msgstr ""
-#: parser.yy:2337
+#: parser.yy:2408
msgid "bad context property path"
msgstr ""
-#: parser.yy:2438
+#: parser.yy:2509
msgid "simple string expected"
msgstr ""
-#: parser.yy:2456
+#: parser.yy:2527
msgid "symbol expected"
msgstr ""
-#: parser.yy:2606
+#: parser.yy:2659
msgid "not a rhythmic event"
msgstr ""
-#: parser.yy:2680
+#: parser.yy:2709
msgid "post-event expected"
msgstr ""
-#: parser.yy:2689 parser.yy:2694
+#: parser.yy:2718 parser.yy:2723
msgid "have to be in Lyric mode for lyrics"
msgstr ""
-#: parser.yy:2762
-msgid "expecting string as script definition"
+#: parser.yy:2799
+msgid "expecting string or post-event as script definition"
msgstr ""
-#: parser.yy:2852
+#: parser.yy:2898
msgid "not an articulation"
msgstr ""
-#: parser.yy:2924 parser.yy:2967
+#: parser.yy:2970 parser.yy:3013
msgid "not a duration"
msgstr ""
-#: parser.yy:2984
+#: parser.yy:3034
msgid "bass number expected"
msgstr ""
-#: parser.yy:3083
+#: parser.yy:3133
msgid "have to be in Note mode for notes"
msgstr ""
-#: parser.yy:3142
+#: parser.yy:3214
msgid "have to be in Chord mode for chords"
msgstr ""
-#: parser.yy:3157
+#: parser.yy:3229
msgid "markup outside of text script or \\lyricmode"
msgstr ""
-#: parser.yy:3162
+#: parser.yy:3234
msgid "unrecognized string, not in text script or \\lyricmode"
msgstr ""
-#: parser.yy:3379
+#: parser.yy:3386 parser.yy:3395
+msgid "not an unsigned integer"
+msgstr ""
+
+#: parser.yy:3469
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-types.scm:791
#, scheme-format
msgid "symbol expected: ~S"
msgstr ""
-#: define-music-types.scm:795
+#: define-music-types.scm:794
#, scheme-format
msgid "cannot find music object: ~S"
msgstr ""
-#: define-music-types.scm:815
+#: define-music-types.scm:814
#, scheme-format
msgid "bad make-music argument: ~S"
msgstr ""
-#: define-music-types.scm:827
-#, scheme-format
-msgid "unknown repeat type `~S'"
-msgstr ""
-
-#: define-music-types.scm:828
-msgid "See define-music-types.scm for supported repeats"
-msgstr ""
-
#: define-note-names.scm:972
msgid "Select note names language."
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:348
msgid "Music unsuitable for context-mod"
msgstr ""
-#: lily-library.scm:388
+#: lily-library.scm:403
#, scheme-format
msgid "Cannot find context-def \\~a"
msgstr ""
-#: lily-library.scm:404
+#: lily-library.scm:419
msgid "Music unsuitable for output-def"
msgstr ""
-#: lily-library.scm:884
+#: lily-library.scm:899
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:970
#, scheme-format
msgid "unknown unit: ~S"
msgstr ""
-#: lily-library.scm:980
+#: lily-library.scm:995
#, 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:461
#, scheme-format
msgid "cannot find: ~A"
msgstr ""
-#: lily.scm:878
+#: lily.scm:885
msgid "Success: compilation successfully completed"
msgstr ""
-#: lily.scm:879
+#: lily.scm:886
msgid "Compilation completed with warnings or errors"
msgstr ""
-#: lily.scm:940
+#: lily.scm:947
#, scheme-format
msgid "job ~a terminated with signal: ~a"
msgstr ""
-#: lily.scm:943
+#: lily.scm:950
#, scheme-format
msgid ""
"logfile ~a (exit ~a):\n"
"~a"
msgstr ""
-#: lily.scm:965 lily.scm:1054
+#: lily.scm:972 lily.scm:1061
#, scheme-format
msgid "failed files: ~S"
msgstr ""
-#: lily.scm:1045
+#: lily.scm:1052
#, scheme-format
msgid "Redirecting output to ~a..."
msgstr ""
-#: lily.scm:1064 ps-to-png.scm:66
+#: lily.scm:1071 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:301
+#, scheme-format
+msgid "invalid tremolo repeat count: ~a"
msgstr ""
-#: music-functions.scm:303
+#: music-functions.scm:330
#, scheme-format
-msgid "invalid tremolo repeat count: ~a"
+msgid "unknown repeat type `~S': must be volta, unfold, percent, or tremolo"
+msgstr ""
+
+#: music-functions.scm:334
+msgid "More alternatives than repeats. Junking excess alternatives"
msgstr ""
-#: music-functions.scm:459
+#: music-functions.scm:481
#, scheme-format
msgid "bad grob property path ~a"
msgstr ""
-#: music-functions.scm:753
+#: music-functions.scm:776
msgid "Bad chord repetition"
msgstr ""
-#: music-functions.scm:788
+#: music-functions.scm:878
#, scheme-format
msgid "music expected: ~S"
msgstr ""
-#: music-functions.scm:1144
+#: music-functions.scm:1234
#, scheme-format
msgid "cannot find quoted music: `~S'"
msgstr ""
-#: music-functions.scm:1282
+#: music-functions.scm:1373
msgid "Add @var{octave-shift} to the octave of @var{pitch}."
msgstr ""
-#: music-functions.scm:1342
+#: music-functions.scm:1433
#, scheme-format
msgid "Unknown octaveness type: ~S "
msgstr ""
-#: music-functions.scm:1343
+#: music-functions.scm:1434
msgid "Defaulting to 'any-octave."
msgstr ""
-#: music-functions.scm:1688
+#: music-functions.scm:1802
#, scheme-format
msgid "unknown accidental style: ~S"
msgstr ""
+#: music-functions.scm:2020
+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
if sys.platform == 'mingw32':
universal_newlines = False
+ if (sys.platform == 'mingw32') and (sys.version_info < (2, 6)):
### use os.system to avoid weird sleep() problems on
### GUB's python 2.4.2 on mingw
# make file to write to
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
+
# 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>
;;;; 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)))
;;;; 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.")
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.")
+ (lastChord ,markup? "Last chord, used for detecting chord changes.")
(lastKeySignature ,list? "Last key signature before a key
signature change.")
(localKeySignature ,list? "The key signature at this point in the
;;;; 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.")
(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>
;;; 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
;;;; 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) 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
;;;; 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
;;;; 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
;;;; 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
(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)
;;;;
;;;; 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.")
(,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")
;;;; 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)
(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))
(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
`(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))
;; 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.
(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
;;;; 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) 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
(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
open (path, 'w').write (script)
subfonts = ['feta%(design_size)d',
- 'parmesan%(design_size)d',
- 'feta-alphabet%(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']
ns = []
for s in subfonts:
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
+ deps = r'''%(filename)s-%(design_size)d.otf: $(outdir)/feta%(design_size)d.pfb \
+ $(outdir)/parmesan%(design_size)d.pfb \
+ $(outdir)/feta-alphabet%(design_size)d.pfb feta%(design_size)d.otf-table \
+ feta%(design_size)d.otf-gtable
''' % vars()
open (path, 'w').write (deps)
# 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>
--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"
####
" 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>