]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' into lilypond/translation
authorFrancisco Vila <francisco.vila@hispalinux.es>
Wed, 13 Jul 2011 10:14:51 +0000 (12:14 +0200)
committerFrancisco Vila <francisco.vila@hispalinux.es>
Wed, 13 Jul 2011 10:14:51 +0000 (12:14 +0200)
67 files changed:
Documentation/contributor/administration.itexi
Documentation/contributor/introduction.itexi
Documentation/nl/included/generating-output.itexi
Documentation/nl/learning/common-notation.itely
Documentation/nl/learning/fundamental.itely
Documentation/nl/learning/tutorial.itely
Documentation/nl/macros.itexi
Documentation/nl/search-box.ihtml
Documentation/nl/web.texi
Documentation/nl/web/download.itexi
Documentation/nl/web/introduction.itexi
Documentation/nl/web/manuals.itexi
Documentation/notation/pitches.itely
Documentation/notation/staff.itely
Documentation/web/manuals.itexi
input/regression/ambitus-with-ligature.ly [new file with mode: 0644]
input/regression/chord-tremolo-other-commands.ly [new file with mode: 0644]
input/regression/display-lily-tests.ly
input/regression/horizontal-bracket-tweak.ly [new file with mode: 0644]
input/regression/lyric-combine-derived-voice.ly [new file with mode: 0644]
input/regression/lyric-combine-empty-warning.ly [new file with mode: 0644]
input/regression/phrasing-slur-multiple.ly [new file with mode: 0644]
input/regression/slur-grace.ly [new file with mode: 0644]
input/regression/slur-multiple-linebreak.ly [new file with mode: 0644]
input/regression/slur-multiple.ly [new file with mode: 0644]
input/regression/tie-pitched-trill.ly [new file with mode: 0644]
lily/horizontal-bracket-engraver.cc
lily/include/ligature-engraver.hh
lily/ligature-engraver.cc
lily/lyric-combine-music-iterator.cc
lily/mensural-ligature-engraver.cc
lily/midi-item.cc
lily/phrasing-slur-engraver.cc
lily/slur-engraver.cc
lily/spanner.cc
lily/tie-engraver.cc
lily/vaticana-ligature-engraver.cc
ly/grace-init.ly
mf/GNUmakefile
mf/bigcheese.pe.in [deleted file]
mf/feta-flags-generic.mf [new file with mode: 0644]
mf/feta-flags.mf
mf/feta-flags11.mf [new file with mode: 0644]
mf/feta-flags13.mf [new file with mode: 0644]
mf/feta-flags14.mf [new file with mode: 0644]
mf/feta-flags16.mf [new file with mode: 0644]
mf/feta-flags18.mf [new file with mode: 0644]
mf/feta-flags20.mf [new file with mode: 0644]
mf/feta-flags23.mf [new file with mode: 0644]
mf/feta-flags26.mf [new file with mode: 0644]
mf/feta-generic.mf
mf/feta-noteheads-generic.mf
mf/feta-noteheads-test-generic.mf [deleted file]
mf/feta-noteheads.mf
mf/feta-params.mf
mf/feta-scripts.mf
mf/parmesan-noteheads.mf
scm/define-grob-interfaces.scm
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/define-music-display-methods.scm
scm/define-music-properties.scm
scm/define-music-types.scm
scm/display-lily.scm
scm/music-functions.scm
scripts/build/gen-emmentaler-scripts.py
scripts/build/mf-to-table.py

index da8f48276caf3ac59043957dff16cbf60ec176b4..415a30feb88dea10397013d48b3bc121c4422bdc 100644 (file)
@@ -554,6 +554,19 @@ any @code{.py} file in lilypond git.  All such files should be
 converted to use spaces only.
 
 
+@subheading GOP-PROP 2: mentors and frogs
+
+Nothing much was decided.  The list of responsibilities was
+slightly altered; see the new one in @ref{Mentors}.  We should
+encourage more use of the Frogs mailing list.  There's a list of
+contributor-mentor pairs in:
+
+@smallexample
+@uref{https://github.com/gperciva/lilypond-extra/blob/master/people/mentors.txt}
+@end smallexample
+
+That's pretty much it.
+
 
 @node Grand LilyPond Input Syntax Standardization (GLISS)
 @section Grand LilyPond Input Syntax Standardization (GLISS)
index 525792b3b19ff7b2aaf3de8bb45020236722defb..90829b4aaf849b85911716b499232ac6f670aeb3 100644 (file)
@@ -182,9 +182,33 @@ for docs and translations; code patches should almost always go to
 -devel before being pushed).
 
 @item
-Keep track of patches from your contributor.  If you've sent a
-patch to -devel, it's your responsibility to pester people to get
-comments for it, or at very least add it to the google tracker.
+Keep track of patches from your contributor.  Either upload them
+to Rietveld yourself, or help+encourage them to upload the patches
+themselves.  When a patch is on Rietveld, it's your responbility
+to get comments for it, and to add a link to the patch to the
+google tracker.  (tag it @qq{patch-new}, or @qq{patch-review} if
+you feel very confident in it)
+
+@item
+Encourage your contributor to review patches, particularly your
+own!  It doesn't matter if they're not familiar with C++ / scheme
+/ build system / doc stuff -- simply going through the process is
+valuable.  Besides, anybody can find a typo!
+
+@item
+Contact your contributor at least once a week.  The goal is just
+to get a conversation started -- there's nothing wrong with simply
+copy&pasting this into an email:
+
+@example
+Hey there,
+
+How are things going?  If you sent a patch and got a review, do
+you know what you need to fix?  If you sent a patch but have no
+reviews yet, do you know when you will get reviews?  If you are
+working on a patch, what step(s) are you working on?
+@end example
+
 
 @end enumerate
 
index 1259b05c7c19bbb35c41fa31b7b8dafac97a7992..f2f5c13aac2b6892245f706e3a5e1d80c04f36da 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
 @ignore
-    Translation of GIT committish: b275aa092642adb798079f7853309e2f5e4383ce
+    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -214,7 +214,7 @@ Maak een tekstbestand met de naam @file{test.ly} en vul het met:
 
 @c double \\ required because this is inside a macro!
 @example
-\\version "@w{@version{}}"
+\\version "@w{@versionStable{}}"
 @{
   c' e' g' e'
 @}
@@ -234,7 +234,7 @@ lilypond test.ly
 Je ziet dan iets dat lijkt op:
 
 @example
