From: David Kastrup Date: Sun, 15 Jun 2014 23:03:23 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/translation' into staging X-Git-Tag: release/2.19.9-1~22 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=c39d188d28fdc84cef8cbaea7b8d6e2fb718c30f;hp=46cf3e09145fe5b25ac507e071634c0e94896ed6;p=lilypond.git Merge remote-tracking branch 'origin/translation' into staging --- diff --git a/.mailmap b/.mailmap index 78d92e31a2..29cc670935 100644 --- a/.mailmap +++ b/.mailmap @@ -133,8 +133,9 @@ John Mandereau Jonathan Kulp Jonathan Kulp Joseph Wakeling -Jürgen Reuter -Jürgen Reuter +Jürgen Reuter +Jürgen Reuter +Jürgen Reuter Keith OHara Kevin Dalley Kieren MacMillan diff --git a/Documentation/changes.tely b/Documentation/changes.tely index d985b534cd..71320d7ea5 100644 --- a/Documentation/changes.tely +++ b/Documentation/changes.tely @@ -36,7 +36,7 @@ See user manual, \NAME\ @finalout @node Top -@top New features in 2.18 since 2.16 +@top New features in 2.20 since 2.18 @allowcodebreaks false @@ -60,463 +60,277 @@ which scares away people. * only show user-visible changes. @end ignore - -@item -The PostScript functionality of stroke adjustment is no longer -applied automatically but left to the discretion of the PostScript -device (by default, Ghostscript uses it for resolutions up to -150dpi when generating raster images). When it is enabled, a more -complex drawing algorithm designed to benefit from stroke -adjustment is employed mostly for stems and bar lines. - -Stroke adjustment can be forced by specifying the command line -option @samp{-dstrokeadjust} to LilyPond. When generating -@code{PDF} files, this will usually result in markedly better -looking @code{PDF} previews but significantly larger file size. -Print quality at high resolutions will be unaffected. - -@item -There is now a new context type called @code{NullVoice} which, while not -appearing in the printed output, can be used to align lyrics. This can -be particularly convenient when used in parallel with a -@code{\partcombine} construct. - -@lilypond[verbatim,quote] -soprano = \relative c' { c e g c } -alto = \relative c' { a c e g } -verse = \lyricmode { This is my song } - -\score { - \new Staff << - \partcombine \soprano \alto - \new NullVoice = "aligner" \soprano - \new Lyrics \lyricsto "aligner" \verse - >> - \layout {} -} -@end lilypond - - @item -Several articulations can be put into a single variable or -returned from an event function: +A new command @code{\magnifyMusic} has been added, which allows +the notation size to be changed without changing the staff size, +while automatically scaling stems, beams, and horizontal spacing. @lilypond[verbatim,quote] -sempreStacc = -. ^\markup \italic sempre -\relative { c''4\sempreStacc c c c } -@end lilypond - -@item -The baseline of score markups is now taken from the reference -point (usually the middle of the staff) of the first bottom system -rather than the top of the bounding rectangle. The following -@lilypond[verbatim,quote] -\markup { - violin: \score { \new Staff { 1 } - \layout { indent=0 } } , - cello: \score { \new Staff { \clef "bass" } - \layout { indent=0 } } -} -@end lilypond -previously looked like -@lilypond[quote] -\markup { - violin: \general-align #Y #UP - \score { \new Staff { 1 } - \layout { indent=0 } } , - cello: \general-align #Y #UP - \score { \new Staff { \clef "bass" } - \layout { indent=0 } } -} -@end lilypond -without a reliable way to get both scores to line up. - -@item -LilyPond no longer automatically infers a @samp{\defaultchild} -context in a context definition with @samp{\accepts} clauses. Any -context definition without an explicit or inherited -@samp{\defaultchild} definition counts as a @samp{Bottom} context -and will be eligible for rhythmic events and overrides without -causing the implicit creation of other contexts. Be sure to -specify a @samp{\defaultchild} for non-@samp{Bottom} contexts when -defining them from scratch. - -@item -There is now extensive support for both discant and bass accordion -register symbols in the @samp{scm accreg} module, see -@ruser{Accordion Registers}. -@lilypond[verbatim,quote] -#(use-modules (scm accreg)) -\new PianoStaff -<< - \new Staff \relative - { \clef "treble" \discant "10" - r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a] - \discant "121" - << { r16 r r } \\ - { d r a r bes r } >> | - 1 +\new Staff << + \new Voice \relative { + \voiceOne + 4 8. 16 8 4 r8 } - \new Staff \relative - { \clef "treble" \freeBass "1" - r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16 - \clef "bass" \stdBass "Master" - << { r16 ^"b" r ^"am" r ^"gm" | - 1^"a" } \\ - { d8_"D" c_"C" bes_"B" | a1_"A" } - >> + \new Voice \relative { + \voiceTwo + \magnifyMusic 0.63 { + r32 c'' a c a c a c r c a c a c a c + r c a c a c a c a c a c a c a c + } } >> @end lilypond @item -New commands @code{markLengthOn} and @code{markLengthOff} control -the allowance of horizontal space for tempo and rehearsal marks. - -@lilypond[quote,relative=2] -\markLengthOn -\compressFullBarRests -\tempo "Molto vivace" c2 c' -\mark\default -\tempo "Meno mosso" R1*16 -\mark\default -g,2 g -\bar "||" -\markLengthOff -\tempo "Molto vivace" c2 c' -\mark#1 -\tempo "Meno mosso" R1*16 -\mark\default -g,2 g +A new flexible template suitable for a range of choral music, is now +provided. This may be used to create simple choral music, with or +without piano accompaniment, in two or four staves. Unlike other +templates, this template is @q{built-in}, which means it does not +need to be copied and edited: instead it is simply @code{\include}'d +in the input file. For details, see @rlearning{Built-in templates}. + +@item +The positioning of tuplet numbers for kneed beams has been significantly +improved. Previously, tuplet numbers were placed according to the +position of the tuplet bracket, even if it was not printed. This could +lead to stranded tuplet numbers. Now they are now positioned +closer to the kneed-beam when an appropriate beam segment exists for its +placement and when the the bracket is not drawn. + +Collision detection is also added, offsetting horizontally if too close +to an adjoining note column but preserving the number's vertical +distance from the kneed beam. If the number itself is too large to +fit in the available space the original, bracket-based, positioning +system is used instead; and in the event of a collision (e.g. with an +accidental) the tuplet number is moved vertically away instead. + +@lilypond[verbatim,fragment,quote,relative=1] +\time 3/4 +\override Beam.auto-knee-gap = 3 +\tuplet 3/2 4 { + g8 c'' e, + c'8 g,, e'' + g,,8 e''' c,, +} @end lilypond -@item -Rehearsal marks at the beginning of a line are now placed to the right -of the clef and key signature by default. As in previous versions, the -@code{break-alignable-interface} controls the behavior. - -@lilypond[quote,relative=2] -\set Score.barNumberVisibility = #all-bar-numbers-visible -\set Timing.currentBarNumber = #72 -\bar"||" \time 3/4 \key e\major \mark#10 \tempo "Adagio" b2. +@noindent +The original kneed-beam tuplet behavior is still available through an +@code{\override} via a new, @code{knee-to-beam} property. + +@lilypond[verbatim,fragment,quote,relative=1] +\time 3/4 +\override Beam.auto-knee-gap = 3 +\override TupletNumber.knee-to-beam = ##f +\tuplet 3/2 4 { + g8 c'' e, + c'8 g,, e'' + g,,8 e''' c,, +} @end lilypond @item -Decimal numbers can now be written directly in music, -without a hash sign. Together with the previous change -in the way object properties are specified, the code to -change the length of stems has changed from this: -@example -\override Stem #'length = #5.6 -e' f' g' a' -@end example -to this: -@example -\override Stem.length = 5.6 -e' f' g' a' -@end example - -One has to write a digit on both sides of the dot -- values like -@code{4.} or @code{-.3} are not allowed. - -Decimal fractions are also not accepted in @code{\chordmode}. +@code{\lyricsto} and @code{\addLyrics} have been @q{harmonized}. Both +now accept the same kind of delimited argument list that @code{\lyrics} +and @code{\chords} accept. Backward compatibility has been added so +music identifiers (i.e. @code{\mus}) are permitted as arguments. A +@code{convert-ly} rule has been added that removes redundant uses of +@code{\lyricmode} and rearranges combinations with context starters such +that @code{\lyricsto} in general is applied last (i.e. like +@code{\lyricmode} would be). @item -A number of shorthands like @code{(}, @code{)}, @code{|}, -@code{[}, @code{]}, @code{~}, @code{\(}, @code{\)} and others can -now freely be redefined like normal commands. An example would be -@lilypond[verbatim,quote] -"\\{" = ( -"\\}" = ) -"(" = \melisma -")" = \melismaEnd - -\new Staff << - \relative c' { - c8 \{ d e f \} % slurred - g ( a b c ) % no slur, but with melisma - c,1 \bar "|." - } - \addlyrics { Li -- ly -- pond. } ->> -@end lilypond +Scheme functions and identifiers can now be used as output definitions. @item -The articulation shorthand for @code{\staccatissimo} has been -renamed from @code{-|} to@tie{}@code{-!}. +Scheme expressions can now be used as chord constituents. @item -Tempo change ranges are now written as @code{\tempo 4 = 60 - 68} -rather than @code{\tempo 4 = 60 ~ 68}. +Improved visual spacing of small and regular @q{MI} Funk and Walker +noteheads so they are now the same width as other shaped notes in +their respective sets. @code{SOL} noteheads are also now visually +improved when used with both the normal Aiken and Sacred Harp heads, as +well as with the thin variants. @item -Grob @code{OctavateEight} was renamed to @code{ClefModifier}. -Related context properties were renamed from @code{xxxOctavationyyy} -to @code{xxxTranspositionyyy}. +@code{LeftEdge} now has a definable @code{Y-extent} (i.e.vertical). See +@rinternals{LeftEdge}. @item -There is a new @code{\absolute} command explicitly marking music -as being entered in absolute pitch. While this has been the -default previously, an explicit @code{\absolute} also prevents -reinterpretation when the passage is placed inside of -@code{\relative}: -@lilypond[verbatim,quote] -\relative c { c'4 \absolute { f'' g'' } c } -@end lilypond +Added a new @code{make-path-stencil} function that supports all +@code{path} commands both relative and absolute: -@item -When @code{\relative} is used without an explicit reference pitch, -the reference pitch now is the middle of the first octave, making -the first entered pitch indistinguishable from absolute pitch. -Previously, omitting the reference pitch would have lead to a -default of @code{c'}. Since that choice was somewhat arbitrary, -recommended usage was to always specify the reference pitch. +@code{lineto}, @code{rlineto}, @code{curveto}, @code{rcurveto}, +@code{moveto}, @code{rmoveto}, @code{closepath}. The function also +supports @q{single-letter} syntax used in standard SVG path commands: + +@code{L}, @code{l}, @code{C}, @code{c}, @code{M}, @code{m}, @code{Z} and +@code{z}. The new command is also backward-compatible with the original +@code{make-connected-path-stencil} function. Also see +@file{scm/stencil.scm}. @item -A new command @code{\single} can be used for converting a property -override into a tweak to be applied on a single music expression: +Context properties named in the @samp{alternativeRestores} property are +restored to their value at the start of the @emph{first} alternative in +all subsequent alternatives. -@lilypond[quote,verbatim,relative=2] -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'' 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. diff --git a/Documentation/contributor.texi b/Documentation/contributor.texi index 9541883b74..f7dc2dd6e8 100644 --- a/Documentation/contributor.texi +++ b/Documentation/contributor.texi @@ -25,7 +25,7 @@ information about different jobs, see @rweb{Help us}. @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 diff --git a/Documentation/contributor/doc-work.itexi b/Documentation/contributor/doc-work.itexi index 680522cbc9..f0bb52e8af 100644 --- a/Documentation/contributor/doc-work.itexi +++ b/Documentation/contributor/doc-work.itexi @@ -14,6 +14,7 @@ Version Control System (VCS) called git, previously discussed in @menu * Introduction to documentation work:: +* version in documentation files:: * Documentation suggestions:: * Texinfo introduction and usage policy:: * Documentation policy:: @@ -66,6 +67,41 @@ Before undertaking any large documentation work, contributors are 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 @@ -464,7 +500,7 @@ to get users accustomed to this scheme construct, i.e. @code{\set 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. @@ -482,8 +518,8 @@ checks. @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 @@ -1445,7 +1481,7 @@ good example of this. 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. diff --git a/Documentation/contributor/issues.itexi b/Documentation/contributor/issues.itexi index 01cce81411..d534b073e4 100644 --- a/Documentation/contributor/issues.itexi +++ b/Documentation/contributor/issues.itexi @@ -187,12 +187,12 @@ the currently-active Bug Squad member(s) can handle the message. @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 diff --git a/Documentation/contributor/programming-work.itexi b/Documentation/contributor/programming-work.itexi index 819534b4ad..447f553ea4 100644 --- a/Documentation/contributor/programming-work.itexi +++ b/Documentation/contributor/programming-work.itexi @@ -1888,55 +1888,8 @@ of a spanner broken at given starting and ending columns. @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) @@ -1948,23 +1901,8 @@ not a word, but hey, neither was Lilypond until the 90s). For example: \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 diff --git a/Documentation/contributor/release-work.itexi b/Documentation/contributor/release-work.itexi index 2bd0b68f8d..4dc75330d8 100644 --- a/Documentation/contributor/release-work.itexi +++ b/Documentation/contributor/release-work.itexi @@ -109,11 +109,18 @@ VERSION_STABLE = the current stable version (probably no change here) @end itemize +@item +Manually edit the two files @file{../ly/Welcome_to_LilyPond.ly} and +@file{../ly/Welcome-to-LilyPond-MacOS.ly} such that the hard coded +@code{\version} number reflects the version number about to be released. + @item Commit, push, switch back to master (or wherever else): @example git commit -m "Release: bump VERSION_DEVEL." VERSION +git commit -m "Release: bump VERSION_DEVEL." ly/Welcome_to_LilyPond.ly +git commit -m "Release: bump VERSION_DEVEL." ly/Welcome-to-LilyPond-MacOS.ly git commit -m "PO: update template." po/lilypond.pot git commit -m "Release: update news." Documentation/web/ git push origin HEAD:release/unstable diff --git a/Documentation/cs/learning.tely b/Documentation/cs/learning.tely index 9d54eea0ae..4043e3e10b 100644 --- a/Documentation/cs/learning.tely +++ b/Documentation/cs/learning.tely @@ -19,7 +19,7 @@ Tento soubor poskytuje úvod pro LilyPond verze @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 diff --git a/Documentation/cs/learning/common-notation.itely b/Documentation/cs/learning/common-notation.itely index 258e2ce108..49e1325d2c 100644 --- a/Documentation/cs/learning/common-notation.itely +++ b/Documentation/cs/learning/common-notation.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes. @end ignore -@c \version "2.17.28" +@c \version "2.19.2" @ignore Tutorial guidelines: @@ -243,7 +243,7 @@ Slovníček: @rglos{tie}. 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 @@ -288,7 +288,7 @@ zapsány pro větší skupiny not. Ligatury a legatové obloučky mohou být naskládány do sebe. @lilypond[verbatim,quote,relative=2] -c4~( c8 d~ d4 e) +c4~( c8 d~ 4 e) @end lilypond @@ -1205,7 +1205,7 @@ ve Figarově árii @notation{Largo al factotum}. \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à @@ -1236,7 +1236,7 @@ Händelova díla @notation{Judas Maccabeus}: \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, __ diff --git a/Documentation/cs/learning/fundamental.itely b/Documentation/cs/learning/fundamental.itely index 2f8cc035d2..ea58f708d4 100644 --- a/Documentation/cs/learning/fundamental.itely +++ b/Documentation/cs/learning/fundamental.itely @@ -8,7 +8,7 @@ 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 @@ -767,7 +767,7 @@ ligatur, značek pro dynamiku atd. tak, jak se patří. 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 @@ -805,7 +805,7 @@ do dvou staveb, jak je to ukázáno zde na modrém trojúhelníkovém hlase. { d2 e } \\ % Voice 2 continues - { c8 b16 a b8 g~ g2 } + { c8 b16 a b8 g~ 2 } \\ { \voiceThreeStyle @@ -1088,25 +1088,25 @@ mají příkazy @code{\oneVoice}, @code{\voiceOne} a @code{voiceTwo} @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 @@ -1134,7 +1134,7 @@ jednotlivého hlasu. Tím se může frázovací oblouček malovat nad ně. \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 { @@ -1167,7 +1167,7 @@ sázení not: \voiceTwo r8 e4 d c8~ << - { c8 b16 a b8 g~ g2 | } + { c8 b16 a b8 g~ 2 | } \new Voice { \voiceThree s4 b4 c2 | @@ -1199,7 +1199,7 @@ jako je tomu zde: \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 { @@ -1335,7 +1335,7 @@ ne jako noty. 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, __ @@ -3137,15 +3137,15 @@ ManualOneVoiceOneMusic = \relative g' { 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 | } diff --git a/Documentation/cs/learning/tweaks.itely b/Documentation/cs/learning/tweaks.itely index de1f0e9aa7..0338933cfa 100644 --- a/Documentation/cs/learning/tweaks.itely +++ b/Documentation/cs/learning/tweaks.itely @@ -8,7 +8,7 @@ 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 @@ -3322,7 +3322,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3383,7 +3383,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3459,7 +3459,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3545,7 +3545,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3777,7 +3777,7 @@ man zwei Stimmen benutzt, wobei die überbundenen Noten sich in der selben befinden, @lilypond[quote,fragment,relative=2] -<< { b8~ b8\noBeam } \\ { b[ g8] } >> +<< { b8~ 8\noBeam } \\ { b[ g8] } >> @end lilypond @noindent @@ -3793,7 +3793,7 @@ den Stimmen stattfindet: << { \once \override Stem.transparent = ##t - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -3810,7 +3810,7 @@ gesetzt wird: { \once \override Stem.transparent = ##t \once \override Stem.length = #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b[ g8] } diff --git a/Documentation/cs/web.texi b/Documentation/cs/web.texi index 6e32322872..71f313adff 100644 --- a/Documentation/cs/web.texi +++ b/Documentation/cs/web.texi @@ -17,7 +17,7 @@ @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 diff --git a/Documentation/css/lilypond-manuals.css b/Documentation/css/lilypond-manuals.css index 995c2173c6..8950b847a7 100644 --- a/Documentation/css/lilypond-manuals.css +++ b/Documentation/css/lilypond-manuals.css @@ -1,3 +1,27 @@ +/**********************************************************/ +/* 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 */ /**********************************************************/ @@ -24,7 +48,7 @@ body { .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; @@ -32,15 +56,23 @@ body { } .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; } @@ -99,8 +131,16 @@ blockquote, .smallexample { 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; @@ -133,6 +173,13 @@ table.cartouche { 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; @@ -208,13 +255,20 @@ div#tocframe { 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 @@ -222,12 +276,12 @@ div#tocframe { } 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; } @@ -236,7 +290,7 @@ div#tocframe p.toc_uplink { 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; } @@ -382,16 +436,24 @@ table .title { } .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 { @@ -456,6 +518,14 @@ div#search p, div#search form { 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; diff --git a/Documentation/de/essay.tely b/Documentation/de/essay.tely index adf0ff03e6..4630d98414 100644 --- a/Documentation/de/essay.tely +++ b/Documentation/de/essay.tely @@ -23,7 +23,7 @@ LilyPond Version @version{}. @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 diff --git a/Documentation/de/essay/engraving.itely b/Documentation/de/essay/engraving.itely index 0affa3b9e5..fbc27ef8fe 100644 --- a/Documentation/de/essay/engraving.itely +++ b/Documentation/de/essay/engraving.itely @@ -9,7 +9,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @c Translators: Till Paala @@ -919,7 +919,7 @@ collide = \once \override NoteColumn.force-hshift = #0 \new Voice { \voiceTwo bes \collide bes } >> } - \new Lyrics \lyricsto "sample" \lyricmode { "good " " bad" } + \new Lyrics \lyricsto "sample" { "good " " bad" } >> } @end lilypond @@ -1756,9 +1756,9 @@ partI = \relative c' { 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 "|." } @@ -1767,7 +1767,7 @@ partII = \relative c' { 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. 8 r r 4 d2 @@ -1775,7 +1775,7 @@ partII = \relative c' { 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 @@ -1786,7 +1786,7 @@ partIV = \relative c { 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 diff --git a/Documentation/de/extending.tely b/Documentation/de/extending.tely index b3f6f7c5f6..ebe3462692 100644 --- a/Documentation/de/extending.tely +++ b/Documentation/de/extending.tely @@ -22,7 +22,7 @@ LilyPond Version @version{} erweitern kann. @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 diff --git a/Documentation/de/extending/programming-interface.itely b/Documentation/de/extending/programming-interface.itely index 4b1b43a006..6ee61875f0 100644 --- a/Documentation/de/extending/programming-interface.itely +++ b/Documentation/de/extending/programming-interface.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.6" +@c \version "2.19.2" @c Translators: Till Paala @@ -1399,7 +1399,7 @@ neu ausgerichtet wird. \relative c'' { \override Tie.after-line-breaking = #my-callback - c1 ~ \break c2 ~ c + c1 ~ \break c2 ~ 2 } @end lilypond diff --git a/Documentation/de/learning.tely b/Documentation/de/learning.tely index ce9c6926b6..b17c6ec512 100644 --- a/Documentation/de/learning.tely +++ b/Documentation/de/learning.tely @@ -19,7 +19,7 @@ Diese Datei stellt eine Einleitung für LilyPond Version @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 diff --git a/Documentation/de/learning/common-notation.itely b/Documentation/de/learning/common-notation.itely index e108d0b0c0..649683986a 100644 --- a/Documentation/de/learning/common-notation.itely +++ b/Documentation/de/learning/common-notation.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes. @end ignore -@c \version "2.17.28" +@c \version "2.19.2" @ignore Tutorial guidelines: @@ -250,7 +250,7 @@ Ein @notation{Bindebogen} wird geschrieben, indem man eine Tilde @code{~} 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 @@ -296,7 +296,7 @@ für größere Notengruppen gesetzt werden. Binde- und Legatobögen können geschachtelt werden. @lilypond[verbatim,quote,relative=2] -c4~( c8 d~ d4 e) +c4~( c8 d~ 4 e) @end lilypond @@ -1201,7 +1201,7 @@ in Figaros Arie @notation{Largo al factotum} gesungen werden muss. \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à @@ -1232,7 +1232,7 @@ aus Händels @notation{Judas Maccabäus}: \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, __ diff --git a/Documentation/de/learning/fundamental.itely b/Documentation/de/learning/fundamental.itely index 77e3112483..595a7f5ab0 100644 --- a/Documentation/de/learning/fundamental.itely +++ b/Documentation/de/learning/fundamental.itely @@ -8,7 +8,7 @@ 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 @@ -778,7 +778,7 @@ Dynamik usw. entsprechend eingestellt. 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 @@ -817,7 +817,7 @@ hier an der blauen Dreieckstimme gezeigt. { d2 e } \\ % Voice 2 continues - { c8 b16 a b8 g~ g2 } + { c8 b16 a b8 g~ 2 } \\ { \voiceThreeStyle @@ -1105,25 +1105,25 @@ mit Text, Bögen und Dynamikbezeichnung anstellen: @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 @@ -1153,7 +1153,7 @@ Phrasierungsbogen ober sie gesetzt werden. \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 { @@ -1186,7 +1186,7 @@ sein, Noten zu setzen: \voiceTwo r8 e4 d c8~ << - { c8 b16 a b8 g~ g2 | } + { c8 b16 a b8 g~ 2 | } \new Voice { \voiceThree s4 b4 c2 | @@ -1219,7 +1219,7 @@ an denen die Stimme nicht auftaucht, wie etwa hier: \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 { @@ -1368,7 +1368,7 @@ nicht als Noten interpretiert werden kann. 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, __ @@ -3172,15 +3172,15 @@ ManualOneVoiceOneMusic = \relative g' { 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 | } diff --git a/Documentation/de/learning/tweaks.itely b/Documentation/de/learning/tweaks.itely index 0c64ba2469..0d407cbb59 100644 --- a/Documentation/de/learning/tweaks.itely +++ b/Documentation/de/learning/tweaks.itely @@ -8,7 +8,7 @@ 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 @@ -3119,12 +3119,12 @@ stößt der Balken mit den oberen Bögen zusammen: { \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'' } >> @@ -3144,7 +3144,7 @@ hochgeschoben werden, etwa auf 1: { \time 4/2 << - { c'1 ~ c'2. e'8 f' } + { c'1 ~ 2. e'8 f' } \\ { \override Beam.positions = #'(-1 . -1) @@ -3152,7 +3152,7 @@ hochgeschoben werden, etwa auf 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'' } >> @@ -3347,7 +3347,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3408,7 +3408,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3484,7 +3484,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3570,7 +3570,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3802,7 +3802,7 @@ man zwei Stimmen benutzt, wobei die überbundenen Noten sich in der selben befinden, @lilypond[quote,fragment,relative=2] -<< { b8~ b8\noBeam } \\ { b[ g8] } >> +<< { b8~ 8\noBeam } \\ { b[ g8] } >> @end lilypond @noindent @@ -3818,7 +3818,7 @@ den Stimmen stattfindet: << { \tweak Stem.transparent ##t - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -3835,7 +3835,7 @@ gesetzt wird: { \tweak Stem.transparent ##t \tweak Stem.length #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b[ g8] } diff --git a/Documentation/de/notation.tely b/Documentation/de/notation.tely index 966c0b6c6b..63b5fa7438 100644 --- a/Documentation/de/notation.tely +++ b/Documentation/de/notation.tely @@ -24,7 +24,7 @@ dem @rlearningnamed{Top, Handbuch zum Lernen} vertraut ist. @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 diff --git a/Documentation/de/notation/changing-defaults.itely b/Documentation/de/notation/changing-defaults.itely index e528f8ae6a..f505579762 100644 --- a/Documentation/de/notation/changing-defaults.itely +++ b/Documentation/de/notation/changing-defaults.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.7" @c Translators: Till Paala @@ -1817,7 +1817,7 @@ werden muss. Kontexteigenschaften werden üblicherweise mit @code{kleinGroßbuchstabe} benannt. Sie kontrollieren vor allem die Übersetzung von Musik in -Notation, wie etwa @code{localKeySignature}, welche bestimmt, wann +Notation, wie etwa @code{localAlterations}, welche bestimmt, wann ein Taktstrich gesetzt werden muss. Kontexteigenschaften können ihren Wert mit der Zeit ändern, während eine Notationsdatei interpretiert wird. Ein gutes Beispiel dafür ist @code{measurePosition}, was die @@ -2306,7 +2306,7 @@ unterschiedliche Arten von Eigenschaften. Kontexte können Eigenschaften haben, deren Bezeichnungen üblicherweise dem Schema @code{kleinGroß} folgen. Derartige Eigenschaften sind vor allen Dingen für die Übersetzung der -Musik in Notation zuständig, beispielsweise @code{localKeySignature} +Musik in Notation zuständig, beispielsweise @code{localAlterations} (um zu bestimmen, ob Versetzungszeichen ausgegeben werden müssen), @code{measurePosition} (um zu bestimmen, ob eine Taktlinie gesetzt werden muss). Kontexteigenschaften können @@ -2467,7 +2467,7 @@ Es ist also sicherer, geschachtelte Aufrufe zu benutzen, wenn man nicht bewusst alle Werte zurücksetzen will. @warning{Geschachtelte Aufrufe funktionieren nicht mit -Kontexteigenschaften (wie etwa @code{beamExceptions}, @code{keySignature}, +Kontexteigenschaften (wie etwa @code{beamExceptions}, @code{keyAlterations}, @code{timeSignatureSettings}, usw.) Diese Eigenschaften können nur verändert werden, indem man sie vollständig als Alisten umdefiniert.} @@ -4115,7 +4115,7 @@ lösen würde. @lilypond[verbatim,quote,relative=1] << - { e1~ e } + { e1~ 1 } \\ { r4 } >> @@ -4151,7 +4151,7 @@ wird. << { \once \override Tie.control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1)) - e1~ e1 + e1~ 1 } \\ { r4 } diff --git a/Documentation/de/notation/fretted-strings.itely b/Documentation/de/notation/fretted-strings.itely index 58e9539e72..226e13fa49 100644 --- a/Documentation/de/notation/fretted-strings.itely +++ b/Documentation/de/notation/fretted-strings.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @c Translators: Till Paala @@ -191,7 +191,7 @@ symbols = { c4-.^"Allegro" d( e) f4-.\f g a^\fermata \mark \default - c8_.\<\( c16 c~ c2\! + c8_.\<\( c16 c~ 2\! c'2.\prall\) } @@ -218,7 +218,7 @@ symbols = { c4-.^"Allegro" d( e) f4-.\f g a^\fermata \mark \default - c8_.\<\( c16 c~ c2\! + c8_.\<\( c16 c~ 2\! c'2.\prall\) } @@ -288,7 +288,7 @@ dass er durch @code{\tabChordRepeats} zur Verfügung gestellt wird. @lilypond[quote,verbatim] guitar = \relative c' { - r8 ~ q4 q8~ q q4 + r8 ~ q4 q8~ 8 q4 } \new StaffGroup << @@ -309,7 +309,7 @@ gesetzt. Das gilt auch für die zweite Klammer einer Wiederholung. ties = \relative c' { \repeat volta 2 { e2. f4~ - f2 g2~ + 2 g2~ } \alternative { { g4 f2. } @@ -349,7 +349,7 @@ Bundnummern in Klammern gesetzt werden: ties = \relative c' { \repeat volta 2 { e2. f4~ - f2 g2~ } + 2 g2~ } \alternative { { g4 f2. } { g4\repeatTie c,2. } diff --git a/Documentation/de/notation/input.itely b/Documentation/de/notation/input.itely index 5b159b1a05..ff1b13fba2 100644 --- a/Documentation/de/notation/input.itely +++ b/Documentation/de/notation/input.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes. @end ignore -@c \version "2.17.6" +@c \version "2.19.2" @c Translators: Till Paala @@ -2266,7 +2266,7 @@ im Gesangstext und als normaler Text außerhalb der Partitur. } \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 @@ -2919,8 +2919,8 @@ auf den Bereich zwischen 0.2 und 0.5 eingeschränkt. \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 { @@ -2970,8 +2970,8 @@ diese Einstellung korrekt funktioniert. \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 { @@ -3043,8 +3043,8 @@ Lautstärkewerte, die denen des vorigen Beispiels entsprechen. \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 { diff --git a/Documentation/de/notation/percussion.itely b/Documentation/de/notation/percussion.itely index 786ba54c4f..02e265c921 100644 --- a/Documentation/de/notation/percussion.itely +++ b/Documentation/de/notation/percussion.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @c Translators: Till Paala @@ -517,7 +517,7 @@ bellstaff = { \drummode { \time 2/4 rb8 rb cb cb16 rb-> ~ | - rb16 rb8 rb16 cb8 cb | + 16 rb8 rb16 cb8 cb | } } @end lilypond diff --git a/Documentation/de/notation/pitches.itely b/Documentation/de/notation/pitches.itely index 70129c81c7..bfe3fa73c7 100644 --- a/Documentation/de/notation/pitches.itely +++ b/Documentation/de/notation/pitches.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.18" +@c \version "2.19.2" @c Translators: Till Paala @@ -417,7 +417,7 @@ Versetzungzeichen von übergebundenen Noten werden nur dann gesetzt, wenn ein neues System begonnen wird: @lilypond[verbatim,quote,relative=2] -cis1~ cis~ +cis1~ 1~ \break cis @end lilypond @@ -3066,8 +3066,8 @@ benutzt werden: 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 } diff --git a/Documentation/de/notation/repeats.itely b/Documentation/de/notation/repeats.itely index 2e2d5198cf..25c3c7c042 100644 --- a/Documentation/de/notation/repeats.itely +++ b/Documentation/de/notation/repeats.itely @@ -459,12 +459,6 @@ voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } @end lilypond -@snippets - -@lilypondfile[verbatim,quote,texidoc,doctitle] -{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly} - - @seealso Notationsreferenz: @ref{Taktstriche}, diff --git a/Documentation/de/notation/rhythms.itely b/Documentation/de/notation/rhythms.itely index 5a8bb1adc8..e1d0ea5e93 100644 --- a/Documentation/de/notation/rhythms.itely +++ b/Documentation/de/notation/rhythms.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @c Translators: Till Paala @@ -434,7 +434,7 @@ Ein Bindebogen wird mit der 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 @@ -445,8 +445,8 @@ inneren Unterteilungen von Takten hinüberreichen: @lilypond[quote] \relative c' { - r8 c8 ~ c2 r4 | - r8^"not" c2 ~ c8 r4 + r8 c8 ~ 2 r4 | + r8^"not" c2 ~ 8 r4 } @end lilypond @@ -537,26 +537,26 @@ von Strichen und durchgehender Linie definiert werden. @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 diff --git a/Documentation/de/notation/simultaneous.itely b/Documentation/de/notation/simultaneous.itely index 1eb7afce45..d55ef16849 100644 --- a/Documentation/de/notation/simultaneous.itely +++ b/Documentation/de/notation/simultaneous.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes. @end ignore -@c \version "2.17.28" +@c \version "2.19.2" @c Translators: Till Paala @@ -418,7 +418,7 @@ ist im Beispiel unten dargestellt: \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 @@ -499,7 +499,7 @@ Das erste Beispiel könnte also auch wie folgt notiert werden: << { 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 @@ -1154,12 +1154,12 @@ die Takte müssen die gleiche Länge haben.} \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 | } @@ -1180,12 +1180,12 @@ relative Noten von @code{voiceA} die Noten von @code{voiceB}. \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 | } diff --git a/Documentation/de/notation/staff.itely b/Documentation/de/notation/staff.itely index 1c694be3a4..e2e8895aad 100644 --- a/Documentation/de/notation/staff.itely +++ b/Documentation/de/notation/staff.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @c Translators: Till Paala @@ -1087,7 +1087,7 @@ wird dann benutzt, um den Wechsel vorzunehmen: R1*16 \instrumentSwitch "contrabassoon" c,,2 g \break - c,1 ~ | c1 + c,1 ~ | 1 } @end lilypond diff --git a/Documentation/de/notation/vocal.itely b/Documentation/de/notation/vocal.itely index 5e81851fe6..79428ef579 100644 --- a/Documentation/de/notation/vocal.itely +++ b/Documentation/de/notation/vocal.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @c Translators: Till Paala @@ -677,8 +677,8 @@ Melismen werden automatisch zu Noten erstellt, die übergebunden sind: \new Voice = "melody" { \time 3/4 f4 g2 ~ | - g4 e2 ~ | - e8 + 4 e2 ~ | + 8 } \new Lyrics \lyricsto "melody" { Ky -- ri -- e __ @@ -780,7 +780,7 @@ benutzen, ohne dass sie Melismen bezeichnen, wenn \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 @@ -808,7 +808,7 @@ angegeben werden: \time 3/4 \set melismaBusyProperties = #'() c4 d ( e ) - g8 [ f ] ~ f4 ~ f + g8 [ f ] ~ 4 ~ f } \new Lyrics \lyricsto "melody" { Ky -- ri -- _ e __ _ _ _ diff --git a/Documentation/de/search-box.ihtml b/Documentation/de/search-box.ihtml index 452f275938..5e7222b839 100644 --- a/Documentation/de/search-box.ihtml +++ b/Documentation/de/search-box.ihtml @@ -16,11 +16,11 @@ search for a while and have a redirection from "v2.15" to "v2.17".
diff --git a/Documentation/de/usage.tely b/Documentation/de/usage.tely index b448e74e90..3bb9e68a01 100644 --- a/Documentation/de/usage.tely +++ b/Documentation/de/usage.tely @@ -23,7 +23,7 @@ vorgestellt. @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 diff --git a/Documentation/de/web.texi b/Documentation/de/web.texi index c830355094..b8fa61a886 100644 --- a/Documentation/de/web.texi +++ b/Documentation/de/web.texi @@ -17,7 +17,7 @@ @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 @@ -37,7 +37,7 @@ @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 diff --git a/Documentation/es/essay.tely b/Documentation/es/essay.tely index 4b8372865b..7a61fa2876 100644 --- a/Documentation/es/essay.tely +++ b/Documentation/es/essay.tely @@ -22,7 +22,7 @@ dentro de LilyPond version @version{}. @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 diff --git a/Documentation/es/essay/engraving.itely b/Documentation/es/essay/engraving.itely index 46431c73f7..7f78637b78 100644 --- a/Documentation/es/essay/engraving.itely +++ b/Documentation/es/essay/engraving.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @node Grabado musical @chapter Grabado musical @@ -922,7 +922,7 @@ collide = \once \override NoteColumn.force-hshift = #0 \new Voice { \voiceTwo bes \collide bes } >> } - \new Lyrics \lyricsto "sample" \lyricmode { "bien " " mal" } + \new Lyrics \lyricsto "sample" { "bien " " mal" } >> } @end lilypond @@ -1772,9 +1772,9 @@ partI = \relative c' { 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 "|." } @@ -1783,7 +1783,7 @@ partII = \relative c' { 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. 8 r r 4 d2 @@ -1791,7 +1791,7 @@ partII = \relative c' { 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 @@ -1802,7 +1802,7 @@ partIV = \relative c { 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 diff --git a/Documentation/es/extending.tely b/Documentation/es/extending.tely index 9d7b9071a5..6a53d656b0 100644 --- a/Documentation/es/extending.tely +++ b/Documentation/es/extending.tely @@ -22,7 +22,7 @@ LilyPond versión @version{}. @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 diff --git a/Documentation/es/extending/programming-interface.itely b/Documentation/es/extending/programming-interface.itely index 9130771ab4..726f316dca 100644 --- a/Documentation/es/extending/programming-interface.itely +++ b/Documentation/es/extending/programming-interface.itely @@ -7,7 +7,7 @@ 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 @@ -1537,7 +1537,7 @@ arriba. \override Tie.after-line-breaking = #my-callback c1 ~ \break - c2 ~ c + c2 ~ 2 } @end lilypond diff --git a/Documentation/es/learning.tely b/Documentation/es/learning.tely index 8472fd6f5b..5f63dc4e46 100644 --- a/Documentation/es/learning.tely +++ b/Documentation/es/learning.tely @@ -20,7 +20,7 @@ Este archivo ofrece una introducción al programa LilyPond versión @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 diff --git a/Documentation/es/learning/common-notation.itely b/Documentation/es/learning/common-notation.itely index 487ce0e3da..7e9e8a4e76 100644 --- a/Documentation/es/learning/common-notation.itely +++ b/Documentation/es/learning/common-notation.itely @@ -7,7 +7,7 @@ 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!) @@ -309,7 +309,7 @@ Una @notation{ligadura de unión} se crea adjuntando un carácter de 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 @@ -367,7 +367,7 @@ sobre grupos mayores de notas. Las ligaduras de unión y 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 @@ -1279,7 +1279,7 @@ el aria de Fígaro @notation{Largo al factotum}: \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à @@ -1310,7 +1310,7 @@ del @notation{Judas Macabeo} de Haendel: \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, __ diff --git a/Documentation/es/learning/fundamental.itely b/Documentation/es/learning/fundamental.itely index e954d9710e..d4b4ae4dad 100644 --- a/Documentation/es/learning/fundamental.itely +++ b/Documentation/es/learning/fundamental.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.29" +@c \version "2.19.2" @node Conceptos fundamentales @chapter Conceptos fundamentales @@ -726,7 +726,7 @@ correcta. 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 @@ -765,7 +765,7 @@ construcciones, como se indica aquí en la voz de triángulos azules. { d2 e } \\ % Voice 2 continues - { c8 b16 a b8 g~ g2 } + { c8 b16 a b8 g~ 2 } \\ { \voiceThreeStyle @@ -1050,25 +1050,25 @@ las ligaduras de unión y de expresión y las indicaciones de dinámica: @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 @@ -1098,7 +1098,7 @@ pueda trazar una ligadura por encima de ellas. \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 { @@ -1129,7 +1129,7 @@ de tipografiar la música. \voiceTwo r8 e4 d c8~ | << - { c8 b16 a b8 g~ g2 | } + { c8 b16 a b8 g~ 2 | } \new Voice { \voiceThree s4 b c2 | @@ -1159,7 +1159,7 @@ que una voz está en silencio, como aquí: \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 { @@ -1301,7 +1301,7 @@ no como música. 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, __ @@ -3029,15 +3029,15 @@ ManualOneVoiceOneMusic = \relative g' { 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 | } diff --git a/Documentation/es/learning/tweaks.itely b/Documentation/es/learning/tweaks.itely index 87be1fdb1e..20a4baf477 100644 --- a/Documentation/es/learning/tweaks.itely +++ b/Documentation/es/learning/tweaks.itely @@ -8,7 +8,7 @@ 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 @@ -3353,12 +3353,12 @@ choca con las ligaduras: { \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'' } >> @@ -3377,7 +3377,7 @@ central hasta, digamos, 1 espacio: { \time 4/2 << - { c'1 ~ c'2. e'8 f' } + { c'1 ~ 2. e'8 f' } \\ { \override Beam.positions = #'(-1 . -1) @@ -3385,7 +3385,7 @@ central hasta, digamos, 1 espacio: } >> << - { 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'' } >> @@ -3579,7 +3579,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3637,7 +3637,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3713,7 +3713,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3796,7 +3796,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -4035,7 +4035,7 @@ pueden conectar mediante ligaduras de unión dos notas que estén en la 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 @@ -4049,7 +4049,7 @@ de que la ligadura se cruza entre las voces: << { \tweak Stem.transparent ##t - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -4065,7 +4065,7 @@ valor de longitud @code{length} a @code{8}, { \tweak Stem.transparent ##t \tweak Stem.length #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -4089,7 +4089,7 @@ volver a escribir el ejemplo anterior como \single \hide Stem \single \hide Flag \tweak Stem.length #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } diff --git a/Documentation/es/notation.tely b/Documentation/es/notation.tely index 502355754a..e70bbd7eac 100644 --- a/Documentation/es/notation.tely +++ b/Documentation/es/notation.tely @@ -22,7 +22,7 @@ lector está familiarizado con el material que hay en @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 diff --git a/Documentation/es/notation/changing-defaults.itely b/Documentation/es/notation/changing-defaults.itely index 040403915e..d872f33819 100644 --- a/Documentation/es/notation/changing-defaults.itely +++ b/Documentation/es/notation/changing-defaults.itely @@ -8,7 +8,7 @@ Translation of GIT committish: a43fe59b0205af99f84532935b103d0c064b4526 Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.7" @node Cambiar los valores por omisión @chapter Cambiar los valores por omisión @@ -1959,7 +1959,7 @@ carácter almohadilla,@tie{}@code{#}. El nombre de las propiedades de contexto suele ir en minúsculas con mayúscula en medio. Controlan sobre todo la traducción de la música a -la notación, p.ej. @code{localKeySignature} (para determinar si hay +la notación, p.ej. @code{localAlterations} (para determinar si hay que impriir alteraciones o no), o @code{measurePosition} (para determinar cuándo hay que imprimir una línea divisoria). El valor de las propiedades de contexto puede modifcarse con el tiempo durante la @@ -2629,7 +2629,7 @@ individualmente con una declaración anidada. @warning{Las declaraciones anidadas no funcionan para las listas-A de propiedades de contexto (como @code{beamExceptions}, -@code{keySignature}, @code{timeSignatureSettings}, etc.). Estas +@code{keyAlterations}, @code{timeSignatureSettings}, etc.). Estas propiedades sólo se pueden modificar redefiniéndolas completamente como listas-A.} @@ -4346,7 +4346,7 @@ resulta óptima, y @code{\tieDown} no es la solución. @lilypond[verbatim,quote,relative=1] << - { e1~ e } + { e1~ 1 } \\ { r4 } >> @@ -4393,7 +4393,7 @@ mitad de un espacio de pentagrama: << { \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie - e1~ e + e1~ 1 } \\ { r4 } diff --git a/Documentation/es/notation/fretted-strings.itely b/Documentation/es/notation/fretted-strings.itely index 1a5699dd5d..27ef24f0b2 100644 --- a/Documentation/es/notation/fretted-strings.itely +++ b/Documentation/es/notation/fretted-strings.itely @@ -8,7 +8,7 @@ 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 @@ -195,7 +195,7 @@ symbols = { c4-.^"Allegro" d( e) f4-.\f g a^\fermata \mark \default - c8_.\<\( c16 c~ c2\! + c8_.\<\( c16 c~ 2\! c'2.\prall\) } @@ -221,7 +221,7 @@ symbols = { c4-.^"Allegro" d( e) f4-.\f g a^\fermata \mark \default - c8_.\<\( c16 c~ c2\! + c8_.\<\( c16 c~ 2\! c'2.\prall\) } @@ -290,7 +290,7 @@ es tan común que está disponible como @code{\tabChordRepeats}. @lilypond[quote,verbatim] guitar = \relative c' { - r8 ~ q4 q8~ q q4 + r8 ~ q4 q8~ 8 q4 } \new StaffGroup << @@ -312,7 +312,7 @@ una repetición. ties = \relative c' { \repeat volta 2 { e2. f4~ - f2 g2~ + 2 g2~ } \alternative { { g4 f2. } @@ -352,7 +352,7 @@ de imprimir los números de traste entre paréntesis: ties = \relative c' { \repeat volta 2 { e2. f4~ - f2 g2~ } + 2 g2~ } \alternative { { g4 f2. } { g4\repeatTie c,2. } diff --git a/Documentation/es/notation/input.itely b/Documentation/es/notation/input.itely index 8d44e209eb..1a8d64e760 100644 --- a/Documentation/es/notation/input.itely +++ b/Documentation/es/notation/input.itely @@ -8,7 +8,7 @@ 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 @@ -2543,7 +2543,7 @@ partitura: } \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 @@ -3194,8 +3194,8 @@ volumen general MIDI está limitado al intervalo desde 0.2 hasta \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 { @@ -3244,8 +3244,8 @@ de la flauta. \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 { @@ -3319,8 +3319,8 @@ anterior. \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 { diff --git a/Documentation/es/notation/percussion.itely b/Documentation/es/notation/percussion.itely index 45be96ecd9..c83c4a4c93 100644 --- a/Documentation/es/notation/percussion.itely +++ b/Documentation/es/notation/percussion.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @node Percusión @section Percusión @@ -527,7 +527,7 @@ bellstaff = { \drummode { \time 2/4 rb8 rb cb cb16 rb-> ~ | - rb16 rb8 rb16 cb8 cb | + 16 rb8 rb16 cb8 cb | } } @end lilypond diff --git a/Documentation/es/notation/pitches.itely b/Documentation/es/notation/pitches.itely index da52953fd2..86c17e91e8 100644 --- a/Documentation/es/notation/pitches.itely +++ b/Documentation/es/notation/pitches.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.18" +@c \version "2.19.2" @node Alturas @@ -412,7 +412,7 @@ Las alteraciones sobre notas unidas por ligadura sólo se imprimen al comienzo de un sistema: @lilypond[verbatim,quote,relative=2,ragged-right] -cis1~ cis~ +cis1~ 1~ \break cis @end lilypond @@ -3102,8 +3102,8 @@ pero con el ritmo especificado. Estas cabezas de nota se crean así: 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 } diff --git a/Documentation/es/notation/repeats.itely b/Documentation/es/notation/repeats.itely index 8bddbed0ab..c13b47241b 100644 --- a/Documentation/es/notation/repeats.itely +++ b/Documentation/es/notation/repeats.itely @@ -547,11 +547,6 @@ voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } @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}, diff --git a/Documentation/es/notation/rhythms.itely b/Documentation/es/notation/rhythms.itely index 9b1454e584..3401297548 100644 --- a/Documentation/es/notation/rhythms.itely +++ b/Documentation/es/notation/rhythms.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @node Duraciones @section Duraciones @@ -439,7 +439,7 @@ notas que se quieren unir. Esto indica que la nota se une a la 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 @@ -450,8 +450,8 @@ subdivisiones del compás de mayor duración: @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 @@ -539,26 +539,26 @@ punteadas o una combinación de continuas y discontinuas. @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 diff --git a/Documentation/es/notation/simultaneous.itely b/Documentation/es/notation/simultaneous.itely index 3bd67079ad..f156efd7e2 100644 --- a/Documentation/es/notation/simultaneous.itely +++ b/Documentation/es/notation/simultaneous.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.28" +@c \version "2.19.2" @c Translation status: post-GDP @@ -412,7 +412,7 @@ siguiente: \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 @@ -491,7 +491,7 @@ El primer ejemplo podría haberse tipografiado de la manera siguiente: << { 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 @@ -1157,12 +1157,12 @@ los compases deben tener la misma longitud.} \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 | } @@ -1183,12 +1183,12 @@ ignoran a las notas que hay en @code{vozB}. \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 | } diff --git a/Documentation/es/notation/staff.itely b/Documentation/es/notation/staff.itely index c642b6e389..deb2c4b0c5 100644 --- a/Documentation/es/notation/staff.itely +++ b/Documentation/es/notation/staff.itely @@ -7,7 +7,7 @@ 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 @@ -1061,7 +1061,7 @@ musical para declarar el cambio de instrumento: R1*16 \instrumentSwitch "contrabassoon" c,,2 g \break - c,1 ~ | c1 + c,1 ~ | 1 } @end lilypond diff --git a/Documentation/es/notation/vocal.itely b/Documentation/es/notation/vocal.itely index b03d0e0aff..02082914d7 100644 --- a/Documentation/es/notation/vocal.itely +++ b/Documentation/es/notation/vocal.itely @@ -8,7 +8,7 @@ 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 @@ -683,8 +683,8 @@ ligadura de unión: \new Voice = "melody" { \time 3/4 f4 g2 ~ | - g4 e2 ~ | - e8 + 4 e2 ~ | + 8 } \new Lyrics \lyricsto "melody" { Ky -- ri -- e __ @@ -785,7 +785,7 @@ de @code{melismaBusyProperties}: \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 @@ -814,7 +814,7 @@ dentro del melisma: \time 3/4 \set melismaBusyProperties = #'() c4 d ( e ) - g8 [ f ] ~ f4 ~ f + g8 [ f ] ~ 4 ~ f } \new Lyrics \lyricsto "melody" { Ky -- ri -- _ e __ _ _ _ diff --git a/Documentation/es/search-box.ihtml b/Documentation/es/search-box.ihtml index 51674e2cf1..2a2d0b9866 100644 --- a/Documentation/es/search-box.ihtml +++ b/Documentation/es/search-box.ihtml @@ -14,11 +14,11 @@ search for a while and have a redirection from "v2.15" to "v2.17". diff --git a/Documentation/es/usage.tely b/Documentation/es/usage.tely index e967ffcd6f..fc7af74960 100644 --- a/Documentation/es/usage.tely +++ b/Documentation/es/usage.tely @@ -23,7 +23,7 @@ prácticas} para una utilización eficiente. @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 diff --git a/Documentation/es/web.texi b/Documentation/es/web.texi index 0a7d72b1b9..043631e799 100644 --- a/Documentation/es/web.texi +++ b/Documentation/es/web.texi @@ -15,7 +15,7 @@ @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 @@ -35,7 +35,7 @@ @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 diff --git a/Documentation/essay.tely b/Documentation/essay.tely index 66d5b5be1b..2bd95e7571 100644 --- a/Documentation/essay.tely +++ b/Documentation/essay.tely @@ -20,7 +20,7 @@ LilyPond version @version{}. @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 diff --git a/Documentation/essay/engraving.itely b/Documentation/essay/engraving.itely index 16f3518d56..5040f2771b 100644 --- a/Documentation/essay/engraving.itely +++ b/Documentation/essay/engraving.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @node Music engraving @chapter Music engraving @@ -860,7 +860,7 @@ collide = \once \override NoteColumn.force-hshift = #0 \new Voice { \voiceTwo bes \collide bes } >> } - \new Lyrics \lyricsto "sample" \lyricmode { "good " " bad" } + \new Lyrics \lyricsto "sample" { "good " " bad" } >> } @end lilypond @@ -1664,9 +1664,9 @@ partI = \relative c' { 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 "|." } @@ -1675,7 +1675,7 @@ partII = \relative c' { 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. 8 r r 4 d2 @@ -1683,7 +1683,7 @@ partII = \relative c' { 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 @@ -1694,7 +1694,7 @@ partIV = \relative c { 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 diff --git a/Documentation/extending.tely b/Documentation/extending.tely index 6de5dbb4ea..3a65c0d30b 100644 --- a/Documentation/extending.tely +++ b/Documentation/extending.tely @@ -20,7 +20,7 @@ LilyPond version @version{}. @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 diff --git a/Documentation/extending/programming-interface.itely b/Documentation/extending/programming-interface.itely index e580f29b63..3494a5fdd1 100644 --- a/Documentation/extending/programming-interface.itely +++ b/Documentation/extending/programming-interface.itely @@ -8,7 +8,7 @@ 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 @@ -25,7 +25,6 @@ not familiar with Scheme, you may wish to read our * Markup functions:: * Contexts for programmers:: * Callback functions:: -* Inline Scheme code:: * Difficult tweaks:: @end menu @@ -179,13 +178,7 @@ strings (with or without quotes), numbers, full markups and markup 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 @@ -196,8 +189,8 @@ lookahead. 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. @@ -1310,8 +1303,10 @@ my-callback = #(lambda (grob) (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 @@ -1358,6 +1353,7 @@ font size is prepended to the property list with the 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 @@ -1422,7 +1418,7 @@ of the broken tie is repositioned. \override Tie.after-line-breaking = #my-callback c1 ~ \break - c2 ~ c + c2 ~ 2 } @end lilypond diff --git a/Documentation/extending/scheme-tutorial.itely b/Documentation/extending/scheme-tutorial.itely index bad8d261b2..7503306b1f 100644 --- a/Documentation/extending/scheme-tutorial.itely +++ b/Documentation/extending/scheme-tutorial.itely @@ -1134,23 +1134,30 @@ will display 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: diff --git a/Documentation/fr/essay.tely b/Documentation/fr/essay.tely index 8d57136cb6..e74dde1f54 100644 --- a/Documentation/fr/essay.tely +++ b/Documentation/fr/essay.tely @@ -23,7 +23,7 @@ par ordinateur à l'aide de LilyPond version @version{}. @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 diff --git a/Documentation/fr/essay/engraving.itely b/Documentation/fr/essay/engraving.itely index 79e8815656..43243a89bd 100644 --- a/Documentation/fr/essay/engraving.itely +++ b/Documentation/fr/essay/engraving.itely @@ -8,7 +8,7 @@ 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 @@ -934,7 +934,7 @@ collide = \once \override NoteColumn.force-hshift = #0 \new Voice { \voiceTwo bes \collide bes } >> } - \new Lyrics \lyricsto "sample" \lyricmode { "bien " " mauvais" } + \new Lyrics \lyricsto "sample" { "bien " " mauvais" } >> } @end lilypond @@ -1776,9 +1776,9 @@ partI = \relative c' { 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 "|." } @@ -1787,7 +1787,7 @@ partII = \relative c' { 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. 8 r r 4 d2 @@ -1795,7 +1795,7 @@ partII = \relative c' { 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 @@ -1806,7 +1806,7 @@ partIV = \relative c { 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 diff --git a/Documentation/fr/extending.tely b/Documentation/fr/extending.tely index 221ce450bd..aaa16e70f9 100644 --- a/Documentation/fr/extending.tely +++ b/Documentation/fr/extending.tely @@ -22,7 +22,7 @@ fonctionnalités de LilyPond@tie{}version @version{}. @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 diff --git a/Documentation/fr/extending/programming-interface.itely b/Documentation/fr/extending/programming-interface.itely index c19026199b..32d07e53ef 100644 --- a/Documentation/fr/extending/programming-interface.itely +++ b/Documentation/fr/extending/programming-interface.itely @@ -8,7 +8,7 @@ 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 @@ -1565,7 +1565,7 @@ rehaussé. \override Tie.after-line-breaking = #my-callback c1 ~ \break - c2 ~ c + c2 ~ 2 } @end lilypond diff --git a/Documentation/fr/learning.tely b/Documentation/fr/learning.tely index 248ab04fe4..4ae8bada5e 100644 --- a/Documentation/fr/learning.tely +++ b/Documentation/fr/learning.tely @@ -20,7 +20,7 @@ Ce document constitue le manuel d'initiation à GNU 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 diff --git a/Documentation/fr/learning/common-notation.itely b/Documentation/fr/learning/common-notation.itely index 7ce9e53cc1..46548572f0 100644 --- a/Documentation/fr/learning/common-notation.itely +++ b/Documentation/fr/learning/common-notation.itely @@ -26,7 +26,7 @@ Tutorial guidelines: (different from policy.txt!) @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 @@ -313,7 +313,7 @@ liaison de tenue --, on ajoute un tilde @code{~} à la première note liée. @lilypond[verbatim,quote,relative=2] -g4~ g c2~ | c4 ~ c8 a8 ~ a2 | +g4~ 4 c2~ | 4 ~ 8 a8 ~ 2 | @end lilypond @@ -381,7 +381,7 @@ le @emph{legato} indique une articulation de plusieurs notes, 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 @@ -1289,7 +1289,7 @@ la syllabe @emph{al} est chantée sur la même note que @emph{go}. \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à @@ -1319,7 +1319,7 @@ L'exemple suivant est extrait de @emph{Judas Macchabée} de Händel. \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, __ diff --git a/Documentation/fr/learning/fundamental.itely b/Documentation/fr/learning/fundamental.itely index 2c5d287a5a..b838285a19 100644 --- a/Documentation/fr/learning/fundamental.itely +++ b/Documentation/fr/learning/fundamental.itely @@ -8,7 +8,7 @@ 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 @@ -710,7 +710,7 @@ automatiquement. 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 @@ -749,7 +749,7 @@ liaison de prolongation entre deux constructions. { d2 e } \\ % Voice 2 continues - { c8 b16 a b8 g~ g2 } + { c8 b16 a b8 g~ 2 } \\ { \voiceThreeStyle @@ -1032,25 +1032,25 @@ annotations, liaisons de prolongation ou de phrasé, et sur les nuances. @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 @@ -1080,7 +1080,7 @@ liaison de phrasé à l'ensemble. \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 { @@ -1110,7 +1110,7 @@ plus naturelle de saisir la musique : \voiceTwo r8 e4 d c8~ | << - { c8 b16 a b8 g~ g2 | } + { c8 b16 a b8 g~ 2 | } \new Voice { \voiceThree s4 b c2 | @@ -1141,7 +1141,7 @@ voix. \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 { @@ -1289,7 +1289,7 @@ seront interprétées comme telles, et non comme de la musique. 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, __ @@ -2994,15 +2994,15 @@ ManualOneVoiceOneMusic = \relative g' { 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 | } diff --git a/Documentation/fr/learning/tweaks.itely b/Documentation/fr/learning/tweaks.itely index 65a6c2223d..616c31fe48 100644 --- a/Documentation/fr/learning/tweaks.itely +++ b/Documentation/fr/learning/tweaks.itely @@ -8,7 +8,7 @@ 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 @@ -3323,12 +3323,12 @@ ligature chevauchent les liaisons de tenue : { \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'' } >> @@ -3347,7 +3347,7 @@ au-dessous de la ligne médiane mais, disons, à 1 : { \time 4/2 << - { c'1 ~ c'2. e'8 f' } + { c'1 ~ 2. e'8 f' } \\ { \override Beam.positions = #'(-1 . -1) @@ -3355,7 +3355,7 @@ au-dessous de la ligne médiane mais, disons, à 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'' } >> @@ -3550,7 +3550,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3610,7 +3610,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3684,7 +3684,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3767,7 +3767,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -4008,7 +4008,7 @@ peuvent être ainsi liées. La solution consiste à utiliser deux voix, 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 @@ -4022,7 +4022,7 @@ on a alors l'impression que la liaison couvre les deux voix. << { \tweak Flag.transparent ##t - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -4038,7 +4038,7 @@ réglant la longueur (@code{length}) sur @code{8}, { \tweak Flag.transparent ##t \tweak Stem.length #8 - b8~ b8\noBeam + b8~ 8\noBeam } \\ { b[ g8] } @@ -4063,7 +4063,7 @@ l'exemple précédent de cette manière : \single \hide Stem \single \hide Flag \tweak Stem.length #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } diff --git a/Documentation/fr/notation.tely b/Documentation/fr/notation.tely index f76b7c3bfd..749936a9f1 100644 --- a/Documentation/fr/notation.tely +++ b/Documentation/fr/notation.tely @@ -21,7 +21,7 @@ présenté dans le @rlearningnamed{Top, Manuel d'initiation}. @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 diff --git a/Documentation/fr/notation/changing-defaults.itely b/Documentation/fr/notation/changing-defaults.itely index f18c85a0ca..e866031266 100644 --- a/Documentation/fr/notation/changing-defaults.itely +++ b/Documentation/fr/notation/changing-defaults.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.7" @c Translators: Valentin Villenave, Jean-Charles Malahieude @c Translation checkers: Gilles Thibault @@ -2099,7 +2099,7 @@ doit être précédée du caractère @code{#}. Les propriétés des contextes se libellent sous la forme @code{minusculeMajuscule}. Leur rôle consiste principalement à traduire -la musique en notation : par exemple, @code{localKeySignature} +la musique en notation : par exemple, @code{localAlterations} déterminera quand imprimer une altération accidentelle, et @code{measurePosition} quand imprimer une barre de mesure. La valeur des propriétés des contextes peuvent évoluer au fur et à mesure que l'on @@ -2773,7 +2773,7 @@ valeur des clés individuellement par des déclarations imbriquées. @warning{Les déclarations imbriquées ne sont pas fonctionnelles dans le cas des listes associatives des propriétés de contexte -- telles -@code{beamExceptions}, @code{keySignature}, +@code{beamExceptions}, @code{keyAlterations}, @code{timeSignatureSettings}, etc. Ces propriétés ne sont modifiables qu'au travers d'une complète redéfinition de leur liste associative.} @@ -4465,7 +4465,7 @@ des plus heureuses, même en optant pour un @code{\tieDown}. @lilypond[verbatim,quote,relative=1] << - { e1~ e } + { e1~ 1 } \\ { r4 } >> @@ -4513,7 +4513,7 @@ de portée : << { \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie - e1~ e + e1~ 1 } \\ { r4 } diff --git a/Documentation/fr/notation/fretted-strings.itely b/Documentation/fr/notation/fretted-strings.itely index d12922abcf..e8f891d7ec 100644 --- a/Documentation/fr/notation/fretted-strings.itely +++ b/Documentation/fr/notation/fretted-strings.itely @@ -8,7 +8,7 @@ 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 @@ -194,7 +194,7 @@ symbols = { c4-.^"Allegro" d( e) f4-.\f g a^\fermata \mark \default - c8_.\<\( c16 c ~ c2\! + c8_.\<\( c16 c ~ 2\! c'2.\prall\) } @@ -220,7 +220,7 @@ symbols = { c4-.^"Allegro" d( e) f4-.\f g a^\fermata \mark \default - c8_.\<\( c16 c ~ c2\! + c8_.\<\( c16 c ~ 2\! c'2.\prall\) } @@ -290,7 +290,7 @@ instruction est abrégée en @code{\tabChordRepeats}. @lilypond[quote,verbatim] guitar = \relative c' { - r8 ~ q4 q8~ q q4 + r8 ~ q4 q8~ 8 q4 } \new StaffGroup << @@ -312,7 +312,7 @@ seconde alternative d'une répétition. ties = \relative c' { \repeat volta 2 { e2. f4~ - f2 g2~ + 2 g2~ } \alternative { { g4 f2. } @@ -352,7 +352,7 @@ ces cases entre parenthèses. ties = \relative c' { \repeat volta 2 { e2. f4~ - f2 g2~ } + 2 g2~ } \alternative { { g4 f2. } { g4\repeatTie c,2. } diff --git a/Documentation/fr/notation/input.itely b/Documentation/fr/notation/input.itely index 4997c79fd7..bf14fda191 100644 --- a/Documentation/fr/notation/input.itely +++ b/Documentation/fr/notation/input.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.11" +@c \version "2.19.2" @c Translators: Jean-Charles Malahieude, Valentin Villenave @@ -2546,7 +2546,7 @@ dans des paroles et dans du texte indépendant. } \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } } } -\markup { "Copyright 2008--2012" \char ##x00A9 } +\markup { "Copyright 2008--2014" \char ##x00A9 } @end lilypond @cindex copyright @@ -3227,8 +3227,8 @@ entre 0,2 et 0,5 : \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 { @@ -3279,8 +3279,8 @@ indication de nuance. \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 { @@ -3351,8 +3351,8 @@ flûte et de la clarinette -- au même niveau que dans le précédent. \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 { diff --git a/Documentation/fr/notation/percussion.itely b/Documentation/fr/notation/percussion.itely index efd35e268a..c7fddc6dd7 100644 --- a/Documentation/fr/notation/percussion.itely +++ b/Documentation/fr/notation/percussion.itely @@ -8,7 +8,7 @@ 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 @@ -532,7 +532,7 @@ bellstaff = { \drummode { \time 2/4 rb8 rb cb cb16 rb-> ~ | - rb16 rb8 rb16 cb8 cb | + 16 rb8 rb16 cb8 cb | } } @end lilypond diff --git a/Documentation/fr/notation/pitches.itely b/Documentation/fr/notation/pitches.itely index f468db5728..1bf14e83c9 100644 --- a/Documentation/fr/notation/pitches.itely +++ b/Documentation/fr/notation/pitches.itely @@ -8,7 +8,7 @@ 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 @@ -403,7 +403,7 @@ Lorsqu'une note est prolongée par une liaison de tenue, l'altération ne 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 @@ -3027,8 +3027,8 @@ créées ainsi : 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 } diff --git a/Documentation/fr/notation/repeats.itely b/Documentation/fr/notation/repeats.itely index b385226f2e..2854b175c5 100644 --- a/Documentation/fr/notation/repeats.itely +++ b/Documentation/fr/notation/repeats.itely @@ -515,10 +515,6 @@ voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } } @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}, diff --git a/Documentation/fr/notation/rhythms.itely b/Documentation/fr/notation/rhythms.itely index a3c19f20e5..6f9bb8c17b 100644 --- a/Documentation/fr/notation/rhythms.itely +++ b/Documentation/fr/notation/rhythms.itely @@ -8,7 +8,7 @@ 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 @@ -443,7 +443,7 @@ notes à lier. Ceci indique que la note en question sera liée à la 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 @@ -454,8 +454,8 @@ longues doivent s'aligner sur les subdivisions de la mesure, comme ici : @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 @@ -543,26 +543,26 @@ continue, discontinue ou pointillée. @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 diff --git a/Documentation/fr/notation/simultaneous.itely b/Documentation/fr/notation/simultaneous.itely index d923420e91..dcb65711c3 100644 --- a/Documentation/fr/notation/simultaneous.itely +++ b/Documentation/fr/notation/simultaneous.itely @@ -7,7 +7,7 @@ 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 @@ -423,7 +423,7 @@ sur une portée est la suivante@tie{}: \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 @@ -504,7 +504,7 @@ sont réglés de manière appropriée. En voici un exemple : << { 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 @@ -1154,12 +1154,12 @@ les mesures doivent être de longueur identique.} \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 | } @@ -1179,12 +1179,12 @@ des lignes saisies@tie{}; en d'autres termes, les notes de la \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 | } diff --git a/Documentation/fr/notation/staff.itely b/Documentation/fr/notation/staff.itely index cfa27825a5..923cb212a0 100644 --- a/Documentation/fr/notation/staff.itely +++ b/Documentation/fr/notation/staff.itely @@ -8,7 +8,7 @@ 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 @@ -1063,7 +1063,7 @@ substitution : R1*16 \instrumentSwitch "contrabassoon" c,,2 g \break - c,1 ~ | c1 + c,1 ~ | 1 } @end lilypond diff --git a/Documentation/fr/notation/vocal.itely b/Documentation/fr/notation/vocal.itely index cd0b35afe9..5a8811d76c 100644 --- a/Documentation/fr/notation/vocal.itely +++ b/Documentation/fr/notation/vocal.itely @@ -8,7 +8,7 @@ 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 @@ -663,8 +663,8 @@ Une liaison de prolongation constitue de fait un mélisme : \new Voice = "melody" { \time 3/4 f4 g2 ~ | - g4 e2 ~ | - e8 + 4 e2 ~ | + 8 } \new Lyrics \lyricsto "melody" { Ky -- ri -- e __ @@ -768,7 +768,7 @@ définir @code{melismaBusyProperties} : \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 @@ -797,7 +797,7 @@ par un simple caractère souligné pour chaque note à inclure : \time 3/4 \set melismaBusyProperties = #'() c4 d ( e ) - g8 [ f ] ~ f4 ~ f + g8 [ f ] ~ 4 ~ f } \new Lyrics \lyricsto "melody" { Ky -- ri -- _ e __ _ _ _ diff --git a/Documentation/fr/search-box.ihtml b/Documentation/fr/search-box.ihtml index 4ea2fffbf0..ebc76b4c47 100644 --- a/Documentation/fr/search-box.ihtml +++ b/Documentation/fr/search-box.ihtml @@ -16,11 +16,11 @@ search for a while and have a redirection from "v2.15" to "v2.17". diff --git a/Documentation/fr/usage.tely b/Documentation/fr/usage.tely index 5cc71f37d7..9b40f59eac 100644 --- a/Documentation/fr/usage.tely +++ b/Documentation/fr/usage.tely @@ -23,7 +23,7 @@ pratiques} pour une utilisation plus efficace. @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 diff --git a/Documentation/fr/web.texi b/Documentation/fr/web.texi index 9f158a8c3d..4688a5df92 100644 --- a/Documentation/fr/web.texi +++ b/Documentation/fr/web.texi @@ -15,7 +15,7 @@ @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 @@ -37,7 +37,7 @@ @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 diff --git a/Documentation/hu/learning.tely b/Documentation/hu/learning.tely index 3477a361cc..6f026cc378 100644 --- a/Documentation/hu/learning.tely +++ b/Documentation/hu/learning.tely @@ -20,7 +20,7 @@ Ez a tankönyv a LilyPond @version{} verziójába nyújt bevezetést. @end macro @macro copyrightDeclare -Copyright @copyright{} 1999--2012 a szerzők. +Copyright @copyright{} 1999--2014 a szerzők. @end macro @set FDL diff --git a/Documentation/hu/learning/common-notation.itely b/Documentation/hu/learning/common-notation.itely index 29fb660a1a..95cebd4e56 100644 --- a/Documentation/hu/learning/common-notation.itely +++ b/Documentation/hu/learning/common-notation.itely @@ -9,7 +9,7 @@ @end ignore -@c \version "2.17.28" +@c \version "2.19.2" @node Elemi kottaírás @chapter Elemi kottaírás @@ -188,8 +188,8 @@ Fogalomtár: @rglos{tie}. 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 @@ -230,7 +230,7 @@ meg, és több hangot átívelhet. Természetesen egy kötőíven belül lehetne átkötött hangok. @lilypond[verbatim,quote,relative=2] -c2~( c8 fis fis4 ~ fis2 g2) +c2~( c8 fis fis4 ~ 2 g2) @end lilypond @@ -1017,7 +1017,7 @@ kezdetű áriájában a @notation{Largo} szó @notation{go} szótagját és az \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à @@ -1046,7 +1046,7 @@ mely Händel @notation{Júdás Makkabeus} c. oratóriumából való: \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, __ diff --git a/Documentation/hu/learning/fundamental.itely b/Documentation/hu/learning/fundamental.itely index 06ed20b8e0..69104f29c6 100644 --- a/Documentation/hu/learning/fundamental.itely +++ b/Documentation/hu/learning/fundamental.itely @@ -10,7 +10,7 @@ @c -*- coding: utf-8; mode: texinfo; -*- -@c \version "2.17.29" +@c \version "2.19.2" @node Alapfogalmak @chapter Alapfogalmak @translationof Fundamental concepts @@ -636,7 +636,7 @@ stems, ties, dynamics etc., is set appropriately. 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 @@ -674,7 +674,7 @@ blue triangle voice. { d2 e2 } \\ % Voice 2 continues - { c8 b16 a b8 g ~ g2 } + { c8 b16 a b8 g ~ 2 } \\ { \voiceThreeStyle @@ -955,25 +955,25 @@ markup, ties, slurs, and dynamics: @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 @@ -1002,7 +1002,7 @@ permitting a phrasing slur to be drawn over them. \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 { @@ -1033,7 +1033,7 @@ typeset the music: \voiceTwo r8 e4 d c8~ << - { c8 b16 a b8 g~ g2 } + { c8 b16 a b8 g~ 2 } \new Voice { \voiceThree s4 b4 c2 @@ -1064,7 +1064,7 @@ as here: \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 { @@ -1195,7 +1195,7 @@ rather than music. @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 { @@ -2979,15 +2979,15 @@ ManualOneVoiceOneMusic = \relative g' { 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 } diff --git a/Documentation/hu/search-box.ihtml b/Documentation/hu/search-box.ihtml index 6dc413f820..4b10a397f5 100644 --- a/Documentation/hu/search-box.ihtml +++ b/Documentation/hu/search-box.ihtml @@ -1,11 +1,11 @@ diff --git a/Documentation/hu/usage.tely b/Documentation/hu/usage.tely index c576311844..a8c50de969 100644 --- a/Documentation/hu/usage.tely +++ b/Documentation/hu/usage.tely @@ -23,7 +23,7 @@ használatához. @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 diff --git a/Documentation/hu/web.texi b/Documentation/hu/web.texi index b3136d49a3..f440ea23d7 100644 --- a/Documentation/hu/web.texi +++ b/Documentation/hu/web.texi @@ -17,7 +17,7 @@ @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 @@ -37,7 +37,7 @@ @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 diff --git a/Documentation/included/authors.itexi b/Documentation/included/authors.itexi index f0528c2df6..fa67b32769 100644 --- a/Documentation/included/authors.itexi +++ b/Documentation/included/authors.itexi @@ -45,10 +45,6 @@ @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 @@ -64,30 +60,15 @@ Build unentangler, Bug squad member @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 @@ -102,16 +83,6 @@ Main author @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 @@ -123,9 +94,6 @@ Core developer @item Francisco Vila: Translation Meister -@item Valentin Villenave: -LSR editor and Bug squad member - @item Janek Warchoł: happy nitpicker @@ -145,17 +113,38 @@ 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}, @@ -167,6 +156,9 @@ Bug meister @item Nicolas Sceaux: Core developer, Schemer extraordinaire +@item Valentin Villenave: +LSR editor and Bug squad member + @end itemize @end macro @@ -190,6 +182,7 @@ Benkő Pál, Anders Pilegaard, Julien Rioux, Johannes Rohrer, +Devon Schudy, Adam Spiers, Heikki Tauriainen @@ -234,9 +227,9 @@ Rodolfo Zitellini @c use commas not colons +Federico Bruni, Colin Campbell, Eluze, -Marc Hohl, Phil Holmes, Marek Klein, Ralph Palmer @@ -254,6 +247,7 @@ Colin Campbell, Eluze, Marc Hohl, Marek Klein, +Alex Loomis, Kieren MacMillan, Urs Liska, Ralph Palmer diff --git a/Documentation/included/generating-output.itexi b/Documentation/included/generating-output.itexi index 9fd3c62c7f..21969bf4f0 100644 --- a/Documentation/included/generating-output.itexi +++ b/Documentation/included/generating-output.itexi @@ -9,8 +9,8 @@ @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 @@ -80,8 +80,8 @@ may fail to generate an update PDF until you close the original. @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 @@ -163,10 +163,9 @@ while it is still being viewed. @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 diff --git a/Documentation/included/note-head-style.ly b/Documentation/included/note-head-style.ly index a786978734..0d2cabfcda 100644 --- a/Documentation/included/note-head-style.ly +++ b/Documentation/included/note-head-style.ly @@ -1,4 +1,4 @@ -\version "2.17.6" +\version "2.19.0" \header { texidoc=" @@ -25,11 +25,11 @@ dimensions. 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 "||" } >> diff --git a/Documentation/it/learning.tely b/Documentation/it/learning.tely index c47302550f..7f2b491c66 100644 --- a/Documentation/it/learning.tely +++ b/Documentation/it/learning.tely @@ -20,7 +20,7 @@ Questo file fornisce un'introduzione alla versione di LilyPond @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 diff --git a/Documentation/it/learning/common-notation.itely b/Documentation/it/learning/common-notation.itely index f7b7fa20db..787d382643 100644 --- a/Documentation/it/learning/common-notation.itely +++ b/Documentation/it/learning/common-notation.itely @@ -9,7 +9,7 @@ @end ignore -@c \version "2.17.28" +@c \version "2.19.2" @ignore Tutorial guidelines: (different from policy.txt!) @@ -286,7 +286,7 @@ Una @notation{legatura di valore} si ottiene apponendo una tilde @code{~} alla 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 @@ -339,7 +339,7 @@ con ampi gruppi di note. Legature di valore e 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 @@ -1219,7 +1219,7 @@ Ecco un esempio tratto dal @notation{Figaro} di Rossini, dove \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à @@ -1250,7 +1250,7 @@ più semplice, ovvero @code{\addlyrics}. Ecco un esempio tratto dal \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, __ diff --git a/Documentation/it/learning/fundamental.itely b/Documentation/it/learning/fundamental.itely index cdfbc30146..d52aabefec 100644 --- a/Documentation/it/learning/fundamental.itely +++ b/Documentation/it/learning/fundamental.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.29" +@c \version "2.19.2" @node Concetti fondamentali @chapter Concetti fondamentali @@ -685,7 +685,7 @@ legature di valore, dinamica, etc., è impostata correttamente. 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 @@ -723,7 +723,7 @@ voce con i triangoli blu. { d2 e } \\ % Voice 2 continues - { c8 b16 a b8 g~ g2 } + { c8 b16 a b8 g~ 2 } \\ { \voiceThreeStyle @@ -1001,25 +1001,25 @@ markup, legature di valore, legature di portamento, e dinamica: @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 @@ -1048,7 +1048,7 @@ sì che sia possibile disegnare una legatura di frase sopra di esse. \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 { @@ -1079,7 +1079,7 @@ di scrivere lo spartito: \voiceTwo r8 e4 d c8~ | << - { c8 b16 a b8 g~ g2 | } + { c8 b16 a b8 g~ 2 | } \new Voice { \voiceThree s4 b c2 | @@ -1109,7 +1109,7 @@ come nel seguente esempio: \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 { @@ -1244,7 +1244,7 @@ invece che come musica. 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, __ @@ -2922,15 +2922,15 @@ ManualOneVoiceOneMusic = \relative g' { 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 | } diff --git a/Documentation/it/learning/tweaks.itely b/Documentation/it/learning/tweaks.itely index b0f47e6926..ea4ef460e1 100644 --- a/Documentation/it/learning/tweaks.itely +++ b/Documentation/it/learning/tweaks.itely @@ -8,7 +8,7 @@ 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 @@ -3254,12 +3254,12 @@ con le legature di valore: { \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'' } >> @@ -3279,7 +3279,7 @@ centrale a, per esempio, 1: { \time 4/2 << - { c'1 ~ c'2. e'8 f' } + { c'1 ~ 2. e'8 f' } \\ { \override Beam.positions = #'(-1 . -1) @@ -3287,7 +3287,7 @@ centrale a, per esempio, 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'' } >> @@ -3478,7 +3478,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuazione della voce principale \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3536,7 +3536,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuazione della voce principale \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3608,7 +3608,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuazione della voce principale \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3690,7 +3690,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuazione della voce principale \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3929,7 +3929,7 @@ stessa voce possono essere unite da una legatura di valore. 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 @@ -3944,7 +3944,7 @@ attraversare le voci: << { \tweak Stem.transparent ##t - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -3960,7 +3960,7 @@ possiamo allungarlo impostando la proprietà { \tweak Stem.transparent ##t \tweak Stem.length #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -3984,7 +3984,7 @@ in questo modo \single \hide Stem \single \hide Flag \tweak Stem.length #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } diff --git a/Documentation/it/notation.tely b/Documentation/it/notation.tely index 4b681a8344..1ce4fec62d 100644 --- a/Documentation/it/notation.tely +++ b/Documentation/it/notation.tely @@ -22,7 +22,7 @@ presuppone che il lettore conosca il materiale esposto nel @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 diff --git a/Documentation/it/notation/pitches.itely b/Documentation/it/notation/pitches.itely index 822968c660..bb3566adb0 100644 --- a/Documentation/it/notation/pitches.itely +++ b/Documentation/it/notation/pitches.itely @@ -7,7 +7,7 @@ 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 @@ -411,7 +411,7 @@ Se una nota è prolungata attraverso una legatura di valore, l'alterazione viene ripetuta solo all'inizio di un nuovo sistema: @lilypond[verbatim,quote,relative=2,ragged-right] -cis1~ cis~ +cis1~ 1~ \break cis @end lilypond @@ -3082,8 +3082,8 @@ indicato. Si possono creare queste teste: 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 } diff --git a/Documentation/it/notation/repeats.itely b/Documentation/it/notation/repeats.itely index 3f935a41eb..274a706498 100644 --- a/Documentation/it/notation/repeats.itely +++ b/Documentation/it/notation/repeats.itely @@ -538,11 +538,6 @@ voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } @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}, diff --git a/Documentation/it/notation/rhythms.itely b/Documentation/it/notation/rhythms.itely index 269c6c332c..e134f9b733 100644 --- a/Documentation/it/notation/rhythms.itely +++ b/Documentation/it/notation/rhythms.itely @@ -7,7 +7,7 @@ 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 @@ -433,7 +433,7 @@ alla prima di ogni coppia di note legate. Esso indica che la nota deve 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 @@ -443,8 +443,8 @@ unire note dalle durate superiori all'unità di suddivisione della misura: @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 @@ -529,26 +529,26 @@ successione di tratti continui e tratti interrotti. @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 diff --git a/Documentation/it/notation/simultaneous.itely b/Documentation/it/notation/simultaneous.itely index 46e13fd5ea..18fbf44508 100644 --- a/Documentation/it/notation/simultaneous.itely +++ b/Documentation/it/notation/simultaneous.itely @@ -7,7 +7,7 @@ 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 @@ -403,7 +403,7 @@ solo rigo è illustrata nell'esempio seguente: \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 @@ -479,7 +479,7 @@ Il primo esempio potrebbe essere riscritto nel modo seguente: << { 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 @@ -1128,12 +1128,12 @@ devono avere la stessa durata.} \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 | } @@ -1152,12 +1152,12 @@ parole, le note relative di @code{voiceA} ignorano le note in @code{voiceB}. \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 | } diff --git a/Documentation/it/notation/staff.itely b/Documentation/it/notation/staff.itely index 5555f21d56..cc3dfb4285 100644 --- a/Documentation/it/notation/staff.itely +++ b/Documentation/it/notation/staff.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @c Translators: Federico Bruni @c Translation checkers: @@ -1045,7 +1045,7 @@ dell'espressione musicale, : R1*16 \instrumentSwitch "contrabassoon" c,,2 g \break - c,1 ~ | c1 + c,1 ~ | 1 } @end lilypond diff --git a/Documentation/it/search-box.ihtml b/Documentation/it/search-box.ihtml index 1562b0b428..778c26fc57 100644 --- a/Documentation/it/search-box.ihtml +++ b/Documentation/it/search-box.ihtml @@ -15,11 +15,11 @@ search for a while and have a redirection from "v2.15" to "v2.17". diff --git a/Documentation/it/usage.tely b/Documentation/it/usage.tely index bb46a612ad..e659f7d55e 100644 --- a/Documentation/it/usage.tely +++ b/Documentation/it/usage.tely @@ -24,7 +24,7 @@ LilyPond versione @version{}. Inoltre, suggerisce alcune delle @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 diff --git a/Documentation/it/web.texi b/Documentation/it/web.texi index bf3f9167cf..50e55171d3 100644 --- a/Documentation/it/web.texi +++ b/Documentation/it/web.texi @@ -15,7 +15,7 @@ @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 @@ -37,7 +37,7 @@ @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 diff --git a/Documentation/ja/learning.tely b/Documentation/ja/learning.tely index d7782a2523..ea80ad8461 100644 --- a/Documentation/ja/learning.tely +++ b/Documentation/ja/learning.tely @@ -20,7 +20,7 @@ @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 diff --git a/Documentation/ja/learning/common-notation.itely b/Documentation/ja/learning/common-notation.itely index 989f0443cd..6e58b30222 100644 --- a/Documentation/ja/learning/common-notation.itely +++ b/Documentation/ja/learning/common-notation.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.28" +@c \version "2.19.2" @ignore Tutorial guidelines: (different from policy.txt!) @@ -256,7 +256,7 @@ aes4 c b c 付加することによって作成されます。 @lilypond[verbatim,quote,relative=2] -g4~ g c2~ | c4~ c8 a~ a2 | +g4~ 4 c2~ | 4~ 8 a~ 2 | @end lilypond @@ -301,7 +301,7 @@ g4\( g8( a) b( c) b4\) スラーとタイはネストさせることができます。 @lilypond[verbatim,quote,relative=2] -c4~( c8 d~ d4 e) +c4~( c8 d~ 4 e) @end lilypond @seealso @@ -941,7 +941,7 @@ LilyPond での多声音楽はまだ説明していないコンセプトを用 @lilypond[verbatim,quote,relative=2] << - { a4 g2 f4~ f4 } \\ + { a4 g2 f4~ 4 } \\ { r4 g4 f2 f4 } >> @end lilypond @@ -954,7 +954,7 @@ LilyPond での多声音楽はまだ説明していないコンセプトを用 @lilypond[verbatim,quote,relative=2] << - { a4 g2 f4~ f4 } \\ + { a4 g2 f4~ 4 } \\ { s4 g4 f2 f4 } >> @end lilypond @@ -965,13 +965,13 @@ LilyPond での多声音楽はまだ説明していないコンセプトを用 @lilypond[verbatim,quote,relative=2] << \new Staff << - { a4 g2 f4~ f4 } \\ + { a4 g2 f4~ 4 } \\ { s4 g4 f2 f4 } >> \new Staff << \clef bass { 1 ~ 4 } \\ - { e,,4 d e2 ~ e4} + { e,,4 d e2 ~ 4} >> >> @end lilypond @@ -1215,7 +1215,7 @@ song.ly:12:46: warning: barcheck failed at: 3/8 \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à @@ -1246,7 +1246,7 @@ song.ly:12:46: warning: barcheck failed at: 3/8 \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, __ diff --git a/Documentation/ja/learning/fundamental.itely b/Documentation/ja/learning/fundamental.itely index 5122a524b8..975505a86f 100644 --- a/Documentation/ja/learning/fundamental.itely +++ b/Documentation/ja/learning/fundamental.itely @@ -8,7 +8,7 @@ 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 @@ -744,7 +744,7 @@ LilyPond の楽譜の中で最も低レベルで、最も基礎的であり、 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 @@ -783,7 +783,7 @@ LilyPond の楽譜の中で最も低レベルで、最も基礎的であり、 { d2 e } \\ % Voice 2 continues - { c8 b16 a b8 g~ g2 } + { c8 b16 a b8 g~ 2 } \\ { \voiceThreeStyle @@ -1061,25 +1061,25 @@ LilyPond は音符の水平方向の位置を調節するための手段をい @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 @@ -1108,7 +1108,7 @@ 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 { @@ -1135,7 +1135,7 @@ LilyPond は音符の水平方向の位置を調節するための手段をい \voiceTwo r8 e4 d c8~ | << - { c8 b16 a b8 g~ g2 | } + { c8 b16 a b8 g~ 2 | } \new Voice { \voiceThree s4 b c2 | @@ -1165,7 +1165,7 @@ LilyPond は音符の水平方向の位置を調節するための手段をい \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 { @@ -1301,7 +1301,7 @@ LilyPond がデフォルトで使用する自動連桁は楽器だけの音楽 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, __ @@ -3019,15 +3019,15 @@ ManualOneVoiceOneMusic = \relative g' { 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 | } diff --git a/Documentation/ja/learning/tweaks.itely b/Documentation/ja/learning/tweaks.itely index ff31215f2d..d6a5117a92 100644 --- a/Documentation/ja/learning/tweaks.itely +++ b/Documentation/ja/learning/tweaks.itely @@ -8,7 +8,7 @@ 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 @@ -3100,12 +3100,12 @@ a8 \( ( a'16 ) a \) { \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'' } >> @@ -3123,7 +3123,7 @@ a8 \( ( a'16 ) a \) { \time 4/2 << - { c'1 ~ c'2. e'8 f' } + { c'1 ~ 2. e'8 f' } \\ { \override Beam.positions = #'(-1 . -1) @@ -3131,7 +3131,7 @@ a8 \( ( a'16 ) a \) } >> << - { 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'' } >> @@ -3327,7 +3327,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % メイン ボイスの続き \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3388,7 +3388,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % メイン ボイスの続き \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3466,7 +3466,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % メイン ボイスの続き \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3550,7 +3550,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % メイン ボイスの続き \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3794,7 +3794,7 @@ lhMusic = \relative c' { 2 つのボイスを使い、そのうちの 1 つにタイで結んだ音符を置きます: @lilypond[quote,fragment,relative=2] -<< { b8~ b\noBeam } \\ { b8[ g] } >> +<< { b8~ 8\noBeam } \\ { b8[ g] } >> @end lilypond @noindent @@ -3808,7 +3808,7 @@ lhMusic = \relative c' { << { \tweak Stem.transparent ##t - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -3823,7 +3823,7 @@ lhMusic = \relative c' { { \tweak Stem.transparent ##t \tweak Stem.length #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -3846,7 +3846,7 @@ lhMusic = \relative c' { \single \hide Stem \single \hide Flag \tweak Stem.length #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } diff --git a/Documentation/ja/notation.tely b/Documentation/ja/notation.tely index 0afb531979..d714899256 100644 --- a/Documentation/ja/notation.tely +++ b/Documentation/ja/notation.tely @@ -21,7 +21,7 @@ @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 diff --git a/Documentation/ja/notation/changing-defaults.itely b/Documentation/ja/notation/changing-defaults.itely index 8d3c5b837c..5217952593 100644 --- a/Documentation/ja/notation/changing-defaults.itely +++ b/Documentation/ja/notation/changing-defaults.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.7" @c Translators: Yoshiki Sawada @c Translation status: post-GDP @@ -1963,7 +1963,7 @@ Scheme 値の循環参照は、ハング アップまたはクラッシュ、@c 通常、コンテキスト プロパティの名前は、@c 小文字で始まる単語に大文字で始まる単語をつなげたものです。@c これらはたいてい音楽から記譜への翻訳を制御します --- 例えば、@code{localKeySignature} (臨時記号を表示するかどうかを決定します) +-- 例えば、@code{localAlterations} (臨時記号を表示するかどうかを決定します) や、@code{measurePosition} (小節線を表示するタイミングを決定します) です。@c コンテキスト プロパティは、楽曲の解釈をしている間、@c ずっと値を変更しておくことができます。@c @@ -2575,7 +2575,7 @@ property (modified with @code{\set}) was created. ネストされた宣言を用いてキー値を個々に更新する方が安全です。 @warning{ネストされた宣言は、コンテキスト プロパティ連想配列 -(@code{beamExceptions}, @code{keySignature}, @code{timeSignatureSettings} 等) +(@code{beamExceptions}, @code{keyAlterations}, @code{timeSignatureSettings} 等) に対しては機能しません。@c これらのプロパティを変更するには、@c 連想配列として丸ごと再定義するしかありません。} @@ -4274,7 +4274,7 @@ Web でベジエ曲線が描かれる様子を示すアニメーションを@c @lilypond[verbatim,quote,relative=1] << - { e1 ~ e } + { e1 ~ 1 } \\ { r4 } >> @@ -4316,7 +4316,7 @@ Web でベジエ曲線が描かれる様子を示すアニメーションを@c << { \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie - e1~ e + e1~ 1 } \\ { r4 } diff --git a/Documentation/ja/notation/fretted-strings.itely b/Documentation/ja/notation/fretted-strings.itely index 016491cf3e..b4df2c0fa7 100644 --- a/Documentation/ja/notation/fretted-strings.itely +++ b/Documentation/ja/notation/fretted-strings.itely @@ -7,7 +7,7 @@ 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 @@ -184,7 +184,7 @@ symbols = { c4-.^"Allegro" d( e) f4-.\f g a^\fermata \mark \default - c8_.\<\( c16 c~ c2\! + c8_.\<\( c16 c~ 2\! c'2.\prall\) } @@ -210,7 +210,7 @@ symbols = { c4-.^"Allegro" d( e) f4-.\f g a^\fermata \mark \default - c8_.\<\( c16 c~ c2\! + c8_.\<\( c16 c~ 2\! c'2.\prall\) } @@ -279,7 +279,7 @@ symbols = { @lilypond[quote,verbatim] guitar = \relative c' { - r8 ~ q4 q8~ q q4 + r8 ~ q4 q8~ 8 q4 } \new StaffGroup << @@ -300,7 +300,7 @@ guitar = \relative c' { ties = \relative c' { \repeat volta 2 { e2. f4~ - f2 g2~ + 2 g2~ } \alternative { { g4 f2. } @@ -340,7 +340,7 @@ ties = \relative c' { ties = \relative c' { \repeat volta 2 { e2. f4~ - f2 g2~ } + 2 g2~ } \alternative { { g4 f2. } { g4\repeatTie c,2. } diff --git a/Documentation/ja/notation/input.itely b/Documentation/ja/notation/input.itely index 0f02c9a922..6ed135dd7a 100644 --- a/Documentation/ja/notation/input.itely +++ b/Documentation/ja/notation/input.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.15" +@c \version "2.19.2" @c Translators: Yoshiki Sawada @@ -2286,7 +2286,7 @@ Unicode U+03BE の文字を入力します } \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 (著作権記号) @@ -2961,8 +2961,8 @@ midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fraction \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 { @@ -3012,8 +3012,8 @@ MIDI 出力の品質を著しく高めることができます。 \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 { @@ -3081,8 +3081,8 @@ MIDI 最小/最大ボリューム プロパティが設定されていない場 \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 { diff --git a/Documentation/ja/notation/percussion.itely b/Documentation/ja/notation/percussion.itely index 9968a12829..b308244015 100644 --- a/Documentation/ja/notation/percussion.itely +++ b/Documentation/ja/notation/percussion.itely @@ -7,7 +7,7 @@ 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 @@ -523,7 +523,7 @@ bellstaff = { \drummode { \time 2/4 rb8 rb cb cb16 rb-> ~ | - rb16 rb8 rb16 cb8 cb | + 16 rb8 rb16 cb8 cb | } } @end lilypond diff --git a/Documentation/ja/notation/pitches.itely b/Documentation/ja/notation/pitches.itely index eb6713859b..5e64e0153d 100644 --- a/Documentation/ja/notation/pitches.itely +++ b/Documentation/ja/notation/pitches.itely @@ -6,7 +6,7 @@ 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 @@ -390,7 +390,7 @@ cis cis cis! cis? c c c! c? 新しいシステム (訳者: 譜 1 行分のこと) の開始点でのみ譜刻されます: @lilypond[verbatim,quote,relative=2] -cis1 ~ cis ~ +cis1 ~ 1 ~ \break cis @end lilypond @@ -3081,8 +3081,8 @@ a2 b c d \break 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 } diff --git a/Documentation/ja/notation/repeats.itely b/Documentation/ja/notation/repeats.itely index 9df79cd8f1..5c506a6e27 100644 --- a/Documentation/ja/notation/repeats.itely +++ b/Documentation/ja/notation/repeats.itely @@ -476,11 +476,6 @@ voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } @end lilypond -@snippets - -@lilypondfile[verbatim,quote,texidoc,doctitle] -{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly} - @seealso 記譜法リファレンス: @ref{Bar lines}, diff --git a/Documentation/ja/notation/rhythms.itely b/Documentation/ja/notation/rhythms.itely index fdffd7a251..7317cd0ef6 100644 --- a/Documentation/ja/notation/rhythms.itely +++ b/Documentation/ja/notation/rhythms.itely @@ -6,7 +6,7 @@ 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 @@ -408,7 +408,7 @@ b16*4 c4 タイはチルド記号 @code{~} を使って入力します: @lilypond[quote,verbatim,relative=2] -a2 ~ a +a2 ~ 2 @end lilypond タイは、音符が小節線をまたがる場合か、リズムを表すためにドットを@c @@ -421,8 +421,8 @@ a2 ~ a @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 @@ -508,26 +508,26 @@ L.v. タイは以下のように入力します: @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 diff --git a/Documentation/ja/notation/simultaneous.itely b/Documentation/ja/notation/simultaneous.itely index b88b36a319..3c673471c5 100644 --- a/Documentation/ja/notation/simultaneous.itely +++ b/Documentation/ja/notation/simultaneous.itely @@ -6,7 +6,7 @@ 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 @@ -409,7 +409,7 @@ warning: ignoring too many clashing note columns \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 @@ -486,7 +486,7 @@ warning: ignoring too many clashing note columns << { 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 @@ -1129,12 +1129,12 @@ instrumentTwo = \relative c' { \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 | } @@ -1154,12 +1154,12 @@ instrumentTwo = \relative c' { \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 | } diff --git a/Documentation/ja/notation/staff.itely b/Documentation/ja/notation/staff.itely index 7f048afa84..4b181ae65b 100644 --- a/Documentation/ja/notation/staff.itely +++ b/Documentation/ja/notation/staff.itely @@ -6,7 +6,7 @@ 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 @@ -1043,7 +1043,7 @@ d4 e f g R1*16 \instrumentSwitch "contrabassoon" c,,2 g \break - c,1 ~ | c1 + c,1 ~ | 1 } @end lilypond diff --git a/Documentation/ja/notation/vocal.itely b/Documentation/ja/notation/vocal.itely index 0878902eb9..bb6a93e570 100644 --- a/Documentation/ja/notation/vocal.itely +++ b/Documentation/ja/notation/vocal.itely @@ -8,7 +8,7 @@ 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 @@ -655,8 +655,8 @@ \new Voice = "melody" { \time 3/4 f4 g2 ~ | - g4 e2 ~ | - e8 + 4 e2 ~ | + 8 } \new Lyrics \lyricsto "melody" { Ky -- ri -- e __ @@ -755,7 +755,7 @@ \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 @@ -783,7 +783,7 @@ \time 3/4 \set melismaBusyProperties = #'() c4 d ( e ) - g8 [ f ] ~ f4 ~ f + g8 [ f ] ~ 4 ~ f } \new Lyrics \lyricsto "melody" { Ky -- ri -- _ e __ _ _ _ diff --git a/Documentation/ja/usage.tely b/Documentation/ja/usage.tely index 3fa8d617f3..bf2dc399a0 100644 --- a/Documentation/ja/usage.tely +++ b/Documentation/ja/usage.tely @@ -21,7 +21,7 @@ @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 diff --git a/Documentation/ja/web.texi b/Documentation/ja/web.texi index a44e2854be..9cde7d4904 100644 --- a/Documentation/ja/web.texi +++ b/Documentation/ja/web.texi @@ -15,7 +15,7 @@ @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 @@ -35,7 +35,7 @@ @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 diff --git a/Documentation/learning.tely b/Documentation/learning.tely index 98b329cc49..c602d27799 100644 --- a/Documentation/learning.tely +++ b/Documentation/learning.tely @@ -20,7 +20,7 @@ This file provides an introduction to LilyPond version @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 diff --git a/Documentation/learning/common-notation.itely b/Documentation/learning/common-notation.itely index 8c833c76f5..7b07c8e959 100644 --- a/Documentation/learning/common-notation.itely +++ b/Documentation/learning/common-notation.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.28" +@c \version "2.19.2" @ignore Tutorial guidelines: (different from policy.txt!) @@ -281,7 +281,7 @@ A @notation{tie} is created by appending a tilde @code{~} to the 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 @@ -330,7 +330,7 @@ indicate the @notation{articulation} of notes, and can be used on 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 @@ -1194,7 +1194,7 @@ Here's an example from Rossini's @notation{Figaro}, where \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à @@ -1224,7 +1224,7 @@ example from Handel's @notation{Judas Maccabæus}: \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, __ diff --git a/Documentation/learning/fundamental.itely b/Documentation/learning/fundamental.itely index 9a2f1e824f..60e67ee135 100644 --- a/Documentation/learning/fundamental.itely +++ b/Documentation/learning/fundamental.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.29" +@c \version "2.19.2" @node Fundamental concepts @chapter Fundamental concepts @@ -125,10 +125,9 @@ advisable to always create staves and voices explicitly.} 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 @{ @@ -269,11 +268,11 @@ We didn't skip over it at all. The big mystery is simply that 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 @@ -684,7 +683,7 @@ of slurs, stems, ties, dynamics etc., is set appropriately. 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 @@ -722,7 +721,7 @@ blue triangle voice. { d2 e } \\ % Voice 2 continues - { c8 b16 a b8 g~ g2 } + { c8 b16 a b8 g~ 2 } \\ { \voiceThreeStyle @@ -1005,25 +1004,25 @@ markup, ties, slurs, and dynamics: @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 @@ -1051,7 +1050,7 @@ permitting a phrasing slur to be drawn over them. \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 { @@ -1082,7 +1081,7 @@ typeset the music: \voiceTwo r8 e4 d c8~ | << - { c8 b16 a b8 g~ g2 | } + { c8 b16 a b8 g~ 2 | } \new Voice { \voiceThree s4 b c2 | @@ -1113,7 +1112,7 @@ as here: \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 { @@ -1250,7 +1249,7 @@ rather than music. 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, __ @@ -2439,7 +2438,15 @@ lower = \relative c, { } @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. @@ -2915,15 +2922,15 @@ ManualOneVoiceOneMusic = \relative g' { 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 | } diff --git a/Documentation/learning/templates.itely b/Documentation/learning/templates.itely index 2370ff1f3b..cc35e50da7 100644 --- a/Documentation/learning/templates.itely +++ b/Documentation/learning/templates.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.16.0" +@c \version "2.19.2" @node Templates @appendix Templates @@ -18,6 +18,7 @@ already set up for you. Just add notes, run LilyPond, and enjoy beautiful printed scores! @menu +* Built-in templates:: * Single staff templates:: * Piano templates:: * String quartet templates:: @@ -28,6 +29,177 @@ beautiful printed scores! @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 @@ -115,6 +287,11 @@ beautiful printed scores! @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:: @@ -240,7 +417,7 @@ violin concerto as TchaikovskyPI, whereas perhaps you wish to print @ 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" diff --git a/Documentation/learning/tweaks.itely b/Documentation/learning/tweaks.itely index 7d428a57a8..137a498286 100644 --- a/Documentation/learning/tweaks.itely +++ b/Documentation/learning/tweaks.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.20" +@c \version "2.19.2" @node Tweaking output @chapter Tweaking output @@ -3150,12 +3150,12 @@ collide with the ties: { \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'' } >> @@ -3174,7 +3174,7 @@ say, 1: { \time 4/2 << - { c'1 ~ c'2. e'8 f' } + { c'1 ~ 2. e'8 f' } \\ { \override Beam.positions = #'(-1 . -1) @@ -3182,7 +3182,7 @@ say, 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'' } >> @@ -3286,7 +3286,7 @@ rhMusic = \relative c'' { \time 6/4 \mergeDifferentlyHeadedOn \mergeDifferentlyDottedOn - bes2.^\markup { \bold "Moderato" } r8 + bes2.\tempo "Moderato" r8 << { c,8 d fis bes a } \new Voice { @@ -3371,7 +3371,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3428,7 +3428,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3500,7 +3500,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3538,8 +3538,8 @@ lhMusic = \relative c' { @end lilypond On to bar three and the start of the Moderato section. The tutorial -showed how to add bold text with the @code{\markup} command, so -adding @qq{Moderato} in bold is easy. But how do we merge notes in +showed how to add a tempo indication with the @code{\tempo} command, so +adding @qq{Moderato} is easy. But how do we merge notes in different voices together? This is where we need to turn again to the Notation Reference for help. A search for @qq{merge} in the Notation Reference index quickly leads us to the commands for merging @@ -3573,7 +3573,7 @@ rhMusic = \relative c'' { bes1~ | \bar "||" \time 6/4 - bes2.^\markup { \bold "Moderato" } r8 + bes2.\tempo "Moderato" r8 \mergeDifferentlyHeadedOn \mergeDifferentlyDottedOn % Start polyphonic section of four voices @@ -3581,7 +3581,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3647,7 +3647,7 @@ rhMusic = \relative c'' { bes1~ | \bar "||" \time 6/4 - bes2.^\markup { \bold "Moderato" } r8 + bes2.\tempo "Moderato" r8 \mergeDifferentlyHeadedOn \mergeDifferentlyDottedOn % Start polyphonic section of four voices @@ -3717,7 +3717,7 @@ rhMusic = \relative c'' { bes1~ | \bar "||" \time 6/4 - bes2.^\markup { \bold "Moderato" } r8 + bes2.\tempo "Moderato" r8 \mergeDifferentlyHeadedOn \mergeDifferentlyDottedOn % Start polyphonic section of four voices @@ -3815,7 +3815,7 @@ same voice can be connected with ties. By using two voices, with the tied notes in one of them @lilypond[quote,fragment,relative=2] -<< { b8~ b\noBeam } \\ { b8[ g] } >> +<< { b8~ 8\noBeam } \\ { b8[ g] } >> @end lilypond @noindent @@ -3829,7 +3829,7 @@ cross voices: << { \tweak Stem.transparent ##t - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -3845,7 +3845,7 @@ too much, we can lengthen the stem by setting the { \tweak Stem.transparent ##t \tweak Stem.length #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -3867,7 +3867,7 @@ possible to rewrite the above example as \single \hide Stem \single \hide Flag \tweak Stem.length #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } diff --git a/Documentation/lilypond-texi2html.init b/Documentation/lilypond-texi2html.init index b9daceacd3..1ae43523cf 100644 --- a/Documentation/lilypond-texi2html.init +++ b/Documentation/lilypond-texi2html.init @@ -1234,6 +1234,25 @@ sub lilypond_css_lines ($$) $Texi2HTML::THISDOC{'CSS_LINES'} .= "\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 tag. + # For example, the development Notation reference in English + # will output in HTML as + $Texi2HTML::Config::BODYTEXT = 'lang="' . $Texi2HTML::THISDOC{current_lang} . '" class="' . $docu_name . ' ' . $documentstatus . '"'; + } diff --git a/Documentation/ly-examples/Stockhausen_Klavierstueck2.ly b/Documentation/ly-examples/Stockhausen_Klavierstueck2.ly new file mode 100644 index 0000000000..048833cef1 --- /dev/null +++ b/Documentation/ly-examples/Stockhausen_Klavierstueck2.ly @@ -0,0 +1,189 @@ +\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 + 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 + } + >> +} diff --git a/Documentation/ly-examples/aucun-snippet.ly b/Documentation/ly-examples/aucun-snippet.ly index 4ee9f6fd21..23e89447aa 100644 --- a/Documentation/ly-examples/aucun-snippet.ly +++ b/Documentation/ly-examples/aucun-snippet.ly @@ -1,4 +1,4 @@ -\version "2.17.30" +\version "2.19.2" \include "example-header.ily" \paper { @@ -188,7 +188,7 @@ triplumNotes = \relative c' { % 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 @@ -205,7 +205,7 @@ motetusNotes = \relative c' { 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 } diff --git a/Documentation/ly-examples/bach-bwv610.ly b/Documentation/ly-examples/bach-bwv610.ly index 863c8594e6..c50f6ab342 100644 --- a/Documentation/ly-examples/bach-bwv610.ly +++ b/Documentation/ly-examples/bach-bwv610.ly @@ -1,4 +1,4 @@ -\version "2.17.6" +\version "2.19.2" %\include "example-header.ily" @@ -99,22 +99,22 @@ alt = { \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 } } @@ -122,22 +122,22 @@ tenor = { \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 } } @@ -161,18 +161,18 @@ pedal = { \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 diff --git a/Documentation/ly-examples/cary.ly b/Documentation/ly-examples/cary.ly index 1e1d98d461..15494cf51d 100644 --- a/Documentation/ly-examples/cary.ly +++ b/Documentation/ly-examples/cary.ly @@ -46,7 +46,7 @@ \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 diff --git a/Documentation/ly-examples/orchestra.ly b/Documentation/ly-examples/orchestra.ly index 6b205af903..d784dfd6af 100644 --- a/Documentation/ly-examples/orchestra.ly +++ b/Documentation/ly-examples/orchestra.ly @@ -1,4 +1,4 @@ -\version "2.17.6" +\version "2.19.0" \header { tagline = ##f @@ -271,49 +271,49 @@ R2. | 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'' { diff --git a/Documentation/ly-examples/sesto-full.ly b/Documentation/ly-examples/sesto-full.ly index 6f10964616..52c6327349 100644 --- a/Documentation/ly-examples/sesto-full.ly +++ b/Documentation/ly-examples/sesto-full.ly @@ -4,7 +4,7 @@ %%% %%% Nicolas Sceaux -\version "2.16.0" +\version "2.19.2" \include "sesto.ily" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -34,7 +34,7 @@ \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." diff --git a/Documentation/ly-examples/sesto-piano.ly b/Documentation/ly-examples/sesto-piano.ly index 286746b16d..223040e600 100644 --- a/Documentation/ly-examples/sesto-piano.ly +++ b/Documentation/ly-examples/sesto-piano.ly @@ -4,7 +4,7 @@ %%% %%% Nicolas Sceaux -\version "2.16.0" +\version "2.19.2" \include "sesto.ily" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -25,7 +25,7 @@ \set Staff.instrumentName = \markup \smallCaps Sesto. \global \clef treble \sesto >> - \lyricsto "sesto" \new Lyrics \sestoLyrics + \new Lyrics \lyricsto "sesto" \sestoLyrics >> \new PianoStaff << \new Staff << diff --git a/Documentation/ly-examples/sesto.ily b/Documentation/ly-examples/sesto.ily index e2c4d9e88d..8ab9e4b990 100644 --- a/Documentation/ly-examples/sesto.ily +++ b/Documentation/ly-examples/sesto.ily @@ -4,7 +4,7 @@ %%% %%% Nicolas Sceaux -\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)" @@ -19,7 +19,7 @@ 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' | %{ @@ -39,12 +39,12 @@ sesto = { 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 @@ -77,14 +77,14 @@ sestoLyrics = \lyricmode { 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 @@ -103,18 +103,18 @@ violinoI = { 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 %} @@ -122,14 +122,14 @@ violinoI = { 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 @@ -148,18 +148,18 @@ violinoII = { 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 %} diff --git a/Documentation/ly-examples/tab-example.ly b/Documentation/ly-examples/tab-example.ly index fbccc1f558..36615cf0db 100644 --- a/Documentation/ly-examples/tab-example.ly +++ b/Documentation/ly-examples/tab-example.ly @@ -1,4 +1,4 @@ -\version "2.17.30" +\version "2.19.2" #(define (glissando::calc-extra-dy grob) (let* ((original (ly:grob-original grob)) @@ -32,7 +32,7 @@ lower= \relative c { 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 { diff --git a/Documentation/music-glossary.tely b/Documentation/music-glossary.tely index 7d198504b7..a58b49971b 100644 --- a/Documentation/music-glossary.tely +++ b/Documentation/music-glossary.tely @@ -14,7 +14,7 @@ terms used in the documentation manuals for LilyPond version @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 diff --git a/Documentation/nl/learning.tely b/Documentation/nl/learning.tely index 25f36cfcba..bd45b542b4 100644 --- a/Documentation/nl/learning.tely +++ b/Documentation/nl/learning.tely @@ -26,7 +26,7 @@ This file provides an introduction to LilyPond version @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 diff --git a/Documentation/nl/learning/common-notation.itely b/Documentation/nl/learning/common-notation.itely index ae89bdba9c..8bb4361689 100644 --- a/Documentation/nl/learning/common-notation.itely +++ b/Documentation/nl/learning/common-notation.itely @@ -12,7 +12,7 @@ @c Translation checker: @c Translation checker committish: -@c \version "2.17.28" +@c \version "2.19.2" @ignore Tutorial guidelines: (different from policy.txt!) @@ -263,7 +263,7 @@ een tilde @code{~} aan de eerste noot die overgebonden wordt. @lilypond[verbatim,quote,relative=2] -g4~ g c2~ | c4~ c8 a~ a2 | +g4~ 4 c2~ | 4~ 8 a~ 2 | @end lilypond @subheading Legatobogen @@ -310,7 +310,7 @@ gebruikt over grotere nootgroepen. Legatobogen en overbindingen kunnen worden genest. @lilypond[verbatim,quote,relative=2] -c4~( c8 d~ d4 e) +c4~( c8 d~ 4 e) @end lilypond @@ -1217,7 +1217,7 @@ in Figaro's aria @notation{Largo al factotum}: \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à @@ -1249,7 +1249,7 @@ notenbalk. Hier is een voorbeeld uit Handels \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, __ diff --git a/Documentation/nl/learning/fundamental.itely b/Documentation/nl/learning/fundamental.itely index c68c506cf2..a129a464ff 100644 --- a/Documentation/nl/learning/fundamental.itely +++ b/Documentation/nl/learning/fundamental.itely @@ -12,7 +12,7 @@ @c Translation checker: @c Translation checker committish: -@c \version "2.17.29" +@c \version "2.19.2" @node Fundamentele concepten @translationof Fundamental concepts @@ -709,7 +709,7 @@ of slurs, stems, ties, dynamics etc., is set appropriately. 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 @@ -747,7 +747,7 @@ blue triangle voice. { d2 e } \\ % Voice 2 continues - { c8 b16 a b8 g~ g2 } + { c8 b16 a b8 g~ 2 } \\ { \voiceThreeStyle @@ -1030,25 +1030,25 @@ markup, ties, slurs, and dynamics: @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 @@ -1076,7 +1076,7 @@ permitting a phrasing slur to be drawn over them. \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 { @@ -1107,7 +1107,7 @@ typeset the music: \voiceTwo r8 e4 d c8~ | << - { c8 b16 a b8 g~ g2 | } + { c8 b16 a b8 g~ 2 | } \new Voice { \voiceThree s4 b c2 | @@ -1138,7 +1138,7 @@ as here: \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 { @@ -1271,7 +1271,7 @@ rather than music. 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, __ @@ -2936,15 +2936,15 @@ ManualOneVoiceOneMusic = \relative g' { 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 | } diff --git a/Documentation/nl/learning/tweaks.itely b/Documentation/nl/learning/tweaks.itely index 80881daf55..9abaa16d9b 100644 --- a/Documentation/nl/learning/tweaks.itely +++ b/Documentation/nl/learning/tweaks.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.20" +@c \version "2.19.2" @node Tweaking output @chapter Tweaking output @@ -2922,12 +2922,12 @@ collide with the ties: { \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'' } >> @@ -2946,7 +2946,7 @@ say, 1: { \time 4/2 << - { c'1 ~ c'2. e'8 f' } + { c'1 ~ 2. e'8 f' } \\ { \override Beam.positions = #'(-1 . -1) @@ -2954,7 +2954,7 @@ say, 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'' } >> @@ -3143,7 +3143,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3200,7 +3200,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3272,7 +3272,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3353,7 +3353,7 @@ rhMusic = \relative c'' { { c,8 d fis bes a } % continuation of main voice \new Voice { \voiceTwo - c,8~ c2 + c,8~ 2 } \new Voice { \voiceThree @@ -3587,7 +3587,7 @@ same voice can be connected with ties. By using two voices, with the tied notes in one of them @lilypond[quote,fragment,relative=2] -<< { b8~ b\noBeam } \\ { b8[ g] } >> +<< { b8~ 8\noBeam } \\ { b8[ g] } >> @end lilypond @noindent @@ -3601,7 +3601,7 @@ cross voices: << { \tweak Stem.transparent ##t - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -3617,7 +3617,7 @@ too much, we can lengthen the stem by setting the { \tweak Stem.transparent ##t \tweak Stem.length #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } @@ -3639,7 +3639,7 @@ possible to rewrite the above example as \single \hide Stem \single \hide Flag \tweak Stem.length #8 - b8~ b\noBeam + b8~ 8\noBeam } \\ { b8[ g] } diff --git a/Documentation/nl/search-box.ihtml b/Documentation/nl/search-box.ihtml index 33e6c1062a..588bf20e56 100644 --- a/Documentation/nl/search-box.ihtml +++ b/Documentation/nl/search-box.ihtml @@ -16,11 +16,11 @@ search for a while and have a redirection from "v2.15" to "v2.17". diff --git a/Documentation/nl/web.texi b/Documentation/nl/web.texi index b682396f9f..d8a686b558 100644 --- a/Documentation/nl/web.texi +++ b/Documentation/nl/web.texi @@ -35,7 +35,7 @@ @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 diff --git a/Documentation/notation.tely b/Documentation/notation.tely index 517c4dc046..e770728cca 100644 --- a/Documentation/notation.tely +++ b/Documentation/notation.tely @@ -22,7 +22,7 @@ the reader is familiar with the material in the @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 diff --git a/Documentation/notation/changing-defaults.itely b/Documentation/notation/changing-defaults.itely index 39928b6061..70ffece67e 100644 --- a/Documentation/notation/changing-defaults.itely +++ b/Documentation/notation/changing-defaults.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.7" @node Changing defaults @chapter Changing defaults @@ -1939,7 +1939,7 @@ the @code{#}@tie{}character. Contexts properties are usually named in @code{studlyCaps}. They mostly control the translation from -music to notation, e.g. @code{localKeySignature} (for determining +music to notation, e.g. @code{localAlterations} (for determining whether to print accidentals), or @code{measurePosition} (for determining when to print a bar line). Context properties can change value over time while interpreting a piece of music; @@ -2573,7 +2573,7 @@ values. Unless this is the intended result, it is safer to update key-values individually with a nested declaration. @warning{Nested declarations will not work for context property -alists (such as @code{beamExceptions}, @code{keySignature}, +alists (such as @code{beamExceptions}, @code{keyAlterations}, @code{timeSignatureSettings}, etc.). These properties can only be modified by completely re-defining them as alists.} @@ -4202,7 +4202,7 @@ and @code{\tieDown} would not help. @lilypond[verbatim,quote,relative=1] << - { e1~ e } + { e1~ 1 } \\ { r4 } >> @@ -4244,7 +4244,7 @@ form of @code{\shape}, this will raise the tie by half a staff-space: << { \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie - e1~ e + e1~ 1 } \\ { r4 } diff --git a/Documentation/notation/editorial.itely b/Documentation/notation/editorial.itely index 630aa6690f..34822b3da7 100644 --- a/Documentation/notation/editorial.itely +++ b/Documentation/notation/editorial.itely @@ -49,62 +49,207 @@ inside the staff. @funindex fontSize @funindex font-size +@funindex magnification->font-size @funindex magstep -@funindex \huge -@funindex \large +@funindex magnifyMusic +@funindex teeny +@funindex tiny +@funindex small +@funindex normalsize +@funindex large +@funindex huge +@funindex \magnifyMusic +@funindex \teeny +@funindex \tiny @funindex \normalsize @funindex \small -@funindex \tiny -@funindex \teeny -@funindex huge -@funindex large -@funindex normalsize -@funindex small -@funindex tiny -@funindex teeny +@funindex \large +@funindex \huge + +@warning{@* +For font sizes of text, see @ref{Selecting font and font size}.@* +For staff size, see @ref{Setting the staff size}.@* +For cue notes, see @ref{Formatting cue notes}.@* +For ossia staves, see @ref{Ossia staves}.} -The font size of notation elements may be altered. It does not -change the size of variable symbols, such as beams or slurs. +To change the size of the notation without changing the staff +size, specify a magnification factor with the @code{\magnifyMusic} +command: + +@c Grieg Piano Concerto (mvt.1 cadenza) +@lilypond[verbatim,quote] +\new Staff << + \new Voice \relative { + \voiceOne + 4 8. 16 8 4 r8 + } + \new Voice \relative { + \voiceTwo + \magnifyMusic 0.63 { + r32 c'' a c a c a c r c a c a c a c + r c a c a c a c a c a c a c a c + } + } +>> +@end lilypond -@warning{For font sizes of text, see -@ref{Selecting font and font size}.} +If a normal sized note head is merged with a smaller one, the size +of the smaller note may need to be reset (with +@w{@samp{\once@tie{}\normalsize}}) so that the stems and +accidentals align properly: + +@c Chopin Prelude op.28 no.8 +@lilypond[verbatim,quote] +\new Staff << + \key fis \minor + \mergeDifferentlyDottedOn + \new Voice \relative { + \voiceOne + \magnifyMusic 0.63 { + \once \normalsize cis'32( cis' gis b a fis \once \normalsize d d' + \once \normalsize cis, cis' gis b a gis \once \normalsize fis fis' + \once \normalsize fis, fis' ais, cis b gis \once \normalsize eis eis' + \once \normalsize a, a' bis, d cis b \once \normalsize gis gis') + } + } + \new Voice \relative { + \voiceTwo + cis'8. d16 cis8. fis16 fis8. eis16 a8. gis16 + } +>> +@end lilypond + +The @code{\magnifyMusic} command is not intended for cue notes, +grace notes, or ossia staves---there are more appropriate methods +of entering each of those constructs. Instead, it is useful when +the notation size changes in a single instrumental part on one +staff, and where grace notes are not appropriate, such as in +cadenza-like passages or in cases such as the above examples. +Setting the @code{\magnifyMusic} value to 0.63 duplicates the +dimensions of the @code{CueVoice} context. + +@warning{The @code{@bs{}magnifyMusic} command should @i{not} be +used when also resizing the staff. See @ref{Setting the staff +size}.} + + +@subsubsubheading Resizing individual layout objects + +An individual layout object can be resized by using the +@code{\tweak} or @code{\override} commands to adjust its +@code{font-size} property: + +@lilypond[quote,verbatim,relative=1] +% resize a note head +-5 +% resize a fingering +bes-\tweak font-size 0 -3 +% resize an accidental +\once \override Accidental.font-size = -4 bes!-^ +% resize an articulation +\once \override Script.font-size = 4 bes!-^ +@end lilypond + +The default @code{font-size} value for each layout object is +listed in the Internals Reference. The @code{font-size} property +can only be set for layout objects that support the +@code{font-interface} layout interface. If @code{font-size} is +not specified in the object's @q{Standard@tie{}settings} list, its +value is 0. See @rinternals{All layout objects}. + + +@subsubsubheading Understanding the @code{fontSize} property + +The @code{fontSize} context property adjusts the relative size of +all glyph-based notational elements in a context: @lilypond[verbatim,quote,relative=2] -\huge -c4.-> d8---3 -\large -c4.-> d8---3 -\normalsize -c4.-> d8---3 -\small -c4.-> d8---3 -\tiny -c4.-> d8---3 -\teeny -c4.-> d8---3 +\time 3/4 +d4---5 c8( b a g) | +\set fontSize = -6 +e'4-- c!8-4( b a g) | +\set fontSize = 0 +fis4---3 e8( d) fis4 | +g2. +@end lilypond + +The @code{fontSize} value is a number indicating the size relative +to the standard size for the current staff height. The default +@code{fontSize} is 0; adding 6 to any @code{fontSize} value +doubles the printed size of the glyphs, and subtracting 6 halves +the size. Each step increases the size by approximately 12%. + +The scheme function @code{magnification->font-size} is provided +for convenience since the logarithmic units of the +@code{font-size} property are not entirely intuitive. For +example, to adjust the musical notation to 75% of the default +size, use: + +@example +\set fontSize = #(magnification->font-size 0.75) +@end example + +The scheme function @code{magstep} does the opposite: it converts +a @code{font-size} value into a magnification factor. + +The @code{fontSize} property will only affect notational elements +that are drawn with glyphs, such as noteheads, accidentals, +scripts, etc. It will not affect the size of the staff itself, +nor will it scale stems, beams, or horizontal spacing. To scale +stems, beams, and horizontal spacing along with the notation size +(without changing the staff size), use the @code{\magnifyMusic} +command discussed above. To scale everything, including the staff +size, see @ref{Setting the staff size}. + +Whenever the @code{fontSize} @i{context property} is set, its +value is added to the value of the @code{font-size} @i{grob +property} for individual layout objects, before any glyphs are +printed. This can cause confusion when setting individual +@code{font-size} properties while @code{fontSize} is already set: + +@lilypond[verbatim,quote,relative=2] +% the default font-size for NoteHead is 0 +% the default font-size for Fingering is -5 +c4-3 + +\set fontSize = -3 +% the effective font size for NoteHead is now -3 +% the effective font size for Fingering is now -8 +c4-3 + +\override Fingering.font-size = 0 +% the effective font size for Fingering is now -3 +c4-3 @end lilypond -Internally, this sets the @code{fontSize} property. This in turn -causes the @code{font-size} property to be set in all layout -objects. The value of @code{font-size} is a number indicating the -size relative to the standard size for the current staff height. -Each step up is an increase of approximately 12% of the font size. -Six steps is exactly a factor of two. The Scheme function -@code{magstep} converts a @code{font-size} number to a scaling -factor. The @code{font-size} property can also be set directly, -so that only certain layout objects are affected. +The following shorthand commands are also available: + +@multitable @columnfractions .2 .4 .4 +@item @b{Command} @tab @b{Equivalent to} @tab @b{Relative size} +@item @code{\teeny} @tab @code{\set fontSize = -3} @tab 71% +@item @code{\tiny} @tab @code{\set fontSize = -2} @tab 79% +@item @code{\small} @tab @code{\set fontSize = -1} @tab 89% +@item @code{\normalsize} @tab @code{\set fontSize = 0} @tab 100% +@item @code{\large} @tab @code{\set fontSize = 1} @tab 112% +@item @code{\huge} @tab @code{\set fontSize = 2} @tab 126% +@end multitable @lilypond[verbatim,quote,relative=2] -\set fontSize = #3 +\teeny c4.-> d8---3 -\override NoteHead.font-size = #-4 +\tiny c4.-> d8---3 -\override Script.font-size = #2 +\small c4.-> d8---3 -\override Stem.font-size = #-5 +\normalsize +c4.-> d8---3 +\large +c4.-> d8---3 +\huge c4.-> d8---3 @end lilypond + @cindex standard font size (notation) @cindex font size (notation), standard @@ -113,15 +258,12 @@ c4.-> d8---3 Font size changes are achieved by scaling the design size that is closest to the desired size. The standard font size (for -@w{@code{font-size = #0}}) depends on the standard staff height. +@w{@code{font-size = 0}}) depends on the standard staff height. For a 20pt staff, a 10pt font is selected. -The @code{font-size} property can only be set on layout objects -that use fonts. These are the ones supporting the -@code{font-interface} layout interface. - @predefined +@code{\magnifyMusic}, @code{\teeny}, @code{\tiny}, @code{\small}, @@ -131,6 +273,16 @@ that use fonts. These are the ones supporting the @endpredefined @seealso +Notation Reference: +@ref{Selecting font and font size}, +@ref{Setting the staff size}, +@ref{Formatting cue notes}, +@ref{Ossia staves}. + +Installed Files: +@file{ly/music-functions-init.ly}, +@file{ly/property-init.ly}. + Snippets: @rlsr{Editorial annotations}. diff --git a/Documentation/notation/expressive.itely b/Documentation/notation/expressive.itely index 96c1449e91..40326a0edd 100644 --- a/Documentation/notation/expressive.itely +++ b/Documentation/notation/expressive.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.25" +@c \version "2.18.0" @node Expressive marks @section Expressive marks @@ -960,6 +960,12 @@ Breath marks are entered using @code{\breathe}: 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}. diff --git a/Documentation/notation/fretted-strings.itely b/Documentation/notation/fretted-strings.itely index 121dfc0580..f8461b4ada 100644 --- a/Documentation/notation/fretted-strings.itely +++ b/Documentation/notation/fretted-strings.itely @@ -7,7 +7,7 @@ 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 @@ -180,7 +180,7 @@ symbols = { c4-.^"Allegro" d( e) f4-.\f g a^\fermata \mark \default - c8_.\<\( c16 c~ c2\! + c8_.\<\( c16 c~ 2\! c'2.\prall\) } @@ -206,7 +206,7 @@ symbols = { c4-.^"Allegro" d( e) f4-.\f g a^\fermata \mark \default - c8_.\<\( c16 c~ c2\! + c8_.\<\( c16 c~ 2\! c'2.\prall\) } @@ -258,8 +258,9 @@ to @code{#t}. @funindex \tabChordRepeats @funindex \chordRepeats -@cindex Chord, repetition +@cindex chord, repetition @cindex repetition, using @code{q} +@cindex @code{q}, chord repetition Chord constructs can be repeated by the chord repetition symbol @code{q}. In combination with tabulatures, its behavior of removing @@ -274,7 +275,7 @@ as @code{\tabChordRepeats}. @lilypond[quote,verbatim] guitar = \relative c' { - r8 ~ q4 q8~ q q4 + r8 ~ q4 q8~ 8 q4 } \new StaffGroup << @@ -295,7 +296,7 @@ the second alternative of a repeat. ties = \relative c' { \repeat volta 2 { e2. f4~ - f2 g2~ + 2 g2~ } \alternative { { g4 f2. } @@ -335,7 +336,7 @@ engraving fret numbers in parentheses: ties = \relative c' { \repeat volta 2 { e2. f4~ - f2 g2~ } + 2 g2~ } \alternative { { g4 f2. } { g4\repeatTie c,2. } diff --git a/Documentation/notation/input.itely b/Documentation/notation/input.itely index 0663c9c617..fc2ead626d 100644 --- a/Documentation/notation/input.itely +++ b/Documentation/notation/input.itely @@ -8,7 +8,7 @@ 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 @@ -2405,7 +2405,7 @@ lyrics and as stand-alone text below the score: } \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 @@ -2624,16 +2624,15 @@ Gonville. @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 @@ -2689,11 +2688,10 @@ All @code{\tempo} indications, including all subsequent tempo changes, 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 @{ @@ -2705,8 +2703,9 @@ audio playback. @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 @@ -2728,17 +2727,31 @@ block; 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 @@ -2759,12 +2772,8 @@ crescendi and decrescendi cannot affect the volume of a single note. 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 @@ -2775,8 +2784,8 @@ Learning Manual: @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 @{ @@ -2795,6 +2804,13 @@ If the selected instrument does not exactly match an instrument from 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? @@ -2842,37 +2858,53 @@ player that supports pitch bend.) @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 @@ -2880,10 +2912,9 @@ unless you use @ref{The Articulate script}: @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 { @@ -2902,10 +2933,10 @@ In scores containing multiple voices, unfolding of repeats in MIDI 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 @{ @@ -2918,13 +2949,21 @@ and percent repeats). For example, @} @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:: @@ -2936,8 +2975,8 @@ the relative volume of different instruments. @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}. @@ -2946,15 +2985,15 @@ function which takes a dynamic mark as its argument and returns the 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) @@ -2977,12 +3016,24 @@ found, or calls the default function otherwise. } @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 @@ -3009,8 +3060,8 @@ volume is limited to the range 0.2 - 0.5. \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 { @@ -3035,17 +3086,25 @@ volume is limited to the range 0.2 - 0.5. } @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 { @@ -3058,8 +3117,8 @@ to the volume of the flute. \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 { @@ -3081,28 +3140,32 @@ to the volume of the flute. } @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 '()) @@ -3128,8 +3191,8 @@ to the same values as the previous example. \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 { @@ -3149,6 +3212,13 @@ to the same values as the previous example. } @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 @@ -3184,43 +3254,51 @@ copied out and compiled to test microtones in your MIDI player. @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" @@ -3230,7 +3308,7 @@ and in the @code{\score} section do @example \unfoldRepeats \articulate << - all the rest of the score@dots{} + all the rest of the score@dots{} >> @end example @@ -3243,8 +3321,17 @@ to insert the @code{\unfoldRepeats} command as it appears in the 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. diff --git a/Documentation/notation/percussion.itely b/Documentation/notation/percussion.itely index f97af1ccef..c44799e175 100644 --- a/Documentation/notation/percussion.itely +++ b/Documentation/notation/percussion.itely @@ -100,9 +100,9 @@ be set explicitly. Other clefs may be used as well. @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 @@ -135,10 +135,10 @@ as described in @ref{Tremolo repeats}. @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 @@ -150,9 +150,9 @@ may be overridden to achieve a pleasing baseline. @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 @@ -426,8 +426,8 @@ woodstaff = { \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 @@ -455,8 +455,8 @@ tambustaff = { \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 | @@ -502,8 +502,8 @@ bellstaff = { \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 @@ -593,12 +593,12 @@ Ghost notes for drums and percussion may be created using the \drummode { << { - hh8[ hh] hh16 + hh8[ 8] hh16 \parenthesize sn hh \parenthesize sn hh8 hh } \\ { - bd4 r4 bd8 bd r8 bd + bd4 r4 bd8 8 r8 bd } >> } diff --git a/Documentation/notation/pitches.itely b/Documentation/notation/pitches.itely index 4c41302c4f..b5cc66246d 100644 --- a/Documentation/notation/pitches.itely +++ b/Documentation/notation/pitches.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.18" +@c \version "2.19.2" @node Pitches @@ -405,7 +405,7 @@ Accidentals on tied notes are only printed at the beginning of a new system: @lilypond[verbatim,quote,relative=2,ragged-right] -cis1~ cis~ +cis1~ 1~ \break cis @end lilypond @@ -1225,10 +1225,10 @@ any @code{\override} done to the @var{Clef} will also need to be 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 @@ -2443,6 +2443,124 @@ musicB = { } @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 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8[ + \change Staff = up + cis' cis + \change Staff = down + ] + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + \accidentalStyle dodecaphonic-no-repeat + \musicA + } + \context Staff = "down" { + \accidentalStyle dodecaphonic-no-repeat + \musicB + } + >> +} +@end lilypond + + +@item dodecaphonic-first + +@cindex dodecaphonic accidental style +@cindex dodecaphonic style, neo-modern + +@funindex dodecaphonic-first + +Similar to the dodecaphonic accidental style @emph{every} pitch +gets an accidental sign, but only the first time it is encountered +in a measure. Accidentals are only remembered for the actual octave +but throughout voices. + +@lilypond[quote] +musicA = { + << + \relative c' { + cis'8 fis, bes4 8 f bis4 | + cis2. 4 | + } + \\ + \relative c' { + ais'2 cis, | + fis8 b a4 cis2 | + } + >> +} + +musicB = { + \clef bass + \new Voice { + \voiceTwo \relative c' { + 8[ + \change Staff = up + cis' cis + \change Staff = down + ] + \showStaffSwitch + \change Staff = up + dis'4 | + \change Staff = down + 4 gis 2 | + } + } +} + +\new PianoStaff { + << + \context Staff = "up" { + \accidentalStyle dodecaphonic-first + \musicA + } + \context Staff = "down" { + \accidentalStyle dodecaphonic-first + \musicB + } + >> +} +@end lilypond + @item teaching @@ -3072,8 +3190,8 @@ rhythm. Such note heads can be created: 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 } diff --git a/Documentation/notation/repeats.itely b/Documentation/notation/repeats.itely index f3c4c5ac6c..332887d543 100644 --- a/Documentation/notation/repeats.itely +++ b/Documentation/notation/repeats.itely @@ -94,6 +94,16 @@ c2 d \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. @@ -204,41 +214,6 @@ a2 a | 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 @@ -360,6 +335,9 @@ Notation Reference: @ref{Modifying ties and slurs}, @ref{Time administration}. +Installed Files: +@file{ly/engraver-init.ly}. + Snippets: @rlsr{Repeats}. @@ -519,12 +497,6 @@ voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } } @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}, @@ -801,14 +773,13 @@ the note should not be surrounded by braces: @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 diff --git a/Documentation/notation/rhythms.itely b/Documentation/notation/rhythms.itely index a32975c1a8..72c963cdb7 100644 --- a/Documentation/notation/rhythms.itely +++ b/Documentation/notation/rhythms.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @node Rhythms @section Rhythms @@ -93,6 +93,15 @@ note. 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 @@ -204,7 +213,7 @@ tuplets are triplets: 3@tie{}notes sound within the duration 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 @@ -422,7 +431,14 @@ of each pair of notes being tied. This indicates that the note 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 @@ -431,8 +447,8 @@ used when note values cross larger subdivisions of the measure: @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 @@ -450,7 +466,8 @@ created. Chords may be partially tied by placing the ties inside the chord. @lilypond[quote,verbatim,relative=1] -~ +2 ~ 2 +4~ @end lilypond @@ -519,26 +536,26 @@ dashed. @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 @@ -1412,12 +1429,29 @@ So the first example above could be written: e8 | a4 c8 b c4 | @end lilypond -The property @code{measurePosition} contains a rational number, which -is usually positive and indicates how much of the measure has passed -at this point. The @code{\partial @var{duration}} command sets it to -a negative number, when it has a different meaning: it then says that -the current (first) bar will be @emph{preceded} by a bar 0 (the partial -bar) with a duration given by @var{duration}. +The property @code{measurePosition} contains a rational number, +which is usually positive and indicates how much of the measure +has passed at this point. @code{\partial @var{duration}} is +defined such that no numbered bar gets created: when used at the +beginning of a score, @code{measurePosition} is set to a +negative number, implying that the current bar will be +@emph{preceded} by additional material. When used elsewhere, it +moves the requested distance before the @emph{end} of the bar. + +@lilypond[quote,verbatim,relative=1] +\set Score.barNumberVisibility = #all-bar-numbers-visible +\override Score.BarNumber.break-visibility = + #end-of-line-invisible +\time 6/8 +\partial 8 +e8 | a4 c8 b[ c b] | +\partial 4 +r8 e,8 | a4 \bar "||" +\partial 4 +r8 e8 | a4 +c8 b[ c b] | +@end lilypond + @seealso Music Glossary: @@ -1432,19 +1466,6 @@ Snippets: 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 @@ -1788,6 +1809,37 @@ inserts ties for notes. One of its uses is to debug complex scores: if 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} @@ -1807,12 +1859,12 @@ Internals Reference: @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 @@ -2015,6 +2067,7 @@ new beam starts. @funindex autoBeaming @funindex baseMoment @funindex beamExceptions +@funindex \beamExceptions @funindex beatStructure @funindex measureLength @funindex \time @@ -2156,42 +2209,24 @@ the time signature. Any exceptions to this default can be found in 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, @@ -3476,6 +3511,12 @@ durations in the other staves. For the above example >> @end lilypond +Please make sure that you use the @code{\grace} command for the +spacer part, even if the visual part uses @code{\acciaccatura} or +@code{\appoggiatura} because otherwise an ugly slur fragment will +be printed, connecting the invisible grace note with the following +note. + The use of grace notes within voice contexts confuses the way the voice is typeset. This can be overcome by inserting a rest or note between the voice command and the grace note. diff --git a/Documentation/notation/simultaneous.itely b/Documentation/notation/simultaneous.itely index 4725ecf0de..c139853fc1 100644 --- a/Documentation/notation/simultaneous.itely +++ b/Documentation/notation/simultaneous.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.28" +@c \version "2.19.2" @node Simultaneous notes @@ -152,8 +152,9 @@ enharmonic transcription of one or more pitches, @node Chord repetition @unnumberedsubsubsec Chord repetition -@cindex Chord, repetition +@cindex chord, repetition @cindex repetition, using @code{q} +@cindex @code{q}, chord repetition In order to save typing, a shortcut can be used to repeat the preceding chord. The chord repetition symbol is @code{q}: @@ -394,7 +395,7 @@ voices in a single staff is illustrated in the following example: \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 @@ -471,7 +472,7 @@ The first example could be typeset as follows: << { 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 @@ -1111,12 +1112,12 @@ be of the same length.} \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 | } @@ -1136,12 +1137,12 @@ note in the input -- in other words, relative notes for \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 | } diff --git a/Documentation/notation/spacing.itely b/Documentation/notation/spacing.itely index 73b431dd79..3ee12b6798 100644 --- a/Documentation/notation/spacing.itely +++ b/Documentation/notation/spacing.itely @@ -21,30 +21,6 @@ Negative numbers are allowed: > and prints page number -1 on the second page, for example. -In 5.2.1 the @refbugs (line 495 in spacing.itely on master) it -states: - -"@code{layout-set-staff-size} does not change the distance between -the -staff lines." - -Could we add a sentence: -"Use instead the pair fontSize = #@var{N} - \override StaffSymbol.staff-space = #(magstep -@var{N}) -inside the Staff context to change the size of the font and the -distance between -staff lines accordingly." - -Actually I found, that the @internalsref{StaffSymbol} at line 481 -sends to an incomplete -documentation. The property staff-space is not explained here. I -thought Y-extent might be of -help, but it is in turn explained by x-space which again is -missing from the list. Who has the -knowledge to fix this? - - Clarify http://code.google.com/p/lilypond/issues/detail?id=68 @@ -394,18 +370,16 @@ default value is scaled accordingly. @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 @@ -1269,92 +1243,109 @@ Snippets: @cindex font size, setting @cindex staff size, setting @funindex layout file +@funindex magnification->font-size +@funindex magstep +@funindex set-global-staff-size +@funindex layout-set-staff-size -The default @strong{staff size} is set to 20 points. -This may be changed in two ways: +The default @strong{staff size} is 20 points, which corresponds to +a staff height of 7.03mm (one point is equal to 100/7227 of an +inch, or 2540/7227 mm). The staff size may be changed in three +ways: -To set the staff size globally for all scores in a file (or -in a @code{book} block, to be precise), use @code{set-global-staff-size}. +@enumerate + +@item +To set the staff size globally for all scores in a file (or in a +@code{\book} block, to be precise), use +@code{set-global-staff-size}: @example #(set-global-staff-size 14) @end example @noindent -This sets the global default size to 14pt staff height and scales all -fonts accordingly. +The above example sets the global default staff size to 14pt +(4.92mm) and scales all fonts accordingly. + +@item +To set the staff size for a single score within a book, use +@code{layout-set-staff-size} inside that score's @code{\layout} +block: -To set the staff size individually for each score, use @example -\score@{ +\score @{ @dots{} \layout @{ - #(layout-set-staff-size 15) + #(layout-set-staff-size 14) @} @} @end example +@item +To set the staff size for a single staff within a system, set the +staff's font-size and staff-space using units relative to the +score's default staff size. Using relative units prevents the +proportion of staff sizes from being altered if the default staff +size is modified with @code{set-global-staff-size} or +@code{layout-set-staff-size}. + +For example, traditionally engraved chamber music scores with +piano often used 7mm piano staves while the other staves were up +to 5/7 as large (if space allowed), or down to 3/5 as large (if +space was cramped). To achieve the 5/7 proportion, use: + +@example +\score @{ + << + \new Staff \with @{ + fontSize = #(magnification->font-size 5/7) + \override StaffSymbol.staff-space = #5/7 + @} @{ @dots{} @} + \new PianoStaff @{ @dots{} @} + >> +@} +@end example + +If you happen to know which @code{fontSize} you wish to use, you +could use the following form: + +@example +\score @{ + << + \new Staff \with @{ + fontSize = -3 + \override StaffSymbol.staff-space = #(magstep -3) + @} @{ @dots{} @} + \new PianoStaff @{ @dots{} @} + >> +@} +@end example + +To emulate the look of traditional engraving, it is best to avoid +reducing the thickness of the staff lines. + +@end enumerate + + +@subheading Automatic font weight at different sizes + The Feta font provides musical symbols at eight different sizes. Each font is tuned for a different staff size: at a smaller size the font becomes heavier, to match the relatively heavier staff lines. The recommended font sizes are listed in the following table: -@quotation @multitable @columnfractions .15 .2 .22 .2 - -@item @b{font name} -@tab @b{staff height (pt)} -@tab @b{staff height (mm)} -@tab @b{use} - -@item feta11 -@tab 11.22 -@tab 3.9 -@tab pocket scores - -@item feta13 -@tab 12.60 -@tab 4.4 -@tab - -@item feta14 -@tab 14.14 -@tab 5.0 -@tab - -@item feta16 -@tab 15.87 -@tab 5.6 -@tab - -@item feta18 -@tab 17.82 -@tab 6.3 -@tab song books - -@item feta20 -@tab 20 -@tab 7.0 -@tab standard parts - -@item feta23 -@tab 22.45 -@tab 7.9 -@tab - -@item feta26 -@tab 25.2 -@tab 8.9 -@tab -@c modern rental material? - +@item @b{font name} @tab @b{staff height (pt)} @tab @b{staff height (mm)} @tab @b{use} +@item feta11 @tab 11.22 @tab 3.9 @tab pocket scores +@item feta13 @tab 12.60 @tab 4.4 @tab +@item feta14 @tab 14.14 @tab 5.0 @tab +@item feta16 @tab 15.87 @tab 5.6 @tab +@item feta18 @tab 17.82 @tab 6.3 @tab song books +@item feta20 @tab 20 @tab 7.0 @tab standard parts +@item feta23 @tab 22.45 @tab 7.9 @tab +@item feta26 @tab 25.2 @tab 8.9 @tab @c modern rental material? @end multitable -@end quotation - -These fonts are available in any sizes. The context property -@code{fontSize} and the layout property @code{staff-space} (in -@rinternals{StaffSymbol}) can be used to tune the size for individual -staves. The sizes of individual staves are relative to the global size. @seealso Notation Reference: @@ -1521,10 +1512,12 @@ The @code{\pageBreak} and @code{\noPageBreak} commands may also be 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 @@ -2768,8 +2761,7 @@ more space, shorter durations get less. The shortest durations get a 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). @@ -3089,11 +3081,14 @@ proportional notation settings and examine how these settings interact. 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 } } >> } @@ -3118,7 +3113,7 @@ setting. \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 { @@ -3162,7 +3157,7 @@ larger reference durations space music tightly. \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 { @@ -3176,7 +3171,7 @@ larger reference durations space music tightly. \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 { @@ -3190,7 +3185,7 @@ larger reference durations space music tightly. \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 { @@ -3218,10 +3213,10 @@ tuplet. \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 } } >> } @@ -3236,10 +3231,10 @@ result. Setting @code{proportionalNotationDuration} fixes this. \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 { @@ -3261,10 +3256,10 @@ turn on @code{uniform-stretching}, which is a property of \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 { @@ -3360,13 +3355,13 @@ property of @code{SpacingSpanner}. Compare the two scores below: @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 diff --git a/Documentation/notation/staff.itely b/Documentation/notation/staff.itely index e7133e3d4f..1462d0996e 100644 --- a/Documentation/notation/staff.itely +++ b/Documentation/notation/staff.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @node Staff notation @section Staff notation @@ -1029,7 +1029,7 @@ expression to declare the instrument switch: R1*16 \instrumentSwitch "contrabassoon" c,,2 g \break - c,1 ~ | c1 + c,1 ~ | 1 } @end lilypond diff --git a/Documentation/notation/text.itely b/Documentation/notation/text.itely index 62aac77931..739abbdf49 100644 --- a/Documentation/notation/text.itely +++ b/Documentation/notation/text.itely @@ -1486,8 +1486,8 @@ a1_\markup { @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 diff --git a/Documentation/notation/vocal.itely b/Documentation/notation/vocal.itely index 06aa65d46d..62600cf547 100644 --- a/Documentation/notation/vocal.itely +++ b/Documentation/notation/vocal.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.17.30" +@c \version "2.19.2" @node Vocal music @section Vocal music @@ -654,8 +654,8 @@ together: \new Voice = "melody" { \time 3/4 f4 g2 ~ | - g4 e2 ~ | - e8 + 4 e2 ~ | + 8 } \new Lyrics \lyricsto "melody" { Ky -- ri -- e __ @@ -755,7 +755,7 @@ without their indicating melismata. To do this, set \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 @@ -783,7 +783,7 @@ should be included in the melisma: \time 3/4 \set melismaBusyProperties = #'() c4 d ( e ) - g8 [ f ] ~ f4 ~ f + g8 [ f ] ~ 4 ~ f } \new Lyrics \lyricsto "melody" { Ky -- ri -- _ e __ _ _ _ @@ -2282,6 +2282,8 @@ Several common topics in choral music are described fully elsewhere: @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 diff --git a/Documentation/pictures/logo-debian.png b/Documentation/pictures/logo-debian.png index d163414d3b..2a1dc1853b 100644 Binary files a/Documentation/pictures/logo-debian.png and b/Documentation/pictures/logo-debian.png differ diff --git a/Documentation/po/it.po b/Documentation/po/it.po index 4304b73819..1737322565 100644 --- a/Documentation/po/it.po +++ b/Documentation/po/it.po @@ -1,5 +1,5 @@ # 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 , 2009, 2012. # diff --git a/Documentation/search-box.ihtml b/Documentation/search-box.ihtml index 9f48bc6f56..988033c8a6 100644 --- a/Documentation/search-box.ihtml +++ b/Documentation/search-box.ihtml @@ -9,11 +9,11 @@ search for a while and have a redirection from "v2.15" to "v2.17". diff --git a/Documentation/snippets/aligning-syllables-with-melisma.ly b/Documentation/snippets/aligning-syllables-with-melisma.ly index 7acef57d56..ae3f731ed2 100644 --- a/Documentation/snippets/aligning-syllables-with-melisma.ly +++ b/Documentation/snippets/aligning-syllables-with-melisma.ly @@ -4,7 +4,7 @@ %% 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" @@ -29,7 +29,7 @@ their note. The alignment can be altered using the 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 diff --git a/Documentation/snippets/broken-crescendo-hairpin.ly b/Documentation/snippets/broken-crescendo-hairpin.ly index 68960a5840..1515b52fa3 100644 --- a/Documentation/snippets/broken-crescendo-hairpin.ly +++ b/Documentation/snippets/broken-crescendo-hairpin.ly @@ -4,8 +4,8 @@ % 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" @@ -44,7 +44,7 @@ draw the rectangle over the hairpin. 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 } >> } diff --git a/Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly b/Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly index aded2070cb..1cd549b742 100644 --- a/Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly +++ b/Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly @@ -4,7 +4,7 @@ %% 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" @@ -36,8 +36,8 @@ two MIDI channels are created, each with a different \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" diff --git a/Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly b/Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly index 88efc8c20f..4deb652211 100644 --- a/Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly +++ b/Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly @@ -5,7 +5,7 @@ % % This file is in the public domain. %% Note: this file works from version 2.16.0 -\version "2.16.0" +\version "2.19.7" \header { @@ -184,7 +184,7 @@ position of middle C and key signature from @var{translator}'s context." 0)) (set! (ambitus-start-key-sig ambitus) (ly:context-property (ly:translator-context translator) - 'keySignature))))) + 'keyAlterations))))) #(define-method (update-ambitus-notes (ambitus ) note-grob) "Update the upper and lower ambitus pithes of @var{ambitus}, using diff --git a/Documentation/snippets/engravers-one-by-one.ly b/Documentation/snippets/engravers-one-by-one.ly index bae30fb440..68cadaf223 100644 --- a/Documentation/snippets/engravers-one-by-one.ly +++ b/Documentation/snippets/engravers-one-by-one.ly @@ -4,7 +4,7 @@ %% and then run scripts/auxiliar/makelsr.py %% %% This file is in the public domain. -\version "2.17.29" +\version "2.19.7" \header { lsrtags = "contexts-and-engravers, specific-notation" @@ -109,7 +109,7 @@ MyStaff = \context { \consists "Pitch_squash_engraver" - localKeySignature = #'() + localAlterations = #'() % explicitly set instrumentName, so we don't get % weird effects when doing instrument names for @@ -135,7 +135,7 @@ MyVoice = \context { You have to instantiate this explicitly if you want to have multiple voices on the same staff." - localKeySignature = #'() + localAlterations = #'() \consists "Font_size_engraver" % must come before all diff --git a/Documentation/snippets/figured-bass-headword.ly b/Documentation/snippets/figured-bass-headword.ly index 8b76e0204d..018a27b61c 100644 --- a/Documentation/snippets/figured-bass-headword.ly +++ b/Documentation/snippets/figured-bass-headword.ly @@ -4,7 +4,7 @@ %% 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" @@ -78,7 +78,7 @@ extendOff = \bassFigureExtendersOff 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 | diff --git a/Documentation/snippets/flat-flags-and-beam-nibs.ly b/Documentation/snippets/flat-flags-and-beam-nibs.ly index 9657cfe775..96a6bcc153 100644 --- a/Documentation/snippets/flat-flags-and-beam-nibs.ly +++ b/Documentation/snippets/flat-flags-and-beam-nibs.ly @@ -1,10 +1,11 @@ -%% 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" @@ -47,7 +48,7 @@ carry both a left- and right-pointing flat flag. Do this with paired (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.) @@ -69,25 +70,25 @@ carry both a left- and right-pointing flat flag. Do this with paired \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 } >> } diff --git a/Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly b/Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly index 1c3c4ea4ea..7cb8869e0a 100644 --- a/Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly +++ b/Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly @@ -4,7 +4,7 @@ %% 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" @@ -19,7 +19,7 @@ system. \relative c'' { \override Accidental.hide-tied-accidental-after-break = ##t - cis1~ cis~ + cis1~ 1~ \break cis } diff --git a/Documentation/snippets/how-to-change-fret-diagram-position.ly b/Documentation/snippets/how-to-change-fret-diagram-position.ly index cbcd2bc9c7..da24c5a5dd 100644 --- a/Documentation/snippets/how-to-change-fret-diagram-position.ly +++ b/Documentation/snippets/how-to-change-fret-diagram-position.ly @@ -4,7 +4,7 @@ %% 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" @@ -51,7 +51,7 @@ harmonies = \chordmode 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;" } } >> diff --git a/Documentation/snippets/makam-example.ly b/Documentation/snippets/makam-example.ly index b170052daa..0b0b6bba21 100644 --- a/Documentation/snippets/makam-example.ly +++ b/Documentation/snippets/makam-example.ly @@ -4,7 +4,7 @@ %% and then run scripts/auxiliar/makelsr.py %% %% This file is in the public domain. -\version "2.16.0" +\version "2.19.7" \header { lsrtags = "pitches, version-specific, world-music" @@ -23,7 +23,7 @@ details of pitch names and alterations. \include "makam.ly" \relative c' { - \set Staff.keySignature = #`((6 . ,(- KOMA)) (3 . ,BAKIYE)) + \set Staff.keyAlterations = #`((6 . ,(- KOMA)) (3 . ,BAKIYE)) c4 cc db fk gbm4 gfc gfb efk fk4 db cc c diff --git a/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly b/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly index c7ad7b10a5..8ff1608b09 100644 --- a/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly +++ b/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly @@ -4,8 +4,8 @@ % 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" @@ -33,10 +33,10 @@ in that voice, the tie appears to cross voices. { \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 } \\ { diff --git a/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly b/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly index a2553ad84e..1c1fcd1019 100644 --- a/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly +++ b/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly @@ -14,9 +14,9 @@ The shorthands are defined in @samp{ly/script-init.ly}, where the 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}: " @@ -26,6 +26,6 @@ the default + symbol, assign the value @code{trill} to the variable \relative c'' { c1-+ } -dashPlus = "trill" +dashPlus = \trill \relative c'' { c1-+ } diff --git a/Documentation/snippets/modifying-tuplet-bracket-length.ly b/Documentation/snippets/modifying-tuplet-bracket-length.ly index bde66e6168..f19f6bc318 100644 --- a/Documentation/snippets/modifying-tuplet-bracket-length.ly +++ b/Documentation/snippets/modifying-tuplet-bracket-length.ly @@ -1,10 +1,11 @@ -%% 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" @@ -30,11 +31,11 @@ modify what material they cover. % ...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. } diff --git a/Documentation/snippets/new/broken-crescendo-hairpin.ly b/Documentation/snippets/new/broken-crescendo-hairpin.ly index 27df9446ad..f14c983eea 100644 --- a/Documentation/snippets/new/broken-crescendo-hairpin.ly +++ b/Documentation/snippets/new/broken-crescendo-hairpin.ly @@ -1,4 +1,4 @@ -\version "2.17.27" +\version "2.19.2" \header { lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs" @@ -36,7 +36,7 @@ draw the rectangle over the hairpin. 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 } >> } diff --git a/Documentation/snippets/new/defining-an-engraver-in-scheme--ambitus-engraver.ly b/Documentation/snippets/new/defining-an-engraver-in-scheme--ambitus-engraver.ly index 84642a20da..16758381c3 100644 --- a/Documentation/snippets/new/defining-an-engraver-in-scheme--ambitus-engraver.ly +++ b/Documentation/snippets/new/defining-an-engraver-in-scheme--ambitus-engraver.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.7" \header { @@ -176,7 +176,7 @@ position of middle C and key signature from @var{translator}'s context." 0)) (set! (ambitus-start-key-sig ambitus) (ly:context-property (ly:translator-context translator) - 'keySignature))))) + 'keyAlterations))))) #(define-method (update-ambitus-notes (ambitus ) note-grob) "Update the upper and lower ambitus pithes of @var{ambitus}, using diff --git a/Documentation/snippets/new/flat-flags-and-beam-nibs.ly b/Documentation/snippets/new/flat-flags-and-beam-nibs.ly new file mode 100644 index 0000000000..754394be7a --- /dev/null +++ b/Documentation/snippets/new/flat-flags-and-beam-nibs.ly @@ -0,0 +1,86 @@ +\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 + } + >> +} diff --git a/Documentation/snippets/new/making-an-object-invisible-with-the-transparent-property.ly b/Documentation/snippets/new/making-an-object-invisible-with-the-transparent-property.ly index 70b3bf144e..2596aebc36 100644 --- a/Documentation/snippets/new/making-an-object-invisible-with-the-transparent-property.ly +++ b/Documentation/snippets/new/making-an-object-invisible-with-the-transparent-property.ly @@ -1,4 +1,4 @@ -\version "2.17.30" +\version "2.19.2" \header { lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides" @@ -25,10 +25,10 @@ in that voice, the tie appears to cross voices. { \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 } \\ { diff --git a/Documentation/snippets/new/modifying-tuplet-bracket-length.ly b/Documentation/snippets/new/modifying-tuplet-bracket-length.ly new file mode 100644 index 0000000000..6ee36e8201 --- /dev/null +++ b/Documentation/snippets/new/modifying-tuplet-bracket-length.ly @@ -0,0 +1,33 @@ +\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. +} diff --git a/Documentation/snippets/new/non-traditional-key-signatures.ly b/Documentation/snippets/new/non-traditional-key-signatures.ly new file mode 100644 index 0000000000..5559898bec --- /dev/null +++ b/Documentation/snippets/new/non-traditional-key-signatures.ly @@ -0,0 +1,44 @@ +\version "2.19.7" + +\header { + lsrtags = "contemporary-notation, pitches, really-cool, staff-notation, version-specific" + + texidoc = " +The commonly used @code{\\key} command sets the @code{keyAlterations} +property, in the @code{Staff} context. + +To create non-standard key signatures, set this property directly. The +format of this command is a list: + +@code{ \\set Staff.keyAlterations = #`(((octave . step) . alter) ((octave +. step) . alter) ...) } where, for each element in the list, +@code{octave} specifies the octave (0 being the octave from middle C to +the B above), @code{step} specifies the note within the octave (0 means +C and 6 means B), and @code{alter} is @code{,SHARP ,FLAT ,DOUBLE-SHARP} +etc. (Note the leading comma.) + + +Alternatively, for each item in the list, using the more concise format +@code{(step . alter)} specifies that the same alteration should hold in +all octaves. + + +For microtonal scales where a @qq{sharp} is not 100 cents, @code{alter} +refers to the alteration as a proportion of a 200-cent whole tone. + + +Here is an example of a possible key signature for generating a +whole-tone scale: + +" + doctitle = "Non-traditional key signatures" +} + + +\relative c' { + \set Staff.keyAlterations = #`((6 . ,FLAT) + (5 . ,FLAT) + (3 . ,SHARP)) + c4 d e fis + aes4 bes c2 +} diff --git a/Documentation/snippets/new/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly b/Documentation/snippets/new/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly deleted file mode 100644 index 1bdd351b99..0000000000 --- a/Documentation/snippets/new/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly +++ /dev/null @@ -1,36 +0,0 @@ -\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 -} diff --git a/Documentation/snippets/new/staff-headword.ly b/Documentation/snippets/new/staff-headword.ly index 67bc0f6286..a23b5cb063 100644 --- a/Documentation/snippets/new/staff-headword.ly +++ b/Documentation/snippets/new/staff-headword.ly @@ -35,22 +35,13 @@ trompette = \relative do'' { 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' { @@ -102,7 +93,7 @@ lower = \relative do { \trompette } \context DrumStaff = "tambourin" { - \tambourinMidi + \tambourin } \context Staff = "piano" << \upper @@ -113,4 +104,3 @@ lower = \relative do { \tempo 4 = 72 } } - diff --git a/Documentation/snippets/new/unfretted-headword.ly b/Documentation/snippets/new/unfretted-headword.ly index 5c3f8a05dc..34397fb8e2 100644 --- a/Documentation/snippets/new/unfretted-headword.ly +++ b/Documentation/snippets/new/unfretted-headword.ly @@ -1,4 +1,4 @@ -\version "2.17.30" +\version "2.19.2" \header { lsrtags = "headword" @@ -146,7 +146,7 @@ ViolinSolo = \relative c' { \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 diff --git a/Documentation/snippets/non-traditional-key-signatures.ly b/Documentation/snippets/non-traditional-key-signatures.ly index 188f72b3d6..de513d1681 100644 --- a/Documentation/snippets/non-traditional-key-signatures.ly +++ b/Documentation/snippets/non-traditional-key-signatures.ly @@ -1,28 +1,28 @@ -%% DO NOT EDIT this file manually; it is automatically -%% generated from LSR http://lsr.dsi.unimi.it -%% Make any changes in LSR itself, or in Documentation/snippets/new/ , -%% and then run scripts/auxiliar/makelsr.py -%% -%% This file is in the public domain. -\version "2.16.0" +% DO NOT EDIT this file manually; it is automatically +% generated from Documentation/snippets/new +% Make any changes in Documentation/snippets/new/ +% and then run scripts/auxiliar/makelsr.py +% +% This file is in the public domain. +%% Note: this file works from version 2.19.7 +\version "2.19.7" \header { lsrtags = "contemporary-notation, pitches, really-cool, staff-notation, version-specific" texidoc = " -The commonly used @code{\\key} command sets the @code{keySignature} +The commonly used @code{\\key} command sets the @code{keyAlterations} property, in the @code{Staff} context. To create non-standard key signatures, set this property directly. The format of this command is a list: -@code{ \\set Staff.keySignature = #`(((octave . step) . alter) ((octave +@code{ \\set Staff.keyAlterations = #`(((octave . step) . alter) ((octave . step) . alter) ...) } where, for each element in the list, @code{octave} specifies the octave (0 being the octave from middle C to the B above), @code{step} specifies the note within the octave (0 means C and 6 means B), and @code{alter} is @code{,SHARP ,FLAT ,DOUBLE-SHARP} -etc. (Note the leading comma.) The accidentals in the key signature -will appear in the reverse order to that in which they are specified. +etc. (Note the leading comma.) Alternatively, for each item in the list, using the more concise format @@ -42,10 +42,11 @@ whole-tone scale: } % begin verbatim + \relative c' { - \set Staff.keySignature = #`(((0 . 6) . ,FLAT) - ((0 . 5) . ,FLAT) - ((0 . 3) . ,SHARP)) + \set Staff.keyAlterations = #`((6 . ,FLAT) + (5 . ,FLAT) + (3 . ,SHARP)) c4 d e fis aes4 bes c2 } diff --git a/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly b/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly deleted file mode 100644 index b8590edebf..0000000000 --- a/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly +++ /dev/null @@ -1,44 +0,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.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 -} diff --git a/Documentation/snippets/repeats.snippet-list b/Documentation/snippets/repeats.snippet-list index 3b55be22a8..d3fa46c992 100644 --- a/Documentation/snippets/repeats.snippet-list +++ b/Documentation/snippets/repeats.snippet-list @@ -8,7 +8,6 @@ numbering-groups-of-measures.ly 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 diff --git a/Documentation/snippets/rhythms-headword.ly b/Documentation/snippets/rhythms-headword.ly index b0c99b7dc4..5bf703a5d0 100644 --- a/Documentation/snippets/rhythms-headword.ly +++ b/Documentation/snippets/rhythms-headword.ly @@ -4,7 +4,7 @@ %% 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" @@ -82,7 +82,7 @@ Rhythms headword c'''32 ) \! g''8 ( ~ - g''32 [ + 32 [ a''64 g''64 ) ] diff --git a/Documentation/snippets/satb-choir-template---four-staves.ly b/Documentation/snippets/satb-choir-template---four-staves.ly index 99d40cc6c6..8df4962101 100644 --- a/Documentation/snippets/satb-choir-template---four-staves.ly +++ b/Documentation/snippets/satb-choir-template---four-staves.ly @@ -4,7 +4,7 @@ %% 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" @@ -48,28 +48,28 @@ basswords = \lyricmode { mi mi mi mi } \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 >> >> } diff --git a/Documentation/snippets/simultaneous-headword.ly b/Documentation/snippets/simultaneous-headword.ly index a08838f8f8..3afcc2a30f 100644 --- a/Documentation/snippets/simultaneous-headword.ly +++ b/Documentation/snippets/simultaneous-headword.ly @@ -4,7 +4,7 @@ %% 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" @@ -67,10 +67,10 @@ trillFlat = \trillFlat af''4.~ \startTrillSpan af''8.~ | - af''4.~ af''8.~ | + 4.~ 8.~ | \oneVoice 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 @@ -83,17 +83,17 @@ trillFlat = \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 @@ -126,8 +126,8 @@ trillFlat = \override Voice.TrillSpanner.direction = #UP f'4.~ \startTrillSpan f'8.~ | - f'4.~ f'8.~ | - f'8. \stopTrillSpan + 4.~ 8.~ | + 8. \stopTrillSpan } \new Voice { \voiceTwo diff --git a/Documentation/snippets/single-staff-template-with-notes-and-chords.ly b/Documentation/snippets/single-staff-template-with-notes-and-chords.ly index 75272f52f7..4ba723b516 100644 --- a/Documentation/snippets/single-staff-template-with-notes-and-chords.ly +++ b/Documentation/snippets/single-staff-template-with-notes-and-chords.ly @@ -4,7 +4,7 @@ %% 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" @@ -24,7 +24,7 @@ melody = \relative c' { \time 4/4 f4 e8[ c] d4 g - a2 ~ a + a2 ~ 2 } harmonies = \chordmode { diff --git a/Documentation/snippets/staff-headword.ly b/Documentation/snippets/staff-headword.ly index 6e81017f84..952b5d833f 100644 --- a/Documentation/snippets/staff-headword.ly +++ b/Documentation/snippets/staff-headword.ly @@ -43,22 +43,13 @@ trompette = \relative do'' { 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' { @@ -110,7 +101,7 @@ lower = \relative do { \trompette } \context DrumStaff = "tambourin" { - \tambourinMidi + \tambourin } \context Staff = "piano" << \upper diff --git a/Documentation/snippets/tweaks-and-overrides.snippet-list b/Documentation/snippets/tweaks-and-overrides.snippet-list index 2e71f5f6e3..872f35a91d 100644 --- a/Documentation/snippets/tweaks-and-overrides.snippet-list +++ b/Documentation/snippets/tweaks-and-overrides.snippet-list @@ -62,7 +62,6 @@ percent-repeat-count-visibility.ly 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 diff --git a/Documentation/snippets/unfretted-headword.ly b/Documentation/snippets/unfretted-headword.ly index 6cc02b677d..99e129afbf 100644 --- a/Documentation/snippets/unfretted-headword.ly +++ b/Documentation/snippets/unfretted-headword.ly @@ -4,8 +4,8 @@ % 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" @@ -154,7 +154,7 @@ ViolinSolo = \relative c' { \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 diff --git a/Documentation/snippets/using-arpeggiobracket-to-make-divisi-more-visible.ly b/Documentation/snippets/using-arpeggiobracket-to-make-divisi-more-visible.ly index c316d29d93..3eacc6132b 100644 --- a/Documentation/snippets/using-arpeggiobracket-to-make-divisi-more-visible.ly +++ b/Documentation/snippets/using-arpeggiobracket-to-make-divisi-more-visible.ly @@ -4,7 +4,7 @@ %% 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" @@ -39,9 +39,9 @@ often seen in choral music. \new Voice = "lower" { \voiceTwo a1 ~ - a + 1 a ~ - a4 \bar "|." + 4 \bar "|." } >> } diff --git a/Documentation/snippets/vocal-headword.ly b/Documentation/snippets/vocal-headword.ly index d09d784396..454daf765d 100644 --- a/Documentation/snippets/vocal-headword.ly +++ b/Documentation/snippets/vocal-headword.ly @@ -4,7 +4,7 @@ %% 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" @@ -39,7 +39,7 @@ Vocal 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 diff --git a/Documentation/usage.tely b/Documentation/usage.tely index cd13e6550c..f4cce23c11 100644 --- a/Documentation/usage.tely +++ b/Documentation/usage.tely @@ -21,7 +21,7 @@ LilyPond version @version{}. In addition, it suggests some @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 diff --git a/Documentation/usage/external.itely b/Documentation/usage/external.itely index 7c386ae733..3b4ff955b9 100644 --- a/Documentation/usage/external.itely +++ b/Documentation/usage/external.itely @@ -29,8 +29,8 @@ LilyPond can interact with other programs in various ways. @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:: @@ -41,10 +41,10 @@ some error in the sheet music. @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 @@ -205,11 +205,11 @@ likely that similar configurations will work for other viewers. @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 @@ -231,7 +231,7 @@ lilypond -dno-point-and-click file.ly @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 diff --git a/Documentation/usage/running.itely b/Documentation/usage/running.itely index 7e7692c86d..b9d5b22601 100644 --- a/Documentation/usage/running.itely +++ b/Documentation/usage/running.itely @@ -400,15 +400,14 @@ file with all pages (systems) including fonts. Used as default by @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} @@ -551,9 +550,9 @@ escaped double quotes. @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} @@ -616,9 +615,9 @@ havoc, e.g, @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 @@ -667,13 +666,12 @@ file names. @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} diff --git a/Documentation/usage/updating.itely b/Documentation/usage/updating.itely index 06a960ac8a..ad92a834e3 100644 --- a/Documentation/usage/updating.itely +++ b/Documentation/usage/updating.itely @@ -151,8 +151,11 @@ The following options can be given: @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 diff --git a/Documentation/web.texi b/Documentation/web.texi index 621488e92f..e33f0f7a5e 100644 --- a/Documentation/web.texi +++ b/Documentation/web.texi @@ -15,7 +15,7 @@ @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 @@ -34,7 +34,7 @@ @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 diff --git a/Documentation/web/download.itexi b/Documentation/web/download.itexi index 4781d161b7..b4c6e2f13b 100644 --- a/Documentation/web/download.itexi +++ b/Documentation/web/download.itexi @@ -142,13 +142,12 @@ acknowledged. @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 @@ -168,12 +167,12 @@ your LilyPond editor is using the correct version of lilypond. See @ifset web_version @downloadStableLinuxNormal @end ifset - -(if in doubt, use this) +32bit Systems. @item @sourceimage{logo-linux,,,} @downloadStableLinuxBig +64bit Systems. @item @sourceimage{logo-linux,,,} @@ -182,10 +181,12 @@ your LilyPond editor is using the correct version of lilypond. See @item @sourceimage{logo-freebsd,,,} @downloadStableFreeBSDNormal +32bit Systems. @item @sourceimage{logo-freebsd,,,} @downloadStableFreeBSDBig +64bit Systems @end itemize @@ -220,44 +221,6 @@ sh lilypond-@versionStable{}-OS-TYPE.sh --help @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 diff --git a/Documentation/web/introduction.itexi b/Documentation/web/introduction.itexi index 76d7e69312..512559a6b4 100644 --- a/Documentation/web/introduction.itexi +++ b/Documentation/web/introduction.itexi @@ -20,10 +20,14 @@ soulless look of computer-printed sheet music. Musicians prefer 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 @@ -100,8 +104,7 @@ traditions of classical music engraving. @divClass{column-center-top} -@subheading Elegance -@subsubheading Excellent classical engraving +@subheading Excellent classical engraving @imageFloat{flat-design,png,right} @@ -115,35 +118,67 @@ best-engraved classical scores. This is further explained in our @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. @@ -157,32 +192,74 @@ speech-recognition software to edit LilyPond files. Even users 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 @@ -190,17 +267,24 @@ pay someone else to do it. 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} @@ -216,6 +300,10 @@ already decided to try LilyPond, first read about our @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! @@ -297,6 +385,15 @@ The colors have been added for better visibility. @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 @@ -342,6 +439,7 @@ contributed by Hu Haipeng, a blind composer. @exampleImage{orchestra} @newsEnd +@divEnd @divClass{column-center-bottom} @subheading Where now? @@ -471,9 +569,11 @@ LilyPond, first read about our @ref{Text input}. 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} @@ -488,6 +588,16 @@ try LilyPond, first read about our @ref{Text input}. @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 @@ -645,6 +755,12 @@ If you've already decided to try LilyPond, first read about our @node Reviews @unnumberedsec Reviews +@divClass{column-center-top} +@subheading What do people say about LilyPond? + +@divEnd + + @divClass{column-left-top} @subheading Published articles @@ -1039,9 +1155,9 @@ help new users, beginning with @ref{Learning}. The Learning 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}. diff --git a/Documentation/web/news-front.itexi b/Documentation/web/news-front.itexi index 8d45279fb8..54da77f0f5 100644 --- a/Documentation/web/news-front.itexi +++ b/Documentation/web/news-front.itexi @@ -9,17 +9,140 @@ @c used for news about the upcoming release; see CG 10.2 @newsItem -@subsubheading LilyPond 2.17.95 released! @emph{November 3, 2013} - -We are excited to announce the release of LilyPond@tie{}2.17.95 as -beta release for the upcoming stable release@tie{}2.18. The -developers are still busy finding solutions for some last-minute -problems, but the release is supposed to be feature-complete, the -documentation to be accurate, and no important issues to be -overlooked. For upgrading the syntax of your input files to the -latest version, see @rprogram{Updating files with convert-ly}. -Please test this release and report back any problems, see -@rweb{Bug reports}. +@subsubheading LilyPond 2.19.8 released @emph{June 15, 2014} + +We are happy to announce the release of LilyPond 2.19.8. This +release includes a number of enhancements, and contains some work +in progress. You will have access to the very latest features, but +some may be incomplete, and you may encounter bugs and crashes. If you +require a stable version of Lilypond, we recommend using the 2.18 +version. + +@newsEnd + +@newsItem +@subsubheading Lilypond 2.18.2 released! @emph{March 23, 2014} + +We are proud to announce the release of GNU LilyPond 2.18.2. +LilyPond is a music engraving program devoted to producing the +highest-quality sheet music possible. It brings the aesthetics of +traditionally engraved music to computer printouts. + +This version provides a number of updates to 2.18.0, including +updated manuals. We recommend all users to upgrade to this version. + +@newsEnd + + +@newsItem +@subsubheading LilyPond production named BEST EDITION 2014 @emph{March 11, 2014} + +We are thrilled to announce that the new edition of the songs of Oskar +Fried (1871-1941), published recently by our fellow contributors Urs Liska +and Janek Warchoł [1], will receive the "Musikeditionspreis BEST EDITION +2014" of the German Music Publishers' Association [2]! The ceremony will +take place in a few days at the Frankfurt Musikmesse [3]. + +We congratulate Janek and Urs for gaining such public recognition of +typographical and editorial excellence of their work. We are also delighted +to inform you that they intend to make their work available under a Free +license as soon as the publisher expenses are covered. Please support this +initiative by buying the printed volume through the publisher [4] or by +pledging a contribution at the Indiegogo campaign [5]! + +[1] @uref{http://lilypondblog.org/category/fried-songs}@* +[2] @uref{http://www.best-edition.de}@* +[3] @uref{https://musik.messefrankfurt.com/frankfurt/en/besucher/events/awards/best_edition.html}@* +[4] @uref{http://www.sound-rel.de}@* +[5] @uref{http://igg.me/at/free-fried} + +@newsEnd + + +@newsItem +@subsubheading Lilypond 2.18.0 released! @emph{December 29, 2013} + +We are proud to announce the release of GNU LilyPond 2.18.0. +LilyPond is a music engraving program devoted to producing the +highest-quality sheet music possible. It brings the aesthetics of +traditionally engraved music to computer printouts. + +Among the numerous improvements and changes, the following might +be most visible: + +@itemize @bullet +@item +Many items are now positioned using their actual outline rather +than a@tie{}rectangular bounding box. This greatly reduces +the occurrence of unsightly large gaps. + +@item +Sets and overrides can now use the syntax +@example +\override Voice.TextSpanner.bound-details.left.text = "rit." +@end example +instead of the previous +@example +\override Voice.TextSpanner #'(bound-details left text) = "rit." +@end example + +@item +Triplets with a given group length can now be written as +@example +\tuplet 3/2 4 @{ c8 c c c c c @} +@end example +instead of +@example +\times 2/3 @{ c8 c c @} \times 2/3 @{ c8 c c @} +@end example +@end itemize + +A full list of noteworthy new features is given in: + +@example +@uref{http://lilypond.org/doc/v2.18/Documentation/changes/index.html} +@end example + +Great thanks go to the large number of LilyPond enthusiasts whose +financial backing enabled one core developer, David Kastrup, to +focus exclusively on LilyPond during the entire development cycle. + +LilyPond 2.18 has been brought to you by + +@table @asis +@item Main Developers: +Bertrand Bordage, Trevor Daniels, Colin Hall, Phil Holmes, Ian +Hulin, Reinhold Kainhofer, David Kastrup, Jonathan Kulp, Werner +Lemberg, John Mandereau, Patrick McCarty, Joe Neeman, Han-Wen +Nienhuys, Jan Nieuwenhuizen, Graham Percival, Mark Polesky, Neil +Puttock, Mike Solomon, Carl Sorensen, Francisco Vila, Valentin +Villenave, Janek Warchoł + +@item Core Contributors: +Aleksandr Andreev, Frédéric Bron, Torsten Hämmerle, Marc Hohl, +James Lowe, Andrew Main, Thomas Morley, David Nalesnik, Keith +OHara, Benkő Pál, Anders Pilegaard, Julien Rioux, Johannes Rohrer, +Adam Spiers, Heikki Tauriainen + +@item Documentation Writers: +Frédéric Bron, Federico Bruni, Colin Campbell, Urs Liska, James +Lowe, Thomas Morley, Jean-Charles Malahieude, Guy Stalnaker, +Martin Tarenskeen, Arnold Theresius, Rodolfo Zitellini + +@item Bug Squad: +Colin Campbell, Eluze, Marc Hohl, Phil Holmes, Marek Klein, Ralph +Palmer + +@item Support Team: +Colin Campbell, Eluze, Marc Hohl, Marek Klein, Kieren MacMillan, +Urs Liska, Ralph Palmer + +@item Translators: +Federico Bruni, Luca Rossetto Casel, Felipe Castro, Pavel Fric, +Jean-Charles Malahieude, Till Paala, Yoshiki Sawada + +@end table +and numerous other contributors. @newsEnd diff --git a/Documentation/web/news.itexi b/Documentation/web/news.itexi index 9a548e02d5..c01a1ffc90 100644 --- a/Documentation/web/news.itexi +++ b/Documentation/web/news.itexi @@ -26,6 +26,153 @@ NOTE: * don't duplicate entries from news-front.itexi @end ignore +@newsItem +@subsubheading LilyPond 2.19.7 released @emph{May 25, 2014} + +We are happy to announce the release of LilyPond 2.19.7. This +release includes a number of enhancements, and contains some work +in progress. You will have access to the very latest features, but +some may be incomplete, and you may encounter bugs and crashes. If you +require a stable version of Lilypond, we recommend using the 2.18 +version. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.19.6 released @emph{May 11, 2014} + +We are happy to announce the release of LilyPond 2.19.6. This +release includes a number of enhancements, and contains some work +in progress. You will have access to the very latest features, but +some may be incomplete, and you may encounter bugs and crashes. If you +require a stable version of Lilypond, we recommend using the 2.18 +version. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.19.5 released @emph{April 20, 2014} + +We are happy to announce the release of LilyPond 2.19.5. This +release includes a number of enhancements, and contains +some work in progress. You will have access to the very latest features, but +some may be incomplete, and you may encounter bugs and crashes. If you require +a stable version of Lilypond, we recommend using the 2.18 version. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.19.4 released @emph{April 6, 2014} + +We are happy to announce the release of LilyPond 2.19.4. This +release includes a number of enhancements, and contains +some work in progress. You will have access to the very latest features, but +some may be incomplete, and you may encounter bugs and crashes. If you require +a stable version of Lilypond, we recommend using the 2.18 version. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.19.3 released @emph{March 2, 2014} + +We are happy to announce the release of LilyPond 2.19.3. This +release includes a number of enhancements, and contains +some work in progress. You will have access to the very latest features, but +some may be incomplete, and you may encounter bugs and crashes. If you require +a stable version of Lilypond, we recommend using the 2.18 version. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.18.1 @emph{February 16, 2014} + +We have released updated manuals for LilyPond's stable version, 2.18. +The manuals are now for 2.18.1 and have a number of updates and improvements +over 2.18.0. There will be a further release of 2.18 in the future (2.18.2), +and this will include the updates to the manuals as well as some minor +enhancements to the LilyPond core functionality. + +To summarise the current situation: stable LilyPond application: 2.18.0; +stable LilyPond manuals: 2.18.1; development for both: 2.19.2. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.19.2 released @emph{February 2, 2014} + +We are happy to announce the release of LilyPond 2.19.2. This +release includes a number of enhancements, and contains +some work in progress. You will have access to the very latest features, but +some may be incomplete, and you may encounter bugs and crashes. If you require +a stable version of Lilypond, we recommend using the 2.18 version. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.19.1 released @emph{January 19, 2014} + +We are happy to announce the release of LilyPond 2.19.1. This +release includes a number of enhancements, and contains +some work in progress. You will have access to the very latest features, but +some may be incomplete, and you may encounter bugs and crashes. If you require +a stable version of Lilypond, we recommend using the 2.18 version. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.19.0 released @emph{January 5, 2014} + +We are happy to announce the release of LilyPond 2.19.0. This +release includes a number of enhancements, and contains +some work in progress. You will have access to the very latest features, but +some may be incomplete, and you may encounter bugs and crashes. If you require +a stable version of Lilypond, we recommend using the 2.18 version. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.17.97 released! @emph{December 8, 2013} + +We are excited to announce the release of LilyPond@tie{}2.17.97 as +a potential final beta release for the upcoming stable release@tie{}2.18. The +developers believe this to be feature-complete, the +documentation to be accurate, and no important issues to be +overlooked. For upgrading the syntax of your input files to the +latest version, see @uref{http://www.lilypond.org/doc/v2.17/Documentation/usage/updating-files-with-convert_002dly, Updating files with convert-ly}. +Please test this release and report back any problems, see +@uref{http://www.lilypond.org/website/bug-reports.html, Bug reports}. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.17.96 released! @emph{November 24, 2013} + +We are excited to announce the release of LilyPond@tie{}2.17.96 as +a further beta release for the upcoming stable release@tie{}2.18. The +developers believe the release to be feature-complete, the +documentation to be accurate, and no important issues to be +overlooked. For upgrading the syntax of your input files to the +latest version, see @uref{http://www.lilypond.org/doc/v2.17/Documentation/usage/updating-files-with-convert_002dly, Updating files with convert-ly}. +Please test this release and report back any problems, see +@uref{http://www.lilypond.org/website/bug-reports.html, Bug reports}. + +@newsEnd + +@newsItem +@subsubheading LilyPond 2.17.95 released! @emph{November 3, 2013} + +We are excited to announce the release of LilyPond@tie{}2.17.95 as +beta release for the upcoming stable release@tie{}2.18. The +developers are still busy finding solutions for some last-minute +problems, but the release is supposed to be feature-complete, the +documentation to be accurate, and no important issues to be +overlooked. For upgrading the syntax of your input files to the +latest version, see @rprogram{Updating files with convert-ly}. +Please test this release and report back any problems, see +@rweb{Bug reports}. + +@newsEnd + @newsItem @subsubheading LilyPond 2.17.29 released! @emph{October 20, 2013} diff --git a/Documentation/web/server/lilypond.org.htaccess b/Documentation/web/server/lilypond.org.htaccess index 5e7dfae3d9..ce3e70566e 100644 --- a/Documentation/web/server/lilypond.org.htaccess +++ b/Documentation/web/server/lilypond.org.htaccess @@ -47,13 +47,13 @@ RedirectMatch ^/stable /doc/stable #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 @@ -61,7 +61,7 @@ RedirectMatch ^/index$ / ########################################### -## 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. @@ -70,7 +70,7 @@ RewriteBase / SetEnvIf REQUEST_URI .* WEB=/website -# Rewrite empty to /web +# Rewrite empty to /website RewriteCond %{REQUEST_URI} ^/*$ RewriteRule ^(/*)$ %{ENV:WEB}/ [QSA,L] @@ -80,12 +80,12 @@ RewriteCond %{REQUEST_URI} ^/?[^/]+[.]css$ 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} @@ -95,7 +95,7 @@ RewriteCond %{REQUEST_URI} !^/doc$ # ...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/ @@ -109,6 +109,9 @@ RewriteCond %{REQUEST_FILENAME} !-d # ..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 diff --git a/Documentation/web/server/robots.txt b/Documentation/web/server/robots.txt index ccc8ed800d..d1879c94ce 100644 --- a/Documentation/web/server/robots.txt +++ b/Documentation/web/server/robots.txt @@ -21,3 +21,7 @@ Disallow: /doc/v2.12/ Disallow: /doc/v2.13/ Disallow: /doc/v2.14/ Disallow: /doc/v2.15/ +Disallow: /doc/v2.16/ +Disallow: /doc/v2.17/ + +Disallow: /web/ diff --git a/Documentation/web/server/tweets.xml b/Documentation/web/server/tweets.xml index 33e761d245..b3ac880694 100644 --- a/Documentation/web/server/tweets.xml +++ b/Documentation/web/server/tweets.xml @@ -4,10 +4,10 @@ href="http://www.lilypondblog.org">here</a>! Anyone can follow and leave comments on the blog. To contribute, contact <a - href="mailto:janek.lilypond@gmail.com">Janek Warchoł</a>. + href="mailto:ul@openlilylib.org">Urs Liska</a>. - Adam Spiers has build a web site which uses LilyPond to dynamically + Adam Spiers has built a web site which uses LilyPond to dynamically generate images of chords and scales called <a href="http://scalematcher.adamspiers.org/">Scale matcher</a>. @@ -22,11 +22,11 @@ Turkish Ebook <a href="http://acim.name.tr/lilypond/my_EBook_Promotion/index.php"> "GNU/LilyPond, Özgür Bir Nota Yazma Programı"</a>. - - Aurélien Bello, has re-orchestrated a 100-minute version of "Der - Ring des Nibelungen" for children, being performed in Berlin on the - 5th and 6th of April 2014. Click - <a href="http://www.rsb-online.de/content/konzerte/wagnerzyklus-10-13/wagner-fuer-kinder/index_ger.html"> - here </a> for more details. - + + Aurélien Bello's 100-minute version of "Der Ring des Nibelungen" + for children will be broadcast by Deutschlandradio Kultur on 21st + of June 2014. Click + <a href="http://www.deutschlandradiokultur.de/der-ring-in-111-minuten.1091.de.html?dram:article_id=282592"> + here </a> for more details. Also available as live stream. + diff --git a/Documentation/zh/search-box.ihtml b/Documentation/zh/search-box.ihtml index 639cf4d778..8ae6c02b0e 100644 --- a/Documentation/zh/search-box.ihtml +++ b/Documentation/zh/search-box.ihtml @@ -14,11 +14,11 @@ search for a while and have a redirection from "v2.15" to "v2.17". diff --git a/Documentation/zh/web.texi b/Documentation/zh/web.texi index e0b5afb30a..17c96355a4 100644 --- a/Documentation/zh/web.texi +++ b/Documentation/zh/web.texi @@ -15,7 +15,7 @@ @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 @@ -36,7 +36,7 @@ @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 diff --git a/LICENSE.OFL b/LICENSE.OFL index 41e80d6039..717c3d3967 100644 --- a/LICENSE.OFL +++ b/LICENSE.OFL @@ -1,5 +1,5 @@ -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. diff --git a/VERSION b/VERSION index de031165f0..980df5a242 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=2 -MINOR_VERSION=18 -PATCH_LEVEL=2 +MINOR_VERSION=19 +PATCH_LEVEL=9 MY_PATCH_LEVEL= -VERSION_STABLE=2.18.0 -VERSION_DEVEL=2.19.2 +VERSION_STABLE=2.18.2 +VERSION_DEVEL=2.19.8 diff --git a/elisp/lilypond-mode.el b/elisp/lilypond-mode.el index be05016071..fa7cffc439 100644 --- a/elisp/lilypond-mode.el +++ b/elisp/lilypond-mode.el @@ -1,7 +1,7 @@ ;;;; 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 +;;;; Copyright (C) 1999--2014 Jan Nieuwenhuizen ;;;; Changed 2001--2003 Heikki Junes ;;;; * Add PS-compilation, PS-viewing and MIDI-play (29th Aug 2001) ;;;; * Keyboard shortcuts (12th Sep 2001) diff --git a/flower/cpu-timer.cc b/flower/cpu-timer.cc index f4c960196d..962cf78254 100644 --- a/flower/cpu-timer.cc +++ b/flower/cpu-timer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/file-name.cc b/flower/file-name.cc index 1746c2c28d..188056675f 100644 --- a/flower/file-name.cc +++ b/flower/file-name.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/flower/file-path.cc b/flower/file-path.cc index b19732d15e..660895a1f5 100644 --- a/flower/file-path.cc +++ b/flower/file-path.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/flower/getopt-long.cc b/flower/getopt-long.cc index 88c5d92bde..0d6da2c60e 100644 --- a/flower/getopt-long.cc +++ b/flower/getopt-long.cc @@ -1,7 +1,7 @@ /* 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 @@ -103,11 +103,11 @@ Long_option_init::to_string () const { string str; if (shortname_char_) - str += "-" + shortname_char_; + str += string ("-") + shortname_char_; if (shortname_char_ && longname_str0_) str += ", "; if (longname_str0_) - str += string ("`--") + longname_str0_ + "'"; + str += string ("--") + longname_str0_; return str; } diff --git a/flower/include/arithmetic-operator.hh b/flower/include/arithmetic-operator.hh index 285e9cd350..2bd081c990 100644 --- a/flower/include/arithmetic-operator.hh +++ b/flower/include/arithmetic-operator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/axis.hh b/flower/include/axis.hh index f5ec6ca39a..12bcf25938 100644 --- a/flower/include/axis.hh +++ b/flower/include/axis.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/compare.hh b/flower/include/compare.hh index 9822526e03..929c19d81e 100644 --- a/flower/include/compare.hh +++ b/flower/include/compare.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/flower/include/cpu-timer.hh b/flower/include/cpu-timer.hh index b5cf5d07a4..f4d0be2523 100644 --- a/flower/include/cpu-timer.hh +++ b/flower/include/cpu-timer.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/direction.hh b/flower/include/direction.hh index dcb794eea1..6c6b9a7d02 100644 --- a/flower/include/direction.hh +++ b/flower/include/direction.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/drul-array.hh b/flower/include/drul-array.hh index d84af5a614..fbb45dfcec 100644 --- a/flower/include/drul-array.hh +++ b/flower/include/drul-array.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/file-name.hh b/flower/include/file-name.hh index 4822783fc6..e0fedd314b 100644 --- a/flower/include/file-name.hh +++ b/flower/include/file-name.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/file-path.hh b/flower/include/file-path.hh index 8c8049391d..62ddf1d53d 100644 --- a/flower/include/file-path.hh +++ b/flower/include/file-path.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/flower-proto.hh b/flower/include/flower-proto.hh index 33f67dbb40..59613cc279 100644 --- a/flower/include/flower-proto.hh +++ b/flower/include/flower-proto.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/flower/include/guile-compatibility.hh b/flower/include/guile-compatibility.hh index 3ef0413772..d532abbf08 100644 --- a/flower/include/guile-compatibility.hh +++ b/flower/include/guile-compatibility.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/flower/include/international.hh b/flower/include/international.hh index 5797a293f7..e317efda45 100644 --- a/flower/include/international.hh +++ b/flower/include/international.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/flower/include/interval-set.hh b/flower/include/interval-set.hh index 6ea7b43173..78507625fb 100644 --- a/flower/include/interval-set.hh +++ b/flower/include/interval-set.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/flower/include/interval.hh b/flower/include/interval.hh index cc6f70a9c8..af277a33b4 100644 --- a/flower/include/interval.hh +++ b/flower/include/interval.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/flower/include/interval.tcc b/flower/include/interval.tcc index 2ad1fa606b..2fd51b408f 100644 --- a/flower/include/interval.tcc +++ b/flower/include/interval.tcc @@ -1,7 +1,7 @@ /* 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 diff --git a/flower/include/libc-extension.hh b/flower/include/libc-extension.hh index 726df166ae..d2de8252d4 100644 --- a/flower/include/libc-extension.hh +++ b/flower/include/libc-extension.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/matrix.hh b/flower/include/matrix.hh index 260f6c06bb..7b7e8540af 100644 --- a/flower/include/matrix.hh +++ b/flower/include/matrix.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/flower/include/memory-stream.hh b/flower/include/memory-stream.hh index 1dffd7c98a..98915fea79 100644 --- a/flower/include/memory-stream.hh +++ b/flower/include/memory-stream.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/flower/include/offset.hh b/flower/include/offset.hh index ba369a5c70..c7f84ddbb9 100644 --- a/flower/include/offset.hh +++ b/flower/include/offset.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/flower/include/parray.hh b/flower/include/parray.hh index cb3fc24ee8..3c3e4796e7 100644 --- a/flower/include/parray.hh +++ b/flower/include/parray.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/polynomial.hh b/flower/include/polynomial.hh index 1959688d8d..1724ab82a2 100644 --- a/flower/include/polynomial.hh +++ b/flower/include/polynomial.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1993--2012 Han-Wen Nienhuys + Copyright (C) 1993--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 @@ -24,6 +24,7 @@ #ifndef POLY_H #define POLY_H +#include #include "std-vector.hh" #include "arithmetic-operator.hh" #include "real.hh" diff --git a/flower/include/pqueue.hh b/flower/include/pqueue.hh index 895ceca03e..0b15f1fef9 100644 --- a/flower/include/pqueue.hh +++ b/flower/include/pqueue.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/rational.hh b/flower/include/rational.hh index de1252ec67..8583de70e2 100644 --- a/flower/include/rational.hh +++ b/flower/include/rational.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/real.hh b/flower/include/real.hh index ceb1e114f0..7345079680 100644 --- a/flower/include/real.hh +++ b/flower/include/real.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/std-string.hh b/flower/include/std-string.hh index 6b6e8ef972..cc0de9fae8 100644 --- a/flower/include/std-string.hh +++ b/flower/include/std-string.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Jan Nieuwenhuizen + Copyright (C) 2006--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/flower/include/std-vector.hh b/flower/include/std-vector.hh index e7f29a8fcb..2480ecb93a 100644 --- a/flower/include/std-vector.hh +++ b/flower/include/std-vector.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Jan Nieuwenhuizen + Copyright (C) 2006--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,6 +30,7 @@ #endif #endif +#include "config.hh" /* needed at least for HAVE_STL_DATA_METHOD */ #include /* find, reverse, sort */ #include /* unary_function */ #include diff --git a/flower/include/tuple.hh b/flower/include/tuple.hh index c88f1935ad..b7f788ee94 100644 --- a/flower/include/tuple.hh +++ b/flower/include/tuple.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/flower/include/virtual-methods.hh b/flower/include/virtual-methods.hh index fa084835d3..71deec28b1 100644 --- a/flower/include/virtual-methods.hh +++ b/flower/include/virtual-methods.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/include/warn.hh b/flower/include/warn.hh index 333e95a94e..8203c2d4e8 100644 --- a/flower/include/warn.hh +++ b/flower/include/warn.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/international.cc b/flower/international.cc index 2e6a09df9f..287a490a4c 100644 --- a/flower/international.cc +++ b/flower/international.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/flower/interval-set.cc b/flower/interval-set.cc index f1aaea59fc..f179a86bd8 100644 --- a/flower/interval-set.cc +++ b/flower/interval-set.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/flower/interval.cc b/flower/interval.cc index 04b141159d..c9f8829a15 100644 --- a/flower/interval.cc +++ b/flower/interval.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/libc-extension.cc b/flower/libc-extension.cc index 59d4a52f13..fbb4b61652 100644 --- a/flower/libc-extension.cc +++ b/flower/libc-extension.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/flower/memory-stream.cc b/flower/memory-stream.cc index 6cce684858..71a61d4422 100644 --- a/flower/memory-stream.cc +++ b/flower/memory-stream.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/flower/offset.cc b/flower/offset.cc index 180f8acc61..78c3eeffc3 100644 --- a/flower/offset.cc +++ b/flower/offset.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/polynomial.cc b/flower/polynomial.cc index e3e50d6bc5..cefb8d1f97 100644 --- a/flower/polynomial.cc +++ b/flower/polynomial.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1993--2012 Han-Wen Nienhuys + Copyright (C) 1993--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 diff --git a/flower/rational.cc b/flower/rational.cc index ed3d203b02..f6dd6bae12 100644 --- a/flower/rational.cc +++ b/flower/rational.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/flower/std-string.cc b/flower/std-string.cc index 7dc9d47311..277c4747fc 100644 --- a/flower/std-string.cc +++ b/flower/std-string.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Jan Nieuwenhuizen + Copyright (C) 2006--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/flower/string-convert.cc b/flower/string-convert.cc index eebcd92708..745a98ecea 100644 --- a/flower/string-convert.cc +++ b/flower/string-convert.cc @@ -37,8 +37,8 @@ string 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; } @@ -49,8 +49,8 @@ String_convert::bin2hex (const string &bin_string) 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; } @@ -127,7 +127,7 @@ String_convert::hex2bin (string hex_string, string &bin_string_r) 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; @@ -165,10 +165,10 @@ String_convert::int2dec (int i, size_t length_i, char ch) 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 () @@ -182,14 +182,14 @@ String_convert::unsigned2hex (unsigned u, size_t length, char fill_char) #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); @@ -299,7 +299,7 @@ String_convert::pointer_string (void const *l) 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)); @@ -316,9 +316,9 @@ String_convert::precision_string (double x, int n) 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 diff --git a/flower/warn.cc b/flower/warn.cc index 52e2a42508..9ff173bf35 100644 --- a/flower/warn.cc +++ b/flower/warn.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/input/regression/accidental-tie.ly b/input/regression/accidental-tie.ly index f69a7a8575..3929e27450 100644 --- a/input/regression/accidental-tie.ly +++ b/input/regression/accidental-tie.ly @@ -1,4 +1,4 @@ -\version "2.17.6" +\version "2.19.2" \header { texidoc = "The second and third notes should not get accidentals, @@ -16,13 +16,13 @@ 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 diff --git a/input/regression/auto-beam-exceptions.ly b/input/regression/auto-beam-exceptions.ly index 676bb3aafb..b7d553b123 100644 --- a/input/regression/auto-beam-exceptions.ly +++ b/input/regression/auto-beam-exceptions.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.0" \header { @@ -11,40 +11,20 @@ \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 } diff --git a/input/regression/baerenreiter-sarabande.ly b/input/regression/baerenreiter-sarabande.ly index 426bbf4b18..892359dfc2 100644 --- a/input/regression/baerenreiter-sarabande.ly +++ b/input/regression/baerenreiter-sarabande.ly @@ -1,6 +1,6 @@ \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. @@ -171,10 +171,9 @@ smallerPaper = \layout { 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 diff --git a/input/regression/beam-multiplicity-over-rests.ly b/input/regression/beam-multiplicity-over-rests.ly index b8a2b5d997..e875bb2c80 100644 --- a/input/regression/beam-multiplicity-over-rests.ly +++ b/input/regression/beam-multiplicity-over-rests.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc = "When a beam goes over a rest, beamlets should be as necessary @@ -8,7 +8,7 @@ \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] diff --git a/input/regression/chord-changes-alternative.ly b/input/regression/chord-changes-alternative.ly new file mode 100644 index 0000000000..39f464eee9 --- /dev/null +++ b/input/regression/chord-changes-alternative.ly @@ -0,0 +1,22 @@ +\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 "|." } + >> +} diff --git a/input/regression/chord-dots.ly b/input/regression/chord-dots.ly new file mode 100644 index 0000000000..957788d4bc --- /dev/null +++ b/input/regression/chord-dots.ly @@ -0,0 +1,17 @@ +\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 + << + { 4. r8 4. r8 } \\ + { f4.. r16 4.. r16} + >> +} diff --git a/input/regression/clefs.ly b/input/regression/clefs.ly index fa08917267..37ee787cb6 100644 --- a/input/regression/clefs.ly +++ b/input/regression/clefs.ly @@ -1,4 +1,4 @@ -\version "2.17.6" +\version "2.19.2" \header{ @@ -11,20 +11,37 @@ full size." 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 "|." } diff --git a/input/regression/completion-heads-factor.ly b/input/regression/completion-heads-factor.ly index 79510e1484..cc29f58d4e 100644 --- a/input/regression/completion-heads-factor.ly +++ b/input/regression/completion-heads-factor.ly @@ -1,12 +1,12 @@ -\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 } @@ -20,5 +20,11 @@ notes with a duration factor still keep their requested appearance. 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 } } diff --git a/input/regression/completion-heads-tie.ly b/input/regression/completion-heads-tie.ly index 469305b29c..979359bf29 100644 --- a/input/regression/completion-heads-tie.ly +++ b/input/regression/completion-heads-tie.ly @@ -5,7 +5,7 @@ } -\version "2.16.0" +\version "2.19.2" \paper{ ragged-right=##t } @@ -13,6 +13,6 @@ \remove "Note_heads_engraver" \consists "Completion_heads_engraver" } { - \relative c'' { r2 d1 ~ d1 d2 } + \relative c'' { r2 d1 ~ 1 d2 } } diff --git a/input/regression/completion-rest.ly b/input/regression/completion-rest.ly index e39e17aff8..365b7372e2 100644 --- a/input/regression/completion-rest.ly +++ b/input/regression/completion-rest.ly @@ -1,12 +1,12 @@ -\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 } @@ -20,5 +20,9 @@ rests with a duration factor still keep their requested appearance. 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" } diff --git a/input/regression/display-lily-tests.ly b/input/regression/display-lily-tests.ly index a4abc604d1..3b99a96bc2 100644 --- a/input/regression/display-lily-tests.ly +++ b/input/regression/display-lily-tests.ly @@ -107,7 +107,7 @@ stderr of this run." \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_- } #] @@ -183,6 +183,9 @@ stderr of this run." \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 diff --git a/input/regression/dynamics-avoid-cross-staff-stem.ly b/input/regression/dynamics-avoid-cross-staff-stem.ly deleted file mode 100644 index 078d876ad7..0000000000 --- a/input/regression/dynamics-avoid-cross-staff-stem.ly +++ /dev/null @@ -1,19 +0,0 @@ -\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 } } ->> diff --git a/input/regression/grace-slashed-no-slur.ly b/input/regression/grace-slashed-no-slur.ly index f167a9794e..450ed819bd 100644 --- a/input/regression/grace-slashed-no-slur.ly +++ b/input/regression/grace-slashed-no-slur.ly @@ -1,4 +1,4 @@ -\version "2.17.15" +\version "2.19.2" \header { @@ -7,5 +7,5 @@ " } \relative c' { - \slashedGrace c16~ c1 + \slashedGrace c16~ 1 } diff --git a/input/regression/hara-kiri-stanza-number.ly b/input/regression/hara-kiri-stanza-number.ly index 66d2bae701..382cb37a20 100644 --- a/input/regression/hara-kiri-stanza-number.ly +++ b/input/regression/hara-kiri-stanza-number.ly @@ -11,14 +11,14 @@ lines." 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 } >> diff --git a/input/regression/header-score-reordered.ly b/input/regression/header-score-reordered.ly new file mode 100644 index 0000000000..acbe127e21 --- /dev/null +++ b/input/regression/header-score-reordered.ly @@ -0,0 +1,22 @@ +\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)" + } +} diff --git a/input/regression/key-signature-padding.ly b/input/regression/key-signature-padding.ly index 4f46271696..cb7833e4e5 100644 --- a/input/regression/key-signature-padding.ly +++ b/input/regression/key-signature-padding.ly @@ -5,11 +5,11 @@ } -\version "2.17.6" +\version "2.19.7" { \override Staff.KeySignature.padding-pairs = #'((("accidentals.flat" . "accidentals.sharp.slashslash.stemstemstem") . 0.5)) - \set Staff.keySignature = #`((4 . ,FLAT) (6 . ,THREE-Q-SHARP) (2 . ,SEMI-FLAT)) + \set Staff.keyAlterations = #`((4 . ,FLAT) (6 . ,THREE-Q-SHARP) (2 . ,SEMI-FLAT)) e2 } diff --git a/input/regression/key-signature-scordatura-persist.ly b/input/regression/key-signature-scordatura-persist.ly index 6a1e8ffd53..1bae1b68fa 100644 --- a/input/regression/key-signature-scordatura-persist.ly +++ b/input/regression/key-signature-scordatura-persist.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.7" \header { texidoc = "When a custom key signature has entries which are @@ -6,12 +6,12 @@ limited to a particular octave, such alterations should persist indefinitely or until a new key signature is set. Here, only the fis' shows an accidental, since it is outside the -octave defined in @code{keySignature}. +octave defined in @code{keyAlterations}. " } \relative c' { - \set Staff.keySignature = #`(((0 . 3) . ,SHARP) + \set Staff.keyAlterations = #`(((0 . 3) . ,SHARP) ((0 . 5) . ,FLAT) ((0 . 6) . ,FLAT)) fis fis as bes diff --git a/input/regression/key-signature-scordatura.ly b/input/regression/key-signature-scordatura.ly index fb51ebaf04..547fe7688e 100644 --- a/input/regression/key-signature-scordatura.ly +++ b/input/regression/key-signature-scordatura.ly @@ -1,7 +1,7 @@ -\version "2.16.0" +\version "2.19.7" -\header { texidoc = "By setting @code{Staff.keySignature} directly, +\header { texidoc = "By setting @code{Staff.keyAlterations} directly, key signatures can be set invidually per pitch. " @@ -11,9 +11,9 @@ key signatures can be set invidually per pitch. } \relative c' \new Staff { - \set Staff.keySignature = #`(((0 . 3) . ,FLAT) ((1 . 2) . ,SHARP)) + \set Staff.keyAlterations = #`(((0 . 3) . ,FLAT) ((1 . 2) . ,SHARP)) f8 a c e - \set Staff.keySignature = #`(((0 . 4) . ,DOUBLE-SHARP) ((1 . 2) . ,FLAT)) + \set Staff.keyAlterations = #`(((0 . 4) . ,DOUBLE-SHARP) ((1 . 2) . ,FLAT)) e a, g a } diff --git a/input/regression/keys.ly b/input/regression/keys.ly index 46079b264f..3ede492846 100644 --- a/input/regression/keys.ly +++ b/input/regression/keys.ly @@ -1,5 +1,5 @@ -\version "2.17.15" +\version "2.19.7" \header{ texidoc=" Key signatures may appear on key changes, even without a barline. @@ -25,7 +25,7 @@ are created also on a clef change. \break \key bes \major % \major c2 \clef alto c2 \key d \major \clef treble c2 - \set Staff.keySignature = #`((4 . ,FLAT) (6 . ,THREE-Q-SHARP) (2 . ,SEMI-FLAT)) + \set Staff.keyAlterations = #`((4 . ,FLAT) (6 . ,THREE-Q-SHARP) (2 . ,SEMI-FLAT)) e2 } diff --git a/input/regression/les-nereides.ly b/input/regression/les-nereides.ly index c87772419d..61b79eccd4 100644 --- a/input/regression/les-nereides.ly +++ b/input/regression/les-nereides.ly @@ -1,4 +1,4 @@ -\version "2.17.10" +\version "2.19.0" \header { composer = "ARTHUR GRAY" @@ -233,8 +233,9 @@ middleDynamics = { 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 >> diff --git a/input/regression/lyric-combine-empty-warning.ly b/input/regression/lyric-combine-empty-warning.ly index 5c35ed00a2..2f38988243 100644 --- a/input/regression/lyric-combine-empty-warning.ly +++ b/input/regression/lyric-combine-empty-warning.ly @@ -1,4 +1,4 @@ -\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") @@ -17,9 +17,9 @@ no warning should be printed." 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" { } >> diff --git a/input/regression/lyric-combine-new.ly b/input/regression/lyric-combine-new.ly index 053a23e1c4..b01227ac9a 100644 --- a/input/regression/lyric-combine-new.ly +++ b/input/regression/lyric-combine-new.ly @@ -1,4 +1,4 @@ -\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 @@ -11,8 +11,8 @@ can be tuned to either follow or ignore melismata." \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 @@ -26,7 +26,7 @@ can be tuned to either follow or ignore melismata." blob } - \lyricsto "bla" \new Lyrics { + \new Lyrics \lyricsto "bla" { nes ted lyrics voice with more words than no tes } >> diff --git a/input/regression/lyric-combine-polyphonic.ly b/input/regression/lyric-combine-polyphonic.ly index 16285dd6cf..0f979840da 100644 --- a/input/regression/lyric-combine-polyphonic.ly +++ b/input/regression/lyric-combine-polyphonic.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc ="Polyphonic rhythms and rests do not disturb @@ -21,14 +21,14 @@ 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 } >> diff --git a/input/regression/lyric-extender-broken.ly b/input/regression/lyric-extender-broken.ly index 7d36a12335..0919bfcbbf 100644 --- a/input/regression/lyric-extender-broken.ly +++ b/input/regression/lyric-extender-broken.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { @@ -18,6 +18,6 @@ of the melisma." a) a2( b) \break a2 } - \lyricsto A \context Lyrics \lyricmode { a __ a __ ha } + \context Lyrics \lyricsto A { a __ a __ ha } >> diff --git a/input/regression/lyric-extender-completion.ly b/input/regression/lyric-extender-completion.ly index fbe84a5422..66e744594a 100644 --- a/input/regression/lyric-extender-completion.ly +++ b/input/regression/lyric-extender-completion.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { @@ -16,6 +16,6 @@ d | } } -\new Lyrics \lyricsto "upper" \lyricmode { Ah __ } +\new Lyrics \lyricsto "upper" { Ah __ } >> diff --git a/input/regression/lyric-extender-no-heads.ly b/input/regression/lyric-extender-no-heads.ly index d99b486108..36d4133c06 100644 --- a/input/regression/lyric-extender-no-heads.ly +++ b/input/regression/lyric-extender-no-heads.ly @@ -6,7 +6,7 @@ without a lyric attached." } -\version "2.16.0" +\version "2.19.2" \layout { ragged-right = ##t @@ -14,7 +14,7 @@ without a lyric attached." \relative c'' { \time 3/4 - d4~ d4 r4 + d4~ 4 r4 \grace es8 d4 diff --git a/input/regression/lyric-phrasing.ly b/input/regression/lyric-phrasing.ly index ab24aa3b22..3d16224aeb 100644 --- a/input/regression/lyric-phrasing.ly +++ b/input/regression/lyric-phrasing.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc = " @@ -20,7 +20,7 @@ d16[ e f g] } - \lyricsto "bla" \context Lyrics \lyricmode { + \context Lyrics \lyricsto "bla" { alllll __ tijd izzz } diff --git a/input/regression/lyrics-after-grace.ly b/input/regression/lyrics-after-grace.ly index dafbe7d976..ccc72ac186 100644 --- a/input/regression/lyrics-after-grace.ly +++ b/input/regression/lyrics-after-grace.ly @@ -5,7 +5,7 @@ } -\version "2.16.0" +\version "2.19.2" \paper { ragged-right = ##t } @@ -15,5 +15,5 @@ \new Voice = "myVoice" { \afterGrace c''2 { e''32( } c''2) }} - \new Lyrics \lyricsto "myVoice" \lyricmode { foo -- bar } + \new Lyrics \lyricsto "myVoice" { foo -- bar } >> diff --git a/input/regression/lyrics-melisma-beam.ly b/input/regression/lyrics-melisma-beam.ly index ba811ed8a9..b3f99228b6 100644 --- a/input/regression/lyrics-melisma-beam.ly +++ b/input/regression/lyrics-melisma-beam.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc = "Melismata are triggered by manual beams. Notes in a @@ -16,7 +16,7 @@ \set Staff.autoBeaming = ##f g4 d8[ b8 d8 g8] g4 } - \lyricsto "" \new Lyrics \lyricmode { bla blaa -- bla } + \new Lyrics \lyricsto "" { bla blaa -- bla } >> diff --git a/input/regression/magnifyMusic-stem-beam-spacing.ly b/input/regression/magnifyMusic-stem-beam-spacing.ly new file mode 100644 index 0000000000..2ca15238a0 --- /dev/null +++ b/input/regression/magnifyMusic-stem-beam-spacing.ly @@ -0,0 +1,22 @@ +\version "2.19.8" + +\header { + texidoc = "Stem lengths, beam spacing/thickness, and horizontal +spacing should be scaled along with notation size when using the +@code{\magnifyMusic} command." +} + +\layout { ragged-right = ##t } + +\relative << + { \repeat unfold 7 { g'32[ a b c] } } + { + \magnifyMusic 0.50 { s8_"50%" } + \magnifyMusic 0.63 { s } + \magnifyMusic 0.80 { s } + \magnifyMusic 1.00 { s_"100%" } + \magnifyMusic 1.26 { s } + \magnifyMusic 1.59 { s } + \magnifyMusic 2.00 { s_"200%" } + } +>> diff --git a/input/regression/make-relative-copies.ly b/input/regression/make-relative-copies.ly new file mode 100644 index 0000000000..926de581b9 --- /dev/null +++ b/input/regression/make-relative-copies.ly @@ -0,0 +1,31 @@ +\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 +>> diff --git a/input/regression/make-relative-music.ly b/input/regression/make-relative-music.ly new file mode 100644 index 0000000000..58266b2b35 --- /dev/null +++ b/input/regression/make-relative-music.ly @@ -0,0 +1,32 @@ +\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 | + 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 } +>> diff --git a/input/regression/make-relative.ly b/input/regression/make-relative.ly index 706bdb9adc..c3bf0a01d3 100644 --- a/input/regression/make-relative.ly +++ b/input/regression/make-relative.ly @@ -1,4 +1,4 @@ -\version "2.17.11" +\version "2.19.2" \header { texidoc = "@code{make-relative} is a Scheme utility macro mainly @@ -16,7 +16,7 @@ The fragment should appear identical in both cases." 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 } | @@ -32,9 +32,9 @@ ph = \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 | 1\fermata \bar "|." | } @@ -61,9 +61,9 @@ ph = \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 | 1\fermata \bar "|." | } diff --git a/input/regression/midi-grace-after-rest.ly b/input/regression/midi-grace-after-rest.ly new file mode 100644 index 0000000000..8a99cddcfc --- /dev/null +++ b/input/regression/midi-grace-after-rest.ly @@ -0,0 +1,14 @@ +\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 { } +} diff --git a/input/regression/midi-lyric-barcheck.ly b/input/regression/midi-lyric-barcheck.ly index 16c658e1e9..8c6e4c070f 100644 --- a/input/regression/midi-lyric-barcheck.ly +++ b/input/regression/midi-lyric-barcheck.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc = "Lyrics in MIDI are aligned to ties and beams: @@ -12,12 +12,12 @@ this examples causes no bar checks in MIDI. <<\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 {} diff --git a/input/regression/morgenlied.ly b/input/regression/morgenlied.ly index 2a2e93dca3..c335683198 100644 --- a/input/regression/morgenlied.ly +++ b/input/regression/morgenlied.ly @@ -27,7 +27,7 @@ been lowered } -\version "2.17.6" +\version "2.19.2" manuscriptBreak = { \break } @@ -64,7 +64,7 @@ melody = \relative c'' \repeat volta 2 \new Voice = "singer" { 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 | @@ -157,8 +157,8 @@ pianoLH = \relative c'' \repeat volta 2 { \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 diff --git a/input/regression/mozart-hrn3-allegro.ily b/input/regression/mozart-hrn3-allegro.ily index 1494f4e299..48627557ba 100644 --- a/input/regression/mozart-hrn3-allegro.ily +++ b/input/regression/mozart-hrn3-allegro.ily @@ -1,4 +1,4 @@ -\version "2.17.11" +\version "2.19.2" \include "mozart-hrn3-defs.ily" allegro = \relative c' { @@ -26,7 +26,7 @@ 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 @@ -34,7 +34,7 @@ allegro = \relative c' { 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 @@ -47,7 +47,7 @@ allegro = \relative c' { 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 @@ -59,7 +59,7 @@ allegro = \relative c' { 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 @@ -67,7 +67,7 @@ allegro = \relative c' { c8[( g' es c)] bes4( c) c4.( cis8 d4) r R1*2 - es1~es1| + es1~1| e! d c @@ -98,12 +98,12 @@ allegro = \relative 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 | @@ -112,16 +112,16 @@ allegro = \relative c' { \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 diff --git a/input/regression/mozart-hrn3-romanze.ily b/input/regression/mozart-hrn3-romanze.ily index 403d7aaf49..8d4d22f566 100644 --- a/input/regression/mozart-hrn3-romanze.ily +++ b/input/regression/mozart-hrn3-romanze.ily @@ -1,4 +1,4 @@ -\version "2.17.6" +\version "2.19.2" \include "mozart-hrn3-defs.ily" romanze = \relative c' { @@ -34,7 +34,7 @@ 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) @@ -52,8 +52,8 @@ romanze = \relative c' { \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 diff --git a/input/regression/mozart-hrn3-rondo.ily b/input/regression/mozart-hrn3-rondo.ily index d3997e7774..7ce852149b 100644 --- a/input/regression/mozart-hrn3-rondo.ily +++ b/input/regression/mozart-hrn3-rondo.ily @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \include "mozart-hrn3-defs.ily" @@ -45,13 +45,13 @@ rondo = \relative c' { 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 @@ -75,7 +75,7 @@ rondo = \relative c' { 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 @@ -86,40 +86,40 @@ rondo = \relative c' { 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 ~ | diff --git a/input/regression/optional-args.ly b/input/regression/optional-args.ly index 83ebf7886a..c92c6a143b 100644 --- a/input/regression/optional-args.ly +++ b/input/regression/optional-args.ly @@ -1,4 +1,4 @@ -\version "2.17.15" +\version "2.19.0" \header{ texidoc= "Test optional music function arguments. @@ -10,23 +10,18 @@ the rest is skipped." \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' } diff --git a/input/regression/page-spacing-nonstaff-lines-and-markup.ly b/input/regression/page-spacing-nonstaff-lines-and-markup.ly index 1f7f6ef350..c0b32e8af0 100644 --- a/input/regression/page-spacing-nonstaff-lines-and-markup.ly +++ b/input/regression/page-spacing-nonstaff-lines-and-markup.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc = "Having markup after a non-staff line doesn't confuse @@ -13,7 +13,7 @@ the page layout engine." \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" diff --git a/input/regression/page-spacing-nonstaff-lines-independent.ly b/input/regression/page-spacing-nonstaff-lines-independent.ly index 96f1c1df12..43a01b7d5a 100644 --- a/input/regression/page-spacing-nonstaff-lines-independent.ly +++ b/input/regression/page-spacing-nonstaff-lines-independent.ly @@ -1,4 +1,4 @@ -\version "2.17.6" +\version "2.19.2" \header { texidoc = "Spacing rules between Staves coexist with rules affecting @@ -12,7 +12,7 @@ staves is larger than the @code{padding} for associated lyrics." \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 { diff --git a/input/regression/part-combine-global.ly b/input/regression/part-combine-global.ly index bf2afed3ea..9f99d89937 100644 --- a/input/regression/part-combine-global.ly +++ b/input/regression/part-combine-global.ly @@ -11,7 +11,7 @@ voices. " } -\version "2.16.0" +\version "2.19.2" vone = @@ -25,7 +25,7 @@ vone = vtwo = \relative c' { \time 2/4 - f8[ f]~ f8[ f] | + f8[ f]~ 8[ f] | f8[ f] f8[ f] } diff --git a/input/regression/part-combine-solo.ly b/input/regression/part-combine-solo.ly index 621282709e..e29e27b1ba 100644 --- a/input/regression/part-combine-solo.ly +++ b/input/regression/part-combine-solo.ly @@ -14,10 +14,10 @@ Solo 1/2 can not be used when a spanner is active, so there is no solo " } -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 } diff --git a/input/regression/part-combine.ly b/input/regression/part-combine.ly index 8669f5bf12..8e896cfbc4 100644 --- a/input/regression/part-combine.ly +++ b/input/regression/part-combine.ly @@ -11,7 +11,7 @@ \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 @@ -19,7 +19,7 @@ vone = \relative a' { } vtwo = \relative a' { f2 f4 f f2 g4 g c, f f f f f~ f ~ f - f4 f2. ~ f4 + f4 f2. ~ 4 } diff --git a/input/regression/property-nested-override.ly b/input/regression/property-nested-override.ly index d7929a210a..0d8be92357 100644 --- a/input/regression/property-nested-override.ly +++ b/input/regression/property-nested-override.ly @@ -1,4 +1,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 @@ -11,10 +11,10 @@ list. \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 } diff --git a/input/regression/quote-tie.ly b/input/regression/quote-tie.ly index e003ffbdce..27982b12e0 100644 --- a/input/regression/quote-tie.ly +++ b/input/regression/quote-tie.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc = "Voices from different cues must not be tied together. In @@ -11,7 +11,7 @@ since only one @code{CueVoice} context is created } cueI = \relative c'' { - a1 ~ | a | a | + a1 ~ | 1 | a | } \addQuote "cueI" { \cueI } diff --git a/input/regression/repeat-percent.ly b/input/regression/repeat-percent.ly index 0146d36c45..22fa2c3af1 100644 --- a/input/regression/repeat-percent.ly +++ b/input/regression/repeat-percent.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc = "Measure repeats may be nested with beat repeats." } @@ -10,7 +10,7 @@ \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 } } diff --git a/input/regression/rhythmic-sequence.ly b/input/regression/rhythmic-sequence.ly new file mode 100644 index 0000000000..df647ce7d1 --- /dev/null +++ b/input/regression/rhythmic-sequence.ly @@ -0,0 +1,11 @@ +\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 } diff --git a/input/regression/scheme-text-spanner.ly b/input/regression/scheme-text-spanner.ly index 14e095e954..fc60c5b339 100644 --- a/input/regression/scheme-text-spanner.ly +++ b/input/regression/scheme-text-spanner.ly @@ -60,6 +60,7 @@ in scheme." (interfaces . (font-interface line-interface line-spanner-interface + outside-staff-interface side-position-interface)))))) #(define scheme-event-spanner-types diff --git a/input/regression/score-lines.ly b/input/regression/score-lines.ly new file mode 100644 index 0000000000..edb300fff7 --- /dev/null +++ b/input/regression/score-lines.ly @@ -0,0 +1,40 @@ +\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 +} diff --git a/input/regression/script-tie-collision.ly b/input/regression/script-tie-collision.ly index 0b1c837e0e..d85942e1af 100644 --- a/input/regression/script-tie-collision.ly +++ b/input/regression/script-tie-collision.ly @@ -1,4 +1,4 @@ -\version "2.17.2" +\version "2.19.2" \header { texidoc = "Scripts avoid ties. @@ -14,9 +14,9 @@ r2. c4~-> | c-> r2. | r2. c4-> | c-> r2. | r2. c4~-> | c r2. | - r2. c4~ | c-> r2. | \break + r2. c4~ | 4-> r2. | \break r2. >4--~ | -> ~ -> r2 | - r2. c4~ | c-> ~ c-> r2 | + r2. c4~ | 4-> ~ c-> r2 | r2. c4~-> | c ~ c-> r2 | r2. c4~-> | c-> ~ c r2 | r2. c4-> | diff --git a/input/regression/slur-broken-trend.ly b/input/regression/slur-broken-trend.ly index 81f31fc078..185cd24159 100644 --- a/input/regression/slur-broken-trend.ly +++ b/input/regression/slur-broken-trend.ly @@ -1,5 +1,5 @@ -\version "2.17.28" +\version "2.19.2" \header{ texidoc=" @@ -38,12 +38,12 @@ in unbroken state. \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) } } diff --git a/input/regression/slur-scoring.ly b/input/regression/slur-scoring.ly index 4c2f6ae7f1..ebcace50e0 100644 --- a/input/regression/slur-scoring.ly +++ b/input/regression/slur-scoring.ly @@ -12,7 +12,7 @@ } -\version "2.17.28" +\version "2.19.2" \layout { ragged-right = ##t % #(define debug-slur-scoring #t) @@ -23,7 +23,7 @@ \grace e=''16( d8.[) c16] d=''8.[ \grace f16( e16)] s2 - << {c=''8.([ es16] bes4~bes )} + << {c=''8.([ es16] bes4~4 )} \\ {r8 r r } >> diff --git a/input/regression/song-melisma.ly b/input/regression/song-melisma.ly index 6a597cb1c4..00949e9f36 100644 --- a/input/regression/song-melisma.ly +++ b/input/regression/song-melisma.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc="Festival song synthesis output supports melismas. @@ -18,7 +18,7 @@ melismas. \melismaEnd e2 } - \lyricsto "lala" \new Lyrics { + \new Lyrics \lyricsto "lala" { la di __ daah } >> diff --git a/input/regression/song-repetition.ly b/input/regression/song-repetition.ly index 1f9ce28c07..3a8a9f718b 100644 --- a/input/regression/song-repetition.ly +++ b/input/regression/song-repetition.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc="Festival song synthesis output supports repeat signs. @@ -13,12 +13,12 @@ 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 } >> } diff --git a/input/regression/spacing-multi-tuplet.ly b/input/regression/spacing-multi-tuplet.ly index bab9232a8d..4c84dad0d8 100644 --- a/input/regression/spacing-multi-tuplet.ly +++ b/input/regression/spacing-multi-tuplet.ly @@ -2,28 +2,18 @@ \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] } } >> } diff --git a/input/regression/span-bar-allow-span-bar.ly b/input/regression/span-bar-allow-span-bar.ly index c6fe94815b..d1525438dc 100644 --- a/input/regression/span-bar-allow-span-bar.ly +++ b/input/regression/span-bar-allow-span-bar.ly @@ -1,5 +1,5 @@ -\version "2.17.6" +\version "2.19.2" \header { texidoc = "The @code{SpanBarStub} grob takes care of horizontal spacing @@ -24,7 +24,7 @@ span bar were not there. \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 } @@ -38,7 +38,7 @@ span bar were not there. \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 } @@ -51,7 +51,7 @@ span bar were not there. 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 } diff --git a/input/regression/spanner-alignment.ly b/input/regression/spanner-alignment.ly index 02e04ece7d..2b4210841d 100644 --- a/input/regression/spanner-alignment.ly +++ b/input/regression/spanner-alignment.ly @@ -16,7 +16,7 @@ ignoring things like pedal marks. } \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" { diff --git a/input/regression/staff-online-symbol-absence.ly b/input/regression/staff-online-symbol-absence.ly index 6ddbd735e6..cb2c168f27 100644 --- a/input/regression/staff-online-symbol-absence.ly +++ b/input/regression/staff-online-symbol-absence.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc = "Symbols that need on-staffline info (like dots and ties) @@ -11,6 +11,6 @@ } \relative c' { \time 5/8 - f4 ~ f4 + f4 ~ 4 f4 f4. } diff --git a/input/regression/stem-direction.ly b/input/regression/stem-direction.ly index 16af1ecc73..39b6716360 100644 --- a/input/regression/stem-direction.ly +++ b/input/regression/stem-direction.ly @@ -1,5 +1,5 @@ -\version "2.16.0" +\version "2.19.2" \header{ texidoc=" @@ -13,7 +13,7 @@ notes, and up for low notes. ragged-right = ##t } \context Voice \relative c { - b''4 ~ b8(b8) e4 e, + b''4 ~ 8(b8) e4 e, } diff --git a/input/regression/tablature-chord-repetition-finger.ly b/input/regression/tablature-chord-repetition-finger.ly index 27b68dbaca..be67208185 100644 --- a/input/regression/tablature-chord-repetition-finger.ly +++ b/input/regression/tablature-chord-repetition-finger.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc = "In a TabStaff, the chord repetition function needs @@ -8,7 +8,7 @@ on the main staff." } 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 { diff --git a/input/regression/tablature-chord-repetition.ly b/input/regression/tablature-chord-repetition.ly index 7fd2a30eef..0d08b705c5 100644 --- a/input/regression/tablature-chord-repetition.ly +++ b/input/regression/tablature-chord-repetition.ly @@ -1,4 +1,4 @@ -\version "2.17.30" +\version "2.19.2" \header { texidoc = "In a TabStaff, the chord repetition function needs @@ -11,7 +11,7 @@ music in the tabstaff, not affecting other contexts." \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 { diff --git a/input/regression/tablature-full-notation.ly b/input/regression/tablature-full-notation.ly index 55f6547911..eed3f35a5f 100644 --- a/input/regression/tablature-full-notation.ly +++ b/input/regression/tablature-full-notation.ly @@ -1,4 +1,4 @@ -\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. @@ -12,7 +12,7 @@ tabstuff = { 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 diff --git a/input/regression/tablature-slurs-with-beams.ly b/input/regression/tablature-slurs-with-beams.ly index 1425ed6807..69d68c0fa9 100644 --- a/input/regression/tablature-slurs-with-beams.ly +++ b/input/regression/tablature-slurs-with-beams.ly @@ -1,4 +1,4 @@ -\version "2.17.20" +\version "2.19.0" \header { @@ -10,7 +10,8 @@ either automatic or manual beaming. 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 ]) -. r} diff --git a/input/regression/tablature-tie-behaviour.ly b/input/regression/tablature-tie-behaviour.ly index a784576ee6..06b97dbd1b 100644 --- a/input/regression/tablature-tie-behaviour.ly +++ b/input/regression/tablature-tie-behaviour.ly @@ -1,4 +1,4 @@ -\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; @@ -9,13 +9,13 @@ } 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' { diff --git a/input/regression/tablature-tie-spanner.ly b/input/regression/tablature-tie-spanner.ly index fd3346d7b8..d8f7b47b36 100644 --- a/input/regression/tablature-tie-spanner.ly +++ b/input/regression/tablature-tie-spanner.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc = " @@ -8,9 +8,9 @@ corresponding fret number is displayed in parentheses. } 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. | } diff --git a/input/regression/tag-multiple.ly b/input/regression/tag-multiple.ly index d9d62a0e0d..2f581e12ad 100644 --- a/input/regression/tag-multiple.ly +++ b/input/regression/tag-multiple.ly @@ -1,4 +1,4 @@ -\version "2.17.6" +\version "2.19.2" \header { texidoc = "The @code{\\removeWithTag} and @code{\\keepWithTag} @@ -12,7 +12,7 @@ music = << \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 = diff --git a/input/regression/tie-dash.ly b/input/regression/tie-dash.ly index 147d78a160..b6de95cc5b 100644 --- a/input/regression/tie-dash.ly +++ b/input/regression/tie-dash.ly @@ -1,4 +1,4 @@ -\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. " @@ -7,23 +7,23 @@ 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 | } diff --git a/input/regression/tie-dot.ly b/input/regression/tie-dot.ly index f595dc582e..57e098e72a 100644 --- a/input/regression/tie-dot.ly +++ b/input/regression/tie-dot.ly @@ -3,14 +3,14 @@ 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 } diff --git a/input/regression/tie-grace.ly b/input/regression/tie-grace.ly index 3aa59a21e1..da27120371 100644 --- a/input/regression/tie-grace.ly +++ b/input/regression/tie-grace.ly @@ -1,5 +1,5 @@ -\version "2.16.0" +\version "2.19.2" \header { texidoc = "Tying a grace to a following grace or main note works." } @@ -7,7 +7,7 @@ \layout { ragged-right= ##t } \context Voice \relative c'' { - c4 \grace { c8 ~ c16 ~ } c4 + c4 \grace { c8 ~ 16 ~ } c4 } diff --git a/input/regression/tie-single-manual.ly b/input/regression/tie-single-manual.ly index 23df905a94..e937c7c846 100644 --- a/input/regression/tie-single-manual.ly +++ b/input/regression/tie-single-manual.ly @@ -5,7 +5,7 @@ specifying their @code{direction} and/@/or @code{staff-position}." } -\version "2.17.6" +\version "2.19.2" \paper { ragged-right = ##t @@ -13,12 +13,12 @@ specifying their @code{direction} and/@/or @code{staff-position}." { \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 } diff --git a/input/regression/tie-single.ly b/input/regression/tie-single.ly index 7dcea62066..59799a215c 100644 --- a/input/regression/tie-single.ly +++ b/input/regression/tie-single.ly @@ -22,12 +22,12 @@ that otherwise don't fit in a space 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..] | } diff --git a/input/regression/tie-unterminated.ly b/input/regression/tie-unterminated.ly index 8e66e8a2a4..77049bdf2a 100644 --- a/input/regression/tie-unterminated.ly +++ b/input/regression/tie-unterminated.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.19.2" #(ly:set-option 'warning-as-error #f) #(ly:expect-warning (_ "unterminated tie")) @@ -8,7 +8,7 @@ } \relative c' { - c1~ c | + c1~ 1 | c1~ | c1~ d | 1~ c | diff --git a/input/regression/time-signature-midmeasure.ly b/input/regression/time-signature-midmeasure.ly new file mode 100644 index 0000000000..10b5891100 --- /dev/null +++ b/input/regression/time-signature-midmeasure.ly @@ -0,0 +1,28 @@ +\version "2.19.4" + +\header { + texidoc = "Time signature changes in midmeasure generate warnings, +except in an anacrusis or when @code{ignoreBarChecks} is true. +@code{measurePosition} is reset to 0, so a full measure follows, regardless +of the original position. + +This example should end at bar 3, with no barline before the 2/4." +} + +#(ly:expect-warning (_ "\\time in mid-measure at 1/4")) + +\score { + \relative { + \override Score.BarNumber.break-visibility = #all-visible + \partial 8 \time 2/4 + a'8 | d4 + \time 6/8 \partial 4. + cis8 b a | g4. \barNumberCheck 2 + \set Timing.ignoreBarChecks = ##t + \time 12/8 + fis4. e d + \time 2/4 + \set Timing.ignoreBarChecks = ##f + a'2 | \barNumberCheck 3 + } +} diff --git a/input/regression/tuplet-number-french-kneed-beams.ly b/input/regression/tuplet-number-french-kneed-beams.ly new file mode 100644 index 0000000000..a69ba526d0 --- /dev/null +++ b/input/regression/tuplet-number-french-kneed-beams.ly @@ -0,0 +1,42 @@ +\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. + } +>> diff --git a/input/regression/tuplet-number-kneed-beam-even-stem-count.ly b/input/regression/tuplet-number-kneed-beam-even-stem-count.ly new file mode 100644 index 0000000000..e66bc6931c --- /dev/null +++ b/input/regression/tuplet-number-kneed-beam-even-stem-count.ly @@ -0,0 +1,31 @@ +\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. + } +} diff --git a/input/regression/tuplet-number-kneed-beam-horizontal-fit.ly b/input/regression/tuplet-number-kneed-beam-horizontal-fit.ly new file mode 100644 index 0000000000..21f17d1827 --- /dev/null +++ b/input/regression/tuplet-number-kneed-beam-horizontal-fit.ly @@ -0,0 +1,33 @@ +\version "2.19.3" + +\header { + texidoc = "Tuplet numbers are placed next to the beam unless there is +insufficient horizontal space for them, in which case bracket-based +positioning is used and a programming error is issued. + +The first tuplet number should be between stems; the second should be +below the noteheads." +} + +#(ly:expect-warning (_ "not enough space for tuplet number against beam")) +#(ly:expect-warning (_ "not enough space for tuplet number against beam")) + +\layout { + indent = 0 + ragged-right = ##t +} + +\score { + \relative c' { + \time 2/4 + \override Beam.auto-knee-gap = 1 + \tuplet 6/4 4 { + \once \override TupletNumber.text = + #tuplet-number::calc-fraction-text + c16 c'' c,, c'' c,, c'' + \once \override TupletNumber.text = + #(tuplet-number::fraction-with-notes "16" "16") + c,,16 c'' c,, c'' c,, c'' + } + } +} diff --git a/input/regression/tuplet-number-kneed-beam-ledger-lines.ly b/input/regression/tuplet-number-kneed-beam-ledger-lines.ly new file mode 100644 index 0000000000..1ce4201611 --- /dev/null +++ b/input/regression/tuplet-number-kneed-beam-ledger-lines.ly @@ -0,0 +1,25 @@ +\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'' + } +} diff --git a/input/regression/tuplet-number-kneed-beam-positions.ly b/input/regression/tuplet-number-kneed-beam-positions.ly new file mode 100644 index 0000000000..3618ed21e9 --- /dev/null +++ b/input/regression/tuplet-number-kneed-beam-positions.ly @@ -0,0 +1,39 @@ +\version "2.19.4" + +\header { + texidoc = "Tuplet numbers are placed next to kneed beams when +@code{Beam.positions} is overridden." +} + +\layout { + indent = 0 + ragged-right = ##t +} + +top = \change Staff = "1" +bottom = \change Staff = "2" + +music = \relative c { + \override Beam.auto-knee-gap = 1 + \tuplet 3/2 4 { + c8 \top e'' \bottom g,, + \once \override Beam.positions = #'(4.5 . 4.5) + c,8 \top e'' \bottom g,, + \once \override Beam.positions = #'(-7.0 . -7.0) + \top e''8 \bottom c,, c, + \once \override Beam.positions = #'(-4.5 . -4.5) + \top e'''8 \bottom c,, c, + } +} + +\score { + \new PianoStaff << + \new Staff = "1" { + s1 + } + \new Staff = "2" { + \clef bass + \music + } + >> +} diff --git a/input/regression/tuplet-number-shift-along-kneed-beam.ly b/input/regression/tuplet-number-shift-along-kneed-beam.ly new file mode 100644 index 0000000000..b951fa132f --- /dev/null +++ b/input/regression/tuplet-number-shift-along-kneed-beam.ly @@ -0,0 +1,23 @@ +\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 + } +} diff --git a/input/regression/tuplet-numbers-kneed-beams-accidentals.ly b/input/regression/tuplet-numbers-kneed-beams-accidentals.ly new file mode 100644 index 0000000000..c00f4e102d --- /dev/null +++ b/input/regression/tuplet-numbers-kneed-beams-accidentals.ly @@ -0,0 +1,38 @@ +\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 \bottom g, + } + \tuplet 3/2 4 { + \top c8 c'' ceses,, + g'' g,, + } +} + +\score { + \new PianoStaff << + \new Staff = "1" { + s1 + } + \new Staff = "2" { + \clef bass + \music + } + >> +} diff --git a/input/regression/tuplet-numbers-kneed-beams.ly b/input/regression/tuplet-numbers-kneed-beams.ly new file mode 100644 index 0000000000..1286b209ca --- /dev/null +++ b/input/regression/tuplet-numbers-kneed-beams.ly @@ -0,0 +1,39 @@ +\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 + } + >> +} diff --git a/input/regression/typography-demo.ly b/input/regression/typography-demo.ly index 92bab85643..45a9945dfd 100644 --- a/input/regression/typography-demo.ly +++ b/input/regression/typography-demo.ly @@ -8,7 +8,7 @@ heavily mutilated Edition Peters Morgenlied by Schubert" } -\version "2.17.6" +\version "2.19.2" #(ly:expect-warning (_ "(De)crescendo with unspecified starting volume in MIDI.")) ignoreMelisma = \set ignoreMelismata = ##t @@ -47,7 +47,7 @@ melody = \relative c'' \repeat volta 2 \context Voice = "singer" { \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 } @@ -127,8 +127,8 @@ pianoLH = \relative c'' \repeat volta 2\new Voice { } << \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 diff --git a/input/regression/unset-once.ly b/input/regression/unset-once.ly new file mode 100644 index 0000000000..32fad554a0 --- /dev/null +++ b/input/regression/unset-once.ly @@ -0,0 +1,37 @@ +\version "2.17.15" + +\header { + + texidoc = "@code{\\once \\unset} should change a context property +value for just one timestep and then return to the previous value." + +} +\relative c' { + \set fingeringOrientations = #'(left) + 1 | + \once \unset fingeringOrientations + -"default" | + -"left" | + + \unset fingeringOrientations + -"default" | + \once\unset fingeringOrientations + -"default" | + -"default" | + \set Score.fingeringOrientations = #'(right) + -"right" + \once\unset fingeringOrientations + -"right" + -"right" + \once\set fingeringOrientations = #'(left) + -"left" + -"right" + \set fingeringOrientations = #'(left) + -"left" + \once \unset fingeringOrientations + -"right" + -"left" + \unset fingeringOrientations + \set Score.fingeringOrientations = #'(up down) + -"default" +} diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc index ac525d27de..0845a66de2 100644 --- a/lily/accidental-engraver.cc +++ b/lily/accidental-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Modified 2001--2002 by Rune Zedeler LilyPond is free software: you can redistribute it and/or modify @@ -99,7 +99,7 @@ public: }; /* - localKeySignature is changed at runtime, which means that references + localAlterations is changed at runtime, which means that references in grobs should always store ly_deep_copy ()s of those. */ @@ -120,7 +120,7 @@ Accidental_engraver::update_local_key_signature (SCM new_sig) { last_keysig_ = new_sig; set_context_property_on_children (context (), - ly_symbol2scm ("localKeySignature"), + ly_symbol2scm ("localAlterations"), new_sig); Context *trans = context ()->get_parent_context (); @@ -131,9 +131,9 @@ Accidental_engraver::update_local_key_signature (SCM new_sig) */ SCM val; - while (trans && trans->where_defined (ly_symbol2scm ("localKeySignature"), &val) == trans) + while (trans && trans->where_defined (ly_symbol2scm ("localAlterations"), &val) == trans) { - trans->set_property ("localKeySignature", ly_deep_copy (last_keysig_)); + trans->set_property ("localAlterations", ly_deep_copy (last_keysig_)); trans = trans->get_parent_context (); } } @@ -402,7 +402,7 @@ Accidental_engraver::stop_translation_timestep () SCM localsig = SCM_EOL; while (origin - && origin->where_defined (ly_symbol2scm ("localKeySignature"), &localsig)) + && origin->where_defined (ly_symbol2scm ("localAlterations"), &localsig)) { bool change = false; if (accidentals_[i].tied_ @@ -429,7 +429,7 @@ Accidental_engraver::stop_translation_timestep () } if (change) - origin->set_property ("localKeySignature", localsig); + origin->set_property ("localAlterations", localsig); origin = origin->get_parent_context (); } @@ -498,7 +498,7 @@ Accidental_engraver::acknowledge_finger (Grob_info info) void Accidental_engraver::process_music () { - SCM sig = get_property ("keySignature"); + SCM sig = get_property ("keyAlterations"); if (last_keysig_ != sig) update_local_key_signature (sig); } @@ -530,9 +530,9 @@ ADD_TRANSLATOR (Accidental_engraver, "extraNatural " "harmonicAccidentals " "accidentalGrouping " - "keySignature " - "localKeySignature ", + "keyAlterations " + "localAlterations ", /* write */ - "localKeySignature " + "localAlterations " ); diff --git a/lily/accidental-placement.cc b/lily/accidental-placement.cc index da23e57194..6fa61e967d 100644 --- a/lily/accidental-placement.cc +++ b/lily/accidental-placement.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 @@ -418,7 +418,7 @@ position_apes (Grob *me, { Real mh = ape->horizontal_skylines_[d].max_height (); if (!isinf (mh)) - width.add_point (mh); + width.add_point (mh + offset); } last_offset = offset; diff --git a/lily/accidental.cc b/lily/accidental.cc index ce05dfff72..dc3c873878 100644 --- a/lily/accidental.cc +++ b/lily/accidental.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 @@ -163,15 +163,17 @@ Accidental_interface::get_stencil (Grob *me) 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"))) { /* diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 8a2a8d9b81..f9e0e06345 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -1,7 +1,7 @@ /* 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 @@ -61,85 +61,73 @@ Align_interface::align_to_ideal_distances (SCM smob) 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 *const elements, +static Skyline_pair +get_skylines (Grob *g, Axis a, - bool pure, int start, int end, - vector *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 @@ -177,7 +165,7 @@ Align_interface::get_minimum_translations_without_min_dist (Grob *me, // else centered dynamics will break when there is a fixed alignment). vector Align_interface::internal_get_minimum_translations (Grob *me, - vector const &all_grobs, + vector const &elems, Axis a, bool include_fixed_spacing, bool pure, int start, int end) @@ -204,15 +192,14 @@ Align_interface::internal_get_minimum_translations (Grob *me, Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"), DOWN); - vector elems (all_grobs); // writable copy - vector 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 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); @@ -222,14 +209,26 @@ Align_interface::internal_get_minimum_translations (Grob *me, 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"))) @@ -249,7 +248,7 @@ Align_interface::internal_get_minimum_translations (Grob *me, 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; @@ -263,12 +262,9 @@ Align_interface::internal_get_minimum_translations (Grob *me, } } - 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); @@ -279,32 +275,18 @@ Align_interface::internal_get_minimum_translations (Grob *me, 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 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 diff --git a/lily/all-font-metrics-scheme.cc b/lily/all-font-metrics-scheme.cc index aef6be4745..354a2b10d8 100644 --- a/lily/all-font-metrics-scheme.cc +++ b/lily/all-font-metrics-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Han-Wen Nienhuys + Copyright (C) 2007--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/all-font-metrics.cc b/lily/all-font-metrics.cc index cf0d4e9086..42b405e11b 100644 --- a/lily/all-font-metrics.cc +++ b/lily/all-font-metrics.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/ambitus-engraver.cc b/lily/ambitus-engraver.cc index 99d3f8a335..f904b877e0 100644 --- a/lily/ambitus-engraver.cc +++ b/lily/ambitus-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Juergen Reuter + Copyright (C) 2002--2014 Juergen Reuter 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 diff --git a/lily/arpeggio-engraver.cc b/lily/arpeggio-engraver.cc index 2a6d3771d7..d2d1ed67b4 100644 --- a/lily/arpeggio-engraver.cc +++ b/lily/arpeggio-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen + Copyright (C) 2000--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/arpeggio.cc b/lily/arpeggio.cc index 018d9cd22d..0d5c36661c 100644 --- a/lily/arpeggio.cc +++ b/lily/arpeggio.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen + Copyright (C) 2000--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -163,7 +163,7 @@ Arpeggio::print (SCM smob) 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 (); } diff --git a/lily/articulations.cc b/lily/articulations.cc index 9034494965..164e8e7fa2 100644 --- a/lily/articulations.cc +++ b/lily/articulations.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2010--2012 Carl Sorensen + Copyright (C) 2010--2014 Carl 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 diff --git a/lily/audio-column.cc b/lily/audio-column.cc index 64203fd937..60cfe593cf 100644 --- a/lily/audio-column.cc +++ b/lily/audio-column.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/audio-element-info.cc b/lily/audio-element-info.cc index 85a74cccaf..59d3441331 100644 --- a/lily/audio-element-info.cc +++ b/lily/audio-element-info.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/audio-element.cc b/lily/audio-element.cc index 21105a1eb7..a036100c26 100644 --- a/lily/audio-element.cc +++ b/lily/audio-element.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/audio-item.cc b/lily/audio-item.cc index a41357b28f..8204d45d1c 100644 --- a/lily/audio-item.cc +++ b/lily/audio-item.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,11 +44,13 @@ Audio_item::Audio_item () { } -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) { diff --git a/lily/audio-staff.cc b/lily/audio-staff.cc index 1877464f45..aaab0cf756 100644 --- a/lily/audio-staff.cc +++ b/lily/audio-staff.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -35,11 +35,11 @@ Audio_staff::Audio_staff () } void -Audio_staff::output (Midi_stream &midi_stream, int track, bool port) +Audio_staff::output (Midi_stream &midi_stream, int track, bool port, int start_tick) { Midi_track midi_track (track, port); - Midi_walker i (this, &midi_track); + Midi_walker i (this, &midi_track, start_tick); for (; i.ok (); i++) i.process (); diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index b5c7f88ce6..8b55b44521 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Jan Nieuwenhuizen + Copyright (C) 1999--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/auto-change-iterator.cc b/lily/auto-change-iterator.cc index 1efa379e9d..9dcd9993bc 100644 --- a/lily/auto-change-iterator.cc +++ b/lily/auto-change-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/axis-group-engraver.cc b/lily/axis-group-engraver.cc index 295ba8b403..0b491eefc9 100644 --- a/lily/axis-group-engraver.cc +++ b/lily/axis-group-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/axis-group-interface-scheme.cc b/lily/axis-group-interface-scheme.cc index 68b3dd3746..ec89e8337c 100644 --- a/lily/axis-group-interface-scheme.cc +++ b/lily/axis-group-interface-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index 1e945f2f9e..af3ddcb8a3 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -1,7 +1,7 @@ /* 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 @@ -1046,7 +1046,6 @@ ADD_INTERFACE (Axis_group_interface, "nonstaff-nonstaff-spacing " "nonstaff-relatedstaff-spacing " "nonstaff-unrelatedstaff-spacing " - "outside-staff-placement-directive " "pure-relevant-grobs " "pure-relevant-items " "pure-relevant-spanners " @@ -1055,7 +1054,6 @@ ADD_INTERFACE (Axis_group_interface, "staff-grouper " "staff-staff-spacing " "system-Y-offset " - "vertical-skyline-elements " "X-common " "Y-common " ); diff --git a/lily/balloon-engraver.cc b/lily/balloon-engraver.cc index 4899ab7c50..8c50d2c0a4 100644 --- a/lily/balloon-engraver.cc +++ b/lily/balloon-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/balloon.cc b/lily/balloon.cc index d323121b3e..ec44f80b37 100644 --- a/lily/balloon.cc +++ b/lily/balloon.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/bar-check-iterator.cc b/lily/bar-check-iterator.cc index a0fb8eaee1..e4d26f8a1a 100644 --- a/lily/bar-check-iterator.cc +++ b/lily/bar-check-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc index cf217be3b0..b99de3811e 100644 --- a/lily/bar-engraver.cc +++ b/lily/bar-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/bar-line.cc b/lily/bar-line.cc index fe4406956c..ab6f7f7281 100644 --- a/lily/bar-line.cc +++ b/lily/bar-line.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc index f2c287c629..7b6af94f5f 100644 --- a/lily/bar-number-engraver.cc +++ b/lily/bar-number-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/beam-collision-engraver.cc b/lily/beam-collision-engraver.cc index 9771799c18..35ef3e3151 100644 --- a/lily/beam-collision-engraver.cc +++ b/lily/beam-collision-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2014 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc index 846e4a245c..2672a3aff4 100644 --- a/lily/beam-engraver.cc +++ b/lily/beam-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/beam-performer.cc b/lily/beam-performer.cc index d723d7a81c..15c1872bf9 100644 --- a/lily/beam-performer.cc +++ b/lily/beam-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Jan Nieuwenhuizen + Copyright (C) 1996--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/beam-quanting.cc b/lily/beam-quanting.cc index c590802675..b5cf0a2fc0 100644 --- a/lily/beam-quanting.cc +++ b/lily/beam-quanting.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/beam.cc b/lily/beam.cc index fbd158aeca..48d2be1e6e 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/beaming-pattern.cc b/lily/beaming-pattern.cc index 088cdc1a65..4415debf98 100644 --- a/lily/beaming-pattern.cc +++ b/lily/beaming-pattern.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/bend-engraver.cc b/lily/bend-engraver.cc index d7ff790ae4..341353deb8 100644 --- a/lily/bend-engraver.cc +++ b/lily/bend-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/bezier-bow.cc b/lily/bezier-bow.cc index 9252e288f5..967ee36e72 100644 --- a/lily/bezier-bow.cc +++ b/lily/bezier-bow.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/bezier.cc b/lily/bezier.cc index d926712403..7d3ad6af14 100644 --- a/lily/bezier.cc +++ b/lily/bezier.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/book-scheme.cc b/lily/book-scheme.cc index ae505af318..9cf9d2281f 100644 --- a/lily/book-scheme.cc +++ b/lily/book-scheme.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/book.cc b/lily/book.cc index 8e19823699..e52da05c93 100644 --- a/lily/book.cc +++ b/lily/book.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/box.cc b/lily/box.cc index df5ccb75b2..68d53b39f6 100644 --- a/lily/box.cc +++ b/lily/box.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/break-align-engraver.cc b/lily/break-align-engraver.cc index 167f59de84..1013ac6e7b 100644 --- a/lily/break-align-engraver.cc +++ b/lily/break-align-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/break-alignment-interface.cc b/lily/break-alignment-interface.cc index 8e231cf271..79f215623f 100644 --- a/lily/break-alignment-interface.cc +++ b/lily/break-alignment-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/break-substitution.cc b/lily/break-substitution.cc index a0f03f753c..75053c34fd 100644 --- a/lily/break-substitution.cc +++ b/lily/break-substitution.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 diff --git a/lily/breathing-sign-engraver.cc b/lily/breathing-sign-engraver.cc index ff64684546..c4a7340adb 100644 --- a/lily/breathing-sign-engraver.cc +++ b/lily/breathing-sign-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/breathing-sign.cc b/lily/breathing-sign.cc index e568e358e9..9abe9fe98d 100644 --- a/lily/breathing-sign.cc +++ b/lily/breathing-sign.cc @@ -1,8 +1,8 @@ /* 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 diff --git a/lily/change-iterator.cc b/lily/change-iterator.cc index aa505f9fe1..631a333398 100644 --- a/lily/change-iterator.cc +++ b/lily/change-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index 26b4a607bb..0057176a9f 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -39,14 +39,12 @@ protected: 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 notes_; - SCM last_chord_; Stream_event *rest_event_; }; @@ -55,16 +53,9 @@ Chord_name_engraver::finalize () { } -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; } @@ -148,11 +139,12 @@ Chord_name_engraver::process_music () 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); @@ -195,9 +187,10 @@ ADD_TRANSLATOR (Chord_name_engraver, "chordNoteNamer " "chordRootNamer " "chordNameExceptions " + "lastChord " "majorSevenSymbol " "noChordSymbol ", /* write */ - "" + "lastChord " ); diff --git a/lily/chord-name.cc b/lily/chord-name.cc index 9d400a5da5..21cbcbf4c2 100644 --- a/lily/chord-name.cc +++ b/lily/chord-name.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Jan Nieuwenhuizen + Copyright (C) 1999--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/chord-tremolo-engraver.cc b/lily/chord-tremolo-engraver.cc index fd4199527a..0e7d79525f 100644 --- a/lily/chord-tremolo-engraver.cc +++ b/lily/chord-tremolo-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Han-Wen Nienhuys + Copyright (C) 2000--2014 Han-Wen Nienhuys Erik Sandberg LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/chord-tremolo-iterator.cc b/lily/chord-tremolo-iterator.cc index 06a201f937..f73e846bcf 100644 --- a/lily/chord-tremolo-iterator.cc +++ b/lily/chord-tremolo-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Han-Wen Nienhuys + Copyright (C) 2000--2014 Han-Wen Nienhuys Erik Sandberg LilyPond is free software: you can redistribute it and/or modify @@ -20,9 +20,6 @@ #include "chord-tremolo-iterator.hh" -#include "input.hh" -#include "international.hh" -#include "misc.hh" #include "repeated-music.hh" Chord_tremolo_iterator::Chord_tremolo_iterator () @@ -33,39 +30,8 @@ SCM 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); diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index 9e2a3eaa7f..6e16d7fde8 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Mats Bengtsson LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/clef.cc b/lily/clef.cc index b58bef9987..df84074f3a 100644 --- a/lily/clef.cc +++ b/lily/clef.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/cluster-engraver.cc b/lily/cluster-engraver.cc index 650ce2ba35..0f55248a1b 100644 --- a/lily/cluster-engraver.cc +++ b/lily/cluster-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Juergen Reuter + Copyright (C) 2002--2014 Juergen Reuter Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/cluster.cc b/lily/cluster.cc index ac0abc9c74..dd16799683 100644 --- a/lily/cluster.cc +++ b/lily/cluster.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Juergen Reuter + Copyright (C) 2002--2014 Juergen Reuter Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/coherent-ligature-engraver.cc b/lily/coherent-ligature-engraver.cc index 3e2915e719..ea535a3237 100644 --- a/lily/coherent-ligature-engraver.cc +++ b/lily/coherent-ligature-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2003--2012 Juergen Reuter + Copyright (C) 2003--2014 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 diff --git a/lily/collision-engraver.cc b/lily/collision-engraver.cc index 4b4d91f2ba..a59a357098 100644 --- a/lily/collision-engraver.cc +++ b/lily/collision-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/column-x-positions.cc b/lily/column-x-positions.cc index a5b5c65fb2..caaf0895b3 100644 --- a/lily/column-x-positions.cc +++ b/lily/column-x-positions.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/completion-note-heads-engraver.cc b/lily/completion-note-heads-engraver.cc index 52a7d6c0bd..4192b58be1 100644 --- a/lily/completion-note-heads-engraver.cc +++ b/lily/completion-note-heads-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -117,6 +117,12 @@ Completion_heads_engraver::next_moment (Rational const ¬e_len) } Moment result = *l - *e; + if (result < 0) + { + programming_error ("invalid measure position: " + + e->to_string () + " of " + l->to_string ()); + return 0; + } Moment const *unit = unsmob_moment (get_property ("completionUnit")); if (unit) @@ -188,25 +194,24 @@ Completion_heads_engraver::process_music () 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 (); @@ -314,6 +319,7 @@ ADD_TRANSLATOR (Completion_heads_engraver, "TieColumn ", /* read */ + "completionFactor " "completionUnit " "measureLength " "measurePosition " diff --git a/lily/completion-rest-engraver.cc b/lily/completion-rest-engraver.cc index 61255226ea..56e11a5d1d 100644 --- a/lily/completion-rest-engraver.cc +++ b/lily/completion-rest-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -184,25 +184,24 @@ Completion_rest_engraver::process_music () 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 (); @@ -268,6 +267,7 @@ ADD_TRANSLATOR (Completion_rest_engraver, "Rest ", /* read */ + "completionFactor " "completionUnit " "middleCPosition " "measurePosition " diff --git a/lily/concurrent-hairpin-engraver.cc b/lily/concurrent-hairpin-engraver.cc index ec677ec68c..72490775a2 100644 --- a/lily/concurrent-hairpin-engraver.cc +++ b/lily/concurrent-hairpin-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2014 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/constrained-breaking.cc b/lily/constrained-breaking.cc index f8d4b0f5b2..1c4bff82c7 100644 --- a/lily/constrained-breaking.cc +++ b/lily/constrained-breaking.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/context-def.cc b/lily/context-def.cc index 9ef10bea96..56da817e10 100644 --- a/lily/context-def.cc +++ b/lily/context-def.cc @@ -1,7 +1,7 @@ /* 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 @@ -396,9 +396,12 @@ Context_def::is_alias (SCM sym) const 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); diff --git a/lily/context-handle.cc b/lily/context-handle.cc index c115c570d6..2732915c9f 100644 --- a/lily/context-handle.cc +++ b/lily/context-handle.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/context-mod-scheme.cc b/lily/context-mod-scheme.cc index 5479581b1c..6c04c0baf9 100644 --- a/lily/context-mod-scheme.cc +++ b/lily/context-mod-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2010--2012 Jan Nieuwenhuizen + Copyright (C) 2010--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/context-mod.cc b/lily/context-mod.cc index cb6cf83562..2d35e05f83 100644 --- a/lily/context-mod.cc +++ b/lily/context-mod.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2010--2012 Reinhold Kainhofer + Copyright (C) 2010--2014 Reinhold Kainhofer LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/context-property.cc b/lily/context-property.cc index 00108cf314..fa77969e1c 100644 --- a/lily/context-property.cc +++ b/lily/context-property.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/context-scheme.cc b/lily/context-scheme.cc index f58a793ed4..1559d67e01 100644 --- a/lily/context-scheme.cc +++ b/lily/context-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/context-specced-music-iterator.cc b/lily/context-specced-music-iterator.cc index e33a8806a6..81c5f4c854 100644 --- a/lily/context-specced-music-iterator.cc +++ b/lily/context-specced-music-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/context.cc b/lily/context.cc index 491ea8f0d8..a27db01865 100644 --- a/lily/context.cc +++ b/lily/context.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/cue-clef-engraver.cc b/lily/cue-clef-engraver.cc index aebf071b9e..f2988585cd 100644 --- a/lily/cue-clef-engraver.cc +++ b/lily/cue-clef-engraver.cc @@ -1,9 +1,9 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Mats Bengtsson - Copyright (C) 2010--2012 Reinhold Kainhofer + Copyright (C) 2010--2014 Reinhold Kainhofer LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/custos-engraver.cc b/lily/custos-engraver.cc index 6b915f5cb4..0ebb45cd8c 100644 --- a/lily/custos-engraver.cc +++ b/lily/custos-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Juergen Reuter , + Copyright (C) 2000--2014 Juergen Reuter , Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/custos.cc b/lily/custos.cc index 1366202f72..1bbf5f8d71 100644 --- a/lily/custos.cc +++ b/lily/custos.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Juergen Reuter + Copyright (C) 2000--2014 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 diff --git a/lily/default-bar-line-engraver.cc b/lily/default-bar-line-engraver.cc index a4c1bf6e2a..49ce6b597e 100644 --- a/lily/default-bar-line-engraver.cc +++ b/lily/default-bar-line-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/dimension-cache.cc b/lily/dimension-cache.cc index 4538f17bc1..fe40dc9321 100644 --- a/lily/dimension-cache.cc +++ b/lily/dimension-cache.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/dimensions-scheme.cc b/lily/dimensions-scheme.cc index 6d3b00efe7..2eba0eff6d 100644 --- a/lily/dimensions-scheme.cc +++ b/lily/dimensions-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/directional-element-interface.cc b/lily/directional-element-interface.cc index cd8d2c4d98..0e3556ecf7 100644 --- a/lily/directional-element-interface.cc +++ b/lily/directional-element-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/dispatcher-scheme.cc b/lily/dispatcher-scheme.cc index 13854b26d7..f6ef23d120 100644 --- a/lily/dispatcher-scheme.cc +++ b/lily/dispatcher-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Erik Sandberg + Copyright (C) 2006--2014 Erik Sandberg LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/dispatcher.cc b/lily/dispatcher.cc index eb612d35c4..915e1eff0a 100644 --- a/lily/dispatcher.cc +++ b/lily/dispatcher.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Erik Sandberg + Copyright (C) 2005--2014 Erik Sandberg LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/dot-column-engraver.cc b/lily/dot-column-engraver.cc index 5a1b0a6759..38beed5d9d 100644 --- a/lily/dot-column-engraver.cc +++ b/lily/dot-column-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/dot-column.cc b/lily/dot-column.cc index 6cba432639..35d3b3f051 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -59,7 +59,7 @@ Dot_column::calc_positioning_done (SCM smob) vector dots = extract_grob_array (me, "dots"); - vector main_heads; + vector parent_stems; Real ss = 0; Grob *commonx = me; @@ -73,7 +73,7 @@ Dot_column::calc_positioning_done (SCM smob) commonx = stem->common_refpoint (commonx, X_AXIS); if (Stem::first_head (stem) == n) - main_heads.push_back (n); + parent_stems.push_back (stem); } } @@ -83,8 +83,8 @@ Dot_column::calc_positioning_done (SCM smob) 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++) { @@ -152,6 +152,36 @@ Dot_column::calc_positioning_done (SCM smob) 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 > 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 ()) @@ -236,6 +266,7 @@ ADD_INTERFACE (Dot_column, " dots so they do not clash with staff lines.", /* properties */ + "chord-dots-limit " "dots " "positioning-done " "direction " diff --git a/lily/dot-configuration.cc b/lily/dot-configuration.cc index 940420c312..81b8d08608 100644 --- a/lily/dot-configuration.cc +++ b/lily/dot-configuration.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/dot-formatting-problem.cc b/lily/dot-formatting-problem.cc index 863aa5fc02..d1743af7b2 100644 --- a/lily/dot-formatting-problem.cc +++ b/lily/dot-formatting-problem.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Han-Wen Nienhuys + Copyright (C) 2007--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 diff --git a/lily/dots-engraver.cc b/lily/dots-engraver.cc index d588e5e92b..02569f299b 100644 --- a/lily/dots-engraver.cc +++ b/lily/dots-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/dots.cc b/lily/dots.cc index 20503ca5ae..0c7d634798 100644 --- a/lily/dots.cc +++ b/lily/dots.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/double-percent-repeat-engraver.cc b/lily/double-percent-repeat-engraver.cc index cd455e008e..9dcaf33302 100644 --- a/lily/double-percent-repeat-engraver.cc +++ b/lily/double-percent-repeat-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Neil Puttock + Copyright (C) 2011--2014 Neil Puttock LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/drum-note-engraver.cc b/lily/drum-note-engraver.cc index 06d24fdea6..591fc9d1b6 100644 --- a/lily/drum-note-engraver.cc +++ b/lily/drum-note-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/drum-note-performer.cc b/lily/drum-note-performer.cc index 94c2d55ea3..e3371a51c0 100644 --- a/lily/drum-note-performer.cc +++ b/lily/drum-note-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Jan Nieuwenhuizen + Copyright (C) 1996--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -62,9 +62,9 @@ Drum_note_performer::process_music () { 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) @@ -72,12 +72,16 @@ Drum_note_performer::process_music () 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); } diff --git a/lily/duration-scheme.cc b/lily/duration-scheme.cc index ffb769e2e9..152c75e8cc 100644 --- a/lily/duration-scheme.cc +++ b/lily/duration-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/duration.cc b/lily/duration.cc index 782804e9da..894748f915 100644 --- a/lily/duration.cc +++ b/lily/duration.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/dynamic-align-engraver.cc b/lily/dynamic-align-engraver.cc index 37f93cd5c4..35083db043 100644 --- a/lily/dynamic-align-engraver.cc +++ b/lily/dynamic-align-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2008--2012 Han-Wen Nienhuys + Copyright (C) 2008--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index a4d4e06f5a..d1b8cf00b5 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2008--2012 Han-Wen Nienhuys + Copyright (C) 2008--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 @@ -260,7 +260,6 @@ Dynamic_engraver::acknowledge_note_column (Grob_info info) 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. @@ -273,8 +272,6 @@ Dynamic_engraver::acknowledge_note_column (Grob_info info) 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)) diff --git a/lily/dynamic-performer.cc b/lily/dynamic-performer.cc index 936060bfc6..411fbd2f0a 100644 --- a/lily/dynamic-performer.cc +++ b/lily/dynamic-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen + Copyright (C) 2000--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/enclosing-bracket.cc b/lily/enclosing-bracket.cc index 8fe1513170..1a199f43a1 100644 --- a/lily/enclosing-bracket.cc +++ b/lily/enclosing-bracket.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/engraver-group.cc b/lily/engraver-group.cc index 738c465a7a..80da25b478 100644 --- a/lily/engraver-group.cc +++ b/lily/engraver-group.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/engraver-scheme.cc b/lily/engraver-scheme.cc index 8789171d7e..60f08a226a 100644 --- a/lily/engraver-scheme.cc +++ b/lily/engraver-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/engraver.cc b/lily/engraver.cc index b8bf1234c0..ac085bd296 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/episema-engraver.cc b/lily/episema-engraver.cc index 233de4efbd..ca0452932d 100644 --- a/lily/episema-engraver.cc +++ b/lily/episema-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2010--2012 Neil Puttock + Copyright (C) 2010--2014 Neil Puttock LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/event-chord-iterator.cc b/lily/event-chord-iterator.cc index cab7b259b0..55d43302c5 100644 --- a/lily/event-chord-iterator.cc +++ b/lily/event-chord-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/event-iterator.cc b/lily/event-iterator.cc index c47dea3ecb..e50e15ad5f 100644 --- a/lily/event-iterator.cc +++ b/lily/event-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc index 19e0406279..9ffdd23405 100644 --- a/lily/extender-engraver.cc +++ b/lily/extender-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Glen Prideaux , + Copyright (C) 1999--2014 Glen Prideaux , Han-Wen Nienhuys , Jan Nieuwenhuizen diff --git a/lily/figured-bass-continuation.cc b/lily/figured-bass-continuation.cc index bc216a2c4a..4b08326270 100644 --- a/lily/figured-bass-continuation.cc +++ b/lily/figured-bass-continuation.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/figured-bass-engraver.cc b/lily/figured-bass-engraver.cc index 2f8004f84c..d2eec375dd 100644 --- a/lily/figured-bass-engraver.cc +++ b/lily/figured-bass-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/figured-bass-position-engraver.cc b/lily/figured-bass-position-engraver.cc index 9b55e04f49..7654208610 100644 --- a/lily/figured-bass-position-engraver.cc +++ b/lily/figured-bass-position-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/file-name-map.cc b/lily/file-name-map.cc index b124fda9b1..54a84dc07a 100644 --- a/lily/file-name-map.cc +++ b/lily/file-name-map.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/fingering-engraver.cc b/lily/fingering-engraver.cc index 56d7b3257e..d23a5e35f8 100644 --- a/lily/fingering-engraver.cc +++ b/lily/fingering-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/flag.cc b/lily/flag.cc index 31ddf349c9..58641d37b0 100644 --- a/lily/flag.cc +++ b/lily/flag.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -105,7 +105,7 @@ Flag::glyph_name (SCM smob) 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); } @@ -143,11 +143,11 @@ Flag::print (SCM smob) 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 ()) diff --git a/lily/font-config-scheme.cc b/lily/font-config-scheme.cc index c759ab901c..7e91982b85 100644 --- a/lily/font-config-scheme.cc +++ b/lily/font-config-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/font-config.cc b/lily/font-config.cc index 641192b12c..11cfed0b40 100644 --- a/lily/font-config.cc +++ b/lily/font-config.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/font-interface.cc b/lily/font-interface.cc index 629077415b..7c3ac53574 100644 --- a/lily/font-interface.cc +++ b/lily/font-interface.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/font-metric-scheme.cc b/lily/font-metric-scheme.cc index 6d225dfeae..19afdd698d 100644 --- a/lily/font-metric-scheme.cc +++ b/lily/font-metric-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/font-metric.cc b/lily/font-metric.cc index 892319f3b8..0eb2b2903c 100644 --- a/lily/font-metric.cc +++ b/lily/font-metric.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/font-select.cc b/lily/font-select.cc index a633e685f2..6532a7c286 100644 --- a/lily/font-select.cc +++ b/lily/font-select.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2003--2012 Han-Wen Nienhuys + Copyright (C) 2003--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 diff --git a/lily/font-size-engraver.cc b/lily/font-size-engraver.cc index 03802ac2ce..c489da711f 100644 --- a/lily/font-size-engraver.cc +++ b/lily/font-size-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 diff --git a/lily/footnote-engraver.cc b/lily/footnote-engraver.cc index 20ee7c149f..fa488b06d4 100644 --- a/lily/footnote-engraver.cc +++ b/lily/footnote-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2014 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/freetype-error.cc b/lily/freetype-error.cc index 88af76c1ae..4588518d03 100644 --- a/lily/freetype-error.cc +++ b/lily/freetype-error.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Han-Wen Nienhuys + Copyright (C) 2007--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/freetype.cc b/lily/freetype.cc index 55a3fb3780..f6cdd4ecfd 100644 --- a/lily/freetype.cc +++ b/lily/freetype.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/fretboard-engraver.cc b/lily/fretboard-engraver.cc index 4530642144..27a922339a 100644 --- a/lily/fretboard-engraver.cc +++ b/lily/fretboard-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/function-documentation.cc b/lily/function-documentation.cc index ec23557333..cce8c66647 100644 --- a/lily/function-documentation.cc +++ b/lily/function-documentation.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/general-scheme.cc b/lily/general-scheme.cc index f2b3ff1ae5..19d0af73ca 100644 --- a/lily/general-scheme.cc +++ b/lily/general-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/glissando-engraver.cc b/lily/glissando-engraver.cc index 711bb1df81..40151c2943 100644 --- a/lily/glissando-engraver.cc +++ b/lily/glissando-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen + Copyright (C) 2000--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/global-context-scheme.cc b/lily/global-context-scheme.cc index 86ee2b05b9..d1cd44201d 100644 --- a/lily/global-context-scheme.cc +++ b/lily/global-context-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/global-context.cc b/lily/global-context.cc index 3fa5089e80..f0f138f324 100644 --- a/lily/global-context.cc +++ b/lily/global-context.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -181,9 +181,7 @@ Global_context::apply_finalizations () SCM lst = get_property ("finalizations"); set_property ("finalizations", SCM_EOL); for (SCM s = lst; scm_is_pair (s); s = scm_cdr (s)) - - /* TODO: make safe. */ - scm_primitive_eval (scm_car (s)); + scm_apply_0 (scm_caar (s), scm_cdar (s)); } /* Add a function to execute before stepping to the next time step. */ diff --git a/lily/global-ctor.cc b/lily/global-ctor.cc index 80ae93e361..67931e933c 100644 --- a/lily/global-ctor.cc +++ b/lily/global-ctor.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/global-vars.cc b/lily/global-vars.cc index f12e957d5e..dd6c271e47 100644 --- a/lily/global-vars.cc +++ b/lily/global-vars.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/grace-engraver.cc b/lily/grace-engraver.cc index 1ebc6c9a74..b57e284e33 100644 --- a/lily/grace-engraver.cc +++ b/lily/grace-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/grace-iterator.cc b/lily/grace-iterator.cc index 5d95fef2e7..c0c6c6ec2c 100644 --- a/lily/grace-iterator.cc +++ b/lily/grace-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/grace-music.cc b/lily/grace-music.cc index b24593aece..ffac90114c 100644 --- a/lily/grace-music.cc +++ b/lily/grace-music.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/grace-spacing-engraver.cc b/lily/grace-spacing-engraver.cc index fce1f161d0..4e5f33a91c 100644 --- a/lily/grace-spacing-engraver.cc +++ b/lily/grace-spacing-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Han-Wen + Copyright (C) 2006--2014 Han-Wen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/gregorian-ligature-engraver.cc b/lily/gregorian-ligature-engraver.cc index bfc7bfd883..9d070ad997 100644 --- a/lily/gregorian-ligature-engraver.cc +++ b/lily/gregorian-ligature-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2003--2012 Juergen Reuter + Copyright (C) 2003--2014 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 diff --git a/lily/gregorian-ligature.cc b/lily/gregorian-ligature.cc index a0f54ed162..d5e2798b1f 100644 --- a/lily/gregorian-ligature.cc +++ b/lily/gregorian-ligature.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2003--2012 Han-Wen Nienhuys + Copyright (C) 2003--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 diff --git a/lily/grid-line-interface.cc b/lily/grid-line-interface.cc index 52c11a4a3a..5eb566c0eb 100644 --- a/lily/grid-line-interface.cc +++ b/lily/grid-line-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/grid-line-span-engraver.cc b/lily/grid-line-span-engraver.cc index 43425b6f46..170b3c90c3 100644 --- a/lily/grid-line-span-engraver.cc +++ b/lily/grid-line-span-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/grid-point-engraver.cc b/lily/grid-point-engraver.cc index 471997d48c..3c326285b6 100644 --- a/lily/grid-point-engraver.cc +++ b/lily/grid-point-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/grob-array-scheme.cc b/lily/grob-array-scheme.cc index 2268ab6eda..51863dc1c7 100644 --- a/lily/grob-array-scheme.cc +++ b/lily/grob-array-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/grob-array.cc b/lily/grob-array.cc index d0cf111068..a47d222e81 100644 --- a/lily/grob-array.cc +++ b/lily/grob-array.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/grob-info.cc b/lily/grob-info.cc index 4e5d8889f3..2103385880 100644 --- a/lily/grob-info.cc +++ b/lily/grob-info.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/grob-interface-scheme.cc b/lily/grob-interface-scheme.cc index bbbe7cfe85..9c6fbc058c 100644 --- a/lily/grob-interface-scheme.cc +++ b/lily/grob-interface-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/grob-interface.cc b/lily/grob-interface.cc index ecc2a6e08f..b353205d84 100644 --- a/lily/grob-interface.cc +++ b/lily/grob-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/grob-pq-engraver.cc b/lily/grob-pq-engraver.cc index 6ad7ccf0fa..cd845cdd4a 100644 --- a/lily/grob-pq-engraver.cc +++ b/lily/grob-pq-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 diff --git a/lily/grob-property.cc b/lily/grob-property.cc index f9773e5ec5..32ff49124d 100644 --- a/lily/grob-property.cc +++ b/lily/grob-property.cc @@ -197,8 +197,17 @@ SCM 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), diff --git a/lily/grob-scheme.cc b/lily/grob-scheme.cc index 9ae9c14fcb..1bbc53212a 100644 --- a/lily/grob-scheme.cc +++ b/lily/grob-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/grob-smob.cc b/lily/grob-smob.cc index 853546a886..a201c80043 100644 --- a/lily/grob-smob.cc +++ b/lily/grob-smob.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/grob.cc b/lily/grob.cc index dee7bdaa3c..86ec7e4c6b 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -825,9 +825,6 @@ ADD_INTERFACE (Grob, "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 " diff --git a/lily/guile-init.cc b/lily/guile-init.cc index 6b27711b9f..98b779efaa 100644 --- a/lily/guile-init.cc +++ b/lily/guile-init.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/hairpin.cc b/lily/hairpin.cc index 40e165dd6d..9e6d179c8b 100644 --- a/lily/hairpin.cc +++ b/lily/hairpin.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -236,7 +236,8 @@ Hairpin::print (SCM smob) } 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 diff --git a/lily/hara-kiri-group-spanner.cc b/lily/hara-kiri-group-spanner.cc index 610ab950f4..ce06c40ee1 100644 --- a/lily/hara-kiri-group-spanner.cc +++ b/lily/hara-kiri-group-spanner.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/horizontal-bracket-engraver.cc b/lily/horizontal-bracket-engraver.cc index 941f78a172..fdf3669e75 100644 --- a/lily/horizontal-bracket-engraver.cc +++ b/lily/horizontal-bracket-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/horizontal-bracket.cc b/lily/horizontal-bracket.cc index 279ee0baf2..7beaef2820 100644 --- a/lily/horizontal-bracket.cc +++ b/lily/horizontal-bracket.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/hyphen-engraver.cc b/lily/hyphen-engraver.cc index c1f2a04e37..78470bf2fb 100644 --- a/lily/hyphen-engraver.cc +++ b/lily/hyphen-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Glen Prideaux , + Copyright (C) 1999--2014 Glen Prideaux , Han-Wen Nienhuys , Jan Nieuwenhuizen diff --git a/lily/includable-lexer.cc b/lily/includable-lexer.cc index 8c00965744..772adeee85 100644 --- a/lily/includable-lexer.cc +++ b/lily/includable-lexer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/accidental-interface.hh b/lily/include/accidental-interface.hh index f58563cbbb..6b2c8709fb 100644 --- a/lily/include/accidental-interface.hh +++ b/lily/include/accidental-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/include/accidental-placement.hh b/lily/include/accidental-placement.hh index 08ba1e163f..abbc468279 100644 --- a/lily/include/accidental-placement.hh +++ b/lily/include/accidental-placement.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/include/align-interface.hh b/lily/include/align-interface.hh index a17f523551..655d894d08 100644 --- a/lily/include/align-interface.hh +++ b/lily/include/align-interface.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/all-font-metrics.hh b/lily/include/all-font-metrics.hh index 7f2ca8326a..8ab15cf8ce 100644 --- a/lily/include/all-font-metrics.hh +++ b/lily/include/all-font-metrics.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/include/arpeggio.hh b/lily/include/arpeggio.hh index 1347219812..6c070e7055 100644 --- a/lily/include/arpeggio.hh +++ b/lily/include/arpeggio.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen + Copyright (C) 2000--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/articulations.hh b/lily/include/articulations.hh index 543c43ebd0..3cdc1967d6 100644 --- a/lily/include/articulations.hh +++ b/lily/include/articulations.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2010--2012 Carl Sorensen + Copyright (C) 2010--2014 Carl 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 diff --git a/lily/include/audio-column.hh b/lily/include/audio-column.hh index 42899dbd9e..17e0518ed2 100644 --- a/lily/include/audio-column.hh +++ b/lily/include/audio-column.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/audio-element-info.hh b/lily/include/audio-element-info.hh index e03cceff73..cd2e560943 100644 --- a/lily/include/audio-element-info.hh +++ b/lily/include/audio-element-info.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/audio-element.hh b/lily/include/audio-element.hh index 510d745a6d..99f22dabdc 100644 --- a/lily/include/audio-element.hh +++ b/lily/include/audio-element.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/audio-item.hh b/lily/include/audio-item.hh index 43ed2e05a9..b704743853 100644 --- a/lily/include/audio-item.hh +++ b/lily/include/audio-item.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Jan Nieuwenhuizen + Copyright (C) 1996--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -82,7 +82,7 @@ public: 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); @@ -93,6 +93,7 @@ public: Moment length_mom_; Pitch transposing_; Audio_dynamic *dynamic_; + int extra_velocity_; Audio_note *tied_; bool tie_event_; diff --git a/lily/include/audio-staff.hh b/lily/include/audio-staff.hh index 6fe9b8d6d4..f7f4200346 100644 --- a/lily/include/audio-staff.hh +++ b/lily/include/audio-staff.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Jan Nieuwenhuizen + Copyright (C) 1996--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ struct Audio_staff : public Audio_element { void add_audio_item (Audio_item *ai); - void output (Midi_stream &midi_stream_r, int track, bool port); + void output (Midi_stream &midi_stream_r, int track, bool port, int start_tick); Audio_staff (); diff --git a/lily/include/axis-group-interface.hh b/lily/include/axis-group-interface.hh index 5995c70e65..6a90cf5fcb 100644 --- a/lily/include/axis-group-interface.hh +++ b/lily/include/axis-group-interface.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/bar-line.hh b/lily/include/bar-line.hh index 8f7b1a24dd..100248dc63 100644 --- a/lily/include/bar-line.hh +++ b/lily/include/bar-line.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/beam-scoring-problem.hh b/lily/include/beam-scoring-problem.hh index 7e77d6794d..fc6e2c6942 100644 --- a/lily/include/beam-scoring-problem.hh +++ b/lily/include/beam-scoring-problem.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/include/beam.hh b/lily/include/beam.hh index 116ae6aa57..691c601129 100644 --- a/lily/include/beam.hh +++ b/lily/include/beam.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/include/beaming-pattern.hh b/lily/include/beaming-pattern.hh index 8b9318da5d..8210e1e5f8 100644 --- a/lily/include/beaming-pattern.hh +++ b/lily/include/beaming-pattern.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/bezier.hh b/lily/include/bezier.hh index d09c0ac8be..88ff5dbbbf 100644 --- a/lily/include/bezier.hh +++ b/lily/include/bezier.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/book.hh b/lily/include/book.hh index e5dd86e041..efbc3deb00 100644 --- a/lily/include/book.hh +++ b/lily/include/book.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/break-align-interface.hh b/lily/include/break-align-interface.hh index 28ff88b159..ceb9580149 100644 --- a/lily/include/break-align-interface.hh +++ b/lily/include/break-align-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/breathing-sign.hh b/lily/include/breathing-sign.hh index a76b10ed79..3a0d6c81bd 100644 --- a/lily/include/breathing-sign.hh +++ b/lily/include/breathing-sign.hh @@ -1,7 +1,7 @@ /* breathing-sign.hh - Copyright (c) 1999--2012 Michael Krause + Copyright (c) 1999--2014 Michael Krause written for the GNU LilyPond music typesetter */ diff --git a/lily/include/change-iterator.hh b/lily/include/change-iterator.hh index 2c9cb33125..6d040d2fc6 100644 --- a/lily/include/change-iterator.hh +++ b/lily/include/change-iterator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/chord-name.hh b/lily/include/chord-name.hh index f9e82ef41f..0f5e4cf197 100644 --- a/lily/include/chord-name.hh +++ b/lily/include/chord-name.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Jan Nieuwenhuizen + Copyright (C) 1999--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/chord-tremolo-iterator.hh b/lily/include/chord-tremolo-iterator.hh index dc27f6693f..bb4a11d965 100644 --- a/lily/include/chord-tremolo-iterator.hh +++ b/lily/include/chord-tremolo-iterator.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/clef.hh b/lily/include/clef.hh index b80093d245..1066097af4 100644 --- a/lily/include/clef.hh +++ b/lily/include/clef.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/cluster.hh b/lily/include/cluster.hh index 2aee1886e5..c35d4808f7 100644 --- a/lily/include/cluster.hh +++ b/lily/include/cluster.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Juergen Reuter + Copyright (C) 2002--2014 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 diff --git a/lily/include/coherent-ligature-engraver.hh b/lily/include/coherent-ligature-engraver.hh index bf422c40d1..a2b780a5d6 100644 --- a/lily/include/coherent-ligature-engraver.hh +++ b/lily/include/coherent-ligature-engraver.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2003--2012 Juergen Reuter + Copyright (C) 2003--2014 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 diff --git a/lily/include/column-x-positions.hh b/lily/include/column-x-positions.hh index 2356294d9d..d70d9ec12a 100644 --- a/lily/include/column-x-positions.hh +++ b/lily/include/column-x-positions.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/constrained-breaking.hh b/lily/include/constrained-breaking.hh index cb4c4f70be..13f89236bf 100644 --- a/lily/include/constrained-breaking.hh +++ b/lily/include/constrained-breaking.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/context-def.hh b/lily/include/context-def.hh index 2776c81105..835354a2e5 100644 --- a/lily/include/context-def.hh +++ b/lily/include/context-def.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/context-handle.hh b/lily/include/context-handle.hh index f4fc18bd4d..53b4de9e0c 100644 --- a/lily/include/context-handle.hh +++ b/lily/include/context-handle.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/context-mod.hh b/lily/include/context-mod.hh index d384d73a04..ab3c3d2e7e 100644 --- a/lily/include/context-mod.hh +++ b/lily/include/context-mod.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2010--2012 Reinhold Kainhofer + Copyright (C) 2010--2014 Reinhold Kainhofer LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/context.hh b/lily/include/context.hh index c779074007..69bac839a5 100644 --- a/lily/include/context.hh +++ b/lily/include/context.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/custos.hh b/lily/include/custos.hh index 3d998edd39..07cf935459 100644 --- a/lily/include/custos.hh +++ b/lily/include/custos.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Juergen Reuter + Copyright (C) 2000--2014 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 diff --git a/lily/include/dimension-cache.hh b/lily/include/dimension-cache.hh index 6210be1285..d5433d5962 100644 --- a/lily/include/dimension-cache.hh +++ b/lily/include/dimension-cache.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/include/directional-element-interface.hh b/lily/include/directional-element-interface.hh index 8e00394f46..619ec69e27 100644 --- a/lily/include/directional-element-interface.hh +++ b/lily/include/directional-element-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/dot-column.hh b/lily/include/dot-column.hh index d6109bb876..fcb381d338 100644 --- a/lily/include/dot-column.hh +++ b/lily/include/dot-column.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/dot-configuration.hh b/lily/include/dot-configuration.hh index c3013bb4fd..69627d02ba 100644 --- a/lily/include/dot-configuration.hh +++ b/lily/include/dot-configuration.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Han-Wen Nienhuys + Copyright (C) 2007--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 diff --git a/lily/include/dots.hh b/lily/include/dots.hh index d126934d10..1ac8625374 100644 --- a/lily/include/dots.hh +++ b/lily/include/dots.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/duration.hh b/lily/include/duration.hh index a7efb98eab..e05ed7042a 100644 --- a/lily/include/duration.hh +++ b/lily/include/duration.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/engraver-group.hh b/lily/include/engraver-group.hh index 5738b8a9f2..8f02c20594 100644 --- a/lily/include/engraver-group.hh +++ b/lily/include/engraver-group.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/engraver.hh b/lily/include/engraver.hh index 81713bb4e5..4a102aa265 100644 --- a/lily/include/engraver.hh +++ b/lily/include/engraver.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/event-chord-iterator.hh b/lily/include/event-chord-iterator.hh index 04168f4209..e905f8e00e 100644 --- a/lily/include/event-chord-iterator.hh +++ b/lily/include/event-chord-iterator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/event-iterator.hh b/lily/include/event-iterator.hh index c22ebab1fc..9dd40727e7 100644 --- a/lily/include/event-iterator.hh +++ b/lily/include/event-iterator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Han-Wen Nienhuys + Copyright (C) 2006--2014 Han-Wen Nienhuys Erik Sandberg LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/include/file-name-map.hh b/lily/include/file-name-map.hh index 5999f75582..fb823fa3c1 100644 --- a/lily/include/file-name-map.hh +++ b/lily/include/file-name-map.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/fingering-column.hh b/lily/include/fingering-column.hh index 5052322f12..f302470918 100644 --- a/lily/include/fingering-column.hh +++ b/lily/include/fingering-column.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/font-interface.hh b/lily/include/font-interface.hh index 8d4df894d7..7b68e0c9ff 100644 --- a/lily/include/font-interface.hh +++ b/lily/include/font-interface.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/font-metric.hh b/lily/include/font-metric.hh index 4c11989729..71ba921753 100644 --- a/lily/include/font-metric.hh +++ b/lily/include/font-metric.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/freetype.hh b/lily/include/freetype.hh index 89104bc888..28d2cdac55 100644 --- a/lily/include/freetype.hh +++ b/lily/include/freetype.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/global-context.hh b/lily/include/global-context.hh index 1ea2b38dc7..8c1b8b66ab 100644 --- a/lily/include/global-context.hh +++ b/lily/include/global-context.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/global-ctor.hh b/lily/include/global-ctor.hh index cb082b19ab..a88742e74a 100644 --- a/lily/include/global-ctor.hh +++ b/lily/include/global-ctor.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/grace-fixup.hh b/lily/include/grace-fixup.hh index 03e8129ed9..6491fcd1ea 100644 --- a/lily/include/grace-fixup.hh +++ b/lily/include/grace-fixup.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/grace-iterator.hh b/lily/include/grace-iterator.hh index 08a69abffa..4da3511c0b 100644 --- a/lily/include/grace-iterator.hh +++ b/lily/include/grace-iterator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/gregorian-ligature-engraver.hh b/lily/include/gregorian-ligature-engraver.hh index a65d54f67b..2f227eff8b 100644 --- a/lily/include/gregorian-ligature-engraver.hh +++ b/lily/include/gregorian-ligature-engraver.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2003--2012 Juergen Reuter + Copyright (C) 2003--2014 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 diff --git a/lily/include/gregorian-ligature.hh b/lily/include/gregorian-ligature.hh index 957e796ba1..8caf27044e 100644 --- a/lily/include/gregorian-ligature.hh +++ b/lily/include/gregorian-ligature.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2003--2012 Juergen Reuter + Copyright (C) 2003--2014 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 diff --git a/lily/include/grid-line-interface.hh b/lily/include/grid-line-interface.hh index 85128ce6e6..3a4e0f9717 100644 --- a/lily/include/grid-line-interface.hh +++ b/lily/include/grid-line-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/grob-array.hh b/lily/include/grob-array.hh index c21fc3cf50..958c59d55e 100644 --- a/lily/include/grob-array.hh +++ b/lily/include/grob-array.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/grob-info.hh b/lily/include/grob-info.hh index c62df2c20c..8fa83120c7 100644 --- a/lily/include/grob-info.hh +++ b/lily/include/grob-info.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/grob-interface.hh b/lily/include/grob-interface.hh index b060e85589..2062393f0b 100644 --- a/lily/include/grob-interface.hh +++ b/lily/include/grob-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/include/grob.hh b/lily/include/grob.hh index a0902d6d89..83ec5f73ed 100644 --- a/lily/include/grob.hh +++ b/lily/include/grob.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/group-interface.hh b/lily/include/group-interface.hh index c40d615299..a4077a6fd4 100644 --- a/lily/include/group-interface.hh +++ b/lily/include/group-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/hairpin.hh b/lily/include/hairpin.hh index db072f48db..9a922421f2 100644 --- a/lily/include/hairpin.hh +++ b/lily/include/hairpin.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/hara-kiri-group-spanner.hh b/lily/include/hara-kiri-group-spanner.hh index e0cbac3c9c..a283fe6c7f 100644 --- a/lily/include/hara-kiri-group-spanner.hh +++ b/lily/include/hara-kiri-group-spanner.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/horizontal-bracket.hh b/lily/include/horizontal-bracket.hh index 4226d7c553..6b02036593 100644 --- a/lily/include/horizontal-bracket.hh +++ b/lily/include/horizontal-bracket.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/includable-lexer.hh b/lily/include/includable-lexer.hh index 8378404513..e349917aaf 100644 --- a/lily/include/includable-lexer.hh +++ b/lily/include/includable-lexer.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/input.hh b/lily/include/input.hh index a11f8f8c1b..a6aa1698b4 100644 --- a/lily/include/input.hh +++ b/lily/include/input.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/interval-minefield.hh b/lily/include/interval-minefield.hh index e7e237e949..9350db7b27 100644 --- a/lily/include/interval-minefield.hh +++ b/lily/include/interval-minefield.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2014 Mike Solomon Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/include/item.hh b/lily/include/item.hh index c67b160636..bae549594c 100644 --- a/lily/include/item.hh +++ b/lily/include/item.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/keyword.hh b/lily/include/keyword.hh index 26cc606b89..c139b8a7bb 100644 --- a/lily/include/keyword.hh +++ b/lily/include/keyword.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/kievan-ligature.hh b/lily/include/kievan-ligature.hh index cb6494ca79..d8c90e7be5 100644 --- a/lily/include/kievan-ligature.hh +++ b/lily/include/kievan-ligature.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2013 Aleksandr Andreev + Copyright (C) 2013--2014 Aleksandr Andreev LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/least-squares.hh b/lily/include/least-squares.hh index 0f258bf893..f8fa88a922 100644 --- a/lily/include/least-squares.hh +++ b/lily/include/least-squares.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/ligature-engraver.hh b/lily/include/ligature-engraver.hh index 1ad21499b8..321144f0af 100644 --- a/lily/include/ligature-engraver.hh +++ b/lily/include/ligature-engraver.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Juergen Reuter + Copyright (C) 2002--2014 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 diff --git a/lily/include/lily-guile-macros.hh b/lily/include/lily-guile-macros.hh index a273f5ac5d..002cbc0a8e 100644 --- a/lily/include/lily-guile-macros.hh +++ b/lily/include/lily-guile-macros.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh index 4592b2497d..63e114a3fe 100644 --- a/lily/include/lily-guile.hh +++ b/lily/include/lily-guile.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/lily-lexer.hh b/lily/include/lily-lexer.hh index 4bc4cbe887..10dbc48389 100644 --- a/lily/include/lily-lexer.hh +++ b/lily/include/lily-lexer.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -49,11 +49,14 @@ private: 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_; @@ -94,7 +97,9 @@ public: 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 (); diff --git a/lily/include/lily-parser.hh b/lily/include/lily-parser.hh index 3b4c757d65..e2d484f3fb 100644 --- a/lily/include/lily-parser.hh +++ b/lily/include/lily-parser.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -25,8 +25,7 @@ #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 */ @@ -34,18 +33,11 @@ class Lily_parser { DECLARE_SMOBS (Lily_parser); - char const *here_str0 () const; - Simultaneous_music *get_chord (Pitch tonic, - vector *adds, vector *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_; diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index 80240d5923..83a71ab672 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/lily-version.hh b/lily/include/lily-version.hh index 1db84e4de4..6cacfab231 100644 --- a/lily/include/lily-version.hh +++ b/lily/include/lily-version.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Jan Nieuwenhuizen + Copyright (C) 1999--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/lilypond-version.hh b/lily/include/lilypond-version.hh index e79f01137a..a38b04bc53 100644 --- a/lily/include/lilypond-version.hh +++ b/lily/include/lilypond-version.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/line-interface.hh b/lily/include/line-interface.hh index e4e267c7cc..3a56c9c746 100644 --- a/lily/include/line-interface.hh +++ b/lily/include/line-interface.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/lookup.hh b/lily/include/lookup.hh index f95a7e2a40..6f167113b0 100644 --- a/lily/include/lookup.hh +++ b/lily/include/lookup.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/include/ly-module.hh b/lily/include/ly-module.hh index daa99ab6b6..c00849ebb5 100644 --- a/lily/include/ly-module.hh +++ b/lily/include/ly-module.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/include/ly-smobs.icc b/lily/include/ly-smobs.icc index db642e253d..2fba5f55a4 100644 --- a/lily/include/ly-smobs.icc +++ b/lily/include/ly-smobs.icc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/lyric-extender.hh b/lily/include/lyric-extender.hh index 1fda9f8657..2d61f1db8b 100644 --- a/lily/include/lyric-extender.hh +++ b/lily/include/lyric-extender.hh @@ -2,7 +2,7 @@ /* extender-spanner.hh -- part of GNU LilyPond - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen */ #ifndef EXTENDER_SPANNER_HH diff --git a/lily/include/lyric-hyphen.hh b/lily/include/lyric-hyphen.hh index f455a8a64f..fc335bc821 100644 --- a/lily/include/lyric-hyphen.hh +++ b/lily/include/lyric-hyphen.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Glen Prideaux + Copyright (C) 1999--2014 Glen Prideaux LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/main.hh b/lily/include/main.hh index 06a1a09991..9bad23f902 100644 --- a/lily/include/main.hh +++ b/lily/include/main.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/measure-grouping-spanner.hh b/lily/include/measure-grouping-spanner.hh index 76c0817db8..363c5fd748 100644 --- a/lily/include/measure-grouping-spanner.hh +++ b/lily/include/measure-grouping-spanner.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/include/melody-spanner.hh b/lily/include/melody-spanner.hh index 7a441b31a9..72d0a0e3b9 100644 --- a/lily/include/melody-spanner.hh +++ b/lily/include/melody-spanner.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/mensural-ligature.hh b/lily/include/mensural-ligature.hh index 900a046b15..0881d6b6a8 100644 --- a/lily/include/mensural-ligature.hh +++ b/lily/include/mensural-ligature.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Juergen Reuter , + Copyright (C) 2002--2014 Juergen Reuter , Pal Benko LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/include/midi-chunk.hh b/lily/include/midi-chunk.hh index c87adf6491..3769ce2e42 100644 --- a/lily/include/midi-chunk.hh +++ b/lily/include/midi-chunk.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Han-Wen Nienhuys + Copyright (C) 2007--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 diff --git a/lily/include/midi-item.hh b/lily/include/midi-item.hh index 492e2e9fc8..9945be8906 100644 --- a/lily/include/midi-item.hh +++ b/lily/include/midi-item.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/midi-stream.hh b/lily/include/midi-stream.hh index 7ea838fdd0..3bb0090d2f 100644 --- a/lily/include/midi-stream.hh +++ b/lily/include/midi-stream.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/midi-walker.hh b/lily/include/midi-walker.hh index ea76a02a6d..18df26b3a5 100644 --- a/lily/include/midi-walker.hh +++ b/lily/include/midi-walker.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -39,7 +39,7 @@ int compare (Midi_note_event const &left, Midi_note_event const &right); class Midi_walker { public: - Midi_walker (Audio_staff *audio_staff, Midi_track *midi_track); + Midi_walker (Audio_staff *audio_staff, Midi_track *midi_track, int start_tick); ~Midi_walker (); void process (); diff --git a/lily/include/mingw-compatibility.hh b/lily/include/mingw-compatibility.hh index 7c0ffc481b..b2b032509c 100644 --- a/lily/include/mingw-compatibility.hh +++ b/lily/include/mingw-compatibility.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Jan Nieuwenhuizen + Copyright (C) 2005--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/minimal-page-breaking.hh b/lily/include/minimal-page-breaking.hh index 22589a420e..5f1703cfd9 100644 --- a/lily/include/minimal-page-breaking.hh +++ b/lily/include/minimal-page-breaking.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Nicolas Sceaux + Copyright (C) 2007--2014 Nicolas Sceaux LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/misc.hh b/lily/include/misc.hh index 9bba2d09e9..0ea0a94252 100644 --- a/lily/include/misc.hh +++ b/lily/include/misc.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/modified-font-metric.hh b/lily/include/modified-font-metric.hh index 40533cb3c3..c1c893a613 100644 --- a/lily/include/modified-font-metric.hh +++ b/lily/include/modified-font-metric.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/moment.hh b/lily/include/moment.hh index 2aede3ce52..b7f79a6b84 100644 --- a/lily/include/moment.hh +++ b/lily/include/moment.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/multi-measure-rest.hh b/lily/include/multi-measure-rest.hh index d012a77b07..d248bb1034 100644 --- a/lily/include/multi-measure-rest.hh +++ b/lily/include/multi-measure-rest.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/music-function.hh b/lily/include/music-function.hh index d257b136b8..f08b6c5de9 100644 --- a/lily/include/music-function.hh +++ b/lily/include/music-function.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/music-iterator.hh b/lily/include/music-iterator.hh index a34e300903..9bb2637404 100644 --- a/lily/include/music-iterator.hh +++ b/lily/include/music-iterator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -73,8 +73,8 @@ public: 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 (); diff --git a/lily/include/music-output.hh b/lily/include/music-output.hh index cda3118be4..888774af55 100644 --- a/lily/include/music-output.hh +++ b/lily/include/music-output.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/music-sequence.hh b/lily/include/music-sequence.hh index 590b48b22d..bed9e3df2a 100644 --- a/lily/include/music-sequence.hh +++ b/lily/include/music-sequence.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/music-wrapper-iterator.hh b/lily/include/music-wrapper-iterator.hh index a306226724..efb460d8c1 100644 --- a/lily/include/music-wrapper-iterator.hh +++ b/lily/include/music-wrapper-iterator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 @@ -34,6 +34,8 @@ public: 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 (); diff --git a/lily/include/music-wrapper.hh b/lily/include/music-wrapper.hh index b295075ec3..fcf42283f3 100644 --- a/lily/include/music-wrapper.hh +++ b/lily/include/music-wrapper.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/include/music.hh b/lily/include/music.hh index 83cc5ff4c3..8d1ffc7128 100644 --- a/lily/include/music.hh +++ b/lily/include/music.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/note-collision.hh b/lily/include/note-collision.hh index db192bf19a..3759d85d36 100644 --- a/lily/include/note-collision.hh +++ b/lily/include/note-collision.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/note-column.hh b/lily/include/note-column.hh index c2723f0ba8..151d9208ad 100644 --- a/lily/include/note-column.hh +++ b/lily/include/note-column.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/note-head.hh b/lily/include/note-head.hh index 6155dd7dc6..4691c42cc5 100644 --- a/lily/include/note-head.hh +++ b/lily/include/note-head.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/note-spacing.hh b/lily/include/note-spacing.hh index 9b8a4fd922..367acf1ebb 100644 --- a/lily/include/note-spacing.hh +++ b/lily/include/note-spacing.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 @@ -29,9 +29,9 @@ class Note_spacing 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 */ diff --git a/lily/include/open-type-font.hh b/lily/include/open-type-font.hh index cb55e9744b..8c79ef9f27 100644 --- a/lily/include/open-type-font.hh +++ b/lily/include/open-type-font.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/optimal-page-breaking.hh b/lily/include/optimal-page-breaking.hh index 0e6a71d0d4..546d057fba 100644 --- a/lily/include/optimal-page-breaking.hh +++ b/lily/include/optimal-page-breaking.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/output-def.hh b/lily/include/output-def.hh index eff52c2c38..0cd9786d2b 100644 --- a/lily/include/output-def.hh +++ b/lily/include/output-def.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/page-breaking.hh b/lily/include/page-breaking.hh index c84a56e679..435d849992 100644 --- a/lily/include/page-breaking.hh +++ b/lily/include/page-breaking.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/page-layout-problem.hh b/lily/include/page-layout-problem.hh index b7d63a2e13..930109bcf1 100644 --- a/lily/include/page-layout-problem.hh +++ b/lily/include/page-layout-problem.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2009--2012 Joe Neeman + Copyright (C) 2009--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/page-marker.hh b/lily/include/page-marker.hh index b608e080a9..a18173f5c4 100644 --- a/lily/include/page-marker.hh +++ b/lily/include/page-marker.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Nicolas Sceaux + Copyright (C) 2007--2014 Nicolas Sceaux LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/page-spacing-result.hh b/lily/include/page-spacing-result.hh index e076a52da8..d75dd98616 100644 --- a/lily/include/page-spacing-result.hh +++ b/lily/include/page-spacing-result.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Han-Wen Nienhuys + Copyright (C) 2007--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 diff --git a/lily/include/page-spacing.hh b/lily/include/page-spacing.hh index 8f524537bd..92fba0210a 100644 --- a/lily/include/page-spacing.hh +++ b/lily/include/page-spacing.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/page-turn-page-breaking.hh b/lily/include/page-turn-page-breaking.hh index 5bb74e801b..d8e1b969c7 100644 --- a/lily/include/page-turn-page-breaking.hh +++ b/lily/include/page-turn-page-breaking.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/pango-font.hh b/lily/include/pango-font.hh index ad559551d1..43eca3a6ba 100644 --- a/lily/include/pango-font.hh +++ b/lily/include/pango-font.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/paper-book.hh b/lily/include/paper-book.hh index d00c8bcd9b..a0ccbe82cc 100644 --- a/lily/include/paper-book.hh +++ b/lily/include/paper-book.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2004--2012 Jan Nieuwenhuizen + Copyright (C) 2004--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/paper-column-engraver.hh b/lily/include/paper-column-engraver.hh index 3249432b40..44e7003d83 100644 --- a/lily/include/paper-column-engraver.hh +++ b/lily/include/paper-column-engraver.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/paper-column.hh b/lily/include/paper-column.hh index 01a84d50df..c1638a2539 100644 --- a/lily/include/paper-column.hh +++ b/lily/include/paper-column.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/paper-outputter.hh b/lily/include/paper-outputter.hh index 02bc2746a2..a674fda0c8 100644 --- a/lily/include/paper-outputter.hh +++ b/lily/include/paper-outputter.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/paper-score.hh b/lily/include/paper-score.hh index f980ee154e..c44634b2c9 100644 --- a/lily/include/paper-score.hh +++ b/lily/include/paper-score.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/paper-system.hh b/lily/include/paper-system.hh index 5d0688d936..4fc87c7f76 100644 --- a/lily/include/paper-system.hh +++ b/lily/include/paper-system.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2004--2012 Jan Nieuwenhuizen + Copyright (C) 2004--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/parse-scm.hh b/lily/include/parse-scm.hh index 047399a322..6234a84fec 100644 --- a/lily/include/parse-scm.hh +++ b/lily/include/parse-scm.hh @@ -1,7 +1,7 @@ /* 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 @@ -26,30 +26,23 @@ 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 */ diff --git a/lily/include/percent-repeat-item.hh b/lily/include/percent-repeat-item.hh index 1c8e0f44b0..55bb7be88a 100644 --- a/lily/include/percent-repeat-item.hh +++ b/lily/include/percent-repeat-item.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 diff --git a/lily/include/performance.hh b/lily/include/performance.hh index 9c3ce3742d..8b5de86331 100644 --- a/lily/include/performance.hh +++ b/lily/include/performance.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/performer-group.hh b/lily/include/performer-group.hh index 4316d8bb73..deaa33efcb 100644 --- a/lily/include/performer-group.hh +++ b/lily/include/performer-group.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/include/performer.hh b/lily/include/performer.hh index 1601625690..fcd5a26b42 100644 --- a/lily/include/performer.hh +++ b/lily/include/performer.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/include/pitch-interval.hh b/lily/include/pitch-interval.hh index e067590f52..08755a5181 100644 --- a/lily/include/pitch-interval.hh +++ b/lily/include/pitch-interval.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/pitch.hh b/lily/include/pitch.hh index d7b36c2eb6..cab0c50922 100644 --- a/lily/include/pitch.hh +++ b/lily/include/pitch.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/include/pointer-group-interface.hh b/lily/include/pointer-group-interface.hh index e265bedc79..356b29656c 100644 --- a/lily/include/pointer-group-interface.hh +++ b/lily/include/pointer-group-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/prob.hh b/lily/include/prob.hh index 58d93cae23..77c1a634ea 100644 --- a/lily/include/prob.hh +++ b/lily/include/prob.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2004--2012 Jan Nieuwenhuizen + Copyright (C) 2004--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/profile.hh b/lily/include/profile.hh index 6ed139d6a2..3771d60ed0 100644 --- a/lily/include/profile.hh +++ b/lily/include/profile.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/program-option.hh b/lily/include/program-option.hh index 83526816de..7048f70256 100644 --- a/lily/include/program-option.hh +++ b/lily/include/program-option.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Jan Nieuwenhuizen + Copyright (C) 2001--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/property-iterator.hh b/lily/include/property-iterator.hh index 08f7a983b8..52fead0773 100644 --- a/lily/include/property-iterator.hh +++ b/lily/include/property-iterator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/protected-scm.hh b/lily/include/protected-scm.hh index ccd0012690..2847adb79a 100644 --- a/lily/include/protected-scm.hh +++ b/lily/include/protected-scm.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/include/pure-from-neighbor-interface.hh b/lily/include/pure-from-neighbor-interface.hh index 5cf10fee35..85dffe8ecd 100644 --- a/lily/include/pure-from-neighbor-interface.hh +++ b/lily/include/pure-from-neighbor-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2014 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/relocate.hh b/lily/include/relocate.hh index 5fda3c73a7..b05ea79670 100644 --- a/lily/include/relocate.hh +++ b/lily/include/relocate.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/repeated-music.hh b/lily/include/repeated-music.hh index 35a4aaa6e0..e33c4b1b98 100644 --- a/lily/include/repeated-music.hh +++ b/lily/include/repeated-music.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/rest-collision.hh b/lily/include/rest-collision.hh index 53c2cda6a0..39fa8e1bda 100644 --- a/lily/include/rest-collision.hh +++ b/lily/include/rest-collision.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/rest.hh b/lily/include/rest.hh index d5dbae9e25..900b3aefbc 100644 --- a/lily/include/rest.hh +++ b/lily/include/rest.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/rhythmic-head.hh b/lily/include/rhythmic-head.hh index 0739daad0f..19b1550499 100644 --- a/lily/include/rhythmic-head.hh +++ b/lily/include/rhythmic-head.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/rod.hh b/lily/include/rod.hh index 077b8cfc1d..e583398895 100644 --- a/lily/include/rod.hh +++ b/lily/include/rod.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/include/scale.hh b/lily/include/scale.hh index 62d8d553ec..daaf0bb2dc 100644 --- a/lily/include/scale.hh +++ b/lily/include/scale.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/scheme-engraver.hh b/lily/include/scheme-engraver.hh index a90252d04a..997743152a 100644 --- a/lily/include/scheme-engraver.hh +++ b/lily/include/scheme-engraver.hh @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - Copyright (c) 2009--2012 Han-Wen Nienhuys + Copyright (c) 2009--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 diff --git a/lily/include/scheme-listener.hh b/lily/include/scheme-listener.hh index 7905ef9e1d..56ede65e7d 100644 --- a/lily/include/scheme-listener.hh +++ b/lily/include/scheme-listener.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Erik Sandberg + Copyright (C) 2006--2014 Erik Sandberg LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/scm-hash.hh b/lily/include/scm-hash.hh index c81225913f..1182c503f9 100644 --- a/lily/include/scm-hash.hh +++ b/lily/include/scm-hash.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/score-engraver.hh b/lily/include/score-engraver.hh index ffff8c41aa..4b042fe94b 100644 --- a/lily/include/score-engraver.hh +++ b/lily/include/score-engraver.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/score-performer.hh b/lily/include/score-performer.hh index 8eb67b3f29..7a1cb628a6 100644 --- a/lily/include/score-performer.hh +++ b/lily/include/score-performer.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/include/score.hh b/lily/include/score.hh index 1b34d40410..7fe68796ec 100644 --- a/lily/include/score.hh +++ b/lily/include/score.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/script-column.hh b/lily/include/script-column.hh index 4b9a52ad9c..81f08e3b9d 100644 --- a/lily/include/script-column.hh +++ b/lily/include/script-column.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/script-interface.hh b/lily/include/script-interface.hh index 00e2e6d81f..6d2ae552ca 100644 --- a/lily/include/script-interface.hh +++ b/lily/include/script-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/self-alignment-interface.hh b/lily/include/self-alignment-interface.hh index dd69f86630..2b34b39eff 100644 --- a/lily/include/self-alignment-interface.hh +++ b/lily/include/self-alignment-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/semi-tie-column.hh b/lily/include/semi-tie-column.hh index 51a3d74388..88bde59bba 100644 --- a/lily/include/semi-tie-column.hh +++ b/lily/include/semi-tie-column.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/include/semi-tie.hh b/lily/include/semi-tie.hh index a92b89fb4a..2be7d15e56 100644 --- a/lily/include/semi-tie.hh +++ b/lily/include/semi-tie.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/separation-item.hh b/lily/include/separation-item.hh index 392c59ca48..40b518e97a 100644 --- a/lily/include/separation-item.hh +++ b/lily/include/separation-item.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/sequential-iterator.hh b/lily/include/sequential-iterator.hh index a4fcdb0cc3..6c09ae3d09 100644 --- a/lily/include/sequential-iterator.hh +++ b/lily/include/sequential-iterator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/include/side-position-interface.hh b/lily/include/side-position-interface.hh index e7c1637471..46f592fb8d 100644 --- a/lily/include/side-position-interface.hh +++ b/lily/include/side-position-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/simple-closure.hh b/lily/include/simple-closure.hh index a4587c2a95..9f4186e58b 100644 --- a/lily/include/simple-closure.hh +++ b/lily/include/simple-closure.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/simple-music-iterator.hh b/lily/include/simple-music-iterator.hh index 75a648b6bd..96fddabaeb 100644 --- a/lily/include/simple-music-iterator.hh +++ b/lily/include/simple-music-iterator.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/simple-spacer.hh b/lily/include/simple-spacer.hh index 675e3baf54..71b1045aca 100644 --- a/lily/include/simple-spacer.hh +++ b/lily/include/simple-spacer.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/simultaneous-music-iterator.hh b/lily/include/simultaneous-music-iterator.hh index c8766cd77c..40d35de89b 100644 --- a/lily/include/simultaneous-music-iterator.hh +++ b/lily/include/simultaneous-music-iterator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/skyline-pair.hh b/lily/include/skyline-pair.hh index 566b9be3f7..0d37f794f4 100644 --- a/lily/include/skyline-pair.hh +++ b/lily/include/skyline-pair.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2008--2012 Han-Wen Nienhuys + Copyright (C) 2008--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 diff --git a/lily/include/skyline.hh b/lily/include/skyline.hh index 6846474857..bdb8be7813 100644 --- a/lily/include/skyline.hh +++ b/lily/include/skyline.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/slur-configuration.hh b/lily/include/slur-configuration.hh index 5114815619..815eb1379a 100644 --- a/lily/include/slur-configuration.hh +++ b/lily/include/slur-configuration.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/slur-proto-engraver.hh b/lily/include/slur-proto-engraver.hh index e27c96a759..3dc6211863 100644 --- a/lily/include/slur-proto-engraver.hh +++ b/lily/include/slur-proto-engraver.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2013 Mike Solomon + Copyright (C) 2013--2014 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/slur-score-parameters.hh b/lily/include/slur-score-parameters.hh index 75b1ae8e46..6095cc3633 100644 --- a/lily/include/slur-score-parameters.hh +++ b/lily/include/slur-score-parameters.hh @@ -1,7 +1,7 @@ /* 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 @@ -40,6 +40,8 @@ struct Slur_score_parameters 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_; diff --git a/lily/include/slur-scoring.hh b/lily/include/slur-scoring.hh index e5ff38d611..311de61132 100644 --- a/lily/include/slur-scoring.hh +++ b/lily/include/slur-scoring.hh @@ -1,7 +1,7 @@ /* 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 @@ -100,6 +100,7 @@ struct Slur_score_state Drul_array base_attachments_; vector configurations_; Real staff_space_; + Real line_thickness_; Real thickness_; Slur_score_state (); diff --git a/lily/include/slur.hh b/lily/include/slur.hh index b20311785d..1d900220e6 100644 --- a/lily/include/slur.hh +++ b/lily/include/slur.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/smobs.hh b/lily/include/smobs.hh index cd111981bb..49c29325f0 100644 --- a/lily/include/smobs.hh +++ b/lily/include/smobs.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/source-file.hh b/lily/include/source-file.hh index 5f3553aea0..26bf6dbdb4 100644 --- a/lily/include/source-file.hh +++ b/lily/include/source-file.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Jan Nieuwenhuizen + Copyright (C) 1999--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/sources.hh b/lily/include/sources.hh index 5743fc56cf..165b59038d 100644 --- a/lily/include/sources.hh +++ b/lily/include/sources.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/spaceable-grob.hh b/lily/include/spaceable-grob.hh index 8293675ddf..8dd955182e 100644 --- a/lily/include/spaceable-grob.hh +++ b/lily/include/spaceable-grob.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/spacing-interface.hh b/lily/include/spacing-interface.hh index d599df7566..81f2401e9d 100644 --- a/lily/include/spacing-interface.hh +++ b/lily/include/spacing-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/include/spacing-options.hh b/lily/include/spacing-options.hh index 2ca45c5e85..a270d585e1 100644 --- a/lily/include/spacing-options.hh +++ b/lily/include/spacing-options.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/spacing-spanner.hh b/lily/include/spacing-spanner.hh index 165f04a8ad..ea61d5acdd 100644 --- a/lily/include/spacing-spanner.hh +++ b/lily/include/spacing-spanner.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 @@ -45,7 +45,7 @@ private: static bool fills_measure (Grob *, Item *, Item *); public: static vector 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)); diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh index cce03ee437..40b3473dca 100644 --- a/lily/include/spanner.hh +++ b/lily/include/spanner.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/spring.hh b/lily/include/spring.hh index fe02fe898c..d6fda83d32 100644 --- a/lily/include/spring.hh +++ b/lily/include/spring.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/staff-grouper-interface.hh b/lily/include/staff-grouper-interface.hh index 7d55392f6a..aaeb401738 100644 --- a/lily/include/staff-grouper-interface.hh +++ b/lily/include/staff-grouper-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2009--2012 Joe Neeman + Copyright (C) 2009--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/staff-spacing.hh b/lily/include/staff-spacing.hh index c20e1d5df8..066041f93c 100644 --- a/lily/include/staff-spacing.hh +++ b/lily/include/staff-spacing.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 diff --git a/lily/include/staff-symbol-referencer.hh b/lily/include/staff-symbol-referencer.hh index 79d07cfe7c..3867ac7549 100644 --- a/lily/include/staff-symbol-referencer.hh +++ b/lily/include/staff-symbol-referencer.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/include/staff-symbol.hh b/lily/include/staff-symbol.hh index 688dccb0a6..7aae8a287d 100644 --- a/lily/include/staff-symbol.hh +++ b/lily/include/staff-symbol.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/stem-info.hh b/lily/include/stem-info.hh index 5b92ac7524..a4089c2af9 100644 --- a/lily/include/stem-info.hh +++ b/lily/include/stem-info.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/stem-tremolo.hh b/lily/include/stem-tremolo.hh index 7137046d30..0ae21592bf 100644 --- a/lily/include/stem-tremolo.hh +++ b/lily/include/stem-tremolo.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/stem.hh b/lily/include/stem.hh index 101c00341a..f657e2da0f 100644 --- a/lily/include/stem.hh +++ b/lily/include/stem.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/stencil.hh b/lily/include/stencil.hh index 34bafa6d41..11baeaf76e 100644 --- a/lily/include/stencil.hh +++ b/lily/include/stencil.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/stream-event.hh b/lily/include/stream-event.hh index f255ab5353..3234c03d9f 100644 --- a/lily/include/stream-event.hh +++ b/lily/include/stream-event.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Erik Sandberg + Copyright (C) 2005--2014 Erik Sandberg LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/system-start-delimiter.hh b/lily/include/system-start-delimiter.hh index f3b183b1c8..ab650ec671 100644 --- a/lily/include/system-start-delimiter.hh +++ b/lily/include/system-start-delimiter.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/system.hh b/lily/include/system.hh index a5efe750ad..97fee80117 100644 --- a/lily/include/system.hh +++ b/lily/include/system.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/text-interface.hh b/lily/include/text-interface.hh index 1e736a5071..7c1bd765f8 100644 --- a/lily/include/text-interface.hh +++ b/lily/include/text-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/include/tie-column.hh b/lily/include/tie-column.hh index 4832efe0bc..79075a37e9 100644 --- a/lily/include/tie-column.hh +++ b/lily/include/tie-column.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/tie-configuration.hh b/lily/include/tie-configuration.hh index 9da9e45a40..62b6a15a72 100644 --- a/lily/include/tie-configuration.hh +++ b/lily/include/tie-configuration.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/tie-details.hh b/lily/include/tie-details.hh index b03b497007..39fbb90eb9 100644 --- a/lily/include/tie-details.hh +++ b/lily/include/tie-details.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/tie-formatting-problem.hh b/lily/include/tie-formatting-problem.hh index 3f21dba6a1..df24f2ccf4 100644 --- a/lily/include/tie-formatting-problem.hh +++ b/lily/include/tie-formatting-problem.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/tie-specification.hh b/lily/include/tie-specification.hh index 36f65fabd9..330fe24011 100644 --- a/lily/include/tie-specification.hh +++ b/lily/include/tie-specification.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Han-Wen Nienhuys + Copyright (C) 2007--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 diff --git a/lily/include/tie.hh b/lily/include/tie.hh index 9e24099cdc..349f5b83e2 100644 --- a/lily/include/tie.hh +++ b/lily/include/tie.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/time-scaled-music-iterator.hh b/lily/include/time-scaled-music-iterator.hh index 3985e0b0ea..83e234bb7a 100644 --- a/lily/include/time-scaled-music-iterator.hh +++ b/lily/include/time-scaled-music-iterator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys , + Copyright (C) 1998--2014 Han-Wen Nienhuys , Erik Sandberg LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/include/time-signature.hh b/lily/include/time-signature.hh index 4fa922419d..784af867b6 100644 --- a/lily/include/time-signature.hh +++ b/lily/include/time-signature.hh @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/include/timing-translator.hh b/lily/include/timing-translator.hh index 7629009d3e..2b98e68786 100644 --- a/lily/include/timing-translator.hh +++ b/lily/include/timing-translator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/translator-dispatch-list.hh b/lily/include/translator-dispatch-list.hh index afb9ce45a2..bdb9e57ef3 100644 --- a/lily/include/translator-dispatch-list.hh +++ b/lily/include/translator-dispatch-list.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/translator-group.hh b/lily/include/translator-group.hh index ad044de860..edad599eea 100644 --- a/lily/include/translator-group.hh +++ b/lily/include/translator-group.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/translator.hh b/lily/include/translator.hh index be6781eb03..858af4ce21 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/include/translator.icc b/lily/include/translator.icc index 4ce8f6902e..53697b38e6 100644 --- a/lily/include/translator.icc +++ b/lily/include/translator.icc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/include/tuplet-bracket.hh b/lily/include/tuplet-bracket.hh index 2f4bf38e19..48e7e47180 100644 --- a/lily/include/tuplet-bracket.hh +++ b/lily/include/tuplet-bracket.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/tuplet-number.hh b/lily/include/tuplet-number.hh new file mode 100644 index 0000000000..214f0acfdc --- /dev/null +++ b/lily/include/tuplet-number.hh @@ -0,0 +1,43 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1997--2014 Jan Nieuwenhuizen + + 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 . +*/ + +#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 const &cols); + static Drul_array adjacent_note_columns (Grob *me, Grob *ref_stem); + static bool knee_position_against_beam (Grob *me, Grob *ref_stem); +}; + +#endif // Tuplet_number_HH + diff --git a/lily/include/unpure-pure-container.hh b/lily/include/unpure-pure-container.hh index ccf0971844..1fd32d40bb 100644 --- a/lily/include/unpure-pure-container.hh +++ b/lily/include/unpure-pure-container.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 @@ -23,6 +23,7 @@ #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); diff --git a/lily/include/vaticana-ligature.hh b/lily/include/vaticana-ligature.hh index e3c6d51df8..c8aab6870e 100644 --- a/lily/include/vaticana-ligature.hh +++ b/lily/include/vaticana-ligature.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2003--2012 Juergen Reuter + Copyright (C) 2003--2014 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 diff --git a/lily/include/volta-bracket.hh b/lily/include/volta-bracket.hh index d9a7bfb249..a42e840531 100644 --- a/lily/include/volta-bracket.hh +++ b/lily/include/volta-bracket.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/input-scheme.cc b/lily/input-scheme.cc index 280a32de9e..01cad8c9d7 100644 --- a/lily/input-scheme.cc +++ b/lily/input-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/input-smob.cc b/lily/input-smob.cc index 4d446ab6c0..4aef6f122d 100644 --- a/lily/input-smob.cc +++ b/lily/input-smob.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/input.cc b/lily/input.cc index a091ef9855..b5d5dccc5c 100644 --- a/lily/input.cc +++ b/lily/input.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -142,7 +142,7 @@ string 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 "?"; } diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index 0abc7e4329..879914a81d 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/instrument-switch-engraver.cc b/lily/instrument-switch-engraver.cc index c18ca4666b..f0c6e6aec6 100644 --- a/lily/instrument-switch-engraver.cc +++ b/lily/instrument-switch-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/interval-minefield.cc b/lily/interval-minefield.cc index d26e3e0d28..96d7d27704 100644 --- a/lily/interval-minefield.cc +++ b/lily/interval-minefield.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2014 Mike Solomon Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/item-scheme.cc b/lily/item-scheme.cc index c316ac311e..d218819432 100644 --- a/lily/item-scheme.cc +++ b/lily/item-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/item.cc b/lily/item.cc index 9cc808dde4..e71bc4190b 100644 --- a/lily/item.cc +++ b/lily/item.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/keep-alive-together-engraver.cc b/lily/keep-alive-together-engraver.cc index f6ba297ccf..008a024e5a 100644 --- a/lily/keep-alive-together-engraver.cc +++ b/lily/keep-alive-together-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2010--2012 Joe Neeman + Copyright (C) 2010--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc index 5707b548b9..5b48b1d78a 100644 --- a/lily/key-engraver.cc +++ b/lily/key-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -78,8 +78,8 @@ Key_engraver::create_key (bool is_default) item_->set_property ("c0-position", get_property ("middleCClefPosition")); - SCM last = get_property ("lastKeySignature"); - SCM key = get_property ("keySignature"); + SCM last = get_property ("lastKeyAlterations"); + SCM key = get_property ("keyAlterations"); if ((to_boolean (get_property ("printKeyCancellation")) || key == SCM_EOL) @@ -106,7 +106,7 @@ Key_engraver::create_key (bool is_default) cancellation_->set_property ("alteration-alist", restore); cancellation_->set_property ("c0-position", - get_property ("middleCPosition")); + get_property ("middleCClefPosition")); } } @@ -140,7 +140,7 @@ Key_engraver::acknowledge_clef (Grob_info /* info */) void Key_engraver::acknowledge_bar_line (Grob_info /* info */) { - if (scm_is_pair (get_property ("keySignature"))) + if (scm_is_pair (get_property ("keyAlterations"))) create_key (true); } @@ -148,7 +148,7 @@ void Key_engraver::process_music () { if (key_event_ - || get_property ("lastKeySignature") != get_property ("keySignature")) + || get_property ("lastKeyAlterations") != get_property ("keyAlterations")) create_key (false); } @@ -156,7 +156,7 @@ void Key_engraver::stop_translation_timestep () { item_ = 0; - context ()->set_property ("lastKeySignature", get_property ("keySignature")); + context ()->set_property ("lastKeyAlterations", get_property ("keyAlterations")); cancellation_ = 0; key_event_ = 0; } @@ -198,7 +198,7 @@ Key_engraver::read_event (Stream_event const *r) r->origin ()->warning (_ ("Incomplete keyAlterationOrder for key signature")); } - context ()->set_property ("keySignature", scm_reverse_x (accs, SCM_EOL)); + context ()->set_property ("keyAlterations", scm_reverse_x (accs, SCM_EOL)); context ()->set_property ("tonic", r->get_property ("tonic")); } @@ -206,8 +206,8 @@ Key_engraver::read_event (Stream_event const *r) void Key_engraver::initialize () { - context ()->set_property ("keySignature", SCM_EOL); - context ()->set_property ("lastKeySignature", SCM_EOL); + context ()->set_property ("keyAlterations", SCM_EOL); + context ()->set_property ("lastKeyAlterations", SCM_EOL); Pitch p (0, 0, 0); context ()->set_property ("tonic", p.smobbed_copy ()); @@ -229,13 +229,13 @@ ADD_TRANSLATOR (Key_engraver, "explicitKeySignatureVisibility " "extraNatural " "keyAlterationOrder " - "keySignature " - "lastKeySignature " + "keyAlterations " + "lastKeyAlterations " "printKeyCancellation " "middleCClefPosition ", /* write */ - "keySignature " - "lastKeySignature " + "keyAlterations " + "lastKeyAlterations " "tonic " ); diff --git a/lily/key-performer.cc b/lily/key-performer.cc index a611405244..9a3675fe3a 100644 --- a/lily/key-performer.cc +++ b/lily/key-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/key-signature-interface.cc b/lily/key-signature-interface.cc index fb691c00d8..9181071aee 100644 --- a/lily/key-signature-interface.cc +++ b/lily/key-signature-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys keyplacement by Mats Bengtsson diff --git a/lily/kievan-ligature-engraver.cc b/lily/kievan-ligature-engraver.cc index 92b9848c5b..85d6d8dc0f 100644 --- a/lily/kievan-ligature-engraver.cc +++ b/lily/kievan-ligature-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2013 Aleksandr Andreev + Copyright (C) 2013--2014 Aleksandr Andreev LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/kievan-ligature.cc b/lily/kievan-ligature.cc index 21ea23e16a..2421e156ef 100644 --- a/lily/kievan-ligature.cc +++ b/lily/kievan-ligature.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2013 Aleksandr Andreev + Copyright (C) 2013--2014 Aleksandr Andreev LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/laissez-vibrer-engraver.cc b/lily/laissez-vibrer-engraver.cc index edbd2c1dfb..f707964eb7 100644 --- a/lily/laissez-vibrer-engraver.cc +++ b/lily/laissez-vibrer-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/least-squares.cc b/lily/least-squares.cc index 0d539104fe..0cc99c6e83 100644 --- a/lily/least-squares.cc +++ b/lily/least-squares.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/ledger-line-engraver.cc b/lily/ledger-line-engraver.cc index 2bb12c9cdc..a596721f61 100644 --- a/lily/ledger-line-engraver.cc +++ b/lily/ledger-line-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/ledger-line-spanner.cc b/lily/ledger-line-spanner.cc index de88ba402f..7a45bef2de 100644 --- a/lily/ledger-line-spanner.cc +++ b/lily/ledger-line-spanner.cc @@ -1,7 +1,7 @@ /* 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 @@ -100,7 +100,7 @@ Ledger_line_spanner::set_spacing_rods (SCM smob) 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[], diff --git a/lily/lexer.ll b/lily/lexer.ll index 285de24267..66da124336 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -2,7 +2,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -123,7 +123,6 @@ SCM (* scm_parse_error_handler) (void *); %option never-interactive %option warn -%x extratoken %x chords %x figures %x incl @@ -186,36 +185,6 @@ BOM_UTF8 \357\273\277 // swallow and ignore carriage returns } -{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; -} - -<> { - /* 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. */ {BOM_UTF8}/.* { @@ -361,12 +330,11 @@ BOM_UTF8 \357\273\277 } } (\$|#) { // 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++) { @@ -416,15 +384,14 @@ BOM_UTF8 \357\273\277 return MULTI_MEASURE_REST; } # { //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 (); @@ -436,11 +403,11 @@ BOM_UTF8 \357\273\277 } \$ { //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++) { @@ -448,7 +415,7 @@ BOM_UTF8 \357\273\277 } 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)) @@ -673,6 +640,10 @@ BOM_UTF8 \357\273\277 yylval = SCM_UNSPECIFIED; return SCORE; } + \\score-lines { + yylval = SCM_UNSPECIFIED; + return SCORELINES; + } \\\" { start_command_quote (); } @@ -713,17 +684,17 @@ BOM_UTF8 \357\273\277 // 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; } @@ -842,15 +813,25 @@ BOM_UTF8 \357\273\277 /* 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 @@ -891,32 +872,17 @@ Lily_lexer::push_markup_state () 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_); @@ -924,10 +890,6 @@ Lily_lexer::pop_state () if (YYSTATE != maininput) yy_pop_state (); - if (extra) { - hidden_state_ = YYSTATE; - yy_push_state (extratoken); - } } int @@ -954,7 +916,7 @@ Lily_lexer::scan_escaped_word (const string &str) 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) @@ -974,7 +936,7 @@ Lily_lexer::scan_shorthand (const string &str) 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) @@ -1013,7 +975,7 @@ Lily_lexer::scan_scm_id (SCM sid) 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; @@ -1026,14 +988,14 @@ Lily_lexer::scan_scm_id (SCM sid) } 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; } @@ -1071,10 +1033,7 @@ Lily_lexer::scan_bare_word (const string &str) int Lily_lexer::get_state () const { - if (YY_START == extratoken) - return hidden_state_; - else - return YY_START; + return YY_START; } bool @@ -1109,14 +1068,14 @@ Lily_lexer::is_figure_state () const // 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_); } @@ -1140,7 +1099,7 @@ Lily_lexer::eval_scm (SCM readerdata, char extra_token) 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; @@ -1148,10 +1107,12 @@ Lily_lexer::eval_scm (SCM readerdata, char extra_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; } } @@ -1163,7 +1124,7 @@ Lily_lexer::eval_scm (SCM readerdata, char extra_token) 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; diff --git a/lily/ligature-bracket-engraver.cc b/lily/ligature-bracket-engraver.cc index 7453c05840..cb37ead208 100644 --- a/lily/ligature-bracket-engraver.cc +++ b/lily/ligature-bracket-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Juergen Reuter + Copyright (C) 2002--2014 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 diff --git a/lily/ligature-engraver.cc b/lily/ligature-engraver.cc index 297337a976..8bd4d66137 100644 --- a/lily/ligature-engraver.cc +++ b/lily/ligature-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Juergen Reuter + Copyright (C) 2002--2014 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 diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index 06018c4c9c..c37eb33844 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/lily-lexer-scheme.cc b/lily/lily-lexer-scheme.cc index 3cc187d39c..55c637bcb1 100644 --- a/lily/lily-lexer-scheme.cc +++ b/lily/lily-lexer-scheme.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/lily-lexer.cc b/lily/lily-lexer.cc index c72ff8fc12..d2d57fdbd7 100644 --- a/lily/lily-lexer.cc +++ b/lily/lily-lexer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/lily-parser-scheme.cc b/lily/lily-parser-scheme.cc index 74d3feb653..0da04c9296 100644 --- a/lily/lily-parser-scheme.cc +++ b/lily/lily-parser-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/lily-parser.cc b/lily/lily-parser.cc index cd7819e9c8..a82ec94bed 100644 --- a/lily/lily-parser.cc +++ b/lily/lily-parser.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -44,6 +44,7 @@ Lily_parser::Lily_parser (Sources *sources) lexer_ = 0; sources_ = sources; default_duration_ = Duration (2, 0); + default_tremolo_type_ = 8; error_level_ = 0; closures_ = SCM_EOL; @@ -58,6 +59,7 @@ Lily_parser::Lily_parser (Lily_parser const &src, SCM closures, SCM location) 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; @@ -167,7 +169,7 @@ Lily_parser::parse_string_expression (const string &ly_code, const string &filen 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); @@ -195,12 +197,6 @@ Lily_parser::clear () lexer_ = 0; } -char const * -Lily_parser::here_str0 () const -{ - return lexer_->here_str0 (); -} - void Lily_parser::parser_error (const string &s) { diff --git a/lily/lily-version.cc b/lily/lily-version.cc index 99e9b7df4c..ef27bc3626 100644 --- a/lily/lily-version.cc +++ b/lily/lily-version.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Jan Nieuwenhuizen + Copyright (C) 1999--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/lilypond-version.cc b/lily/lilypond-version.cc index 9c6d2130a3..fd76deec67 100644 --- a/lily/lilypond-version.cc +++ b/lily/lilypond-version.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/lilypond.rc.in b/lily/lilypond.rc.in index 4045c65a29..e09242da2f 100644 --- a/lily/lilypond.rc.in +++ b/lily/lilypond.rc.in @@ -20,7 +20,7 @@ VS_VERSION_INFO VERSIONINFO 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@" diff --git a/lily/line-interface.cc b/lily/line-interface.cc index bc6099916a..1e2dd53c6b 100644 --- a/lily/line-interface.cc +++ b/lily/line-interface.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/line-spanner.cc b/lily/line-spanner.cc index 6c5e627442..2c7cfdda1d 100644 --- a/lily/line-spanner.cc +++ b/lily/line-spanner.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen + Copyright (C) 2000--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/lookup.cc b/lily/lookup.cc index e903d5a9a4..344d42c906 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen diff --git a/lily/ly-module.cc b/lily/ly-module.cc index 51e473b68d..8023947c1e 100644 --- a/lily/ly-module.cc +++ b/lily/ly-module.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/lyric-combine-music-iterator.cc b/lily/lyric-combine-music-iterator.cc index 3c47335b35..f81cb0a535 100644 --- a/lily/lyric-combine-music-iterator.cc +++ b/lily/lyric-combine-music-iterator.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/lyric-combine-music.cc b/lily/lyric-combine-music.cc index 0110645667..ec254e755a 100644 --- a/lily/lyric-combine-music.cc +++ b/lily/lyric-combine-music.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc index e4b23d1f94..6dce40a464 100644 --- a/lily/lyric-engraver.cc +++ b/lily/lyric-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/lyric-extender.cc b/lily/lyric-extender.cc index f61acbe5fe..1ed47703f8 100644 --- a/lily/lyric-extender.cc +++ b/lily/lyric-extender.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/lyric-hyphen.cc b/lily/lyric-hyphen.cc index 0e3a67e348..33c4d8d3fe 100644 --- a/lily/lyric-hyphen.cc +++ b/lily/lyric-hyphen.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2003--2012 Han-Wen Nienhuys + Copyright (C) 2003--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 diff --git a/lily/lyric-performer.cc b/lily/lyric-performer.cc index 3fd9900e7e..9c24d2e9e2 100644 --- a/lily/lyric-performer.cc +++ b/lily/lyric-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/main.cc b/lily/main.cc index 5ac75067a0..7fb2f32457 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -258,7 +258,7 @@ copyright () */ { /* 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"); } diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc index 25b19bd18a..465e140e2d 100644 --- a/lily/mark-engraver.cc +++ b/lily/mark-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/measure-grouping-engraver.cc b/lily/measure-grouping-engraver.cc index 526091944b..758ce5f174 100644 --- a/lily/measure-grouping-engraver.cc +++ b/lily/measure-grouping-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/measure-grouping-spanner.cc b/lily/measure-grouping-spanner.cc index e668f57beb..ca982760e2 100644 --- a/lily/measure-grouping-spanner.cc +++ b/lily/measure-grouping-spanner.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/melody-engraver.cc b/lily/melody-engraver.cc index c6ab972c74..c60b0a5041 100644 --- a/lily/melody-engraver.cc +++ b/lily/melody-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/melody-spanner.cc b/lily/melody-spanner.cc index 4fdaa4eb55..7ee731a9bc 100644 --- a/lily/melody-spanner.cc +++ b/lily/melody-spanner.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/mensural-ligature-engraver.cc b/lily/mensural-ligature-engraver.cc index 8f70fa4e48..ab7e7d81d6 100644 --- a/lily/mensural-ligature-engraver.cc +++ b/lily/mensural-ligature-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Juergen Reuter , + Copyright (C) 2002--2014 Juergen Reuter , Pal Benko LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/mensural-ligature.cc b/lily/mensural-ligature.cc index 3bffcb841c..2c1059eb87 100644 --- a/lily/mensural-ligature.cc +++ b/lily/mensural-ligature.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Juergen Reuter , + Copyright (C) 2002--2014 Juergen Reuter , Pal Benko LilyPond is free software: you can redistribute it and/or modify @@ -168,7 +168,7 @@ internal_brew_primitive (Grob *me) 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); diff --git a/lily/metronome-engraver.cc b/lily/metronome-engraver.cc index b4cd2ce328..7c0856e654 100644 --- a/lily/metronome-engraver.cc +++ b/lily/metronome-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/midi-chunk.cc b/lily/midi-chunk.cc index f98c76373e..c9e6dc77ed 100644 --- a/lily/midi-chunk.cc +++ b/lily/midi-chunk.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Han-Wen Nienhuys + Copyright (C) 2007--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/midi-control-function-performer.cc b/lily/midi-control-function-performer.cc index ff0855d15c..36f2163776 100644 --- a/lily/midi-control-function-performer.cc +++ b/lily/midi-control-function-performer.cc @@ -1,9 +1,9 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2013 by Heikki Tauriainen . + Copyright (C) 2013--2014 by Heikki Tauriainen . Adapted from performer implementations - Copyright (C) 1996--2012 Jan Nieuwenhuizen , + Copyright (C) 1996--2014 Jan Nieuwenhuizen , Han-Wen Nienhyus and others. LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/midi-item.cc b/lily/midi-item.cc index 54d00ff683..4909217c43 100644 --- a/lily/midi-item.cc +++ b/lily/midi-item.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -193,8 +193,10 @@ Midi_time_signature::to_string () const 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))) { } diff --git a/lily/midi-stream.cc b/lily/midi-stream.cc index 289bb1494a..9c059a0681 100644 --- a/lily/midi-stream.cc +++ b/lily/midi-stream.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/midi-walker.cc b/lily/midi-walker.cc index b97630b0d1..20d3252aba 100644 --- a/lily/midi-walker.cc +++ b/lily/midi-walker.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -52,13 +52,15 @@ audio_item_less (Audio_item *const a, return a->get_column ()->when_ < b->get_column ()->when_; } -Midi_walker::Midi_walker (Audio_staff *audio_staff, Midi_track *track) +Midi_walker::Midi_walker (Audio_staff *audio_staff, Midi_track *track, int start_tick) { track_ = track; index_ = 0; items_ = audio_staff->audio_items_; vector_sort (items_, audio_item_less); - last_tick_ = 0; + //Scores that begin with grace notes start at negative times. This + //is OK - MIDI output doesn't use absolute ticks, only differences. + last_tick_ = start_tick; percussion_ = audio_staff->percussion_; merge_unisons_ = audio_staff->merge_unisons_; } diff --git a/lily/minimal-page-breaking.cc b/lily/minimal-page-breaking.cc index 7ff43755b1..8f065632dd 100644 --- a/lily/minimal-page-breaking.cc +++ b/lily/minimal-page-breaking.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Nicolas Sceaux + Copyright (C) 2007--2014 Nicolas Sceaux LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/misc.cc b/lily/misc.cc index 58d0a6e9d3..6021380023 100644 --- a/lily/misc.cc +++ b/lily/misc.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -30,7 +30,8 @@ int intlog2 (int d) { - assert (d); + if (d <= 0) + error ("intlog2 with negative argument: " + ::to_string (d)); int i = 0; while ((d != 1)) { diff --git a/lily/modified-font-metric.cc b/lily/modified-font-metric.cc index 1657cf5a9e..53ccefa299 100644 --- a/lily/modified-font-metric.cc +++ b/lily/modified-font-metric.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/module-scheme.cc b/lily/module-scheme.cc index 0da0445c9c..58fc141f38 100644 --- a/lily/module-scheme.cc +++ b/lily/module-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/moment-scheme.cc b/lily/moment-scheme.cc index e7ed72f093..c0422b4360 100644 --- a/lily/moment-scheme.cc +++ b/lily/moment-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/moment.cc b/lily/moment.cc index df1a405779..e1e3478c6e 100644 --- a/lily/moment.cc +++ b/lily/moment.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index 7fede1a3e7..9f460dd981 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc index e823c298e3..e425788655 100644 --- a/lily/multi-measure-rest.cc +++ b/lily/multi-measure-rest.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/music-function.cc b/lily/music-function.cc index f206b6b382..65fedab7dd 100644 --- a/lily/music-function.cc +++ b/lily/music-function.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/music-iterator.cc b/lily/music-iterator.cc index c076b7ad65..f6367db129 100644 --- a/lily/music-iterator.cc +++ b/lily/music-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -207,8 +207,11 @@ Music_iterator::mark_smob (SCM smob) 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 ()); diff --git a/lily/music-output.cc b/lily/music-output.cc index dfb8b4e46b..438cddaaa9 100644 --- a/lily/music-output.cc +++ b/lily/music-output.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/music-scheme.cc b/lily/music-scheme.cc index dc2d9a6aa2..ffd3f35a0f 100644 --- a/lily/music-scheme.cc +++ b/lily/music-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 @@ -101,13 +101,15 @@ LY_DEFINE (ly_music_list_p, "ly:music-list?", 1, 0, 0, (SCM lst), "Is @var{lst} a list of music objects?") { - if (scm_list_p (lst) == SCM_BOOL_T) - while (scm_is_pair (lst)) - { - if (!unsmob_music (scm_car (lst))) - return SCM_BOOL_F; - lst = scm_cdr (lst); - } + if (!ly_is_list (lst)) + return SCM_BOOL_F; + + while (scm_is_pair (lst)) + { + if (!unsmob_music (scm_car (lst))) + return SCM_BOOL_F; + lst = scm_cdr (lst); + } return SCM_BOOL_T; } diff --git a/lily/music-sequence.cc b/lily/music-sequence.cc index b40597df24..fea62f89d6 100644 --- a/lily/music-sequence.cc +++ b/lily/music-sequence.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/music-wrapper-iterator.cc b/lily/music-wrapper-iterator.cc index e208d135f5..d46415869c 100644 --- a/lily/music-wrapper-iterator.cc +++ b/lily/music-wrapper-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 @@ -79,6 +79,22 @@ Music_wrapper_iterator::pending_moment () const 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 diff --git a/lily/music-wrapper.cc b/lily/music-wrapper.cc index 5dbc265b00..babec206b7 100644 --- a/lily/music-wrapper.cc +++ b/lily/music-wrapper.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/music.cc b/lily/music.cc index eea6a9ca81..351051e6a6 100644 --- a/lily/music.cc +++ b/lily/music.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -211,20 +211,6 @@ transpose_mutable (SCM alist, Pitch delta) 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 (), diff --git a/lily/new-fingering-engraver.cc b/lily/new-fingering-engraver.cc index a605f0f4ae..51eb26c6d2 100644 --- a/lily/new-fingering-engraver.cc +++ b/lily/new-fingering-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/note-collision.cc b/lily/note-collision.cc index aad09a95a9..1430463ab9 100644 --- a/lily/note-collision.cc +++ b/lily/note-collision.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/note-column-scheme.cc b/lily/note-column-scheme.cc index d828d36f5c..a20d886cb2 100644 --- a/lily/note-column-scheme.cc +++ b/lily/note-column-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2010--2012 Nicolas Sceaux + Copyright (C) 2010--2014 Nicolas Sceaux LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/note-column.cc b/lily/note-column.cc index 42bd9b484c..867542bdbd 100644 --- a/lily/note-column.cc +++ b/lily/note-column.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/note-head-line-engraver.cc b/lily/note-head-line-engraver.cc index f4794474ab..ba0c65d71d 100644 --- a/lily/note-head-line-engraver.cc +++ b/lily/note-head-line-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen + Copyright (C) 2000--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/note-head-scheme.cc b/lily/note-head-scheme.cc index ef6770888a..f1505358e5 100644 --- a/lily/note-head-scheme.cc +++ b/lily/note-head-scheme.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/note-head.cc b/lily/note-head.cc index 4bf8168eb1..80624c40a8 100644 --- a/lily/note-head.cc +++ b/lily/note-head.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -38,7 +38,7 @@ internal_print (Grob *me, string *font_char) { 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"), ""); diff --git a/lily/note-heads-engraver.cc b/lily/note-heads-engraver.cc index 436861c0ae..5caf42f221 100644 --- a/lily/note-heads-engraver.cc +++ b/lily/note-heads-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/note-name-engraver.cc b/lily/note-name-engraver.cc index c96b3776c0..cd9676a428 100644 --- a/lily/note-name-engraver.cc +++ b/lily/note-name-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/note-performer.cc b/lily/note-performer.cc index ddf9fe3921..59ac69ac98 100644 --- a/lily/note-performer.cc +++ b/lily/note-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Jan Nieuwenhuizen + Copyright (C) 1996--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -36,6 +36,7 @@ protected: void process_music (); DECLARE_TRANSLATOR_LISTENER (note); + DECLARE_TRANSLATOR_LISTENER (breathing); private: vector note_evs_; vector notes_; @@ -65,9 +66,9 @@ Note_performer::process_music () { 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) @@ -75,19 +76,23 @@ Note_performer::process_music () 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_) { @@ -96,7 +101,11 @@ Note_performer::process_music () 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; } } } @@ -124,6 +133,30 @@ Note_performer::listen_note (Stream_event *ev) 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 */ "", diff --git a/lily/note-spacing-engraver.cc b/lily/note-spacing-engraver.cc index 8cb1b3539d..5accbc5f96 100644 --- a/lily/note-spacing-engraver.cc +++ b/lily/note-spacing-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/note-spacing.cc b/lily/note-spacing.cc index 1d0d21fbbb..a21543ed3d 100644 --- a/lily/note-spacing.cc +++ b/lily/note-spacing.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 @@ -36,13 +36,12 @@ #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 note_columns = Spacing_interface::left_note_columns (me); Real left_head_end = 0; @@ -73,16 +72,12 @@ Note_spacing::get_spacing (Grob *me, Item *right_col, 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 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. */ @@ -95,24 +90,21 @@ Note_spacing::get_spacing (Grob *me, Item *right_col, 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 @@ -206,7 +198,7 @@ same_direction_correction (Grob *note_spacing, Drul_array head_posns) void Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn, Real increment, - Real *space, Real *fixed) + Real *space) { Drul_array stem_dirs (CENTER, CENTER); Drul_array stem_posns; @@ -310,7 +302,6 @@ Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn, && !acc_right) correction = same_direction_correction (me, head_posns); - *fixed += correction; *space += correction; /* there used to be a correction for bar_xextent () here, but diff --git a/lily/open-type-font-scheme.cc b/lily/open-type-font-scheme.cc index 5b43a8d9da..9237923e3e 100644 --- a/lily/open-type-font-scheme.cc +++ b/lily/open-type-font-scheme.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/open-type-font.cc b/lily/open-type-font.cc index 76bbff86ed..49d8fd3177 100644 --- a/lily/open-type-font.cc +++ b/lily/open-type-font.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/optimal-page-breaking.cc b/lily/optimal-page-breaking.cc index 3bddcad4ba..5ad4daf9bf 100644 --- a/lily/optimal-page-breaking.cc +++ b/lily/optimal-page-breaking.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -75,7 +75,9 @@ Optimal_page_breaking::solve () 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 diff --git a/lily/ottava-bracket.cc b/lily/ottava-bracket.cc index f70a30b404..0639fee719 100644 --- a/lily/ottava-bracket.cc +++ b/lily/ottava-bracket.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/ottava-engraver.cc b/lily/ottava-engraver.cc index bd39702bdb..6296e8c8a2 100644 --- a/lily/ottava-engraver.cc +++ b/lily/ottava-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/output-def-scheme.cc b/lily/output-def-scheme.cc index a2e1e34513..91a3adfb2d 100644 --- a/lily/output-def-scheme.cc +++ b/lily/output-def-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/output-def.cc b/lily/output-def.cc index addb0ef1ef..898d1b102e 100644 --- a/lily/output-def.cc +++ b/lily/output-def.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/output-property-engraver.cc b/lily/output-property-engraver.cc index 78901a2157..2dc50c72e9 100644 --- a/lily/output-property-engraver.cc +++ b/lily/output-property-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/page-breaking-scheme.cc b/lily/page-breaking-scheme.cc index 12929e510d..8f66a57677 100644 --- a/lily/page-breaking-scheme.cc +++ b/lily/page-breaking-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/page-breaking.cc b/lily/page-breaking.cc index 9a6f8f40f2..29a7f27b5b 100644 --- a/lily/page-breaking.cc +++ b/lily/page-breaking.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -195,7 +195,6 @@ compress_lines (const vector &orig) else { ret.push_back (orig[i]); - ret.back ().force_ = 0; } } return ret; @@ -632,7 +631,11 @@ Page_breaking::make_pages (vector lines_per_page, SCM systems) 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; @@ -1169,9 +1172,8 @@ Page_breaking::min_page_count (vsize configuration, vsize first_page_num) 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++; @@ -1437,7 +1439,9 @@ Page_breaking::finalize_spacing_result (vsize configuration, Page_spacing_result 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]; @@ -1545,9 +1549,11 @@ Page_breaking::space_systems_on_2_pages (vsize configuration, vsize first_page_n 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); diff --git a/lily/page-layout-problem-scheme.cc b/lily/page-layout-problem-scheme.cc index 19be67cd2e..9a7c8a416d 100644 --- a/lily/page-layout-problem-scheme.cc +++ b/lily/page-layout-problem-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Joe Neeman + Copyright (C) 2011--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/page-layout-problem.cc b/lily/page-layout-problem.cc index 5885a66135..52720d5449 100644 --- a/lily/page-layout-problem.cc +++ b/lily/page-layout-problem.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2009--2012 Joe Neeman + Copyright (C) 2009--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -728,12 +728,12 @@ Page_layout_problem::solve_rod_spring_problem (bool ragged, Real fixed_force) 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++) diff --git a/lily/page-marker-scheme.cc b/lily/page-marker-scheme.cc index 819fcca894..e5537e46db 100644 --- a/lily/page-marker-scheme.cc +++ b/lily/page-marker-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Nicolas Sceaux + Copyright (C) 2007--2014 Nicolas Sceaux LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/page-marker.cc b/lily/page-marker.cc index adf623ffd0..aa66ee31ea 100644 --- a/lily/page-marker.cc +++ b/lily/page-marker.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Nicolas Sceaux + Copyright (C) 2007--2014 Nicolas Sceaux LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/page-spacing-result.cc b/lily/page-spacing-result.cc index 9d545e33e8..90608cf63a 100644 --- a/lily/page-spacing-result.cc +++ b/lily/page-spacing-result.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Han-Wen Nienhuys + Copyright (C) 2007--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/page-spacing.cc b/lily/page-spacing.cc index a705827d22..2c8a88a64b 100644 --- a/lily/page-spacing.cc +++ b/lily/page-spacing.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -329,7 +329,7 @@ Page_spacer::calc_subproblem (vsize page, vsize line) 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 diff --git a/lily/page-turn-engraver.cc b/lily/page-turn-engraver.cc index d7c7ccec32..d9c1bd12fa 100644 --- a/lily/page-turn-engraver.cc +++ b/lily/page-turn-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/page-turn-page-breaking.cc b/lily/page-turn-page-breaking.cc index 2055214c82..9008def09a 100644 --- a/lily/page-turn-page-breaking.cc +++ b/lily/page-turn-page-breaking.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -232,7 +232,7 @@ Page_turn_page_breaking::solve () 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"); diff --git a/lily/pango-font-scheme.cc b/lily/pango-font-scheme.cc index 5b43792ff5..0d997b61dd 100644 --- a/lily/pango-font-scheme.cc +++ b/lily/pango-font-scheme.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/pango-font.cc b/lily/pango-font.cc index e7b5489df5..8fe5da409e 100644 --- a/lily/pango-font.cc +++ b/lily/pango-font.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/pango-select-scheme.cc b/lily/pango-select-scheme.cc index 1e7605d2c0..f4bb158b87 100644 --- a/lily/pango-select-scheme.cc +++ b/lily/pango-select-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/pango-select.cc b/lily/pango-select.cc index 082bcd8243..cbca39c230 100644 --- a/lily/pango-select.cc +++ b/lily/pango-select.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/paper-book-scheme.cc b/lily/paper-book-scheme.cc index 2bfdc79988..9b3d1a45dd 100644 --- a/lily/paper-book-scheme.cc +++ b/lily/paper-book-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/paper-book.cc b/lily/paper-book.cc index aecafbe3a0..9035d355a2 100644 --- a/lily/paper-book.cc +++ b/lily/paper-book.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2004--2012 Jan Nieuwenhuizen + Copyright (C) 2004--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/paper-column-engraver.cc b/lily/paper-column-engraver.cc index cdbb2e8b00..0620bafdbd 100644 --- a/lily/paper-column-engraver.cc +++ b/lily/paper-column-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 @@ -50,7 +50,7 @@ void Paper_column_engraver::finalize () { if (! (breaks_ % 8)) - progress_indication ("[" + to_string (breaks_) + "]"); + progress_indication ("[" + ::to_string (breaks_) + "]"); if (!made_columns_) { @@ -269,7 +269,7 @@ Paper_column_engraver::stop_translation_timestep () breaks_++; if (! (breaks_ % 8)) - progress_indication ("[" + to_string (breaks_) + "]"); + progress_indication ("[" + ::to_string (breaks_) + "]"); } context ()->get_score_context ()->unset_property (ly_symbol2scm ("forbidBreak")); diff --git a/lily/paper-column.cc b/lily/paper-column.cc index d586058fa0..d5ac33b55a 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -237,7 +237,7 @@ Paper_column::print (SCM p) { Paper_column *me = dynamic_cast (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 () : "?/?"; diff --git a/lily/paper-def.cc b/lily/paper-def.cc index 4c6dc86ebe..d3526bbfce 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/paper-outputter-scheme.cc b/lily/paper-outputter-scheme.cc index 0e13e1d203..0d6f11de6b 100644 --- a/lily/paper-outputter-scheme.cc +++ b/lily/paper-outputter-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index 34110554dc..6dff324243 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/paper-score-scheme.cc b/lily/paper-score-scheme.cc index d303b9c24f..372cd863d8 100644 --- a/lily/paper-score-scheme.cc +++ b/lily/paper-score-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/paper-score.cc b/lily/paper-score.cc index 65ac88333d..de4c9fb50e 100644 --- a/lily/paper-score.cc +++ b/lily/paper-score.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/paper-system-scheme.cc b/lily/paper-system-scheme.cc index 8732dfeda6..b20609a40d 100644 --- a/lily/paper-system-scheme.cc +++ b/lily/paper-system-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2008--2012 Han-Wen Nienhuys + Copyright (C) 2008--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/paper-system.cc b/lily/paper-system.cc index 909d40479d..bdd38e4181 100644 --- a/lily/paper-system.cc +++ b/lily/paper-system.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2004--2012 Jan Nieuwenhuizen + Copyright (C) 2004--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/parenthesis-engraver.cc b/lily/parenthesis-engraver.cc index 5422d1d441..d021be9be4 100644 --- a/lily/parenthesis-engraver.cc +++ b/lily/parenthesis-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/parse-scm.cc b/lily/parse-scm.cc index 44b99db2ad..a8505fdec6 100644 --- a/lily/parse-scm.cc +++ b/lily/parse-scm.cc @@ -1,7 +1,7 @@ /* 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 @@ -36,16 +36,17 @@ using namespace std; 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 ('@')); @@ -55,7 +56,9 @@ internal_ly_parse_scm (Parse_start *ps) 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)) { @@ -71,7 +74,7 @@ internal_ly_parse_scm (Parse_start *ps) 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 @@ -108,24 +111,25 @@ internal_ly_eval_scm (Parse_start *ps) SCM catch_protected_parse_body (void *p) { - Parse_start *ps = (Parse_start *) p; + return internal_ly_parse_scm (static_cast (p)); +} - return (*ps->func_) (ps); +SCM +catch_protected_eval_body (void *p) +{ + return internal_ly_eval_scm (static_cast (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; } @@ -136,7 +140,19 @@ protected_ly_parse_scm (Parse_start *ps) 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); } @@ -147,19 +163,12 @@ bool parsed_objects_should_be_dead = false; /* 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; } @@ -167,15 +176,9 @@ ly_parse_scm (char const *s, int *n, Input i, bool safe, Lily_parser *parser) 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; diff --git a/lily/parser.yy b/lily/parser.yy index ab09f537b2..0c814a13dd 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -2,7 +2,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -37,17 +37,17 @@ #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) %} @@ -62,7 +62,7 @@ deleting them. Let's hope that a stack overflow doesn't trigger a move 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 @@ -81,7 +81,7 @@ or %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 @@ -146,32 +146,36 @@ Lily_parser::parser_error (Input const *i, Lily_parser *parser, SCM *, const str 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) %} @@ -269,6 +273,7 @@ int yylex (YYSTYPE *s, YYLTYPE *loc, Lily_parser *parser); %token REST "\\rest" %token REVERT "\\revert" %token SCORE "\\score" +%token SCORELINES "\\score-lines" %token SEQUENTIAL "\\sequential" %token SET "\\set" %token SIMULTANEOUS "\\simultaneous" @@ -325,10 +330,8 @@ If we give names, Bison complains. %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 @@ -345,9 +348,7 @@ If we give names, Bison complains. %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 @@ -405,6 +406,13 @@ toplevel_expression: 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); @@ -423,7 +431,7 @@ toplevel_expression: } | 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 { @@ -436,6 +444,21 @@ toplevel_expression: { SCM proc = parser->lexer_->lookup_identifier ("toplevel-text-handler"); scm_call_2 (proc, parser->self_scm (), out); + } else if (unsmob_score ($1)) + { + SCM proc = parser->lexer_->lookup_identifier ("toplevel-score-handler"); + scm_call_2 (proc, parser->self_scm (), $1); + } else if (Output_def * od = unsmob_output_def ($1)) { + SCM id = SCM_EOL; + + if (od->c_variable ("is-paper") == SCM_BOOL_T) + id = ly_symbol2scm ("$defaultpaper"); + else if (od->c_variable ("is-midi") == SCM_BOOL_T) + id = ly_symbol2scm ("$defaultmidi"); + else if (od->c_variable ("is-layout") == SCM_BOOL_T) + id = ly_symbol2scm ("$defaultlayout"); + + parser->lexer_->set_identifier (id, $1); } else if (!scm_is_eq ($1, SCM_UNSPECIFIED)) parser->parser_error (@1, _("bad expression type")); } @@ -457,7 +480,7 @@ toplevel_expression: embedded_scm_bare: SCM_TOKEN { - $$ = parser->lexer_->eval_scm_token ($1); + $$ = parser->lexer_->eval_scm_token ($1, @1); } | SCM_IDENTIFIER ; @@ -471,8 +494,9 @@ embedded_scm_bare_arg: 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 @@ -511,6 +535,18 @@ scm_function_call: } ; +embedded_lilypond_number: + '-' embedded_lilypond_number + { + $$ = scm_difference ($2, SCM_UNDEFINED); + } + | bare_number_common + | UNSIGNED NUMBER_IDENTIFIER + { + $$ = scm_product ($1, $2); + } + ; + embedded_lilypond: /* empty */ { @@ -520,7 +556,31 @@ embedded_lilypond: // 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)) @@ -573,16 +633,17 @@ assignment: 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); @@ -605,7 +666,16 @@ identifier_init: $$ = 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 @@ -615,9 +685,14 @@ identifier_init: 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 (@$); } ; @@ -635,47 +710,54 @@ context_mod_arg: } ; -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")); + } } ; @@ -733,7 +815,7 @@ book_body: } | 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 { @@ -746,6 +828,21 @@ book_body: { SCM proc = parser->lexer_->lookup_identifier ("book-text-handler"); scm_call_2 (proc, $1, out); + } else if (unsmob_score ($2)) + { + SCM proc = parser->lexer_->lookup_identifier ("book-score-handler"); + scm_call_2 (proc, $1, $2); + } else if (Output_def *od = unsmob_output_def ($2)) { + SCM id = SCM_EOL; + + if (od->c_variable ("is-paper") == SCM_BOOL_T) + id = ly_symbol2scm ("$defaultpaper"); + else if (od->c_variable ("is-midi") == SCM_BOOL_T) + id = ly_symbol2scm ("$defaultmidi"); + else if (od->c_variable ("is-layout") == SCM_BOOL_T) + id = ly_symbol2scm ("$defaultlayout"); + + parser->lexer_->set_identifier (id, $2); } else if (!scm_is_eq ($2, SCM_UNSPECIFIED)) parser->parser_error (@2, _("bad expression type")); } @@ -799,7 +896,7 @@ bookpart_body: } | 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 { @@ -812,6 +909,21 @@ bookpart_body: { SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler"); scm_call_2 (proc, $1, out); + } else if (unsmob_score ($2)) + { + SCM proc = parser->lexer_->lookup_identifier ("bookpart-score-handler"); + scm_call_2 (proc, $1, $2); + } else if (Output_def *od = unsmob_output_def ($2)) { + SCM id = SCM_EOL; + + if (od->c_variable ("is-paper") == SCM_BOOL_T) + id = ly_symbol2scm ("$defaultpaper"); + else if (od->c_variable ("is-midi") == SCM_BOOL_T) + id = ly_symbol2scm ("$defaultmidi"); + else if (od->c_variable ("is-layout") == SCM_BOOL_T) + id = ly_symbol2scm ("$defaultlayout"); + + parser->lexer_->set_identifier (id, $2); } else if (!scm_is_eq ($2, SCM_UNSPECIFIED)) parser->parser_error (@2, _("bad expression type")); } @@ -831,49 +943,103 @@ bookpart_body: score_block: SCORE '{' score_body '}' { + unsmob_score ($3)->origin ()->set_spot (@$); $$ = $3; } ; score_body: - music { - SCM scorify = ly_lily_module_constant ("scorify-music"); - $$ = scm_call_2 (scorify, $1, parser->self_scm ()); - - unsmob_score ($$)->origin ()->set_spot (@$); - } - | embedded_scm_active { - Score *score; - if (unsmob_score ($1)) - score = new Score (*unsmob_score ($1)); - else { - score = new Score; - parser->parser_error (@1, _("score expected")); + score_items { + if (!unsmob_score ($1)) { + parser->parser_error (@1, _("Missing music in \\score")); + $$ = (new Score)->unprotect (); + if (scm_is_pair ($1) && ly_is_module (scm_car ($1))) + { + unsmob_score ($$)->set_header (scm_car ($1)); + $1 = scm_cdr ($1); + } + for (SCM p = scm_reverse_x ($1, SCM_EOL); + scm_is_pair (p); p = scm_cdr (p)) + { + unsmob_score ($$)-> + add_output_def (unsmob_output_def (scm_car (p))); + } } - unsmob_score ($$)->origin ()->set_spot (@$); - $$ = score->unprotect (); } - | score_body - { - Score *score = unsmob_score ($1); - if (!ly_is_module (score->get_header ())) - score->set_header (ly_make_module (false)); - parser->lexer_->add_scope (score->get_header ()); - } lilypond_header - | score_body output_def { - Output_def *od = unsmob_output_def ($2); - if (od->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T) - { - parser->parser_error (@2, _("\\paper cannot be used in \\score, use \\layout instead")); + | score_body error { + unsmob_score ($$)->error_found_ = true; + } + ; +score_item: + embedded_scm + | music + | output_def + ; + +score_items: + /* empty */ + { + $$ = SCM_EOL; + } + | score_items score_item + { + Output_def *od = unsmob_output_def ($2); + if (od) { + if (od->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T) + { + parser->parser_error (@2, _("\\paper cannot be used in \\score, use \\layout instead")); + od = 0; + $2 = SCM_UNSPECIFIED; + } + } else if (!unsmob_score ($$)) { + if (unsmob_music ($2)) { + SCM scorify = ly_lily_module_constant ("scorify-music"); + $2 = scm_call_2 (scorify, $2, parser->self_scm ()); + } + if (unsmob_score ($2)) + { + $$ = $2; + $2 = SCM_UNSPECIFIED; + } } - else - { - unsmob_score ($1)->add_output_def (od); + Score *score = unsmob_score ($$); + if (score && scm_is_pair ($1)) { + if (ly_is_module (scm_car ($1))) + { + score->set_header (scm_car ($1)); + $1 = scm_cdr ($1); + } + for (SCM p = scm_reverse_x ($1, SCM_EOL); + scm_is_pair (p); p = scm_cdr (p)) + { + score->add_output_def (unsmob_output_def (scm_car (p))); + } } + if (od) { + if (score) + score->add_output_def (od); + else if (scm_is_pair ($$) && ly_is_module (scm_car ($$))) + scm_set_cdr_x ($$, scm_cons ($2, scm_cdr ($$))); + else + $$ = scm_cons ($2, $$); + } else if (!scm_is_eq ($2, SCM_UNSPECIFIED)) + parser->parser_error (@2, _("Spurious expression in \\score")); } - | score_body error { - unsmob_score ($$)->error_found_ = true; + | score_items + { + if (Score *score = unsmob_score ($1)) { + if (!ly_is_module (score->get_header ())) + score->set_header (ly_make_module (false)); + parser->lexer_->add_scope (score->get_header ()); + } else { + if (!scm_is_pair ($1) || !ly_is_module (scm_car ($1))) + $1 = scm_cons (ly_make_module (false), $1); + parser->lexer_->add_scope (scm_car ($1)); + } + } lilypond_header + { + $$ = $1; } ; @@ -897,7 +1063,8 @@ paper_block: output_def: output_def_body '}' { - $$ = $1; + if (scm_is_pair ($1)) + $$ = scm_car ($1); parser->lexer_->remove_scope (); parser->lexer_->pop_state (); @@ -937,30 +1104,62 @@ output_def_head_with_mode_switch: // 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 @@ -975,6 +1174,7 @@ output_def_body: scm_call_3 (proc, parser->self_scm (), $1, $3); } + $$ = $1; } | output_def_body error { @@ -1020,8 +1220,17 @@ braced_music_list: } ; -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: @@ -1040,6 +1249,18 @@ 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: @@ -1064,19 +1285,8 @@ 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 @@ -1087,20 +1297,10 @@ repeated_music: { $$ = 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: @@ -1161,7 +1361,7 @@ context_modification: ; context_modification_arg: - embedded_scm_closed + embedded_scm | MUSIC_IDENTIFIER ; @@ -1188,9 +1388,19 @@ context_mod_list: 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")); + } } ; @@ -1199,16 +1409,6 @@ composite_music: | 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 @@ -1248,13 +1448,6 @@ grouped_music_list: * 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 @@ -1280,71 +1473,6 @@ grouped_music_list: * */ -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 @@ -1384,8 +1512,35 @@ symbol_list_element: 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))) @@ -1400,6 +1555,16 @@ function_arglist_nonbackup: { $$ = 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); @@ -1440,6 +1605,28 @@ function_arglist_nonbackup_reparse: 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; @@ -1490,55 +1677,65 @@ function_arglist_nonbackup_reparse: ; +// 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 @@ -1589,16 +1786,6 @@ function_arglist_backup_common: 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); @@ -1614,10 +1801,9 @@ function_arglist_backup_common: else { $$ = scm_cons (loc_on_music (@3, $1), $3); MYBACKUP (UNSIGNED, $5, @5); - parser->lexer_->push_extra_token ('-'); + parser->lexer_->push_extra_token (@4, '-'); } } - } | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup '-' REAL { @@ -1640,38 +1826,6 @@ function_arglist_backup_common: 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))) @@ -1713,7 +1867,7 @@ function_arglist_backup_common: 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); @@ -1774,11 +1928,6 @@ function_arglist_common: $$ = 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, @@ -1799,6 +1948,16 @@ function_arglist_common: $$ = 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, @@ -1834,6 +1993,28 @@ function_arglist_common_reparse: // 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; @@ -1899,7 +2080,6 @@ function_arglist_common_reparse: else MYREPARSE (@4, $1, SCM_ARG, $4); } - } | EXPECT_SCM function_arglist_optional '-' REAL { @@ -1909,60 +2089,6 @@ function_arglist_common_reparse: } ; -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 @@ -1980,24 +2106,6 @@ function_arglist_skip_backup: } ; -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", @$, @@ -2013,6 +2121,23 @@ optional_id: } ; +// 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; } @@ -2125,20 +2250,11 @@ mode_changing_head_with_context: ; 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); } ; @@ -2146,17 +2262,14 @@ re_rhythmed_music: 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); } ; @@ -2244,7 +2357,7 @@ revert_arg_part: | revert_arg_backup BACKUP SCM_ARG symbol_list_part { $$ = scm_append_x (scm_list_2 ($4, $3)); - } + } ; context_def_mod: @@ -2402,10 +2515,10 @@ simple_revert_context: (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)); } } @@ -2463,6 +2576,7 @@ symbol: scalar: embedded_scm_arg + | pitch_or_music | SCM_IDENTIFIER | bare_number // The following is a rather defensive variant of admitting @@ -2476,35 +2590,17 @@ scalar: { $$ = 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); @@ -2517,7 +2613,7 @@ event_chord: $$ = MAKE_SYNTAX ("multi-measure-rest", i, $2, scm_reverse_x ($3, SCM_EOL)); } %prec ':' - | command_element + | tempo_event | note_chord_element ; @@ -2545,7 +2641,10 @@ chord_body: { $$ = MAKE_SYNTAX ("event-chord", @$, scm_reverse_x ($2, SCM_EOL)); } - | CHORD_BODY_IDENTIFIER + | FIGURE_OPEN figure_list FIGURE_CLOSE + { + $$ = MAKE_SYNTAX ("event-chord", @$, scm_reverse_x ($2, SCM_EOL)); + } ; chord_body_elements: @@ -2612,40 +2711,16 @@ chord_body_element: 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; @@ -2674,7 +2749,7 @@ post_event_nofinger: 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")); @@ -2719,7 +2794,7 @@ post_event_nofinger: { $$ = $2; unsmob_music ($$)->set_property ("direction", scm_from_int (DOWN)); - } + } ; post_event: @@ -2747,7 +2822,7 @@ direction_less_event: a->set_property ("tremolo-type", $1); $$ = a->unprotect (); } - | event_function_event + | event_function_event ; direction_reqd_event: @@ -2756,11 +2831,21 @@ direction_reqd_event: } | script_abbreviation { SCM s = parser->lexer_->lookup_identifier ("dash" + ly_scm2string ($1)); - Music *a = MY_MAKE_MUSIC ("ArticulationEvent", @$); - if (scm_is_string (s)) + if (scm_is_string (s)) { + Music *a = MY_MAKE_MUSIC ("ArticulationEvent", @$); a->set_property ("articulation-type", s); - else parser->parser_error (@1, _ ("expecting string as script definition")); - $$ = a->unprotect (); + $$ = a->unprotect (); + } else { + Music *original = unsmob_music (s); + if (original && original->is_mus_type ("post-event")) { + Music *a = original->clone (); + a->set_spot (parser->lexer_->override_input (@$)); + $$ = a->unprotect (); + } else { + parser->parser_error (@1, _ ("expecting string or post-event as script definition")); + $$ = MY_MAKE_MUSIC ("PostEvents", @$)->unprotect (); + } + } } ; @@ -2824,7 +2909,14 @@ steno_tonic_pitch: 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: @@ -2839,7 +2931,7 @@ 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")) @@ -2960,12 +3052,16 @@ dots: 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); + } } ; @@ -3065,56 +3161,72 @@ figure_list: } ; -figure_spec: - FIGURE_OPEN figure_list FIGURE_CLOSE { - $$ = scm_reverse_x ($2, SCM_EOL); - } - ; - - optional_rest: /**/ { $$ = SCM_BOOL_F; } | REST { $$ = SCM_BOOL_T; } ; -simple_element: - pitch exclamations questions octave_check maybe_notemode_duration optional_rest { +pitch_or_music: + pitch exclamations questions octave_check maybe_notemode_duration optional_rest post_events { if (!parser->lexer_->is_note_state ()) parser->parser_error (@1, _ ("have to be in Note mode for notes")); if (!SCM_UNBNDP ($2) || !SCM_UNBNDP ($3) || scm_is_number ($4) || !SCM_UNBNDP ($5) - || scm_is_true ($6)) + || scm_is_true ($6) + || scm_is_pair ($7)) { Music *n = 0; if (scm_is_true ($6)) n = MY_MAKE_MUSIC ("RestEvent", @$); else n = MY_MAKE_MUSIC ("NoteEvent", @$); - + n->set_property ("pitch", $1); if (SCM_UNBNDP ($5)) n->set_property ("duration", parser->default_duration_.smobbed_copy ()); else n->set_property ("duration", $5); - + if (scm_is_number ($4)) { int q = scm_to_int ($4); n->set_property ("absolute-octave", scm_from_int (q-1)); } - + if (to_boolean ($3)) n->set_property ("cautionary", SCM_BOOL_T); if (to_boolean ($2) || to_boolean ($3)) n->set_property ("force-accidental", SCM_BOOL_T); - + if (scm_is_pair ($7)) + n->set_property ("articulations", + scm_reverse_x ($7, SCM_EOL)); $$ = n->unprotect (); } - } - | DRUM_PITCH optional_notemode_duration { + } %prec ':' + | new_chord post_events { + if (!parser->lexer_->is_chord_state ()) + parser->parser_error (@1, _ ("have to be in Chord mode for chords")); + if (scm_is_pair ($2)) { + if (unsmob_pitch ($1)) + $1 = make_chord_elements (@1, + $1, + parser->default_duration_.smobbed_copy (), + SCM_EOL); + + SCM elts = ly_append2 ($1, scm_reverse_x ($2, SCM_EOL)); + + $$ = MAKE_SYNTAX ("event-chord", @1, elts); + } else if (!unsmob_pitch ($1)) + $$ = MAKE_SYNTAX ("event-chord", @1, $1); + // A mere pitch drops through. + } %prec ':' + ; + +simple_element: + DRUM_PITCH optional_notemode_duration { Music *n = MY_MAKE_MUSIC ("NoteEvent", @$); n->set_property ("duration", $2); n->set_property ("drum-type", $1); @@ -3136,21 +3248,6 @@ simple_element: } ; -simple_chord_elements: - new_chord { - if (!parser->lexer_->is_chord_state ()) - parser->parser_error (@1, _ ("have to be in Chord mode for chords")); - $$ = $1; - } - | figure_spec optional_notemode_duration { - for (SCM s = $1; scm_is_pair (s); s = scm_cdr (s)) - { - unsmob_music (scm_car (s))->set_property ("duration", $2); - } - $$ = $1; - } - ; - lyric_element: full_markup { if (!parser->lexer_->is_lyric_state ()) @@ -3174,9 +3271,13 @@ lyric_element_music: } %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); @@ -3240,10 +3341,10 @@ step_number: ; tempo_range: - UNSIGNED { + unsigned_number { $$ = $1; - } - | UNSIGNED '-' UNSIGNED { + } %prec ':' + | unsigned_number '-' unsigned_number { $$ = scm_cons ($1, $3); } ; @@ -3284,18 +3385,14 @@ number_factor: ; 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 @@ -3304,14 +3401,26 @@ bare_number: } ; -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: @@ -3326,7 +3435,13 @@ 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)) @@ -3355,7 +3470,7 @@ full_markup: ; markup_top: - simple_markup_list { + markup_list { $$ = scm_list_2 (ly_lily_module_constant ("line-markup"), $1); } | markup_head_1_list simple_markup @@ -3381,9 +3496,9 @@ markup_scm: } } BACKUP ; - -simple_markup_list: + +markup_list: markup_composed_list { $$ = $1; } @@ -3401,22 +3516,18 @@ markup_uncomposed_list: { $$ = $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 (); } ; @@ -3439,7 +3550,7 @@ markup_braced_list_body: | 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); } ; @@ -3454,7 +3565,7 @@ markup_command_basic_arguments: 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 { @@ -3488,6 +3599,20 @@ simple_markup: 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)); } @@ -3495,10 +3620,6 @@ simple_markup: { $$ = $2; } - | markup_score - { - $$ = scm_list_2 (ly_lily_module_constant ("score-markup"), $1); - } ; markup: @@ -3550,16 +3671,12 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid) } 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 (); @@ -3574,12 +3691,11 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid) *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; @@ -3736,9 +3852,12 @@ make_music_from_simple (Lily_parser *parser, Input loc, SCM simple) 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; } @@ -3801,6 +3920,9 @@ yylex (YYSTYPE *s, YYLTYPE *loc, Lily_parser *parser) 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 (); } diff --git a/lily/part-combine-engraver.cc b/lily/part-combine-engraver.cc index 6d11c155f8..3fe404ce35 100644 --- a/lily/part-combine-engraver.cc +++ b/lily/part-combine-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen + Copyright (C) 2000--2014 Jan Nieuwenhuizen Han-Wen Nienhuys diff --git a/lily/part-combine-iterator.cc b/lily/part-combine-iterator.cc index 654edc35be..922016b15c 100644 --- a/lily/part-combine-iterator.cc +++ b/lily/part-combine-iterator.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/partial-iterator.cc b/lily/partial-iterator.cc index 7c3b3e965b..9ed7debe2f 100644 --- a/lily/partial-iterator.cc +++ b/lily/partial-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2010--2012 Neil Puttock + Copyright (C) 2010--2014 Neil Puttock LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -38,14 +38,34 @@ Partial_iterator::process (Moment m) if (Duration * dur = unsmob_duration (get_music ()->get_property ("duration"))) { - Context *ctx = get_outlet (); - Moment now = ctx->now_mom (); - if (now.main_part_ > Rational (0)) - get_music ()->origin ()-> - warning (_ ("trying to use \\partial after the start of a piece")); - Moment length = Moment (dur->get_length ()); - now = Moment (0, now.grace_part_); - ctx->set_property ("measurePosition", (now - length).smobbed_copy ()); + // Partial_iterator is an iterator rather than an engraver, so + // the active context it is getting called in does not depend on + // which context definition the engraver might be defined. + // + // Using where_defined to find the context where measurePosition + // should be overwritten does not actually work since the + // Timing_translator does not set measurePosition when + // initializing. + + Context *timing = unsmob_context (scm_call_2 (ly_lily_module_constant ("ly:context-find"), + get_outlet ()->self_scm (), + ly_symbol2scm ("Timing"))); + + if (!timing) + programming_error ("missing Timing in \\partial"); + else + { + Moment mp = robust_scm2moment (timing->get_property ("measurePosition"), + Rational (0)); + + if (get_outlet ()->now_mom () > 0) + mp.main_part_ = measure_length (timing); + else + mp.main_part_ = 0; + + Moment length = Moment (dur->get_length ()); + timing->set_property ("measurePosition", (mp - length).smobbed_copy ()); + } } else programming_error ("invalid duration in \\partial"); diff --git a/lily/pdf-scheme.cc b/lily/pdf-scheme.cc index 544ce97461..2c86056391 100644 --- a/lily/pdf-scheme.cc +++ b/lily/pdf-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Reinhold Kainhofer + Copyright (C) 2011--2014 Reinhold Kainhofer LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/percent-repeat-engraver.cc b/lily/percent-repeat-engraver.cc index a6ef072ea6..008081f138 100644 --- a/lily/percent-repeat-engraver.cc +++ b/lily/percent-repeat-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Han-Wen Nienhuys , Erik Sandberg + Copyright (C) 2000--2014 Han-Wen Nienhuys , Erik Sandberg LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/percent-repeat-item.cc b/lily/percent-repeat-item.cc index 928089af8b..faf14c40f3 100644 --- a/lily/percent-repeat-item.cc +++ b/lily/percent-repeat-item.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 diff --git a/lily/percent-repeat-iterator.cc b/lily/percent-repeat-iterator.cc index dd149049f4..c2779f97e3 100644 --- a/lily/percent-repeat-iterator.cc +++ b/lily/percent-repeat-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--2014 Han-Wen Nienhuys Erik Sandberg LilyPond is free software: you can redistribute it and/or modify @@ -43,6 +43,7 @@ SCM 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; diff --git a/lily/performance-scheme.cc b/lily/performance-scheme.cc index affc4f04cf..ab8e234b17 100644 --- a/lily/performance-scheme.cc +++ b/lily/performance-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/performance.cc b/lily/performance.cc index 4e19544d41..4aa03331e8 100644 --- a/lily/performance.cc +++ b/lily/performance.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,6 +23,7 @@ using namespace std; #include "audio-column.hh" +#include "audio-item.hh" #include "audio-staff.hh" #include "file-name.hh" #include "international.hh" @@ -53,11 +54,18 @@ Performance::output (Midi_stream &midi_stream) const midi_stream.write (Midi_header (1, tracks_, 384)); debug_output (_ ("Track...") + " ", false); + //Find the first Audio_item in the performance, so all staves start + //at the same tick. + Moment start_mom = 0; + for (vsize i = 0; i < audio_elements_.size (); i++) + if (Audio_item *item = dynamic_cast(audio_elements_[i])) + start_mom = min (start_mom, item->audio_column_->when ()); + for (vsize i = 0; i < audio_staffs_.size (); i++) { Audio_staff *s = audio_staffs_[i]; - debug_output ("[" + to_string (i), true); - s->output (midi_stream, i, ports_); + debug_output ("[" + ::to_string (i), true); + s->output (midi_stream, i, ports_, moment_to_ticks (start_mom)); debug_output ("]", false); } } diff --git a/lily/performer-group.cc b/lily/performer-group.cc index 8a8cb4719d..d7cda2bca9 100644 --- a/lily/performer-group.cc +++ b/lily/performer-group.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/performer.cc b/lily/performer.cc index d6ea9bd4d9..bc6bd3b5ad 100644 --- a/lily/performer.cc +++ b/lily/performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/pfb.cc b/lily/pfb.cc index 0fb1d5b76e..c69333437a 100644 --- a/lily/pfb.cc +++ b/lily/pfb.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/phrasing-slur-engraver.cc b/lily/phrasing-slur-engraver.cc index 6d9aac7af6..ef11e66ac3 100644 --- a/lily/phrasing-slur-engraver.cc +++ b/lily/phrasing-slur-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/piano-pedal-align-engraver.cc b/lily/piano-pedal-align-engraver.cc index 3111592599..e05cee9e05 100644 --- a/lily/piano-pedal-align-engraver.cc +++ b/lily/piano-pedal-align-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/piano-pedal-bracket.cc b/lily/piano-pedal-bracket.cc index 89a97fb4e3..821067bee6 100644 --- a/lily/piano-pedal-bracket.cc +++ b/lily/piano-pedal-bracket.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2003--2012 Han-Wen Nienhuys + Copyright (C) 2003--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 diff --git a/lily/piano-pedal-engraver.cc b/lily/piano-pedal-engraver.cc index c976863e02..5cbb10954e 100644 --- a/lily/piano-pedal-engraver.cc +++ b/lily/piano-pedal-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen , + Copyright (C) 2000--2014 Jan Nieuwenhuizen , Erik Sandberg Chris Jackson - extended to support diff --git a/lily/piano-pedal-performer.cc b/lily/piano-pedal-performer.cc index dd288025dd..b3c2aefd58 100644 --- a/lily/piano-pedal-performer.cc +++ b/lily/piano-pedal-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen + Copyright (C) 2000--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/pitch-interval.cc b/lily/pitch-interval.cc index 084084e4f9..1103904418 100644 --- a/lily/pitch-interval.cc +++ b/lily/pitch-interval.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/pitch-scheme.cc b/lily/pitch-scheme.cc index 238d235e72..07a9a096b3 100644 --- a/lily/pitch-scheme.cc +++ b/lily/pitch-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/pitch-squash-engraver.cc b/lily/pitch-squash-engraver.cc index d52b02dee9..c2832da16a 100644 --- a/lily/pitch-squash-engraver.cc +++ b/lily/pitch-squash-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/pitch.cc b/lily/pitch.cc index b26076a008..bf2fd714ac 100644 --- a/lily/pitch.cc +++ b/lily/pitch.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/pitched-trill-engraver.cc b/lily/pitched-trill-engraver.cc index c2a02e71d9..0e97853f7e 100644 --- a/lily/pitched-trill-engraver.cc +++ b/lily/pitched-trill-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 @@ -98,7 +98,7 @@ Pitched_trill_engraver::make_trill (Stream_event *ev) SCM scm_pitch = ev->get_property ("pitch"); Pitch *p = unsmob_pitch (scm_pitch); - SCM keysig = get_property ("localKeySignature"); + SCM keysig = get_property ("localAlterations"); SCM key = scm_cons (scm_from_int (p->get_octave ()), scm_from_int (p->get_notename ())); diff --git a/lily/pointer-group-interface-scheme.cc b/lily/pointer-group-interface-scheme.cc index 0c786f4488..0c64ca1c4d 100644 --- a/lily/pointer-group-interface-scheme.cc +++ b/lily/pointer-group-interface-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2010--2012 Han-Wen Nienhuys + Copyright (C) 2010--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 diff --git a/lily/pointer-group-interface.cc b/lily/pointer-group-interface.cc index 045563d457..62063b1135 100644 --- a/lily/pointer-group-interface.cc +++ b/lily/pointer-group-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/prob-scheme.cc b/lily/prob-scheme.cc index 30704f5fc6..51bd53c48a 100644 --- a/lily/prob-scheme.cc +++ b/lily/prob-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/prob.cc b/lily/prob.cc index 367d1616a7..60ed8915eb 100644 --- a/lily/prob.cc +++ b/lily/prob.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2004--2012 Jan Nieuwenhuizen + Copyright (C) 2004--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/profile.cc b/lily/profile.cc index d621564e47..f51df87ef0 100644 --- a/lily/profile.cc +++ b/lily/profile.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/program-option-scheme.cc b/lily/program-option-scheme.cc index 302b48e3f4..71538d69e6 100644 --- a/lily/program-option-scheme.cc +++ b/lily/program-option-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 diff --git a/lily/program-option.cc b/lily/program-option.cc index 51d8ca82d8..e54429319d 100644 --- a/lily/program-option.cc +++ b/lily/program-option.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Han-Wen Nienhuys + Copyright (C) 2007--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/property-iterator.cc b/lily/property-iterator.cc index 6352f16399..076bda4f00 100644 --- a/lily/property-iterator.cc +++ b/lily/property-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -52,22 +52,41 @@ Property_iterator::process (Moment mom) if (once) { Global_context *tg = get_outlet ()->get_global_context (); - tg->add_finalization (scm_list_n (once_finalization_proc, + tg->add_finalization (scm_list_4 (once_finalization_proc, o->self_scm (), m->self_scm (), - ly_quote_scm (previous_value), SCM_UNDEFINED)); + previous_value)); } Simple_music_iterator::process (mom); } void -Property_unset_iterator::process (Moment m) +Property_unset_iterator::process (Moment mom) { - SCM sym = get_music ()->get_property ("symbol"); - send_stream_event (get_outlet (), "UnsetProperty", get_music ()->origin (), - ly_symbol2scm ("symbol"), sym); + Context *o = get_outlet (); + Music *m = get_music (); + bool once = to_boolean (m->get_property ("once")); + SCM symbol = m->get_property ("symbol"); + SCM previous_value = SCM_UNDEFINED; + if (once) { + Context *w = o->where_defined (symbol, &previous_value); + if (o != w) + previous_value = SCM_UNDEFINED; + } + send_stream_event (o, "UnsetProperty", m->origin (), + ly_symbol2scm ("symbol"), symbol); - Simple_music_iterator::process (m); + /* For \once \unset install a finalization hook to reset the property to the + * previous value after the timestep */ + if (once && !SCM_UNBNDP (previous_value)) + { + Global_context *tg = get_outlet ()->get_global_context (); + tg->add_finalization (scm_list_4 (Property_iterator::once_finalization_proc, + o->self_scm (), m->self_scm (), + previous_value)); + } + + Simple_music_iterator::process (mom); } MAKE_SCHEME_CALLBACK (Property_iterator, once_finalization, 3); @@ -168,8 +187,8 @@ Push_property_iterator::do_quit () SCM music = get_music ()->self_scm (); Global_context *tg = get_outlet ()->get_global_context (); - tg->add_finalization (scm_list_n (once_finalization_proc, - trans, music, SCM_UNDEFINED)); + tg->add_finalization (scm_list_3 (once_finalization_proc, + trans, music)); } } diff --git a/lily/protected-scm.cc b/lily/protected-scm.cc index 147b83fefd..bfcd1c45ea 100644 --- a/lily/protected-scm.cc +++ b/lily/protected-scm.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/pure-from-neighbor-engraver.cc b/lily/pure-from-neighbor-engraver.cc index 24925d29b8..0c246f1b71 100644 --- a/lily/pure-from-neighbor-engraver.cc +++ b/lily/pure-from-neighbor-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2014 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/pure-from-neighbor-interface.cc b/lily/pure-from-neighbor-interface.cc index 4f70da828b..d005204784 100644 --- a/lily/pure-from-neighbor-interface.cc +++ b/lily/pure-from-neighbor-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2014 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/quote-iterator.cc b/lily/quote-iterator.cc index d35bb54b2c..c8e8a1a42e 100644 --- a/lily/quote-iterator.cc +++ b/lily/quote-iterator.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/relative-octave-check.cc b/lily/relative-octave-check.cc index 91360f52b1..c403b2ad9d 100644 --- a/lily/relative-octave-check.cc +++ b/lily/relative-octave-check.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/relative-octave-music.cc b/lily/relative-octave-music.cc index 2f31e20a22..f501e19a79 100644 --- a/lily/relative-octave-music.cc +++ b/lily/relative-octave-music.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/relocate.cc b/lily/relocate.cc index 3a13f03701..f4cee071af 100644 --- a/lily/relocate.cc +++ b/lily/relocate.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/repeat-acknowledge-engraver.cc b/lily/repeat-acknowledge-engraver.cc index 779323e07d..1846d6686d 100644 --- a/lily/repeat-acknowledge-engraver.cc +++ b/lily/repeat-acknowledge-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/repeat-tie-engraver.cc b/lily/repeat-tie-engraver.cc index 854df8cadc..8cb9334c47 100644 --- a/lily/repeat-tie-engraver.cc +++ b/lily/repeat-tie-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/repeated-music.cc b/lily/repeated-music.cc index 78ffd6b880..57bf98e739 100644 --- a/lily/repeated-music.cc +++ b/lily/repeated-music.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/rest-collision-engraver.cc b/lily/rest-collision-engraver.cc index 1c28520d5c..66a2c558a4 100644 --- a/lily/rest-collision-engraver.cc +++ b/lily/rest-collision-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc index 46435b73ad..e19002ef07 100644 --- a/lily/rest-collision.cc +++ b/lily/rest-collision.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/rest-engraver.cc b/lily/rest-engraver.cc index 402f412d2a..4bcca6f9d3 100644 --- a/lily/rest-engraver.cc +++ b/lily/rest-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/rest.cc b/lily/rest.cc index c4c5de1e73..2dbb2c9f9b 100644 --- a/lily/rest.cc +++ b/lily/rest.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -217,7 +217,7 @@ Rest::glyph_name (Grob *me, int durlog, const string &style, bool try_ledgers, actual_style = ""; } - return ("rests." + to_string (durlog) + (is_ledgered ? "o" : "") + return ("rests." + ::to_string (durlog) + (is_ledgered ? "o" : "") + actual_style); } diff --git a/lily/rhythmic-column-engraver.cc b/lily/rhythmic-column-engraver.cc index 1955498fc4..34691ff20e 100644 --- a/lily/rhythmic-column-engraver.cc +++ b/lily/rhythmic-column-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/rhythmic-head.cc b/lily/rhythmic-head.cc index d144279427..af410a2cf4 100644 --- a/lily/rhythmic-head.cc +++ b/lily/rhythmic-head.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/rod.cc b/lily/rod.cc index f7b38397c5..db619ea09b 100644 --- a/lily/rod.cc +++ b/lily/rod.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/scale.cc b/lily/scale.cc index c4b3ccf2c5..3dff7b4b33 100644 --- a/lily/scale.cc +++ b/lily/scale.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Han-Wen Nienhuys + Copyright (C) 2006--2014 Han-Wen Nienhuys 2007--2008 Rune Zedeler 2008 Joe Neeman diff --git a/lily/scheme-engraver.cc b/lily/scheme-engraver.cc index 1b1aad924a..0b69eb62e7 100644 --- a/lily/scheme-engraver.cc +++ b/lily/scheme-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - Copyright (c) 2009--2012 Han-Wen Nienhuys + Copyright (c) 2009--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 diff --git a/lily/scheme-listener-scheme.cc b/lily/scheme-listener-scheme.cc index 7f1a15627d..3a9187c648 100644 --- a/lily/scheme-listener-scheme.cc +++ b/lily/scheme-listener-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Erik Sandberg + Copyright (C) 2006--2014 Erik Sandberg LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/scheme-listener.cc b/lily/scheme-listener.cc index a576aa18d0..fe57c3a719 100644 --- a/lily/scheme-listener.cc +++ b/lily/scheme-listener.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Erik Sandberg + Copyright (C) 2006--2014 Erik Sandberg LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/scm-hash.cc b/lily/scm-hash.cc index dd3e18bfe4..83e937bc58 100644 --- a/lily/scm-hash.cc +++ b/lily/scm-hash.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index e0bca498f7..b361d03fc1 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/score-performer.cc b/lily/score-performer.cc index 1ab23e096f..cbfb013ddb 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Jan Nieuwenhuizen + Copyright (C) 1996--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/score-scheme.cc b/lily/score-scheme.cc index 98ff693ad2..1ac2698f58 100644 --- a/lily/score-scheme.cc +++ b/lily/score-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/score.cc b/lily/score.cc index 77002d82ab..1f26b8473b 100644 --- a/lily/score.cc +++ b/lily/score.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/script-column-engraver.cc b/lily/script-column-engraver.cc index d9a894f63e..86c6f8681f 100644 --- a/lily/script-column-engraver.cc +++ b/lily/script-column-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/script-column.cc b/lily/script-column.cc index 0a014a3800..e1ee32fd04 100644 --- a/lily/script-column.cc +++ b/lily/script-column.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 @@ -152,11 +152,12 @@ Script_column::order_grobs (vector grobs) { 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 diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index 3085f4f155..367739c374 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/script-interface.cc b/lily/script-interface.cc index 28b978d329..0edbb7b6cf 100644 --- a/lily/script-interface.cc +++ b/lily/script-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/script-row-engraver.cc b/lily/script-row-engraver.cc index c7c4286021..6c22930e0c 100644 --- a/lily/script-row-engraver.cc +++ b/lily/script-row-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/self-alignment-interface.cc b/lily/self-alignment-interface.cc index 1b4e421b70..e0b7f00cb2 100644 --- a/lily/self-alignment-interface.cc +++ b/lily/self-alignment-interface.cc @@ -1,7 +1,7 @@ /* 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 @@ -19,10 +19,7 @@ #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" @@ -199,11 +196,6 @@ ADD_INTERFACE (Self_alignment_interface, "@end table\n", /* properties */ - "collision-bias " - "collision-padding " - "potential-X-colliding-grobs " "self-alignment-X " "self-alignment-Y " - "X-colliding-grobs " - "Y-colliding-grobs " ); diff --git a/lily/semi-tie-column.cc b/lily/semi-tie-column.cc index 07ef344440..c4c80d27d8 100644 --- a/lily/semi-tie-column.cc +++ b/lily/semi-tie-column.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/semi-tie.cc b/lily/semi-tie.cc index 02b7f29415..8607bea4f4 100644 --- a/lily/semi-tie.cc +++ b/lily/semi-tie.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify @@ -27,7 +27,19 @@ #include "staff-symbol-referencer.hh" ADD_INTERFACE (Semi_tie, - "A tie which is only on one side connected to a note head.", + "A tie which is only connected to a note head on one side." + "\n" + "The following properties may be set in the @code{details}" + " list:\n" + "\n" + "@table @code\n" + "@item height-limit\n" + "Maximum tie height: The longer the tie, the closer it is" + " to this height.\n" + "@item ratio\n" + "Parameter for tie shape. The higher this number, the" + " quicker the tie attains its @code{height-limit}.\n" + "@end table\n", /* properties */ "control-points " diff --git a/lily/separating-line-group-engraver.cc b/lily/separating-line-group-engraver.cc index 288b948152..fba16bebb9 100644 --- a/lily/separating-line-group-engraver.cc +++ b/lily/separating-line-group-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/separation-item.cc b/lily/separation-item.cc index ebee8d6bf3..0699b362c8 100644 --- a/lily/separation-item.cc +++ b/lily/separation-item.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/sequential-iterator.cc b/lily/sequential-iterator.cc index d616abb0f9..cdb593c040 100644 --- a/lily/sequential-iterator.cc +++ b/lily/sequential-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc index a53fa6a750..f702cba7b2 100644 --- a/lily/side-position-interface.cc +++ b/lily/side-position-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/simple-closure.cc b/lily/simple-closure.cc index 59f9fd995b..a9aa435cab 100644 --- a/lily/simple-closure.cc +++ b/lily/simple-closure.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/simple-music-iterator.cc b/lily/simple-music-iterator.cc index 60856235ee..a67f976bd1 100644 --- a/lily/simple-music-iterator.cc +++ b/lily/simple-music-iterator.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/simple-spacer-scheme.cc b/lily/simple-spacer-scheme.cc index 3b47562595..fe14925be8 100644 --- a/lily/simple-spacer-scheme.cc +++ b/lily/simple-spacer-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index aef524da87..2eb545756f 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--2014 Han-Wen Nienhuys TODO: - add support for different stretch/shrink constants? @@ -193,7 +193,7 @@ Simple_spacer::expand_line () 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_; diff --git a/lily/simultaneous-music-iterator.cc b/lily/simultaneous-music-iterator.cc index 3b891e8e79..cc262a85d1 100644 --- a/lily/simultaneous-music-iterator.cc +++ b/lily/simultaneous-music-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -63,7 +63,7 @@ Simultaneous_music_iterator::construct_children () 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) diff --git a/lily/skyline-pair.cc b/lily/skyline-pair.cc index 164117c35b..d6bd5fb6fe 100644 --- a/lily/skyline-pair.cc +++ b/lily/skyline-pair.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2008--2012 Han-Wen Nienhuys + Copyright (C) 2008--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/skyline.cc b/lily/skyline.cc index a462015866..33d2823d47 100644 --- a/lily/skyline.cc +++ b/lily/skyline.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Joe Neeman + Copyright (C) 2006--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/slash-repeat-engraver.cc b/lily/slash-repeat-engraver.cc index 7844faf604..a6b3faa56c 100644 --- a/lily/slash-repeat-engraver.cc +++ b/lily/slash-repeat-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Han-Wen Nienhuys , Erik Sandberg + Copyright (C) 2000--2014 Han-Wen Nienhuys , Erik Sandberg LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/slur-configuration.cc b/lily/slur-configuration.cc index 332995ac99..a5d783703c 100644 --- a/lily/slur-configuration.cc +++ b/lily/slur-configuration.cc @@ -1,7 +1,7 @@ /* 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 @@ -43,27 +43,41 @@ avoid_staff_line (Slur_score_state const &state, && (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; diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index a8a54f535a..e1e738b568 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/slur-performer.cc b/lily/slur-performer.cc index f57a9b7a38..69ad9cd0cb 100644 --- a/lily/slur-performer.cc +++ b/lily/slur-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Jan Nieuwenhuizen + Copyright (C) 1996--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/slur-proto-engraver.cc b/lily/slur-proto-engraver.cc index f2e3456913..ccd3225ec1 100644 --- a/lily/slur-proto-engraver.cc +++ b/lily/slur-proto-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2013 Mike Solomon + Copyright (C) 2013--2014 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/slur-score-parameters.cc b/lily/slur-score-parameters.cc index a8cbe4b7f9..ef2b7496ae 100644 --- a/lily/slur-score-parameters.cc +++ b/lily/slur-score-parameters.cc @@ -1,7 +1,7 @@ /* 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 @@ -56,6 +56,10 @@ Slur_score_parameters::fill (Grob *me) = 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_ diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc index 47bb40611c..61a4423159 100644 --- a/lily/slur-scoring.cc +++ b/lily/slur-scoring.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -226,8 +226,8 @@ Slur_score_state::fill (Grob *me) 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); diff --git a/lily/slur.cc b/lily/slur.cc index 0aa96c787d..7d2ca978c7 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -542,6 +542,12 @@ ADD_INTERFACE (Slur, "@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" diff --git a/lily/smobs.cc b/lily/smobs.cc index 164ac21b03..f599a51a28 100644 --- a/lily/smobs.cc +++ b/lily/smobs.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/source-file.cc b/lily/source-file.cc index 26426ae8af..e4679bda60 100644 --- a/lily/source-file.cc +++ b/lily/source-file.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify @@ -181,8 +181,8 @@ Source_file::file_line_column_string (char const *context_str0) const 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); } } @@ -196,8 +196,8 @@ Source_file::quote_input (char const *pos_str0) const 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; } diff --git a/lily/sources.cc b/lily/sources.cc index 2c0e665047..dc784d2bdb 100644 --- a/lily/sources.cc +++ b/lily/sources.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/spaceable-grob.cc b/lily/spaceable-grob.cc index daaf1c71ed..19aea8e496 100644 --- a/lily/spaceable-grob.cc +++ b/lily/spaceable-grob.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/spacing-basic.cc b/lily/spacing-basic.cc index dd40037390..df9f9ecec8 100644 --- a/lily/spacing-basic.cc +++ b/lily/spacing-basic.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 @@ -101,7 +101,8 @@ get_measure_length (Grob *column) return 0; } -Real +/* Basic spring based on duration alone */ +Spring Spacing_spanner::note_spacing (Grob * /* me */, Grob *lc, Grob *rc, @@ -144,30 +145,39 @@ Spacing_spanner::note_spacing (Grob * /* me */, 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; } diff --git a/lily/spacing-determine-loose-columns.cc b/lily/spacing-determine-loose-columns.cc index 2deae13b27..d7fd373cba 100644 --- a/lily/spacing-determine-loose-columns.cc +++ b/lily/spacing-determine-loose-columns.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 @@ -155,7 +155,7 @@ Spacing_spanner::set_distances_for_loose_col (Grob *me, Grob *c, 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 ()); diff --git a/lily/spacing-engraver.cc b/lily/spacing-engraver.cc index fee5c34085..80892fac6b 100644 --- a/lily/spacing-engraver.cc +++ b/lily/spacing-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/spacing-interface.cc b/lily/spacing-interface.cc index 27c99bb159..9e11cfa73a 100644 --- a/lily/spacing-interface.cc +++ b/lily/spacing-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Joe Neeman + Copyright (C) 2007--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/spacing-loose-columns.cc b/lily/spacing-loose-columns.cc index bf8e13593a..bcac6ff493 100644 --- a/lily/spacing-loose-columns.cc +++ b/lily/spacing-loose-columns.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 @@ -153,19 +153,14 @@ set_loose_columns (System *which, Column_x_positions const *posns) 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 { diff --git a/lily/spacing-options.cc b/lily/spacing-options.cc index e90dcebcab..c375bd2a1a 100644 --- a/lily/spacing-options.cc +++ b/lily/spacing-options.cc @@ -1,7 +1,7 @@ /* 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 @@ -66,9 +66,9 @@ Spacing_options::Spacing_options () 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 @@ -86,9 +86,8 @@ Spacing_options::get_duration_space (Rational d) const */ - Rational ratio = d / global_shortest_; - return ((k - 1) + double (ratio)) * increment_; + return (shortest_duration_space_ + ratio - 1) * increment_; } else { @@ -97,10 +96,8 @@ Spacing_options::get_duration_space (Rational d) const 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_; } } diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc index 022c6a1219..2f2724689d 100644 --- a/lily/spacing-spanner.cc +++ b/lily/spacing-spanner.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 @@ -315,11 +315,13 @@ Spacing_spanner::musical_column_spacing (Grob *me, 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 springs; @@ -359,32 +361,20 @@ Spacing_spanner::musical_column_spacing (Grob *me, 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 diff --git a/lily/span-arpeggio-engraver.cc b/lily/span-arpeggio-engraver.cc index f68f904d56..d4dd0f04fe 100644 --- a/lily/span-arpeggio-engraver.cc +++ b/lily/span-arpeggio-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen + Copyright (C) 2000--2014 Jan Nieuwenhuizen Han-Wen Nienhuys diff --git a/lily/span-bar-engraver.cc b/lily/span-bar-engraver.cc index 09c846f896..5e93de630a 100644 --- a/lily/span-bar-engraver.cc +++ b/lily/span-bar-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/span-bar-stub-engraver.cc b/lily/span-bar-stub-engraver.cc index b813bbb25d..88d82b36c6 100644 --- a/lily/span-bar-stub-engraver.cc +++ b/lily/span-bar-stub-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2014 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/spanner-break-forbid-engraver.cc b/lily/spanner-break-forbid-engraver.cc index 82e9622ffc..980709005c 100644 --- a/lily/spanner-break-forbid-engraver.cc +++ b/lily/spanner-break-forbid-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Han-Wen Nienhuys + Copyright (C) 2007--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 diff --git a/lily/spanner-scheme.cc b/lily/spanner-scheme.cc index f7517045b1..f14c69c76f 100644 --- a/lily/spanner-scheme.cc +++ b/lily/spanner-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Han-Wen Nienhuys + Copyright (C) 2007--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/spanner.cc b/lily/spanner.cc index e0e1c18e1d..5d0485f46e 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/spring-smob.cc b/lily/spring-smob.cc index 95d20c4333..8e3ce16640 100644 --- a/lily/spring-smob.cc +++ b/lily/spring-smob.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/spring.cc b/lily/spring.cc index 312b2ed00f..f4123b9891 100644 --- a/lily/spring.cc +++ b/lily/spring.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2012 Joe Neeman + Copyright (C) 2007--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,6 +17,23 @@ along with LilyPond. If not, see . */ +/* + 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 () @@ -69,7 +86,7 @@ Spring::operator *= (Real r) { 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 (); } diff --git a/lily/staff-collecting-engraver.cc b/lily/staff-collecting-engraver.cc index 60c516c428..6bfe49420b 100644 --- a/lily/staff-collecting-engraver.cc +++ b/lily/staff-collecting-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 diff --git a/lily/staff-grouper-interface.cc b/lily/staff-grouper-interface.cc index 3c12882fdd..d9c430f316 100644 --- a/lily/staff-grouper-interface.cc +++ b/lily/staff-grouper-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2009--2012 Joe Neeman + Copyright (C) 2009--2014 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index 4daa2ca9a2..d3368ad683 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/staff-spacing.cc b/lily/staff-spacing.cc index e8bedd2e70..c0219f7065 100644 --- a/lily/staff-spacing.cc +++ b/lily/staff-spacing.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--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 diff --git a/lily/staff-symbol-engraver.cc b/lily/staff-symbol-engraver.cc index 1ca6a4dce1..3a1a1fb32b 100644 --- a/lily/staff-symbol-engraver.cc +++ b/lily/staff-symbol-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/staff-symbol-referencer-scheme.cc b/lily/staff-symbol-referencer-scheme.cc index 1fe886ec0a..f8028e424a 100644 --- a/lily/staff-symbol-referencer-scheme.cc +++ b/lily/staff-symbol-referencer-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/staff-symbol-referencer.cc b/lily/staff-symbol-referencer.cc index 3b8aa6ba18..ffad2e6fdd 100644 --- a/lily/staff-symbol-referencer.cc +++ b/lily/staff-symbol-referencer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1999--2012 Han-Wen Nienhuys + Copyright (C) 1999--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 diff --git a/lily/staff-symbol.cc b/lily/staff-symbol.cc index 3b0eef00b5..9ee7f3a52d 100644 --- a/lily/staff-symbol.cc +++ b/lily/staff-symbol.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/stanza-number-align-engraver.cc b/lily/stanza-number-align-engraver.cc index e16560d263..45ac84382c 100644 --- a/lily/stanza-number-align-engraver.cc +++ b/lily/stanza-number-align-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/stanza-number-engraver.cc b/lily/stanza-number-engraver.cc index 370a4ac1ae..ddcd526d58 100644 --- a/lily/stanza-number-engraver.cc +++ b/lily/stanza-number-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Han-Wen Nienhuys , Glen Prideaux + Copyright (C) 2000--2014 Han-Wen Nienhuys , Glen Prideaux LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc index c1ab5f6f05..8a20d6184e 100644 --- a/lily/stem-engraver.cc +++ b/lily/stem-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 @@ -84,17 +84,7 @@ Stem_engraver::make_stem (Grob_info gi, bool tuplet_start) 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 @@ -254,7 +244,6 @@ ADD_TRANSLATOR (Stem_engraver, "StemTremolo ", /* read */ - "tremoloFlags " "stemLeftBeamCount " "stemRightBeamCount " "whichBar ", diff --git a/lily/stem-tremolo.cc b/lily/stem-tremolo.cc index 1f9d2d8a7a..8879456fbe 100644 --- a/lily/stem-tremolo.cc +++ b/lily/stem-tremolo.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/stem.cc b/lily/stem.cc index 5f072fac6a..39a77a3858 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2012 Han-Wen Nienhuys + Copyright (C) 1996--2014 Han-Wen Nienhuys Jan Nieuwenhuizen TODO: This is way too hairy diff --git a/lily/stencil-expression.cc b/lily/stencil-expression.cc index 750d088e16..6e97e27b18 100644 --- a/lily/stencil-expression.cc +++ b/lily/stencil-expression.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/stencil-interpret.cc b/lily/stencil-interpret.cc index 734eb60806..1b3779c120 100644 --- a/lily/stencil-interpret.cc +++ b/lily/stencil-interpret.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/stencil-scheme.cc b/lily/stencil-scheme.cc index ab0f8cf745..5764b8fd60 100644 --- a/lily/stencil-scheme.cc +++ b/lily/stencil-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/stencil.cc b/lily/stencil.cc index c8985105ea..51f051d597 100644 --- a/lily/stencil.cc +++ b/lily/stencil.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/stream-event-scheme.cc b/lily/stream-event-scheme.cc index 16703d33f5..27f6b811e6 100644 --- a/lily/stream-event-scheme.cc +++ b/lily/stream-event-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2012 Erik Sandberg + Copyright (C) 2006--2014 Erik Sandberg LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/stream-event.cc b/lily/stream-event.cc index 5ce03ec08d..24a022b4c9 100644 --- a/lily/stream-event.cc +++ b/lily/stream-event.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Erik Sandberg + Copyright (C) 2005--2014 Erik Sandberg LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/sustain-pedal.cc b/lily/sustain-pedal.cc index 98b4e2df8a..efefae39b4 100644 --- a/lily/sustain-pedal.cc +++ b/lily/sustain-pedal.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc index b8770feebb..30d62dbe9d 100644 --- a/lily/system-start-delimiter-engraver.cc +++ b/lily/system-start-delimiter-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index d4b523c06c..f96becff75 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -1,7 +1,7 @@ /* 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 @@ -169,7 +169,7 @@ System_start_delimiter::staff_brace (Grob *me, Real y) } 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); diff --git a/lily/system.cc b/lily/system.cc index 1ec46fbaf6..91015be3ca 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -1,7 +1,7 @@ /* 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 @@ -223,7 +223,7 @@ System::get_paper_systems () 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; } diff --git a/lily/tab-note-heads-engraver.cc b/lily/tab-note-heads-engraver.cc index 79807acf04..c4789566cc 100644 --- a/lily/tab-note-heads-engraver.cc +++ b/lily/tab-note-heads-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys, Jean-Baptiste Lamy , + Copyright (C) 2002--2014 Han-Wen Nienhuys, Jean-Baptiste Lamy , LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/tab-staff-symbol-engraver.cc b/lily/tab-staff-symbol-engraver.cc index 488e605b2c..e9ff8880b7 100644 --- a/lily/tab-staff-symbol-engraver.cc +++ b/lily/tab-staff-symbol-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/tab-tie-follow-engraver.cc b/lily/tab-tie-follow-engraver.cc index b036599014..9f80749e03 100644 --- a/lily/tab-tie-follow-engraver.cc +++ b/lily/tab-tie-follow-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/template5.cc b/lily/template5.cc index 9c9613d1ba..35d15f0829 100644 --- a/lily/template5.cc +++ b/lily/template5.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/tempo-performer.cc b/lily/tempo-performer.cc index 7d32d3b612..d705abb3a8 100644 --- a/lily/tempo-performer.cc +++ b/lily/tempo-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index 6bd2356cab..ffd669ef80 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/text-interface.cc b/lily/text-interface.cc index 936a7488e2..a1f8fa083a 100644 --- a/lily/text-interface.cc +++ b/lily/text-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--2014 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/text-spanner-engraver.cc b/lily/text-spanner-engraver.cc index f4dc2de070..52ad7201b1 100644 --- a/lily/text-spanner-engraver.cc +++ b/lily/text-spanner-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen + Copyright (C) 2000--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/tie-column.cc b/lily/tie-column.cc index 7bc35584c5..44bf5408b7 100644 --- a/lily/tie-column.cc +++ b/lily/tie-column.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/tie-configuration.cc b/lily/tie-configuration.cc index 19bcbd822c..219fcbc8cb 100644 --- a/lily/tie-configuration.cc +++ b/lily/tie-configuration.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/tie-details.cc b/lily/tie-details.cc index a13533a6aa..1ae244485c 100644 --- a/lily/tie-details.cc +++ b/lily/tie-details.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index 637a73ef32..a099d9c7ab 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/tie-formatting-problem.cc b/lily/tie-formatting-problem.cc index 304e4b3b2a..b15536a863 100644 --- a/lily/tie-formatting-problem.cc +++ b/lily/tie-formatting-problem.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/tie-performer.cc b/lily/tie-performer.cc index 9ef199ddff..77fb9e336d 100644 --- a/lily/tie-performer.cc +++ b/lily/tie-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/tie.cc b/lily/tie.cc index 23e8d4c7da..4e3460f79b 100644 --- a/lily/tie.cc +++ b/lily/tie.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/time-signature-engraver.cc b/lily/time-signature-engraver.cc index 1c6cd69bd4..8461a01058 100644 --- a/lily/time-signature-engraver.cc +++ b/lily/time-signature-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/time-signature-performer.cc b/lily/time-signature-performer.cc index f2f3e8f32a..5ca26e66da 100644 --- a/lily/time-signature-performer.cc +++ b/lily/time-signature-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/time-signature.cc b/lily/time-signature.cc index f00c2563f6..1b2ed673f4 100644 --- a/lily/time-signature.cc +++ b/lily/time-signature.cc @@ -1,7 +1,7 @@ /* 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 @@ -67,7 +67,7 @@ Time_signature::special_time_signature (Grob *me, SCM scm_style, int n, int d) return numbered_time_signature (me, n, d); if ((style == "default") || (style == "")) - style = to_string ("C"); + style = ::to_string ("C"); if (style == "C") { @@ -77,7 +77,7 @@ Time_signature::special_time_signature (Grob *me, SCM scm_style, int n, int d) 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); @@ -100,9 +100,9 @@ Time_signature::numbered_time_signature (Grob *me, int num, int den) 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); diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc index 67832e3cc5..8298a2b56f 100644 --- a/lily/timing-translator.cc +++ b/lily/timing-translator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/translator-ctors.cc b/lily/translator-ctors.cc index 58d4e51577..d9b47995f4 100644 --- a/lily/translator-ctors.cc +++ b/lily/translator-ctors.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/translator-dispatch-list.cc b/lily/translator-dispatch-list.cc index dffaa095f6..7ccdddd516 100644 --- a/lily/translator-dispatch-list.cc +++ b/lily/translator-dispatch-list.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/translator-group-ctors.cc b/lily/translator-group-ctors.cc index bd349824d7..02d9a28ac2 100644 --- a/lily/translator-group-ctors.cc +++ b/lily/translator-group-ctors.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/translator-group.cc b/lily/translator-group.cc index ab79d13476..638c38bd9c 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys , + Copyright (C) 1997--2014 Han-Wen Nienhuys , Erik Sandberg LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/translator-scheme.cc b/lily/translator-scheme.cc index bede8cac2d..64f8e680d8 100644 --- a/lily/translator-scheme.cc +++ b/lily/translator-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/translator.cc b/lily/translator.cc index 154ffa4b08..116f2849ac 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/trill-spanner-engraver.cc b/lily/trill-spanner-engraver.cc index 34b4e6663f..914b3fa21f 100644 --- a/lily/trill-spanner-engraver.cc +++ b/lily/trill-spanner-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2012 Jan Nieuwenhuizen + Copyright (C) 2000--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/ttf.cc b/lily/ttf.cc index 6d7f97bf37..e46628ab0c 100644 --- a/lily/ttf.cc +++ b/lily/ttf.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--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 diff --git a/lily/tuplet-bracket.cc b/lily/tuplet-bracket.cc index 1eccaabc06..04e67fbdec 100644 --- a/lily/tuplet-bracket.cc +++ b/lily/tuplet-bracket.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify @@ -523,7 +523,7 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy) Real x1 = robust_relative_extent (rgr, commonx, X_AXIS)[RIGHT]; bool follow_beam = par_beam && get_grob_direction (par_beam) == dir - && !to_boolean (par_beam->get_property ("knee")); + && !Beam::is_knee (par_beam); vector points; if (columns.size () diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc index 1fc30d898a..c3529de747 100644 --- a/lily/tuplet-engraver.cc +++ b/lily/tuplet-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys + Copyright (C) 1998--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 diff --git a/lily/tuplet-iterator.cc b/lily/tuplet-iterator.cc index bf9a223684..ca7533dce9 100644 --- a/lily/tuplet-iterator.cc +++ b/lily/tuplet-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Han-Wen Nienhuys , + Copyright (C) 1998--2014 Han-Wen Nienhuys , Erik Sandberg LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/tuplet-number.cc b/lily/tuplet-number.cc index 69e97afef0..9d4ce784b1 100644 --- a/lily/tuplet-number.cc +++ b/lily/tuplet-number.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify @@ -18,23 +18,196 @@ along with LilyPond. If not, see . */ +#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 const &cols) +{ + Spanner *me = dynamic_cast (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 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 +Tuplet_number::adjacent_note_columns (Grob *me_grob, Grob *ref_stem) +{ + Spanner *me = dynamic_cast (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 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 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 (me_grob); + Spanner *tuplet = unsmob_spanner (me->get_object ("bracket")); + + bool bracket_visible = to_boolean (me->get_property ("bracket-visibility")) + || !tuplet->extent (tuplet, Y_AXIS).is_empty (); + + if (bracket_visible || !to_boolean (me->get_property ("knee-to-beam"))) + return false; + + Grob *beam = Stem::get_beam (ref_stem); + + if (!beam || !Beam::is_knee (beam)) + return false; + + Grob *commonx = Tuplet_bracket::get_common_x (tuplet); + commonx = commonx->common_refpoint (me, X_AXIS); + + Interval number_ext = me->extent (commonx, X_AXIS); - static Real calc_offset (Spanner *me, Axis a); -}; + Drul_array 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 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 @@ -58,28 +231,253 @@ Tuplet_number::print (SCM smob) 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 bounds (left_bound, right_bound); + Spanner *tuplet = unsmob_spanner (me->get_object ("bracket")); - Interval x_positions = robust_scm2interval (tuplet->get_property ("X-positions"), Interval (0.0, 0.0)); + Grob *commonx = Tuplet_bracket::get_common_x (tuplet); + commonx = commonx->common_refpoint (me, X_AXIS); + + Interval bound_poss; + + for (LEFT_and_RIGHT (d)) + { + if (Note_column::has_interface (bounds[d]) + && Note_column::get_stem (bounds[d])) + bounds[d] = Note_column::get_stem (bounds[d]); + bound_poss[d] = Axis_group_interface::generic_bound_extent (bounds[d], commonx, X_AXIS)[-d]; + } - return scm_from_double (x_positions.center ()); + extract_grob_set (tuplet, "note-columns", cols); + Grob *ref_stem = select_reference_stem (me, cols); + + /* + Return bracket-based positioning. + */ + if (!ref_stem + || !knee_position_against_beam (me, ref_stem)) + { + Interval x_positions; + x_positions = robust_scm2interval (tuplet->get_property ("X-positions"), + Interval (0.0, 0.0)); + return scm_from_double (x_positions.center ()); + } + + /* + Horizontally center the number on the beam. + */ + Real col_pos = left_bound->relative_coordinate (commonx, X_AXIS); + Real x_offset = bound_poss.center () - col_pos; + + /* + Consider possible collisions with adjacent note columns. + */ + Drul_array adj_cols = adjacent_note_columns (me, ref_stem); + Interval number_ext = me->extent (commonx, X_AXIS); + number_ext.translate (x_offset); + Real padding = robust_scm2double (me->get_property ("padding"), 0.5); + number_ext.widen (padding); + + Interval cor (0.0, 0.0); + + for (LEFT_and_RIGHT (d)) + if (adj_cols[d]) + { + Interval nc_ext = adj_cols[d]->extent (commonx, X_AXIS); + Interval overlap (nc_ext); + overlap.intersect (number_ext); + if (!overlap.is_empty ()) + cor[d] = overlap.length () * -d; + x_offset += cor[d]; + } + + return scm_from_double (x_offset); +} + +/* + When a number is placed against the beam (independently of a bracket), the + Y-extent of a reference stem is used to determine the vertical placement of + the number. When French beams are used the stem may not reach all beams. +*/ +int +count_beams_not_touching_stem (SCM beaming) +{ + int count = 0; + + for (SCM s = scm_car (beaming); scm_is_pair (s); s = scm_cdr (s)) + { + if (scm_c_memq (scm_car (s), scm_cdr (beaming)) != SCM_BOOL_F) + ++count; + } + + return max (0, count - 1); } MAKE_SCHEME_CALLBACK (Tuplet_number, calc_y_offset, 1); SCM Tuplet_number::calc_y_offset (SCM smob) { - Spanner *me = unsmob_spanner (smob); Spanner *tuplet = unsmob_spanner (me->get_object ("bracket")); + Drul_array positions = robust_scm2drul (tuplet->get_property ("positions"), + Drul_array (0.0, 0.0)); + SCM to_bracket = scm_from_double ((positions[LEFT] + positions[RIGHT]) / 2.0); + + Grob *commonx = Tuplet_bracket::get_common_x (me); + commonx = commonx->common_refpoint (me, X_AXIS); + Real x_coord = me->relative_coordinate (commonx, X_AXIS); + extract_grob_set (tuplet, "note-columns", columns); + Grob *ref_stem = select_reference_stem (me, columns); + + if (!ref_stem || !knee_position_against_beam (me, ref_stem)) + return to_bracket; + + /* + First, we calculate the Y-offset of the tuplet number as if it + is positioned at the reference stem. + */ + Grob *commony = common_refpoint_of_array (columns, tuplet, Y_AXIS); + commony = commony->common_refpoint (me, Y_AXIS); + extract_grob_set (me, "tuplets", tuplets); + commony = common_refpoint_of_array (tuplets, commony, Y_AXIS); + if (Grob *st = Staff_symbol_referencer::get_staff_symbol (me)) + commony = st->common_refpoint (commony, Y_AXIS); + + Interval ref_stem_ext = ref_stem->extent (commony, Y_AXIS); + Real tuplet_y = tuplet->relative_coordinate (commony, Y_AXIS); + Direction ref_stem_dir = get_grob_direction (ref_stem); + + Real y_offset = ref_stem_ext[ref_stem_dir] - tuplet_y; + + /* + Additional displacement for French beaming. + */ + if (to_boolean (ref_stem->get_property ("french-beaming"))) + { + Grob *beam = Stem::get_beam (ref_stem); + Real beam_translation = Beam::get_beam_translation (beam); + SCM beaming = ref_stem->get_property ("beaming"); + y_offset += ref_stem_dir + * count_beams_not_touching_stem (beaming) + * beam_translation; + } + + Real padding = robust_scm2double (me->get_property ("padding"), 0.5); + Real num_height = me->extent (commony, Y_AXIS).length (); + + y_offset += ref_stem_dir * (padding + num_height / 2.0); + + /* + Now we adjust the vertical position of the number to reflect + its actual horizontal placement along the beam. + */ + Real ref_stem_x = ref_stem->relative_coordinate (commonx, X_AXIS); + y_offset += calc_beam_y_shift (ref_stem, x_coord - ref_stem_x); + + /* + Check if the number is between the beam and the staff. If so, it will collide + with ledger lines. Move it into the staff. + */ + if (Grob *st = Staff_symbol_referencer::get_staff_symbol (ref_stem)) + { + Interval staff_ext_y = st->extent (commony, Y_AXIS); + bool move = ref_stem_dir == DOWN + ? ref_stem_ext[DOWN] > staff_ext_y[UP] + : staff_ext_y[DOWN] > ref_stem_ext[UP]; + if (move) + { + Interval ledger_domain = Interval (min (staff_ext_y[UP], ref_stem_ext[UP]), + max (staff_ext_y[DOWN], ref_stem_ext[DOWN])); + Interval num_y (me->extent (commony, Y_AXIS)); + num_y.translate (y_offset); + Interval num_ledger_overlap (num_y); + num_ledger_overlap.intersect (ledger_domain); + Real line_thickness = Staff_symbol_referencer::line_thickness (st); + Real staff_space = Staff_symbol_referencer::staff_space (st); + // Number will touch outer staff line. + if (!num_ledger_overlap.is_empty () + && num_ledger_overlap.length () > (staff_space / 2.0) + && move) + y_offset += staff_ext_y[-ref_stem_dir] - num_y[-ref_stem_dir] + + line_thickness * ref_stem_dir; + } + } + + /* + Now consider possible collisions with accidentals on the right. We + move the accidental away from the beam. + */ + Drul_array 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 positions = robust_scm2drul (tuplet->get_property ("positions"), Drul_array (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) @@ -97,5 +495,6 @@ ADD_INTERFACE (Tuplet_number, "avoid-slur " // UGH. "bracket " "direction " + "knee-to-beam " ); diff --git a/lily/tweak-engraver.cc b/lily/tweak-engraver.cc index a5d7ff68dd..a2a3b65922 100644 --- a/lily/tweak-engraver.cc +++ b/lily/tweak-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/lily/unfolded-repeat-iterator.cc b/lily/unfolded-repeat-iterator.cc index 5924296d60..f29be92f12 100644 --- a/lily/unfolded-repeat-iterator.cc +++ b/lily/unfolded-repeat-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 diff --git a/lily/unpure-pure-container.cc b/lily/unpure-pure-container.cc index 9b2f871769..1aefe920af 100644 --- a/lily/unpure-pure-container.cc +++ b/lily/unpure-pure-container.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2014 Mike Solomon LilyPond is free software: you can redistribute it and/or modify @@ -32,6 +32,17 @@ is_unpure_pure_container (SCM s) 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) { diff --git a/lily/vaticana-ligature-engraver.cc b/lily/vaticana-ligature-engraver.cc index 9b1485777c..3749b5af88 100644 --- a/lily/vaticana-ligature-engraver.cc +++ b/lily/vaticana-ligature-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2003--2012 Juergen Reuter + Copyright (C) 2003--2014 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 diff --git a/lily/vaticana-ligature.cc b/lily/vaticana-ligature.cc index deb0218bd0..d8ac36b9a3 100644 --- a/lily/vaticana-ligature.cc +++ b/lily/vaticana-ligature.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2003--2012 Juergen Reuter + Copyright (C) 2003--2014 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 diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc index 65cf6e7f77..650669f8c5 100644 --- a/lily/vertical-align-engraver.cc +++ b/lily/vertical-align-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--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 diff --git a/lily/volta-bracket.cc b/lily/volta-bracket.cc index 7b0fd13411..99490980e8 100644 --- a/lily/volta-bracket.cc +++ b/lily/volta-bracket.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Jan Nieuwenhuizen + Copyright (C) 1997--2014 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index 882359621a..de7d08db95 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -1,7 +1,7 @@ /* 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 diff --git a/lily/volta-repeat-iterator.cc b/lily/volta-repeat-iterator.cc index 2e386e6fd1..0774ca07e8 100644 --- a/lily/volta-repeat-iterator.cc +++ b/lily/volta-repeat-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2012 Han-Wen Nienhuys + Copyright (C) 2002--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 @@ -33,17 +33,27 @@ protected: 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 @@ -94,17 +104,48 @@ Volta_repeat_iterator::next_element (bool side_effect) { 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"), diff --git a/lily/warn-scheme.cc b/lily/warn-scheme.cc index c2449d164e..be29eaad59 100644 --- a/lily/warn-scheme.cc +++ b/lily/warn-scheme.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2012 Jan Nieuwenhuizen + Copyright (C) 1998--2014 Jan Nieuwenhuizen Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify diff --git a/ly/Welcome-to-LilyPond-MacOS.ly b/ly/Welcome-to-LilyPond-MacOS.ly index a72c346f6b..b09c00757a 100644 --- a/ly/Welcome-to-LilyPond-MacOS.ly +++ b/ly/Welcome-to-LilyPond-MacOS.ly @@ -23,7 +23,7 @@ That's it. For more information, visit http://lilypond.org . %} -\version "2.16.0" % necessary for upgrading to future LilyPond versions. +\version "2.19.8" % necessary for upgrading to future LilyPond versions. \header{ title = "A scale in LilyPond" diff --git a/ly/Welcome_to_LilyPond.ly b/ly/Welcome_to_LilyPond.ly index 907ebf7830..5655a7334c 100644 --- a/ly/Welcome_to_LilyPond.ly +++ b/ly/Welcome_to_LilyPond.ly @@ -32,7 +32,7 @@ Good luck with LilyPond! Happy engraving. %} -\version "2.16.0" % necessary for upgrading to future LilyPond versions. +\version "2.19.8" % necessary for upgrading to future LilyPond versions. \header{ title = "A scale in LilyPond" diff --git a/ly/bagpipe.ly b/ly/bagpipe.ly index 9252f723b5..c1901e460c 100644 --- a/ly/bagpipe.ly +++ b/ly/bagpipe.ly @@ -9,7 +9,7 @@ $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. @@ -71,8 +71,9 @@ quarterBeaming = { \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. diff --git a/ly/catalan.ly b/ly/catalan.ly index 5a30f54a58..3918e7a149 100644 --- a/ly/catalan.ly +++ b/ly/catalan.ly @@ -1,7 +1,7 @@ %%%% common Catalan names for notes %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2010--2012 Valentin Villenave +%%%% Copyright (C) 2010--2014 Valentin Villenave %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/context-mods-init.ly b/ly/context-mods-init.ly index b57fd71337..d3ae2129fa 100644 --- a/ly/context-mods-init.ly +++ b/ly/context-mods-init.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2011--2012 Han-Wen Nienhuys +%%%% Copyright (C) 2011--2014 Han-Wen Nienhuys %%%% Jan Nieuwenhuizen %%%% %%%% LilyPond is free software: you can redistribute it and/or modify diff --git a/ly/declarations-init.ly b/ly/declarations-init.ly index f3f5eef668..48c57257e0 100644 --- a/ly/declarations-init.ly +++ b/ly/declarations-init.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 1996--2012 Han-Wen Nienhuys +%%%% Copyright (C) 1996--2014 Han-Wen Nienhuys %%%% Jan Nieuwenhuizen %%%% %%%% LilyPond is free software: you can redistribute it and/or modify diff --git a/ly/deutsch.ly b/ly/deutsch.ly index c7c626e211..1c92f79001 100644 --- a/ly/deutsch.ly +++ b/ly/deutsch.ly @@ -1,7 +1,7 @@ %%%% common German names for notes %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2010--2012 Valentin Villenave +%%%% Copyright (C) 2010--2014 Valentin Villenave %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/english.ly b/ly/english.ly index c0cadea621..8eec232a7a 100644 --- a/ly/english.ly +++ b/ly/english.ly @@ -1,7 +1,7 @@ %%%% common English names for notes %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2010--2012 Valentin Villenave +%%%% Copyright (C) 2010--2014 Valentin Villenave %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 9c8547dd7d..ebfff6a2fc 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 1996--2012 Han-Wen Nienhuys +%%%% Copyright (C) 1996--2014 Han-Wen Nienhuys %%%% Jan Nieuwenhuizen %%%% %%%% LilyPond is free software: you can redistribute it and/or modify @@ -86,7 +86,7 @@ \consists "Cue_clef_engraver" \consists "Fingering_column_engraver" - localKeySignature = #'() + localAlterations = #'() createSpacing = ##t ignoreFiguredBassRest = ##f @@ -162,14 +162,13 @@ contained staves are not connected vertically." \context{ \type "Engraver_group" - localKeySignature = #'() + localAlterations = #'() createSpacing = ##t squashedPosition = #0 \name RhythmicStaff \alias "Staff" - \override BarLine.bar-extent = #'(-2 . 2) \override VoltaBracket.staff-padding = #3 \override StaffSymbol.line-count = #1 @@ -306,7 +305,7 @@ multiple voices on the same staff." \context{ \type "Engraver_group" \name GrandStaff - localKeySignature = #'() + localAlterations = #'() \description "A group of staves, with a brace on the left side, grouping the staves together. The bar lines of the @@ -314,6 +313,9 @@ contained staves are connected vertically." \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" @@ -360,6 +362,9 @@ together, never separately." \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" @@ -609,6 +614,7 @@ automatically when an output definition (a @code{\\score} or 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 @@ -634,6 +640,8 @@ automatically when an output definition (a @code{\\score} or autoBeaming = ##t autoBeamCheck = #default-auto-beam-check + completionFactor = #unity-if-multimeasure + scriptDefinitions = #default-script-alist pedalSustainStrings = #'("Ped." "*Ped." "*") diff --git a/ly/espanol.ly b/ly/espanol.ly index c67dd19c81..7b1ef9995e 100644 --- a/ly/espanol.ly +++ b/ly/espanol.ly @@ -1,7 +1,7 @@ %%%% common Spanish names for notes %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2010--2012 Valentin Villenave +%%%% Copyright (C) 2010--2014 Valentin Villenave %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/event-listener.ly b/ly/event-listener.ly index 9e5282de89..b7b8ca086a 100644 --- a/ly/event-listener.ly +++ b/ly/event-listener.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2011--2012 Graham Percival +%%%% Copyright (C) 2011--2014 Graham Percival %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/guile-debugger.ly b/ly/guile-debugger.ly index b05df7dd17..ef4a9290f3 100644 --- a/ly/guile-debugger.ly +++ b/ly/guile-debugger.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2009--2012 by Ian Hulin +%%%% Copyright (C) 2009--2014 by Ian Hulin %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/italiano.ly b/ly/italiano.ly index e80b1e849e..da756740c6 100644 --- a/ly/italiano.ly +++ b/ly/italiano.ly @@ -1,7 +1,7 @@ %%%% common Italian names for notes %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2010--2012 Valentin Villenave +%%%% Copyright (C) 2010--2014 Valentin Villenave %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/midi-init.ly b/ly/midi-init.ly index 72aa43f23e..c4d6ea134e 100644 --- a/ly/midi-init.ly +++ b/ly/midi-init.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 1996--2012 Han-Wen Nienhuys +%%%% Copyright (C) 1996--2014 Han-Wen Nienhuys %%%% Jan Nieuwenhuizen %%%% %%%% LilyPond is free software: you can redistribute it and/or modify diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index bf738074cd..9e5d3c223b 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -2,7 +2,7 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2003--2012 Han-Wen Nienhuys +%%%% Copyright (C) 2003--2014 Han-Wen Nienhuys %%%% Jan Nieuwenhuizen %%%% %%%% LilyPond is free software: you can redistribute it and/or modify @@ -221,6 +221,14 @@ barNumberCheck = "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}.") @@ -245,7 +253,15 @@ bookOutputSuffix = 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?) @@ -270,7 +286,7 @@ as @code{\\compoundMeter #'((3 2 8))} or shorter (timesig (cons (ly:moment-main-numerator mlen) (ly:moment-main-denominator mlen)))) #{ - \once \override Staff.TimeSignature.stencil = #(lambda (grob) + \once \override Timing.TimeSignature.stencil = #(lambda (grob) (grob-interpret-markup grob (format-compound-time args))) \set Timing.timeSignatureFraction = #timesig \set Timing.baseMoment = #beat @@ -328,25 +344,30 @@ in a CueVoice oriented by @var{dir}.") 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) @@ -611,6 +632,29 @@ languageRestore = (ly:input-warning location (_ "No other language was defined previously. Ignoring.")))) +magnifyMusic = +#(define-music-function (parser location mag mus) (number? ly:music?) + (_i "Magnify the notation of @var{mus} without changing the +staff-size, using @var{mag} as a size factor. Stems, beams, and +horizontal spacing are adjusted automatically.") + #{ + \set fontSize = #(magnification->font-size mag) + % gives beam-thickness=0.48 when mag=1 (like default), + % gives beam-thickness=0.35 when mag=0.63 (like CueVoice) + \temporary \override Beam.beam-thickness = #(+ 119/925 (* mag 13/37)) + \temporary \override Beam.length-fraction = #mag + \temporary \override Stem.length-fraction = #mag + \temporary \override Stem.thickness = #(* 1.3 (max 1 mag)) + \temporary \override Score.SpacingSpanner.spacing-increment = #(* 1.2 mag) + #mus + \set fontSize = 0 + \revert Beam.beam-thickness + \revert Beam.length-fraction + \revert Stem.length-fraction + \revert Stem.thickness + \revert Score.SpacingSpanner.spacing-increment + #}) + makeClusters = #(define-music-function (parser location arg) (ly:music?) (_i "Display chords in @var{arg} as clusters.") @@ -733,7 +777,7 @@ appropriate tweak applied.") \override #prop-path = #(offsetter (third prop-path) offsets) #} (make-music 'Music))))) - + omit = #(define-music-function (parser location item) (symbol-list-or-music?) (_i "Set @var{item}'s @samp{stencil} property to @code{#f}, @@ -1260,9 +1304,7 @@ shiftDurations = (_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) diff --git a/ly/nederlands.ly b/ly/nederlands.ly index 7555281ee3..fd0ef43403 100644 --- a/ly/nederlands.ly +++ b/ly/nederlands.ly @@ -1,7 +1,7 @@ %%%% common Dutch names for notes %%%% 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 diff --git a/ly/norsk.ly b/ly/norsk.ly index 144ea82b04..2b642b8eca 100644 --- a/ly/norsk.ly +++ b/ly/norsk.ly @@ -1,7 +1,7 @@ %%%% common Norwegian names for notes %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2010--2012 Valentin Villenave +%%%% Copyright (C) 2010--2014 Valentin Villenave %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/paper-defaults-init.ly b/ly/paper-defaults-init.ly index 07ee79176b..ef74193122 100644 --- a/ly/paper-defaults-init.ly +++ b/ly/paper-defaults-init.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2004--2012 Han-Wen Nienhuys +%%%% Copyright (C) 2004--2014 Han-Wen Nienhuys %%%% Jan Nieuwenhuizen %%%% Neil Puttock %%%% diff --git a/ly/performer-init.ly b/ly/performer-init.ly index 0a1ac2d374..ecc97aedb7 100644 --- a/ly/performer-init.ly +++ b/ly/performer-init.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 1996--2012 Han-Wen Nienhuys +%%%% Copyright (C) 1996--2014 Han-Wen Nienhuys %%%% Jan Nieuwenhuizen %%%% %%%% LilyPond is free software: you can redistribute it and/or modify @@ -26,6 +26,7 @@ \name Staff \accepts Voice \accepts CueVoice + \accepts NullVoice \defaultchild Voice \consists "Staff_performer" @@ -181,6 +182,20 @@ \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 diff --git a/ly/portugues.ly b/ly/portugues.ly index 774119d420..c8dd91d113 100644 --- a/ly/portugues.ly +++ b/ly/portugues.ly @@ -1,7 +1,7 @@ %%%% common Portuguese names for notes %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2010--2012 Valentin Villenave +%%%% Copyright (C) 2010--2014 Valentin Villenave %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/predefined-fretboards-init.ly b/ly/predefined-fretboards-init.ly index 705e962872..bec581ae66 100644 --- a/ly/predefined-fretboards-init.ly +++ b/ly/predefined-fretboards-init.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2008--2012 Carl D. Sorensen +%%%% Copyright (C) 2008--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 diff --git a/ly/predefined-guitar-fretboards.ly b/ly/predefined-guitar-fretboards.ly index fbdb0c790b..3f354616f3 100644 --- a/ly/predefined-guitar-fretboards.ly +++ b/ly/predefined-guitar-fretboards.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2008--2012 Carl D. Sorensen +%%%% Copyright (C) 2008--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 @@ -495,7 +495,7 @@ #"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;" diff --git a/ly/predefined-guitar-ninth-fretboards.ly b/ly/predefined-guitar-ninth-fretboards.ly index 3271397648..a4ba9ac50b 100644 --- a/ly/predefined-guitar-ninth-fretboards.ly +++ b/ly/predefined-guitar-ninth-fretboards.ly @@ -1,6 +1,6 @@ %%%% 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 diff --git a/ly/predefined-mandolin-fretboards.ly b/ly/predefined-mandolin-fretboards.ly index 1b8cb09578..d63751484c 100644 --- a/ly/predefined-mandolin-fretboards.ly +++ b/ly/predefined-mandolin-fretboards.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2011--2012 Marc Hohl +%%%% Copyright (C) 2011--2014 Marc Hohl %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/predefined-ukulele-fretboards.ly b/ly/predefined-ukulele-fretboards.ly index 80f55aca1f..187b70f658 100644 --- a/ly/predefined-ukulele-fretboards.ly +++ b/ly/predefined-ukulele-fretboards.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2009--2012 Matt Corks +%%%% Copyright (C) 2009--2014 Matt Corks %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/property-init.ly b/ly/property-init.ly index 42a1d5100c..852dbcee9e 100644 --- a/ly/property-init.ly +++ b/ly/property-init.ly @@ -273,12 +273,14 @@ unHideNotes = { 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 } diff --git a/ly/satb.ly b/ly/satb.ly new file mode 100644 index 0000000000..a15dd1d72d --- /dev/null +++ b/ly/satb.ly @@ -0,0 +1,226 @@ +\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 { } +} + diff --git a/ly/script-init.ly b/ly/script-init.ly index 0cb37947e7..3b3e39ed31 100644 --- a/ly/script-init.ly +++ b/ly/script-init.ly @@ -2,18 +2,10 @@ \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") @@ -26,10 +18,15 @@ lheel = #(make-articulation "lheel") 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") @@ -42,8 +39,17 @@ segno = #(make-articulation "segno") 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)) @@ -55,3 +61,12 @@ upmordent = #(make-articulation "upmordent") 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 diff --git a/ly/string-tunings-init.ly b/ly/string-tunings-init.ly index c951bec00f..b09d8da871 100644 --- a/ly/string-tunings-init.ly +++ b/ly/string-tunings-init.ly @@ -1,6 +1,6 @@ %%%% 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 diff --git a/ly/suomi.ly b/ly/suomi.ly index 2d64813612..0d00eef5b6 100644 --- a/ly/suomi.ly +++ b/ly/suomi.ly @@ -1,7 +1,7 @@ %%%% common Finnish names for notes %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2010--2012 Valentin Villenave +%%%% Copyright (C) 2010--2014 Valentin Villenave %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/svenska.ly b/ly/svenska.ly index 7f6a5acafc..1442c897f0 100644 --- a/ly/svenska.ly +++ b/ly/svenska.ly @@ -1,7 +1,7 @@ %%%% common Swedish names for notes %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2010--2012 Valentin Villenave +%%%% Copyright (C) 2010--2014 Valentin Villenave %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/text-replacements.ly b/ly/text-replacements.ly index cd6d4457b7..74d414aca8 100644 --- a/ly/text-replacements.ly +++ b/ly/text-replacements.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2011--2012 Bertrand Bordage +%%%% Copyright (C) 2011--2014 Bertrand Bordage %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/ly/vlaams.ly b/ly/vlaams.ly index 62232bed80..6f65f5aecc 100644 --- a/ly/vlaams.ly +++ b/ly/vlaams.ly @@ -1,7 +1,7 @@ %%%% common Flemish names for notes %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2010--2012 Valentin Villenave +%%%% Copyright (C) 2010--2014 Valentin Villenave %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by diff --git a/mf/GNUmakefile b/mf/GNUmakefile index 9da619c823..141ba63197 100644 --- a/mf/GNUmakefile +++ b/mf/GNUmakefile @@ -30,7 +30,6 @@ BRACES = a b c d e f g h i OTF_FILES = $(STAFF_SIZES:%=$(outdir)/emmentaler-%.otf) \ $(outdir)/emmentaler-brace.otf -PE_SCRIPTS = $(STAFF_SIZES:%=$(outdir)/emmentaler-%.pe) OTF_TABLES = $(STAFF_SIZES:%=$(outdir)/feta%.otf-table) \ $(BRACES:%=$(outdir)/feta-braces-%.otf-table) SVG_FILES = $(OTF_FILES:%.otf=%.svg) @@ -46,35 +45,18 @@ LISP_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.lisp) ENC_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.enc) TFM_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.tfm) -$(outdir)/emmentaler-brace.otf-table: $(BRACES:%=$(outdir)/feta-braces-%.otf-table) - cat $^ > $@ - $(outdir)/emmentaler-brace.otf-gtable: $(BRACES:%=$(outdir)/feta-braces-%.otf-gtable) echo '(design_size . 20)' > $@ +$(outdir)/feta%.otf-table: $(outdir)/feta%.lisp $(outdir)/parmesan%.lisp \ + $(outdir)/parmesan-noteheads%.lisp \ + $(outdir)/feta-noteheads%.lisp \ + $(outdir)/feta-flags%.lisp \ + $(outdir)/feta-alphabet%.lisp + cat $^ > $@ - -## ugh -- we want this to prevent failing -j2 compiles. -define FETAxx-PREREQUISITES - - -$(outdir)/feta$(i).otf-table: $(outdir)/feta$(i).lisp \ - $(outdir)/feta-noteheads$(i).lisp \ - $(outdir)/feta-flags$(i).lisp \ - $(outdir)/parmesan$(i).lisp \ - $(outdir)/parmesan-noteheads$(i).lisp \ - $(outdir)/feta-alphabet$(i).lisp -endef - -$(eval $(foreach i,$(STAFF_SIZES),$(FETAxx-PREREQUISITES))) - -$(outdir)/%.otf-table: $(outdir)/%.lisp - cat $< $(if $(findstring brace,$<),,$(subst feta,parmesan,$<)) \ - $(if $(findstring brace,$<),,$(subst feta,parmesan-noteheads,$<)) \ - $(if $(findstring brace,$<),,$(subst feta,feta-noteheads,$<)) \ - $(if $(findstring brace,$<),,$(subst feta,feta-flags,$<)) \ - $(if $(findstring brace,$<),,$(subst feta,feta-alphabet,$<)) > $@ - +$(outdir)/emmentaler-brace.otf-table: $(foreach x, a b c d e f g h i,$(outdir)/feta-braces-$(x).lisp) + cat $^ > $@ $(outdir)/emmentaler-brace.otf: $(outdir)/emmentaler-brace.subfonts \ $(outdir)/emmentaler-brace.fontname \ @@ -82,26 +64,15 @@ $(outdir)/emmentaler-brace.otf: $(outdir)/emmentaler-brace.subfonts \ $(outdir)/emmentaler-brace.otf-gtable \ $(outdir)/emmentaler-brace.pe -$(outdir)/emmentaler-brace.otf\ - $(outdir)/emmentaler-brace.svg\ - $(outdir)/emmentaler-brace.woff: $(BRACES:%=$(outdir)/feta-braces-%.pfb) - $(outdir)/emmentaler-brace.fontname: printf 'emmentaler-brace' > $@ $(outdir)/emmentaler-brace.subfonts: echo $(subst .mf,,$(call src-wildcard,feta-braces-[a-z].mf)) > $@ -$(PE_SCRIPTS): $(buildscript-dir)/gen-emmentaler-scripts - $< --dir=$(outdir) - +$(outdir)/emmentaler-%.genpe: $(buildscript-dir)/gen-emmentaler-scripts + $< --dir=$(outdir) --design-size=$(patsubst emmentaler-%.genpe,%,$(notdir $@)) -# Generate emmentaler-*.pe scripts first, and *.otf, *.svg, *.woff files last, -# so that normally these files aren't regenerated on a subsequent call to make. -ALL_GEN_FILES = $(PE_SCRIPTS) \ - $(LOG_FILES) \ - $(ENC_FILES) \ - $(LISP_FILES) \ - $(OTF_TABLES) \ +ALL_GEN_FILES = $(ENC_FILES) \ $(NCSB_OTFS) \ $(OTF_FILES) \ $(SVG_FILES) \ @@ -123,16 +94,20 @@ INSTALLATION_OUT_FILES2 = $(SVG_FILES) $(WOFF_FILES) export MFINPUTS := .:$(MFINPUTS) +# A few rules here generate multiple files from one command line. For +# treating this case, we only declare one output explicitly, and use a +# dummy rules for the other outputs. The dummy rule uses +# $(UPDATE_TARGET) so the order of writing in the real command does +# not confuse make. +UPDATE_TARGET = if test -f $@; then touch $@ ; fi + # only for fonts which # # 1. are mentioned in font.scm # # 2. are not included with teTeX # -$(outdir)/%.lisp \ -$(outdir)/%.otf-gtable \ -$(outdir)/%.enc \ -$(outdir)/%.pe: $(outdir)/%.log $(outdir)/%.tfm +$(outdir)/%.lisp: $(outdir)/%.log $(outdir)/%.tfm $(buildscript-dir)/mf-to-table \ --global-lisp=$(outdir)/$('$(shell cd $(outdir); pwd)'' > $@ -$(NCSB_OTFS): $(NCSB_SOURCE_FILES) \ + +$(outdir)/CenturySchL-Roma.otf: $(NCSB_SOURCE_FILES) \ $(auxscript-dir)/pfx2ttf.fontforge $(foreach i, $(basename $(NCSB_SOURCE_FILES)), \ $(FONTFORGE) -script $(auxscript-dir)/pfx2ttf.fontforge \ $(i).pfb $(i).afm $(outdir)/ && ) true -# eof + +$(addprefix $(outdir)/,CenturySchL-Ital.otf \ + CenturySchL-Bold.otf \ + CenturySchL-BoldItal.otf): $(outdir)/CenturySchL-Roma.otf + $(UPDATE_TARGET) diff --git a/mf/common-modules-and-initialization.mf b/mf/common-modules-and-initialization.mf new file mode 100644 index 0000000000..764dbd6470 --- /dev/null +++ b/mf/common-modules-and-initialization.mf @@ -0,0 +1,7 @@ + +staffsize# := design_size * pt#; +input debugging-settings; +input feta-autometric; +input feta-macros; +mode_setup; +input feta-params; diff --git a/mf/debugging-settings.mf b/mf/debugging-settings.mf new file mode 100644 index 0000000000..e867713461 --- /dev/null +++ b/mf/debugging-settings.mf @@ -0,0 +1,14 @@ + +% 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; diff --git a/mf/declare-autometric-parameters.mf b/mf/declare-autometric-parameters.mf new file mode 100644 index 0000000000..89bf9212fe --- /dev/null +++ b/mf/declare-autometric-parameters.mf @@ -0,0 +1,9 @@ +% 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#); diff --git a/mf/feta-accidentals.mf b/mf/feta-accidentals.mf index 1130672440..479a8b4a65 100644 --- a/mf/feta-accidentals.mf +++ b/mf/feta-accidentals.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1997--2014 Han-Wen Nienhuys % % 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 @@ -18,21 +18,6 @@ % along with LilyPond. If not, see . -% -% 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 % @@ -56,1266 +41,9 @@ enddef; 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"); diff --git a/mf/feta-accordion.mf b/mf/feta-accordion.mf index 68271bf995..084092a309 100644 --- a/mf/feta-accordion.mf +++ b/mf/feta-accordion.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1998--2014 Han-Wen Nienhuys % % 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 diff --git a/mf/feta-alphabet-generic.mf b/mf/feta-alphabet-generic.mf new file mode 100644 index 0000000000..6af776bea5 --- /dev/null +++ b/mf/feta-alphabet-generic.mf @@ -0,0 +1,19 @@ +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2014 Han-Wen Nienhuys +% +% 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"); diff --git a/mf/feta-alphabet.mf b/mf/feta-alphabet.mf deleted file mode 100644 index 5663a791b7..0000000000 --- a/mf/feta-alphabet.mf +++ /dev/null @@ -1,19 +0,0 @@ -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"); diff --git a/mf/feta-alphabet11.mf b/mf/feta-alphabet11.mf index 04ba4e3867..c9e10df325 100644 --- a/mf/feta-alphabet11.mf +++ b/mf/feta-alphabet11.mf @@ -1,6 +1,6 @@ -% 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. diff --git a/mf/feta-alphabet13.mf b/mf/feta-alphabet13.mf index d314f40d4d..56924fb199 100644 --- a/mf/feta-alphabet13.mf +++ b/mf/feta-alphabet13.mf @@ -1,6 +1,6 @@ -% 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. diff --git a/mf/feta-alphabet14.mf b/mf/feta-alphabet14.mf index 9a1bd2ee71..8db8b63da7 100644 --- a/mf/feta-alphabet14.mf +++ b/mf/feta-alphabet14.mf @@ -1,6 +1,6 @@ -% 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. diff --git a/mf/feta-alphabet16.mf b/mf/feta-alphabet16.mf index 86eb9c8c89..e93d0e61c0 100644 --- a/mf/feta-alphabet16.mf +++ b/mf/feta-alphabet16.mf @@ -1,6 +1,6 @@ -% 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. diff --git a/mf/feta-alphabet18.mf b/mf/feta-alphabet18.mf index db216c154b..30441bbd9b 100644 --- a/mf/feta-alphabet18.mf +++ b/mf/feta-alphabet18.mf @@ -1,6 +1,6 @@ -% 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. diff --git a/mf/feta-alphabet20.mf b/mf/feta-alphabet20.mf index 0affe39057..3d86449713 100644 --- a/mf/feta-alphabet20.mf +++ b/mf/feta-alphabet20.mf @@ -1,7 +1,6 @@ -% 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. diff --git a/mf/feta-alphabet23.mf b/mf/feta-alphabet23.mf index c8a725e59e..ffd3381ce4 100644 --- a/mf/feta-alphabet23.mf +++ b/mf/feta-alphabet23.mf @@ -1,7 +1,6 @@ -% 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. diff --git a/mf/feta-alphabet26.mf b/mf/feta-alphabet26.mf index 71af0403f9..02170ec89d 100644 --- a/mf/feta-alphabet26.mf +++ b/mf/feta-alphabet26.mf @@ -1,6 +1,6 @@ -% 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. diff --git a/mf/feta-arrow.mf b/mf/feta-arrow.mf new file mode 100644 index 0000000000..fab1bf1ba4 --- /dev/null +++ b/mf/feta-arrow.mf @@ -0,0 +1,82 @@ + +% +% 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; diff --git a/mf/feta-arrowheads.mf b/mf/feta-arrowheads.mf index e202692182..81100ead09 100644 --- a/mf/feta-arrowheads.mf +++ b/mf/feta-arrowheads.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2005--2014 Han-Wen Nienhuys % % 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 diff --git a/mf/feta-autometric.mf b/mf/feta-autometric.mf index e24f1605db..7f7adc7d94 100644 --- a/mf/feta-autometric.mf +++ b/mf/feta-autometric.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1997--2014 Han-Wen Nienhuys % Jan Nieuwenhuizen % % These macros help create ascii logging output diff --git a/mf/feta-braces-a.mf b/mf/feta-braces-a.mf index 1210262421..8cf00c4efe 100644 --- a/mf/feta-braces-a.mf +++ b/mf/feta-braces-a.mf @@ -1,22 +1,5 @@ % 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 -% -% -% 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 . font_count := 0; -input feta-braces; +input feta-braces-generic; end. diff --git a/mf/feta-braces-b.mf b/mf/feta-braces-b.mf index df91510af7..c6a02a08e4 100644 --- a/mf/feta-braces-b.mf +++ b/mf/feta-braces-b.mf @@ -1,22 +1,5 @@ % 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 -% -% -% 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 . font_count := 1; -input feta-braces; +input feta-braces-generic; end. diff --git a/mf/feta-braces-c.mf b/mf/feta-braces-c.mf index 87fc66047d..591065d303 100644 --- a/mf/feta-braces-c.mf +++ b/mf/feta-braces-c.mf @@ -1,22 +1,5 @@ % 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 -% -% -% 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 . font_count := 2; -input feta-braces; +input feta-braces-generic; end. diff --git a/mf/feta-braces-d.mf b/mf/feta-braces-d.mf index ffad571c0c..a2ef2510a3 100644 --- a/mf/feta-braces-d.mf +++ b/mf/feta-braces-d.mf @@ -1,22 +1,5 @@ % 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 -% -% -% 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 . font_count := 3; -input feta-braces; +input feta-braces-generic; end. diff --git a/mf/feta-braces-e.mf b/mf/feta-braces-e.mf index a0b130bdad..dfdb94fd7e 100644 --- a/mf/feta-braces-e.mf +++ b/mf/feta-braces-e.mf @@ -1,22 +1,5 @@ % 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 -% -% -% 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 . font_count := 4; -input feta-braces; +input feta-braces-generic; end. diff --git a/mf/feta-braces-f.mf b/mf/feta-braces-f.mf index ad31d2bcc8..866c543539 100644 --- a/mf/feta-braces-f.mf +++ b/mf/feta-braces-f.mf @@ -1,22 +1,5 @@ % 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 -% -% -% 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 . font_count := 5; -input feta-braces; +input feta-braces-generic; end. diff --git a/mf/feta-braces-g.mf b/mf/feta-braces-g.mf index 545ca5a855..4347abe688 100644 --- a/mf/feta-braces-g.mf +++ b/mf/feta-braces-g.mf @@ -1,22 +1,5 @@ % 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 -% -% -% 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 . font_count := 6; -input feta-braces; +input feta-braces-generic; end. diff --git a/mf/feta-braces-generic.mf b/mf/feta-braces-generic.mf new file mode 100644 index 0000000000..cb3b1b4318 --- /dev/null +++ b/mf/feta-braces-generic.mf @@ -0,0 +1,47 @@ +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2014 Han-Wen Nienhuys +% Jan Nieuwenhuizen +% +% 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"); diff --git a/mf/feta-braces-h.mf b/mf/feta-braces-h.mf index 646e153106..dda3ce2069 100644 --- a/mf/feta-braces-h.mf +++ b/mf/feta-braces-h.mf @@ -1,22 +1,5 @@ % 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 -% -% -% 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 . font_count := 7; -input feta-braces; +input feta-braces-generic; end. diff --git a/mf/feta-braces-i.mf b/mf/feta-braces-i.mf index 0f3fcd3567..29d519112b 100644 --- a/mf/feta-braces-i.mf +++ b/mf/feta-braces-i.mf @@ -1,22 +1,5 @@ % 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 -% -% -% 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 . font_count := 8; -input feta-braces; +input feta-braces-generic; end. diff --git a/mf/feta-braces.mf b/mf/feta-braces.mf index c948f345fd..5cec96670e 100644 --- a/mf/feta-braces.mf +++ b/mf/feta-braces.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1997--2014 Han-Wen Nienhuys % Jan Nieuwenhuizen % % The LilyPond font is free software: you can redistribute it and/or modify @@ -17,49 +17,11 @@ % You should have received a copy of the GNU General Public License % along with LilyPond. If not, see . - -% 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; @@ -160,5 +122,3 @@ for i := 0 step 1 until font_count: number := number + 1; endfor; endfor; - -fet_endfont ("feta-braces"); diff --git a/mf/feta-brackettips.mf b/mf/feta-brackettips.mf index d3b29cab54..98928d7125 100644 --- a/mf/feta-brackettips.mf +++ b/mf/feta-brackettips.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2005--2014 Han-Wen Nienhuys % % 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 diff --git a/mf/feta-clefs.mf b/mf/feta-clefs.mf index d76b341453..3c762d6ee4 100644 --- a/mf/feta-clefs.mf +++ b/mf/feta-clefs.mf @@ -1,7 +1,7 @@ % 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 , +% Copyright (C) 1997--2014 Han-Wen Nienhuys , % Jan Nieuwenhuizen , % Juergen Reuter % @@ -21,6 +21,65 @@ 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'. @@ -105,7 +164,7 @@ def draw_c_clef (expr reduction) = % ugh, should be bulb, not flare? - draw_staff (-2, 2, 0); + draw_staff_if_debugging (-2, 2); enddef; @@ -118,65 +177,79 @@ fet_beginchar ("C clef", "C_change"); 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. % @@ -270,7 +343,7 @@ def draw_bass_clef (expr exact_center, reduction) = penlabels (1, 2, 3, 4, 5, 6); - draw_staff (-3, 1, 0); + draw_staff_if_debugging (-3, 1); enddef; @@ -302,14 +375,15 @@ fet_endchar; 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_; @@ -337,7 +411,7 @@ def draw_gclef (expr reduction) = 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); @@ -447,24 +521,25 @@ def draw_gclef (expr reduction) = .. 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_} @@ -474,27 +549,120 @@ def draw_gclef (expr reduction) = .. 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; %%%% % @@ -522,7 +690,7 @@ def draw_percussion_clef (expr reduction) = 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; @@ -535,6 +703,49 @@ fet_beginchar ("percussion clef (reduced)", "percussion_change"); 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; @@ -729,7 +940,7 @@ def draw_tab_clef (expr reduction) = 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; diff --git a/mf/feta-dots.mf b/mf/feta-dots.mf index be38847a2c..291ff6a402 100644 --- a/mf/feta-dots.mf +++ b/mf/feta-dots.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1997--2014 Han-Wen Nienhuys % % 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 diff --git a/mf/feta-dynamics.mf b/mf/feta-dynamics.mf index c1b7c43a6a..cbb559c73a 100644 --- a/mf/feta-dynamics.mf +++ b/mf/feta-dynamics.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1997--2014 Jan Nieuwenhuizen % % 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 diff --git a/mf/feta-flags-generic.mf b/mf/feta-flags-generic.mf index 947cc8a35a..92601599bb 100644 --- a/mf/feta-flags-generic.mf +++ b/mf/feta-flags-generic.mf @@ -1,46 +1,19 @@ -% 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 +% Copyright (C) 1997--2014 Han-Wen Nienhuys % % 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 . - - -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; diff --git a/mf/feta-flags.mf b/mf/feta-flags.mf index 2cd890f3b0..1cfeae57b0 100644 --- a/mf/feta-flags.mf +++ b/mf/feta-flags.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1997--2014 Han-Wen Nienhuys % % 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 diff --git a/mf/feta-flags11.mf b/mf/feta-flags11.mf index 30cd7f0976..8026bf499d 100644 --- a/mf/feta-flags11.mf +++ b/mf/feta-flags11.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-flags13.mf b/mf/feta-flags13.mf index 3210b1abc1..51e508fee3 100644 --- a/mf/feta-flags13.mf +++ b/mf/feta-flags13.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-flags14.mf b/mf/feta-flags14.mf index 9a5449cc5d..22055a8cc2 100644 --- a/mf/feta-flags14.mf +++ b/mf/feta-flags14.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-flags16.mf b/mf/feta-flags16.mf index d02993736a..3e706e7d23 100644 --- a/mf/feta-flags16.mf +++ b/mf/feta-flags16.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-flags18.mf b/mf/feta-flags18.mf index dcaefd440d..a15fea7560 100644 --- a/mf/feta-flags18.mf +++ b/mf/feta-flags18.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-flags20.mf b/mf/feta-flags20.mf index b7b834ecc4..9eedbeb78d 100644 --- a/mf/feta-flags20.mf +++ b/mf/feta-flags20.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-flags23.mf b/mf/feta-flags23.mf index dcd640c8a9..1500a15110 100644 --- a/mf/feta-flags23.mf +++ b/mf/feta-flags23.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-flags26.mf b/mf/feta-flags26.mf index b2a1fe616f..322213b562 100644 --- a/mf/feta-flags26.mf +++ b/mf/feta-flags26.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-flats.mf b/mf/feta-flats.mf new file mode 100644 index 0000000000..b7470e2fec --- /dev/null +++ b/mf/feta-flats.mf @@ -0,0 +1,535 @@ + +% +% 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; diff --git a/mf/feta-generic.mf b/mf/feta-generic.mf deleted file mode 100644 index 0d253ce653..0000000000 --- a/mf/feta-generic.mf +++ /dev/null @@ -1,60 +0,0 @@ -% 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 -% -% 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 . - - -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; diff --git a/mf/feta-macros.mf b/mf/feta-macros.mf index c464c3f7f8..197dc86bf4 100644 --- a/mf/feta-macros.mf +++ b/mf/feta-macros.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1997--2014 Han-Wen Nienhuys % % 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 @@ -21,6 +21,7 @@ % debugging % + def print_penpos (suffix $) = message "z" & str$ & "l = (" & decimal x.$.l & ", " &decimal y.$.l & ");" @@ -50,15 +51,15 @@ def treq = 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; diff --git a/mf/feta-naturals.mf b/mf/feta-naturals.mf new file mode 100644 index 0000000000..3c824c78c9 --- /dev/null +++ b/mf/feta-naturals.mf @@ -0,0 +1,163 @@ + +% +% 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; diff --git a/mf/feta-noteheads-generic.mf b/mf/feta-noteheads-generic.mf index 3c255073c8..d71ba2535e 100644 --- a/mf/feta-noteheads-generic.mf +++ b/mf/feta-noteheads-generic.mf @@ -1,46 +1,19 @@ -% 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 +% Copyright (C) 1997--2014 Han-Wen Nienhuys % % 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 . - - -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; diff --git a/mf/feta-noteheads.mf b/mf/feta-noteheads.mf index 82abf14e54..c50a6e8b99 100644 --- a/mf/feta-noteheads.mf +++ b/mf/feta-noteheads.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1997--2014 Jan Nieuwenhuizen % & Han-Wen Nienhuys % & Juergen Reuter % @@ -21,16 +21,11 @@ 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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -159,33 +154,17 @@ enddef; 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; @@ -253,35 +232,17 @@ enddef; 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, @@ -289,60 +250,26 @@ fet_beginchar ("Whole notehead", "s0"); 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; - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -351,58 +278,26 @@ fet_beginchar ("Whole diamondhead", "s0diamond"); 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; - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -561,19 +456,10 @@ enddef; 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; @@ -595,14 +481,14 @@ enddef; 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; @@ -623,14 +509,14 @@ enddef; 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; @@ -707,21 +593,21 @@ enddef; 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; @@ -835,28 +721,10 @@ fet_beginchar ("Whole Crossed notehead", "s0cross"); 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; @@ -867,28 +735,10 @@ fet_beginchar ("Half Crossed notehead", "s1cross"); 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#; @@ -896,25 +746,10 @@ fet_beginchar ("Crossed notehead", "s2cross"); 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; @@ -960,29 +795,10 @@ fet_beginchar ("X-Circled notehead", "s2xcircle"); 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 @@ -1406,66 +1222,65 @@ def draw_mi_head (expr width_factor, thickness_factor, mirror) = 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; @@ -1630,11 +1445,12 @@ 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"); @@ -2150,12 +1966,11 @@ fet_endchar; % 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; @@ -2163,7 +1978,7 @@ fet_endchar; 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; @@ -2171,7 +1986,7 @@ fet_endchar; 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; @@ -2179,7 +1994,7 @@ fet_endchar; 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; @@ -2187,7 +2002,7 @@ fet_endchar; 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; @@ -2253,7 +2068,7 @@ begingroup 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; @@ -2695,7 +2510,7 @@ fet_endchar; % 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"); diff --git a/mf/feta-noteheads11.mf b/mf/feta-noteheads11.mf index b02844a196..cba81dee23 100644 --- a/mf/feta-noteheads11.mf +++ b/mf/feta-noteheads11.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-noteheads13.mf b/mf/feta-noteheads13.mf index e010769f4b..0516809917 100644 --- a/mf/feta-noteheads13.mf +++ b/mf/feta-noteheads13.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-noteheads14.mf b/mf/feta-noteheads14.mf index 7d25cb2a60..14d3b78b01 100644 --- a/mf/feta-noteheads14.mf +++ b/mf/feta-noteheads14.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-noteheads16.mf b/mf/feta-noteheads16.mf index 755f9ffdd5..8c8370dc59 100644 --- a/mf/feta-noteheads16.mf +++ b/mf/feta-noteheads16.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-noteheads18.mf b/mf/feta-noteheads18.mf index bdc6918bf3..a1e705c48c 100644 --- a/mf/feta-noteheads18.mf +++ b/mf/feta-noteheads18.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-noteheads20.mf b/mf/feta-noteheads20.mf index 072f99207c..9ac9379de2 100644 --- a/mf/feta-noteheads20.mf +++ b/mf/feta-noteheads20.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-noteheads23.mf b/mf/feta-noteheads23.mf index ab0154832e..f6ddb0db44 100644 --- a/mf/feta-noteheads23.mf +++ b/mf/feta-noteheads23.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-noteheads26.mf b/mf/feta-noteheads26.mf index b25d21495c..e72c7012d5 100644 --- a/mf/feta-noteheads26.mf +++ b/mf/feta-noteheads26.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/feta-numbers.mf b/mf/feta-numbers.mf index 8ec75697ae..15c82bd2e0 100644 --- a/mf/feta-numbers.mf +++ b/mf/feta-numbers.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1997--2014 Jan Nieuwenhuizen % % 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 diff --git a/mf/feta-other-generic.mf b/mf/feta-other-generic.mf new file mode 100644 index 0000000000..65df83165a --- /dev/null +++ b/mf/feta-other-generic.mf @@ -0,0 +1,29 @@ +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 1997--2014 Han-Wen Nienhuys +% +% 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; diff --git a/mf/feta-params.mf b/mf/feta-params.mf index 8336df3306..c771e4e44a 100644 --- a/mf/feta-params.mf +++ b/mf/feta-params.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1997--2014 Han-Wen Nienhuys % % 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 diff --git a/mf/feta-parenthesis.mf b/mf/feta-parenthesis.mf new file mode 100644 index 0000000000..ad2561a596 --- /dev/null +++ b/mf/feta-parenthesis.mf @@ -0,0 +1,44 @@ + + +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; diff --git a/mf/feta-pedals.mf b/mf/feta-pedals.mf index b4979ca4a6..7e992f35cb 100644 --- a/mf/feta-pedals.mf +++ b/mf/feta-pedals.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2000--2014 Jan Nieuwenhuizen % % Voor Cup % diff --git a/mf/feta-rests.mf b/mf/feta-rests.mf index 09439853a0..0a9d7ea43d 100644 --- a/mf/feta-rests.mf +++ b/mf/feta-rests.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1997--2014 Jan Nieuwenhuizen % % 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 @@ -43,7 +43,7 @@ fet_beginchar ("whole rest", "0"); currentpicture := currentpicture shifted (0, -block_rest_y + feta_space_shift); - draw_staff (-2, 2, 0); + draw_staff_if_debugging (-2, 2); fet_endchar; @@ -52,7 +52,7 @@ fet_beginchar ("half rest", "1"); block_rest; - draw_staff (-2, 2, 0); + draw_staff_if_debugging (-2, 2); fet_endchar; @@ -72,8 +72,6 @@ fet_beginchar ("whole rest (outside staff)", "0o"); 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; @@ -90,8 +88,6 @@ fet_beginchar ("half rest (outside staff)", "1o"); rt x6 = w + block_rest_y; draw_gridline (z5, z6, ledgerlinethickness_rounded); - - draw_staff (-2, 2, 3); fet_endchar; @@ -103,7 +99,7 @@ fet_beginchar ("maxima rest", "M3"); addto currentpicture also currentpicture shifted (2 breve_rest_x, 0); - draw_staff (-2, 2, 0); + draw_staff_if_debugging (-2, 2); fet_endchar; @@ -113,7 +109,7 @@ fet_beginchar ("longa rest", "M2"); 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; @@ -122,7 +118,7 @@ fet_beginchar ("breve rest", "M1"); 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"); @@ -139,8 +135,6 @@ 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; @@ -226,7 +220,7 @@ fet_beginchar ("Quarter rest", "2"); 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; @@ -374,7 +368,7 @@ def draw_eighth_rest (expr show_labels) = -- z1l .. cycle; - draw_staff (-2, 2, 0); + draw_staff_if_debugging (-2, 2); enddef; @@ -440,7 +434,7 @@ fet_beginchar ("16th rest", "4"); penlabels (1, 2); labels (9); - draw_staff (-2, 2, 0); + draw_staff_if_debugging (-2, 2); fet_endchar; @@ -494,7 +488,7 @@ fet_beginchar ("32th rest", "5"); penlabels (1, 2); labels (9); - draw_staff (-2, 2, 0); + draw_staff_if_debugging (-2, 2); fet_endchar; @@ -552,7 +546,7 @@ fet_beginchar ("64th rest", "6"); penlabels (1, 2); labels (9); - draw_staff (-2, 2, 0); + draw_staff_if_debugging (-2, 2); fet_endchar; @@ -614,7 +608,7 @@ fet_beginchar ("128th rest", "7"); penlabels (1, 2); labels (9); - draw_staff (-2, 2, 0); + draw_staff_if_debugging (-2, 2); fet_endchar; diff --git a/mf/feta-scripts.mf b/mf/feta-scripts.mf index 91c3ae1fe4..e7f3c66eb8 100644 --- a/mf/feta-scripts.mf +++ b/mf/feta-scripts.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1997--2014 Han-Wen Nienhuys % Jan Nieuwenhuizen % % @@ -1277,7 +1277,6 @@ fet_beginchar ("Varied Segno", "varsegno"); 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; @@ -1495,7 +1494,7 @@ fet_beginchar ("Arpeggio", "arpeggio"); draw_arpeggio; penlabels (range 1 thru 9); - draw_staff (-2, 2, 0.0); + draw_staff_if_debugging (-2, 2); endgroup; fet_endchar; diff --git a/mf/feta-sharps.mf b/mf/feta-sharps.mf new file mode 100644 index 0000000000..eeade7d207 --- /dev/null +++ b/mf/feta-sharps.mf @@ -0,0 +1,339 @@ + +% +% 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; diff --git a/mf/feta-test-generic.mf b/mf/feta-test-generic.mf deleted file mode 100644 index a910b52c5a..0000000000 --- a/mf/feta-test-generic.mf +++ /dev/null @@ -1,17 +0,0 @@ -% -% 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; diff --git a/mf/feta-test11.mf b/mf/feta-test11.mf deleted file mode 100644 index ad21720acc..0000000000 --- a/mf/feta-test11.mf +++ /dev/null @@ -1,15 +0,0 @@ -% 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. - diff --git a/mf/feta-test13.mf b/mf/feta-test13.mf deleted file mode 100644 index 28abf42cd5..0000000000 --- a/mf/feta-test13.mf +++ /dev/null @@ -1,16 +0,0 @@ -% 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. - diff --git a/mf/feta-test16.mf b/mf/feta-test16.mf deleted file mode 100644 index eaa280aa43..0000000000 --- a/mf/feta-test16.mf +++ /dev/null @@ -1,16 +0,0 @@ -% 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. - diff --git a/mf/feta-test20.mf b/mf/feta-test20.mf deleted file mode 100644 index 5a58be3dd6..0000000000 --- a/mf/feta-test20.mf +++ /dev/null @@ -1,16 +0,0 @@ -% 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. - diff --git a/mf/feta-test23.mf b/mf/feta-test23.mf deleted file mode 100644 index 5a25b4691c..0000000000 --- a/mf/feta-test23.mf +++ /dev/null @@ -1,16 +0,0 @@ -% 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. - diff --git a/mf/feta-test26.mf b/mf/feta-test26.mf deleted file mode 100644 index e9e1521834..0000000000 --- a/mf/feta-test26.mf +++ /dev/null @@ -1,15 +0,0 @@ -% 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. diff --git a/mf/feta-ties.mf b/mf/feta-ties.mf index 6df5e7ca5c..dda925e396 100644 --- a/mf/feta-ties.mf +++ b/mf/feta-ties.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2011--2014 Bertrand Bordage % % 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 diff --git a/mf/feta-timesignatures.mf b/mf/feta-timesignatures.mf index 0098f0ad42..9b6c8e654a 100644 --- a/mf/feta-timesignatures.mf +++ b/mf/feta-timesignatures.mf @@ -1,7 +1,7 @@ % 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 , +% Copyright (C) 1998--2014 Mats Bengtsson , % Christian Mondrup % % The LilyPond font is free software: you can redistribute it and/or modify @@ -90,7 +90,7 @@ def draw_C = penlabels (1, 2, 3, 4, 5); - draw_staff (-2, 2, 0); + draw_staff_if_debugging (-2, 2); enddef; diff --git a/mf/feta-trills.mf b/mf/feta-trills.mf index ea63af0bfb..f2292b1d6e 100644 --- a/mf/feta-trills.mf +++ b/mf/feta-trills.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 1998--2014 Jan Nieuwenhuizen % % 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 diff --git a/mf/feta11.mf b/mf/feta11.mf index be6a6a7e10..ddc0f0d292 100644 --- a/mf/feta11.mf +++ b/mf/feta11.mf @@ -1,13 +1,6 @@ -% 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. - diff --git a/mf/feta13.mf b/mf/feta13.mf index 5014c12342..37871789ce 100644 --- a/mf/feta13.mf +++ b/mf/feta13.mf @@ -1,13 +1,6 @@ -% 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. - diff --git a/mf/feta14.mf b/mf/feta14.mf index 23ac8e4d15..a70db3e136 100644 --- a/mf/feta14.mf +++ b/mf/feta14.mf @@ -1,14 +1,6 @@ -% 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. - diff --git a/mf/feta16.mf b/mf/feta16.mf index 174460b715..d38c756bf7 100644 --- a/mf/feta16.mf +++ b/mf/feta16.mf @@ -1,13 +1,6 @@ -% 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. - diff --git a/mf/feta18.mf b/mf/feta18.mf index b52f6a3e35..d69ff7ccce 100644 --- a/mf/feta18.mf +++ b/mf/feta18.mf @@ -1,14 +1,6 @@ -% 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. diff --git a/mf/feta20.mf b/mf/feta20.mf index 2b561b200d..eafc6fa163 100644 --- a/mf/feta20.mf +++ b/mf/feta20.mf @@ -1,14 +1,7 @@ -% 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. diff --git a/mf/feta23.mf b/mf/feta23.mf index d2cf0025e9..0a0be5cae0 100644 --- a/mf/feta23.mf +++ b/mf/feta23.mf @@ -1,15 +1,6 @@ -% 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. - diff --git a/mf/feta26.mf b/mf/feta26.mf index 2bfa536618..62ed9540e4 100644 --- a/mf/feta26.mf +++ b/mf/feta26.mf @@ -1,15 +1,6 @@ -% 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. - - diff --git a/mf/parmesan-accidentals.mf b/mf/parmesan-accidentals.mf index f7cf78563b..4aa5f0dba1 100644 --- a/mf/parmesan-accidentals.mf +++ b/mf/parmesan-accidentals.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2001--2014 Juergen Reuter % % 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 diff --git a/mf/parmesan-clefs.mf b/mf/parmesan-clefs.mf index ec6561dc8e..b58b85d672 100644 --- a/mf/parmesan-clefs.mf +++ b/mf/parmesan-clefs.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2001--2014 Juergen Reuter % % 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 @@ -125,9 +125,7 @@ enddef; 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; @@ -194,9 +192,7 @@ enddef; 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; @@ -282,9 +278,7 @@ enddef; 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; @@ -352,9 +346,7 @@ enddef; 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; @@ -589,9 +581,7 @@ enddef; 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; @@ -696,9 +686,7 @@ enddef; 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; @@ -709,9 +697,7 @@ 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; @@ -722,9 +708,7 @@ 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; @@ -735,9 +719,7 @@ 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; @@ -748,9 +730,7 @@ 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; @@ -840,9 +820,7 @@ enddef; 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; @@ -853,9 +831,7 @@ 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; @@ -1034,9 +1010,7 @@ enddef; 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; @@ -1142,9 +1116,7 @@ enddef; 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; @@ -1374,9 +1346,7 @@ enddef; 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; @@ -1408,9 +1378,7 @@ enddef; % 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; @@ -1499,9 +1467,7 @@ enddef; 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; @@ -1595,9 +1561,7 @@ enddef; 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; @@ -1619,9 +1583,7 @@ enddef; 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; diff --git a/mf/parmesan-custodes.mf b/mf/parmesan-custodes.mf index 08bf714858..58def35632 100644 --- a/mf/parmesan-custodes.mf +++ b/mf/parmesan-custodes.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2000--2014 Juergen Reuter % % 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 diff --git a/mf/parmesan-dots.mf b/mf/parmesan-dots.mf index 86a8ee7f4c..97a6825a93 100644 --- a/mf/parmesan-dots.mf +++ b/mf/parmesan-dots.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2006--2014 Juergen Reuter % % 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 diff --git a/mf/parmesan-flags.mf b/mf/parmesan-flags.mf index 9c136745d6..41d3fa922f 100644 --- a/mf/parmesan-flags.mf +++ b/mf/parmesan-flags.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2001--2014 Juergen Reuter % % 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 diff --git a/mf/parmesan-generic.mf b/mf/parmesan-generic.mf deleted file mode 100644 index 31b35ff25b..0000000000 --- a/mf/parmesan-generic.mf +++ /dev/null @@ -1,50 +0,0 @@ -% 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 -% -% 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 . - - -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; diff --git a/mf/parmesan-macros.mf b/mf/parmesan-macros.mf index a42a1db393..04e26d402e 100644 --- a/mf/parmesan-macros.mf +++ b/mf/parmesan-macros.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2001--2014 Juergen Reuter % % % The LilyPond font is free software: you can redistribute it and/or modify diff --git a/mf/parmesan-noteheads-generic.mf b/mf/parmesan-noteheads-generic.mf index a4103791ff..be328f1158 100644 --- a/mf/parmesan-noteheads-generic.mf +++ b/mf/parmesan-noteheads-generic.mf @@ -1,34 +1,14 @@ -% 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 +% Copyright (C) 1997--2014 Han-Wen Nienhuys % % 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 . - - -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#; diff --git a/mf/parmesan-noteheads.mf b/mf/parmesan-noteheads.mf index cf1bfae111..c66a6315c7 100644 --- a/mf/parmesan-noteheads.mf +++ b/mf/parmesan-noteheads.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2001--2014 Juergen Reuter % % Neo-mensural heads originally by % Christian Mondrup and Mats Bengtsson diff --git a/mf/parmesan-noteheads11.mf b/mf/parmesan-noteheads11.mf index 288695a45e..4f35548ff1 100644 --- a/mf/parmesan-noteheads11.mf +++ b/mf/parmesan-noteheads11.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/parmesan-noteheads13.mf b/mf/parmesan-noteheads13.mf index ad126423aa..13cedf0b14 100644 --- a/mf/parmesan-noteheads13.mf +++ b/mf/parmesan-noteheads13.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/parmesan-noteheads14.mf b/mf/parmesan-noteheads14.mf index f5d3a41df7..4c41de5149 100644 --- a/mf/parmesan-noteheads14.mf +++ b/mf/parmesan-noteheads14.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/parmesan-noteheads16.mf b/mf/parmesan-noteheads16.mf index 3db517fa04..53f67ceb68 100644 --- a/mf/parmesan-noteheads16.mf +++ b/mf/parmesan-noteheads16.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/parmesan-noteheads18.mf b/mf/parmesan-noteheads18.mf index ed0f99ec0e..4fcc73d5c4 100644 --- a/mf/parmesan-noteheads18.mf +++ b/mf/parmesan-noteheads18.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/parmesan-noteheads20.mf b/mf/parmesan-noteheads20.mf index 8891652bb8..3d2d91ff28 100644 --- a/mf/parmesan-noteheads20.mf +++ b/mf/parmesan-noteheads20.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/parmesan-noteheads23.mf b/mf/parmesan-noteheads23.mf index fe64e6f496..7a0d3bfd93 100644 --- a/mf/parmesan-noteheads23.mf +++ b/mf/parmesan-noteheads23.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/parmesan-noteheads26.mf b/mf/parmesan-noteheads26.mf index 082ffc208d..f7cb63aa90 100644 --- a/mf/parmesan-noteheads26.mf +++ b/mf/parmesan-noteheads26.mf @@ -1,13 +1,5 @@ -% 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. - diff --git a/mf/parmesan-other-generic.mf b/mf/parmesan-other-generic.mf new file mode 100644 index 0000000000..e7214d6c61 --- /dev/null +++ b/mf/parmesan-other-generic.mf @@ -0,0 +1,26 @@ +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2002--2014 Juergen Reuter +% +% 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; diff --git a/mf/parmesan-rests.mf b/mf/parmesan-rests.mf index d238211b7e..d3f75b6ff6 100644 --- a/mf/parmesan-rests.mf +++ b/mf/parmesan-rests.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2001--2014 Juergen Reuter % % Neo-mensural rests originally by % Christian Mondrup and Mats Bengtsson. diff --git a/mf/parmesan-scripts.mf b/mf/parmesan-scripts.mf index cc96bbc465..b7ad2fb9ca 100644 --- a/mf/parmesan-scripts.mf +++ b/mf/parmesan-scripts.mf @@ -1,7 +1,7 @@ % 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 +% Copyright (C) 2002--2014 Juergen Reuter % % % The LilyPond font is free software: you can redistribute it and/or modify diff --git a/mf/parmesan-timesignatures.mf b/mf/parmesan-timesignatures.mf index ef0fa621a5..f3d218a8ca 100644 --- a/mf/parmesan-timesignatures.mf +++ b/mf/parmesan-timesignatures.mf @@ -1,9 +1,9 @@ % 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 , +% Copyright (C) 1998--2014 Mats Bengtsson , % Christian Mondrup -% Copyright (C) 2002--2012 Juergen Reuter +% Copyright (C) 2002--2014 Juergen Reuter % % 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 diff --git a/mf/parmesan11.mf b/mf/parmesan11.mf index 27ba341437..050559744f 100644 --- a/mf/parmesan11.mf +++ b/mf/parmesan11.mf @@ -1,13 +1,6 @@ -% 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. - diff --git a/mf/parmesan13.mf b/mf/parmesan13.mf index 905da48d5d..8e139d450d 100644 --- a/mf/parmesan13.mf +++ b/mf/parmesan13.mf @@ -1,14 +1,6 @@ -% 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. - diff --git a/mf/parmesan14.mf b/mf/parmesan14.mf index 6357337be2..2eb056525f 100644 --- a/mf/parmesan14.mf +++ b/mf/parmesan14.mf @@ -1,14 +1,5 @@ -% 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. - diff --git a/mf/parmesan16.mf b/mf/parmesan16.mf index 19b0516779..d8dd45d2ff 100644 --- a/mf/parmesan16.mf +++ b/mf/parmesan16.mf @@ -1,14 +1,6 @@ -% 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. - diff --git a/mf/parmesan18.mf b/mf/parmesan18.mf index 8c28507046..cd1052b3ae 100644 --- a/mf/parmesan18.mf +++ b/mf/parmesan18.mf @@ -1,14 +1,6 @@ -% 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. - diff --git a/mf/parmesan20.mf b/mf/parmesan20.mf index d14251edce..a7e8452c6f 100644 --- a/mf/parmesan20.mf +++ b/mf/parmesan20.mf @@ -1,14 +1,6 @@ -% 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. - diff --git a/mf/parmesan23.mf b/mf/parmesan23.mf index 39b643732b..e47b714b5c 100644 --- a/mf/parmesan23.mf +++ b/mf/parmesan23.mf @@ -1,14 +1,6 @@ -% 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. - diff --git a/mf/parmesan26.mf b/mf/parmesan26.mf index 1be6fb5191..925ceaa8ab 100644 --- a/mf/parmesan26.mf +++ b/mf/parmesan26.mf @@ -1,14 +1,6 @@ -% 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. - diff --git a/po/ca.po b/po/ca.po index 519b5aaf05..c7cdb60f2a 100644 --- a/po/ca.po +++ b/po/ca.po @@ -1,5 +1,5 @@ # 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 , 2013. # @@ -1551,12 +1551,12 @@ msgstr "" #: musicxml2ly.py:2576 msgid "" -"Copyright (c) 2005--2012 by\n" +"Copyright (c) 2005--2014 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" msgstr "" -"Copyright (c) 2005--2012 per\n" +"Copyright (c) 2005--2014 per\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen i\n" " Reinhold Kainhofer \n" diff --git a/po/cs.po b/po/cs.po index 7abaa3a906..23a8e371dc 100644 --- a/po/cs.po +++ b/po/cs.po @@ -1046,12 +1046,12 @@ msgstr "Ukázat tuto nápovědu a ukončit" #: musicxml2ly.py:2574 msgid "" -"Copyright (c) 2005--2012 by\n" +"Copyright (c) 2005--2014 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" msgstr "" -"Autorské právo (c) 2005--2012\n" +"Autorské právo (c) 2005--2014\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen a\n" " Reinhold Kainhofer \n" diff --git a/po/de.po b/po/de.po index 21b0d49c15..b1298eb540 100644 --- a/po/de.po +++ b/po/de.po @@ -1,5 +1,5 @@ # 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 , 1999 # Roland Stigge , 2003, 2004, 2005, 2006, 2007 @@ -1552,12 +1552,12 @@ msgstr "" #: musicxml2ly.py:2576 msgid "" -"Copyright (c) 2005--2012 by\n" +"Copyright (c) 2005--2014 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" msgstr "" -"Copyright (c) 2005--2012\n" +"Copyright (c) 2005--2014\n" "····Han-Wen·Nienhuys·,\n" "····Jan·Nieuwenhuizen··and\n" "····Reinhold·Kainhofer·\n" diff --git a/po/el.po b/po/el.po index 62b018a995..9ef44c3a13 100644 --- a/po/el.po +++ b/po/el.po @@ -1308,12 +1308,12 @@ msgstr "" #: musicxml2ly.py:2669 msgid "" -"Copyright (c) 2005--2011 by\n" +"Copyright (c) 2005--2014 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" msgstr "" -"Copyright (c) 2005--2011 από\n" +"Copyright (c) 2005--2014 από\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen και\n" " Reinhold Kainhofer \n" diff --git a/po/eo.po b/po/eo.po index f52ed60720..fb3de779cf 100644 --- a/po/eo.po +++ b/po/eo.po @@ -1547,12 +1547,12 @@ msgstr "" #: musicxml2ly.py:2576 msgid "" -"Copyright (c) 2005--2012 by\n" +"Copyright (c) 2005--2014 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" msgstr "" -"Kopirajto (c) 2005--2012 de\n" +"Kopirajto (c) 2005--2014 de\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen kaj\n" " Reinhold Kainhofer \n" diff --git a/po/es.po b/po/es.po index 368931372d..b426376fec 100644 --- a/po/es.po +++ b/po/es.po @@ -1566,12 +1566,12 @@ msgstr "" #: musicxml2ly.py:2576 msgid "" -"Copyright (c) 2005--2012 by\n" +"Copyright (c) 2005--2014 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" msgstr "" -"Copyright (c) 2005--2012 por\n" +"Copyright (c) 2005--2014 por\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen y\n" " Reinhold Kainhofer \n" diff --git a/po/fr.po b/po/fr.po index a57aa8f398..f619630922 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1620,12 +1620,12 @@ msgstr "" #: musicxml2ly.py:2576 msgid "" -"Copyright (c) 2005--2012 by\n" +"Copyright (c) 2005--2014 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" msgstr "" -"Copyright (c) 2005--2012 par\n" +"Copyright (c) 2005--2014 par\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen et\n" " Reinhold Kainhofer \n" diff --git a/po/it.po b/po/it.po index f427b73c21..7992882887 100644 --- a/po/it.po +++ b/po/it.po @@ -1552,12 +1552,12 @@ msgstr "" #: musicxml2ly.py:2576 msgid "" -"Copyright (c) 2005--2012 by\n" +"Copyright (c) 2005--2014 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" msgstr "" -"Copyright (c) 2005--2012 di\n" +"Copyright (c) 2005--2014 di\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen e\n" " Reinhold Kainhofer \n" diff --git a/po/ja.po b/po/ja.po index a3bd2b95de..e8c4849776 100644 --- a/po/ja.po +++ b/po/ja.po @@ -992,7 +992,7 @@ msgstr " -h, --help このヘルプを表示して終了\n" #: musicxml2ly.py:2574 msgid "" -"Copyright (c) 2005--2012 by\n" +"Copyright (c) 2005--2014 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" diff --git a/po/lilypond.pot b/po/lilypond.pot index d3a5448678..558ca2b134 100644 --- a/po/lilypond.pot +++ b/po/lilypond.pot @@ -1,15 +1,15 @@ # 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 , YEAR. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: lilypond 2.17.95\n" +"Project-Id-Version: lilypond 2.19.8\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu." "lilypond.bugs\n" -"POT-Creation-Date: 2013-11-04 10:26+0100\n" +"POT-Creation-Date: 2014-06-15 16:22+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -36,18 +36,18 @@ msgstr "" msgid "Running `%s' on file `%s' to detect default page settings.\n" msgstr "" -#: book_latex.py:212 book_texinfo.py:228 +#: book_latex.py:219 book_texinfo.py:228 msgid "Unable to auto-detect default settings:\n" msgstr "" -#: book_latex.py:224 book_texinfo.py:240 +#: book_latex.py:231 book_texinfo.py:240 #, python-format msgid "" "Unable to auto-detect default settings:\n" "%s" msgstr "" -#: book_latex.py:247 +#: book_latex.py:254 msgid "cannot detect textwidth from LaTeX" msgstr "" @@ -161,7 +161,7 @@ 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 "" @@ -1036,17 +1036,17 @@ 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" @@ -1054,7 +1054,7 @@ msgid "" "`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." @@ -1497,7 +1497,7 @@ msgstr "" #: musicxml2ly.py:2576 msgid "" -"Copyright (c) 2005--2012 by\n" +"Copyright (c) 2005--2014 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" @@ -1673,12 +1673,12 @@ msgstr "" 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 "" @@ -2009,7 +2009,7 @@ msgstr "" msgid "Asking for broken bound padding at a non-broken bound." msgstr "" -#: hairpin.cc:256 +#: hairpin.cc:257 msgid "decrescendo too small" msgstr "" @@ -2153,7 +2153,7 @@ msgid "" "include-string instead." msgstr "" -#: lily-parser.cc:107 +#: lily-parser.cc:109 msgid "Parsing..." msgstr "" @@ -2470,15 +2470,6 @@ 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 "" @@ -2508,37 +2499,37 @@ 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 "" @@ -2548,37 +2539,37 @@ 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 "" @@ -2593,36 +2584,35 @@ msgid "" "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 @@ -2670,24 +2660,24 @@ msgstr "" 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 "" @@ -2721,14 +2711,10 @@ 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" @@ -2738,11 +2724,11 @@ msgstr "" msgid "unterminated percent repeat" msgstr "" -#: performance.cc:54 +#: performance.cc:55 msgid "Track..." msgstr "" -#: performance.cc:82 +#: performance.cc:90 #, c-format msgid "MIDI output to `%s'..." msgstr "" @@ -2768,7 +2754,7 @@ msgstr "" msgid "no such internal option: %s" msgstr "" -#: property-iterator.cc:100 +#: property-iterator.cc:119 #, c-format msgid "not a grob name, `%s'" msgstr "" @@ -2951,16 +2937,16 @@ msgstr "" msgid "remapping modulo 16" msgstr "" -#: stem-engraver.cc:110 +#: stem-engraver.cc:100 msgid "tremolo duration is too long" msgstr "" -#: stem-engraver.cc:162 +#: stem-engraver.cc:152 #, c-format msgid "adding note head to incompatible stem (type = %d/%d)" msgstr "" -#: stem-engraver.cc:165 +#: stem-engraver.cc:155 msgid "maybe input should specify polyphonic voices" msgstr "" @@ -3118,201 +3104,209 @@ msgstr "" msgid "giving up" msgstr "" -#: parser.yy:158 parser.yy:172 -msgid "Too much lookahead" -msgstr "" - -#: parser.yy:440 parser.yy:750 parser.yy:816 +#: parser.yy:463 parser.yy:847 parser.yy:928 parser.yy:1150 msgid "bad expression type" msgstr "" -#: parser.yy:648 parser.yy:1157 +#: parser.yy:759 parser.yy:1357 parser.yy:1402 msgid "not a context mod" msgstr "" -#: parser.yy:851 -msgid "score expected" +#: parser.yy:954 +msgid "Missing music in \\score" msgstr "" -#: parser.yy:867 +#: parser.yy:991 msgid "\\paper cannot be used in \\score, use \\layout instead" msgstr "" -#: parser.yy:891 +#: parser.yy:1027 +msgid "Spurious expression in \\score" +msgstr "" + +#: parser.yy:1057 msgid "need \\paper for paper block" msgstr "" -#: parser.yy:1031 parser.yy:1053 -msgid "unexpected post-event" +#: parser.yy:1230 +msgid "music expected" msgstr "" -#: parser.yy:1061 -msgid "Ignoring non-music expression" +#: parser.yy:1240 parser.yy:1274 +msgid "unexpected post-event" msgstr "" -#: parser.yy:1073 parser.yy:2494 -msgid "music expected" +#: parser.yy:1282 +msgid "Ignoring non-music expression" msgstr "" -#: parser.yy:1372 +#: parser.yy:1500 msgid "not a symbol" msgstr "" -#: parser.yy:2182 parser.yy:2296 parser.yy:2309 parser.yy:2318 +#: parser.yy:2295 parser.yy:2409 parser.yy:2422 parser.yy:2431 msgid "bad grob property path" msgstr "" -#: parser.yy:2276 +#: parser.yy:2389 msgid "only \\consists and \\remove take non-string argument." msgstr "" -#: parser.yy:2337 +#: parser.yy:2450 msgid "bad context property path" msgstr "" -#: parser.yy:2438 +#: parser.yy:2551 msgid "simple string expected" msgstr "" -#: parser.yy:2456 +#: parser.yy:2569 msgid "symbol expected" msgstr "" -#: parser.yy:2606 +#: parser.yy:2705 msgid "not a rhythmic event" msgstr "" -#: parser.yy:2680 +#: parser.yy:2755 msgid "post-event expected" msgstr "" -#: parser.yy:2689 parser.yy:2694 +#: parser.yy:2764 parser.yy:2769 msgid "have to be in Lyric mode for lyrics" msgstr "" -#: parser.yy:2762 -msgid "expecting string as script definition" +#: parser.yy:2845 +msgid "expecting string or post-event as script definition" msgstr "" -#: parser.yy:2852 +#: parser.yy:2944 msgid "not an articulation" msgstr "" -#: parser.yy:2924 parser.yy:2967 +#: parser.yy:3016 parser.yy:3059 msgid "not a duration" msgstr "" -#: parser.yy:2984 +#: parser.yy:3080 msgid "bass number expected" msgstr "" -#: parser.yy:3083 +#: parser.yy:3172 msgid "have to be in Note mode for notes" msgstr "" -#: parser.yy:3142 +#: parser.yy:3211 msgid "have to be in Chord mode for chords" msgstr "" -#: parser.yy:3157 +#: parser.yy:3254 msgid "markup outside of text script or \\lyricmode" msgstr "" -#: parser.yy:3162 +#: parser.yy:3259 msgid "unrecognized string, not in text script or \\lyricmode" msgstr "" -#: parser.yy:3379 +#: parser.yy:3411 parser.yy:3420 +msgid "not an unsigned integer" +msgstr "" + +#: parser.yy:3494 msgid "not a markup" msgstr "" -#: lexer.ll:224 +#: lexer.ll:193 msgid "stray UTF-8 BOM encountered" msgstr "" -#: lexer.ll:227 +#: lexer.ll:196 msgid "Skipping UTF-8 BOM" msgstr "" -#: lexer.ll:279 +#: lexer.ll:248 #, c-format msgid "Renaming input to: `%s'" msgstr "" -#: lexer.ll:296 +#: lexer.ll:265 msgid "quoted string expected after \\version" msgstr "" -#: lexer.ll:300 +#: lexer.ll:269 msgid "quoted string expected after \\sourcefilename" msgstr "" -#: lexer.ll:304 +#: lexer.ll:273 msgid "integer expected after \\sourcefileline" msgstr "" -#: lexer.ll:331 +#: lexer.ll:300 msgid "\\maininput not allowed outside init files" msgstr "" -#: lexer.ll:355 +#: lexer.ll:324 #, c-format msgid "wrong or undefined identifier: `%s'" msgstr "" -#: lexer.ll:381 +#: lexer.ll:349 msgid "string expected after \\include" msgstr "" -#: lexer.ll:391 +#: lexer.ll:359 msgid "end quote missing" msgstr "" -#: lexer.ll:743 +#: lexer.ll:714 msgid "EOF found inside a comment" msgstr "" -#: lexer.ll:748 +#: lexer.ll:719 msgid "EOF found inside string" msgstr "" -#: lexer.ll:763 +#: lexer.ll:734 msgid "Unfinished main input" msgstr "" -#: lexer.ll:834 +#: lexer.ll:805 #, c-format msgid "invalid character: `%s'" msgstr "" -#: lexer.ll:963 +#: lexer.ll:925 #, c-format msgid "unknown escaped string: `\\%s'" msgstr "" -#: lexer.ll:983 +#: lexer.ll:945 #, c-format msgid "undefined character or shorthand: %s" msgstr "" -#: lexer.ll:1275 +#: lexer.ll:1236 msgid "non-UTF-8 input" msgstr "" -#: lexer.ll:1319 +#: lexer.ll:1280 #, c-format msgid "file too old: %s (oldest supported: %s)" msgstr "" -#: lexer.ll:1320 +#: lexer.ll:1281 msgid "consider updating the input with the convert-ly script" msgstr "" -#: lexer.ll:1326 +#: lexer.ll:1287 #, c-format msgid "program too old: %s (file requires: %s)" msgstr "" +#: auto-beam.scm:147 +msgid "Beam end fits no pattern" +msgstr "" + #: backend-library.scm:27 #, scheme-format msgid "Invoking `~a'..." @@ -3405,53 +3399,49 @@ msgstr "" msgid "no systems found in \\score markup, does it have a \\layout block?" msgstr "" -#: define-markup-commands.scm:2856 +#: define-markup-commands.scm:2907 #, scheme-format msgid "Cannot find glyph ~a" msgstr "" -#: define-markup-commands.scm:3282 +#: define-markup-commands.scm:3333 #, scheme-format msgid "no brace found for point size ~S " msgstr "" -#: define-markup-commands.scm:3283 +#: define-markup-commands.scm:3334 #, scheme-format msgid "defaulting to ~S pt" msgstr "" -#: define-markup-commands.scm:3535 +#: define-markup-commands.scm:3586 #, scheme-format msgid "not a valid duration string: ~a" msgstr "" -#: define-markup-commands.scm:3746 +#: define-markup-commands.scm:3797 #, scheme-format msgid "not a valid duration string: ~a - ignoring" msgstr "" -#: define-music-types.scm:792 +#: define-music-callbacks.scm:114 #, scheme-format -msgid "symbol expected: ~S" +msgid "\\time in mid-measure at ~A" msgstr "" -#: define-music-types.scm:795 +#: define-music-types.scm:791 #, scheme-format -msgid "cannot find music object: ~S" +msgid "symbol expected: ~S" msgstr "" -#: define-music-types.scm:815 +#: define-music-types.scm:794 #, scheme-format -msgid "bad make-music argument: ~S" +msgid "cannot find music object: ~S" msgstr "" -#: define-music-types.scm:827 +#: define-music-types.scm:814 #, scheme-format -msgid "unknown repeat type `~S'" -msgstr "" - -#: define-music-types.scm:828 -msgid "See define-music-types.scm for supported repeats" +msgid "bad make-music argument: ~S" msgstr "" #: define-note-names.scm:972 @@ -3468,17 +3458,17 @@ msgstr "" msgid "Could not find language `~a'. Ignoring." msgstr "" -#: document-backend.scm:132 +#: document-backend.scm:135 #, scheme-format msgid "pair expected in doc ~s" msgstr "" -#: document-backend.scm:189 +#: document-backend.scm:192 #, scheme-format msgid "cannot find interface for property: ~S" msgstr "" -#: document-backend.scm:199 +#: document-backend.scm:202 #, scheme-format msgid "unknown Grob interface: ~S" msgstr "" @@ -3488,17 +3478,17 @@ msgstr "" msgid "Processing ~S..." msgstr "" -#: documentation-lib.scm:176 +#: documentation-lib.scm:175 #, scheme-format msgid "Writing ~S..." msgstr "" -#: documentation-lib.scm:188 +#: documentation-lib.scm:187 #, scheme-format msgid "cannot find description for property `~S' (~S)" msgstr "" -#: documentation-lib.scm:209 +#: documentation-lib.scm:208 #, scheme-format msgid "cannot find description for property ~S (~S)" msgstr "" @@ -3513,27 +3503,27 @@ 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" @@ -3569,32 +3559,32 @@ msgstr "" msgid "Error in beam quanting. Expected ~S 0, found ~S." msgstr "" -#: lily-library.scm:333 +#: lily-library.scm:350 msgid "Music unsuitable for context-mod" msgstr "" -#: lily-library.scm:388 +#: lily-library.scm:405 #, scheme-format msgid "Cannot find context-def \\~a" msgstr "" -#: lily-library.scm:404 +#: lily-library.scm:421 msgid "Music unsuitable for output-def" msgstr "" -#: lily-library.scm:884 +#: lily-library.scm:901 msgid "" "Find the index between @var{start} and @var{end} (an integer)\n" "which produces the closest match to @var{target-val} if\n" "applied to function @var{getter}." msgstr "" -#: lily-library.scm:955 +#: lily-library.scm:995 #, scheme-format msgid "unknown unit: ~S" msgstr "" -#: lily-library.scm:980 +#: lily-library.scm:1020 #, scheme-format msgid "no \\version statement found, please add~afor future compatibility" msgstr "" @@ -3607,50 +3597,50 @@ msgstr "" msgid "define-session used after session start" msgstr "" -#: lily.scm:393 +#: lily.scm:399 msgid "Using (ice-9 curried-definitions) module\n" msgstr "" -#: lily.scm:396 +#: lily.scm:402 msgid "Guile 1.8\n" msgstr "" -#: lily.scm:455 +#: lily.scm:459 #, scheme-format msgid "cannot find: ~A" msgstr "" -#: lily.scm:878 +#: lily.scm:884 msgid "Success: compilation successfully completed" msgstr "" -#: lily.scm:879 +#: lily.scm:885 msgid "Compilation completed with warnings or errors" msgstr "" -#: lily.scm:940 +#: lily.scm:946 #, scheme-format msgid "job ~a terminated with signal: ~a" msgstr "" -#: lily.scm:943 +#: lily.scm:949 #, scheme-format msgid "" "logfile ~a (exit ~a):\n" "~a" msgstr "" -#: lily.scm:965 lily.scm:1054 +#: lily.scm:971 lily.scm:1060 #, scheme-format msgid "failed files: ~S" msgstr "" -#: lily.scm:1045 +#: lily.scm:1051 #, scheme-format msgid "Redirecting output to ~a..." msgstr "" -#: lily.scm:1064 ps-to-png.scm:66 +#: lily.scm:1070 ps-to-png.scm:66 #, scheme-format msgid "Invoking `~a'...\n" msgstr "" @@ -3709,52 +3699,61 @@ msgstr "" msgid "negative replication count; ignoring" msgstr "" -#: music-functions.scm:272 -msgid "More alternatives than repeats. Junking excess alternatives" +#: music-functions.scm:311 +#, scheme-format +msgid "invalid tremolo repeat count: ~a" msgstr "" -#: music-functions.scm:303 +#: music-functions.scm:340 #, scheme-format -msgid "invalid tremolo repeat count: ~a" +msgid "unknown repeat type `~S': must be volta, unfold, percent, or tremolo" +msgstr "" + +#: music-functions.scm:344 +msgid "More alternatives than repeats. Junking excess alternatives" msgstr "" -#: music-functions.scm:459 +#: music-functions.scm:491 #, scheme-format msgid "bad grob property path ~a" msgstr "" -#: music-functions.scm:753 +#: music-functions.scm:786 msgid "Bad chord repetition" msgstr "" -#: music-functions.scm:788 +#: music-functions.scm:888 #, scheme-format msgid "music expected: ~S" msgstr "" -#: music-functions.scm:1144 +#: music-functions.scm:1244 #, scheme-format msgid "cannot find quoted music: `~S'" msgstr "" -#: music-functions.scm:1282 +#: music-functions.scm:1383 msgid "Add @var{octave-shift} to the octave of @var{pitch}." msgstr "" -#: music-functions.scm:1342 +#: music-functions.scm:1446 #, scheme-format msgid "Unknown octaveness type: ~S " msgstr "" -#: music-functions.scm:1343 +#: music-functions.scm:1447 msgid "Defaulting to 'any-octave." msgstr "" -#: music-functions.scm:1688 +#: music-functions.scm:1833 #, scheme-format msgid "unknown accidental style: ~S" msgstr "" +#: music-functions.scm:2051 +msgid "Missing duration" +msgstr "" + #: output-ps.scm:278 output-svg.scm:539 #, scheme-format msgid "unknown line-cap-style: ~S" @@ -3799,12 +3798,12 @@ msgstr "" 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 "" @@ -3813,7 +3812,7 @@ msgstr "" msgid "error in #{ ... #}" msgstr "" -#: part-combiner.scm:598 +#: part-combiner.scm:608 #, scheme-format msgid "quoted music `~a' is empty" msgstr "" diff --git a/po/nl.po b/po/nl.po index 0f1f35fa7c..596fa9fcf3 100644 --- a/po/nl.po +++ b/po/nl.po @@ -1,5 +1,5 @@ # 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 @@ -1479,7 +1479,7 @@ msgstr "" #: musicxml2ly.py:2576 msgid "" -"Copyright (c) 2005--2012 by\n" +"Copyright (c) 2005--2014 by\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" diff --git a/po/sv.po b/po/sv.po index 98e061332c..3e02189ac0 100644 --- a/po/sv.po +++ b/po/sv.po @@ -19,7 +19,7 @@ msgstr "" #. #. source file of the GNU LilyPond music typesetter #. -#. (c) 1998--2003 Han-Wen Nienhuys +#. (c) 1998--2014 Han-Wen Nienhuys #. Jan Nieuwenhuizen #. ## 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 ( @@ -59,7 +59,7 @@ msgid "Copyright (c) %s by" msgstr "Copyright © %s av" #: lilylib.py:114 -msgid " 1998--2003" +msgid " 1998--2014" msgstr " 1998-2003" #: lilylib.py:118 @@ -308,7 +308,7 @@ msgstr "Tar bort utdatafilen" #. #. source file of the GNU LilyPond music typesetter #. -#. (c) 1998--2003 Han-Wen Nienhuys +#. (c) 1998--2014 Han-Wen Nienhuys #. Jan Nieuwenhuizen #. TODO #. use -f and -t for -s output @@ -649,7 +649,7 @@ msgstr "inga filer angivna p #. #. source file of the GNU LilyPond music typesetter #. -#. (c) 1998--2003 Han-Wen Nienhuys +#. (c) 1998--2014 Han-Wen Nienhuys #. Jan Nieuwenhuizen #. This is the third incarnation of ly2dvi. #. @@ -935,7 +935,7 @@ msgstr "%s skrivet till \"%s\"..." #. #. source file of the GNU LilyPond music typesetter #. -#. (c) 1998--2003 Han-Wen Nienhuys +#. (c) 1998--2014 Han-Wen Nienhuys #. Jan Nieuwenhuizen #. ############################################################### #. Users of python modules should include this snippet. diff --git a/ps/music-drawing-routines.ps b/ps/music-drawing-routines.ps index 3e62f0366e..03df7c03cb 100644 --- a/ps/music-drawing-routines.ps +++ b/ps/music-drawing-routines.ps @@ -1,4 +1,4 @@ -%!PS-Adobe-1.0: music-drawing-routines.ps +%!PS-Adobe-2.0 % % Functions for direct and embedded PostScript @@ -63,12 +63,7 @@ bind def 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 @@ -77,11 +72,18 @@ bind 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 @@ -95,30 +97,104 @@ bind def /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 @@ -136,11 +212,7 @@ bind def 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 @@ -150,9 +222,7 @@ bind def 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 @@ -164,9 +234,7 @@ bind def 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 @@ -205,7 +273,7 @@ bind def 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 @@ -213,7 +281,6 @@ bind def { setlinewidth % dx dy x1 y1 1 setlinecap - 1 setlinejoin rmoveto % dx dy rlineto stroke @@ -222,7 +289,6 @@ bind def /draw_dashed_line % dx dy thickness dashpattern offset draw_dashed_line { 1 setlinecap - 1 setlinejoin setdash % dx dy thickness setlinewidth %dx dy rlineto diff --git a/python/book_latex.py b/python/book_latex.py index a47c950e24..ec5412b1d8 100644 --- a/python/book_latex.py +++ b/python/book_latex.py @@ -189,11 +189,12 @@ def get_latex_textwidth (source, global_options): 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 @@ -206,7 +207,13 @@ def get_latex_textwidth (source, global_options): output_filename = os.path.join(output_dir, 'output.txt') # call command cmd += " > %s" % output_filename + oldtexinputs = os.environ.get ('TEXINPUTS') + os.environ['TEXINPUTS'] = run_env['TEXINPUTS'] returncode = os.system(cmd) + if oldtexinputs: + os.environ['TEXINPUTS'] = oldtexinputs + else: + del os.environ['TEXINPUTS'] parameter_string = open(output_filename).read() if returncode != 0: warning (_ ("Unable to auto-detect default settings:\n")) diff --git a/python/convertrules.py b/python/convertrules.py index e2eb3baa4a..5eb2a75bfc 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -3683,6 +3683,41 @@ def conv(str): str = re.sub ("New_dynamic_engraver", "Dynamic_engraver", str) return str +@rule ((2, 17, 97), r'''(make-relative (a b) b ...) -> make-relative (a b) #{ a b #}...''') +def conv (str): + str = re.sub (r"(\(make-relative\s+\(\s*(([A-Za-z][-_A-Za-z0-9]*)" + + r"(?:\s+[A-Za-z][-_A-Za-z0-9]*)*)\s*\)\s*)\3(?=\s)", + r"\1(make-event-chord (list \2))", str) + str = re.sub (r"(\(make-relative\s+\(\s*([A-Za-z][-_A-Za-z0-9]*" + + r"(?:\s+([A-Za-z][-_A-Za-z0-9]*))+)\s*\)\s*)\3(?=\s)", + r"\1(make-sequential-music (list \2))", str) + return str + +@rule ((2, 18, 0), + _ ("bump version for release")) +def conv (str): + return str + +@rule ((2, 19, 2), r"\lyricsto \new/\context/... -> \new/\context/... \lyricsto") +def conv (str): + word=r'(?:#?"[^"]*"|\b' + wordsyntax + r'\b)' + str = re.sub (r"(\\lyricsto\s*" + word + r"\s*)(\\(?:new|context)\s*" + word + + r"(?:\s*=\s*" + word + r")?\s*)", + r"\2\1", str) + str = re.sub (r"(\\lyricsto\s*" + word + r"\s*)\\lyricmode\b\s*", + r"\1", str) + str = re.sub (r"(\\lyricsto\s*" + word + r"\s*)\\lyrics\b\s*", + r"\\new Lyrics \1", str) + str = re.sub (r'\\lyricmode\s*(\\lyricsto\b)', r"\1", str) + return str + +@rule ((2, 19, 7), "keySignature -> keyAlterations") +def conv(str): + str = re.sub (r'\bkeySignature\b', 'keyAlterations', str) + str = re.sub (r'\blastKeySignature\b', 'lastKeyAlterations', str) + str = re.sub (r'\blocalKeySignature\b', 'localAlterations', str) + return str + # Guidelines to write rules (please keep this at the end of this file) # # - keep at most one rule per version; if several conversions should be done, diff --git a/python/lilylib.py b/python/lilylib.py index 647061f4c7..1f6b350e6a 100644 --- a/python/lilylib.py +++ b/python/lilylib.py @@ -1,6 +1,6 @@ # This file is part of LilyPond, the GNU music typesetter. # -# Copyright (C) 1998--2012 Han-Wen Nienhuys +# Copyright (C) 1998--2014 Han-Wen Nienhuys # Jan Nieuwenhuizen # # LilyPond is free software: you can redistribute it and/or modify diff --git a/python/midi.c b/python/midi.c index 4049b49cb0..890798c66a 100644 --- a/python/midi.c +++ b/python/midi.c @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2001--2012 Han-Wen Nienhuys + Copyright (C) 2001--2014 Han-Wen Nienhuys Jan Nieuwenhuizen diff --git a/python/musicexp.py b/python/musicexp.py index ea2525d866..a564f29ce5 100644 --- a/python/musicexp.py +++ b/python/musicexp.py @@ -1489,7 +1489,7 @@ class KeySignatureChange (Music): elif self.non_standard_alterations: alterations = [self.format_non_standard_alteration (a) for a in self.non_standard_alterations] - return "\\set Staff.keySignature = #`(%s)" % string.join (alterations, " ") + return "\\set Staff.keyAlterations = #`(%s)" % string.join (alterations, " ") else: return '' diff --git a/scm/auto-beam.scm b/scm/auto-beam.scm index 14e0209675..72c7ea3229 100644 --- a/scm/auto-beam.scm +++ b/scm/auto-beam.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2000--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2000--2014 Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by @@ -38,83 +38,126 @@ (let ((value (ly:context-property context name))) (if (not (null? value)) value default))) - (define (beamingmoment (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 '()) - '()) - beamingfraction test-beam)) - (non-grace (ly:make-moment - (ly:moment-main-numerator measure-pos) - (ly:moment-main-denominator measure-pos))) - (pos (if (ly:momentmoment 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>)))))) diff --git a/scm/backend-library.scm b/scm/backend-library.scm index a167718187..a8899e83f1 100644 --- a/scm/backend-library.scm +++ b/scm/backend-library.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2005--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2005--2014 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/bar-line.scm b/scm/bar-line.scm index 03c6f80815..ff2d3f29b4 100644 --- a/scm/bar-line.scm +++ b/scm/bar-line.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2009--2012 Marc Hohl +;;;; Copyright (C) 2009--2014 Marc Hohl ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by @@ -910,50 +910,51 @@ of the volta brackets relative to the bar lines." 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 #', ;; 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)) @@ -968,7 +969,7 @@ of the volta brackets relative to the bar lines." (- (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))) @@ -1048,7 +1049,7 @@ of the volta brackets relative to the bar lines." (define-bar-line ":|." ":|." #f " |.") (define-bar-line ".|:" "|" ".|:" ".|") (define-bar-line "[|:" "|" "[|:" " |") -(define-bar-line ":|]" ":|]" #f " |") +(define-bar-line ":|]" ":|]" #f " | ") (define-bar-line ":|][|:" ":|]" "[|:" " | |") (define-bar-line ".|:-||" "||" ".|:" ".|") diff --git a/scm/bezier-tools.scm b/scm/bezier-tools.scm index defefc7bc4..b96281f336 100644 --- a/scm/bezier-tools.scm +++ b/scm/bezier-tools.scm @@ -1,6 +1,6 @@ ;;;; 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 diff --git a/scm/c++.scm b/scm/c++.scm index a131e7f342..fd965ac4d5 100644 --- a/scm/c++.scm +++ b/scm/c++.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -33,6 +33,11 @@ (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))) diff --git a/scm/chord-entry.scm b/scm/chord-entry.scm index 009887bf67..0ea8e032a0 100644 --- a/scm/chord-entry.scm +++ b/scm/chord-entry.scm @@ -1,6 +1,6 @@ ;;;; 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 diff --git a/scm/chord-generic-names.scm b/scm/chord-generic-names.scm index f7ba6b4edf..ffde2326f7 100644 --- a/scm/chord-generic-names.scm +++ b/scm/chord-generic-names.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2003--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2003--2014 Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/chord-ignatzek-names.scm b/scm/chord-ignatzek-names.scm index fc32e6ba75..22f54fec85 100644 --- a/scm/chord-ignatzek-names.scm +++ b/scm/chord-ignatzek-names.scm @@ -1,6 +1,6 @@ ;;;; 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 diff --git a/scm/chord-name.scm b/scm/chord-name.scm index a80d4e2b6e..54faaa5ba7 100644 --- a/scm/chord-name.scm +++ b/scm/chord-name.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2000--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2000--2014 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/clip-region.scm b/scm/clip-region.scm index 5cfc4449e7..6510135f98 100644 --- a/scm/clip-region.scm +++ b/scm/clip-region.scm @@ -1,6 +1,6 @@ ;;;; 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 diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index 20d77ea72f..2d38188d29 100644 --- a/scm/define-context-properties.scm +++ b/scm/define-context-properties.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -60,6 +60,9 @@ vertical alignment.") 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 @@ -215,6 +218,17 @@ and @samp{bracketed}.") 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.") @@ -382,12 +396,12 @@ alterations should be printed. The format is @code{(@var{step} . @var{alter})}, where @var{step} is a number from 0 to@tie{}6 and @var{alter} from -2 (sharp) to 2 (flat).") - (keySignature ,list? "The current key signature. This is an alist + (keyAlterations ,list? "The current key signature. This is an alist containing @code{(@var{step} . @var{alter})} or @code{((@var{octave} . @var{step}) . @var{alter})}, where @var{step} is a number in the range 0 to@tie{}6 and @var{alter} a fraction, denoting alteration. For alterations, use symbols, e.g. -@code{keySignature = #`((6 . ,FLAT))}.") +@code{keyAlterations = #`((6 . ,FLAT))}.") (lyricMelismaAlignment ,number? "Alignment to use for a melisma syllable.") @@ -444,12 +458,12 @@ associated with the current context. Ranges from@tie{}@w{-1} to@tie{}1, 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}.") @@ -608,8 +622,6 @@ will create a @var{VerticalAlignment}; otherwise, it will create a (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, @@ -697,10 +709,11 @@ in an axis group.") @code{CommandColumn} contains items that will affect spacing.") - (lastKeySignature ,list? "Last key signature before a key + (lastChord ,markup? "Last chord, used for detecting chord changes.") + (lastKeyAlterations ,list? "Last key signature before a key signature change.") - (localKeySignature ,list? "The key signature at this point in the -measure. The format is the same as for @code{keySignature}, but can + (localAlterations ,list? "The key signature at this point in the +measure. The format is the same as for @code{keyAlterations}, but can also contain @code{((@var{octave} . @var{name}) . (@var{alter} @var{barnumber} . @var{measureposition}))} pairs.") diff --git a/scm/define-event-classes.scm b/scm/define-event-classes.scm index dd6405a73e..40b1b7de40 100644 --- a/scm/define-event-classes.scm +++ b/scm/define-event-classes.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2005--2012 Erik Sandberg +;;;; Copyright (C) 2005--2014 Erik Sandberg ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/define-grob-interfaces.scm b/scm/define-grob-interfaces.scm index 59a97b6967..4ffd761607 100644 --- a/scm/define-grob-interfaces.scm +++ b/scm/define-grob-interfaces.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -221,6 +221,16 @@ accidentals)." "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." diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index a5b0895c9b..6f080aeb2d 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -170,19 +170,17 @@ when a spanner is broken at a line break.") ;;; ;;; 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.") @@ -314,7 +312,9 @@ include @code{upright}, @code{italic}, @code{caps}.") @q{normal}@tie{}size. @code{0}@tie{}is style-sheet's normal size, @w{@code{-1}} is smaller, @code{+1} is bigger. Each step of@tie{}1 is approximately 12% larger; 6@tie{}steps are exactly a factor@tie{}2 -larger. Fractional values are allowed.") +larger. If the context property @code{fontSize} is set, its value is +added to this before the glyph is printed. Fractional values are +allowed.") (footnote ,boolean? "Should this be a footnote or in-note?") (footnote-music ,ly:music? "Music creating a footnote.") (footnote-text ,markup? "A footnote for the grob.") @@ -530,6 +530,8 @@ bar lines, this is the amount of space after a thick line.") (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.") ;;; @@ -799,9 +801,8 @@ ending at that staff-position.") (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.") @@ -846,8 +847,8 @@ instead of to the beginning of the non-musical column. If there is a 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. @@ -983,8 +984,8 @@ possible.") ;;; 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 @@ -1015,7 +1016,8 @@ texts.") ;;; ;;; 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 @@ -1026,7 +1028,8 @@ in the form @code{(@var{left} . @var{right})}, where both @var{left} and ;;; ;;; 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.") @@ -1144,8 +1147,6 @@ pure-from-neighbor-interface to determine various grob heights.") (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 @@ -1192,10 +1193,6 @@ results, use @code{LEFT} and @code{RIGHT}.") (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}.") diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index a4e0d52a76..62473075de 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -97,6 +97,7 @@ (interfaces . (accidental-interface accidental-suggestion-interface font-interface + outside-staff-interface script-interface self-alignment-interface side-position-interface)))))) @@ -168,7 +169,7 @@ (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) @@ -278,6 +279,7 @@ ((class . Item) (interfaces . (break-alignable-interface font-interface + outside-staff-interface self-alignment-interface side-position-interface text-interface)))))) @@ -321,6 +323,7 @@ (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 @@ -348,7 +351,8 @@ (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 @@ -523,6 +527,7 @@ (interfaces . (break-aligned-interface breathing-sign-interface font-interface + outside-staff-interface text-interface)))))) (ChordName @@ -538,6 +543,7 @@ (meta . ((class . Item) (interfaces . (chord-name-interface font-interface + outside-staff-interface rhythmic-grob-interface text-interface)))))) @@ -597,6 +603,7 @@ (meta . ((class . Item) (interfaces . (clef-modifier-interface font-interface + outside-staff-interface self-alignment-interface side-position-interface text-interface)))))) @@ -638,6 +645,7 @@ (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)))))) @@ -727,6 +735,7 @@ (DotColumn . ( (axes . (,X)) + (chord-dots-limit . 3) (direction . ,RIGHT) (positioning-done . ,ly:dot-column::calc-positioning-done) (X-extent . ,ly:axis-group-interface::width) @@ -785,6 +794,7 @@ (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 @@ -802,6 +812,7 @@ (thickness . 0.48) (meta . ((class . Item) (interfaces . (font-interface + outside-staff-interface percent-repeat-interface percent-repeat-item-interface rhythmic-grob-interface)))))) @@ -827,6 +838,7 @@ (interfaces . (axis-group-interface dynamic-interface dynamic-line-spanner-interface + outside-staff-interface side-position-interface)))))) (DynamicText @@ -834,8 +846,6 @@ ;; 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) @@ -853,6 +863,7 @@ (interfaces . (dynamic-interface dynamic-text-interface font-interface + outside-staff-interface script-interface self-alignment-interface text-interface)))))) @@ -904,6 +915,11 @@ 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)))))) @@ -958,6 +974,7 @@ (meta . ((class . Item) (interfaces . (finger-interface font-interface + outside-staff-interface self-alignment-interface side-position-interface text-interface @@ -1042,6 +1059,7 @@ (interfaces . (chord-name-interface font-interface fret-diagram-interface + outside-staff-interface rhythmic-grob-interface)))))) @@ -1129,6 +1147,7 @@ (interfaces . (dynamic-interface hairpin-interface line-interface + outside-staff-interface self-alignment-interface spanner-interface)))))) @@ -1146,6 +1165,7 @@ (meta . ((class . Spanner) (interfaces . (horizontal-bracket-interface line-interface + outside-staff-interface side-position-interface spanner-interface)))))) @@ -1180,6 +1200,7 @@ (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)))))) @@ -1299,9 +1320,8 @@ . ( (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)) @@ -1317,6 +1337,7 @@ (right-edge . (extra-space . 0.0)) )) (X-extent . (0 . 0)) + (Y-extent . (0 . 0)) (meta . ((class . Item) (interfaces . (break-aligned-interface)))))) @@ -1419,6 +1440,7 @@ (meta . ((class . Spanner) (interfaces . (font-interface measure-counter-interface + outside-staff-interface self-alignment-interface side-position-interface text-interface)))))) @@ -1435,6 +1457,7 @@ (Y-offset . ,side-position-interface::y-aligned-side) (meta . ((class . Spanner) (interfaces . (measure-grouping-interface + outside-staff-interface side-position-interface)))))) (MelodyItem @@ -1480,6 +1503,7 @@ (interfaces . (break-alignable-interface font-interface metronome-mark-interface + outside-staff-interface self-alignment-interface side-position-interface text-interface)))))) @@ -1501,6 +1525,7 @@ (meta . ((class . Spanner) (interfaces . (font-interface multi-measure-interface + outside-staff-interface multi-measure-rest-interface rest-interface staff-symbol-referencer-interface)))))) @@ -1528,6 +1553,7 @@ (meta . ((class . Spanner) (interfaces . (font-interface multi-measure-interface + outside-staff-interface self-alignment-interface side-position-interface text-interface)))))) @@ -1553,6 +1579,7 @@ (meta . ((class . Spanner) (interfaces . (font-interface multi-measure-interface + outside-staff-interface self-alignment-interface side-position-interface text-interface)))))) @@ -1678,6 +1705,7 @@ (interfaces . (font-interface horizontal-bracket-interface line-interface + outside-staff-interface ottava-bracket-interface side-position-interface text-interface)))))) @@ -1757,6 +1785,7 @@ (meta . ((class . Spanner) (interfaces . (font-interface percent-repeat-interface + outside-staff-interface self-alignment-interface side-position-interface text-interface)))))) @@ -1777,7 +1806,8 @@ (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 @@ -1825,6 +1855,7 @@ (interfaces . (break-alignable-interface font-interface mark-interface + outside-staff-interface self-alignment-interface side-position-interface text-interface)))))) @@ -1898,6 +1929,7 @@ (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) @@ -1912,6 +1944,7 @@ (Y-offset . ,side-position-interface::y-aligned-side) (meta . ((class . Item) (interfaces . (font-interface + outside-staff-interface script-interface side-position-interface)))))) @@ -1945,7 +1978,8 @@ (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 . ( @@ -1981,6 +2015,7 @@ (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)))))) @@ -2172,6 +2207,7 @@ (meta . ((class . Item) (interfaces . (font-interface self-alignment-interface + outside-staff-interface side-position-interface string-number-interface text-interface @@ -2192,6 +2228,7 @@ (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 @@ -2231,6 +2268,7 @@ (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)))))) @@ -2251,7 +2289,8 @@ (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 . ( @@ -2371,6 +2410,7 @@ (meta . ((class . Item) (interfaces . (font-interface instrument-specific-markup-interface + outside-staff-interface self-alignment-interface side-position-interface text-interface @@ -2404,6 +2444,7 @@ (interfaces . (font-interface line-interface line-spanner-interface + outside-staff-interface side-position-interface)))))) (Tie @@ -2501,13 +2542,14 @@ (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 @@ -2556,6 +2598,7 @@ (interfaces . (font-interface line-interface line-spanner-interface + outside-staff-interface side-position-interface trill-spanner-interface)))))) @@ -2578,6 +2621,7 @@ (meta . ((class . Spanner) (interfaces . (line-interface + outside-staff-interface tuplet-bracket-interface)))))) (TupletNumber @@ -2587,12 +2631,14 @@ (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)))))) @@ -2631,6 +2677,7 @@ (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)))))) @@ -2682,7 +2729,8 @@ (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 . ( @@ -2709,6 +2757,7 @@ (VoltaBracket . ( + (baseline-skip . 1.7) (direction . ,UP) (edge-height . (2.0 . 2.0)) ;; staff-space; (font-encoding . fetaText) @@ -2745,6 +2794,7 @@ (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)))))) diff --git a/scm/define-markup-commands.scm b/scm/define-markup-commands.scm index cc654da059..3fc1e573bf 100644 --- a/scm/define-markup-commands.scm +++ b/scm/define-markup-commands.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2000--2012 Han-Wen Nienhuys +;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -1018,13 +1018,9 @@ samplePath = (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) @@ -1190,38 +1186,120 @@ Like simple-markup, but use tie characters for @q{~} tilde symbols. (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?) @@ -1250,59 +1328,28 @@ If there are no arguments, return an empty stencil. } } @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?) @@ -3962,7 +4009,7 @@ Make a fraction of two markups. (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 @@ -3978,13 +4025,12 @@ Set @var{arg} in superscript with a normal 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 @@ -4005,7 +4051,7 @@ Set @var{arg} in superscript. 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) @@ -4030,8 +4076,7 @@ is a pair of numbers representing the displacement in the X and Y axis. (define-markup-command (sub layout props arg) (markup?) #:category font - #:properties ((font-size 0) - (baseline-skip)) + #:properties ((font-size 0)) " @cindex subscript text @@ -4053,13 +4098,13 @@ Set @var{arg} in subscript. 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 @@ -4075,7 +4120,7 @@ Set @var{arg} in subscript with a normal font size. @end lilypond" (ly:stencil-translate-axis (interpret-markup layout props arg) - (* -0.5 baseline-skip) + (* -0.75 (magstep font-size)) Y)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/scm/define-music-callbacks.scm b/scm/define-music-callbacks.scm index 42aaf58ace..e9fe53eb1b 100644 --- a/scm/define-music-callbacks.scm +++ b/scm/define-music-callbacks.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; Neil Puttock ;;;; Carl Sorensen @@ -102,7 +102,19 @@ to be used by the sequential-iterator" structure)) (beaming-exception (beam-exceptions fraction time-signature-settings)) - (new-measure-length (ly:make-moment num den))) + (new-measure-length (ly:make-moment num den)) + (pos (ly:context-property context 'measurePosition))) + ;;\time is OK at a negative measurePosition (after \partial), + ;;but at a positive position it's probably a mistake, so warn + ;;(like a barcheck) and reset it to 0 to prevent errors. + (if (> (ly:moment-main pos) 0) + (begin + (if (not (ly:context-property context 'ignoreBarChecks #f)) + (ly:music-warning music + (_ "\\time in mid-measure at ~A") + (ly:moment-main pos))) + (ly:context-set-property! + context 'measurePosition (ly:make-moment 0)))) (ly:context-set-property! context 'timeSignatureFraction fraction) (ly:context-set-property! diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index fd759d52d1..c4ed534478 100644 --- a/scm/define-music-display-methods.scm +++ b/scm/define-music-display-methods.scm @@ -1,7 +1,7 @@ ;;; define-music-display-methods.scm -- data for displaying music ;;; expressions using LilyPond notation. ;;; -;;; Copyright (C) 2005--2012 Nicolas Sceaux +;;; Copyright (C) 2005--2014 Nicolas Sceaux ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -167,10 +167,8 @@ expression." (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)) @@ -526,8 +524,17 @@ Otherwise, return #f." (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)) @@ -715,29 +722,7 @@ Otherwise, return #f." (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 @@ -808,13 +793,19 @@ Otherwise, return #f." (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))))) @@ -830,7 +821,7 @@ Otherwise, return #f." "" (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) @@ -858,7 +849,7 @@ Otherwise, return #f." (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) diff --git a/scm/define-music-properties.scm b/scm/define-music-properties.scm index 5c9c12538e..42525bb8b2 100644 --- a/scm/define-music-properties.scm +++ b/scm/define-music-properties.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -119,6 +119,12 @@ This property can only be defined as initializer in 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.") diff --git a/scm/define-music-types.scm b/scm/define-music-types.scm index 184b4e5485..8d0464bf4c 100644 --- a/scm/define-music-types.scm +++ b/scm/define-music-types.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -685,8 +685,7 @@ Syntax: @code{\\times @var{fraction} @var{music}}, e.g., . ((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)) )) @@ -815,16 +814,3 @@ override earlier ones." (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))) diff --git a/scm/define-note-names.scm b/scm/define-note-names.scm index 62ef21a72c..52a9d969fa 100644 --- a/scm/define-note-names.scm +++ b/scm/define-note-names.scm @@ -1,22 +1,22 @@ ;;;; Common note names in various languages. ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2010--2012 Valentin Villenave et al: +;;;; Copyright (C) 2010--2014 Valentin Villenave et al: ;;;; -;;;; Copyright (C) 1996--2012 Han-Wen Nienhuys (Nederlands) -;;;; Copyright (C) 1998--2012 Jaume Obrador (Catalan) -;;;; Copyright (C) 1997--2012 Roland Meier +;;;; Copyright (C) 1996--2014 Han-Wen Nienhuys (Nederlands) +;;;; Copyright (C) 1998--2014 Jaume Obrador (Catalan) +;;;; Copyright (C) 1997--2014 Roland Meier ;;;; Bjoern Jacke (Deutsch) -;;;; Copyright (C) 1996--2012 Han-Wen Nienhuys (English) -;;;; Copyright (C) 2002--2012 Carlos García Suárez +;;;; Copyright (C) 1996--2014 Han-Wen Nienhuys (English) +;;;; Copyright (C) 2002--2014 Carlos García Suárez ;;;; Maximiliano G. G. (Espanol) -;;;; Copyright (C) 1998--2012 Paolo Zuliani +;;;; Copyright (C) 1998--2014 Paolo Zuliani ;;;; Eric Wurbel (Italiano) -;;;; Copyright (C) 1998--2012 Arvid Grøtting (Norsk) -;;;; Copyright (C) 2004--2012 Pedro Kröger (Portugues) -;;;; Copyright (C) 2001--2012 Heikki Junes (Suomi) -;;;; Copyright (C) 1997--2012 Mats Bengtsson (Svenska) -;;;; Copyright (C) 2004--2012 Hendrik Maryns (Vlaams) +;;;; Copyright (C) 1998--2014 Arvid Grøtting (Norsk) +;;;; Copyright (C) 2004--2014 Pedro Kröger (Portugues) +;;;; Copyright (C) 2001--2014 Heikki Junes (Suomi) +;;;; Copyright (C) 1997--2014 Mats Bengtsson (Svenska) +;;;; Copyright (C) 2004--2014 Hendrik Maryns (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 diff --git a/scm/define-stencil-commands.scm b/scm/define-stencil-commands.scm index 4c834591a3..904b6348d4 100644 --- a/scm/define-stencil-commands.scm +++ b/scm/define-stencil-commands.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2005--2012 Han-Wen Nienhuys +;;;; Copyright (C) 2005--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 diff --git a/scm/define-woodwind-diagrams.scm b/scm/define-woodwind-diagrams.scm index 0847d4c93f..c74b6110d6 100644 --- a/scm/define-woodwind-diagrams.scm +++ b/scm/define-woodwind-diagrams.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2010--2012 Mike Solomon +;;;; Copyright (C) 2010--2014 Mike Solomon ;;;; Clarinet drawings copied from diagrams created by ;;;; Gilles Thibault ;;;; diff --git a/scm/display-lily.scm b/scm/display-lily.scm index f67125337b..3e560b1403 100644 --- a/scm/display-lily.scm +++ b/scm/display-lily.scm @@ -2,7 +2,7 @@ ;;; ;;; ;;; -;;; Copyright (C) 2005--2012 Nicolas Sceaux +;;; Copyright (C) 2005--2014 Nicolas Sceaux ;;; ;;; - This file defines the procedures used to define display methods for each diff --git a/scm/display-woodwind-diagrams.scm b/scm/display-woodwind-diagrams.scm index 5b34ac94fc..987b798142 100644 --- a/scm/display-woodwind-diagrams.scm +++ b/scm/display-woodwind-diagrams.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2010--2012 Mike Solomon +;;;; Copyright (C) 2010--2014 Mike Solomon ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/document-backend.scm b/scm/document-backend.scm index c1288deff5..d9ec2b00b5 100644 --- a/scm/document-backend.scm +++ b/scm/document-backend.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2000--2012 Han-Wen Nienhuys +;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -16,27 +16,30 @@ ;;;; You should have received a copy of the GNU General Public License ;;;; along with LilyPond. If not, see . -(define (sort-grob-properties x) +(define (sort-grob-properties props) ;; force 'meta to the end of each prop-list - (let ((meta (assoc 'meta x))) - (append (sort (assoc-remove! x 'meta) ly:alist-citexi description) "\n\nThis object supports the following interface(s):\n" (human-listify ifacedoc) diff --git a/scm/document-context-mods.scm b/scm/document-context-mods.scm index f5034d2ecc..0695008d49 100644 --- a/scm/document-context-mods.scm +++ b/scm/document-context-mods.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2011--2012 Neil Puttock +;;;; Copyright (C) 2011--2014 Neil Puttock ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by @@ -29,25 +29,24 @@ (let ((value (car args)) (path (cdr args))) (string-append - "@item Sets " - (format "grob property @code{~a} " + (format "@item Sets grob property @code{~a} " (grob-property-path path)) - (format "in @code{@rinternals{~a}} to ~a." - name-sym - (scm->texi value)) - "\n"))) + (format "in @code{@rinternals{~a}} to" name-sym) + (if (pretty-printable? value) + (format ":~a\n" (scm->texi value)) + (format " ~a.\n" (scm->texi value)))))) ((pop) (string-append - "@item Reverts " - (format "grob property @code{~a} " + (format "@item Reverts grob property @code{~a} " (grob-property-path (car args))) - (format "in @code{@rinternals{~a}}." - name-sym) - "\n")) + (format "in @code{@rinternals{~a}}.\n" + name-sym))) ((assign) - (format "@item Sets translator property @code{~a} to ~a.\n" - name-sym - (scm->texi (car args)))) + (string-append + (format "@item Sets translator property @code{~a} to" name-sym) + (if (pretty-printable? value) + (format ":~a\n" (scm->texi (car args))) + (format " ~a.\n" (scm->texi (car args)))))) ((unset) (format "@item Unsets translator property @code{~a}.\n" name-sym)) diff --git a/scm/document-functions.scm b/scm/document-functions.scm index 2102f640e0..07a504473d 100644 --- a/scm/document-functions.scm +++ b/scm/document-functions.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/document-identifiers.scm b/scm/document-identifiers.scm index 22088605d7..2a2e0ce074 100644 --- a/scm/document-identifiers.scm +++ b/scm/document-identifiers.scm @@ -1,6 +1,6 @@ ;;;; 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 diff --git a/scm/document-markup.scm b/scm/document-markup.scm index 54c987b9bb..318a26b9e6 100644 --- a/scm/document-markup.scm +++ b/scm/document-markup.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -53,9 +53,9 @@ (sig-type-names (map type-name sig)) (signature-str (string-join - (map (lambda (x) (string-append - "@var{" (car x) "} (" (cadr x) ")" )) - (zip arg-names sig-type-names)) + (map (lambda (x y) (string-append + "@var{" x "} (" y ")" )) + arg-names sig-type-names) " " ))) (string-append diff --git a/scm/document-music.scm b/scm/document-music.scm index 0badbf899e..c5487eefd0 100644 --- a/scm/document-music.scm +++ b/scm/document-music.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/document-translation.scm b/scm/document-translation.scm index 5e867bb4c2..442c2659bb 100644 --- a/scm/document-translation.scm +++ b/scm/document-translation.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2000--2012 Han-Wen Nienhuys +;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -143,18 +143,19 @@ (path (cdr args))) (string-append - "@item Set " - (format #f "grob-property @code{~a} " + (format #f "@item Set grob-property @code{~a} " (string-join (map symbol->string path) " ")) - (format #f "in @ref{~a} to ~a." - context-sym (scm->texi value)) - "\n"))) + (format #f "in @ref{~a} to" context-sym) + (if (pretty-printable? value) + (format #f ":~a\n" (scm->texi value)) + (format #f " ~a.\n" (scm->texi value)))))) ((equal? (object-property context-sym 'is-grob?) #t) "") ((equal? tag 'assign) - (format #f "@item Set translator property @code{~a} to ~a.\n" - context-sym - (scm->texi (car args)))) - ))) + (string-append + (format #f "@item Set translator property @code{~a} to" context-sym) + (if (pretty-printable? (car args)) + (format #f ":~a\n" (scm->texi (car args))) + (format #f " ~a.\n" (scm->texi (car args))))))))) (define (context-doc context-desc) diff --git a/scm/document-type-predicates.scm b/scm/document-type-predicates.scm index 2e94f2c3f8..ea6c3ec1d8 100644 --- a/scm/document-type-predicates.scm +++ b/scm/document-type-predicates.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2010--2012 Mark Polesky +;;;; Copyright (C) 2010--2014 Mark Polesky ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/documentation-generate.scm b/scm/documentation-generate.scm index d65d0edab7..dcbd1d4f95 100644 --- a/scm/documentation-generate.scm +++ b/scm/documentation-generate.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2000--2012 Han-Wen Nienhuys +;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -126,7 +126,7 @@ @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 diff --git a/scm/documentation-lib.scm b/scm/documentation-lib.scm index a098194586..da7d296658 100644 --- a/scm/documentation-lib.scm +++ b/scm/documentation-lib.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2000--2012 Han-Wen Nienhuys +;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -58,16 +58,15 @@ (define (processing name) (ly:basic-progress (_ "Processing ~S...") name)) -(define (self-evaluating? x) - (or (number? x) (string? x) (procedure? x) (boolean? x))) - -(define (texify x) - x) - -(define (scm->texi x) - (string-append "@code{" (texify (scm->string x)) "}")) - - +(define (scm->texi val) + (let* (; always start on a new line + (open-texi (if (pretty-printable? val) + "\n@verbatim\n" + "\n@code{")) + (close-texi (if (pretty-printable? val) + "@end verbatim" + "}"))) + (string-append open-texi (scm->string val) close-texi))) (define (texi-section-command level) (assoc-get level '( @@ -91,7 +90,7 @@ "Document one (LABEL . DESC); return empty string if LABEL is empty string." (if (eq? (car label-desc-pair) "") "" - (string-append "\n@item " (car label-desc-pair) "\n" (cdr label-desc-pair)))) + (string-append "\n\n@item " (car label-desc-pair) "\n" (cdr label-desc-pair)))) (define (description-list->texi items-alist quote?) @@ -100,9 +99,9 @@ string-to-use). If QUOTE? is #t, embed table in a @quotation environment." (string-append "\n" (if quote? "@quotation\n" "") - "@table @asis\n" + "@table @asis" (string-concatenate (map one-item->texi items-alist)) - "\n" + "\n\n" "@end table\n" (if quote? "@end quotation\n" ""))) @@ -209,12 +208,8 @@ with init values from ALIST (1st optional argument) (ly:error (_ "cannot find description for property ~S (~S)") sym where)) (cons - (string-append "@code{" name "} " - "(" typename ")" + (string-append "@code{" name "} (" typename ")" (if init-value - (string-append - ":\n\n" - (scm->texi init-value) - "\n\n") - "")) + (string-append ":" (scm->texi init-value) "\n") + "")) desc))) diff --git a/scm/editor.scm b/scm/editor.scm index e474a557e5..c64cbea54a 100644 --- a/scm/editor.scm +++ b/scm/editor.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2005--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2005--2014 Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/encoding.scm b/scm/encoding.scm index aaeed727b1..f0495027a1 100644 --- a/scm/encoding.scm +++ b/scm/encoding.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2004--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2004--2014 Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/file-cache.scm b/scm/file-cache.scm index 21db866eb8..8c941acbed 100644 --- a/scm/file-cache.scm +++ b/scm/file-cache.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2005--2012 Han-Wen Nienhuys +;;;; Copyright (C) 2005--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 diff --git a/scm/flag-styles.scm b/scm/flag-styles.scm index 59495ba40b..98ec0e4d80 100644 --- a/scm/flag-styles.scm +++ b/scm/flag-styles.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2008--2012 Reinhold Kainhofer +;;;; Copyright (C) 2008--2014 Reinhold Kainhofer ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/font.scm b/scm/font.scm index 45a54b5f8d..867612ae11 100644 --- a/scm/font.scm +++ b/scm/font.scm @@ -1,6 +1,6 @@ ;;;; 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 diff --git a/scm/framework-eps.scm b/scm/framework-eps.scm index 4028a42468..5aa5c0e3bb 100644 --- a/scm/framework-eps.scm +++ b/scm/framework-eps.scm @@ -1,6 +1,6 @@ ;;;; 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 diff --git a/scm/framework-ps.scm b/scm/framework-ps.scm index d92affb11c..a96eea7679 100644 --- a/scm/framework-ps.scm +++ b/scm/framework-ps.scm @@ -1,6 +1,6 @@ ;;;; 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 @@ -84,7 +84,9 @@ "/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 @@ -97,7 +99,6 @@ "") "%%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")) diff --git a/scm/framework-svg.scm b/scm/framework-svg.scm index dad8bfa0f7..eed314c3f9 100644 --- a/scm/framework-svg.scm +++ b/scm/framework-svg.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2004--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2004--2014 Jan Nieuwenhuizen ;;;; Patrick McCarty ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/fret-diagrams.scm b/scm/fret-diagrams.scm index 3359608345..69a8ba7821 100644 --- a/scm/fret-diagrams.scm +++ b/scm/fret-diagrams.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2004--2012 Carl D. Sorensen +;;;; Copyright (C) 2004--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 diff --git a/scm/graphviz.scm b/scm/graphviz.scm index fc2076be24..fb85076a1c 100644 --- a/scm/graphviz.scm +++ b/scm/graphviz.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2007--2012 Joe Neeman +;;;; Copyright (C) 2007--2014 Joe Neeman ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/guile-debugger.scm b/scm/guile-debugger.scm index defd663317..55665a3313 100644 --- a/scm/guile-debugger.scm +++ b/scm/guile-debugger.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2010--2012 Ian Hulin +;;;; Copyright (C) 2010--2014 Ian Hulin ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/harp-pedals.scm b/scm/harp-pedals.scm index ea5db93f18..3c43e5d191 100644 --- a/scm/harp-pedals.scm +++ b/scm/harp-pedals.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2008--2012 Reinhold Kainhofer +;;;; Copyright (C) 2008--2014 Reinhold Kainhofer ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/layout-beam.scm b/scm/layout-beam.scm index fb39a4e784..8aae2d09d5 100644 --- a/scm/layout-beam.scm +++ b/scm/layout-beam.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2000--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2000--2014 Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/layout-slur.scm b/scm/layout-slur.scm index 7e5ab5858c..f2708c0def 100644 --- a/scm/layout-slur.scm +++ b/scm/layout-slur.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2000--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2000--2014 Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by @@ -28,6 +28,8 @@ (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) diff --git a/scm/lily-library.scm b/scm/lily-library.scm index 43b05e57c2..472a82da24 100644 --- a/scm/lily-library.scm +++ b/scm/lily-library.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -22,6 +22,8 @@ ;; for define-safe-public when byte-compiling using Guile V2 (use-modules (scm safe-utility-defs)) +(use-modules (ice-9 pretty-print)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; constants. @@ -80,6 +82,11 @@ (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 @@ -116,6 +123,16 @@ non-visual scale factor 1." 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:momentstring def)) def)))) -;; -;; don't confuse users with # syntax. -;; +(define (self-evaluating? x) + (or (number? x) (string? x) (procedure? x) (boolean? x))) + +(define (ly-type? x) + (any (lambda (p) ((car p) x)) lilypond-exported-predicates)) + +(define-public (pretty-printable? val) + (and (not (self-evaluating? val)) + (not (symbol? val)) + (not (hash-table? val)) + (not (ly-type? val)))) + (define-public (scm->string val) - (if (and (procedure? val) - (symbol? (procedure-name val))) - (symbol->string (procedure-name val)) - (string-append - (if (self-evaluating? val) - (if (string? val) - "\"" - "") - "'") - (call-with-output-string (lambda (port) (display val port))) - (if (string? val) - "\"" - "")))) + (let* ((quote-style (if (string? val) + 'double + (if (or (null? val) ; (ly-type? '()) => #t + (and (not (self-evaluating? val)) + (not (vector? val)) + (not (hash-table? val)) + (not (ly-type? val)))) + 'single + 'none))) + ; don't confuse users with # syntax + (str (if (and (procedure? val) + (symbol? (procedure-name val))) + (symbol->string (procedure-name val)) + (call-with-output-string + (if (pretty-printable? val) + ; property values in PDF hit margin after 64 columns + (lambda (port) + (pretty-print val port #:width (case quote-style + ((single) 63) + (else 64)))) + (lambda (port) (display val port))))))) + (case quote-style + ((single) (string-append + "'" + (string-regexp-substitute "\n " "\n " str))) + ((double) (string-append "\"" str "\"")) + (else str)))) (define-public (!= lst r) (not (= lst r))) diff --git a/scm/lily-sort.scm b/scm/lily-sort.scm index 95d3e33ffb..e05c15a611 100644 --- a/scm/lily-sort.scm +++ b/scm/lily-sort.scm @@ -2,7 +2,7 @@ ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; -;;;; Copyright 2009--2012 Mark Polesky +;;;; Copyright 2009--2014 Mark Polesky ;; This file implements a LilyPond-specific character-sorting algorithm diff --git a/scm/lily.scm b/scm/lily.scm index 9e47fc0df7..2f589d01ff 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -277,7 +277,7 @@ file to given string.") 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.") @@ -330,6 +330,12 @@ floating point exceptions.") #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.") @@ -405,8 +411,8 @@ messages into errors.") (define-public (ergonomic-simple-format dest . rest) "Like ice-9's @code{format}, but without the memory consumption." (if (string? dest) - (apply simple-format (cons #f (cons dest rest))) - (apply simple-format (cons dest rest)))) + (apply simple-format #f dest rest) + (apply simple-format dest rest))) (define format ergonomic-simple-format) @@ -420,7 +426,7 @@ messages into errors.") v) (define-public (print . args) - (apply format (cons (current-output-port) args))) + (apply format (current-output-port) args)) ;;; General settings. @@ -440,8 +446,6 @@ messages into errors.") (if (ly:get-option 'trace-scheme-coverage) (coverage:enable)) -(define-public parser #f) - (define music-string-to-path-backends '(svg)) @@ -663,6 +667,7 @@ messages into errors.") (,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") @@ -718,6 +723,7 @@ messages into errors.") (,ly:stream-event? . "stream event") (,ly:translator? . "translator") (,ly:translator-group? . "translator group") + (,ly:undead? . "undead container") (,ly:unpure-pure-container? . "unpure/pure container") )) @@ -743,7 +749,7 @@ messages into errors.") (define (dump-profile base last this) (let* ((outname (format #f "~a.profile" (dir-basename base ".ly"))) - (diff (map (lambda (y) (apply - y)) (zip this last)))) + (diff (map - this last))) (ly:progress "\nWriting timing to ~a..." outname) (format (open-file outname "w") "time: ~a\ncells: ~a\n" diff --git a/scm/ly-syntax-constructors.scm b/scm/ly-syntax-constructors.scm index b3d7f3f0f0..2712fc21f3 100644 --- a/scm/ly-syntax-constructors.scm +++ b/scm/ly-syntax-constructors.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2006--2012 Erik Sandberg +;;;; Copyright (C) 2006--2014 Erik Sandberg ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by @@ -73,7 +73,7 @@ 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) diff --git a/scm/markup-macros.scm b/scm/markup-macros.scm index 72b107f846..67db7b5e8c 100644 --- a/scm/markup-macros.scm +++ b/scm/markup-macros.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2003--2012 Han-Wen Nienhuys +;;;; Copyright (C) 2003--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 diff --git a/scm/markup.scm b/scm/markup.scm index 64a1139738..d323ad3b42 100644 --- a/scm/markup.scm +++ b/scm/markup.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2003--2012 Han-Wen Nienhuys +;;;; Copyright (C) 2003--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 diff --git a/scm/midi.scm b/scm/midi.scm index e673555d93..4c7d6b3035 100644 --- a/scm/midi.scm +++ b/scm/midi.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2000--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2000--2014 Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/modal-transforms.scm b/scm/modal-transforms.scm index 71892bde65..3e31f660e4 100644 --- a/scm/modal-transforms.scm +++ b/scm/modal-transforms.scm @@ -1,6 +1,6 @@ ;;; 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 diff --git a/scm/music-functions.scm b/scm/music-functions.scm index 383b7f3f6d..ba567229e7 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -20,6 +20,7 @@ (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) @@ -157,6 +158,8 @@ For instance, "Generate an expression that, once evaluated, may return an object equivalent to @var{obj}, that is, for a music expression, a @code{(make-music ...)} form." + (define (if-nonzero num) + (if (zero? num) '() (list num))) (cond (;; markup expression (markup? obj) (markup-expression->make-markup obj)) @@ -172,20 +175,28 @@ equivalent to @var{obj}, that is, for a music expression, a (ly:music-mutable-properties obj))))) (;; moment (ly:moment? obj) - `(ly:make-moment ,(ly:moment-main-numerator obj) - ,(ly:moment-main-denominator obj) - ,(ly:moment-grace-numerator obj) - ,(ly:moment-grace-denominator obj))) + `(ly:make-moment + ,@(let ((main (ly:moment-main obj)) + (grace (ly:moment-grace obj))) + (cond ((zero? grace) (list main)) + ((negative? grace) (list main grace)) + (else ;;positive grace requires 4-arg form + (list (numerator main) + (denominator main) + (numerator grace) + (denominator grace))))))) (;; note duration (ly:duration? obj) `(ly:make-duration ,(ly:duration-log obj) - ,(ly:duration-dot-count obj) - ,(ly:duration-scale obj))) + ,@(if (= (ly:duration-scale obj) 1) + (if-nonzero (ly:duration-dot-count obj)) + (list (ly:duration-dot-count obj) + (ly:duration-scale obj))))) (;; note pitch (ly:pitch? obj) `(ly:make-pitch ,(ly:pitch-octave obj) ,(ly:pitch-notename obj) - ,(ly:pitch-alteration obj))) + ,@(if-nonzero (ly:pitch-alteration obj)))) (;; scheme procedure (procedure? obj) (or (procedure-name obj) obj)) @@ -242,18 +253,23 @@ The number of dots in the shifted music may not be less than zero." (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)) @@ -266,46 +282,72 @@ through MUSIC." (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}, @@ -340,40 +382,10 @@ beats to be distinguished." (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))) @@ -382,6 +394,26 @@ beats to be distinguished." (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. @@ -614,9 +646,10 @@ in @var{grob}." (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 @@ -728,7 +761,8 @@ duration is replaced with the specified @var{duration}." (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) @@ -747,8 +781,7 @@ respective predecessor chord." 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))) @@ -757,6 +790,73 @@ respective predecessor chord." (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 } +;;; \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. @@ -1255,12 +1355,13 @@ then revert skipTypesetting." (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)) @@ -1328,22 +1429,25 @@ Returns @code{#f} or the reason for the invalidation, a symbol." (car alteration-def)) (else 0))) -(define (check-pitch-against-signature context pitch barnum laziness octaveness) +(define (check-pitch-against-signature context pitch barnum laziness octaveness all-naturals) "Checks the need for an accidental and a @q{restore} accidental against -@code{localKeySignature}. The @var{laziness} is the number of measures +@code{localAlterations} and @code{keyAlterations}. +The @var{laziness} is the number of measures for which reminder accidentals are used (i.e., if @var{laziness} is zero, only cancel accidentals in the same measure; if @var{laziness} is three, we cancel accidentals up to three measures after they first appear. @var{octaveness} is either @code{'same-octave} or @code{'any-octave} and -specifies whether accidentals should be canceled in different octaves." +specifies whether accidentals should be canceled in different octaves. +If @var{all-naturals} is ##t, notes that do not occur in @code{keyAlterations} +also get an accidental." (let* ((ignore-octave (cond ((equal? octaveness 'any-octave) #t) ((equal? octaveness 'same-octave) #f) (else (ly:warning (_ "Unknown octaveness type: ~S ") octaveness) (ly:warning (_ "Defaulting to 'any-octave.")) #t))) - (key-sig (ly:context-property context 'keySignature)) - (local-key-sig (ly:context-property context 'localKeySignature)) + (key (ly:context-property context 'keyAlterations)) + (local (ly:context-property context 'localAlterations)) (notename (ly:pitch-notename pitch)) (octave (ly:pitch-octave pitch)) (pitch-handle (cons octave notename)) @@ -1351,17 +1455,17 @@ specifies whether accidentals should be canceled in different octaves." (need-accidental #f) (previous-alteration #f) (from-other-octaves #f) - (from-same-octave (assoc-get pitch-handle local-key-sig)) - (from-key-sig (or (assoc-get notename local-key-sig) + (from-same-octave (assoc-get pitch-handle local)) + (from-key-sig (or (assoc-get notename local) - ;; If no key signature match is found from localKeySignature, we may have a custom + ;; If no notename match is found from localAlterations, we may have a custom ;; type with octave-specific entries of the form ((octave . pitch) alteration) ;; instead of (pitch . alteration). Since this type cannot coexist with entries in - ;; localKeySignature, try extracting from keySignature instead. - (assoc-get pitch-handle key-sig)))) + ;; localAlterations, try extracting from keyAlterations instead. + (assoc-get pitch-handle key)))) - ;; loop through localKeySignature to search for a notename match from other octaves - (let loop ((l local-key-sig)) + ;; loop through localAlterations to search for a notename match from other octaves + (let loop ((l local)) (if (pair? l) (let ((entry (car l))) (if (and (pair? (car entry)) @@ -1393,7 +1497,7 @@ specifies whether accidentals should be canceled in different octaves." (let* ((prev-alt (extract-alteration previous-alteration)) (this-alt (ly:pitch-alteration pitch))) - (if (not (= this-alt prev-alt)) + (if (or (and all-naturals (eq? #f previous-alteration)) (not (= this-alt prev-alt))) (begin (set! need-accidental #t) (if (and (not (= this-alt 0)) @@ -1420,10 +1524,16 @@ is, to the end of current measure. A positive integer means that the accidental lasts over that many bar lines. @w{@code{-1}} is `forget immediately', that is, only look at key signature. @code{#t} is `forever'." - (check-pitch-against-signature context pitch barnum laziness octaveness)) + (check-pitch-against-signature context pitch barnum laziness octaveness #f)) + +(define-public ((make-accidental-dodecaphonic-rule octaveness laziness) context pitch barnum measurepos) + "Variation on function make-accidental-rule that creates an dodecaphonic +accidental rule." + + (check-pitch-against-signature context pitch barnum laziness octaveness #t)) (define (key-entry-notename entry) - "Return the pitch of an @var{entry} in @code{localKeySignature}. + "Return the pitch of an @var{entry} in @code{localAlterations}. The @samp{car} of the entry is either of the form @code{notename} or of the form @code{(octave . notename)}. The latter form is used for special key signatures or to indicate an explicit accidental. @@ -1437,25 +1547,25 @@ an accidental in music." (car entry))) (define (key-entry-octave entry) - "Return the octave of an entry in @code{localKeySignature} + "Return the octave of an entry in @code{localAlterations} or @code{#f} if the entry does not have an octave. See @code{key-entry-notename} for details." (and (pair? (car entry)) (caar entry))) (define (key-entry-bar-number entry) - "Return the bar number of an entry in @code{localKeySignature} + "Return the bar number of an entry in @code{localAlterations} or @code {#f} if the entry does not have a bar number. See @code{key-entry-notename} for details." (and (pair? (cdr entry)) (caddr entry))) (define (key-entry-measure-position entry) - "Return the measure position of an entry in @code{localKeySignature} + "Return the measure position of an entry in @code{localAlterations} or @code {#f} if the entry does not have a measure position. See @code{key-entry-notename} for details." (and (pair? (cdr entry)) (cdddr entry))) (define (key-entry-alteration entry) - "Return the alteration of an entry in localKeySignature. + "Return the alteration of an entry in localAlterations For convenience, returns @code{0} if entry is @code{#f}." (if entry @@ -1488,7 +1598,7 @@ If no matching entry is found, @var{#f} is returned." key signature @emph{and} does not directly follow a note on the same staff line. This rule should not be used alone because it does neither look at bar lines nor different accidentals at the same note name." - (let* ((keysig (ly:context-property context 'localKeySignature)) + (let* ((keysig (ly:context-property context 'localAlterations)) (entry (find-pitch-entry keysig pitch #t #t))) (if (not entry) (cons #f #f) @@ -1500,17 +1610,36 @@ look at bar lines nor different accidentals at the same note name." (cons #f (not (or (equal? acc key-acc) (and (equal? entrybn barnum) (equal? entrymp measurepos))))))))) +(define-public (dodecaphonic-no-repeat-rule context pitch barnum measurepos) + "An accidental rule that typesets an accidental before every +note (just as in the dodecaphonic accidental style) @emph{except} if +the note is immediately preceded by a note with the same pitch. This +is a common accidental style in contemporary notation." + (let* ((keysig (ly:context-property context 'localKeySignature)) + (entry (find-pitch-entry keysig pitch #t #t))) + (if (not entry) + (cons #f #t) + (let* ((entrymp (key-entry-measure-position entry)) + (entrybn (key-entry-bar-number entry))) + (cons #f + (not + (and (equal? entrybn barnum) (equal? entrymp measurepos)))))))) + (define-public (teaching-accidental-rule context pitch barnum measurepos) "An accidental rule that typesets a cautionary accidental if it is included in the key signature @emph{and} does not directly follow a note on the same staff line." - (let* ((keysig (ly:context-property context 'localKeySignature)) + (let* ((keysig (ly:context-property context 'localAlterations)) (entry (find-pitch-entry keysig pitch #t #t))) (if (not entry) (cons #f #f) - (let* ((entrymp (key-entry-measure-position entry)) + (let* ((global-entry (find-pitch-entry keysig pitch #f #f)) + (key-acc (key-entry-alteration global-entry)) + (acc (ly:pitch-alteration pitch)) + (entrymp (key-entry-measure-position entry)) (entrybn (key-entry-bar-number entry))) - (cons #f (not (and (equal? entrybn barnum) (equal? entrymp measurepos)))))))) + (cons #f (not (or (equal? acc key-acc) + (and (equal? entrybn barnum) (equal? entrymp measurepos))))))))) (define-public (set-accidentals-properties extra-natural auto-accs auto-cauts @@ -1610,6 +1739,22 @@ as a context." `(Staff ,(lambda (c p bn mp) '(#f . #t))) '() context)) + ;; As in dodecaphonic style with the exception that immediately + ;; repeated notes (in the same voice) don't get an accidental + ((equal? style 'dodecaphonic-no-repeat) + (set-accidentals-properties #f + `(Staff ,(make-accidental-rule 'same-octave 0) + ,dodecaphonic-no-repeat-rule) + '() + context)) + ;; Variety of the dodecaphonic style. Each note gets an accidental, + ;; except notes that were already handled in the same measure. + ((equal? style 'dodecaphonic-first) + (set-accidentals-properties #f + `(Staff ,(make-accidental-dodecaphonic-rule 'same-octave 0)) + '() + context)) + ;; Multivoice accidentals to be read both by musicians playing one voice ;; and musicians playing all voices. ;; Accidentals are typeset for each voice, but they ARE canceled across voices. @@ -1665,8 +1810,8 @@ as a context." ,teaching-accidental-rule) context)) - ;; do not set localKeySignature when a note alterated differently from - ;; localKeySignature is found. + ;; do not set localAlterations when a note alterated differently from + ;; localAlterations is found. ;; Causes accidentals to be printed at every note instead of ;; remembered for the duration of a measure. ;; accidentals not being remembered, causing accidentals always to @@ -1691,15 +1836,15 @@ as a context." (define-public (invalidate-alterations context) "Invalidate alterations in @var{context}. -Elements of @code{'localKeySignature} corresponding to local +Elements of @code{'localAlterations} corresponding to local alterations of the key signature have the form @code{'((octave . notename) . (alter barnum . measurepos))}. Replace them with a version where @code{alter} is set to @code{'clef} to force a repetition of accidentals. Entries that conform with the current key signature are not invalidated." - (let* ((keysig (ly:context-property context 'keySignature))) - (set! (ly:context-property context 'localKeySignature) + (let* ((keysig (ly:context-property context 'keyAlterations))) + (set! (ly:context-property context 'localAlterations) (map-in-order (lambda (entry) (let* ((localalt (key-entry-alteration entry))) @@ -1715,7 +1860,7 @@ Entries that conform with the current key signature are not invalidated." #t #t)))) entry (cons (car entry) (cons 'clef (cddr entry)))))) - (ly:context-property context 'localKeySignature))))) + (ly:context-property context 'localAlterations))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -1879,38 +2024,111 @@ yourself." (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)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/scm/output-lib.scm b/scm/output-lib.scm index 89d20b9550..776e618e37 100644 --- a/scm/output-lib.scm +++ b/scm/output-lib.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/output-ps.scm b/scm/output-ps.scm index 813211f060..7327f12beb 100644 --- a/scm/output-ps.scm +++ b/scm/output-ps.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/output-svg.scm b/scm/output-svg.scm index cb9f598d3f..1ddb276d31 100644 --- a/scm/output-svg.scm +++ b/scm/output-svg.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2002--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2002--2014 Jan Nieuwenhuizen ;;;; Patrick McCarty ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -71,10 +71,10 @@ (string-append "\n")) (define-public (entity entity string . attributes-alist) - (if (equal? string "") + (if (string-null? string) (apply eoc entity attributes-alist) (string-append - (apply eo (cons entity attributes-alist)) string (ec entity)))) + (apply eo entity attributes-alist) string (ec entity)))) (define (offset->point o) (ly:format "~4f ~4f" (car o) (- (cdr o)))) @@ -83,7 +83,7 @@ (define (helper lst) (if (null? lst) '() - (cons (format #f "~S ~S" (car lst) (- (cadr lst))) + (cons (ly:format "~4f ~4f" (car lst) (- (cadr lst))) (helper (cddr lst))))) (string-join (helper lst) " ")) @@ -615,7 +615,7 @@ '(fill . "currentColor"))) (define (setcolor r g b) - (format #f "\n" + (ly:format "\n" (* 100 r) (* 100 g) (* 100 b))) ;; rotate around given point diff --git a/scm/page.scm b/scm/page.scm index f6bb29d701..8fa1f0e10e 100644 --- a/scm/page.scm +++ b/scm/page.scm @@ -1,6 +1,6 @@ ;;;; 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 @@ -82,16 +82,12 @@ (define (page-translate-systems page) (for-each - (lambda (sys-off) - (let* - ((sys (car sys-off)) - (off (cadr sys-off))) + (lambda (sys off) + (if (not (number? (ly:prob-property sys 'Y-offset))) + (ly:prob-set-property! sys 'Y-offset off))) - (if (not (number? (ly:prob-property sys 'Y-offset))) - (ly:prob-set-property! sys 'Y-offset off)))) - - (zip (page-property page 'lines) - (page-property page 'configuration)))) + (page-property page 'lines) + (page-property page 'configuration))) (define (annotate-top-space first-system layout header-stencil stencil) (let* ((top-margin (ly:output-def-lookup layout 'top-margin)) diff --git a/scm/paper-system.scm b/scm/paper-system.scm index e75440b968..97d70d75b3 100644 --- a/scm/paper-system.scm +++ b/scm/paper-system.scm @@ -1,6 +1,6 @@ ;;;; 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 diff --git a/scm/paper.scm b/scm/paper.scm index 454371fa34..8f6839ab35 100644 --- a/scm/paper.scm +++ b/scm/paper.scm @@ -1,6 +1,6 @@ ;;;; 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 diff --git a/scm/parser-clef.scm b/scm/parser-clef.scm index 6ba1261ca7..6d45dd5376 100644 --- a/scm/parser-clef.scm +++ b/scm/parser-clef.scm @@ -1,6 +1,6 @@ ;;;; 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 @@ -25,18 +25,26 @@ ("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? @@ -90,9 +98,13 @@ ;; 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) diff --git a/scm/parser-ly-from-scheme.scm b/scm/parser-ly-from-scheme.scm index 7d72a25e87..96b7ef2885 100644 --- a/scm/parser-ly-from-scheme.scm +++ b/scm/parser-ly-from-scheme.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2004--2012 Nicolas Sceaux +;;;; Copyright (C) 2004--2014 Nicolas Sceaux ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/part-combiner.scm b/scm/part-combiner.scm index 4e3e4b6603..dd3152cbb7 100644 --- a/scm/part-combiner.scm +++ b/scm/part-combiner.scm @@ -1,6 +1,6 @@ ;;;; 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 @@ -198,6 +198,13 @@ Voice-state objects (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 @@ -240,7 +247,10 @@ LilyPond version 2.8 and earlier." (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) diff --git a/scm/predefined-fretboards.scm b/scm/predefined-fretboards.scm index 5140ae6e91..ed72e252b5 100644 --- a/scm/predefined-fretboards.scm +++ b/scm/predefined-fretboards.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2008--2012 Carl D. Sorensen +;;;; Copyright (C) 2008--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 diff --git a/scm/ps-to-png.scm b/scm/ps-to-png.scm index 948e56e145..1b3df3f1e6 100644 --- a/scm/ps-to-png.scm +++ b/scm/ps-to-png.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2005--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2005--2014 Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/safe-lily.scm b/scm/safe-lily.scm index 25209e5a0b..5e4c185010 100644 --- a/scm/safe-lily.scm +++ b/scm/safe-lily.scm @@ -1,6 +1,6 @@ ;;;; 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 diff --git a/scm/safe-utility-defs.scm b/scm/safe-utility-defs.scm index 057639d7fa..0c699fbbbc 100644 --- a/scm/safe-utility-defs.scm +++ b/scm/safe-utility-defs.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/script.scm b/scm/script.scm index 6564d5f2d4..6cfecbe89c 100644 --- a/scm/script.scm +++ b/scm/script.scm @@ -1,6 +1,6 @@ ;;;; 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 diff --git a/scm/skyline.scm b/scm/skyline.scm index 0889414cbc..d09b07e64b 100644 --- a/scm/skyline.scm +++ b/scm/skyline.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2013 Mike Solomon +;;;; Copyright (C) 2013--2014 Mike Solomon ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/standalone.scm b/scm/standalone.scm index ee44d43878..c66988674d 100644 --- a/scm/standalone.scm +++ b/scm/standalone.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/stencil.scm b/scm/stencil.scm index a457087b15..db5ff186c3 100644 --- a/scm/stencil.scm +++ b/scm/stencil.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2003--2012 Han-Wen Nienhuys +;;;; Copyright (C) 2003--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 @@ -159,7 +159,7 @@ the more angular the shape of the parenthesis." upper-end-point ;; Step 1: move to lower end point. lower-end-point) - line-width + (* 2 half-thickness) (interval-widen x-extent (/ line-width 2)) (interval-widen y-extent (/ line-width 2))))) @@ -434,59 +434,120 @@ then reduce using @var{min-max}: (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 diff --git a/scm/tablature.scm b/scm/tablature.scm index e32d712e19..668bf2faa3 100644 --- a/scm/tablature.scm +++ b/scm/tablature.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2009--2012 Marc Hohl +;;;; Copyright (C) 2009--2014 Marc Hohl ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by @@ -23,17 +23,18 @@ (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, diff --git a/scm/text.scm b/scm/text.scm index 1454105912..2b993cc7b3 100644 --- a/scm/text.scm +++ b/scm/text.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2011--2012 Bertrand Bordage +;;;; Copyright (C) 2011--2014 Bertrand Bordage ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scm/time-signature-settings.scm b/scm/time-signature-settings.scm index 82e22fe591..902a687067 100644 --- a/scm/time-signature-settings.scm +++ b/scm/time-signature-settings.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2009--2012 Carl Sorensen +;;;; Copyright (C) 2009--2014 Carl 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 @@ -26,7 +26,7 @@ ;;; 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)) ;;; @@ -37,7 +37,7 @@ ;;; ;;; 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, @@ -45,33 +45,32 @@ ;;; ;;; 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 @@ -80,7 +79,7 @@ ;; 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 @@ -89,12 +88,12 @@ ;; 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 @@ -102,7 +101,7 @@ ;; 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 @@ -110,8 +109,8 @@ ;; 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 @@ -123,7 +122,7 @@ ;; 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 @@ -134,7 +133,7 @@ ;; 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 @@ -145,7 +144,7 @@ ;; 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 diff --git a/scm/titling.scm b/scm/titling.scm index b5f8b1bb8a..8e6ae7b7bb 100644 --- a/scm/titling.scm +++ b/scm/titling.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2004--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2004--2014 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/to-xml.scm b/scm/to-xml.scm index 2407fe3766..0e21d7eacf 100644 --- a/scm/to-xml.scm +++ b/scm/to-xml.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2003--2012 Han-Wen Nienhuys +;;;; Copyright (C) 2003--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/translation-functions.scm b/scm/translation-functions.scm index fa3426ff0a..4479d3ae1b 100644 --- a/scm/translation-functions.scm +++ b/scm/translation-functions.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; (c) 1998--2012 Han-Wen Nienhuys +;;;; (c) 1998--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify diff --git a/scm/x11-color.scm b/scm/x11-color.scm index f3d65b90c2..5e7221c663 100644 --- a/scm/x11-color.scm +++ b/scm/x11-color.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2005--2012 Bernard Hurley +;;;; Copyright (C) 2005--2014 Bernard Hurley ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by diff --git a/scripts/auxiliar/fixcc.py b/scripts/auxiliar/fixcc.py index 6987ee1f2f..41334b36d5 100755 --- a/scripts/auxiliar/fixcc.py +++ b/scripts/auxiliar/fixcc.py @@ -450,7 +450,7 @@ typedef struct _t_ligature typedef std::map < AFM_Ligature const *, int > Bar; /** - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys */ /* || diff --git a/scripts/auxiliar/lily-git.tcl b/scripts/auxiliar/lily-git.tcl index a734269ed8..5e8dc3a0c9 100755 --- a/scripts/auxiliar/lily-git.tcl +++ b/scripts/auxiliar/lily-git.tcl @@ -1,7 +1,7 @@ #!/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 diff --git a/scripts/auxiliar/update-with-convert-ly.sh b/scripts/auxiliar/update-with-convert-ly.sh index b5afdfd639..7f40b63fb8 100755 --- a/scripts/auxiliar/update-with-convert-ly.sh +++ b/scripts/auxiliar/update-with-convert-ly.sh @@ -13,10 +13,8 @@ if [ -z $BUILD_DIR ]; then 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 diff --git a/scripts/build/gen-emmentaler-scripts.py b/scripts/build/gen-emmentaler-scripts.py index dafb50c0ef..0bd4168230 100644 --- a/scripts/build/gen-emmentaler-scripts.py +++ b/scripts/build/gen-emmentaler-scripts.py @@ -6,25 +6,26 @@ import os (options, files) = \ getopt.getopt (sys.argv[1:], - '', - ['dir=']) - + '', + ['dir=', 'design-size=']) +design_size = 0 outdir = '' for opt in options: o = opt[0] a = opt[1] if o == '--dir': outdir = a + elif o == '--design-size': + design_size = int(a) else: print o raise getopt.error -# Ugh -for design_size in [11,13,14,16,18,20,23,26]: - name = 'Emmentaler' - filename = name.lower () - script = '''#!@FONTFORGE@ + +name = 'Emmentaler' +filename = name.lower () +script = '''#!@FONTFORGE@ New(); @@ -80,29 +81,23 @@ Generate("%(filename)s-%(design_size)d.svg"); Generate("%(filename)s-%(design_size)d.woff"); ''' % vars() - basename = '%s-%d' % (filename, design_size) - path = os.path.join (outdir, basename + '.pe') - open (path, 'w').write (script) - - subfonts = ['feta%(design_size)d', - 'parmesan%(design_size)d', - 'feta-alphabet%(design_size)d'] +basename = '%s-%d' % (filename, design_size) +path = os.path.join (outdir, basename + '.genpe') +open (path, 'w').write (script) - ns = [] - for s in subfonts: - ns.append ('%s' % (s % vars())) +subfonts = ['feta%(design_size)d', + 'feta-noteheads%(design_size)d', + 'feta-flags%(design_size)d', + 'parmesan%(design_size)d', + 'parmesan-noteheads%(design_size)d', + 'feta-alphabet%(design_size)d'] - subfonts_str = ' '.join (ns) +ns = [] +for s in subfonts: + ns.append ('%s' % (s % vars())) - open (os.path.join (outdir, '%(filename)s-%(design_size)d.subfonts' % vars()), 'w').write (subfonts_str) +subfonts_str = ' '.join (ns) - path = os.path.join (outdir, '%s-%d.dep' % (filename, design_size)) - - deps = r'''%(filename)s-%(design_size)d.otf: $(outdir)/feta%(design_size)d.pfa \ - $(outdir)/parmesan%(design_size)d.pfa \ - $(outdir)/feta-alphabet%(design_size)d.pfa feta%(design_size)d.otf-table \ - $(outdir)/feta-alphabet%(design_size)d.pfa feta%(design_size)d.otf-gtable -''' % vars() - open (path, 'w').write (deps) +open (os.path.join (outdir, '%(filename)s-%(design_size)d.subfonts' % vars()), 'w').write (subfonts_str) - open (os.path.join (outdir, basename + '.fontname'), 'w').write ("%s-%d" % (name, design_size)) +open (os.path.join (outdir, basename + '.fontname'), 'w').write ("%s-%d" % (name, design_size)) diff --git a/scripts/build/grand-replace.py b/scripts/build/grand-replace.py index 764c113f76..222551f06f 100644 --- a/scripts/build/grand-replace.py +++ b/scripts/build/grand-replace.py @@ -2,7 +2,7 @@ # This file is part of LilyPond, the GNU music typesetter. # -# Copyright (C) 2009--2012 Jan Nieuwenhuizen +# Copyright (C) 2009--2014 Jan Nieuwenhuizen # # LilyPond is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/scripts/build/mf-to-table.py b/scripts/build/mf-to-table.py index f191d0aa8f..6d86b6be7e 100644 --- a/scripts/build/mf-to-table.py +++ b/scripts/build/mf-to-table.py @@ -4,7 +4,7 @@ # This file is part of LilyPond, the GNU music typesetter. # -# Copyright (C) 1997--2012 Han-Wen Nienhuys +# Copyright (C) 1997--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 @@ -264,6 +264,6 @@ for filenm in files: 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'])) diff --git a/scripts/build/pytt.py b/scripts/build/pytt.py index 72e5825f04..11d5163583 100755 --- a/scripts/build/pytt.py +++ b/scripts/build/pytt.py @@ -1,7 +1,7 @@ #! /usr/bin/python ''' - Copyright (C) 2008--2012 Jan Nieuwenhuizen + Copyright (C) 2008--2014 Jan Nieuwenhuizen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as diff --git a/scripts/convert-ly.py b/scripts/convert-ly.py index 641d763713..21c0b1bcaf 100644 --- a/scripts/convert-ly.py +++ b/scripts/convert-ly.py @@ -5,7 +5,7 @@ # This file is part of LilyPond, the GNU music typesetter. # -# Copyright (C) 1998--2012 Han-Wen Nienhuys +# Copyright (C) 1998--2014 Han-Wen Nienhuys # Jan Nieuwenhuizen # # LilyPond is free software: you can redistribute it and/or modify @@ -76,7 +76,7 @@ def warranty (): %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.'))) @@ -292,17 +292,18 @@ def do_one_file (infile_name): # 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): diff --git a/scripts/etf2ly.py b/scripts/etf2ly.py index bb61108383..171f5b226c 100644 --- a/scripts/etf2ly.py +++ b/scripts/etf2ly.py @@ -1188,7 +1188,7 @@ def warranty (): %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.'))) diff --git a/scripts/lilymidi.py b/scripts/lilymidi.py index 498682ef26..7198b48753 100644 --- a/scripts/lilymidi.py +++ b/scripts/lilymidi.py @@ -1,6 +1,6 @@ #!@TARGET_PYTHON@ -# Copyright (C) 2006--2012 Brailcom, o.p.s. +# Copyright (C) 2006--2014 Brailcom, o.p.s. # # Author: Milan Zamazal # diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index 8dea1fc1a7..9cdd14742b 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -112,7 +112,7 @@ def warranty (): %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."))) diff --git a/scripts/lilypond-invoke-editor.scm b/scripts/lilypond-invoke-editor.scm index 49800c067f..ff3efbdf26 100644 --- a/scripts/lilypond-invoke-editor.scm +++ b/scripts/lilypond-invoke-editor.scm @@ -2,7 +2,7 @@ !# ;;;; lilypond-invoke-editor.scm -- Invoke an editor in file:line:column mode -;;;; Copyright (C) 2005--2012 Jan Nieuwenhuizen +;;;; Copyright (C) 2005--2014 Jan Nieuwenhuizen ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; diff --git a/scripts/lilysong.py b/scripts/lilysong.py index 70e2df2a9b..047937b9c5 100644 --- a/scripts/lilysong.py +++ b/scripts/lilysong.py @@ -1,6 +1,6 @@ #!@TARGET_PYTHON@ -# Copyright (c) 2006--2012 Brailcom, o.p.s. +# Copyright (c) 2006--2014 Brailcom, o.p.s. # # Author: Milan Zamazal # diff --git a/scripts/midi2ly.py b/scripts/midi2ly.py index bf9f09f26e..79351bbfa2 100644 --- a/scripts/midi2ly.py +++ b/scripts/midi2ly.py @@ -4,7 +4,7 @@ # This file is part of LilyPond, the GNU music typesetter. # -# Copyright (C) 1998--2012 Han-Wen Nienhuys +# Copyright (C) 1998--2014 Han-Wen Nienhuys # Jan Nieuwenhuizen # # LilyPond is free software: you can redistribute it and/or modify @@ -78,7 +78,7 @@ def warranty (): %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.'))) diff --git a/scripts/musicxml2ly.py b/scripts/musicxml2ly.py index ec827b5d39..e6a6807440 100644 --- a/scripts/musicxml2ly.py +++ b/scripts/musicxml2ly.py @@ -2573,7 +2573,7 @@ If the given filename is -, musicxml2ly reads from the command line. p.version = ('''%prog (LilyPond) @TOPLEVEL_VERSION@\n\n''' + -_ ("""Copyright (c) 2005--2012 by +_ ("""Copyright (c) 2005--2014 by Han-Wen Nienhuys , Jan Nieuwenhuizen and Reinhold Kainhofer diff --git a/stepmake/stepmake/executable-rules.make b/stepmake/stepmake/executable-rules.make index d2950ed0cd..785be9ef6f 100644 --- a/stepmake/stepmake/executable-rules.make +++ b/stepmake/stepmake/executable-rules.make @@ -6,6 +6,8 @@ endef $(foreach a, $(MODULE_LIBS), $(eval $(call MODULE_LIB_template,$(a)))) -$(EXECUTABLE): $(outdir)/config.hh $(O_FILES) $(outdir)/version.hh $(MODULE_LIBS:%=%/$(outdir)/library.a) +$(O_FILES): $(outdir)/config.hh + +$(EXECUTABLE): $(O_FILES) $(outdir)/version.hh $(MODULE_LIBS:%=%/$(outdir)/library.a) $(foreach a, $(MODULE_LIBS), $(MAKE) -C $(a) && ) true $(LD) -o $@ $(O_FILES) $(LOADLIBES) $(ALL_LDFLAGS) diff --git a/stepmake/stepmake/generic-vars.make b/stepmake/stepmake/generic-vars.make index b0fc521e93..fb75166e1b 100644 --- a/stepmake/stepmake/generic-vars.make +++ b/stepmake/stepmake/generic-vars.make @@ -1,9 +1,7 @@ -top-build-dir = $(shell cd $(depth) && pwd) -build-dir = $(shell cd . && pwd) -tree-dir = $(subst $(top-build-dir),,$(build-dir)) - -absdir = $(shell cd $(1) ; pwd) +top-build-dir := $(realpath $(depth) ) +build-dir := $(realpath . ) +tree-dir = $(subst $(top-build-dir),,$(build-dir)) ifneq ($(configure-srcdir),.) srcdir-build = 1 @@ -15,7 +13,7 @@ else src-depth = $(configure-srcdir) endif -top-src-dir := $(shell cd $(src-depth); pwd) +top-src-dir := $(realpath $(src-depth)) ifndef srcdir-build src-dir = . @@ -46,10 +44,6 @@ DEPTH = $(depth)/$(package-depth) INSTALLPY=$(buildscript-dir)/install -c INSTALL=$(INSTALLPY) -group-dir = $(shell cd $(DEPTH);pwd)/.. -patch-dir = $(group-dir)/patches -rpm-sources = $(release-dir) -rpm-build = $(group-dir)/RedHat/BUILD package-icon = $(outdir)/$(package)-icon.xpm ifneq ($(strip $(MY_PATCH_LEVEL)),) diff --git a/stepmake/stepmake/help2man-rules.make b/stepmake/stepmake/help2man-rules.make index 6c176bac5e..9e2f042128 100644 --- a/stepmake/stepmake/help2man-rules.make +++ b/stepmake/stepmake/help2man-rules.make @@ -23,6 +23,7 @@ endif ifeq ($(strip $(CROSS)),no) $(outdir)/%.1: $(outdir)/% $(buildscript-dir)/help2man + echo $(buildscript-dir)/help2man $(HELP2MAN_COMMAND) else # When cross building, some manpages will not build because the diff --git a/stepmake/stepmake/library-rules.make b/stepmake/stepmake/library-rules.make index 942c4f01df..18b1066e2b 100644 --- a/stepmake/stepmake/library-rules.make +++ b/stepmake/stepmake/library-rules.make @@ -1,5 +1,7 @@ -$(LIBRARY): $(outdir)/config.hh $(O_FILES) +$(O_FILES): $(outdir)/config.hh + +$(LIBRARY): $(O_FILES) $(AR) $(ARFLAGS) $@ $(O_FILES) # thanks to Nelson Beebe for this trick. $(RANLIB) $@ || $(AR) ts $@ || true diff --git a/stepmake/stepmake/metafont-rules.make b/stepmake/stepmake/metafont-rules.make index 5be005a198..1db797468f 100644 --- a/stepmake/stepmake/metafont-rules.make +++ b/stepmake/stepmake/metafont-rules.make @@ -23,7 +23,9 @@ $(outdir)/%.pfb: %.mf $(outdir)/mf2pt1.mem $(outdir)/%.log && ( cd $$TMP \ && ln -s ../mf2pt1.mem . \ && ln -s ../../mf2pt1.mp . \ - && MFINPUTS=$(abs-src-dir):..:: $(buildscript-dir)/mf2pt1 $(MF2PT1_OPTIONS) $< $(METAFONT_QUIET)) \ + && MFINPUTS=$(abs-src-dir):..:: \ + FONTFORGE=$(FONTFORGE) \ + $(buildscript-dir)/mf2pt1 $(MF2PT1_OPTIONS) $< $(METAFONT_QUIET)) \ && mv $$TMP/*pfb $(outdir); \ rm -rf $$TMP diff --git a/stepmake/stepmake/metafont-vars.make b/stepmake/stepmake/metafont-vars.make index 73f35a53ed..1e50a183f5 100644 --- a/stepmake/stepmake/metafont-vars.make +++ b/stepmake/stepmake/metafont-vars.make @@ -34,5 +34,6 @@ $(foreach f, $(shell test -f $(1) && sed -ne "/^[[:space:]]*input[[:space:]]/s/^ ) # Find dependencies for the target $@, based on the metafont source file $<, -# and write the dependencies to a .dep file. -DO_MF_DEP = ( echo ./$@: $(call scan-mf,$<) > $(basename $@).dep ) && +# and write the dependencies to a .dep file. We cannot strip the extension of $@, +# because we have multiple rules generating .dep files. +DO_MF_DEP = ( echo ./$@: $(call scan-mf,$<) > $@.dep ) && diff --git a/stepmake/stepmake/po-targets.make b/stepmake/stepmake/po-targets.make index 8a0dd76053..0fcedbeafd 100644 --- a/stepmake/stepmake/po-targets.make +++ b/stepmake/stepmake/po-targets.make @@ -9,7 +9,7 @@ XGETTEXT_OPTIONS = \ --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" #### diff --git a/stepmake/stepmake/shared-library-rules.make b/stepmake/stepmake/shared-library-rules.make index 62b2db26d2..3c80a08de4 100644 --- a/stepmake/stepmake/shared-library-rules.make +++ b/stepmake/stepmake/shared-library-rules.make @@ -1,4 +1,5 @@ +$(O_FILES): $(outdir)/config.hh -$(SHARED_LIBRARY): $(outdir)/config.hh $(LO_FILES) +$(SHARED_LIBRARY): $(LO_FILES) $(LD) $(SHARED_FLAGS) -o $@ $(LO_FILES) $(ALL_LDFLAGS) diff --git a/stepmake/stepmake/test-rules.make b/stepmake/stepmake/test-rules.make index d733dbbe69..e10e83c7d8 100644 --- a/stepmake/stepmake/test-rules.make +++ b/stepmake/stepmake/test-rules.make @@ -6,6 +6,6 @@ endef $(foreach a, $(MODULE_LIBS), $(eval $(call MODULE_LIB_template,$(a)))) -$(TEST_EXECUTABLE): $(outdir)/config.hh $(TEST_O_FILES) $(TEST_MODULE_LIBS:%=%/$(outdir)/library.a) +$(TEST_EXECUTABLE): $(TEST_O_FILES) $(TEST_MODULE_LIBS:%=%/$(outdir)/library.a) $(foreach a, $(TEST_MODULE_LIBS), $(MAKE) -C $(a) && ) true $(LD) -o $@ $(TEST_O_FILES) $(TEST_LOADLIBES) $(ALL_LDFLAGS) diff --git a/vim/lilypond-ftplugin.vim b/vim/lilypond-ftplugin.vim index 015028fc9b..c822c43f01 100644 --- a/vim/lilypond-ftplugin.vim +++ b/vim/lilypond-ftplugin.vim @@ -1,7 +1,5 @@ " LilyPond filetype plugin " Language: LilyPond (ft=ly) -" Maintainer: Heikki Junes -" Last Change: 2010 Jul 26 " " Installed As: vim/ftplugin/lilypond.vim " Uses Generated File: vim/syntax/lilypond-words.vim @@ -25,8 +23,8 @@ map :w:se makeprg=lilypond\ \"%<\":make:!t " save & make map :w:se makeprg=lilypond\ \"%<\":make " -" view ps with ghostview -map :!gv --watch "%<.ps" & +" view pdf with ghostview +map :!gv --watch "%<.pdf" & " " prev error map :cp