]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' of git://git.sv.gnu.org/lilypond
authorNicolas Sceaux <nicolas.sceaux@free.fr>
Fri, 29 Dec 2006 16:36:03 +0000 (17:36 +0100)
committerNicolas Sceaux <nicolas.sceaux@free.fr>
Fri, 29 Dec 2006 16:36:03 +0000 (17:36 +0100)
44 files changed:
.gitignore
Documentation/fr/user/lilypond.tely
Documentation/po/fr.po
Documentation/user/advanced-notation.itely
Documentation/user/basic-notation.itely
Documentation/user/changing-defaults.itely
Documentation/user/lilypond-book.itely
Documentation/user/non-music.itely
Documentation/user/putting.itely
Documentation/user/running.itely
Documentation/user/templates.itely
Documentation/user/tutorial.itely
Documentation/user/tweaks.itely
Documentation/user/working.itely
GNUmakefile.in
THANKS
VERSION
configure.in
flower/GNUmakefile
flower/test-file.cc
input/manual/bar-lines.ly
input/regression/accidental-cautionary.ly
input/regression/accidental-suggestions.ly
lily/accidental-engraver.cc
lily/accidental.cc
lily/ambitus-engraver.cc
lily/breathing-sign.cc
lily/include/accidental-interface.hh
lily/include/lily-guile.hh
lily/include/ly-smobs.icc
lily/lily-guile.cc
lily/ottava-engraver.cc
lily/pitched-trill-engraver.cc
lily/slur-scoring.cc
make/ly-targets.make
make/lysdoc-targets.make
mf/parmesan-accidentals.mf
mf/parmesan-flags.mf
mf/parmesan-generic.mf
mf/parmesan-timesig.mf
python/convertrules.py
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/lily.scm

index 7fe9d82c2a4873165ef819ce8c438f7b70a0ec54..1dcb043399485731133ba5fd21a9cac4280a041f 100644 (file)
@@ -44,3 +44,4 @@ test-output-distance
 *.gcov
 *.gcda
 *.gcno
+*.600pk
index 6b6525419196e17dcd24f76ff2ffbf91587ee5c4..12fcd5750f4645c4aee7445c8dfad76b52930109 100644 (file)
@@ -112,7 +112,7 @@ Manuel d'apprentissage
 Manuel de référence
 
 * Basic notation::                 notation musicale standard.
-* Instrument-specific notation::
+* Instrument-specific notation::   notation spécifique à un instrument.
 * Advanced notation::              notation plus rarement utilisée.
 * Changing defaults::              retoucher la mise en forme.
 * Non-musical notation::           aspects autres que la notation musicale.
@@ -174,11 +174,15 @@ Annexes
 @node LilyPond command index
 @appendix LilyPond command index
 
+UNTRANSLATED NODE: IGNORE ME
+
 @printindex ky
 
 @node LilyPond index
 @appendix LilyPond index
 
+UNTRANSLATED NODE: IGNORE ME
+
 @printindex cp
 
 @bye
index c6307b70176b89fa8be262f4d66ec57b27ce104d..fbf6cade9914b5c165ded46ce269e9391c6c816a 100644 (file)
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: fr\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-12-23 14:50+0100\n"
-"PO-Revision-Date: 2006-12-23 15:02+0100\n"
+"PO-Revision-Date: 2006-12-27 23:51+0100\n"
 "Last-Translator: John Mandereau <john.mandereau@free.fr>\n"
 "Language-Team: Français <lilypond-user-fr@gnu.org>\n"
 "MIME-Version: 1.0\n"
@@ -279,7 +279,7 @@ msgid "Staff notation"
 msgstr "Notation sur la portée"
 
 msgid "Clef"
-msgstr "Clé"
+msgstr "Clés"
 
 msgid "Key signature"
 msgstr "Armure"
@@ -382,160 +382,160 @@ msgid "Measure repeats"
 msgstr "Répétitions de mesure"
 
 msgid "Instrument-specific notation"
-msgstr ""
+msgstr "Notation spécifique"
 
 msgid "Piano music"
-msgstr ""
+msgstr "Musique pour piano"
 
 msgid "Automatic staff changes"
-msgstr ""
+msgstr "Changements de portée automatiques"
 
 msgid "Manual staff switches"
-msgstr ""
+msgstr "Changements de portée manuels"
 
 msgid "Pedals"
-msgstr ""
+msgstr "Pédales"
 
 msgid "Staff switch lines"
-msgstr ""
+msgstr "Lignes de changement de portée"
 
 msgid "Cross staff stems"
-msgstr ""
+msgstr "Accords sur plusieurs portées"
 
 msgid "Chord names"
-msgstr ""
+msgstr "Accords nommés"
 
 msgid "Introducing chord names"
-msgstr ""
+msgstr "Introduction aux noms d'accords"
 
 msgid "Chords mode"
-msgstr ""
+msgstr "Mode accords"
 
 msgid "Printing chord names"
-msgstr ""
+msgstr "Imprimer des noms d'accords"
 
 msgid "Vocal music"
-msgstr ""
+msgstr "Musique vocale"
 
 msgid "Setting simple songs"
-msgstr ""
+msgstr "Écrire des chansons simples¿"
 
 msgid "Entering lyrics"
-msgstr ""
+msgstr "Saisie des paroles"
 
 msgid "Hyphens and extenders"
-msgstr ""
+msgstr "Traits d'union et de prolongation"
 
 msgid "The Lyrics context"
-msgstr ""
+msgstr "Le contexte de paroles (Lyrics)"
 
 msgid "Melismata"
-msgstr ""
+msgstr "Mélismes"
 
 msgid "Another way of entering lyrics"
-msgstr ""
+msgstr "Une autre manière de saisir des paroles"
 
 msgid "Flexibility in placement"
-msgstr ""
+msgstr "Flexibilité dans le placement"
 
 msgid "Lyrics to multiple notes of a melisma"
-msgstr ""
+msgstr "Paroles sur plusieurs notes d'un mélisme"
 
 msgid "Divisi lyrics"
-msgstr ""
+msgstr "Paroles alternatives"
 
 msgid "Switching the melody associated with a lyrics line"
-msgstr ""
+msgstr "Changer la voix associée à une ligne de paroles"
 
 msgid "Specifying melismata within the lyrics"
-msgstr ""
+msgstr "Indiquer les mélismes au sein des paroles"
 
 msgid "Lyrics independent of notes"
-msgstr ""
+msgstr "Paroles indépendantes des notes"
 
 msgid "Spacing lyrics"
-msgstr ""
+msgstr "Espacement des paroles"
 
 msgid "More about stanzas"
-msgstr ""
+msgstr "Plus à propos des strophes"
 
 msgid "Ambitus"
-msgstr ""
+msgstr "Ambitus"
 
 msgid "Other vocal issues"
-msgstr ""
+msgstr "Autres éléments relatifs à la voix"
 
 msgid "Rhythmic music"
-msgstr ""
+msgstr "Musique rythmique"
 
 msgid "Showing melody rhythms"
-msgstr ""
+msgstr "Graver des lignes rythmiques"
 
 msgid "Entering percussion"
-msgstr ""
+msgstr "Notation de percussions"
 
 msgid "Percussion staves"
-msgstr ""
+msgstr "Portée de percussions"
 
 msgid "Ghost notes"
-msgstr ""
+msgstr "Notes fantômes"
 
 msgid "Guitar"
-msgstr ""
+msgstr "Guitare"
 
 msgid "String number indications"
-msgstr ""
+msgstr "Indications de numéro de corde"
 
 msgid "Tablatures basic"
-msgstr ""
+msgstr "Base des tablatures"
 
 msgid "Non-guitar tablatures"
-msgstr ""
+msgstr "Tablatures autres que pour la guitare"
 
 msgid "Banjo tablatures"
-msgstr ""
+msgstr "Tablatures pour banjo"
 
 msgid "Fret diagrams"
-msgstr ""
+msgstr "Tablatures"
 
 msgid "Right hand fingerings"
-msgstr ""
+msgstr "Doigtés pour la main droite"
 
 msgid "Other guitar issues"
-msgstr ""
+msgstr "Autres éléments relatifs à la guitare"
 
 msgid "Bagpipe"
-msgstr ""
+msgstr "Cornemuse"
 
 msgid "Bagpipe definitions"
-msgstr ""
+msgstr "Définitions pour la cornemuse"
 
 msgid "Bagpipe example"
-msgstr ""
+msgstr "Exemple pour la cornemuse"
 
 msgid "Ancient notation"
-msgstr ""
+msgstr "Notations anciennes"
 
 msgid "Ancient note heads"
-msgstr ""
+msgstr "Têtes de note anciennes"
 
 msgid "Ancient accidentals"
-msgstr ""
+msgstr "Altérations anciennes"
 
 msgid "Ancient rests"
-msgstr ""
+msgstr "Silences anciens"
 
 msgid "Ancient clefs"
-msgstr ""
+msgstr "Clefs anciennes"
 
 msgid "Ancient flags"
-msgstr ""
+msgstr "Crochets anciens"
 
 msgid "Ancient time signatures"
-msgstr ""
+msgstr "Métriques anciennes"
 
 msgid "Ancient articulations"
-msgstr ""
+msgstr "Articulations anciennes"
 
 msgid "Custodes"
 msgstr ""
@@ -562,19 +562,19 @@ msgid "Musica ficta accidentals"
 msgstr ""
 
 msgid "Figured bass"
-msgstr ""
+msgstr "Basse chiffrée"
 
 msgid "Other instrument specific notation"