-GNU LilyPond @w{@version{}}
+GNU LilyPond @w{@versionStable{}}
 Verwerken van `test.ly'
 Ontleden...
 Vertolken van muziek...
index d12808b24f5e22444aa618924f5b5efe4264e932..55ab796c98c8ab390b0a8dcb26daea01cce348ed 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
 
 @ignore
-    Translation of GIT committish: 66dd932f6519b7913400a838c5efbc5407e06cd8
+    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -170,7 +170,7 @@ a1 |
 
 Terminologie: @rglos{accidental}, @rglos{key signature},
 @rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp},
-@rglos{transposition}.
+@rglos{transposition}, @rglos{Pitch names}.
 
 Om uit te maken of er wel of geen @notation{toevallig teken}
 geprint moet worden, onderzoekt LilyPond de toonhoogten en
@@ -239,9 +239,6 @@ Notatiehandleiding:
 @ruser{Automatic accidentals},
 @ruser{Key signature}.
 
-Terminologie:
-@rglos{Pitch names}.
-
 
 @node Overbindingen en legatobogen
 @translationof Ties and slurs
@@ -852,7 +849,10 @@ partituren.
 @funindex GrandStaff
 @funindex ChoirStaff
 
-Terminologie: @rglos{brace}.
+Terminologie:
+@rglos{brace},
+@rglos{staff},
+@rglos{system}.
 
 Pianomuziek wordt meestal genoteerd op twee notenbalken die
 verbonden zijn door een @notation{accolade}.  Het afdrukken
@@ -897,6 +897,8 @@ Notatiehandleiding:
 @translationof Combining notes into chords
 @subsection Het combineren van noten tot accoorden
 
+Terminologie: @rglos{chord}.
+
 @cindex accoorden
 @cindex nootlengten in accoorden
 
@@ -904,8 +906,6 @@ Notatiehandleiding:
 @funindex >
 @funindex < ... >
 
-Terminologie: @rglos{chord}.
-
 We zagen eerder hoe noten kunnen worden gecombineerd tot
 @notation{accoorden} door aan te geven dat ze tegelijk
 klinken door ze tussen dubbele gehoekte haken te zetten.
@@ -927,10 +927,15 @@ waardestrepen en overbindingen gebruiken met accoorden.  Ze
 worden geplaatst buiten de hoekige haken.
 
 @lilypond[verbatim,quote,relative=2]
-r4 <c e g>8[ <c f a>]~ <c f a>2 |
-r4 <c e g>8( <c e g>\> <c e g>4 <c f a>\!) |
+r4 <c e g>~ <c f a>2 |
+<c e g>8[ <c f a> <c e g> <c f a>] <c e g>\>[ <c f a> <c f a> <c e g>]\! |
+r4 <c e g>8.\p <c f a>16( <c e g>4-. <c f a>) |
 @end lilypond
 
+@seealso
+Notatiehandleiding:
+@ruser{Chorded notes}.
+
 
 @node Polyfonie binnen een notenbalk
 @translationof Single staff polyphony
@@ -1017,15 +1022,14 @@ een spatie.
 >>
 @end lilypond
 
-Merk de accolades op die zowel de muziek als de liedtekst
-afbakenen.  Het is van essentiëel belang dat de laatste
+@warning{Het is van essentiëel belang dat de laatste
 lettergreep van de afsluitende accolade gescheiden wordt
 door een spatie of nieuwe regel, anders wordt aangenomen dat
 de accolade nog deel uitmaakt van die lettergreep, wat een
 obscure foutmelding oplevert, zie @rprogram{Apparent error
-in ../ly/init.ly}.
+in ../ly/init.ly}.}
 
-Merk tevens de hoekige haken @w{@code{<< ... >>}} op die om
+Merk de hoekige haken @w{@code{<< ... >>}} op die om
 het hele stuk heen staan en aangeven dat de muziek en de
 woorden tegelijk klinken.
 
index 05557e40cccac8acaf2086f67c68d11221203843..9f33f9a1da8a6d04ac36fa84b829813df72a6a6c 100644 (file)
@@ -545,8 +545,8 @@ So, for example, a phrasing slur can start before a manually
 inserted beam and end before the end of the beam -- not very
 musical, perhaps, but possible:
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
- { g8\( a b[ c b\) a] g4 }
+@lilypond[quote,verbatim,ragged-right,relative=2]
+g8\( a b[ c b\) a] g4
 @end lilypond
 
 In general, different kinds of brackets, bracket-like constructs,
@@ -556,13 +556,11 @@ a slur extending into a tuplet (line 2), a beam and a slur
 extending into a tuplet, a tie crossing two tuplets, and a
 phrasing slur extending out of a tuplet (lines 3 and 4).
 
-@lilypond[quote,verbatim,fragment,ragged-right]
-{
-  r16[ g \times 2/3 { r16 e'8] }
-  g16( a \times 2/3 { b16 d) e' }
-  g8[( a \times 2/3 { b8 d') e'~] } |
-  \times 4/5 { e'32\( a b d' e' } a'4.\)
-}
+@lilypond[quote,verbatim,ragged-right,relative=1]
+r16[ g \times 2/3 { r16 e'8] }
+g,16( a \times 2/3 { b16 d) e }
+g,8[( a \times 2/3 { b8 d) e~] } |
+\times 4/5 { e32\( a, b d e } a4.\)
 @end lilypond
 
 
@@ -614,7 +612,7 @@ A single voice can contain many notes in a chord, of course,
 so when exactly are multiple voices needed?  Look first at
 this example of four chords:
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
+@lilypond[quote,verbatim,ragged-right,relative=1]
 \key g \major
 <d g>4 <d fis> <d a'> <d g>
 @end lilypond
@@ -649,7 +647,7 @@ of polyphony.
 Here's how we split the chords above into two voices and add both
 the passing note and a slur:
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right,relative=2]
 \key g \major
 %    Voice "1"               Voice "2"
 << { g4 fis8( g) a4 g } \\ { d4 d d d }  >>
@@ -659,7 +657,7 @@ Notice how the stems of the second voice now point down.
 
 Here's another simple example:
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right,relative=2]
 \key d \minor
 %    Voice "1"             Voice "2"
 << { r4 g g4. a8 }    \\ { d,2 d4 g }       >> |
@@ -668,12 +666,12 @@ Here's another simple example:
 @end lilypond
 
 It is not necessary to use a separate @code{<< \\ >>} construct
-for each bar. For music with few notes in each bar this layout
+for each bar.  For music with few notes in each bar this layout
 can help the legibility of the code, but if there are many
 notes in each bar it may be better to split out each voice
 separately, like this:
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right,relative=2]
 \key d \minor
 << {
   % Voice "1"
@@ -692,7 +690,7 @@ separately, like this:
 @cindex voices, naming
 @cindex voices crossing brackets
 @cindex slurs crossing brackets
-@cindex ties crossing brackest
+@cindex ties crossing brackets
 
 This example has just two voices, but the same construct may be
 used to encode three or more voices by adding more back-slash
@@ -702,7 +700,7 @@ The Voice contexts bear the names @code{"1"}, @code{"2"}, etc.
 In each of these contexts, the vertical direction of slurs,
 stems, ties, dynamics etc., is set appropriately.
 
-@lilypond[quote,verbatim,fragment]
+@lilypond[quote,verbatim]
 \new Staff \relative c' {
   % Main voice
   c16 d e f
@@ -894,7 +892,7 @@ shall see, this encounters some difficulties.  We begin as
 we have learnt, using the @code{<< \\  >>} construct to
 enter the music of the first bar in three voices:
 
-@lilypond[quote,verbatim,fragment,ragged-right]
+@lilypond[quote,verbatim,ragged-right]
 \new Staff \relative c'' {
   \key aes \major
   <<
@@ -914,10 +912,10 @@ odd-numbered voices taking upward stems and the even-numbered
 voices downward ones.  The stems for voices 1 and 2 are right,
 but the stems in voice 3 should go down in this particular piece
 of music.  We can correct this by skipping voice three
-and placing the music in voice four. This is done by simply
+and placing the music in voice four.  This is done by simply
 adding another pair of @code{\\}.
 
-@lilypond[quote,verbatim,fragment,ragged-right]
+@lilypond[quote,verbatim,ragged-right]
 \new Staff \relative c'' {
   \key aes \major
   <<  % Voice one
@@ -941,11 +939,11 @@ voices to occupy the same vertical note column provided the stems are
 in opposite directions, but the notes from the third and fourth voices
 are displaced, if necessary, to avoid the note heads colliding.  This
 usually works well, but in this example the notes of the lowest voice
-are clearly not well placed by default. LilyPond provides several ways
+are clearly not well placed by default.  LilyPond provides several ways
 to adjust the horizontal placing of notes.  We are not quite ready yet
 to see how to correct this, so we shall leave this problem until a
-later section --- see the @code{force-hshift} property in @ref{Fixing
-overlapping notation}.
+later section --- see the @code{force-hshift} property in
+@ref{Fixing overlapping notation}.
 
 
 @seealso
@@ -1174,7 +1172,7 @@ relative to the other notes.
 The @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, and
 @code{\shiftOff} commands specify the degree to which notes and
 chords of the voice should be shifted if a collision
-would otherwise occur. By default, the outer voices (normally
+would otherwise occur.  By default, the outer voices (normally
 voices one and two) have @code{\shiftOff} specified, while the
 inner voices (three and four) have @code{\shiftOn} specified.
 When a shift is applied, voices one and three are shifted to
@@ -1217,7 +1215,7 @@ explicitly link
 the lyrics to the notes with @code{\lyricsto@{@}}, using the
 name assigned to the Voice.
 
-@lilypond[quote,verbatim,fragment]
+@lilypond[quote,verbatim]
 <<
   \new Voice = "one" {
     \relative c'' {
@@ -1391,7 +1389,7 @@ appear explicitly in the input file must be added to the
 output.  For example, compare the input and output of the
 following example:
 
-@lilypond[quote,verbatim,relative=2,fragment]
+@lilypond[quote,verbatim,relative=2]
 cis4 cis2. | a4 a2. |
 @end lilypond
 
@@ -1485,16 +1483,11 @@ where @var{type} is a context name (like @code{Staff} or
 @code{Voice}).  This command creates a new context, and starts
 interpreting the @var{music-expression} within that context.
 
-(Note that a @code{\new Score} command is not normally required,
-as the essential top-level @code{Score} context is created
-automatically when the music expression within the @code{\score}
-block is interpreted.  The only reason for creating a @code{Score}
-context explicitly using @code{\new Score} is to introduce a
-@code{\with} block in which one or more score-wide default values
-of context properties may be specified.  Information on using
-@code{\with} blocks can be found under the heading
-@qq{Setting context properties with @code{\\with} } in
-@ref{Modifying context properties}.)
+@warning{@bs{}@code{new Score} should not be used as the essential
+top-level @code{Score} context is created automatically when the music
+expression within the @bs{}@code{score} block is interpreted.  Score-wide
+default values of context properties can be changed within the
+@bs{}@code{layout} block.  See @ref{Modifying context properties}}
 
 You have seen many practical examples which created new
 @code{Staff} and @code{Voice} contexts in earlier sections, but
@@ -1837,7 +1830,7 @@ font size, which affects the size of the note heads (among
 other things) several times.  The change is from the default
 value, not the most recently set value.
 
-@lilypond[quote,verbatim,ragged-right,relative=1,fragment]
+@lilypond[quote,verbatim,ragged-right,relative=1]
 c4 d
 % make note heads smaller
 \set fontSize = #-4
@@ -1895,27 +1888,6 @@ like this:
 >>
 @end lilypond
 
-Or, if the property override is to be applied to all staves
-within the score, it may be appended to an explicit
-@code{\new Score} command, like this:
-
-@lilypond[quote,verbatim,ragged-right]
-\score {
-  \new Score \with { extraNatural = ##f } <<
-    \new Staff {
-      \relative c'' {
-        gis4 ges aes ais
-      }
-    }
-    \new Staff {
-      \relative c'' {
-        gis4 ges aes ais
-      }
-    }
-  >>
-}
-@end lilypond
-
 Properties set in this way may still be changed dynamically using
 @code{\set} and returned to the default value set in the
 @code{\with} block with @code{\unset}.
@@ -1960,6 +1932,31 @@ throughout the @code{\score} or @code{\book} block in which the
 }
 @end lilypond
 
+If the property override is to be applied to all staves
+within the score:
+
+@lilypond[quote,verbatim]
+\score {
+  <<
+    \new Staff {
+      \relative c'' {
+        gis4 ges aes ais
+      }
+    }
+    \new Staff {
+      \relative c'' {
+        gis4 ges aes ais
+      }
+    }
+  >>
+  \layout {
+    \context {
+      \Score extraNatural = ##f
+    }
+  }
+}
+@end lilypond
+
 @noindent
 Context properties set in this way may be overridden for particular
 instances of contexts by statements in a @code{\with} block, and by
@@ -2133,11 +2130,16 @@ for all contexts of a particular type by including the
 @code{\set} command in a @code{\context} block in the
 same way.
 
-
 @seealso
 Notation Reference: @ruser{Modifying context plug-ins},
 @ruser{Changing context default settings}.
 
+@knownissues
+The @code{Stem_engraver} and @code{Beam_engraver} attach their
+objects to note heads.  If the @code{Note_heads_engraver} is removed
+no note heads are produced and therefore no stems or beams are created
+either.
+
 
 @node Extending the templates
 @section Extending the templates
@@ -2454,8 +2456,8 @@ lower = \relative c, {
 @end lilypond
 
 None of the templates provides this layout exactly.  The nearest is
-@q{SATB vocal score and automatic piano reduction} -- see @ref{Vocal
-ensembles} -- but we need to change the layout and add a piano
+@q{SATB vocal score and automatic piano reduction} -- see
+@ref{Vocal ensembles} -- but we need to change the layout and add a piano
 accompaniment which is not derived automatically from the vocal parts.
 The variables holding the music and words for the vocal parts are
 fine, but we shall need to add variables for the piano reduction.
@@ -2844,6 +2846,76 @@ signature to each staff using our predefined variable, @code{\keyTime}.
 @}  % end Score context
 @end example
 
+@cindex stretchability of staves
+@cindex staves, stretchability
+
+The above layout of the organ staves is almost perfect; however,
+there is a slight defect which is not visible by looking at just a
+single system: The distance of the pedal staff to the left hand staff
+should behave approximately the same as the right hand staff to the
+left hand staff.  In particular, the stretchability of staves in a
+@code{PianoStaff} context is limited (so that the distance between
+the staves for the left and right hand can't become too large), and
+the pedal staff should behave similarly.
+
+@cindex sub-properties
+@cindex properties, sub-properties
+@cindex graphical objects
+@cindex objects, graphical
+@cindex grobs
+
+Stretchability of staves can be controlled with the
+@code{staff-staff-spacing} property of the
+@code{VerticalAxisGroup} @q{graphical object} (commonly called
+@q{grob}s within the lilypond documentation) -- don't worry about
+the details right now; this is fully explained later.  For the
+curious, have a look at @ruser{Overview of modifying properties}.
+In this case, we want to modify the @code{stretchability}
+sub-property only. Again, for the curious, you can find the
+default values for the staff-staff-spacing property
+in file @file{scm/define-grobs.scm} by looking up the definition
+of the @code{VerticalAxisGroup} grob.  The value for
+@code{stretchability} is taken from the definition of the
+@code{PianoStaff} context (in file @file{ly/engraver-init.ly})
+so that the values are identical.
+
+@example
+\score @{
+  <<  % PianoStaff and Pedal Staff must be simultaneous
+    \new PianoStaff <<
+      \new Staff = "ManualOne" <<
+        \keyTime  % set key and time signature
+        \clef "treble"
+        \new Voice @{
+          \voiceOne
+          \ManualOneVoiceOneMusic
+        @}
+        \new Voice @{
+          \voiceTwo
+          \ManualOneVoiceTwoMusic
+        @}
+      >>  % end ManualOne Staff context
+      \new Staff = "ManualTwo" \with @{
+        \override VerticalAxisGroup
+          #'staff-staff-spacing  #'stretchability = 5
+      @} <<
+        \keyTime
+        \clef "bass"
+        \new Voice @{
+          \ManualTwoMusic
+        @}
+      >>  % end ManualTwo Staff context
+    >>  % end PianoStaff context
+    \new Staff = "PedalOrgan" <<
+      \keyTime
+      \clef "bass"
+      \new Voice @{
+        \PedalOrganMusic
+      @}
+    >>  % end PedalOrgan Staff
+  >>
+@}  % end Score context
+@end example
 That completes the structure.  Any three-staff organ music
 will have a similar structure, although the number of voices
 may vary.  All that remains now
@@ -2887,7 +2959,10 @@ PedalOrganMusic = \relative c {
           \ManualOneVoiceTwoMusic
         }
       >>  % end ManualOne Staff context
-      \new Staff = "ManualTwo" <<
+      \new Staff = "ManualTwo" \with {
+        \override VerticalAxisGroup
+          #'staff-staff-spacing #'stretchability = 5
+      } <<
         \keyTime
         \clef "bass"
         \new Voice {
@@ -2906,6 +2981,9 @@ PedalOrganMusic = \relative c {
 }  % end Score context
 @end lilypond
 
+@seealso
+Music Glossary:
+@rglos{system}.
 
 @node Saving typing with variables and functions
 @subsection Saving typing with variables and functions
@@ -3156,4 +3234,3 @@ leading to
 >>
 @end lilypond
 
-
index 0b08b426b0964d27edcd37ee4da3f8019824cbfb..055bc6f87b681ddc07b78294eb11443006dead30 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
 @ignore
-    Translation of GIT committish: 66dd932f6519b7913400a838c5efbc5407e06cd8
+    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -389,16 +389,42 @@ naam @code{r}@tie{}:
 
 Terminologie: @rglos{time signature}.
 
-De @notation{maatsoort} kun je aangeven met het @code{\time}
-commando:
+De @notation{maatsoort} kun je aangeven met het @code{\time}-commando:
+
+@lilypond[verbatim,quote]
+\relative c'' {
+  \time 3/4
+  a4 a a
+  \time 6/8
+  a4. a
+  \time 4/4
+  a4 a a a
+}
+@end lilypond
+
+@subheading Tempo-aanduidingen
+
+@cindex tempo marks
+@cindex metronome marks
+
+@funindex \tempo
+@funindex tempo
+
+Terminologie: @rglos{tempo indication}, @rglos{metronome}.
+
+De @notation{tempo indication} en @notation{metronome mark} worden
+gezet met het @code{\tempo}-commando:
 
 @lilypond[verbatim,quote]
 \relative c'' {
   \time 3/4
+  \tempo "Andante"
   a4 a a
   \time 6/8
+  \tempo 4. = 96
   a4. a
   \time 4/4
+  \tempo  "Presto" 4 = 120
   a4 a a a
 }
 @end lilypond
@@ -444,6 +470,7 @@ toont:
 \relative c, {
   \clef "bass"
   \time 3/4
+  \tempo "Andante" 4 = 120
   \clef "bass"
   c2 e8 c'
   g'2.
index a7e20d7b5fe9b28eeb227072b5d11428eb984960..75288f4cd6dc4f017ea041fe03b54ba673647670 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @ignore
-    Translation of GIT committish: 77c34ddc0877c0625a48e1b41049b6dbaae215e0
+    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -16,7 +16,7 @@
 MACRO DEFINITIONS GUIDELINES
 ****************************
 
-This file should contain macro defintions which are common to all
+This file should contain macro definitions which are common to all
 languages, i.e. all macro definitions which do not contain text that
 should be translated (namely text visible in the output).
 
@@ -68,6 +68,36 @@ translations should be in macros.itexi.
 @end ifnothtml
 
 
+@c do not translate the following macro -- it is used in
+@c an untranslated manual.
+
+@ifhtml
+
+@macro advanced{TEXT}
+@html
+<div class="advanced">
+@end html
+@strong{Advanced note:} \TEXT\
+@c keep the space for proper nesting of </p>
+
+@html
+</div>
+@end html
+@end macro
+
+@end ifhtml
+
+@ifnothtml
+
+@macro advanced{TEXT}
+@quotation
+@b{Advanced note:} \TEXT\
+@end quotation
+@end macro
+
+@end ifnothtml
+
+
 @macro docMain
 @cartouche
 Voor meer informatie over waar deze handleiding in de rest van de
index b28d1a7ee893c1f934891852fc2defa38ebc6993..51687b776596d498d0e8b62576483212aa3f2da9 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-    Translation of GIT committish: eef24b23f2bd35eb068584c2c459ba97227caf15
+    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
@@ -8,11 +8,11 @@
 <form action="http://google.com/search"
       method="get"
       name="search"
-      onSubmit="search.q.value='site:lilypond.org +v2.12 '
+      onSubmit="search.q.value='site:lilypond.org +v2.14 '
                + search.brute_query.value"
-      onMouseMove="search.q.value='site:lilypond.org +v2.12 '
+      onMouseMove="search.q.value='site:lilypond.org +v2.14 '
                   + search.brute_query.value"
-      onKeyUp="search.q.value='site:lilypond.org +v2.12 '
+      onKeyUp="search.q.value='site:lilypond.org +v2.14 '
               + search.brute_query.value">
   <input type="hidden" name="btnG" value="Zoek met Google">
   <input type="text" name="brute_query" onfocus="this.value=''" value="Zoek">
index c432b127b0a40cc527476ea27382746df481435a..da78bc54aae0bd48827b15ee31c420fe1c933bf4 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: nl -*-
 @ignore
-    Translation of GIT committish: 66dd932f6519b7913400a838c5efbc5407e06cd8
+    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -24,8 +24,6 @@
 @include macros.itexi
 @include weblinks.itexi
 
-@afourpaper
-
 @c don't remove this comment.
 @ignore
 @omfcreator Graham Percival and Patrick McCarty
@@ -54,6 +52,25 @@ License''.
 @end quotation
 @end copying
 
+@c Info files are no longer installed in a subdirectory, images are
+@c expected to be found in lilypond/ subdirectory.
+@dircategory GNU LilyPond --- the music typesetter
+@direntry
+* LilyPond Learning Manual: (lilypond-learning).  Start here.
+* Music Glossary: (music-glossary).               For non-English users.
+* LilyPond: (lilypond-notation).                           LilyPond Notation Reference.
+* LilyPond Snippets: (lilypond-snippets).         Short tricks, tips, and examples.
+* LilyPond Internals Reference: (lilypond-internals).  Definitions for tweaking.
+* LilyPond Application Usage: (lilypond-usage). Installing and running applications.
+* LilyPond Website: (lilypond-web).    Preview of new website.
+* lilypond: (lilypond-usage)Running LilyPond.      Invoking the LilyPond program.
+* abc2ly: (lilypond-usage)Invoking abc2ly.      Importing ABC.
+* convert-ly: (lilypond-usage)Updating files with convert-ly. Older LilyPond versions.
+* etf2ly: (lilypond-usage)Invoking etf2ly.      Importing Finale.
+* lilypond-book: (lilypond-usage)LilyPond-book. Integrating text and music.
+* midi2ly: (lilypond-usage)Invoking midi2ly.    Importing MIDI.
+* musicxml2ly: (lilypond-usage)Invoking musicxml2ly.  Importing MusicXML.
+@end direntry
 
 @c TITLE PAGE
 @ifnottex
@@ -100,7 +117,7 @@ Voor LilyPond versie @version{}
 @divId{quickSummary}
 @subheading Wat is LilyPond?
 
-LilyPond is een muzieknotatie programma en beoogt het produceren van
+LilyPond is een muzieknotatieprogramma en beoogt het produceren van
 bladmuziek van de hoogst mogelijke kwaliteit.  Het integreert de
 esthetiek van traditioneel gegraveerde bladmuziek in computer printouts.
 LilyPond is vrije software en is onderdeel van het
@@ -187,27 +204,6 @@ Distributions will want to install lilypond.info in postinstall, doing:
 
 @end ignore
 
-@c Info files are no longer installed in a subdirectory, images are
-@c expected to be found in lilypond/ subdirectory.
-@dircategory GNU LilyPond --- the music typesetter
-@direntry
-* LilyPond Learning Manual: (lilypond-learning).  Start here.
-* Music Glossary: (music-glossary).               For non-English users.
-* LilyPond: (lilypond-notation).                           LilyPond Notation Reference.
-* LilyPond Snippets: (lilypond-snippets).         Short tricks, tips, and examples.
-* LilyPond Internals Reference: (lilypond-internals).  Definitions for tweaking.
-* LilyPond Application Usage: (lilypond-usage). Installing and running applications.
-* LilyPond Website: (lilypond-web).    Preview of new website.
-* lilypond: (lilypond-usage)Running LilyPond.      Invoking the LilyPond program.
-* abc2ly: (lilypond-usage)Invoking abc2ly.      Importing ABC.
-* convert-ly: (lilypond-usage)Updating files with convert-ly. Older LilyPond versions.
-* etf2ly: (lilypond-usage)Invoking etf2ly.      Importing Finale.
-* lilypond-book: (lilypond-usage)LilyPond-book. Integrating text and music.
-* midi2ly: (lilypond-usage)Invoking midi2ly.    Importing MIDI.
-* musicxml2ly: (lilypond-usage)Invoking musicxml2ly.  Importing MusicXML.
-@end direntry
-
-
 @c FIXME: this still doesn't solve the broken links in pdf and big
 @c        html; we'll need a bunch of @iftext and stuff in here. -gp
 @c ****************** SPECIAL MACROS FOR WEB MANUAL ************
index 57613ce068b20fab07a683e20d5c30f23e53ef1e..eb44b3d3c2ab8487932fc3516569d3a24cb2b201 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
 @ignore
-    Translation of GIT committish: 303c4023fce97de0cfb2d27a7e689d1ad7c4752b
+    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -26,7 +26,7 @@ eerst de informatie over onze @ref{Tekstinvoer}.}
 
 @divClass{heading-center}
 @ifclear web_version
-  @c yes, we want verisonDevel here, since the online links
+  @c yes, we want versionDevel here, since the online links
   @c for @version won't be up yet!
   @heading Downloads voor LilyPond @versionDevel
 
@@ -41,13 +41,15 @@ eerst de informatie over onze @ref{Tekstinvoer}.}
 
 @divEnd
 
+@divClass{link-headings}
+
 @divClass{column-left-top}
 @subheading Voor gebruikers
 
 @itemize
 
 @item
-@c TODO: duplicate to avoid underlined refs in HTML?  icky.
+@c ref is duplicated to avoid underlining ref as image.
 @ref{Unix, @sourceimage{logo-linux,,,}
 @sourceimage{logo-freebsd,,,}}
 @ref{Unix, Unix (Linux en FreeBSD)}
@@ -84,6 +86,7 @@ meest recente ontwikkelversie
 @end itemize
 @divEnd
 
+@divEnd
 
 @divClass{column-center-bottom}
 
@@ -98,7 +101,7 @@ License} (GNU Algemene Publieke Licentie).
 
 @subheading Sponsors
 
-Hartelijk dank aan @uref{http://www.vt.edu/, Virgina Tech} en
+Hartelijk dank aan @uref{http://www.vt.edu/, Virginia Tech} en
 @uref{http://www.linuxaudio.org/, linuxaudio.org} voor het
 sponsoren van onze bandbreedte.
 
@@ -213,9 +216,15 @@ Op de commandoregel, typ:
 uninstall-lilypond
 @end example
 
-@divEnd
+@subsubheading Hulp
+
+Op de commandoregel, typ:
 
+@example
+sh lilypond-@versionStable{}-OS-TYPE.sh --help
+@end example
 
+@divEnd
 
 @divClass{column-right-top}
 @subheading Een bestand compileren
@@ -236,22 +245,22 @@ distributie voor het upgraden naar deze versies.
 @item
 @sourceimage{logo-fedora,,,}
 @uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447,
-Fedora: LilyPond 2.12.3}
+Fedora: LilyPond 2.14.1}
 
 @item
 @sourceimage{logo-ubuntu,,,}
 @uref{http://packages.ubuntu.com/search?keywords=lilypond,
-Ubuntu: LilyPond 2.12.2}
+Ubuntu: LilyPond 2.12.3}
 
 @item
 @sourceimage{logo-slackware,,,}
 @uref{http://www.johannes-schoepfer.de/lilypond/,
-Slackware: LilyPond 2.12.3}
+Slackware: LilyPond 2.14.1}
 
 @item
 @sourceimage{logo-debian,,,}
 @uref{http://packages.debian.org/search?keywords=lilypond,
-Debian: LilyPond 2.12.2}
+Debian: LilyPond 2.12.3}
 
 @item
 @sourceimage{logo-suse,,,}
@@ -295,12 +304,14 @@ acknowledged.
 @item
 @sourceimage{logo-macosx,,,}
 @downloadStableDarwinNormal
-Voor Intel processors (als je twijfelt, gebruik deze).
+Voor MacOS 10.4 of nieuwer, met Intel-processors (als je
+twijfelt, gebruik deze).
 
 @item
 @sourceimage{logo-macosx,,,}
 @downloadStableDarwinPPC
-Voor G3 and G4 CPUs (oudere Apple computers).
+Voor MacOS 10.4 of nieuwer, met G3- en G4-processors (oudere
+Apple computers).
 
 @end itemize
 
@@ -348,11 +359,11 @@ cd ~/bin
 @item
 Maak een bestand genaamd @command{lilypond} met als inhoud
 
-@help obvious css issue to be dealt with.  :(
-@c we need a small font here to fit.  -gp
-@smallexample
+@divClass{h-scroll-auto}
+@example
 exec @var{MAP}/LilyPond.app/Contents/Resources/bin/lilypond "$@@"
-@end smallexample
+@end example
+@divEnd
 
 @warning{@var{MAP} is normaal gesproken @code{/Applications/}}
 
@@ -397,9 +408,11 @@ De scripts --- zoals @command{lilypond-book},
 Scripts kunnen ook worden uitgevoerd op de commandoregel
 door ze direct aan te roepen:
 
+@divClass{h-scroll-auto}
 @example
 @var{pad/naar}/LilyPond.app/Contents/Resources/bin/lilypond
 @end example
+@divEnd
 
 Dat geldt ook voor alle andere scripts in die map, zoals
 @command{lilypond-book} en @command{convert-ly}.
@@ -438,7 +451,7 @@ acknowledged.
 @item
 @sourceimage{logo-windows,,,}
 @downloadStableWindows
-Voor Windows ME, NT, 2000, XP, Vista, en Windows 7.
+Voor Windows 2000, XP, Vista, en Windows 7.
 
 @end itemize
 
@@ -626,6 +639,3 @@ gegeven in @ref{Vrijheid}.
 @include gpl.itexi
 
 @divEnd
-
-
-
index 03b9995f082f4791534a2286fdc67fdb1aad986b..4785f0c9b4e526f855355b687c9b57a53025cc0e 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: nl; fill-column: 60 -*-
 @c This file is part of web.texi
 @ignore
-    Translation of GIT committish: 303c4023fce97de0cfb2d27a7e689d1ad7c4752b
+    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -34,6 +34,8 @@ volgens de beste tratities van klassieke muziekgravure.
 
 @divEnd
 
+@divClass{link-headings}
+
 @divClass{column-left-top}
 @subheading Wat LilyPond doet
 
@@ -82,6 +84,11 @@ volgens de beste tratities van klassieke muziekgravure.
 @end itemize
 @divEnd
 
+@divEnd
+
+@c TRANSLATORS, translations are not yet compiled in Info format, so
+@c it's not worth translating the right column of the following
+@c menu. -JM
 @divClass{hide}
 @menu
 * Functies::                    What can LilyPond do?
@@ -308,7 +315,7 @@ De standaard uitvoer kan ingrijpend worden veranderd.  Dit
 is een indrukwekkende Schenker-analyse, gemaakt door Kris
 Schaffer, voor een artikel in in
 @uref{http://www.linuxjournal.com/article/8364 , Linux
-Journal.}.  Voor de duidelijkheid zijn hier kleuren
+Journal}.  Voor de duidelijkheid zijn hier kleuren
 toegevoegd.
 
 @exampleImage{bach-schenker}
@@ -586,11 +593,10 @@ Publishing}, partituren van hoge kwaliteit van religieuze
 muziek, beschikbaar voor directe download of ouderwets op papier.
 
 @item
-@uref{http://theshadylanepublishing.com/, The Shady Lane
-Publishing}, een @qq{micro muziekuitgeverij} met als
-doelstelling het promoten van een nieuwe vorm van muzikale
-economie, die dichter bij de muzikanten en muziekliefhebbers
-staat.
+@uref{http://shadylane.fr, The Shady Lane Publishing},
+een @qq{micro muziekuitgeverij} met als doelstelling het
+promoten van een nieuwe vorm van muzikale economie, die
+dichter bij de muzikanten en muziekliefhebbers staat.
 
 @end itemize
 
@@ -598,6 +604,7 @@ staat.
 
 @divEnd
 
+@contactUsAbout{concerten of bladmuziek}
 
 @divClass{column-center-bottom}
 @subheading En nu?
@@ -620,6 +627,29 @@ nu te lezen, ga dan verder naar @ref{Essay}.
 @divClass{keep-bullets}
 @itemize
 
+@item
+april 2011
+
+@uref{http://www.linux-magazine.com,Linux Magazine} publiceert een
+artikel getiteld
+@uref{http://www.linux-magazine.com/w3/issue/126/088-090_projects.pdf,
+Projects on the Move}.  Het is een inleiding in MuseScore,
+
+LilyPond en Chordii.  Auteur Carla Schroder schrijft
+@qq{LilyPond wordt aangestuurd vanaf de commandoregel, maar
+je niet afschrikken door het ontbreken van een GUI; LilyPond
+is gebruiksvriendelijk en gemakkelijk te leren}, en ze geeft
+een direct te gebruiken voorbeeld.
+
++@item
+mei 2010
+
+Peter Kirn, op de Create Digital Music website, publiceert een
+@uref{http://createdigitalmusic.com/2010/05/14/lilypond-free-beautiful-music-notation-engraving-for-anyone/,LilyPond
+recentie}.  Hij neemt een
+evenwichtig standpunt in over gebruik, prijst LilyPonds
+hoge kwaliteit van notatie en stelt voor het zelf uit te proberen.
+
 @item
 september 2009
 
@@ -627,7 +657,25 @@ Het Duitse blad LinuxUser schrijft een
 @uref{http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2009/10/Digitaler-Notenschluessel,
 artikel over LilyPond}.
 
+@item
+augustus 2009
+
+Ann Drinan, op de
+@uref{http://www.polyphonic.org/article.php?id=188, Polyphonic.org}
+website, presenteert opmerkingen van twee orkestbibliothekarissen
+die praten over het gebruik van software om hun bibliotheken te
+onderhouden.
 
+@item
+juni 2009
+
+In een @uref{http://news.lilynet.net/Free-Music-Now, artikel}
+gepubliceerd in het Franse @emph{National Conservatory Parent
+Association}'s jaarblad, legt de Franse componist en LilyPond-bijdrager
+Valentin Villenave uit waarom Vrije licenties, en in het bijzonder
+LilyPond-gegraveerde partituren, van instrumenteel belang zijn in
+het voor iedereen toegankelijk maken van genoteerde muziek.
 @item
 februari 2008
 
@@ -865,8 +913,31 @@ aan een paar vrienden van mij te laten zien hoeveel potentie
 het wel niet heeft.}
 @divEnd
 
+
+@divClass{testimonial-item}
+@subsubheading @uref{http://webusers.siba.fi/~mkuuskan/, Dr. Mika Kuuskankare}, onderzoeker aan de @uref{http://siba.fi, Sibelius Academy Finland}, componist en auteur van Expressive Notation Package (ENP)
+
+@qq{Ik heb het diepste respect voor LilyPond en haar
+scheppers en beheerders omdat ik uit persoonlijke ervaring
+weet hoe moeilijk dit soort software kan zijn.}
+@divEnd
+
+
+@divClass{testimonial-item}
+@subsubheading @uref{http://camerondh.blogspot.com, David Cameron}, Muzikant, professioneel typesetter en sinds lang SCORE-gebruiker
+
+@qq{Mijn hartelijke dank aan iedereen die bijdraagt​aan dit
+project.  Ik was een power SCORE-gebruiker voor grote
+zetwerk huizen lang geleden in de jaren '90, maar voor mijn
+gevoel maakt LilyPond het mogelijk om precies datgene op
+papier te krijgen wat ik wil, in het bijzonder als het niet
+"standaard" praktijk is.}
+@divEnd
+
 @divEnd
 
+@contactUsAbout{nieuwsberichten of gebruikerservaringen}
+
 @divClass{column-center-bottom}
 @subheading En nu?
 
@@ -1074,14 +1145,10 @@ verplaatst ook de cursor in het grafische beeld, en
 syntaxfouten in LilyPond-verfijningen (tweaks) worden
 gehighlight in het tekstvenster.
 
-@warning{Denemo ondersteunt officieel de gedateerde Lilypond
-versie 2.8.7, die veel functies mist die sindsdien zijn
-toegevoegd.  De Denemo-ontwikkelaars werken aktief aan
-ondersteunin van onze huidige stabiele 2.12-versie.}
 @divEnd
 
 @divClass{column-center-top}
-@subheading Tekst omgeving: Emacs en Vim
+@subheading Tekst omgeving
 
 @sourceimage{logo-linux,,,}
 @sourceimage{logo-freebsd,,,}
@@ -1096,9 +1163,9 @@ uitbreidbare editor en kan gebruikt worden als een
 Geïntegreerde Ontwikkel Omgeving (IDE).  Er is een
 @q{lilypond mode} die de taaldefinities voor het werken met
 LilyPond-broncodebestanden levert.  Verder heeft een van
-onze ontwikkelaars @uref{http://nicolas.sceaux.free.fr/
-lilypond/lyqi.html,lyqi} geschreven, een Emacs major mode.
-
+onze ontwikkelaars
+@uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi}
+geschreven, een Emacs major mode.
 
 @uref{http://www.vim.org}
 
@@ -1114,18 +1181,7 @@ LilyPond-invoerbestanden.
 Meer informatie over instellingen voor Emacs en Vim is te
 vinden in @rprogram{Text editor support}.
 
-@divEnd
-
-@ignore these may not need to be here at all, as they are purely
-MacOS scripts.
-
-@divClass{column-center-top}
-@subheading Andere programma's
-
-@subsubheading Tekstomgeving: TexShop
-
 @sourceimage{logo-macosx,,,}
-
 @uref{http://www.uoregon.edu/~koch/texshop}
 
 De TexShop-editor voor MacOS@tie{}X kan uitgebreid worden
@@ -1137,13 +1193,22 @@ van de uitbreidingen die beschikbaar zijn op:
 @uref{http://users.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts}
 @end example
 
-@subsubheading TextMate
+@sourceimage{logo-macosx,,,}
+Er is een LilyPond bundel voor TextMate, een commerciële editor for MacOS.
+Die kan je installeren met:
+
+@example
+mkdir -p /Library/Application\ Support/TextMate/Bundles
+cd /Library/Application\ Support/TextMate/Bundles
+git clone http://github.com/textmate/lilypond.tmbundle.git
+
+@end example
 
 @divEnd
-@end ignore
+
 
 @divClass{column-center-top}
-@subheading Andere programma's die LilyPond-code kunnen exporteren
+@subheading Programma's die LilyPond-code kunnen exporteren
 
 @subsubheading Score, tab en MIDI-editors:
 
@@ -1155,8 +1220,8 @@ van enkelvoudige notenbalken heeft.
 
 @item
 @uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd},
-is gebaseerd op de @uref{http://cairographics.org, Cairo}
-bibliotheek en heeft experimentele LilyPond export
+een partituur editor gebaseerd op de @uref{http://cairographics.org, Cairo}
+bibliotheek en heeft experimentele LilyPond export.
 
 @item
 @uref{http://www.tuxguitar.com.ar/,TuxGuitar}, een
@@ -1164,17 +1229,25 @@ multi-track tablatuur-editor en -speler, heeft een
 partituur-beeld en tab-beeld en kan exporteren naar LilyPond.
 
 @item
-@uref{http://musescore.org,MuseScore} heeft onvolledige
-LilyPond-export maar wordt actief ontwikkeld.
+@uref{http://musescore.org,MuseScore}, een partituur-editor,
+heeft onvolledige LilyPond-export maar wordt actief
+ontwikkeld.
 
 @item
-@uref{http://canorus.org,Canorus} kan ook exporteren naar
-LilyPond, maar is nog beta-software.  Testers zijn welkom.
+@uref{http://canorus.org,Canorus}, een partituur-editor, kan
+ook exporteren naar LilyPond, maar is nog beta-software.
+Testers zijn welkom.
 
 @item
 @uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor},
 een realtime monofonische MIDI naar LilyPond-vertaler.
 
+@item
+@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm,
+NW2LY} een a C#-programma dat een
+@uref{http://www.noteworthysoftware.com/, NoteWorthy}-lied naar
+LilyPond converteert.
+
 @end itemize
 
 @subsubheading Gereedschappen voor de commandoregel
@@ -1182,13 +1255,23 @@ een realtime monofonische MIDI naar LilyPond-vertaler.
 @itemize
 
 @item
-@uref{http://strasheela.sourceforge.net, Strasheela} is
-@qq{een hoog-expressief constraint-gebaseerd muziek
-componeer systeem}.
+@uref{http://www.projectabjad.org/,Abjad}, een
+@uref{http://www.python.org/,Python} API voor Formalized
+Score Control, ontworpen om componisten ingewikkelde stukken
+LilyPond-notatie op te laten bouwen op een iteratieve en
+incrementele manier.
 
 @item
-@uref{http://common-lisp.net/project/fomus/,FOMUS}, een LISP-bibliotheek
-voor het genereren van muzieknotatie.
+@uref{http://common-lisp.net/project/fomus/,FOMUS}, een
+LISP-bibliotheek voor het genereren van muzieknotatie vanuit
+computermuziek softwareomgevingen.
+
+@item
+@uref{http://strasheela.sourceforge.net,Strasheela}, een
+omgeving gebouwd bovenop de
+@uref{http://www.mozart-oz.org/, Mozart/Oz}
+constraint-gebaseerde programmeertaal.
+
 
 @end itemize
 @divEnd
index 352f52be042be69d0b5438f40e681fd9b6cbd878..054157ba8704c04589dbf509c4246aac302c3e4d 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
 @ignore
-    Translation of GIT committish: 303c4023fce97de0cfb2d27a7e689d1ad7c4752b
+    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -21,7 +21,6 @@
 @spanEnd
 @end macro
 
-
 @divClass{heading-center}
 @ifclear web_version
   @heading Handleidingen voor LilyPond @version
 
 @divEnd
 
-@c TODO: do we want these links to be in larger text / bold ?   CSS.
+@divClass{link-headings}
 
 @divClass{column-center-top}
 @subheading Inleiding
 
 @itemize
 
-@item @ref{Tekstinvoer}:
-LilyPond is een @strong{tekstgebaseerd} muzieknotatieprogramma.  Lees
-dit eerst!
+@item
+@ref{Tekstinvoer}:
+LilyPond is een @strong{tekstgebaseerd}
+muzieknotatieprogramma.  Lees dit eerst!
 
-@item @ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,Beginnen}}
+@item
+@ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,Beginnen}}
 een @qq{onmisbare} gebruiksvriendelijke inleiding in LilyPond.
 @details{Beginnen}
 
-@item @ifWebLinks{@manualStableGlossarySplitNoName-nl,@rglosnamed{Top,Terminologie}}
+@item
+@ifWebLinks{@manualStableGlossarySplitNoName-nl,@rglosnamed{Top,Terminologie}}
 @emph{(optioneel te lezen)}
 muziektermen en vertalingen.
 @details{Terminologie}
 
-@item @ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}}
+@item
+@ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}}
 @emph{(optioneel te lezen)}
 achtergrondinformatie over muzieknotatie dmv de computer.
 @details{Essay}
 
-
 @end itemize
 
 @divEnd
@@ -67,15 +69,18 @@ achtergrondinformatie over muzieknotatie dmv de computer.
 
 @itemize
 
-@item @ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notatie}}
+@item
+@ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notatie}}
 syntax handleiding.
 @details{Notatie}
 
-@item @ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,Gebruik}}
+@item
+@ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,Gebruik}}
 het draaien van alle programma's.
 @details{Gebruik}
 
-@item @ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippers}}
+@item
+@ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippers}}
 handige trucs en tips.
 @details{Snippers}
 
@@ -89,22 +94,27 @@ handige trucs en tips.
 
 @itemize
 
-@item @ref{FAQ}:
+@item
+@ref{FAQ}:
 Veel gestelde vragen.
 
-@item @ref{Top, Web}:
+@item
+@ref{Top, Web}:
 dit document.
 @details{Web}
 
-@item @ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Veranderingen}}
+@item
+@ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Veranderingen}}
 wat is nieuw?
 @details{Veranderingen}
 
-@item @ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Uitbreidingen}}
+@item
+@ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Uitbreidingen}}
 specialistische verfraaiingen (tweaks).
 @details{Uitbreidingen}
 
-@item @ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}}
+@item
+@ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}}
 tweaks-handleiding.
 @details{Internals}
 
@@ -118,16 +128,20 @@ tweaks-handleiding.
 
 @itemize
 
-@item @ref{Vertaald}:
+@item
+@ref{Vertaald}:
 status van de vertaling voor niet-Engelstaligen.
 
-@item @ref{Alles}:
-te downloaden handleidingen en oude handleidingen.
+@item
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippers Repository}:
+voorbeelden door gebruikers, hints en tips.
 
-@item @ref{Development}:
+@item
+@ref{Development}:
 handleidingen voor de ontwikkelversie.
 
-@item @ref{FDL}:
+@item
+@ref{FDL}:
 deze handleidingen zijn uitgegeven onder de GNU Free Documentation
 License (GNU Vrije Documentatie Licentie).
 
@@ -135,6 +149,8 @@ License (GNU Vrije Documentatie Licentie).
 
 @divEnd
 
+@divEnd
+
 
 @divClass{hide}
 @menu
@@ -295,8 +311,8 @@ lectuur indien je een groot project wilt beginnen.
 @docLinks{Gebruik, usage,
   @rprogramnamed{Top,Usage},
   @manualStableUsageSplit,
-  @manualStableUsageBig, 300 KB,
-  @manualStableUsagePdf, 400 KB}
+  @manualStableUsageBig, 400 KB,
+  @manualStableUsagePdf, 600 KB}
 
 @divEnd
 
@@ -591,5 +607,3 @@ en onze redenen om hiervoor te kiezen, wordt gegeven in
 @include fdl.itexi
 
 @divEnd
-
-
index c90ae01468a75e770c912d84e94fd03f71e847f8..312b1a6eebe986c793c28700500e88546d49b809 100644 (file)
@@ -813,9 +813,14 @@ Internals Reference:
 @knownissues
 
 The relative conversion will not affect @code{\transpose},
-@code{\chordmode} or @code{\relative} sections in its argument.
-To use relative mode within transposed music, an additional
-@code{\relative} must be placed inside @code{\transpose}.
+@code{\chordmode} or @code{\relative} sections in its argument.  To use
+relative mode within transposed music, an additional @code{\relative}
+must be placed inside @code{\transpose}.
+
+Triple accidentals will not be printed if using @code{\transpose}. An
+@q{enharmonically equivalent} pitch will be used instead (e.g. d-flat
+rather than e-triple-flat).
+
 
 @node Inversion
 @unnumberedsubsubsec Inversion
index 32b7a0a52983008b3b16ac0e13566adf1df47507..5344ab2b866ba8181d93084f9df01c385740487b 100644 (file)
@@ -1172,20 +1172,12 @@ Installed Files:
 
 
 @knownissues
-
 Only the contents of the first @code{Voice} occurring in an
-@code{\addQuote} command will be considered for quotation, so
-@code{@var{music}} cannot contain @code{\new} and
-@code{\context Voice} statements that would switch to a different
-Voice.
-
-Quoting grace notes is broken and can even cause LilyPond to
-crash.
-
-Quoting nested triplets may result in poor notation.
-
-In earlier versions of LilyPond (pre 2.11), @code{addQuote} was
-written entirely in lower-case letters: @code{\addquote}.
+@code{\addQuote} command will be considered for quotation, so the music
+expression must not contain @code{\new} and @code{\context Voice}
+statements which would switch to a different Voice.  Quoting grace notes
+is unsupported and may cause LilyPond to crash whereas quoting nested
+triplets may result in poor notation.
 
 
 @node Formatting cue notes
@@ -1274,10 +1266,10 @@ and
 @end example
 
 The music from the corresponding measures of the @code{@var{quote name}}
-is added as @code{CueVoice} context and occurs simultaneously with the
-@code{@var{music}}, which creates a polyphonic situation.  The
+is added as @code{CueVoice} context and occurs simultaneously with the
+@code{@var{music}}, which then creates a polyphonic situation.  The
 @code{@var{direction}} takes the argument @code{UP} or @code{DOWN}, and
-corresponds to first and second voices respectively determining how
+corresponds to the first and second voices respectively, determining how
 the cue notes are printed in relation to the other voice.
 
 @lilypond[verbatim,quote]
index 661421b29b4acd3764ab9ea853556682a3712960..0fc2bed22dd3fdfd5339da378d34a152df1479a6 100644 (file)
@@ -125,8 +125,8 @@ tweaks reference.
 translation status for non-English readers.
 
 @item
-@ref{All}:
-downloadable and old manuals.
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}:
+user-created examples, hints and tips.
 
 @item
 @ref{Development}:
diff --git a/input/regression/ambitus-with-ligature.ly b/input/regression/ambitus-with-ligature.ly
new file mode 100644 (file)
index 0000000..c82e51c
--- /dev/null
@@ -0,0 +1,15 @@
+\version "2.14"
+
+\header {
+  texidoc = "
+A @code{\Voice} should be able to contain both an @code{Ambitus_engraver}
+and a @code{Mensural_ligature_engraver} without segfaulting.
+  "
+}
+
+\new Voice \with  {
+  \consists Ambitus_engraver
+  \consists Mensural_ligature_engraver
+} {
+  \[ c'\longa c''\longa \]
+}
diff --git a/input/regression/chord-tremolo-other-commands.ly b/input/regression/chord-tremolo-other-commands.ly
new file mode 100644 (file)
index 0000000..f8c347b
--- /dev/null
@@ -0,0 +1,24 @@
+\version "2.15.5"
+
+\header {
+  texidoc = "
+To calculate the total duration of chord tremolos, only real notes shall be 
+counted, no other commands.
+"
+}
+
+right = \relative c'' {
+  s2
+}
+
+left = \relative c' {
+  % This tremolo contains just two notes (but three lilypond events/commands!)
+  \repeat tremolo 4 { f,16 \change Staff = "right" f'} 
+}
+
+\score {
+  \new PianoStaff <<
+    \new Staff = "right" { \right }
+    \new Staff = "left" { \clef bass \left }
+  >>
+}
index 08a13bdc780cfa991a8f7ee5cffd52d35f03b1d8..620289dda3b87789d54a827bc3c59d36f21d4ce3 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.14.0"
+\version "2.15.5"
 #(use-modules (srfi srfi-13)
               (ice-9 format))
 
@@ -241,6 +241,12 @@ stderr of this run."
 %% \ottava
 \test "" ##[ \ottava #1 #] % OttavaMusic
 
+%% \tweak
+\test "" ##[ < \tweak #'duration-log #2 c > #]
+\test "" ##[ < c \tweak #'transparent ##t e > #]
+\test "" ##[ < \tweak #'color #'(1.0 0.0 0.0) \tweak #'duration-log #2 c > #]
+\test "" ##[ c-\tweak #'font-size #3 -> #]
+
 %% end test.
 
 #(read-hash-extend #\[ #f) %{ ] %}
diff --git a/input/regression/horizontal-bracket-tweak.ly b/input/regression/horizontal-bracket-tweak.ly
new file mode 100644 (file)
index 0000000..ebd7069
--- /dev/null
@@ -0,0 +1,20 @@
+\version "2.15.5"
+
+\header {
+  texidoc = "Horizontal brackets are created with the correct event-cause, ensuring
+tweaks are applied to the correct spanner."
+}
+
+\layout {
+  \context {
+    \Voice
+    \consists "Horizontal_bracket_engraver"
+  }
+}
+
+\relative c' {
+  c1-\tweak #'thickness #6 \startGroup
+  c1\startGroup
+  c1\stopGroup
+  c1\stopGroup
+}
diff --git a/input/regression/lyric-combine-derived-voice.ly b/input/regression/lyric-combine-derived-voice.ly
new file mode 100644 (file)
index 0000000..a5f4316
--- /dev/null
@@ -0,0 +1,18 @@
+\version "2.15.4"
+\header {
+  texidoc = "For Voice-derived contexts like CueVoice, the lyrics should
+still start with the first note."
+}
+
+\score {
+  \new Staff <<
+    \new Voice \relative c'' {
+      g2 
+      <<
+          { \voiceOne r2 }
+          \new CueVoice = "cue" { \voiceTwo g4 g }
+      >>
+  }
+  \context Lyrics \lyricsto "cue" { A B }
+  >>
+}
diff --git a/input/regression/lyric-combine-empty-warning.ly b/input/regression/lyric-combine-empty-warning.ly
new file mode 100644 (file)
index 0000000..59c68ca
--- /dev/null
@@ -0,0 +1,23 @@
+\version "2.15.5"
+
+\header {
+
+  texidoc = "If lyrics are assigned to a non-existing voice, a warning should
+be printed.  However, if the lyrics context does not contain any lyrics, then
+no warning should be printed."
+
+}
+
+#(ly:set-option 'warning-as-error #f)
+<<
+  \new Staff
+    \new Voice = "notes" {
+      c1
+    }
+  % This should not give a warning (empty lyrics, existing voice):
+  \new Lyrics \lyricsto "notes" \lyricmode { }
+  % This should give a warning (non-existing voice):
+  \new Lyrics \lyricsto "not-existing-notes" \lyricmode { Test }
+  % This should NOT give a warning (non-existing voice, but also no lyrics):
+  \new Lyrics \lyricsto "not-existing-notes" \lyricmode { }
+>>
diff --git a/input/regression/phrasing-slur-multiple.ly b/input/regression/phrasing-slur-multiple.ly
new file mode 100644 (file)
index 0000000..203a6ec
--- /dev/null
@@ -0,0 +1,21 @@
+\version "2.15.4"
+
+#(ly:set-option 'warning-as-error #f)
+
+\header {
+  texidoc = "LilyPond does not support multiple concurrent phrasing slurs with the 
+parentheses syntax.  In this case, warnings will be given and the nested
+slur will not be generated.  However, one can can create a second slur with
+a different spanner-id."
+}
+
+altPhSlur = #(make-music 'PhrasingSlurEvent 'span-direction START 'spanner-id "alt")
+altPhSlurEnd = #(make-music 'PhrasingSlurEvent 'span-direction STOP 'spanner-id "alt")
+
+\relative c'' { 
+  % This will give warnings ("Already have phrasing slur" and "Cannot end phrasing slur")
+  c4\(\( d4\)\( e4\) f\) |
+  % This will give two overlapping slurs:
+  d\(  d\altPhSlur e\) f\altPhSlurEnd |
+  
+}
diff --git a/input/regression/slur-grace.ly b/input/regression/slur-grace.ly
new file mode 100644 (file)
index 0000000..83d650c
--- /dev/null
@@ -0,0 +1,12 @@
+\version "2.15.4"
+
+\header {
+  texidoc = "Appoggiatura and acciaccaturas use a different slur than the
+default, so they produce a nested slur without warnings."
+}
+
+\relative c'' {
+  c4( \acciaccatura e8 d4 e4 f) |
+  c4( \appoggiatura e8 d4 e4 f) |
+  c4  \appoggiatura e8 d4 e4 f |
+}
diff --git a/input/regression/slur-multiple-linebreak.ly b/input/regression/slur-multiple-linebreak.ly
new file mode 100644 (file)
index 0000000..763f623
--- /dev/null
@@ -0,0 +1,26 @@
+\version "2.15.5"
+
+#(ly:set-option 'warning-as-error #f)
+
+\header {
+  texidoc = "An additional opening slur during a running slur should be ignored
+(and a warning printed), but never influence the slur's extents."
+}
+
+\paper { ragged-right = ##t }
+
+\relative c' {
+  \key fis \major
+  c1(
+  \break
+  a2 b4 c)
+}
+
+\relative c' {
+  \key fis \major
+  c1(
+  \break
+  a2( b4 c)
+%   ^ extra SlurEvent
+}
+%% END
\ No newline at end of file
diff --git a/input/regression/slur-multiple.ly b/input/regression/slur-multiple.ly
new file mode 100644 (file)
index 0000000..21cb444
--- /dev/null
@@ -0,0 +1,21 @@
+\version "2.15.5"
+
+#(ly:set-option 'warning-as-error #f)
+
+\header {
+  texidoc = "LilyPond does not support multiple concurrent slurs with the 
+parentheses syntax.  In this case, warnings will be given and the nested
+slur will not be generated.  However, one can can create a second slur with
+a different spanner-id."
+}
+
+altSlur = #(make-music 'SlurEvent 'span-direction START 'spanner-id "alt")
+altSlurEnd = #(make-music 'SlurEvent 'span-direction STOP 'spanner-id "alt")
+
+\relative c'' { 
+  % This will give warnings ("Already have slur" and "Cannot end slur")
+  c4(( d4)( e4) f) |
+  % This will give two overlapping slurs:
+  d(  d\altSlur e) f\altSlurEnd |
+  
+}
diff --git a/input/regression/tie-pitched-trill.ly b/input/regression/tie-pitched-trill.ly
new file mode 100644 (file)
index 0000000..79c1df8
--- /dev/null
@@ -0,0 +1,12 @@
+\version "2.15.5"
+
+\header {
+  texidoc = "The pitch of a pitched trill should not trigger a warning for 
+  unterminated ties."
+}
+
+\relative c' {
+  \pitchedTrill
+  c1~\startTrillSpan d
+  c1\stopTrillSpan
+}
index 2f67825a06ab2fa3438bca225d9ee57ebbff2340..9d5c00503dca8ce6758e623076678a957bee8606 100644 (file)
 
 #include "engraver.hh"
 #include "international.hh"
+#include "item.hh"
 #include "note-column.hh"
 #include "pointer-group-interface.hh"
 #include "side-position-interface.hh"
-#include "stream-event.hh"
 #include "spanner.hh"
-#include "item.hh"
+#include "stream-event.hh"
 
 #include "translator.icc"
 
@@ -32,8 +32,8 @@ class Horizontal_bracket_engraver : public Engraver
 {
 public:
   TRANSLATOR_DECLARATIONS (Horizontal_bracket_engraver);
-  vector<Spanner*> bracket_stack_;
-  vector<Stream_event*> events_;
+  vector<Spanner *> bracket_stack_;
+  vector<Stream_event *> events_;
   vsize pop_count_;
   vsize push_count_;
 
@@ -43,22 +43,6 @@ public:
   DECLARE_TRANSLATOR_LISTENER (note_grouping);
 };
 
-ADD_ACKNOWLEDGER (Horizontal_bracket_engraver, note_column);
-ADD_TRANSLATOR (Horizontal_bracket_engraver,
-               /* doc */
-               "Create horizontal brackets over notes for musical analysis"
-               " purposes.",
-
-               /* create */
-               "HorizontalBracket ",
-
-               /* read */
-               "",
-
-               /* write */
-               ""
-               );
-
 Horizontal_bracket_engraver::Horizontal_bracket_engraver ()
 {
   pop_count_ = 0;
@@ -117,10 +101,26 @@ Horizontal_bracket_engraver::process_music ()
 void
 Horizontal_bracket_engraver::stop_translation_timestep ()
 {
-  for (int i = pop_count_; i--;)
+  for (vsize i = pop_count_; i--;)
     if (bracket_stack_.size ())
       bracket_stack_.pop_back ();
   pop_count_ = 0;
   push_count_ = 0;
+  events_.clear ();
 }
 
+ADD_ACKNOWLEDGER (Horizontal_bracket_engraver, note_column);
+ADD_TRANSLATOR (Horizontal_bracket_engraver,
+               /* doc */
+               "Create horizontal brackets over notes for musical analysis"
+               " purposes.",
+
+               /* create */
+               "HorizontalBracket ",
+
+               /* read */
+               "",
+
+               /* write */
+               ""
+               );
index 0308ab3e5fe89ea92b2be75bb956b03b78b5579e..4a2da856c214c1423085320183bae19ce97bf07a 100644 (file)
@@ -31,7 +31,7 @@ protected:
   virtual void finalize ();
 
   DECLARE_ACKNOWLEDGER (rest);
-  DECLARE_ACKNOWLEDGER (note_head);
+  DECLARE_ACKNOWLEDGER (ligature_head);
   virtual void listen_ligature (Stream_event *ev);
   void process_music ();
   virtual Spanner *create_ligature_spanner () = 0;
index be4917f0c735ec5da9078c875af32a0317ce35ea..99e86ed20b193a1da92e40532ebac1a85f340d2a 100644 (file)
@@ -143,7 +143,7 @@ Ligature_engraver::process_music ()
 
       ligature_start_mom_ = now_mom ();
 
-      // TODO: dump cause into make_item/spanner. 
+      // TODO: dump cause into make_item/spanner.
       // announce_grob (ligature_, events_drul_[START]->self_scm ());
     }
 }
@@ -194,15 +194,13 @@ Ligature_engraver::current_ligature ()
 }
 
 void
-Ligature_engraver::acknowledge_note_head (Grob_info info)
+Ligature_engraver::acknowledge_ligature_head (Grob_info info)
 {
   if (ligature_)
     {
       primitives_.push_back (info);
       if (info.grob () && brew_ligature_primitive_proc != SCM_EOL)
-       {
-         info.grob ()->set_property ("stencil", brew_ligature_primitive_proc);
-       }
+        info.grob ()->set_property ("stencil", brew_ligature_primitive_proc);
     }
 }
 
index 7487e2f91b2b1ccb5a88591846119fdec6041aef..0168da15003a47a245cd425c48659fc63e2eb72e 100644 (file)
@@ -63,6 +63,7 @@ private:
   DECLARE_LISTENER (check_new_context);
 
   bool music_found_;
+  bool lyrics_found_;
   Context *lyrics_context_;
   Context *music_context_;
   SCM lyricsto_voice_name_;
@@ -76,6 +77,7 @@ private:
 Lyric_combine_music_iterator::Lyric_combine_music_iterator ()
 {
   music_found_ = false;
+  lyrics_found_ = false;
   pending_grace_moment_.set_infinite (1);
   lyric_iter_ = 0;
   music_context_ = 0;
@@ -225,13 +227,9 @@ Lyric_combine_music_iterator::check_new_context (SCM sev)
   if (!ok ())
     return ;
   
-  // TODO: Check first if type=Voice and if id matches
-  Stream_event * ev = unsmob_stream_event (sev);
-  if (ev->get_property ("type") != ly_symbol2scm ("Voice"))
-    return ;
-  
+  // Search for a possible candidate voice to attach the lyrics to. If none
+  // is found, we'll try next time again.
   Context *voice = find_voice ();
-
   if (voice)
     {
       set_music_context (voice);
@@ -278,6 +276,7 @@ Lyric_combine_music_iterator::process (Moment /* when */)
   if (new_voice)
     set_music_context (new_voice);
 
+  lyrics_found_ = true;
   if (!music_context_)
     return;
 
@@ -332,10 +331,12 @@ Lyric_combine_music_iterator::do_quit ()
 
       string name;
       if (scm_is_string (voice_name))
-       name = ly_scm2string (voice_name);
-
-      get_music ()->origin ()->warning (_f ("cannot find Voice `%s'",
-                                           name.c_str ()) + "\n");
+        name = ly_scm2string (voice_name);
+      /* Don't print a warning for empty lyrics (in which case we don't try
+         to find the proper voice, so it will not be found) */
+      if (lyrics_found_)
+        get_music ()->origin ()->warning (_f ("cannot find Voice `%s'",
+                                              name.c_str ()) + "\n");
     }
 
   if (lyric_iter_)
index d6e8eed3ca3ffc700ba27a4d80905732496dff8a..ead5f1f0ad7d8242f89e69672a3216530930a8bc 100644 (file)
@@ -59,7 +59,7 @@ protected:
   virtual Spanner *create_ligature_spanner ();
   virtual void build_ligature (Spanner *ligature, vector<Grob_info> primitives);
   DECLARE_TRANSLATOR_LISTENER (ligature);
-  
+
 public:
   TRANSLATOR_DECLARATIONS (Mensural_ligature_engraver);
 
@@ -78,7 +78,7 @@ Mensural_ligature_engraver::listen_ligature (Stream_event *ev)
 
 Mensural_ligature_engraver::Mensural_ligature_engraver ()
 {
-  brew_ligature_primitive_proc = 
+  brew_ligature_primitive_proc =
     Mensural_ligature::brew_ligature_primitive_proc;
 }
 
@@ -473,7 +473,7 @@ Mensural_ligature_engraver::build_ligature (Spanner *ligature,
 }
 
 ADD_ACKNOWLEDGER (Mensural_ligature_engraver, rest);
-ADD_ACKNOWLEDGER (Mensural_ligature_engraver, note_head);
+ADD_ACKNOWLEDGER (Mensural_ligature_engraver, ligature_head);
 
 ADD_TRANSLATOR (Mensural_ligature_engraver,
                /* doc */
index 1fcb259ae13c2c0b6b0ee94967476cd8099f3928..aa96849f26c81d4ffe8674fde7c1e7cc4d129e68 100644 (file)
 #include "string-convert.hh"
 #include "warn.hh"
 
-#define PITCH_WHEEL_TOP 0x3FFF
 #define PITCH_WHEEL_CENTER 0x2000
-#define PITCH_WHEEL_BOTTOM 0x0000
-#define PITCH_WHEEL_RANGE (PITCH_WHEEL_TOP - PITCH_WHEEL_BOTTOM)
+#define PITCH_WHEEL_SEMITONE 0X1000
 
 Midi_item *
 Midi_item::get_midi (Audio_item *a)
@@ -193,15 +191,16 @@ Midi_note::get_fine_tuning () const
                   + audio_->transposing_.tone_pitch ()) * Rational (2);
   tune -= Rational (get_semitone_pitch ());
 