-msgstr ""
+msgstr "Autres notations spécifique à des instruments"
 
 msgid "Artificial harmonics (strings)"
-msgstr ""
+msgstr "Harmoniques artificiels (cordes)"
 
 msgid "Advanced notation"
-msgstr ""
+msgstr "Notation avancée"
 
 msgid "Text"
-msgstr ""
+msgstr "Texte"
 
 msgid "Text scripts"
 msgstr ""
index 30042de160cfef64d5687736533b5caca4519fc1..ad05abff27afb49a2a901632efe8f90c08fc4ffe 100644 (file)
@@ -1051,6 +1051,19 @@ be added to that context.
 More information about adding and removing engravers can
 be found in @ref{Modifying context plug-ins}.
 
+Instrument names may be changed in the middle of a piece,
+
+@lilypond[quote,fragment,verbatim,ragged-right]
+\set Staff.instrumentName = "First"
+\set Staff.shortInstrumentName = "one"
+c1 c c c \break
+c1 c c c \break
+\set Staff.instrumentName = "Second"
+\set Staff.shortInstrumentName = "two"
+c1 c c c \break
+c1 c c c \break
+@end lilypond
+
 
 @seealso
 
@@ -1581,6 +1594,34 @@ the original clef should be stated once again.
 
 @end itemize
 