-  tune *= 100;
+  tune *= PITCH_WHEEL_SEMITONE;
   return (int) double (tune);
 }
 
 int
 Midi_note::get_semitone_pitch () const
 {
-  return int (double ((audio_->pitch_.tone_pitch ()
-                      + audio_->transposing_.tone_pitch ()) * Rational (2)));
+  double tune = double ((audio_->pitch_.tone_pitch ()
+                        + audio_->transposing_.tone_pitch ()) * Rational (2));
+  return int (rint (tune));
 }
 
 string
@@ -214,10 +213,7 @@ Midi_note::to_string () const
   // print warning if fine tuning was needed, HJJ
   if (get_fine_tuning () != 0)
     {
-      finetune = PITCH_WHEEL_CENTER;
-      // Move pitch wheel to a shifted position.
-      // The pitch wheel range (of 4 semitones) is multiplied by the cents.
-      finetune += (PITCH_WHEEL_RANGE *get_fine_tuning ()) / (4 * 100);
+      finetune = PITCH_WHEEL_CENTER + get_fine_tuning ();
 
       str += ::to_string ((char) (0xE0 + channel_));
       str += ::to_string ((char) (finetune & 0x7F));
index 8ace05fe10d8bad48f7017fa989ccb65a0cf236b..839554f7e9af9a1d7f3c174503e4bad58e34a73c 100644 (file)
 
 #include "translator.icc"
 
-/*
-  It is possible that a slur starts and ends on the same note.  At
-  least, it is for phrasing slurs: a note can be both beginning and
-  ending of a phrase.
-
-*/
 
 /*
   NOTE NOTE NOTE
 
-  This is largely similar to Slur_engraver. Check if fixes apply there too.  
+  This is largely similar to Slur_engraver. Check if fixes
+  apply there too.  
 
   (on principle, engravers don't use inheritance for code sharing)
   
  */
+
+/*
+  It is possible that a slur starts and ends on the same note.  At
+  least, it is for phrasing slurs: a note can be both beginning and
+  ending of a phrase.
+
+*/
 class Phrasing_slur_engraver : public Engraver
 {
-  Drul_array<Stream_event *> events_;
-  Stream_event *running_slur_start_;
+  vector<Stream_event *> start_events_;
+  vector<Stream_event *> stop_events_;
   vector<Grob*> slurs_;
   vector<Grob*> end_slurs_;
 
 protected:
-  void acknowledge_extra_object (Grob_info);
+  DECLARE_TRANSLATOR_LISTENER (phrasing_slur);
   DECLARE_ACKNOWLEDGER (accidental);
   DECLARE_ACKNOWLEDGER (fingering);
   DECLARE_ACKNOWLEDGER (note_column);
@@ -62,33 +64,33 @@ protected:
   DECLARE_ACKNOWLEDGER (text_script);
   DECLARE_ACKNOWLEDGER (tie);
   DECLARE_ACKNOWLEDGER (tuplet_number);
-  DECLARE_TRANSLATOR_LISTENER (phrasing_slur);
 
+  void acknowledge_extra_object (Grob_info);
   void stop_translation_timestep ();
-  virtual void finalize ();
   void process_music ();
 
+  virtual void finalize ();
+
+
 public:
   TRANSLATOR_DECLARATIONS (Phrasing_slur_engraver);
 };
 
 Phrasing_slur_engraver::Phrasing_slur_engraver ()
 {
-  events_[START] = events_[STOP] = 0;
 }
 
 IMPLEMENT_TRANSLATOR_LISTENER (Phrasing_slur_engraver, phrasing_slur);
 void
 Phrasing_slur_engraver::listen_phrasing_slur (Stream_event *ev)
 {
-  /*
-    Let's not start more than one slur per moment.
-  */
   Direction d = to_dir (ev->get_property ("span-direction"));
   if (d == START)
-    ASSIGN_EVENT_ONCE (events_[START], ev);
-  else if (d == STOP && !slurs_.empty ())
-    ASSIGN_EVENT_ONCE (events_[STOP], ev);
+    start_events_.push_back(ev);
+  else if (d == STOP)
+    stop_events_.push_back(ev);
+  else ev->origin ()->warning (_f ("direction of %s invalid: %d",
+                                  "phrasing-slur-event", int (d)));
 }
 
 void
@@ -120,7 +122,7 @@ Phrasing_slur_engraver::acknowledge_fingering (Grob_info info)
 }
 
 void
-Phrasing_slur_engraver::acknowledge_text_script (Grob_info info)
+Phrasing_slur_engraver::acknowledge_tuplet_number (Grob_info info)
 {
   acknowledge_extra_object (info);
 }
@@ -133,13 +135,13 @@ Phrasing_slur_engraver::acknowledge_script (Grob_info info)
 }
 
 void
-Phrasing_slur_engraver::acknowledge_tie (Grob_info info)
+Phrasing_slur_engraver::acknowledge_text_script (Grob_info info)
 {
   acknowledge_extra_object (info);
 }
 
 void
-Phrasing_slur_engraver::acknowledge_tuplet_number (Grob_info info)
+Phrasing_slur_engraver::acknowledge_tie (Grob_info info)
 {
   acknowledge_extra_object (info);
 }
@@ -153,29 +155,57 @@ Phrasing_slur_engraver::acknowledge_slur (Grob_info info)
 void
 Phrasing_slur_engraver::finalize ()
 {
-  if (slurs_.size ())
-    slurs_[0]->warning (_ ("unterminated phrasing slur"));
+  for (vsize i = 0; i < slurs_.size (); i++)
+    {
+      slurs_[i]->warning (_ ("unterminated phrasing slur"));
+      slurs_[i]->suicide ();
+    }
 }
 
 void
 Phrasing_slur_engraver::process_music ()
 {
-  if (events_[STOP])
+  for (vsize i = 0; i < stop_events_.size (); i++)
     {
-      end_slurs_ = slurs_;
-      slurs_.clear ();
+      Stream_event *ev = stop_events_[i];
+      string id = robust_scm2string (ev->get_property ("spanner-id"), "");
+
+      // Find the slur that is ended with this event (by checking the spanner-id)
+      bool ended = false;
+      for (vsize j = slurs_.size (); j--;)
+        {
+          if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""))
+            {
+              ended = true;
+              end_slurs_.push_back (slurs_[j]);
+              slurs_.erase (slurs_.begin () + j);
+            }
+        }
+      if (!ended)
+        ev->origin ()->warning (_ ("cannot end phrasing slur"));
     }
 