+The macro @code{\transposedCueDuring} is
+useful to add cues to instruments which use a completely different
+octave range (for example, having a cue of a piccolo flute within
+a contra bassoon part).
+
+@lilypond[verbatim,ragged-right,quote]
+picc = \relative c''' {
+  \clef "treble^8"
+  R1 |
+  c8 c c e g2 |
+  a4 g g2 |
+}
+\addquote "picc" { \picc }
+
+cbsn = \relative c, {
+  \clef "bass_8"
+  c4 r g r
+  \transposedCueDuring #"picc" #UP c,, { R1 } |
+  c4 r g r |
+}
+
+<<
+  \context Staff = "picc" \picc
+  \context Staff = "cbsn" \cbsn
+>>
+@end lilypond
+
+
 
 @node Aligning to cadenzas
 @subsection Aligning to cadenzas
@@ -2079,6 +2120,7 @@ teaching tools in addition to great musical scores.
 * Analysis brackets::           
 * Coloring objects::            
 * Parentheses::                 
+* Grid lines::                  
 @end menu
 
 @node Balloon help
@@ -2372,3 +2414,11 @@ This only functions inside chords, even for single notes
 @end example
 
 
+@node Grid lines
+@subsection Grid lines
+
+Vertical lines can be drawn between staves synchronized with
+the notes.
+
+Examples: @inputfileref{input/@/regression,grid@/-lines@/.ly}.
+
index e488f6926996b069a836603eab5dc5ae2c403aed..342fe01ae708f0f26e5f9670f50e34c3ea602269 100644 (file)
@@ -1746,6 +1746,24 @@ in every context, and that type is determined by the property
 @internalsref{systemStartDelimiter}.
 
 
+@commonprop
+
+System start delimiters may be deeply nested,
+
+@lilypond[quote,ragged-right,verbatim]
+\new StaffGroup 
+\relative <<
+  \set StaffGroup.systemStartDelimiterHierarchy
+    = #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
+  \new Staff { c1 }
+  \new Staff { c1 }
+  \new Staff { c1 }
+  \new Staff { c1 }
+  \new Staff { c1 }
+>>
+@end lilypond
+
+
 @node Staff symbol
 @subsection Staff symbol
 
index 3b681cb22decee6e4c8f0c2fc42cfac2e1e6af65..1dfaffd479c947cfce38278b5ea17f9bbfc4710d 100644 (file)
@@ -428,6 +428,7 @@ This section describes what contexts are, and how to modify them.
 * Layout tunings within contexts::  
 * Changing context default settings::  
 * Defining new contexts::       
+* Aligning contexts::           
 @end menu
 
 
@@ -1206,6 +1207,30 @@ Then the output at the start of this subsection can be entered as
 @end example
 
 
+@node Aligning contexts
+@subsection Aligning contexts
+
+New contexts may be aligned above or below exisiting contexts.  This
+could be useful in setting up a vocal staff (@ref{Vocal ensembles}) and
+in ossia,
+
+@cindex ossia
+@findex alignAboveContext
+@findex alignBelowContext
+
+@lilypond[quote,ragged-right]
+ossia = { f4 f f f }
+\score{
+  \relative c' \new Staff = "main" {
+    c4 c c c
+    <<
+      \new Staff \with {alignAboveContext=main} \ossia
+      { d8 f d f d f d f }
+    >>
+  }
+}
+@end lilypond
+
 
 
 @node The \override command
index 9bb00d3fa5228fa7b1921e1163bdcf5cb88bbf1a..587df0ee4071f58fd57f4d99ff2537e5d19b51d8 100644 (file)
@@ -829,12 +829,26 @@ output format based on the input filename's extension.
 @end multitable
 @end quotation
 
+
 @node Many quotes of a large score
 @section Many quotes of a large score
 
 If you need to quote many fragments of a large score, you can also use
 the clip systems feature, see @ref{Extracting fragments of notation}.
 
+
+@ignore 
+@n ode Inserting LilyPond output into OpenOffice.org
+@s ection Inserting LilyPond output into OpenOffice.org
+
+@c index OpenOffice.org
+
+LilyPond notation can be added to OpenOffice.org with
+@u ref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}
+
+@end ignore
+
+
 @node Inserting LilyPond output into other programs
 @section Inserting LilyPond output into other programs
 
index 9fb163d7c0742c579367e23aabf8a6691fc6c5c1..16ed517ad84b412c4e33fd5ec8e78d71cd557380 100644 (file)
@@ -277,6 +277,9 @@ A markup text, a verse for example
 Markup texts are rendered above, between or below the scores or music
 expressions, wherever they appear.
 
+@cindex variables
+@cindex identifiers
+
 @item
 An identifier, such as
 @example
index 0cc5ecd908ff926d5c6b9226482325ee3f4d314f..f585f2d00f834f8852caf7a983363455a6aa4fdf 100644 (file)
@@ -283,6 +283,9 @@ Some people put some of those commands outside the
 often placed above the @code{\score}.  That's just
 another shorthand that LilyPond accepts.
 
+@cindex variables
+@cindex indentifiers
+
 Another great shorthand is the ability to define
 variables.  All the templates use this
 
index 81b6751d201504689584d8c512013e1471768b50..89c786b535b27c680baad8fbce95e3afa9a84090 100644 (file)
@@ -532,59 +532,15 @@ converted.
 @cindex reporting bugs
 
 If you have input that results in a crash or an erroneous output, then
-that is a bug.  We try to respond to bug-reports promptly, and fix them as
-soon as possible.  Help us by sending a defective input file, so we can
-reproduce the problem. Send the report via:
+that is a bug. There is a list of current bugs on our google bug tracker,
 
-@example
-@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs}
-@end example
-
-A few tips:
-@itemize @bullet
-
-@item Try to produce a very small input file which demonstrates the problem;
-one or two bars is often sufficient to reproduce a bug. The smaller the
-input file is, the easier it is for us to debug the problem.
-
-@item Don't forget to tell which version of LilyPond you use!
-
-@item If possible, use @code{ragged-right} in your example. This makes sure
-that the bug can be reproduced in all paper sizes.
-@end itemize
-
-@ignore
-@c the bug database is not up to date enough.
+@uref{http://code.google.com/p/lilypond/issues/list}
 
-When you've found a bug, have a look at our
-@uref{http://@/lilypond@/.org/@/bugs/@/v2.8/@/,bug database} to see if
-it has already been reported.  You could also try to do a few searches
-on the mailing list for the bug.  Sometimes the bug will have already
-been reported and a fix or workaround is already known.
-@end ignore
-
-Here is an example of a good bug report:
-
-@verbatim
-It seems that placement of accidentals is broken.  In the
-following example, the accidental touches the note head.
+If you have discovered a bug which is not listed, please report the
+bug by following the directions on
 
-Using Mac OSX 10.3.7, lilypond 2.7.32
+@uref{http://lilypond.org/web/devel/participating/bugs}
 
-\version "2.9.13"
-\layout { ragged-right = ##t }
-\relative c'' {
-   a4 b cis d
-}
-@end verbatim
-
-@lilypond[quote]
-\layout { ragged-right = ##t }
-\relative c''{
-  \override Accidental #'extra-offset = #'(1.0 . 0)
-  a4 b cis d
-}
-@end lilypond
 
 @node Error messages
 @section Error messages
index 3e7845709c03c1ebeafe8b6d1b28019b25d9ac16..dbb1490dfd6c76d2876bb724fb041a74b4632efa 100644 (file)
@@ -723,6 +723,120 @@ bassWords = \lyricmode {
 }
 @end lilypond
 
+@appendixsubsec SATB with aligned contexts
+
+Here all the lyrics lines are placed using @code{alignAboveContext}
+and @code{alignBelowContext}.
+
+@lilypond[quote,verbatim,ragged-right]
+\version "2.10.0"
+global = {
+  \key c \major
+  \time 4/4
+}
+
+sopMusic = \relative c'' {
+  c4 c c8[( b)] c4
+}
+sopWords = \lyricmode {
+  hi hi hi hi
+}
+
+altoMusic = \relative c' {
+  e4 f d e
+}
+altoWords =\lyricmode {
+  ha ha ha ha
+}
+
+tenorMusic = \relative c' {
+  g4 a f g
+}
+tenorWords = \lyricmode {
+  hu hu hu hu
+}
+
+bassMusic = \relative c {
+  c4 c g c
+}
+bassWords = \lyricmode {
+  ho ho ho ho
+}
+
+\score {
+  \new ChoirStaff <<
+     \new Staff = women <<
+        \new Voice =
+          "sopranos" { \voiceOne << \global \sopMusic >> }
+        \new Voice =
+          "altos" { \voiceTwo << \global \altoMusic >> }
+     >>
+     \new Lyrics \with {alignAboveContext=women} \lyricsto sopranos \sopWords
+     \new Lyrics \with {alignBelowContext=women} \lyricsto altos \altoWords
+% we could remove the line about this with the line below, since we want
+% the alto lyrics to be below the alto Voice anyway.
+%    \new Lyrics \lyricsto altos \altoWords
+
+     \new Staff = men <<
+        \clef bass
+        \new Voice =
+          "tenors" { \voiceOne <<\global \tenorMusic >> }
+        \new Voice =
+          "basses" { \voiceTwo <<\global \bassMusic >> }
+     >>
+
+     \new Lyrics \with {alignAboveContext=men} \lyricsto tenors \tenorWords
+     \new Lyrics \with {alignBelowContext=men} \lyricsto basses \bassWords
+% again, we could replace the line above this with the line below.
+%    \new Lyrics \lyricsto basses \bassWords
+  >>
+
+  \layout {
+     \context {
+        % a little smaller so lyrics
+        % can be closer to the staff
+        \Staff
+        \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3)
+     }
+  }
+}
+
+
+\score {
+  \new ChoirStaff <<
+     \new Staff = women <<
+        \new Voice =
+          "sopranos" { \voiceOne << \global \sopMusic >> }
+        \new Voice =
+          "altos" { \voiceTwo << \global \altoMusic >> }
+     >>
+
+     \new Lyrics \with {alignAboveContext=women} \lyricsto sopranos \sopWords
+     \new Lyrics \lyricsto altos \altoWords
+
+     \new Staff = men <<
+        \clef bass
+        \new Voice =
+          "tenors" { \voiceOne <<\global \tenorMusic >> }
+        \new Voice =
+          "basses" { \voiceTwo <<\global \bassMusic >> }
+     >>
+
+     \new Lyrics \with {alignAboveContext=men} \lyricsto tenors \tenorWords
+     \new Lyrics \lyricsto basses \bassWords
+  >>
+
+  \layout {
+     \context {
+        % a little smaller so lyrics
+        % can be closer to the staff
+        \Staff
+        \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3)
+     }
+  }
+} 
+@end lilypond
+
 
 @c bad node name to avoid node name confict
 @node Ancient notation templates
index 7170925f44932f3654ab415d8c3f922835ee27f4..f5a3d076b511120b32c3b4777f0ecd09fc7cf707 100644 (file)
 @node Tutorial
 @chapter Tutorial
 
-This tutorial starts with a short introduction to the LilyPond music
-language.  After this first contact we will show you how to produce
-printed output.  Then you will be able to create and print your own
-sheets of music.
+This tutorial starts with an introduction to the LilyPond music
+language and how to produce printed music.  After this first contact we
+will explain how to create common musical notation.
 
 @ifhtml
 Many people learn programs by trying and fiddling around with the
@@ -42,7 +41,7 @@ commands for quick reference.
 
 @menu
 * First steps::                 
-* Running LilyPond for the first time::  
+* Second steps::                
 * More about pitches::          
 * Entering ties::               
 * Automatic and manual beams::  
@@ -73,21 +72,120 @@ name, from @samp{a} through @samp{g}.  So, if you enter
 
 @example
 @{
-c d e f g a b
+c' d' e' f' g' a' b' c''
 @}
 @end example
 
 @noindent
 the result looks like this
 
-@lilypond[fragment,quote,notime,relative=1]
-c d e f g a b
+@lilypond[quote]
+{
+c' d' e' f' g' a' b' c''
+}
 @end lilypond
 
-Every piece of LilyPond input needs to have @{curly braces@} placed
+@emph{Warning:}  Every piece of LilyPond input needs to have
+@{curly braces@} placed around the input.  Don't forget them!
+
+@cindex Case sensitive
+In addition, LilyPond input is case sensitive.  @code{ @{ c d e @} } is
+valid input; @code{ @{ C D E @} } will produce an error message.
+
+
+
+@unnumberedsubsec Entering music and viewing output
+
+In this section we will explain what commands to run
+and how to view or print the output.
+
+@unnumberedsubsec MacOS X
+
+If you double click LilyPond.app, it will open with an example
+file. Save it, for example, to @file{test.ly} on your Desktop, and
+then process it with the menu command @samp{Compile > Typeset File}.
+The resulting PDF file will be displayed on your screen.
+
+Be warned that the first time you ever run lilypond 
+will take a minute or two, because
+all of the system fonts have to be analyzed first.
+
+For future use of LilyPond, you should begin by selecting "New"
+or "Open".
+
+@unnumberedsubsec Windows
+
+On Windows, start up a text-editor@footnote{Any simple or
+programmer-oriented editor will do, for example Notepad.  Do not use a
+word processor, since these insert formatting codes that will confuse
+LilyPond.} and enter
+
+@verbatim
+{ c' e' g' c'' }
+@end verbatim
+
+Save it on the desktop as @file{test.ly} and make sure that it is not
+called @file{test.ly.TXT}.  Double clicking @file{test.ly} will process
+the file and show the resulting PDF file.
+
+
+@unnumberedsubsec Unix
+
+Begin by opening a terminal window and starting a text editor.  For
+example, you could open an xterm and execute
+@code{joe}@footnote{There are macro files for VIM addicts, and there
+is a @code{LilyPond-mode} for Emacs addicts.  If they have not been
+installed already, refer to the file @file{INSTALL.txt}.}.  In your
+text editor, enter the following input and save the file as
+@file{test.ly}
+
+@verbatim
+{ c' e' g' c'' }
+@end verbatim
+
+@noindent
+To process @file{test.ly}, proceed as follows
+
+@example
+lilypond test.ly
+@end example
+
+@noindent
+You will see something resembling
+
+@example
+lilypond test.ly
+GNU LilyPond 2.10.0
+Processing `test.ly'
+Parsing...
+Interpreting music... [1]
+Preprocessing graphical objects...
+Calculating line breaks... [2]
+Layout output to `test.ps'...
+Converting to `test.pdf'...
+@end example
+
+@cindex DVI file
+@cindex Viewing music
+@cindex xdvi
+@noindent
+The result is the file @file{test.pdf} which you can print or view
+with the standard facilities of your operating system.@footnote{If
+your system does not have any tools installed, you can try
+@uref{http://@/www@/.cs@/.wisc@/.edu/@/~ghost/,Ghostscript}, a freely
+available package for viewing and printing PDF and PostScript files.}
+
+
+@node Second steps
+@section Second steps
+
+@emph{Remember:} Every piece of LilyPond input needs to
+have @{curly braces@} placed
 around the input.  For the rest of this manual, most examples will
 omit these braces, but don't forget them in your own music!
 
+@c will be removed once the tutorial either explains \relative or
+@c examples are fixed so they don't use it.  -gp
 In addition, many examples use @code{relative} mode.  This is explained
 in @ref{Octave entry}; for now simply be aware that some examples
 should be placed inside @code{\relative @{ @emph{...music...} @}}.
@@ -98,6 +196,11 @@ space, using @code{\paper @{ ragged-right = ##t @}}.
 Finally, LilyPond input is case sensitive.  @code{ @{ c d e @} } is
 valid input; @code{ @{ C D E @} } will produce an error message.
 
+@c  End of latest re-write.  Since I have no life, I may do more
+@c  work on this, but I'd really like to have a Doc Helper take
+@c  over this task.  -gp
+
+
 The @rglos{duration} of a note is specified by a number after the note
 name.  @samp{1} for a @rglos{whole note}, @samp{2} for a @rglos{half note},
 @samp{4} for a @rglos{quarter note} and so on
@@ -187,7 +290,6 @@ s16_" "
 Remember to enclose the notes and commands in curly braces
 @code{@{@tie{}@dots{}@tie{}@}} to convert it to printable output.
 
-@c @li lypond[fragment,quote,noindent,line-width=55\staff-space]
 @lilypond[fragment,quote,noindent,verbatim]
 \time 3/4
 \clef bass
@@ -212,89 +314,6 @@ see @ref{Time signature}.
 @end quotation
 
 
-@node Running LilyPond for the first time
-@section Running LilyPond for the first time
-
-@c cheesy title to avoid clash with chapter name.
-
-In the last section we explained what kind of things you can enter in
-a LilyPond file.  In this section we will explain what commands to run
-and how to view or print the output.  If you have not used LilyPond
-before, want to test your setup, or want to run an example file
-yourself, read this section.
-
-@unnumberedsubsec MacOS X
-
-If you double click LilyPond.app, it will open with an example
-file. Save it, for example, to @file{test.ly} on your Desktop, and
-then process it with the menu command @samp{Compile > Typeset File}.
-The resulting PDF file will be displayed on your screen.
-
-Be warned that the first-ever run will take a minute or two, because
-all of the system fonts have to be analyzed first.
-
-@unnumberedsubsec Windows
-
-On Windows, start up a text-editor@footnote{Any simple or
-programmer-oriented editor will do, for example Notepad.  Do not use a
-word processor, since these insert formatting codes that will confuse
-LilyPond.} and enter
-
-@verbatim
-{ c'4 e' g' }
-@end verbatim
-
-Save it on the desktop as @file{test.ly} and make sure that it is not
-called @file{test.ly.TXT}.  Double clicking @file{test.ly} will process
-the file and show the resulting PDF file.
-
-
-@unnumberedsubsec Unix
-
-Begin by opening a terminal window and starting a text editor.  For
-example, you could open an xterm and execute
-@code{joe}.@footnote{There are macro files for VIM addicts, and there
-is a @code{LilyPond-mode} for Emacs addicts.  If they have not been
-installed already, refer to the file @file{INSTALL.txt}.}  In your
-text editor, enter the following input and save the file as
-@file{test.ly}
-
-@verbatim
-{ c'4 e' g' }
-@end verbatim
-
-@noindent
-To process @file{test.ly}, proceed as follows
-
-@example
-lilypond test.ly
-@end example
-
-@noindent
-You will see something resembling
-
-@example
-lilypond test.ly
-GNU LilyPond 2.6.0
-Processing `test.ly'
-Parsing...
-Interpreting music... [1]
-Preprocessing graphical objects...
-Calculating line breaks... [2]
-Layout output to `test.ps'...
-Converting to `test.pdf'...
-@end example
-
-@cindex DVI file
-@cindex Viewing music
-@cindex xdvi
-@noindent
-The result is the file @file{test.pdf} which you can print or view
-with the standard facilities of your operating system.@footnote{If
-your system does not have any tools installed, you can try
-@uref{http://@/www@/.cs@/.wisc@/.edu/@/~ghost/,Ghostscript}, a freely
-available package for viewing and printing PDF and PostScript files.}
-
 @node More about pitches
 @section More about pitches
 
index b26704c13c5f28c8cb78ca42e17b466d7868a104..27b74e1fc21f45c9e425674c59f561b9bb664d8a 100644 (file)
@@ -13,6 +13,7 @@ configurable; virtually every fragment of output may be changed.
 * Default files::               
 * Fitting music onto fewer pages::  
 * Advanced tweaks with Scheme::  
+* Avoiding tweaks with slower processing::  
 @end menu
 
 
@@ -485,3 +486,18 @@ pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
 }
 @end lilypond
 
+
+@node Avoiding tweaks with slower processing
+@section Avoiding tweaks with slower processing
+
+LilyPond can perform extra checks while it processes files.  These
+commands will take extra time, but the result may require fewer
+manual tweaks.
+
+@example
+%%  makes sure text scripts and lyrics are within the paper margins
+\override Score.PaperColumn #'keep-inside-line = ##t 
+@end example
+
+
+
index ff343cf51e4e024853f1d22c64d75e0572f68c83..73b83dc16e7abe300776a9250893ed44b15ffa1d 100644 (file)
@@ -181,6 +181,9 @@ g4\fthenp c'8. e16
 @node Saving typing with identifiers and functions
 @section Saving typing with identifiers and functions
 
+@cindex variables
+@cindex identifiers
+
 By this point, you've seen this kind of thing:
 
 @lilypond[quote,verbatim,ragged-right]
index 702eb6e902e745f899b90216b1a498898b5ae1c7..2815b0c756f58e53f1bfe14eab42d9a06636c326 100644 (file)
@@ -217,7 +217,7 @@ test:
 
 
 RESULT_DIR=$(top-build-dir)/out/test-results/
-check-test: test
+local-check: test
        rm -rf $(RESULT_DIR)
        mkdir -p $(RESULT_DIR)
        $(PYTHON) $(buildscript-dir)/output-distance.py --output-dir $(RESULT_DIR) $(CHECK_SOURCE) input/regression/out-test/
diff --git a/THANKS b/THANKS
index 2fc217d46d2663ff6ff5cfe87627d83bdbc388b1..0f0504bc43ad4354af830146370163757e1d2ac5 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -25,9 +25,11 @@ BUG HUNTERS/SUGGESTIONS
 Bertalan Fodor
 Benjamin Drung
 Cameron Horsburgh
+Carl Sorensen
 David Bobroff
 Eduardo Vieira
 Jay Anderson
+Jean-Marie Mouchel
 Kazuhiro Suzuki
 Laura Conrad
 Luc Wehli
diff --git a/VERSION b/VERSION
index 30fb95aa4730af169420fd74f6ba6e034a34f179..745aac957eb232c783b7714172556aec11b14a63 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,6 +1,6 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=11
-PATCH_LEVEL=5
+PATCH_LEVEL=6
 MY_PATCH_LEVEL=
 
index 8a1c5d59a605f9b1a5da5c27293d98cccb830bbc..8a7a12c52245ddefed5a375c860a47b04f3de32a 100644 (file)
@@ -185,6 +185,9 @@ STEPMAKE_PROGS(MAKEINFO, makeinfo, REQUIRED, 4.8)
 AC_DEFINE_UNQUOTED(FLOWER_VERSION, "${FULL_FLOWER_VERSION}")
 
 
+# must also have local.make if configure fails.
+touch local.make
+
 # Gather requirements and generate output.
 STEPMAKE_END
 
@@ -201,5 +204,3 @@ Edit local.make for local Makefile overrides.
 
 
 EOF
-
-touch local.make
index 5fe94f1f08c8bbf17368392ce9e91c2e49709d85..670aece45c790970d06f82ce48953360b542e96e 100644 (file)
@@ -12,5 +12,5 @@ STEPMAKE_TEMPLATES=library c++ po test
 # test uses LILYPONDPREFIX
 LOCALSTEPMAKE_TEMPLATES=lilypond
 TEST_MODULE_LIBS = ../flower
-
+export top-src-dir
 include $(depth)/make/stepmake.make
index 9057b3a9e2e91217f0233b1df79fbf5b8a697718..177676f791577b5ca0c30234d712ef9f9f083060 100644 (file)
@@ -47,7 +47,7 @@ void file_find ()
   File_path path;
   char cwd[PATH_MAX];
   getcwd (cwd, PATH_MAX);
-  string ly_dir = string (getenv ("LILYPONDPREFIX")) + "/ly";
+  string ly_dir = string (getenv ("top-src-dir")) + "/ly";
   cout << ly_dir << endl;
   path.parse_path (string (1, PATHSEP) + ly_dir);
   string file_name = path.find (file, extensions);
@@ -57,4 +57,5 @@ void file_find ()
   file_name = path.find (file, extensions);
   cout << file_name << endl;
   BOOST_CHECK_EQUAL (file_name, ly_dir + "/init.ly");
+  
 }
index 73f42ecf83e5351fa1248f695eb62180d46fe219..b5cdc8492d605c552292e3c1636f26863fbdfc16 100644 (file)
@@ -21,8 +21,8 @@
     c \bar ":|:" \mark \markup {  \simple #":|:" }
     c \bar "|." \mark \markup {  \simple #"|." }
     c \bar ":" \mark \markup {  \simple #":" }
-
-    c c c
+    c c c \bar "dashed" \mark \markup { \simple #"dashed" }
+    c c c c
     \bar "||:" \mark \markup { \tiny \typewriter "unbroken" \simple
 #"||:" }
     c c c c
index d93d253c045208208d43a2eea7798ae081968469..b48c8b610d156e80901c38d5d4403c54d0c362a9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.10.0"
+\version "2.11.5"
 \header {
 
 texidoc = "Cautionary accidentals are indicated using either
@@ -13,9 +13,9 @@ parentheses (default) or smaller accidentals.
 {
     c''4
     cis''?4
-    \override Staff.Accidental  #'cautionary-style = #'smaller
+    \once \override Staff.AccidentalCautionary #'font-size = #-2
     cis''?4
-    \override Staff.Accidental  #'cautionary-style = #'parentheses
+    \once \override Staff.AccidentalCautionary #'parenthesized = ##t
     cis''?4
 }
 
index 8ad68e34a1b73f42f007514a4fe79b5afcf40f3f..06abaedb661f8d7bf49d4c85ad1183553d3a52f8 100644 (file)
@@ -7,7 +7,7 @@ denoting Musica Ficta."
  
 }
 
-\version "2.10.0"
+\version "2.11.5"
 \paper {
   ragged-right = ##t
 }
@@ -16,10 +16,8 @@ denoting Musica Ficta."
   \time 2/4 
   \set suggestAccidentals = ##t 
   cis^> gis'-|
-  \override AccidentalSuggestion #'cautionary-style = #'parentheses
+  \override AccidentalSuggestion #'parenthesized = ##t
   cis,_"paren" gis'
-  \override AccidentalSuggestion #'cautionary-style = #'()
-  cis,_"no caut style"  gis'
 
 }
   
index c7eb79955a827f3061dce6d32d5c38a823cd8846..502aeaea9fd602cd654f790827c56eab8d6629b9 100644 (file)
@@ -51,9 +51,9 @@ Accidental_entry::Accidental_entry ()
 class Accidental_engraver : public Engraver
 {
   int get_bar_number ();
-  void update_local_key_signature ();
+  void update_local_key_signature (SCM new_signature);
   void create_accidental (Accidental_entry *entry, bool, bool);
-  Grob *make_standard_accidental (Stream_event *note, Grob *note_head, Engraver *trans);
+  Grob *make_standard_accidental (Stream_event *note, Grob *note_head, Engraver *trans, bool);
   Grob *make_suggested_accidental (Stream_event *note, Grob *note_head, Engraver *trans);
 
 protected:
@@ -72,13 +72,8 @@ protected:
   virtual void derived_mark () const;
 
 public:
-  SCM last_keysig_;    // ugh.
+  SCM last_keysig_;
 
-  /*
-    Urgh. Since the accidentals depend on lots of variables, we have
-    to store all information before we can really create the
-    accidentals.
-  */
   vector<Grob*> left_objects_;
   vector<Grob*> right_objects_;
 
@@ -89,12 +84,8 @@ public:
 };
 
 /*
-  TODO:
-
-  ugh, it is not clear what properties are mutable and which
-  aren't. eg. localKeySignature is changed at runtime, which means
-  that references in grobs should always store ly_deep_copy ()s of
-  those.
+  localKeySignature is changed at runtime, which means that references
+  in grobs should always store ly_deep_copy ()s of those.
 */
 
 
@@ -111,12 +102,12 @@ Accidental_engraver::derived_mark () const
 }
 
 void
-Accidental_engraver::update_local_key_signature ()
+Accidental_engraver::update_local_key_signature (SCM new_sig)
 {
-  last_keysig_ = get_property ("keySignature");
+  last_keysig_ = new_sig;
   set_context_property_on_children (context (),
                                    ly_symbol2scm ("localKeySignature"),
-                                   last_keysig_);
+                                   new_sig);
 
   Context *trans = context ()->get_parent_context ();
 
@@ -168,24 +159,41 @@ extract_alteration (SCM alteration_def)
 bool
 is_tied (SCM alteration_def)
 {
-  return (alteration_def == SCM_BOOL_T)
-    || (scm_is_pair (alteration_def) && scm_car (alteration_def) == SCM_BOOL_T);
+  SCM tied = ly_symbol2scm ("tied");
+  return (alteration_def == tied
+         || (scm_is_pair (alteration_def) && scm_car (alteration_def) == tied));
 }
 
-static int
-number_accidentals_from_sig (bool *different, SCM sig, Pitch *pitch,
-                            int bar_number, SCM laziness, bool ignore_octave)
+struct Accidental_result
+{
+  bool need_acc;
+  bool need_restore;
+
+  Accidental_result () {
+    need_restore = need_acc = false;
+  }
+
+  int score () const {
+    return need_acc ? 1 : 0
+      + need_restore ? 1 : 0;
+  }
+};
+
+Accidental_result
+check_pitch_against_signature (SCM key_signature, Pitch const &pitch,
+                              int bar_number, SCM laziness, bool ignore_octave)
 {
-  int n = pitch->get_notename ();
-  int o = pitch->get_octave ();
+  Accidental_result result;
+  int n = pitch.get_notename ();
+  int o = pitch.get_octave ();
 
   SCM previous_alteration = SCM_BOOL_F;
 
   SCM from_same_octave = ly_assoc_get (scm_cons (scm_from_int (o),
-                                                scm_from_int (n)), sig, SCM_BOOL_F);
-  SCM from_key_signature = ly_assoc_get (scm_from_int (n), sig, SCM_BOOL_F);
+                                                scm_from_int (n)), key_signature, SCM_BOOL_F);
+  SCM from_key_signature = ly_assoc_get (scm_from_int (n), key_signature, SCM_BOOL_F);
   SCM from_other_octaves = SCM_BOOL_F;
-  for (SCM s = sig; scm_is_pair (s); s = scm_cdr (s))
+  for (SCM s = key_signature; scm_is_pair (s); s = scm_cdr (s))
     {
       SCM entry = scm_car (s);
       if (scm_is_pair (scm_car (entry))
@@ -207,65 +215,63 @@ number_accidentals_from_sig (bool *different, SCM sig, Pitch *pitch,
   else if (from_key_signature != SCM_BOOL_F)
     previous_alteration = from_key_signature;
 
-  int num = 1;
   if (is_tied (previous_alteration))
     {
-      num = 1;
-      *different = true;
+      result.need_acc = true;
     }
   else
     {
       Rational prev = extract_alteration (previous_alteration);
-      Rational alter = pitch->get_alteration ();
-
-      if (alter == prev)
-       num = 0;
-      else if ((alter.abs () < prev.abs ()
-               || (prev * alter).sign () < 0) && alter.sign ())
-       num = 2;
-      *different = (alter != prev);
+      Rational alter = pitch.get_alteration ();
+
+      if (alter != prev)
+        {
+         result.need_acc = true;
+         if (alter.sign ()
+             && (alter.abs () < prev.abs ()
+                 || (prev * alter).sign () < 0))
+           result.need_restore = true;
+       }
     }
-  return num;
+
+  return result;
 }
 
-static int
-number_accidentals (bool *different,
-                   Pitch *pitch, Context *origin,
-                   SCM accidentals, int bar_number)
+static
+Accidental_result
+check_pitch_against_rules (Pitch const &pitch, Context *origin,
+                                SCM rules, int bar_number)
 {
-  int number = 0;
-
-  *different = false;
-  if (scm_is_pair (accidentals) && !scm_is_symbol (scm_car (accidentals)))
+  Accidental_result result;
+  if (scm_is_pair (rules) && !scm_is_symbol (scm_car (rules)))
     warning (_f ("accidental typesetting list must begin with context-name: %s",
-                ly_scm2string (scm_car (accidentals)).c_str ()));
+                ly_scm2string (scm_car (rules)).c_str ()));
 
-  for (; scm_is_pair (accidentals) && origin;
-       accidentals = scm_cdr (accidentals))
+  for (; scm_is_pair (rules) && origin;
+       rules = scm_cdr (rules))
     {
-      // If pair then it is a new accidentals typesetting rule to be checked
-      SCM rule = scm_car (accidentals);
+      SCM rule = scm_car (rules);
       if (scm_is_pair (rule))
        {
          SCM type = scm_car (rule);
          SCM laziness = scm_cdr (rule);
          SCM localsig = origin->get_property ("localKeySignature");
 
-         bool same_octave_b
-           = scm_is_eq (ly_symbol2scm ("same-octave"), type);
-         bool any_octave_b
-           = scm_is_eq (ly_symbol2scm ("any-octave"), type);
+         bool same_octave
+           = (ly_symbol2scm ("same-octave") == type);
+         bool any_octave
+           = (ly_symbol2scm ("any-octave") == type);
 
-         if (same_octave_b || any_octave_b)
+         if (same_octave || any_octave)
            {
-             bool d = false;
-             int n = number_accidentals_from_sig
-               (&d, localsig, pitch, bar_number, laziness, any_octave_b);
-             *different = *different || d;
-             number = max (number, n);
+             Accidental_result rule_result = check_pitch_against_signature
+               (localsig, pitch, bar_number, laziness, any_octave);
+
+             result.need_acc |= rule_result.need_acc;
+             result.need_restore |= rule_result.need_restore;
            }
          else
-           warning (_f ("ignoring unknown accidental: %s",
+           warning (_f ("ignoring unknown accidental rule: %s",
                         ly_symbol2string (type).c_str ()));
        }
 
@@ -285,7 +291,7 @@ number_accidentals (bool *different,
                     ly_scm2string (rule).c_str ()));
     }
 
-  return number;
+  return result;
 }
 
 int
@@ -308,8 +314,8 @@ Accidental_engraver::process_acknowledged ()
 {
   if (accidentals_.size () && !accidentals_.back ().done_)
     {
-      SCM accidentals = get_property ("autoAccidentals");
-      SCM cautionaries = get_property ("autoCautionaries");
+      SCM accidental_rules = get_property ("autoAccidentals");
+      SCM cautionary_rules = get_property ("autoCautionaries");
       int barnum = get_bar_number ();
 
       for (vsize i = 0; i < accidentals_.size (); i++)
@@ -325,34 +331,29 @@ Accidental_engraver::process_acknowledged ()
          if (!pitch)
            continue;
 
-         bool different = false;
-         bool different_caut = false;
-
-         int num = number_accidentals (&different,
-                                       pitch, origin,
-                                       accidentals, barnum);
-         int num_caut = number_accidentals (&different_caut,
-                                            pitch, origin,
-                                            cautionaries, barnum);
-
+         Accidental_result acc = check_pitch_against_rules (*pitch, origin,
+                                                            accidental_rules, barnum);
+         Accidental_result caut = check_pitch_against_rules (*pitch, origin,
+                                                             cautionary_rules, barnum);
 
          bool cautionary = to_boolean (note->get_property ("cautionary"));
-         if (num_caut > num)
+         if (caut.score () > acc.score ())
            {
-             num = num_caut;
-             different = different_caut;
+             acc.need_acc |= caut.need_acc; 
+             acc.need_restore |= caut.need_restore; 
+
              cautionary = true;
            }
 
          bool forced = to_boolean (note->get_property ("force-accidental"));
-         if (num == 0 && forced)
-           num = 1;
+         if (!acc.need_acc && forced)
+           acc.need_acc = true;
 
          /* Cannot look for ties: it's not guaranteed that they reach
             us before the notes. */
-         if (num
+         if (acc.need_acc
              && !note->in_event_class ("trill-span-event"))
-           create_accidental (&accidentals_[i], num > 1, cautionary);
+           create_accidental (&accidentals_[i], acc.need_restore, cautionary);
 
          if (forced || cautionary)
            accidentals_[i].accidental_->set_property ("forced", SCM_BOOL_T);
@@ -374,28 +375,23 @@ Accidental_engraver::create_accidental (Accidental_entry *entry,
   if (as_suggestion)
     a = make_suggested_accidental (note, support, entry->origin_engraver_);
   else
-    a = make_standard_accidental (note, support, entry->origin_engraver_);
+    a = make_standard_accidental (note, support, entry->origin_engraver_, cautionary);
 
-  SCM accs = scm_cons (scm_from_int (pitch->get_alteration () * Rational (4)),
-                      SCM_EOL);
   if (restore_natural)
     {
       if (to_boolean (get_property ("extraNatural")))
-       accs = scm_cons (scm_from_int (0), accs);
+       a->set_property ("restore-first", SCM_BOOL_T);
     }
 
-  /* TODO: add cautionary option in accidental. */
-  if (cautionary)
-    a->set_property ("cautionary", SCM_BOOL_T);
-
-  a->set_property ("accidentals", accs);
+  a->set_property ("alteration",  scm_from_int (pitch->get_alteration () * Rational (4)));
   entry->accidental_ = a;
 }
 
 Grob *
 Accidental_engraver::make_standard_accidental (Stream_event *note,
                                               Grob *note_head,
-                                              Engraver *trans)
+                                              Engraver *trans,
+                                              bool cautionary)
 {
   (void)note;
 
@@ -404,7 +400,11 @@ Accidental_engraver::make_standard_accidental (Stream_event *note,
     level, so that we get the property settings for
     Accidental from the respective Voice.
   */
-  Grob *a = trans->make_item ("Accidental", note_head->self_scm ());
+  Grob *a = 0;
+  if (cautionary)
+    a = trans->make_item ("AccidentalCautionary", note_head->self_scm ());
+  else
+    a = trans->make_item ("Accidental", note_head->self_scm ());
 
   /*
     We add the accidentals to the support of the arpeggio,
@@ -416,9 +416,6 @@ Accidental_engraver::make_standard_accidental (Stream_event *note,
        Side_position_interface::add_support (left_objects_[i], a);
     }
 
-  /*
-    Hmm. Junkme? 
-   */
   for (vsize i = 0; i < right_objects_.size (); i++)
     Side_position_interface::add_support (a, right_objects_[i]);
 
@@ -430,7 +427,7 @@ Accidental_engraver::make_standard_accidental (Stream_event *note,
   Accidental_placement::add_accidental (accidental_placement_, a);
 
   note_head->set_object ("accidental-grob", a->self_scm ());
-
+  
   return a;
 }
 
@@ -503,8 +500,8 @@ Accidental_engraver::stop_translation_timestep ()
                Remember an alteration that is different both from
                that of the tied note and of the key signature.
              */
-             localsig = ly_assoc_front_x
-               (localsig, key, scm_cons (SCM_BOOL_T, scm_from_int (barnum)));
+             localsig = ly_assoc_prepend_x (localsig, key, scm_cons (ly_symbol2scm ("tied"),
+                                                                     scm_from_int (barnum)));
 
              change = true;
            }
@@ -514,7 +511,7 @@ Accidental_engraver::stop_translation_timestep ()
                not really really correct if there are more than one
                noteheads with the same notename.
              */
-             localsig = ly_assoc_front_x (localsig, key,
+             localsig = ly_assoc_prepend_x (localsig, key,
                                           scm_cons (ly_rational2scm (a),
                                                     scm_from_int (barnum)));
              change = true;
@@ -544,9 +541,8 @@ Accidental_engraver::acknowledge_rhythmic_head (Grob_info info)
       /*
        string harmonics usually don't have accidentals.
       */
-      if (to_boolean (get_property ("harmonicAccidentals"))
-         || !ly_is_equal (info.grob ()->get_property ("style"),
-                          ly_symbol2scm ("harmonic")))
+      if (info.grob ()->get_property ("style") != ly_symbol2scm ("harmonic")
+         || to_boolean (get_property ("harmonicAccidentals")))
        {
          Accidental_entry entry;
          entry.head_ = info.grob ();
@@ -581,10 +577,8 @@ void
 Accidental_engraver::process_music ()
 {
   SCM sig = get_property ("keySignature");
-  /* Detect key sig changes.
-     Update all parents and children.  */
   if (last_keysig_ != sig)
-    update_local_key_signature ();
+    update_local_key_signature (sig);
 }
 
 ADD_ACKNOWLEDGER (Accidental_engraver, arpeggio);
@@ -599,8 +593,13 @@ ADD_TRANSLATOR (Accidental_engraver,
                "This engraver usually lives at Staff level, but "
                "reads the settings for Accidental at @code{Voice} level, "
                "so you can @code{\\override} them at @code{Voice}. ",
-               "Accidental AccidentalSuggestion",
 
+               /* grobs */
+               "Accidental "
+               "AccidentalCautionary"
+               "AccidentalSuggestion",
+
+               /* props */
                "autoAccidentals "
                "autoCautionaries "
                "internalBarNumber "
index 6b9718f61c9ef923c6aaf4aed9bc194a47fcd775..f6672e815b7d4f1469e447a462cbd8f774776d64 100644 (file)
 #include "pitch.hh"
 #include "stencil.hh"
 
-/*
-  TODO: insert support for smaller cautionaries, tie-break-reminders.
-  Either here or in new-accidental-engraver.
-
-  'accidentals should go, for a single 'accidental property -- see
-  accidental-placement.cc
-*/
 Stencil
 parenthesize (Grob *me, Stencil m)
 {
@@ -57,28 +50,23 @@ Accidental_interface::after_line_breaking (SCM smob)
 }
 
 vector<Box>
-Accidental_interface::accurate_boxes (Grob *a, Grob **common)
+Accidental_interface::accurate_boxes (Grob *me, Grob **common)
 {
   Box b;
-  b[X_AXIS] = a->extent (a, X_AXIS);
-  b[Y_AXIS] = a->extent (a, Y_AXIS);
+  b[X_AXIS] = me->extent (me, X_AXIS);
+  b[Y_AXIS] = me->extent (me, Y_AXIS);
 
   vector<Box> boxes;
 
-  bool parens = false;
-  if (to_boolean (a->get_property ("cautionary")))
-    {
-      SCM cstyle = a->get_property ("cautionary-style");
-      parens = ly_is_equal (cstyle, ly_symbol2scm ("parentheses"));
-    }
+  bool parens = to_boolean (me->get_property ("parenthesized"));
 
-  SCM accs = a->get_property ("accidentals");
-  SCM scm_style = a->get_property ("style");
+  SCM scm_style = me->get_property ("style");
   if (!scm_is_symbol (scm_style)
-      && !parens
-      && scm_ilength (accs) == 1)
+      && !to_boolean (me->get_property ("restore-first"))
+      && !parens)
     {
-      switch (scm_to_int (scm_car (accs)))
+      int acc = scm_to_int (me->get_property ("alteration"));
+      switch (acc)
        {
        case FLAT:
          {
@@ -129,8 +117,9 @@ Accidental_interface::accurate_boxes (Grob *a, Grob **common)
   if (!boxes.size ())
     boxes.push_back (b);
 
-  Offset o (a->relative_coordinate (common[X_AXIS], X_AXIS),
-           a->relative_coordinate (common[Y_AXIS], Y_AXIS));
+  Offset o (me->relative_coordinate (common[X_AXIS], X_AXIS),
+           me->relative_coordinate (common[Y_AXIS], Y_AXIS));
+
   for (vsize i = boxes.size (); i--;)
     boxes[i].translate (o);
 
@@ -186,6 +175,7 @@ Accidental_interface::get_fontcharname (string style, int alteration)
     style = ""; // currently same as default
   if (style == "default")
     style = "";
+  
   return style + to_string (alteration);
 }
 
@@ -194,16 +184,7 @@ SCM
 Accidental_interface::print (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
-  bool smaller = false;
-  bool parens = false;
-
-  bool caut = to_boolean (me->get_property ("cautionary"));
-  if (caut)
-    {
-      SCM cstyle = me->get_property ("cautionary-style");
-      parens = ly_is_equal (cstyle, ly_symbol2scm ("parentheses"));
-      smaller = ly_is_equal (cstyle, ly_symbol2scm ("smaller"));
-    }
+  bool parens = to_boolean (me->get_property ("parenthesized"));
 
   SCM scm_style = me->get_property ("style");
   string style;
@@ -215,49 +196,72 @@ Accidental_interface::print (SCM smob)
     */
     style = "";
 
-  Font_metric *fm = 0;
-  if (smaller)
-    {
-      SCM ac = Font_interface::music_font_alist_chain (me);
-      /*
-       TODO: should calc font-size by adding -2 to current font-size
-      */
-      ac = scm_cons (scm_list_1 (scm_cons
-                                (ly_symbol2scm ("font-size"),
-                                 scm_from_int (-2))),
-                    ac);
-      fm = select_font (me->layout (), ac);
-    }
-  else
-    fm = Font_interface::get_default_font (me);
+  Font_metric *fm = Font_interface::get_default_font (me);
 
-  Stencil mol;
-  for (SCM s = me->get_property ("accidentals");
-       scm_is_pair (s); s = scm_cdr (s))
+  SCM stencils = me->get_property ("stencils");
+  if (!scm_is_pair (stencils)
+      || !unsmob_stencil (scm_car (stencils)))
+    return SCM_EOL;
+  
+  Stencil mol (*unsmob_stencil (scm_car (stencils)));
+  if (to_boolean (me->get_property ("restore-first")))
     {
-      int alteration = scm_to_int (scm_car (s));
-      string font_char = get_fontcharname (style, alteration);
+      string font_char = get_fontcharname (style, 0);
       Stencil acc (fm->find_by_name ("accidentals." + font_char));
 
       if (acc.is_empty ())
        me->warning (_f ("accidental `%s' not found", font_char));
       else
-       mol.add_at_edge (X_AXIS, RIGHT, acc, 0.1, 0);
+       mol.add_at_edge (X_AXIS, LEFT, acc, 0.1, 0);
     }
-
+  
   if (parens)
     mol = parenthesize (me, mol);
 
   return mol.smobbed_copy ();
 }
+  
+MAKE_SCHEME_CALLBACK (Accidental_interface, calc_stencils, 1);
+SCM
+Accidental_interface::calc_stencils (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+
+  SCM scm_style = me->get_property ("style");
+  string style;
+  if (scm_is_symbol (scm_style))
+    style = ly_symbol2string (scm_style);
+  else
+    /*
+      preferably no name for the default style.
+    */
+    style = "";
+
+
+  Font_metric *fm = Font_interface::get_default_font (me);
+  SCM acc = me->get_property ("alteration");
+  if (scm_is_number (acc))
+    {
+      string font_char = get_fontcharname (style, scm_to_int (acc));
+      
+      Stencil acc_stencil (fm->find_by_name ("accidentals." + font_char));
+
+      return scm_list_1 (acc_stencil.smobbed_copy ());
+    }
+  else
+    return SCM_EOL;
+}
 
+  
 ADD_INTERFACE (Accidental_interface,
               "a single accidental",
-              "accidentals "
+              
+              /* props */
+              "alteration "
               "avoid-slur "
-              "cautionary "
-              "cautionary-style "
               "forced "
               "style "
+              "parenthesized "
+              "restore-first "
               "tie "
               );
index 8f617652bfdd55a161b4c2a62a9f9523817d4e43..ab2897f16de90b09d30af7bdfc6df0e388776345 100644 (file)
@@ -158,8 +158,7 @@ Ambitus_engraver::finalize ()
            }
          else
            {
-             SCM l = scm_list_1 (scm_from_int (int (Real (Rational (4) * p.get_alteration ()))));
-             accidentals_[d]->set_property ("accidentals", l);
+             accidentals_[d]->set_property ("alteration", scm_from_int (int (Real (Rational (4) * p.get_alteration ()))));
            }
        }
       while (flip (&d) != DOWN);
index d0acbcea05e6f29a8bcb95c7b2a682b5d12ad3c4..d243f89e4bb322c6ccad69e1e351068e6564df2b 100644 (file)
@@ -41,14 +41,9 @@ Breathing_sign::divisio_minima (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
   Real staff_space = Staff_symbol_referencer::staff_space (me);
-  Real staff_size;
 
   Real thickness = Staff_symbol_referencer::line_thickness (me);
   thickness *= robust_scm2double (me->get_property ("thickness"), 1.0);
-  if (Staff_symbol_referencer::get_staff_symbol (me))
-    staff_size = (Staff_symbol_referencer::line_count (me) - 1) * staff_space;
-  else
-    staff_size = 0.0;
 
   Real blotdiameter = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
 
index 8fd57a5fd91f6a7b9eab3390c9a0811c80f2aa67..13646895e63443e91477fcdcb2ff6910505ad292 100644 (file)
@@ -19,6 +19,7 @@ class Accidental_interface
 {
 public:
   DECLARE_SCHEME_CALLBACK (print, (SCM));
+  DECLARE_SCHEME_CALLBACK (calc_stencils, (SCM));
   DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM));
   
   DECLARE_GROB_INTERFACE();
index 6aa25f828a90ec8a3d980b3a7e89fa7b975c01c6..e94d8ef557aac4c4d0aaddd99abfddbc3689486e 100644 (file)
@@ -83,11 +83,7 @@ SCM ly_hash2alist (SCM tab);
 SCM ly_hash_table_keys (SCM tab);
 int procedure_arity (SCM);
 
-/* inserts at front, removing dublicates */
-inline SCM ly_assoc_front_x (SCM alist, SCM key, SCM val)
-{
-  return scm_acons (key, val, scm_assoc_remove_x (alist, key));
-}
+SCM ly_assoc_prepend_x (SCM alist, SCM key, SCM val);
 inline bool ly_is_list (SCM x) { return SCM_NFALSEP (scm_list_p (x)); }
 inline bool ly_is_procedure (SCM x) { return SCM_NFALSEP (scm_procedure_p (x)); }
 inline bool ly_is_port (SCM x) { return SCM_NFALSEP (scm_port_p (x)); }
index 99c09fc0435f3e51792fd3966bc507c88235d81d..b62a4259d4277d960b11fd74865e30792626b9f3 100644 (file)
       This is local. We don't assign to self_scm_ directly, to assure  \
       that S isn't GC-ed from under us.                                        \
                                                                        \
-                                                                       We don't use smobbed_self () to ensure that mark_smob () doesn't have to \
-                                                                       deal half-initialized objects: scm_done_malloc ( ) might trigger GC. \
-                                                                       the warning in smobs.hh is just to be doubleplus goodly sure \
+      We don't use smobbed_self () to ensure that mark_smob () doesn't  \
+      have to deal half-initialized objects: scm_done_malloc ( ) might  \
+      trigger GC.the warning in smobs.hh is just to be doubleplus       \
+      goodly sure                                                       \
     */                                                                 \
     SCM s;                                                             \
     SCM_NEWSMOB (s, CL::smob_tag_, this);                              \
index dd5080b36737a88a98f90996470bb70b4b702a0d..8ba98a4a69a839f221db10d79cf7ace6fffb4279 100644 (file)
@@ -736,3 +736,10 @@ struct ly_t_double_cell
   SCM c;
   SCM d;
 };
+
+/* inserts at front, removing duplicates */
+SCM ly_assoc_prepend_x (SCM alist, SCM key, SCM val)
+{
+  return scm_acons (key, val, scm_assoc_remove_x (alist, key));
+}
+
index 6afa928387e49ee6358aefefa26df994a8b7c6e6..556a34903b44e6a0cb196badc57a723a42cbdaf5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  text-spanner-engraver.cc -- implement Ottava_spanner_engraver
+  ottova-engraver.cc -- implement Ottava_spanner_engraver
 
   source file of the GNU LilyPond music typesetter
 
index d29f6f42caf33ba91dc14b48a86ef3739ed29813..811decb67d8b0b265b7f5ad48cf890ab5d08a014 100644 (file)
@@ -110,8 +110,8 @@ Pitched_trill_engraver::make_trill (Stream_event *ev)
       trill_accidental_ = make_item ("TrillPitchAccidental", ev->self_scm ());
 
       // fixme: naming -> alterations
-      trill_accidental_->set_property ("accidentals", scm_list_1 (scm_from_int (Rational (4) 
-                                                                               * p->get_alteration ())));
+      trill_accidental_->set_property ("alteration", scm_from_int (Rational (4) 
+                                                                  * p->get_alteration ()));
       Side_position_interface::add_support (trill_accidental_, trill_head_);
       
       trill_head_->set_object ("accidental-grob", trill_accidental_->self_scm ());
index 4e6167a650a88628543feffeb846bc778186a4f4..8752d704a0ab1895e4da2ad434bf5c5aaa9b099e 100644 (file)
@@ -66,38 +66,6 @@ Slur_score_state::~Slur_score_state ()
   junk_pointers (configurations_);
 }
 
-Real
-broken_trend_y (Slur_score_state const &state, Direction hdir)
-{
-  /* A broken slur should maintain the same vertical trend
-     the unbroken slur would have had.  */
-  Real by = 0.0;
-  if (Spanner *mother = dynamic_cast<Spanner *> (state.slur_->original ()))
-    {
-      Grob *neighbor = mother->broken_neighbor (hdir);
-      if (!neighbor)
-       return by;
-
-      
-      Spanner *common_mother
-       = dynamic_cast<Spanner *> (state.common_[Y_AXIS]->original ());
-      int common_k
-       = broken_spanner_index (dynamic_cast<Spanner *> (state.common_[Y_AXIS]));
-      int common_j = common_k + hdir;
-
-      if (common_j < 0 || vsize (common_j) >= common_mother->broken_intos_.size ())
-       return by;
-
-      Grob *common_next_system = common_mother->broken_intos_[common_j];
-
-      SCM last_point = scm_car (scm_last_pair (neighbor->get_property ("control-points")));
-
-      return scm_to_double (scm_cdr (last_point))
-       + neighbor->relative_coordinate (common_next_system, Y_AXIS);
-    }
-  return by;
-}
-
 /*
   copy slur dir forwards across line break.
 */
@@ -815,22 +783,15 @@ Slur_score_state::get_extra_encompass_infos () const
          if (Accidental_interface::has_interface (g))
            {
              penalty = parameters_.accidental_collision_;
-             /* Begin copy accidental.cc */
-             bool parens = false;
-             if (to_boolean (g->get_property ("cautionary")))
-               {
-                 SCM cstyle = g->get_property ("cautionary-style");
-                 parens = ly_is_equal (cstyle, ly_symbol2scm ("parentheses"));
-               }
 
-             SCM accs = g->get_property ("accidentals");
+             SCM alt = g->get_property ("alteration");
              SCM scm_style = g->get_property ("style");
              if (!scm_is_symbol (scm_style)
-                 && !parens
-                 && scm_ilength (accs) == 1)
+                 && !to_boolean (g->get_property ("parenthesized"))
+                 && !to_boolean (g->get_property ("restore-first")))
                {
                  /* End copy accidental.cc */
-                 switch (scm_to_int (scm_car (accs)))
+                 switch (scm_to_int (alt))
                    {
                    case FLAT:
                    case DOUBLE_FLAT:
index d01701d8593b223465114cf46e6b2dc19a3d1caf..a2d621b154c81eb103453a8ea076d0830fb3bb0b 100644 (file)
@@ -6,9 +6,3 @@ local-convert-ly:
 
 local-help: local-ly-help
 
-local-ly-help:
-       @echo -e "\
-  convert-ly  convert all LilyPond sources\n\
-"\
-#
-
index 2de20828a9a47da176be745f9e5f9e08f95f953e..cf5a9d2e677a324d1350581352dc5b6edd3ffdae 100644 (file)
@@ -3,3 +3,4 @@
 local-WWW: $(outdir)/collated-files.html $(outdir)/collated-files.pdf
 
 #.PRECIOUS: $(outdir)/$(NAME).texi
+
index c9f8fba0d99b4949bc3c296cb30da9edb28b2ad8..c09ae5ae5f6c31b6ff235f2f0ee37baa075334a9 100644 (file)
@@ -1,4 +1,4 @@
-% -*-Fundamental-*-
+% -%-Fundamental-%- -*-Metafont-*-
 % parmesan-accidentals.mf -- implement ancient accidentals
 % 
 % source file of LilyPond's pretty-but-neat music font
index 1202080108dbc23ae014258e2fb3db985621235d..2ee63a0e930a3fa0170caa65835f20230d3da2ed 100644 (file)
@@ -1,4 +1,4 @@
-% -*-Fundamental-*-
+% -%-Fundamental-%- -*-Metafont-*-
 % parmesan-flags.mf -- implement ancient flags
 % 
 % source file of LilyPond's pretty-but-neat music font
index 0ed8a62016f267cecd400b48aa35416f4a588f09..7114bc6837dd04a9dcec261b2c61bc41cbbf6af6 100644 (file)
@@ -1,5 +1,4 @@
-
-% -*-Fundamental-*-
+% -%-Fundamental-%- -*-Metafont-*-
 % parmesan-generic.mf --  implement generic stuff: include lots of files,
 % but don't set dims.
 %
index 6aa68ab5800a0726d7009b592a067508cf226630..d02840b57ffdd4e2ca0cd682e9811df4f85c4f56 100644 (file)
@@ -1,4 +1,4 @@
-% -*-Fundamental-*-
+% -%-Fundamental-%- -*-Metafont-*-
 % parmesan-timesig.mf -- implement ancient time signatures
 % 
 % source file of LilyPond's pretty-but-neat music font
index a2ac08534b12706c02d643d7ad5c7b1b83d6b6ff..165e0a52d8ecfbce4aacc87358256f400929d619 100644 (file)
@@ -2885,3 +2885,20 @@ def conv (str):
 
 conversions.append (((2, 11, 2), conv, """ly:clone-parser -> ly:parser-clone"""))
 
+
+
+def conv (str):
+    str = re.sub ("Accidental\s*#'cautionary-style\s*=\s*#'smaller",
+                   "AccidentalCautionary #'font-size = #-2", str)
+    str = re.sub ("Accidental\s*#'cautionary-style\s*=\s*#'parentheses",
+                   "AccidentalCautionary #'parenthesized = ##t", str)
+
+    str = re.sub ("([A-Za-z]+)\s*#'cautionary-style\s*=\s*#'parentheses",
+                   r"\1 #'parenthesized = ##t", str)
+    str = re.sub ("([A-Za-z]+)\s*#'cautionary-style\s*=\s*#'smaller",
+                   r"\1 #'font-size = #-2", str)
+
+    return str
+
+conversions.append (((2, 11, 5), conv, """ly:clone-parser -> ly:parser-clone"""))
+
index 96a444d78e8aa7595d461612d8a45e6b52c7abd4..7ae1a0e4fe3d42e9ef0b573c63563496851f1753 100644 (file)
@@ -25,7 +25,7 @@
      (X-offset ,number? "The horizontal amount that this object is moved relative to its X-parent")
      (Y-offset ,number? "The vertical amount that this object is moved
 relative to its Y-parent")
-     (accidentals ,list? "List of alteration numbers")
+     (alteration ,number? "alteration numbers for accidental")
      (after-line-breaking ,boolean? "Dummy property, used to trigger callback for after-line-breaking")
      (alteration-alist ,list? "List of @code{(@var{pitch}
 . @var{accidental})} pairs for key signature.")
@@ -98,10 +98,6 @@ tuplet bracket.")
 #t means visible, #f means killed.")
      (c0-position ,integer? "An integer indicating the position of
 middle C.")
-     (cautionary-style ,symbol? "How to print cautionary
-accidentals. Choices are @code{smaller} or
-@code{parentheses}.")
-     (cautionary ,boolean? "Is this a cautionary accidental?")
      (concaveness ,number? "A beam is concave when its inner stems are
 closer to the beam than the two outside stems. This number is a
 measure of the closeness of the inner stems. It is used for damping
@@ -304,6 +300,7 @@ with a negative penalty.")
 This affects the choices of the page breaker; it will avoid a page
 turn at a column with a positive penalty and prefer a page turn at a column
 with a negative penalty.")
+     (parenthesized ,boolean? "Parenthesize this grob.")
      (line-break-penalty ,number? "Penalty for a line break at this column.
 This affects the choices of the line breaker; it will avoid a line
 break at a column with a positive penalty and prefer a line break at a column
@@ -317,6 +314,7 @@ quicker the slur attains it @code{height-limit}.")
      (remove-empty ,boolean? "If set, remove group if it contains no
 @code{interesting-items}")
      (remove-first ,boolean? "Remove the first staff of a orchestral score?")
+     (restore-first ,boolean? "Print a natural before the accidental.")
      (rhythmic-location ,rhythmic-location? "Where (bar number, measure position) in the score.")
      (right-padding ,ly:dimension? "Space to insert on the right side  of an object (eg. between note and its accidentals.)")
      (rotation ,list? "Number of degrees to rotate this object, and what point
index af306ed01df8af47f2c32cc27e76ac904cf6c81d..6080fb021b1939c369318b67ddb1e839d824ead1 100644 (file)
     (Accidental
      . (
        (avoid-slur . inside)
-       (cautionary-style . parentheses)
        (stencil . ,ly:accidental-interface::print)
+       (stencils . ,ly:accidental-interface::calc-stencils)
        (after-line-breaking
         . ,ly:accidental-interface::after-line-breaking)
        (meta . ((class . Item)
                 (interfaces . (accidental-interface
                                font-interface))))))
+    (AccidentalCautionary
+     . (
+       (avoid-slur . inside)
+       (parenthesized . #t)
+       (stencil . ,ly:accidental-interface::print)
+       (stencils . ,ly:accidental-interface::calc-stencils)
+       (after-line-breaking
+        . ,ly:accidental-interface::after-line-breaking)
+       (meta . ((class . Item)
+                (interfaces . (accidental-interface
+                               font-interface))))))
+
     
     (AccidentalSuggestion
      . (
                        ,(ly:make-simple-closure (list ly:self-alignment-interface::centered-on-x-parent))
                        ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self)))))
        (self-alignment-X . ,CENTER)
-       (cautionary . #t)
-       (cautionary-style . smaller)
+       (font-size . -2)
        (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (cautionary-style . parentheses)
        (direction . ,UP)
        (staff-padding . 0.25)
+       (outside-staff-priority . 0)
        (script-priority . 0)
+       (stencils . ,ly:accidental-interface::calc-stencils)
        (side-axis . ,X)
        (meta . ((class . Item)
                 (interfaces . (side-position-interface
        (padding . 0.5)
        (X-offset . ,ly:side-position-interface::x-aligned-side)
        (direction . ,LEFT)
-       (cautionary-style . parentheses)
        (stencil . ,ly:accidental-interface::print)
+       (stencils . ,ly:accidental-interface::calc-stencils)
+       
        (after-line-breaking . ,ly:accidental-interface::after-line-breaking)
        (side-axis . ,X)
        (meta . ((class . Item)
        (Y-offset . ,ly:side-position-interface::y-aligned-side)
        (stencil . ,ly:text-interface::print)
        (font-shape . italic)
-       (padding . 0.6)
        (staff-padding . 0.2)
        (font-size . -4)
        (meta . ((class . Item)
        (font-size . 2)
        (baseline-skip . 2)
        (break-visibility . ,end-of-line-invisible)
-       (break-align-symbol . staff-bar)
+       (break-align-symbol . clef)
        (padding . 0.8)
        (outside-staff-priority . 1500)
        (meta . ((class . Item)
        (font-size . -4)
        (side-axis . ,X)
        (stencil . ,ly:accidental-interface::print)
+       (stencils . ,ly:accidental-interface::calc-stencils)
        (meta . ((class . Item)
                 (interfaces . (item-interface
                                trill-pitch-accidental-interface
                                note-head-interface
                                rhythmic-head-interface
                                font-interface
-                               accidental-interface
                                axis-group-interface))))))
 
     (TrillPitchHead
index 98c84fa34dfc05c1553287404724388abc8fdbaf..7f73a3dfde450fd001649cb109fce4dab437bd92 100644 (file)
@@ -21,8 +21,8 @@
              (check-internal-types #f "check every property assignment for types")
              (clip-systems #f "Generate cut-out snippets of a score")
              (debug-gc #f "dump memory debugging statistics")
-             (debug-gc-assert-parsed-dead
-              #f "for memory debugging: ensure that all refs to parsed objects are dead.")
+             (debug-gc-assert-parsed-dead #f "for memory debugging:
+ensure that all refs to parsed objects are dead.  This is an internal option, and is switched on automatically for -ddebug-gc.") 
              (debug-lexer #f "debug the flex lexer")
              (debug-midi #f "generate human readable MIDI")
              (debug-parser #f "debug the bison parser")
@@ -395,6 +395,7 @@ The syntax is the same as `define*-public'."
          (ly:reset-all-fonts)
          (gc)
          (gc)
+         (display "Asserting dead objects\n")
          (ly:set-option 'debug-gc-assert-parsed-dead #t)
          (gc)
          (ly:set-option 'debug-gc-assert-parsed-dead #f)