-  if (events_[START] && slurs_.empty ())
+  for (vsize i = 0; i < start_events_.size (); i++)
     {
-      Stream_event *ev = events_[START];
-
-      Grob *slur = make_spanner ("PhrasingSlur", events_[START]->self_scm ());
-      Direction updown = to_dir (ev->get_property ("direction"));
-      if (updown)
-       set_grob_direction (slur, updown);
-
-      slurs_.push_back (slur);
+      Stream_event *ev = start_events_[i];
+      string id = robust_scm2string (ev->get_property ("spanner-id"), "");
+      bool have_slur = false;
+      // Check if we already have a slur with the same spanner-id.
+      // In that case, don't create a new slur, but print a warning
+      for (vsize i = 0; i < slurs_.size (); i++)
+          have_slur = have_slur || (id == robust_scm2string (slurs_[i]->get_property ("spanner-id"), ""));
+      
+      if (have_slur)
+          ev->origin ()->warning(_ ("already have phrasing slur"));
+      else 
+        {
+          Grob *slur = make_spanner ("PhrasingSlur", ev->self_scm ());
+          Direction updown = to_dir (ev->get_property ("direction"));
+          slur->set_property ("spanner-id", ly_string2scm (id));
+          if (updown)
+            set_grob_direction (slur, updown);
+          slurs_.push_back (slur);
+        }
     }
 }
 
@@ -183,7 +213,8 @@ void
 Phrasing_slur_engraver::stop_translation_timestep ()
 {
   end_slurs_.clear ();
-  events_[START] = events_[STOP] = 0;
+  start_events_.clear ();
+  stop_events_.clear ();
 }
 
 ADD_ACKNOWLEDGER (Phrasing_slur_engraver, accidental);
index 2b3f5de296b666ba7eaca8dbb5971493e059a3a4..45aa121a71eebd00cf0580fbf6d33ed42febd13d 100644 (file)
@@ -48,8 +48,8 @@
 */
 class Slur_engraver : public Engraver
 {
-  Drul_array<Stream_event *> events_;
-  Stream_event *running_slur_start_;
+  vector<Stream_event *> start_events_;
+  vector<Stream_event *> stop_events_;
   vector<Grob*> slurs_;
   vector<Grob*> end_slurs_;
 
@@ -78,7 +78,6 @@ public:
 
 Slur_engraver::Slur_engraver ()
 {
-  events_[START] = events_[STOP] = 0;
 }
 
 IMPLEMENT_TRANSLATOR_LISTENER (Slur_engraver, slur);
@@ -87,9 +86,9 @@ Slur_engraver::listen_slur (Stream_event *ev)
 {
   Direction d = to_dir (ev->get_property ("span-direction"));
   if (d == START)
-    ASSIGN_EVENT_ONCE (events_[START], ev);
+    start_events_.push_back(ev);
   else if (d == STOP)
-    ASSIGN_EVENT_ONCE (events_[STOP], ev);
+    stop_events_.push_back(ev);
   else ev->origin ()->warning (_f ("direction of %s invalid: %d",
                                   "slur-event", int (d)));
 }
@@ -134,7 +133,6 @@ Slur_engraver::acknowledge_tuplet_number (Grob_info info)
   acknowledge_extra_object (info);
 }
 
-
 void
 Slur_engraver::acknowledge_script (Grob_info info)
 {
@@ -157,47 +155,71 @@ Slur_engraver::acknowledge_tie (Grob_info info)
 void
 Slur_engraver::finalize ()
 {
-  if (slurs_.size ())
+  for (vsize i = 0; i < slurs_.size (); i++)
     {
-      slurs_[0]->warning (_ ("unterminated slur"));
-      for (vsize i = 0; i < slurs_.size (); i++)
-       slurs_[i]->suicide ();
+      slurs_[i]->warning (_ ("unterminated slur"));
+      slurs_[i]->suicide ();
     }
 }
 
 void
 Slur_engraver::process_music ()
 {
-  if (events_[STOP])
+  for (vsize i = 0; i < stop_events_.size (); i++)
     {
-      if (slurs_.size () == 0)
-       events_[STOP]->origin ()->warning (_ ("cannot end slur"));
-
-      
-      end_slurs_ = slurs_;
-      slurs_.clear ();
+      Stream_event *ev = stop_events_[i];
+      string id = robust_scm2string (ev->get_property ("spanner-id"), "");
+
+      // Find the slur that is ended with this event (by checking the spanner-id)
+      bool ended = false;
+      for (vsize j = slurs_.size (); j--;)
+        {
+          if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""))
+            {
+              ended = true;
+              end_slurs_.push_back (slurs_[j]);
+              slurs_.erase (slurs_.begin () + j);
+            }
+        }
+      if (!ended)
+        ev->origin ()->warning (_ ("cannot end slur"));
     }
 
-  if (events_[START] && slurs_.empty ())
+  for (vsize i = start_events_.size (); i--;)
     {
-      Stream_event *ev = events_[START];
-
-      bool double_slurs = to_boolean (get_property ("doubleSlurs"));
-
-      Grob *slur = make_spanner ("Slur", events_[START]->self_scm ());
-      Direction updown = to_dir (ev->get_property ("direction"));
-      if (updown && !double_slurs)
-       set_grob_direction (slur, updown);
-
-      slurs_.push_back (slur);
-
-      if (double_slurs)
-       {
-         set_grob_direction (slur, DOWN);
-         slur = make_spanner ("Slur", events_[START]->self_scm ());
-         set_grob_direction (slur, UP);
-         slurs_.push_back (slur);
-       }
+      Stream_event *ev = start_events_[i];
+      string id = robust_scm2string (ev->get_property ("spanner-id"), "");
+      bool have_slur = false;
+      // Check if we already have a slur with the same spanner-id.
+      // In that case, don't create a new slur, but print a warning
+      for (vsize j = 0; j < slurs_.size (); j++)
+          have_slur = have_slur || (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""));
+      
+      if (have_slur)
+        {
+          // We already have a slur, so give a warning and completely ignore
+          // the new slur.
+          ev->origin ()->warning(_ ("already have slur"));
+          start_events_.erase (start_events_.begin () + i);
+        }
+      else 
+        {
+          Grob *slur = make_spanner ("Slur", ev->self_scm ());
+          Direction updown = to_dir (ev->get_property ("direction"));
+          slur->set_property ("spanner-id", ly_string2scm (id));
+          if (updown)
+            set_grob_direction (slur, updown);
+          slurs_.push_back (slur);
+
+          if (to_boolean (get_property ("doubleSlurs")))
+            {
+              set_grob_direction (slur, DOWN);
+              slur = make_spanner ("Slur", ev->self_scm ());
+              slur->set_property ("spanner-id", ly_string2scm (id));
+              set_grob_direction (slur, UP);
+              slurs_.push_back (slur);
+            }
+        }
     }
   set_melisma (slurs_.size ());
 }
@@ -210,7 +232,7 @@ Slur_engraver::stop_translation_timestep ()
       for (vsize i = 0; i < end_slurs_.size (); i++)
        Slur::add_extra_encompass (end_slurs_[i], g);
 
-      if (!events_[START])
+      if (!start_events_.size ())
        for (vsize i = 0; i < slurs_.size (); i++)
          Slur::add_extra_encompass (slurs_[i], g);
     }
@@ -224,7 +246,8 @@ Slur_engraver::stop_translation_timestep ()
       announce_end_grob (s, SCM_EOL);
     }
   end_slurs_.clear ();
-  events_[START] = events_[STOP] = 0;
+  start_events_.clear ();
+  stop_events_.clear ();
 }
 
 ADD_ACKNOWLEDGER (Slur_engraver, accidental);
index 30638bfed44d64f7c44743b8a2a465d0b543ee47..22282aa231d9793d62bb2f8f483b75f8ba0d0a99 100644 (file)
@@ -547,5 +547,6 @@ ADD_INTERFACE (Spanner,
               /* properties */
               "normalized-endpoints "
               "minimum-length "
+               "spanner-id "
               "to-barline "
               );
index d7fb39db74649414ea38c6e6fa0970e534a180df..edaba06c7c0720e1dcc35321acf9010cee298226 100644 (file)
@@ -270,6 +270,9 @@ Tie_engraver::stop_translation_timestep ()
          continue;
        }
 
+      // We only want real notes to cause ties, not e.g. pitched trills
+      if (!left_ev->in_event_class ("note-event"))
+          continue;
 
       SCM left_articulations = left_ev->get_property ("articulations");
 
index df3a3d4ec4050e94f8f5c3dbf595ea08f734bb9c..5402a8fb01da24f005a09caafe2c2b054f6bc42e 100644 (file)
@@ -102,7 +102,7 @@ Vaticana_ligature_engraver::listen_ligature (Stream_event *ev)
 
 Vaticana_ligature_engraver::Vaticana_ligature_engraver ()
 {
-  brew_ligature_primitive_proc = 
+  brew_ligature_primitive_proc =
     Vaticana_ligature::brew_ligature_primitive_proc;
   augmented_primitives_.clear ();
 }
@@ -742,7 +742,7 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
 }
 
 ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, rest);
-ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, note_head);
+ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, ligature_head);
 ADD_TRANSLATOR (Vaticana_ligature_engraver,
                /* doc */
                "Handle ligatures by glueing special ligature heads"
index 1f8edca81e3344be7ced10728a505b6a0328700a..b9729f3e9360735d3f4a29aa772801a45acb4240 100644 (file)
@@ -1,5 +1,8 @@
 \version "2.14.0"
 
+startGraceSlur = #(make-music 'SlurEvent 'span-direction START 'spanner-id "grace")
+stopGraceSlur = #(make-music 'SlurEvent 'span-direction STOP 'spanner-id "grace")
+
 
 startGraceMusic =  {
 }
@@ -9,19 +12,19 @@ stopGraceMusic =  {
 
 startAppoggiaturaMusic =
  {
-    s1*0(
+    s1*0\startGraceSlur
 }
 
 stopAppoggiaturaMusic =  { 
-    s1*0)
+    s1*0\stopGraceSlur
 }
 
 startAcciaccaturaMusic =  {
-    s1*0(
+    s1*0\startGraceSlur
     \override Stem  #'stroke-style = #"grace"
 }
 
 stopAcciaccaturaMusic =  {
     \revert Stem #'stroke-style
-    s1*0)
+    s1*0\stopGraceSlur
 }
index c47b2697d359dcc63e775d5af6802887a82dcbd4..1fa0a73790cc0f27f7ca178b018035168195458a 100644 (file)
@@ -17,6 +17,7 @@ FETA_MF_FILES = $(call src-wildcard,feta[0-9]*.mf) \
                $(call src-wildcard,feta-braces-[a-z].mf) \
                $(call src-wildcard,feta-alphabet*[0-9].mf) \
                $(call src-wildcard,feta-notehead*[0-9].mf) \
+               $(call src-wildcard,feta-flags*[0-9].mf) \
                $(call src-wildcard,parmesan[0-9]*.mf)
 
 STAFF_SIZES = 11 13 14 16 18 20 23 26
@@ -65,6 +66,7 @@ $(outdir)/emmentaler-%.otf\
  $(outdir)/emmentaler-%.woff: $(outdir)/emmentaler-%.pe \
                            $(outdir)/feta%.pfb \
                            $(outdir)/feta-noteheads%.pfb \
+                           $(outdir)/feta-flags%.pfb \
                            $(outdir)/feta-alphabet%.pfb \
                            $(outdir)/parmesan%.pfb \
                            $(outdir)/feta%.otf-table \
@@ -83,40 +85,49 @@ $(outdir)/%.pfb: $(outdir)/%.log
 $(outdir)/%.otf-table: $(outdir)/%.lisp
        cat $< $(if $(findstring brace,$<),,$(subst feta,parmesan,$<)) \
               $(if $(findstring brace,$<),,$(subst feta,feta-noteheads,$<)) \
+              $(if $(findstring brace,$<),,$(subst feta,feta-flags,$<)) \
               $(if $(findstring brace,$<),,$(subst feta,feta-alphabet,$<)) > $@
 
 
 ## ugh -- we want this to prevent failing -j2 compiles.
 $(outdir)/feta26.otf-table: $(outdir)/feta26.lisp \
                            $(outdir)/feta-noteheads26.lisp \
+                           $(outdir)/feta-flags26.lisp \
                            $(outdir)/parmesan26.lisp \
                            $(outdir)/feta-alphabet26.lisp
 $(outdir)/feta23.otf-table: $(outdir)/feta23.lisp \
                            $(outdir)/feta-noteheads23.lisp \
+                           $(outdir)/feta-flags23.lisp \
                            $(outdir)/parmesan23.lisp \
                            $(outdir)/feta-alphabet23.lisp
 $(outdir)/feta20.otf-table: $(outdir)/feta20.lisp \
                            $(outdir)/feta-noteheads20.lisp \
+                           $(outdir)/feta-flags20.lisp \
                            $(outdir)/parmesan20.lisp \
                            $(outdir)/feta-alphabet20.lisp
 $(outdir)/feta18.otf-table: $(outdir)/feta18.lisp \
                            $(outdir)/feta-noteheads18.lisp \
+                           $(outdir)/feta-flags18.lisp \
                            $(outdir)/parmesan18.lisp \
                            $(outdir)/feta-alphabet18.lisp
 $(outdir)/feta16.otf-table: $(outdir)/feta16.lisp \
                            $(outdir)/feta-noteheads16.lisp \
+                           $(outdir)/feta-flags16.lisp \
                            $(outdir)/parmesan16.lisp \
                            $(outdir)/feta-alphabet16.lisp
 $(outdir)/feta14.otf-table: $(outdir)/feta14.lisp \
                            $(outdir)/feta-noteheads14.lisp \
+                           $(outdir)/feta-flags14.lisp \
                            $(outdir)/parmesan14.lisp \
                            $(outdir)/feta-alphabet14.lisp
 $(outdir)/feta13.otf-table: $(outdir)/feta13.lisp \
                            $(outdir)/feta-noteheads13.lisp \
+                           $(outdir)/feta-flags13.lisp \
                            $(outdir)/parmesan13.lisp \
                            $(outdir)/feta-alphabet13.lisp
 $(outdir)/feta11.otf-table: $(outdir)/feta11.lisp \
                            $(outdir)/feta-noteheads11.lisp \
+                           $(outdir)/feta-flags11.lisp \
                            $(outdir)/parmesan11.lisp \
                            $(outdir)/feta-alphabet11.lisp
 
diff --git a/mf/bigcheese.pe.in b/mf/bigcheese.pe.in
deleted file mode 100644 (file)
index e1d1843..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#!@FONTFORGE@
-
-
-
-New();
-
-# Separate Feta versioning?
-# Naming: * expose LilyPond20/LilyPond rather than bigcheese
-#         *  using 20 as Weight works for gnome-font-select widget: gfs
-SetFontNames("bigcheese20", "LilyPond", "LilyPond BigCheese 20", "20", "GNU GPL", "@TOPLEVEL_VERSION@");
-
-MergeFonts("feta20.pfa");
-MergeFonts("feta-noteheads20.pfa");
-MergeFonts("parmesan20.pfa");
-
-# load nummer/din after setting PUA.
-i = 0;
-while (i < CharCnt())
-  Select(i);
-# crashes fontforge, use PUA for now -- jcn
-# SetUnicodeValue(i + 0xF0000, 0);
-/*
-PRIVATE AREA
-       In the BMP, the range 0xe000 to 0xf8ff will never be  assigned  to  any
-       characters  by  the standard and is reserved for private usage. For the
-       Linux community, this private area has been subdivided further into the
-       range  0xe000  to 0xefff which can be used individually by any end-user
-       and the Linux zone in the range 0xf000 to 0xf8ff where  extensions  are
-       coordinated  among  all  Linux  users.  The  registry of the characters
-       assigned to the Linux zone is currently maintained by  H.  Peter  Anvin
-       <Peter.Anvin@linux.org>.
-*/
-  SetUnicodeValue(i + 0xE000, 0);
-  ++i;
-endloop
-
-
-MergeFonts("feta-nummer10.pfa");
-MergeFonts("feta-din14.pfa");
-MergeKern("feta-din14.tfm");
-
-LoadTableFromFile("LILC", "feta20.otf-table")
-
-Generate("bigcheese20.otf");
-Generate("bigcheese20.cff");
diff --git a/mf/feta-flags-generic.mf b/mf/feta-flags-generic.mf
new file mode 100644 (file)
index 0000000..173125b
--- /dev/null
@@ -0,0 +1,47 @@
+% 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--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%
+%
+% LilyPond is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% LilyPond is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+
+
+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");
+
+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#);
+
+fet_endfont;
index 261c55b3074364380394abed58496f65995aff9b..a4734923da0038027514dc1d300521e3d837be9a 100644 (file)
@@ -133,12 +133,14 @@ endgroup
 enddef;
 
 
-fet_beginchar ("8th Flag (up)", "u3");
+
+
+def upstemsingleflag (expr shortening) =
        save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
        save flagspace, total_depth, flag_count;
 
        flag_count = 1;
-       total_depth# = 3 staff_space# - blot_diameter# / 2;
+       total_depth# = (3 - shortening) * staff_space# - blot_diameter# / 2;
        flare = staff_space;
        flagspace# = staff_space#;
        hip_depth_ratio = .72;
@@ -160,15 +162,15 @@ fet_beginchar ("8th Flag (up)", "u3");
 
        draw_square_block ((-0.5 stemthickness_rounded, 0),
                           (0, (-flag_count * staff_space_rounded)));
-fet_endchar;
+enddef;
 
 
-fet_beginchar ("16th Flag (up)", "u4");
+def upstemdoubleflag (expr shortening) =
        save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
        save flagspace, total_depth, flag_count;
 
        flag_count = 2;
-       total_depth# = 3.5 staff_space# - blot_diameter# / 2;
+       total_depth# = (3.5 - shortening) * staff_space# - blot_diameter# / 2;
        flare = .85 staff_space;
        flagspace# = .85 staff_space#;
        hip_depth_ratio = .72;
@@ -193,15 +195,15 @@ fet_beginchar ("16th Flag (up)", "u4");
 
        draw_square_block ((-0.5 stemthickness_rounded, 0),
                           (0, (-flag_count * staff_space_rounded)));
-fet_endchar;
+enddef;
 
 
-fet_beginchar ("32nd Flag (up)", "u5");
+def upstemtripleflag (expr shortening) =
        save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
        save flagspace, total_depth, flag_count;
 
        flag_count = 3;
-       total_depth# = 4.25 staff_space# - blot_diameter# / 2;
+       total_depth# = (4.25 - shortening) * staff_space# - blot_diameter# / 2;
        flare = .85 staff_space;
        flagspace# = .87 staff_space#;
        hip_depth_ratio = .72;
@@ -228,15 +230,15 @@ fet_beginchar ("32nd Flag (up)", "u5");
 
        draw_square_block ((-0.5 stemthickness_rounded, 0),
                           (0, (-flag_count * staff_space_rounded)));
-fet_endchar;
+enddef;
 
 
-fet_beginchar ("64th Flag (up)", "u6");
+def upstemquadrupleflag (expr shortening) =
        save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
        save flagspace, total_depth, flag_count;
 
        flag_count = 4;
-       total_depth# = 5.25 staff_space# - blot_diameter# / 2;
+       total_depth# = (5.25 - shortening) *  staff_space# - blot_diameter# / 2;
        flare = .85 staff_space;
        flagspace# = .9 staff_space#;
        hip_depth_ratio = .72;
@@ -265,15 +267,15 @@ fet_beginchar ("64th Flag (up)", "u6");
 
        draw_square_block ((-0.5 stemthickness_rounded, 0),
                           (0, (-flag_count * staff_space_rounded)));
-fet_endchar;
+enddef;
 
 
-fet_beginchar ("128th Flag (up)", "u7");
+def upstemquintupleflag (expr shortening) =
        save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
        save flagspace, total_depth, flag_count;
 
        flag_count = 5;
-       total_depth# = 6.25 staff_space# - blot_diameter# / 2;
+       total_depth# = (6.25 - shortening) *  staff_space# - blot_diameter# / 2;
        flare = .85 staff_space;
        flagspace# = .93 staff_space#;
        hip_depth_ratio = .72;
@@ -304,15 +306,17 @@ fet_beginchar ("128th Flag (up)", "u7");
 
        draw_square_block ((-0.5 stemthickness_rounded, 0),
                           (0, (-flag_count * staff_space_rounded)));
-fet_endchar;
+enddef;
+
 
 
-fet_beginchar ("8th (down)", "d3");
+
+def downstemsingleflag (expr shortening) =
        save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
        save flagspace, total_depth, flag_count;
 
        flag_count = 1;
-       total_depth# = 2.75 staff_space#;
+       total_depth# = (2.75 - shortening) * staff_space#;
        flare = staff_space;
        flagspace# = .9 staff_space#;
        hip_depth_ratio = .74;
@@ -336,15 +340,15 @@ fet_beginchar ("8th (down)", "d3");
                           (0, (-flag_count * staff_space_rounded)));
 
        y_mirror_char;
-fet_endchar;
+enddef;
 
 
-fet_beginchar ("16th (down)", "d4");
+def downstemdoubleflag (expr shortening) =
        save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
        save flagspace, total_depth, flag_count;
 
        flag_count = 2;
-       total_depth# = 3.0 staff_space# - blot_diameter# / 2;
+       total_depth# = (3.0 - shortening) * staff_space# - blot_diameter# / 2;
        flare = .82 staff_space;
        flagspace# = .9 staff_space#;
        hip_depth_ratio = .85;
@@ -371,15 +375,15 @@ fet_beginchar ("16th (down)", "d4");
                           (0, (-flag_count * staff_space_rounded)));
 
        y_mirror_char;
-fet_endchar;
+enddef;
 
 
-fet_beginchar ("32nd (down)", "d5");
+def downstemtripleflag (expr shortening) =
        save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
        save flagspace, total_depth, flag_count;
 
        flag_count = 3;
-       total_depth# = 3.75 * staff_space# - blot_diameter# / 2;
+       total_depth# = (3.75 - shortening) * staff_space# - blot_diameter# / 2;
        flare = .82 staff_space;
        flagspace# = .88 staff_space#;
        hip_depth_ratio = .87;
@@ -408,15 +412,15 @@ fet_beginchar ("32nd (down)", "d5");
                           (0, (-flag_count * staff_space_rounded)));
 
        y_mirror_char;
-fet_endchar;
+enddef;
 
 
-fet_beginchar ("64th (down)", "d6");
+def downstemquadrupleflag (expr shortening) =
        save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
        save flagspace, total_depth, flag_count;
 
        flag_count = 4;
-       total_depth# = 4.5 staff_space# - blot_diameter# / 2;
+       total_depth# = (4.5 - shortening) * staff_space# - blot_diameter# / 2;
        flare = .8 staff_space;
        flagspace# = .9 staff_space#;
        hip_depth_ratio = .83;
@@ -447,15 +451,15 @@ fet_beginchar ("64th (down)", "d6");
                           (0, (-flag_count * staff_space_rounded)));
 
        y_mirror_char;
-fet_endchar;
+enddef;
 
 
-fet_beginchar ("128th (down)", "d7");
+def downstemquintupleflag (expr shortening) =
        save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
        save flagspace, total_depth, flag_count;
 
        flag_count = 5;
-       total_depth# = 5.5 staff_space# - blot_diameter# / 2;
+       total_depth# = (5.5 - shortening) * staff_space# - blot_diameter# / 2;
        flare = .8 staff_space;
        flagspace# = .92 staff_space#;
        hip_depth_ratio = .85;
@@ -488,9 +492,66 @@ fet_beginchar ("128th (down)", "d7");
                           (0, (-flag_count * staff_space_rounded)));
 
        y_mirror_char;
+enddef;
+
+
+
+
+fet_beginchar ("8th Flag (up)", "u3");
+       upstemsingleflag (0.0);
 fet_endchar;
 
 
+fet_beginchar ("16th Flag (up)", "u4");
+       upstemdoubleflag (0);
+fet_endchar;
+
+
+fet_beginchar ("32nd Flag (up)", "u5");
+       upstemtripleflag (0);
+fet_endchar;
+
+
+fet_beginchar ("64th Flag (up)", "u6");
+       upstemquadrupleflag (0);
+fet_endchar;
+
+
+fet_beginchar ("128th Flag (up)", "u7");
+       upstemquintupleflag (0);
+fet_endchar;
+
+
+
+
+
+fet_beginchar ("8th Flag (down)", "d3");
+       downstemsingleflag (0.0);
+fet_endchar;
+
+
+fet_beginchar ("16th Flag (down) 3", "d4");
+       downstemdoubleflag (0);
+fet_endchar;
+
+
+fet_beginchar ("32nd Flag (down)", "d5");
+       downstemtripleflag (0);
+fet_endchar;
+
+
+fet_beginchar ("64th Flag (down)", "d6");
+       downstemquadrupleflag (0);
+fet_endchar;
+
+
+fet_beginchar ("128th Flag (down)", "d7");
+       downstemquintupleflag (0);
+fet_endchar;
+
+
+
+
 %%%%%%%%
 %
 % Single Stroke for Short Appogiatura
diff --git a/mf/feta-flags11.mf b/mf/feta-flags11.mf
new file mode 100644 (file)
index 0000000..30cd7f0
--- /dev/null
@@ -0,0 +1,13 @@
+% feta-flags11.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 11.22;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
diff --git a/mf/feta-flags13.mf b/mf/feta-flags13.mf
new file mode 100644 (file)
index 0000000..3210b1a
--- /dev/null
@@ -0,0 +1,13 @@
+% feta-flags13.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 12.60;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
diff --git a/mf/feta-flags14.mf b/mf/feta-flags14.mf
new file mode 100644 (file)
index 0000000..9a5449c
--- /dev/null
@@ -0,0 +1,13 @@
+% feta-flags14.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 14.14;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
diff --git a/mf/feta-flags16.mf b/mf/feta-flags16.mf
new file mode 100644 (file)
index 0000000..d029937
--- /dev/null
@@ -0,0 +1,13 @@
+% feta-flags16.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 15.87;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
diff --git a/mf/feta-flags18.mf b/mf/feta-flags18.mf
new file mode 100644 (file)
index 0000000..dcaefd4
--- /dev/null
@@ -0,0 +1,13 @@
+% feta-flags18.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 17.82;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
diff --git a/mf/feta-flags20.mf b/mf/feta-flags20.mf
new file mode 100644 (file)
index 0000000..b7b834e
--- /dev/null
@@ -0,0 +1,13 @@
+% feta-flags20.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 20;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
diff --git a/mf/feta-flags23.mf b/mf/feta-flags23.mf
new file mode 100644 (file)
index 0000000..dcd640c
--- /dev/null
@@ -0,0 +1,13 @@
+% feta-flags23.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 22.45;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
diff --git a/mf/feta-flags26.mf b/mf/feta-flags26.mf
new file mode 100644 (file)
index 0000000..b2a1fe6
--- /dev/null
@@ -0,0 +1,13 @@
+% feta-flags26.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 25.20;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
index f78895d0f29af8a59e1713505615eb63f1833317..6c00aa5784e3c43d85bab4315001f3127cb4e87c 100644 (file)
@@ -32,10 +32,6 @@ input feta-params;
 
 font_x_height staff_space#;
 
-%% this is a fallback so we can run the font without including feta-noteheads.
-black_notehead_width# := 1.0 staff_space#;
-
-
 fet_beginfont ("feta", design_size, "fetaMusic");
 
 if test = 0:
index 4a952ed407102b7df242e22f3e9222e092d664b3..b63158bbe842817f46c244bdb82c5c6d69a1b4f0 100644 (file)
@@ -32,19 +32,9 @@ input feta-params;
 
 font_x_height staff_space#;
 
-%% this is a fallback so we can run the font without
-%%    including feta-noteheads.
-black_notehead_width# := 1.0 staff_space#;
-
-
 fet_beginfont ("feta", design_size, "fetaMusic");
 
-if test = 0:
-       input feta-noteheads;
-        input feta-flags;
-else:
-       input feta-noteheads-test-generic.mf;
-fi
+input feta-noteheads;
 
 autometric_parameter ("staffsize", staffsize#);
 autometric_parameter ("stafflinethickness", stafflinethickness#);
diff --git a/mf/feta-noteheads-test-generic.mf b/mf/feta-noteheads-test-generic.mf
deleted file mode 100644 (file)
index 0e381bd..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-%
-% test stuff.
-% in a separate file to avoid tainting non-test font files for testing.
-%
-
-input feta-noteheads;
-%input feta-flags;
index 54a51f622a04aade22a479a7d84f6c4617dab2ae..c72522072195d2b9751158e12cd0014a333294c2 100644 (file)
@@ -36,94 +36,20 @@ picture remember_pic;
 % NOTE HEAD VARIABLES
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-save black_notehead_width, noteheight;
-save half_notehead_width, whole_notehead_width, slash_thick;
-save slash_slope, overdone_heads, solfa_noteheight;
+save half_notehead_width, whole_notehead_width;
+save solfa_noteheight;
 
-numeric noteheight;
-numeric slash_thick;
-numeric black_notehead_width;
 numeric whole_notehead_width;
 numeric half_notehead_width;
 
-
 fet_begingroup ("noteheads");
 
 
-% Slope of slash.  From scm/grob-description.scm.  How to auto-copy?
-slash_slope := 1.7;
-
-% Thickness of slash lines.  Quarter notes get 1.5slt width.
-slash_thick# := 2/3 * 0.48 staff_space#;
-
-
-%
-% Hand-engraved music often has balls extending above and below
-% the lines.  If you like that, modify overdone heads (unit:
-% stafflinethickness).
-%
-overdone_heads = 0.0;
-noteheight# := staff_space# + (1 + overdone_heads) * stafflinethickness#;
-
-
 %
 % solfa heads should not overlap on chords.
 %
 solfa_noteheight# := staff_space# - stafflinethickness#;
 
-define_pixels (slash_thick);
-define_whole_vertical_pixels (noteheight);
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SLANT moves both extrema on the long axis (by SLANT * ELLIPTICITY,
-% so SLANT = -1, puts the extreme on the long axis next to the short
-% axis one).
-%
-
-def draw_outside_ellipse (expr ellipticity, tilt, superness, slant) =
-       save attachment_y;
-       save pat;
-       path pat;
-
-       pat := superellipse ((ellipticity, 0), (-slant * ellipticity, 1.0),
-                            (-ellipticity, 0), (slant * ellipticity, -1.0),
-                            superness);
-       pat := pat rotated tilt;
-
-       save top_point, right_point;
-       pair top_point, right_point;
-
-       top_point := directionpoint left of pat;
-       right_point := directionpoint up of pat;
-
-       save scaling, width;
-
-       scaling# = noteheight# / (2 ypart (top_point));
-       width# := 2 xpart (right_point) * scaling#;
-       define_pixels (scaling, width);
-
-       set_char_box (0, width#, noteheight# / 2, noteheight# / 2);
-
-       d := d - feta_space_shift;
-
-       % attachment Y
-       charwy := ypart (right_point) * scaling#;
-       charwx := width#;
-
-       pat := pat scaled scaling shifted (w / 2, .5 (h - d));
-
-       width := hround width;
-
-       if test_outlines = 1:
-               draw pat;
-       else:
-               fill pat;
-       fi;
-enddef;
-
-
 def undraw_inside_ellipse (expr ellipticity, tilt, superness, clearance) =
 begingroup
        save pat;
@@ -344,10 +270,7 @@ fi;
 
 
 fet_beginchar ("Quarter notehead", "s2");
-       % used to have 32. With 31, they are slightly bolder.
-       draw_outside_ellipse (1.49 - puff_up_factor / 3.0, 31, 0.707, 0);
-       black_notehead_width# := charwd;
-
+       draw_quarter_path;
        draw_staff (-2, 2, 0);
 fet_endchar;
 
index 4d0a5eb4b527b873f9fcbc9b75e9c5e77a30fd64..244c262ec3fefbfbe20e1591c8e9bb4a6e5b8a57 100644 (file)
@@ -222,3 +222,89 @@ else:
 fi;
 
 feta_fillpen := savepen;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Notehead width and height are defined here.
+%
+%
+% Slope of slash.  From scm/grob-description.scm.  How to auto-copy?
+slash_slope := 1.7;
+
+% Thickness of slash lines.  Quarter notes get 1.5slt width.
+slash_thick# := 2/3 * 0.48 staff_space#;
+
+%
+% Hand-engraved music often has balls extending above and below
+% the lines.  If you like that, modify overdone heads (unit:
+% stafflinethickness).
+%
+overdone_heads = 0.0;
+noteheight# := staff_space# + (1 + overdone_heads) * stafflinethickness#;
+
+define_pixels (slash_thick);
+define_whole_vertical_pixels (noteheight);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is used to draw all elliptical notes; it also sets
+% black_notehead_width, so it should be called in any file that
+% needs the value of black_notehead_width.
+%
+% SLANT moves both extrema on the long axis (by SLANT * ELLIPTICITY,
+% so SLANT = -1, puts the extreme on the long axis next to the short
+% axis one).
+%
+
+def draw_outside_ellipse (expr ellipticity, tilt, superness, slant) =
+        save attachment_y;
+        save pat;
+        path pat;
+
+        pat := superellipse ((ellipticity, 0), (-slant * ellipticity, 1.0),
+                             (-ellipticity, 0), (slant * ellipticity, -1.0),
+                             superness);
+        pat := pat rotated tilt;
+
+        save top_point, right_point;
+        pair top_point, right_point;
+
+        top_point := directionpoint left of pat;
+        right_point := directionpoint up of pat;
+
+        save scaling, width;
+
+        scaling# := noteheight# / (2 ypart (top_point));
+        width# := 2 xpart (right_point) * scaling#;
+        define_pixels (scaling, width);
+       set_char_box (0, width#, noteheight# / 2, noteheight# / 2);
+
+        d := d - feta_space_shift;
+
+        % attachment Y
+        charwy := ypart (right_point) * scaling#;
+        charwx := width#;
+
+        pat := pat scaled scaling shifted (w / 2, .5 (h - d));
+
+        width := hround width;
+
+        if test_outlines = 1:
+                draw pat;
+        else:
+                fill pat;
+        fi;
+enddef;
+
+
+def draw_quarter_path =
+        draw_outside_ellipse (1.49 - puff_up_factor / 3.0, 31, 0.707, 0);
+enddef;
+
+test_outlines := 0;
+draw_quarter_path;
+black_notehead_width# := charwd;
+
+define_pixels (slash_thick);
+define_whole_vertical_pixels (noteheight);
+
+
index b3843960c27329119fadc6d7b0b932894b3088dd..d04ed18b7b5e99c2641079b77e6af9a459a634ad 100644 (file)
@@ -1447,17 +1447,18 @@ enddef;
 
 
 fet_beginchar ("Arpeggio", "arpeggio");
+       begingroup;
        save height, overshoot, width;
-       height# = staff_space#;
-       width# = 0.8 height#;
-       overshoot# = 0.25 staff_space#;
+       height# := staff_space#;
+       width# := 0.8 * height#;
+       overshoot# := 0.25 * staff_space#;
        define_pixels (height, overshoot, width);
-
        set_char_box (0, width#, 0, height#);
        draw_arpeggio;
        penlabels (range 1 thru 9);
 
        draw_staff (-2, 2, 0.0);
+       endgroup;
 fet_endchar;
 
 
@@ -1468,7 +1469,8 @@ fet_endchar;
 %
 
 fet_beginchar ("Trill_element", "trill_element");
-       save height, overshoot;
+       begingroup;
+       save height, overshoot, width;
        height# = staff_space#;
        width# = 0.8 height#;
        overshoot# = 0.25 staff_space#;
@@ -1480,6 +1482,7 @@ fet_beginchar ("Trill_element", "trill_element");
        currentpicture := currentpicture shifted -(width / 2, height / 2);
        currentpicture := currentpicture rotated 90;
        currentpicture := currentpicture shifted (height / 2, width / 2);
+       endgroup;
 fet_endchar;
 
 
index 682dc8bc3c149b46d3f21e015e13b530e3ec8cd2..130c3c50d4b5ed25a2748dc3770eaf420a0b7424 100644 (file)
@@ -46,6 +46,8 @@ fet_begingroup ("noteheads");
 %
 % TODO: should depth/height include appendages/stems?
 
+save overdone_heads, noteheight;
+
 overdone_heads = 0;
 noteheight# := staff_space# + (1 + overdone_heads) * stafflinethickness#;
 define_pixels (noteheight);
index a7090de0327ff19fbd57c011ff33f5d4ac695f0d..735b9c78956e4e602f41478525379bb344880232 100644 (file)
@@ -123,6 +123,11 @@ accidentals)."
  "A key cancellation."
  '())
 
+(ly:add-interface
+ 'ligature-head-interface
+ "A note head that can become part of a ligature."
+ '())
+
 (ly:add-interface
  'ligature-bracket-interface
  "A bracket indicating a ligature in the original edition."
index a10e62b965a25bf73c9b0ff3f89c923e3e76fe1d..5c2114338e053cb5468c5af6672d689d22d74ddf 100644 (file)
@@ -777,6 +777,7 @@ override:
 @example
 \\override MultiMeasureRest #'spacing-pair = #'(staff-bar . staff-bar)
 @end example")
+     (spanner-id ,string? "An identifier to distinguish concurrent spanners.")
      (springs-and-rods ,boolean? "Dummy variable for triggering
 spacing routines.")
      (stacking-dir ,ly:dir? "Stack objects in which direction?")
index a5c13d51953fcafd1172af8a4b8707a89654e338..177ebafc847426248949e66dc7d4d4c02b697415 100644 (file)
                 (interfaces . (font-interface
                                gregorian-ligature-interface
                                ledgered-interface
+                                ligature-head-interface
                                mensural-ligature-interface
                                note-head-interface
                                rhythmic-grob-interface
        (height-limit . 2.0)
        (minimum-length . 1.5)
        (ratio . 0.333)
+       (spanner-id . "")
        (springs-and-rods . ,ly:spanner::set-spacing-rods)
        (stencil . ,ly:slur::print)
        (thickness . 1.1)
        (line-thickness . 0.8)
        (minimum-length . 1.5)
        (ratio . 0.25)
+       (spanner-id . "")
        (springs-and-rods . ,ly:spanner::set-spacing-rods)
        (stencil . ,ly:slur::print)
        (thickness . 1.2)
index 3ecfce5aaf1cdffce6a962576f3454bb8d996011..c0041ba2a98344efe4fdef5fe097a9e0f832e0cb 100644 (file)
@@ -16,7 +16,8 @@
 ;;;
 (define (scheme-expr->lily-string scm-arg)
   (cond ((or (number? scm-arg)
-            (string? scm-arg))
+             (string? scm-arg)
+             (boolean? scm-arg))
         (format #f "~s" scm-arg))
        ((or (symbol? scm-arg)
             (list? scm-arg))
@@ -466,7 +467,9 @@ Otherwise, return #f."
                 ;; as a note_chord_element to prevent spurious output, e.g.,
                 ;; \displayLilyMusic < c-1\4 >8 -> c-1\48
                 (null? (filter post-event?
-                               (ly:music-property (car simple-elements) 'articulations))))
+                               (ly:music-property (car simple-elements) 'articulations)))
+                ;; same for simple_element with \tweak
+                (null? (ly:music-property (car simple-elements) 'tweaks)))
            ;; simple_element : note | figure | rest | mmrest | lyric_element | skip
            (let* ((simple-element (car simple-elements))
                   (duration (ly:music-property simple-element 'duration))
index 201efa6528e8db2563c2e5e6e3ba6e0b001377c5..5e1159363654e42981a8677b67ff785cf91d3dc9 100644 (file)
@@ -167,6 +167,7 @@ If zero, signals a beat containing varying durations.")
 Options are @code{'text} and @code{'hairpin}.")
      (span-text ,markup? "The displayed text for dynamic text spanners
 (e.g., cresc.)")
+     (spanner-id ,string? "Identifier to distinguish concurrent spanners.")
      (split-list ,list? "Splitting moments for part combiner.")
      (start-callback ,procedure? "Function to compute the negative length
 of starting grace notes.  This property can only be defined as initializer
index d57cba811816f44214c150b8e781ae403eac8f95..8a3676b2a1ff13a497abe3959238d888bffc1fd6 100644 (file)
@@ -403,6 +403,7 @@ goes down).")
      . ((description . "Start or end phrasing slur.
 
 Syntax: @var{note}@code{\\(} and @var{note}@code{\\)}")
+        (spanner-id . "")
        (types . (general-music span-event event phrasing-slur-event))
        ))
 
@@ -534,6 +535,7 @@ Syntax: @code{\\skip} @var{duration}")
      . ((description . "Start or end slur.
 
 Syntax: @var{note}@code{(} and @var{note}@code{)}")
+        (spanner-id . "")
        (types . (general-music span-event event slur-event))
        ))
 
index 6fc933499df5c0ace9bb92ef2fda02b70d4683d9..302259fa23eda7d78d9704dc87f0c77fa6edbb15 100644 (file)
@@ -79,6 +79,15 @@ display method will be called."
                 (format #f "~a\\tag #'~a" (if post-event? "-" "") tag))
               (ly:music-property expr 'tags))))
 
+(define* (tweaks->lily-string expr #:optional (post-event? #f))
+  (format #f "~{~a ~}"
+          (map (lambda (tweak)
+                 (format #f "~a\\tweak #'~a #~a"
+                         (if post-event? "-" "")
+                         (car tweak)
+                         (scheme-expr->lily-string (cdr tweak))))
+               (ly:music-property expr 'tweaks))))
+
 (define-public (music->lily-string expr parser)
   "Print @var{expr}, a music expression, in LilyPond syntax."
   (if (ly:music? expr)
@@ -90,8 +99,9 @@ display method will be called."
                                              (proc expr parser))
                                            procs))))
        (if result-string
-           (format #f "~a~a" 
-                   (tag->lily-string expr (post-event? expr))
+           (format #f "~a~a~a"
+                    (tag->lily-string expr (post-event? expr))
+                    (tweaks->lily-string expr (post-event? expr))
                    result-string)
            (format #f "%{ Print method not implemented for music type ~a %}"
                    music-type)))
index 7c52d41846632b8ffda35086e6cdf49b032949ec..8d828db8694c2fdb3ac7c8b1cf7876715b128c15 100644 (file)
@@ -278,7 +278,7 @@ through MUSIC."
        ;; This works for single-note and multi-note tremolos!
        (let* ((children (if (music-is-of-type? main 'sequential-music)
                             ;; \repeat tremolo n { ... }
-                            (length (ly:music-property main 'elements))
+                            (length (extract-named-music main 'EventChord))
                             ;; \repeat tremolo n c4
                             1))
               ;; # of dots is equal to the 1 in bitwise representation (minus 1)!
@@ -304,7 +304,7 @@ through MUSIC."
 (define (calc-repeat-slash-count music)
   "Given the child-list @var{music} in @code{PercentRepeatMusic},
 calculate the number of slashes based on the durations.  Returns @code{0}
-if durations in in @var{music} vary, allowing slash beats and double-percent
+if durations in @var{music} vary, allowing slash beats and double-percent
 beats to be distinguished."
   (let* ((durs (map (lambda (elt)
                      (duration-of-note elt))
index 46fb8163dd7e74d0d5e9c785c1999e89da47b726..8d7d08b214a9fdd7c145cdcd40bfa8d0235de480 100644 (file)
@@ -42,6 +42,7 @@ SetFontNames("%(name)s-%(design_size)d", "%(name)s-%(design_size)d", "%(name)s-%
 
 MergeFonts("feta%(design_size)d.pfb");
 MergeFonts("feta-noteheads%(design_size)d.pfb");
+MergeFonts("feta-flags%(design_size)d.pfb");
 MergeFonts("parmesan%(design_size)d.pfb");
 
 # load nummer/din after setting PUA.
index 3f7b3cbb2fc88ff969711bcb2a478e5dee09df09..4f8f92dbc5e4e0bc9442e760ca9b0c4b0943a320 100644 (file)
@@ -244,6 +244,8 @@ for filenm in files:
         enc_name = 'ParmesanEncoding'
     elif re.search ('feta-noteheads', filenm):
         enc_name = 'FetaNoteheadsEncoding'
+    elif re.search ('feta-flags', filenm):
+        enc_name = 'FetaFlagsEncoding'
     elif re.search ('feta-brace', filenm):
         enc_name = 'FetaBraceEncoding'
     elif re.search ('feta-alphabet', filenm):