]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'translation' into staging
authorFrancisco Vila <francisco.vila@hispalinux.es>
Thu, 26 Sep 2013 15:09:16 +0000 (17:09 +0200)
committerFrancisco Vila <francisco.vila@hispalinux.es>
Thu, 26 Sep 2013 15:09:16 +0000 (17:09 +0200)
86 files changed:
Documentation/GNUmakefile
Documentation/changes.tely
Documentation/de/notation/ancient.itely
Documentation/de/notation/fretted-strings.itely
Documentation/es/notation/fretted-strings.itely
Documentation/essay/computer-notation.bib
Documentation/essay/engravingbib.bib
Documentation/extending/programming-interface.itely
Documentation/fr/notation/ancient.itely
Documentation/fr/notation/fretted-strings.itely
Documentation/ja/notation/fretted-strings.itely
Documentation/learning/common-notation.itely
Documentation/learning/fundamental.itely
Documentation/learning/tutorial.itely
Documentation/learning/tweaks.itely
Documentation/ly-examples/GNUmakefile
Documentation/misc/CHANGES-1.3
Documentation/misc/GNUmakefile
Documentation/music-glossary.tely
Documentation/nl/learning/fundamental.itely
Documentation/nl/learning/tweaks.itely
Documentation/notation/ancient.itely
Documentation/notation/changing-defaults.itely
Documentation/notation/fretted-strings.itely
Documentation/notation/keyboards.itely
Documentation/notation/spacing.itely
Documentation/snippets/accordion-discant-symbols.ly
Documentation/snippets/broken-crescendo-hairpin.ly
Documentation/snippets/engravers-one-by-one.ly
Documentation/snippets/expressive-headword.ly
Documentation/snippets/new/accordion-discant-symbols.ly
Documentation/snippets/new/broken-crescendo-hairpin.ly [new file with mode: 0644]
Documentation/snippets/new/engravers-one-by-one.ly [deleted file]
Documentation/snippets/new/expressive-headword.ly [new file with mode: 0644]
Documentation/snippets/new/pitches-headword.ly [new file with mode: 0644]
Documentation/snippets/new/positioning-multi-measure-rests.ly
Documentation/snippets/new/vertically-aligned-dynamics-and-textscripts.ly [new file with mode: 0644]
Documentation/snippets/pitches-headword.ly
Documentation/snippets/positioning-multi-measure-rests.ly
Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly
Documentation/topdocs/GNUmakefile
aclocal.m4
input/regression/tablature-letter.ly
input/regression/tablature-slurs-with-beams.ly [new file with mode: 0644]
lily/align-interface.cc
lily/beam-engraver.cc
lily/beam-quanting.cc
lily/context.cc
lily/dynamic-engraver.cc
lily/include/context-def.hh
lily/include/event-chord-iterator.hh
lily/include/performer.hh
lily/item.cc
lily/lexer.ll
lily/parser.yy
lily/side-position-interface.cc
lily/staff-spacing.cc
lily/tuplet-bracket.cc
lily/tuplet-engraver.cc
lily/vaticana-ligature-engraver.cc
ly/performer-init.ly
make/doc-i18n-root-rules.make
make/doc-i18n-root-targets.make
make/doc-i18n-root-vars.make
make/lilypond-vars.make
mf/GNUmakefile
mf/parmesan-noteheads.mf
python/convertrules.py
scm/bar-line.scm
scm/define-grobs.scm
scm/define-markup-commands.scm
scm/define-music-properties.scm
scm/define-music-types.scm
scm/guile-debugger.scm
scm/markup.scm
scm/music-functions.scm
scm/output-lib.scm
scm/translation-functions.scm
scripts/lilymidi.py
stepmake/stepmake/generic-rules.make
stepmake/stepmake/generic-targets.make
stepmake/stepmake/metafont-rules.make
stepmake/stepmake/metafont-vars.make
stepmake/stepmake/texinfo-rules.make
stepmake/stepmake/texinfo-vars.make
stepmake/stepmake/topdocs-vars.make

index 44d4d04b02fe8a374f3a140a9addfe41aa585ac7..836213ff8d9ba5e65fbf7d56fd3f6cd6bf42243a 100644 (file)
@@ -88,6 +88,13 @@ endif
 
 include $(depth)/make/stepmake.make
 
+DOCUMENTATION_INCLUDES += -I $(outdir) \
+  -I $(top-build-dir)/Documentation/snippets/out \
+  -I $(top-src-dir)/Documentation/included \
+  -I $(top-src-dir)/Documentation/pictures \
+  -I $(top-src-dir)/Documentation \
+  -I $(top-src-dir)/input/regression
+
 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
 
 
@@ -205,24 +212,24 @@ $(OUT_TXT_FILES:%.txt=%.html): $(outdir)/%.html: $(outdir)/%.txt
        $(buildscript-dir)/text2html $<
 
 # Explicitly list the dependencies on generated content
-$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi
+$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi $(outdir)/version.itexi
 
 ifeq ($(out),www)
 ## Extra images dependencies
 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
 
 $(outdir)/pictures:
-       $(MAKE) -C pictures WWW-1
+       $(MAKE) -C pictures out=www WWW-1
        ln -sf ../pictures/$(outdir) $@
 
 $(outdir)/web.texi: $(outdir)/css $(outdir)/ly-examples
 
 $(outdir)/css:
-       $(MAKE) -C css
+       $(MAKE) -C css out=www WWW-1
        ln -sf ../css/$(outdir) $@
 
 $(outdir)/ly-examples:
-       $(MAKE) -C ly-examples
+       $(MAKE) -C ly-examples out=www WWW-1
        ln -sf ../ly-examples/$(outdir) $@
 endif
 
index f2266666d0c793686afba12d6aec076e92a71fb4..01c5e2d48e2107053e6b93561c6bdea49c55fbf1 100644 (file)
@@ -61,6 +61,76 @@ which scares away people.
 
 @end ignore
 
+@item
+LilyPond no longer automatically infers a @samp{\defaultchild}
+context in a context definition with @samp{\accepts} clauses.  Any
+context definition without an explicit or inherited
+@samp{\defaultchild} definition counts as a @samp{Bottom} context
+and will be eligible for rhythmic events and overrides without
+causing the implicit creation of other contexts.  Be sure to
+specify a @samp{\defaultchild} for non-@samp{Bottom} contexts when
+defining them from scratch.
+
+@item
+There is now extensive support for both discant and bass accordion
+register symbols in the @samp{scm accreg} module, see
+@ruser{Accordion Registers}.
+@lilypond[verbatim,quote]
+#(use-modules (scm accreg))
+\new PianoStaff
+<<
+  \new Staff \relative
+  { \clef "treble"  \discant "10"
+    r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
+    \discant "121"
+    << { r16 <f bes> r <e a> r <d g> } \\
+       { d r a r bes r } >> |
+    <cis e a>1
+  }
+  \new Staff \relative
+  { \clef "treble"  \freeBass "1"
+    r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
+    \clef "bass"  \stdBass "Master"
+    << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
+         <e a cis>1^"a" } \\
+       { d8_"D" c_"C" bes_"B" | a1_"A" }
+    >>
+  }
+>>
+@end lilypond
+
+@item
+New commands @code{markLengthOn} and @code{markLengthOff} control
+the allowance of horizontal space for tempo and rehearsal marks.
+
+@lilypond[quote,relative=2]
+\markLengthOn
+\compressFullBarRests
+\tempo "Molto vivace" c2 c'
+\mark\default
+\tempo "Meno mosso" R1*16
+\mark\default
+g,2 g
+\bar "||"
+\markLengthOff
+\tempo "Molto vivace" c2 c'
+\mark#1
+\tempo "Meno mosso" R1*16
+\mark\default
+g,2 g
+@end lilypond
+
+@item
+Rehearsal marks at the beginning of a line are now placed to the right
+of the clef and key signature by default.  As in previous versions, the
+@code{break-alignable-interface} controls the behavior.
+
+@lilypond[quote,relative=2]
+\set Score.barNumberVisibility = #all-bar-numbers-visible
+\set Timing.currentBarNumber = #72
+\bar"||" \time 3/4 \key e\major \mark#10 \tempo "Adagio" b2.
+@end lilypond
+
 @item
 Decimal numbers can now be written directly in music,
 without a hash sign.  Together with the previous change
index 4110837698de3d45b69e585f8232cd52afb44955..f5f2869cfbe841f106affb66f475b5fc90e5e634 100644 (file)
@@ -259,7 +259,7 @@ erklärt in @ref{Weiße Mensuralligaturen} und
 @seealso
 Glossar:
 @rglos{ligature}.
+
 Notationsreferenz:
 @ref{Weiße Mensuralligaturen},
 @ref{Ligaturen der gregorianischen Quadratnotation}.
@@ -2493,7 +2493,7 @@ augmentum-Punkte hinzuzufügen.
 @seealso
 Glossar:
 @rglos{ligature}.
+
 Notationreferenz:
 @ref{ Ligaturen der gregorianischen Quadratnotation},
 @ref{Weiße Mensuralligaturen},
@@ -2956,7 +2956,7 @@ In Arbeit.
 @c try Till Rettig
 @c Add example of white noteheads:
 @c In the french baroque some composers used white noteheads in slow pieces,
-@c mainly in 3/2-time.  A quarter looks there like a eighth with a white
+@c mainly in 3/2-time.  A quarter looks there like an eighth with a white
 @c notehead.  (Franz-Rudolf Kuhnen)
 
 @c TODO Add example of this:
index 6580c77bc9306d88a692141278695d74c269476c..94334225fb7fd3ba6631e7733e6e4aa772dc207f 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.17.11"
+@c \version "2.17.27"
 
 @c Translators: Till Paala
 
@@ -673,7 +673,7 @@ benutzen, kann man benutzen:
 \layout @{
   \context @{
     \TabStaff
-    stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+    stringTunings = \stringTuning <c' g' d'' a''>
   @}
 @}
 @end example
index 747ae2af6793b0b44aa2dd5b90586120ab1993b4..24991c0d308ea3e0473284e09a0cc9f663c39d1b 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.17.11"
+@c \version "2.17.27"
 
 @node Instrumentos de cuerda con trastes
 @section Instrumentos de cuerda con trastes
@@ -675,7 +675,7 @@ personalizada por omisión, podemos usar
 \layout @{
   \context @{
     \TabStaff
-    stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+    stringTunings = \stringTuning <c' g' d'' a''>
   @}
 @}
 @end example
index 23b0658066621c0501e64c704a23ae816924c5f4..b4d7e1984e14e2fc340a8a0423c2207135c8a7b1 100644 (file)
@@ -229,7 +229,7 @@ for Adequately Representing Score-level Music},
 }
 
 @Article{blostein91,
-  note = {This paper provides a overview of the algorithm used in LIME
+  note = {This paper provides an overview of the algorithm used in LIME
   for spacing individual lines. HWN},
   year = {1991},
   title = {Justification of Printed Music},
index f419af4e658594a75b9bea75dda27f7f16aabbb9..ecbddcbe35b7565c04d25d10450b92367b0ba803 100644 (file)
@@ -91,7 +91,7 @@ reference work for music notation issues as one is likely to get.},
 @Book{wanske88,
   annote = {I. A very thorough overview of engraving practices of various
 craftsmen. It includes detailed specs of characters, dimensions
-etc. II. a thorough overview of a anonymous (by now antiquated)
+etc. II. a thorough overview of an anonymous (by now antiquated)
 automated system. EDV Means e(lektronischen) D(aten)v(erarbeitung),
 electronic data processing HWN.},
   year = {1988},
index aafb4fc5d31759989784dc26733b4d29042803ec..311a13807362de516cd5670a88a3c37d6f2d4faf 100644 (file)
@@ -804,6 +804,26 @@ you avoid performance pitfalls by just using Scheme arguments for
 the leading arguments of markup functions that take a markup as
 their last argument.
 
+@funindex \markup
+@cindex markup macro
+@funindex interpret-markup
+Markup commands have a rather complex life cycle.  The body of a
+markup command definition is responsible for converting the
+arguments of the markup command into a stencil expression which is
+returned.  Quite often this is accomplished by calling the
+@code{interpret-markup} function on a markup expression, passing
+the @var{layout} and @var{props} arguments on to it.  Those
+arguments are usually only known at a very late stage in
+typesetting.  Markup expressions have their components assembled
+into markup expressions already when @code{\markup} in a LilyPond
+expression or the @code{markup} macro in Scheme is expanded.  The
+evaluation and typechecking of markup command arguments happens at
+the time @code{\markup}/@code{markup} are interpreted.
+
+But the actual conversion of markup expressions into stencil
+expressions by executing the markup function bodies only happens
+when @code{interpret-markup} is called on a markup expression.
+
 @node On properties
 @unnumberedsubsubsec On properties
 
@@ -1047,12 +1067,18 @@ stencils are combined using @code{ly:stencil-add}:
 
 @node New markup list command definition
 @subsection New markup list command definition
+@funindex define-markup-list-command
+@funindex interpret-markup-list
 Markup list commands are defined with the
 @code{define-markup-list-command} Scheme macro, which is similar to the
 @code{define-markup-command} macro described in
 @ref{New markup command definition}, except that where the latter returns
 a single stencil, the former returns a list of stencils.
 
+In a similar vein, @code{interpret-markup-list} is used instead of
+@code{interpret-markup} for converting a markup list into a list
+of stencils.
+
 In the following example, a @code{\paragraph} markup list command is
 defined, which returns a list of justified lines, the first one being
 indented.  The indent width is taken from the @code{props} argument.
@@ -1277,16 +1303,15 @@ my-callback = #(lambda (grob)
 @node Inline Scheme code
 @section Inline Scheme code
 
-TODO: the example for this section is ill-chosen since
-@example
-F = -\tweak font-size #-3 -\flageolet
-@end example
-(note the @samp{-} marking it as a post event) will actually work fine
-for the stated purpose.  Until this section gets a rewrite, let's
-pretend we don't know.
+TODO: after this section had been written, LilyPond has improved
+to the point that finding a @emph{simple} example where one would
+@emph{have} to revert to Scheme has become rather hard.
+
+Until this section gets a rewrite, let's pretend we don't know.
 
 The main disadvantage of @code{\tweak} is its syntactical
-inflexibility.  For example, the following produces a syntax error.
+inflexibility.  For example, the following produces a syntax error
+(or rather, it did so at some point in the past).
 
 @example
 F = \tweak font-size #-3 -\flageolet
index 4a4b34ebbefdd968aca886625003f2f64c71279e..30e46a85f8ac92f18325435bf3fde532e2277007 100644 (file)
@@ -245,7 +245,7 @@ style de ligature désiré, il faut remplacer, dans le contexte
 @code{Voice} approprié, le graveur @code{Ligature_bracket_engraver} par
 le graveur de ligature qui convient -- voir les rubriques
 @ref{Ligatures mensurales} et @ref{Neumes et ligatures grégoriennes} à
-ce sujet. 
+ce sujet.
 
 @seealso
 Glossaire musicologique :
@@ -428,7 +428,7 @@ clés utilisent le même glyphe, attaché à l'une ou l'autre des lignes
 de la portée.  Le chiffre porté en suffixe permet alors de les
 différencier.  Vous pouvez forcer le positionnement du glyphe sur une
 ligne, comme expliqué à la section @ref{Clefs}.  Dans la colonne
-exemple, la note suivant la clé est un do médium. 
+exemple, la note suivant la clé est un do médium.
 
 Les clés d'ut de Petrucci avaient une hampe gauche différente selon
 leur ligne de rattachement.
@@ -652,7 +652,7 @@ Voici les différences entre les styles :
 @end lilypond
 
 La rubrique @ref{Métrique} expose les principes généraux sur
-l'utilisation des indications de métrique. 
+l'utilisation des indications de métrique.
 
 @seealso
 Glossaire musicologique :
@@ -692,7 +692,7 @@ commande @code{\time}.  Utilisez alors un
 Pour de la musique ancienne, vous disposez de plusieurs styles de tête
 de note, en plus du style par défaut @code{default}.  Vous pouvez
 affecter à la propriété @code{style} de l'objet @code{NoteHead}
-les valeurs @code{baroque}, @code{neomensural}, @code{mensural}, 
+les valeurs @code{baroque}, @code{neomensural}, @code{mensural},
 @code{petrucci}, @code{blackpetrucci} ou @code{semipetrucci}.
 
 Le style @code{baroque} diffère du style @code{default} par
@@ -2674,7 +2674,7 @@ Manuel de notation :
 
 @knownissues
 L'espacement des ligatures n'est pas des meilleurs.
+
 
 @node Réédition de musique ancienne
 @subsection Réédition de musique ancienne
@@ -2950,7 +2950,7 @@ spirLyr = \lyricmode {
 @c try Till Rettig
 @c Add example of white note heads:
 @c In the french baroque some composers used white note heads in slow pieces,
-@c mainly in 3/2-time.  A quarter looks there like a eighth with a white
+@c mainly in 3/2-time.  A quarter looks there like an eighth with a white
 @c note head.  (Franz-Rudolf Kuhnen)
 
 @c TODO Add example of this:
index 0d87192696448b737fdde0449d7a90b66cfbf772..f6a57a8efc7ebef179fb58907d74366b5d61135a 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.17.11"
+@c \version "2.17.27"
 
 @c Translators: Matthieu Jacquot
 @c Translation checkers: Jean-Charles Malahieude
@@ -665,7 +665,7 @@ accordage personnalisé dès lors que votre fichier comportera une clause
 \layout @{
   \context @{
     \TabStaff
-    stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+    stringTunings = \stringTuning <c' g' d'' a''>
   @}
 @}
 @end example
index fcaaff565dcf3075a7f5a3261c9391f5f5f39ceb..200016c36effdbab5d707bfe714ca314a8da01df 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.17.11"
+@c \version "2.17.27"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -663,7 +663,7 @@ LilyPond は、@code{TabStaff} の行数と自動的に算出される @code{Fre
 \layout @{
   \context @{
     \TabStaff
-    stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+    stringTunings = \stringTuning <c' g' d'' a''>
   @}
 @}
 @end example
index 5ac272669704462b0d188b59e788b44be016844e..034c61b59a44e950fe5c28a96d443c507f43b58d 100644 (file)
@@ -60,11 +60,17 @@ on one staff.
 * Advanced rhythmic commands::
 @end menu
 
-
 @node Bar lines and bar checks
 @subsection Bar lines and bar checks
 
-@subheading Bar lines
+@menu
+* Bar lines::
+* Bar checks::
+@end menu
+
+@node Bar lines
+@unnumberedsubsubsec Bar lines
+
 
 Single bar lines are automatically placed in the music so
 there is no need to add them manually.  Other types of bar
@@ -77,7 +83,9 @@ the @ruser{Bar lines}.
 g1 e1 \bar "||" c2. c'4 \bar "|."
 @end lilypond
 
-@subheading Bar checks
+@node Bar checks
+@unnumberedsubsubsec Bar checks
+
 
 Though not strictly necessary, @emph{bar checks} should be
 used in the input code to show where bar lines are expected
@@ -99,11 +107,19 @@ Notation Reference:
 @node Accidentals and key signatures
 @subsection Accidentals and key signatures
 
+@menu
+* Accidentals::
+* Key signatures::
+* Warning key signatures and pitches::
+@end menu
+
 @warning{New users are often confused by these -- please read the
 warning at the bottom of this page, especially if you are not
 familiar with music theory!}
 
-@subheading Accidentals
+@node Accidentals
+@unnumberedsubsubsec Accidentals
+
 
 @cindex accidentals
 @cindex accidentals and key signatures
@@ -135,7 +151,10 @@ cis4 ees fisis, aeses
 @end lilypond
 
 @cindex key signature, setting
-@subheading Key signatures
+
+@node Key signatures
+@unnumberedsubsubsec Key signatures
+
 
 @cindex key signature
 @cindex major
@@ -166,7 +185,9 @@ a1 |
 
 @smallspace
 
-@subheading Warning: key signatures and pitches
+@node Warning key signatures and pitches
+@unnumberedsubsubsec Warning: key signatures and pitches
+
 
 Music Glossary: @rglos{accidental}, @rglos{key signature},
 @rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp},
@@ -243,7 +264,15 @@ Notation Reference:
 @funindex ( ... )
 @funindex \( ... \)
 
-@subheading Ties
+@menu
+* Ties::
+* Slurs::
+* Phrasing slurs::
+* Warnings slurs vs. ties::
+@end menu
+
+@node Ties
+@unnumberedsubsubsec Ties
 
 
 Music Glossary: @rglos{tie}.
@@ -255,7 +284,8 @@ first note being tied.
 g4~ g c2~ | c4~ c8 a~ a2 |
 @end lilypond
 
-@subheading Slurs
+@node Slurs
+@unnumberedsubsubsec Slurs
 
 
 Music Glossary: @rglos{slur}.
@@ -268,7 +298,9 @@ starting note and ending note are marked with @code{(} and
 d4( c16) cis( d e c cis d) e( d4)
 @end lilypond
 
-@subheading Phrasing slurs
+@node Phrasing slurs
+@unnumberedsubsubsec Phrasing slurs
+
 
 Music Glossary: @rglos{slur}, @rglos{phrasing}.
 
@@ -284,7 +316,10 @@ g4\( g8( a) b( c) b4\)
 @smallspace
 
 @cindex slurs versus ties
-@subheading Warnings: slurs vs. ties
+
+@node Warnings slurs vs. ties
+@unnumberedsubsubsec Warnings: slurs vs. ties
+
 
 Music Glossary: @rglos{articulation}, @rglos{slur}, @rglos{tie}.
 
@@ -309,8 +344,15 @@ Notation Reference:
 @node Articulation and dynamics
 @subsection Articulation and dynamics
 
+@menu
+* Articulations::
+* Fingerings::
+* Dynamics::
+@end menu
+
+@node Articulations
+@unnumberedsubsubsec Articulations
 
-@subheading Articulations
 
 @cindex articulation
 @cindex accent
@@ -326,7 +368,9 @@ c4-^ c-+ c-- c-!
 c4-> c-. c2-_
 @end lilypond
 
-@subheading Fingerings
+@node Fingerings
+@unnumberedsubsubsec Fingerings
+
 
 @cindex fingering
 
@@ -352,7 +396,9 @@ to let LilyPond determine the articulation directions.
 c4_-^1 d^. f^4_2-> e^-_+
 @end lilypond
 
-@subheading Dynamics
+@node Dynamics
+@unnumberedsubsubsec Dynamics
+
 
 @cindex dynamics
 @cindex decrescendo
@@ -486,7 +532,15 @@ Notation Reference:
 @node Advanced rhythmic commands
 @subsection Advanced rhythmic commands
 
-@subheading Partial measure
+@menu
+* Partial measure::
+* Tuplets::
+* Grace notes::
+@end menu
+
+@node Partial measure
+@unnumberedsubsubsec Partial measure
+
 
 @cindex pickup
 @cindex anacrusis
@@ -506,7 +560,9 @@ is a quarter note pickup and @code{\partial 8} an eighth note.
 c2 d |
 @end lilypond
 
-@subheading Tuplets
+@node Tuplets
+@unnumberedsubsubsec Tuplets
+
 
 @cindex tuplets
 @cindex triplets
@@ -530,7 +586,9 @@ For triplets, there are three notes instead of two, so
 \tuplet 3/2 { d4 a8 }
 @end lilypond
 
-@subheading Grace notes
+@node Grace notes
+@unnumberedsubsubsec Grace notes
+
 
 @cindex grace notes
 @cindex acciaccatura
@@ -592,6 +650,12 @@ than one voice on the same staff.
 @cindex compound music expression
 @cindex music expression, compound
 
+@menu
+* Analogy mathematical expressions::
+* Simultaneous music expressions multiple staves::
+* Simultaneous music expressions single staff::
+@end menu
+
 In LilyPond input files, music is represented by @emph{music
 expressions}.  A single note is a music expression:
 
@@ -615,7 +679,9 @@ one).  The result is another music expression:
 { { a4 g } f4 g }
 @end lilypond
 
-@subheading Analogy: mathematical expressions
+@node Analogy mathematical expressions
+@unnumberedsubsubsec Analogy: mathematical expressions
+
 
 This mechanism is similar to mathematical formulas: a big formula
 is created by composing small formulas.  Such formulas are called
@@ -641,7 +707,9 @@ arbitrarily deep, which is necessary for complex music like
 polyphonic scores.
 
 
-@subheading Simultaneous music expressions: multiple staves
+@node Simultaneous music expressions multiple staves
+@unnumberedsubsubsec Simultaneous music expressions: multiple staves
+
 
 @cindex multiple staves
 @cindex staves, multiple
@@ -689,7 +757,9 @@ only the first is relative to the @code{c''} in the initial
 @code{@bs{}relative} command.}
 
 
-@subheading Simultaneous music expressions: single staff
+@node Simultaneous music expressions single staff
+@unnumberedsubsubsec Simultaneous music expressions: single staff
+
 
 To determine the number of staves in a piece, LilyPond looks at
 the beginning of the first expression.  If there is a single note,
@@ -774,9 +844,6 @@ than polyrhythmic scores.
 }
 @end lilypond
 
-
-
-
 @node Staff groups
 @subsection Staff groups
 
index 380bc500de284a179dd4f6629249d41196335aa7..bd08657bc841faeb90653dd123f9c27b7585e518 100644 (file)
@@ -1895,7 +1895,7 @@ The statement which sets the property value is the same as that in a
 @code{\context} block within a @code{\layout} block.  Each
 @code{\context} block will affect all contexts of the type specified
 throughout the @code{\score} or @code{\book} block in which the
-@code{\layout} block appears.  Here is a example to show the format:
+@code{\layout} block appears.  Here is an example to show the format:
 
 @lilypond[verbatim,quote]
 \score {
index ea6c4e08e6ae9867dae1ae8d8fff0e5ffb764637..dfb60fab0b5a1b8fd315b0d109910efc222f1547 100644 (file)
@@ -45,6 +45,10 @@ LilyPond input files (written by you) to produce output files.
 @cindex example, first
 @cindex case sensitive
 
+@menu
+* Producing output::
+@end menu
+
 @qq{Compiling} is the term used for processing an input file in
 LilyPond format to produce output file(s).  Output files are
 generally PDF (for printing or viewing), MIDI (for playing), and
@@ -83,7 +87,8 @@ produce an error message.
 
 @smallspace
 
-@subheading Producing output
+@node Producing output
+@unnumberedsubsubsec Producing output
 
 @cindex PDF file
 @cindex viewing music
@@ -165,6 +170,16 @@ started writing input files.
 @cindex simple notation
 @cindex notation, simple
 
+@menu
+* Pitches::
+* Durations (rhythms)::
+* Rests::
+* Time signature::
+* Tempo marks::
+* Clef::
+* All together::
+@end menu
+
 LilyPond will add some notation elements automatically.  In the
 next example, we have only specified four pitches, but LilyPond
 has added a clef, time signature, and rhythms.
@@ -180,7 +195,8 @@ This behavior may be altered, but in most cases these automatic
 values are useful.
 
 
-@subheading Pitches
+@node Pitches
+@unnumberedsubsubsec Pitches
 
 @cindex pitches
 @cindex relative mode
@@ -287,7 +303,8 @@ To change a note by two (or more!) octaves, we use multiple
 quotes @code{''} and not one double quote @code{"}@tie{}!
 @c " - keeps quotes in order for context-sensitive editor -td
 
-@subheading Durations (rhythms)
+@node Durations (rhythms)
+@unnumberedsubsubsec Durations (rhythms)
 
 @cindex note durations
 @cindex durations
@@ -330,8 +347,8 @@ explicitly (i.e., with a number).
 }
 @end lilypond
 
-
-@subheading Rests
+@node Rests
+@unnumberedsubsubsec Rests
 
 @cindex rest
 @cindex notating rests
@@ -349,7 +366,8 @@ A @notation{rest} is entered just like a note with the name
 @end lilypond
 
 
-@subheading Time signature
+@node Time signature
+@unnumberedsubsubsec Time signature
 
 @cindex time signature
 
@@ -372,7 +390,8 @@ command:
 }
 @end lilypond
 
-@subheading Tempo marks
+@node Tempo marks
+@unnumberedsubsubsec Tempo marks
 
 @cindex tempo marks
 @cindex metronome marks
@@ -400,7 +419,8 @@ set with the @code{\tempo} command:
 @end lilypond
 
 
-@subheading Clef
+@node Clef
+@unnumberedsubsubsec Clef
 
 @cindex clef
 @cindex treble
@@ -429,7 +449,8 @@ The @notation{clef} can be set using the @code{\clef} command:
 @end lilypond
 
 
-@subheading All together
+@node All together
+@unnumberedsubsubsec All together
 
 Here is a small example showing all these elements together:
 
index 6d9f157895f93e43b9984169a359aba458fd15a0..5802044e422fafcd91b1c267aca81b33810868d8 100644 (file)
@@ -1117,7 +1117,7 @@ will cause errors when the dimensions of the object are required for
 correct processing.  For example, errors will be generated if the
 @code{stencil} property of the @code{NoteHead} object is set to
 @code{#f}.  If this is the case, you can instead use the
-@code{point-stencil} function, which sets the stencil to a object
+@code{point-stencil} function, which sets the stencil to an object
 with zero size:
 
 @lilypond[quote,verbatim,relative=2]
@@ -2703,9 +2703,9 @@ space between any object which supports the
 @code{side-position-interface} and the nearest other object (generally
 the note or the staff lines); @code{staff-padding} applies only to
 those objects which are always set outside the staff -- it controls
-the minimum amount of space that should be inserted between that
-object and the staff.  Note that @code{staff-padding} has no effect on
-objects which are positioned relative to the note rather than the
+the minimum distance from the staff to the outside-staff object.
+Note that @code{staff-padding} has no effect on
+objects that are positioned relative to the note rather than the
 staff, even though it may be overridden without error for such objects
 -- it is simply ignored.
 
@@ -2970,9 +2970,9 @@ note head by overriding @code{right-padding}.
 @cindex objects, aligning on a baseline
 
 @code{staff-padding} can be used to align objects such as dynamics
-along a baseline at a fixed height above the staff, rather than at a
-height dependent on the position of the note to which they are
-attached.  It is not a property of @code{DynamicText} but of
+along a baseline at a fixed distance from the staff, when no other
+notation forces them further from the staff.
+It is not a property of @code{DynamicText} but of
 @code{DynamicLineSpanner}.  This is because the baseline should apply
 equally to @strong{all} dynamics, including those created as extended
 spanners.  So this is the way to align the dynamic marks in the
@@ -2984,12 +2984,8 @@ example taken from the previous section:
 @cindex staff-padding property, example
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-% Extend width by 1 unit
-\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
-% Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner.staff-padding = #2
-a4\f b\mf a\mp b\p
+\override DynamicLineSpanner.staff-padding = #3
+a4\f b\mf a\p b\mp
 @end lilypond
 
 
@@ -4041,10 +4037,10 @@ the parts with all the @code{#()}.  This is explained in
 @ref{Advanced tweaks with Scheme}.
 
 @lilypond[quote,verbatim,ragged-right]
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
-  (make-dynamic-script
-   (markup #:dynamic "mp"
-           #:normal-text #:italic "dolce" ))
+mpdolce =
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
@@ -4071,10 +4067,10 @@ Let's hide them in another file:
 
 @example
 %%% save this to a file called "definitions.ily"
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
-  (make-dynamic-script
-   (markup #:dynamic "mp"
-           #:normal-text #:italic "dolce" ))
+mpdolce =
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
@@ -4106,10 +4102,10 @@ Now let's modify our music (let's save this file as @file{music.ly}).
 @end example
 
 @lilypond[quote,ragged-right]
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
-  (make-dynamic-script
-   (markup #:dynamic "mp"
-           #:normal-text #:italic "dolce" ))
+mpdolce =
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
@@ -4138,10 +4134,10 @@ with this:
 
 @example
 %%%  definitions.ily
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
-  (make-dynamic-script
-   (markup #:dynamic "mp"
-           #:normal-text #:italic "dolce" ))
+mpdolce =
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
@@ -4168,10 +4164,10 @@ inst =
 @end example
 
 @lilypond[quote,ragged-right]
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
-  (make-dynamic-script
-   (markup #:dynamic "mp"
-           #:normal-text #:italic "dolce" ))
+mpdolce =
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
@@ -4216,10 +4212,10 @@ overall size of the output.
 
 @example
 %%%  web-publish.ily
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
-  (make-dynamic-script
-   (markup #:dynamic "mp"
-           #:normal-text #:italic "dolce" ))
+mpdolce =
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
@@ -4247,10 +4243,10 @@ inst =
 @end example
 
 @lilypond[quote,ragged-right]
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
-  (make-dynamic-script
-   (markup #:dynamic "mp"
-           #:normal-text #:italic "dolce" ))
+mpdolce =
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
index ad1c84ae49d5a7df0d857c50e3282b99bf5d0b86..c5c800b6e4a205b67ce8fc25164ce00ff4bc03bf 100644 (file)
@@ -10,7 +10,7 @@ OUT_PNG_PAGES = $(PNG_PAGES:%=$(outdir)/%.png)
 OUT_SMALL_PNG_FILES = $(OUT_PNG_FILES:%.png=%-small.png)
 
 ifeq ($(out),www)
-all: $(OUT_PNG_FILES) $(OUT_SMALL_PNG_FILES)
+local-WWW-1: $(OUT_PNG_FILES) $(OUT_SMALL_PNG_FILES)
 endif
 
 $(outdir)/%.png: %.ly
index d6ba0bfc9f3068398f009f6e090ca9c7eee5d402..466a67d2d47632e9f5ec0d815a238e8bbd7cdac9 100644 (file)
@@ -3343,7 +3343,7 @@ item for hard constraints.
 handle_broken_smobs (); should conserve a little memory.
 
 * Fixed handling of orphaned score-elements. Any element that does
-not have its Line_of_score as a ancestor in both directions, is silently
+not have its Line_of_score as an ancestor in both directions, is silently
 removed from the output.  This guarantees that programming errors
 don't result in coredumps from Dimension_cache::common_refpoint ():
 element->line_l () is always a common reference point.
index c39d80119301852ab1bf65edc85ab9e1267027e3..a1db6cd710cc01ee9ba6409619c0b92101af1e8e 100644 (file)
@@ -19,9 +19,6 @@ default: local-txt-doc
 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(TEXTS)))
 ##local-WWW-2: $(OUT_TXT_FILES) $(OUT_HTMLFILES) txt-to-html
 
-copy-for-me:
-       $(foreach a, $(README_TOP_FILES), cp ../$(a) $(outdir)/$(a).txt && ) true
-
 $(outdir)/%.txt: %
        cp $< $@
 
index fba2e58da830eb3c1910c103c4fcaf7924251a87..7d198504b7dc8773ba6a50ab6ccc986b397f76f5 100644 (file)
@@ -2908,7 +2908,7 @@ DK: ?,
 S: ?,
 FI: nousu.
 
-Indicator for a indeterminately rising pitch bend.  Compare with
+Indicator for an indeterminately rising pitch bend.  Compare with
 @emph{glissando}, which has determinate starting and ending pitches.
 
 @seealso
@@ -3527,7 +3527,7 @@ DK: ?,
 S: ?,
 FI: lasku.
 
-Indicator for a indeterminately falling pitch bend.  Compare with
+Indicator for an indeterminately falling pitch bend.  Compare with
 @emph{glissando}, which has determinate starting and ending pitches.
 
 @seealso
index 8532ee4dcb0b7da89f4512e12b097567d4c3fbd0..2589572db49c6f28157182c5765baeb37e187b0d 100644 (file)
@@ -1920,7 +1920,7 @@ The statement which sets the property value is the same as that in a
 @code{\context} block within a @code{\layout} block.  Each
 @code{\context} block will affect all contexts of the type specified
 throughout the @code{\score} or @code{\book} block in which the
-@code{\layout} block appears.  Here is a example to show the format:
+@code{\layout} block appears.  Here is an example to show the format:
 
 @lilypond[verbatim,quote]
 \score {
index 99fa03cce06d1069a1d54137cd0d6ee633fafbf0..80881daf55fa29652e328bdf6dbaee213a2a3803 100644 (file)
@@ -1099,7 +1099,7 @@ will cause errors when the dimensions of the object are required for
 correct processing.  For example, errors will be generated if the
 @code{stencil} property of the @code{NoteHead} object is set to
 @code{#f}.  If this is the case, you can instead use the
-@code{point-stencil} function, which sets the stencil to a object
+@code{point-stencil} function, which sets the stencil to an object
 with zero size:
 
 @lilypond[quote,verbatim,relative=2]
index 2ffb0042fc3b4306a16873ceff081da18b218b70..485346a2f363a680e2327749fc784b47765b95de 100644 (file)
@@ -2879,7 +2879,7 @@ TBC
 @c try Till Rettig
 @c Add example of white note heads:
 @c In the french baroque some composers used white note heads in slow pieces,
-@c mainly in 3/2-time.  A quarter looks there like a eighth with a white
+@c mainly in 3/2-time.  A quarter looks there like an eighth with a white
 @c note head.  (Franz-Rudolf Kuhnen)
 
 @c TODO Add example of this:
index d690681465dd4b06c6ca5e72e0308940c727810a..21b6841a7af3d406c8db579906ccd3e31875c9de 100644 (file)
@@ -3901,13 +3901,13 @@ Each type of object has its own default reference point, to which
 rehearsal marks are aligned:
 
 @lilypond[verbatim,quote,relative=1]
-% The rehearsal mark will be aligned to right edge of the Clef
+% The rehearsal mark will be aligned to the right edge of the Clef
 \override Score.RehearsalMark.break-align-symbols = #'(clef)
 \key a \major
 \clef treble
 \mark "↓"
 e1
-% The rehearsal mark will be centered above the Time Signature
+% The rehearsal mark will be aligned to the left edge of the Time Signature
 \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
 \key a \major
 \clef treble
index 1bb80351977b0d311bcfd4fbe9343b53cc553189..731087eb4e29c2cf372a7faf57bbf32608a8d4f1 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.17.11"
+@c \version "2.17.27"
 
 @node Fretted string instruments
 @section Fretted string instruments
@@ -654,7 +654,7 @@ you can use
 \layout @{
   \context @{
     \TabStaff
-    stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+    stringTunings = \stringTuning <c' g' d'' a''>
   @}
 @}
 @end example
index c0bdb0e4b1a8ecbdc2d2f9ca61a9592932409144..a8405b5274f29b9008be04c9afbaba92c08b5aa4 100644 (file)
@@ -206,7 +206,7 @@ Overlapping notation can result when voices cross staves:
   \new Staff = "up" {
     \voiceOne
     % Make space for fingering in the cross-staff voice
-    \once\override DynamicLineSpanner.staff-padding = #3.4
+    \once\override DynamicLineSpanner.staff-padding = #4
     e''2\p\< d''\>
     c''1\!
   }
@@ -580,7 +580,7 @@ come into use to simplify the performance instructions.
 @snippets
 
 @lilypondfile[verbatim,quote,texidoc,doctitle]
-{accordion-discant-symbols.ly}
+{accordion-registers.ly}
 
 @seealso
 Snippets:
index c85be8386969835c5bf0b318926fb03b07ca12db..2b3299d7419c1c41776055ee33d79a3915e62a27 100644 (file)
@@ -1982,7 +1982,7 @@ given in the following table:
 @item @code{ChordNames}  @tab baseline
 @item @code{NoteNames}   @tab baseline
 @item @code{Lyrics}      @tab baseline
-@item @code{Dynamics}    @tab vertical center
+@item @code{Dynamics}    @tab mid-height of @q{m}
 @item @code{FiguredBass} @tab highest point
 @item @code{FretBoards}  @tab top line
 @end multitable
@@ -2044,10 +2044,10 @@ labelContext =
   \new Lyrics { \lyrics { \skip 1*2 | ghijk1 | } }
 >>
 
-%% The reference point for Dynamics is its vertical center
+%% The reference point for Dynamics is the midline of 'm' in the font
 <<
   \new RhythmicStaff {
-    \set RhythmicStaff.instrumentName = #"vertical center "
+    \set RhythmicStaff.instrumentName = #"mid-height "
     \labelContext "Dynamics" s1*3
   }
   \new Dynamics { s1\mp s\fp }
index ee4a326b2f88d81c3efcf0cf6fb29b98d612de2f..505bda3c57299a86ccac556f802e48f5ffeda9f1 100644 (file)
   lsrtags = "keyboards, specific-notation, symbols-and-glyphs, workaround"
 
   texidoc = "
-Accordion discant-specific symbols are added using @code{\\markup}. The
-placement of the symbols can be tweaked by changing the
+This snippet has been obsoleted by predefined markup commands, see
+@ruser{Accordion Registers}.  It's still useful as a simple
+demonstration of how to combine symbols: the placement of the symbols
+added with @code{\\markup} can be tweaked by changing the
 @code{\\translate-scaled} arguments.  @code{\\translate-scaled} is
 used here rather than @code{\\translate} in order to let the
 positioning of the symbol parts adapt to changes of @code{font-size}.
index 66e83829927af59f32a48b45c3677c84f1a0e579..68960a584034a088585dece16ea64f49fadc32f0 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.17.25"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.27
+\version "2.17.27"
 
 \header {
   lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs"
   texidoc = "
 In order to make parts of a crescendo hairpin invisible, the following
 method is used: A white rectangle is drawn on top of the respective
-part of the crescendo hairpin, making it invisible.  The rectangle is
-defined as postscript code within a text markup.
-
-To fine-tune the position and size of the markup, the number preceding
-@code{setgray} in the postscript definition can be set to a value less
-than one, making it grey.  The two numbers before @code{scale} in the
-postscript code are responsible for the width and height of the
-rectangle, the two numbers before @code{translate} change the x- and
-y-origin of the rectangle.
+part of the crescendo hairpin, making it invisible.
 
+The markup command @code{with-dimensions} tells LilyPond to consider only
+the bottom edge of the rectangle when spacing it against the hairpin.
+The property @code{staff-padding} prevents the rectangle from fitting
+between the hairpin and staff.
 
 Make sure to put the hairpin in a lower layer than the text markup to
 draw the rectangle over the hairpin.
@@ -35,7 +32,6 @@ draw the rectangle over the hairpin.
   <<
     {
       \dynamicUp
-      \override DynamicLineSpanner.staff-padding = #4
       r2 r16 c'8.\pp r4
     }
     \\
@@ -43,18 +39,11 @@ draw the rectangle over the hairpin.
       \override DynamicLineSpanner.layer = #0
       des,2\mf\< ~
       \override TextScript.layer = #2
-      des16_\markup {
-        \postscript #"
-          1.9 -8 translate
-          5 4 scale
-          1 setgray
-          0 0 moveto
-          0 1 lineto
-          1 1 lineto
-          1 0 lineto
-          0 0 lineto
-          fill"
-      }
+      \once\override TextScript.staff-padding = #6
+      \once\override TextScript.vertical-skylines = #'()
+      des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
+                    \with-color #white
+                    \filled-box #'(2 . 7) #'(0 . 2) #0
       r8. des4 ~ des16->\sff
     }
   >>
index 3514c0fa70162ceacd89da7e35514414c2610f5a..51f6f3ddeef08e9489eebabd50bd63cc62288208 100644 (file)
@@ -1,11 +1,10 @@
-% DO NOT EDIT this file manually; it is automatically
-% generated from Documentation/snippets/new
-% Make any changes in Documentation/snippets/new/
-% and then run scripts/auxiliar/makelsr.py
-%
-% This file is in the public domain.
-%% Note: this file works from version 2.16.0
-\version "2.16.0"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.14"
 
 \header {
   lsrtags = "contexts-and-engravers, specific-notation"
index 8183a4e05046d88fabf6fe86875565397c559b71..b7caf83f1e16aa84bda78e725057fd76559506d7 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.17.25"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.27
+\version "2.17.27"
 
 \header {
   lsrtags = "headword"
@@ -40,7 +41,7 @@ Expressive headword
       \key g \major
       \time 6/8
       \partial 2
-      \once \override TextScript.staff-padding = #2
+      \once \override TextScript.padding = #2
       d'8 \staccato
       ^ \markup { \column {
          RONDO
index cc0efc192d44125820cebe59ce47e6c42f736363..7ec2129a63705b9af0c7a940560d3e8f06e64985 100644 (file)
@@ -4,8 +4,10 @@
   lsrtags = "keyboards, specific-notation, symbols-and-glyphs, workaround"
 
   texidoc = "
-Accordion discant-specific symbols are added using @code{\\markup}. The
-placement of the symbols can be tweaked by changing the
+This snippet has been obsoleted by predefined markup commands, see
+@ruser{Accordion Registers}.  It's still useful as a simple
+demonstration of how to combine symbols: the placement of the symbols
+added with @code{\\markup} can be tweaked by changing the
 @code{\\translate-scaled} arguments.  @code{\\translate-scaled} is
 used here rather than @code{\\translate} in order to let the
 positioning of the symbol parts adapt to changes of @code{font-size}.
diff --git a/Documentation/snippets/new/broken-crescendo-hairpin.ly b/Documentation/snippets/new/broken-crescendo-hairpin.ly
new file mode 100644 (file)
index 0000000..27df944
--- /dev/null
@@ -0,0 +1,42 @@
+\version "2.17.27"
+
+\header {
+  lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs"
+
+  texidoc = "
+In order to make parts of a crescendo hairpin invisible, the following
+method is used: A white rectangle is drawn on top of the respective
+part of the crescendo hairpin, making it invisible.
+
+The markup command @code{with-dimensions} tells LilyPond to consider only
+the bottom edge of the rectangle when spacing it against the hairpin.
+The property @code{staff-padding} prevents the rectangle from fitting
+between the hairpin and staff.
+
+Make sure to put the hairpin in a lower layer than the text markup to
+draw the rectangle over the hairpin.
+
+"
+  doctitle = "Broken Crescendo Hairpin"
+}
+
+\relative c' {
+  <<
+    {
+      \dynamicUp
+      r2 r16 c'8.\pp r4
+    }
+    \\
+    {
+      \override DynamicLineSpanner.layer = #0
+      des,2\mf\< ~
+      \override TextScript.layer = #2
+      \once\override TextScript.staff-padding = #6
+      \once\override TextScript.vertical-skylines = #'()
+      des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
+                    \with-color #white
+                    \filled-box #'(2 . 7) #'(0 . 2) #0
+      r8. des4 ~ des16->\sff
+    }
+  >>
+}
diff --git a/Documentation/snippets/new/engravers-one-by-one.ly b/Documentation/snippets/new/engravers-one-by-one.ly
deleted file mode 100644 (file)
index d03145c..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-\version "2.16.0"
-
-\header {
-  lsrtags = "contexts-and-engravers, specific-notation"
-
-  texidoc = "
-The notation problem, creating a certain symbol, is handled by plugins.
- Each plugin is called an Engraver. In this example, engravers are
-switched on one by one, in the following order:
-
-- note heads,
-
-
-- staff symbol,
-
-
-- clef,
-
-
-- stem,
-
-
-- beams, slurs, accents,
-
-
-- accidentals, bar lines, time signature and key signature.
-
-
-
-Engravers are grouped. For example, note heads, slurs, beams etc. form
-a @code{Voice} context. Engravers for key signature, accidentals, bar
-line, etc. form a @code{Staff} context.
-
-"
-  doctitle = "Engravers one-by-one"
-}
-
-%% sample music
-topVoice = \relative c' {
-  \key d \major
-  es8([ g] a[ fis])
-  b4
-  b16[-. b-. b-. cis-.]
-  d4->
-}
-
-botVoice = \relative c' {
-  \key d \major
-  c8[( f] b[ a)]
-  es4
-  es16[-. es-. es-. fis-.]
-  b4->
-}
-
-hoom = \relative c {
-  \key d \major
-  \clef bass
-  g8-. r
-  r4
-  fis8-.
-  r8
-  r4
-  b'4->
-}
-
-pah = \relative c' {
-  r8 b-.
-  r4
-  r8 g8-.
-  r16 g-. r8
-  \clef treble
-  fis'4->
-}
-
-%
-% setup for Request->Element conversion. Guru-only
-%
-
-MyStaff = \context {
-  \type "Engraver_group"
-  \name Staff
-
-  \description "Handles clefs, bar lines, keys, accidentals.  It can contain
-@code{Voice} contexts."
-
-  \consists "Output_property_engraver"
-
-  \consists "Font_size_engraver"
-
-  \consists "Volta_engraver"
-  \consists "Separating_line_group_engraver"
-  \consists "Dot_column_engraver"
-
-  \consists "Ottava_spanner_engraver"
-  \consists "Rest_collision_engraver"
-  \consists "Piano_pedal_engraver"
-  \consists "Piano_pedal_align_engraver"
-  \consists "Instrument_name_engraver"
-  \consists "Grob_pq_engraver"
-  \consists "Forbid_line_break_engraver"
-  \consists "Axis_group_engraver"
-
-  \consists "Pitch_squash_engraver"
-
-  localKeySignature = #'()
-
-  % explicitly set instrumentName, so we don't get
-  % weird effects when doing instrument names for
-  % piano staves
-
-  instrumentName = #'()
-  shortInstrumentName = #'()
-
-  \accepts "Voice"
-  \defaultchild "Voice"
-}
-
-
-MyVoice = \context {
-  \type "Engraver_group"
-  \name Voice
-
-  \description "
-    Corresponds to a voice on a staff.  This context handles the
-    conversion of dynamic signs, stems, beams, super- and subscripts,
-    slurs, ties, and rests.
-
-    You have to instantiate this explicitly if you want to have
-    multiple voices on the same staff."
-
-  localKeySignature = #'()
-  \consists "Font_size_engraver"
-
-  % must come before all
-  \consists "Output_property_engraver"
-  \consists "Arpeggio_engraver"
-  \consists "Multi_measure_rest_engraver"
-  \consists "Text_spanner_engraver"
-  \consists "Grob_pq_engraver"
-  \consists "Note_head_line_engraver"
-  \consists "Glissando_engraver"
-  \consists "Ligature_bracket_engraver"
-  \consists "Breathing_sign_engraver"
-  % \consists "Rest_engraver"
-  \consists "Grace_beam_engraver"
-  \consists "New_fingering_engraver"
-  \consists "Chord_tremolo_engraver"
-  \consists "Percent_repeat_engraver"
-  \consists "Slash_repeat_engraver"
-
-  %{
-    Must come before text_engraver, but after note_column engraver.
-  %}
-  \consists "Text_engraver"
-  \consists "Dynamic_engraver"
-  \consists "Fingering_engraver"
-
-  \consists "Script_column_engraver"
-  \consists "Rhythmic_column_engraver"
-  \consists "Cluster_spanner_engraver"
-  \consists "Tie_engraver"
-  \consists "Tie_engraver"
-  \consists "Tuplet_engraver"
-  \consists "Note_heads_engraver"
-  \consists "Rest_engraver"
-}
-
-
-\score {
-  \topVoice
-  \layout {
-    \context { \MyStaff }
-    \context { \MyVoice }
-  }
-}
-
-
-MyStaff = \context {
-  \MyStaff
-  \consists "Staff_symbol_engraver"
-}
-
-\score {
-  \topVoice
-  \layout {
-    \context { \MyStaff }
-    \context { \MyVoice }
-  }
-}
-
-MyStaff = \context {
-  \MyStaff
-  \consists "Clef_engraver"
-  \remove "Pitch_squash_engraver"
-}
-
-\score {
-  \topVoice
-  \layout {
-    \context { \MyStaff }
-    \context { \MyVoice }
-  }
-}
-
-MyVoice = \context {
-  \MyVoice
-  \consists "Stem_engraver"
-}
-
-\score {
-  \topVoice
-  \layout {
-    \context { \MyStaff }
-    \context { \MyVoice }
-  }
-}
-
-MyVoice = \context {
-  \MyVoice
-  \consists "Beam_engraver"
-}
-
-\score {
-  \topVoice
-  \layout {
-    \context { \MyStaff }
-    \context { \MyVoice }
-  }
-}
-
-MyVoice = \context {
-  \MyVoice
-  \consists "Phrasing_slur_engraver"
-  \consists "Slur_engraver"
-  \consists "Script_engraver"
-}
-
-
-\score {
-  \topVoice
-  \layout {
-    \context { \MyStaff }
-    \context { \MyVoice }
-  }
-}
-
-MyStaff = \context {
-  \MyStaff
-  \consists "Bar_engraver"
-  \consists "Time_signature_engraver"
-}
-
-\score {
-  \topVoice
-  \layout {
-    \context { \MyStaff }
-    \context { \MyVoice }
-  }
-}
-
-MyStaff = \context {
-  \MyStaff
-  \consists "Accidental_engraver"
-  \consists "Key_engraver"
-}
-\score {
-  \topVoice
-  \layout {
-    \context { \MyStaff }
-    \context { \MyVoice }
-  }
-}
diff --git a/Documentation/snippets/new/expressive-headword.ly b/Documentation/snippets/new/expressive-headword.ly
new file mode 100644 (file)
index 0000000..1f9cf0f
--- /dev/null
@@ -0,0 +1,268 @@
+\version "2.17.27"
+
+\header {
+  lsrtags = "headword"
+
+  texidoc = "
+Expressive headword
+
+"
+  doctitle = "Expressive headword"
+}
+\include "english.ly"
+
+% NR 1.3 Expressive marks
+
+% L. v. Beethoven, Op. 49 no. 1
+% Piano sonata 19 - "Leichte Sonate"
+% measures 1 - 12
+
+%\layout {
+%   \context {
+%      \Score
+%      \override SpacingSpanner.base-shortest-duration =
+%         #(ly:make-moment 1/20)
+%   }
+%}
+
+\new PianoStaff <<
+
+   % RH Staff
+   \new Staff {
+      \clef treble
+      \key g \major
+      \time 6/8
+      \partial 2
+      \once \override TextScript.padding = #2
+      d'8 \staccato
+      ^ \markup { \column {
+         RONDO
+         \italic Allegro } }
+      d'8 \staccato
+      g'8 \staccato
+      a'8 \staccato
+
+      |
+
+      b'8 [ (
+      g'8 ] )
+      e'8 \staccato
+      e' \staccato
+      a'8 \staccato
+      b'8 \staccato
+
+      |
+
+      c''8 [ (
+      a'8 ] )
+      e''8 \staccato
+      d''8 \staccato
+      c''8 \staccato
+      b'8 \staccato
+
+      |
+
+      a'8 \staccato
+      g'8 \staccato
+      a'8 \staccato
+      \acciaccatura { g'16 [ a'16 ] }
+      bf'8
+      a'8 \staccato
+      g'8 \staccato
+
+      |
+
+      fs'8 [ (
+      d'8 ] )
+      d'8 \staccato
+      d'8 \staccato
+      g'8 \staccato
+      a'8 \staccato
+
+      |
+
+      b'8 [ (
+      g'8 ] )
+      e'8 \staccato
+      e'8 \staccato
+      a'8 \staccato
+      b'8 \staccato
+
+      |
+
+      c''8 [ (
+      a'8 ] )
+      e''8 \staccato
+      d''8 \staccato
+      c''8 \staccato
+      b'8 \staccato
+
+      |
+
+      a'8 \staccato
+      g'8 \staccato
+      a'8 \staccato
+      <<
+         {
+            \voiceOne
+            d'8
+            g'8
+            fs'8
+            \oneVoice
+         }
+         \new Voice {
+            \voiceTwo
+            d'4
+            c'8
+            \oneVoice
+         }
+      >>
+
+      |
+
+      <b g'>4 \tenuto
+      d'8 \staccato
+      g'8 \staccato
+      b'8 \staccato
+      d''8 \staccato
+
+      |
+
+      d''8 (
+      <c'' a'>8 \staccato )
+      <c'' a'>8 \staccato
+      d''8 (
+      <b' g'>8 \staccato )
+      <b' g'>8 \staccato
+
+      |
+
+      d''8 (
+      <c'' a'>8 \staccato )
+      <c'' a'>8 \staccato
+      d''8 (
+      <b' g'>8 \staccato )
+      <b' g'>8 \staccato
+
+      |
+
+      d''8 \staccato
+      <c'' a'>8 \staccato
+      <b' g'>8 \staccato
+      d'' \staccato
+      <c'' a'>8 \staccato
+      <b' g'>8 \staccato
+
+      |
+
+      <d'' c'' a'>4 \fermata
+      r8 r4 r8
+   }
+
+   % LH Staff
+   \new Staff {
+      \clef bass
+      \key g \major
+      \time 6/8
+      \partial 2
+      r8
+      r8
+      <d' b>8 \staccato
+      <c' a>8 \staccato
+
+      |
+
+      <b g>4
+      r8
+      r8
+      <e' c'>8 \staccato
+      <d' b>8 \staccato
+
+      |
+
+      <c' a>4
+      r8
+      r8
+      <a fs>8 \staccato
+      <b g>8 \staccato
+
+      |
+
+      <c' a>8 \staccato
+      <b d'>8 \staccato
+      <e' c'>8 \staccato
+      <e' cs'>4. (
+
+      |
+
+      d'4 )
+      r8
+      r8
+      <d' b!>8 \staccato
+      <c'! a>8 \staccato
+
+      |
+
+      <b g>4
+      r8
+      r8
+      <e' c'>8 \staccato
+      <d' b>8 \staccato
+
+      |
+
+      <c' a>4
+      r8
+      r8
+      <a fs>8 \staccato
+      <b g>8 \staccato
+
+      |
+
+      <c' a>8 \staccato
+      <d' b>8 \staccato
+      <e' c'>8 \staccato
+      <b d>4
+      <a d>8 \staccato
+
+      |
+
+      <g g,>4 \tenuto
+      r8
+      r4
+      r8
+
+      |
+
+      r8
+      <d' fs>8 \staccato
+      <d' fs>8 \staccato
+      r8
+      <d' g>8 \staccato
+      <d' g>8 \staccato
+
+      |
+
+      r8
+      <d' fs>8 \staccato
+      <d' fs>8 \staccato
+      r8
+      <d' g>8 \staccato
+      <d' g>8 \staccato
+
+      |
+
+      r8
+      <d' fs>8 \staccato
+      <d' g>8 \staccato
+      r8
+      <d' fs>8 \staccato
+      <d' g>8 \staccato
+
+      |
+
+      <d' fs>4 \fermata
+      r8 r4 r8
+   }
+
+>>
diff --git a/Documentation/snippets/new/pitches-headword.ly b/Documentation/snippets/new/pitches-headword.ly
new file mode 100644 (file)
index 0000000..70246ce
--- /dev/null
@@ -0,0 +1,137 @@
+\version "2.17.27"
+
+\header {
+  lsrtags = "headword"
+
+  texidoc = "
+Piches headword
+
+"
+  doctitle = "Pitches headword"
+}
+% L. v. Beethoven
+% Piano sonata 21 - Dem Grafen von Waldstein Gewidmet
+% chorale at measures 34 - 40+
+
+\include "english.ly"
+
+\new PianoStaff <<
+
+  % RH Staff
+  \new Staff <<
+
+    % RH Voice 1
+    \new Voice {
+      \set Score.currentBarNumber = #34
+      \voiceOne
+      gs''2 ( ^ \markup \italic { dolce e molto ligato }
+      fs''4
+      e''4
+      |
+      ds''2
+      cs''2 )
+      |
+      ds''2 (
+      e''4
+      fs''4
+      |
+      <gs'' e''>2
+      <fs'' ds''>2 )
+      |
+      \oneVoice
+      \clef bass
+      <gs' e' b>2 (
+      <fs' ds' a>4
+      <e' cs' gs>4
+      |
+      <ds' bs fs>2
+      <cs' a e>2 )
+      |
+      \voiceOne
+      b2 %(
+      cs'4
+      ds'4
+      |
+      \clef treble
+      <e' gs>4 %)
+      r4 r2
+    }
+
+    % RH Voice 2
+    \new Voice {
+      \voiceTwo
+      \override Staff.DynamicLineSpanner.staff-padding = #3
+      <e'' b'>2 \p
+      <ds'' a'>4
+      <cs'' gs'>4
+      |
+      <bs' fs'>2
+      e'2
+      |
+      <b'! a'>2 -\tweak #'style #'none \cresc
+      b'4
+      <e'' cs''>4
+      |
+      b'2. ( \sf \>
+      a'4 )
+      \clef bass
+      | \break
+      s1 \p
+      |
+      s1
+      |
+      <gs e>4 (
+      <a fs>2. )
+      |
+      s4
+      r4 r2
+    }
+
+  >>
+
+  % LH Staff
+  \new Staff {
+    \override Staff.SustainPedalLineSpanner.staff-padding = #6
+    <gs' e'>2 ( \sustainOn
+    <fs' ds' b>4 \sustainOff
+    <e' cs'>4
+    |
+    <ds' bs gs>2
+    <cs' a>2 ) \sustainOn
+    |
+    \clef bass
+    \slurDown
+    <ds' b! a fs>2 ( \sustainOff
+    <e' b gs>4
+    <fs' cs' a>4 \sustainOn
+    |
+    \clef treble
+    \voiceOne
+    <<
+      {
+        <gs' e'>2
+        <fs' ds'>2 )
+      }
+      \new Voice {
+        \voiceTwo
+        b1 \sustainOff
+      }
+    >>
+    \oneVoice
+    |
+    %\break
+    \clef bass
+    <gs e>2 (
+    <fs ds b,>4
+    <e cs>4
+    |
+    <ds bs, gs,>2
+    <cs a,>2 ) \sustainOn
+    |
+    <b,! b,,!>1 ( \sustainOff
+    |
+    <e e,>4 )
+    r4 r2
+  }
+
+>>
index 5999b2d1eb2d2b0a95e9b0bcee85a29bdcf8e3d6..e908ef14cd5a9c6de19907e53d3b05370e88ab39 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.17.18"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -50,10 +50,10 @@ follows:
   % in all voices to avoid multiple instances being printed
   \compressFullBarRests
   <<
-   \revert MultiMeasureRest.staff-position
+   \revert MultiMeasureRest.direction
     { R1*3 }
     \\
-   \revert MultiMeasureRest.staff-position
+   \revert MultiMeasureRest.direction
     { R1*3 }
   >>
 }
diff --git a/Documentation/snippets/new/vertically-aligned-dynamics-and-textscripts.ly b/Documentation/snippets/new/vertically-aligned-dynamics-and-textscripts.ly
new file mode 100644 (file)
index 0000000..909f09e
--- /dev/null
@@ -0,0 +1,34 @@
+\version "2.17.27"
+
+\header {
+  lsrtags = "spacing, tweaks-and-overrides, workaround"
+
+  texidoc = "
+All @code{DynamicLineSpanner} objects (hairpins and dynamic texts) are
+placed with their reference line at least @code{'staff-padding} from
+the staff, unless other notation forces them to be farther.
+Setting @code{'staff-padding} to a sufficiently large value aligns the
+dynamics.
+
+The same idea, together with @code{\\textLengthOn}, is used to align
+the text scripts along their baseline.
+
+"
+  doctitle = "Vertically aligned dynamics and textscripts"
+}
+\markup \vspace #1 %avoid LSR-bug
+
+music = \relative c' {
+  a'2\p b\f
+  e4\p f\f\> g, b\p
+  c2^\markup { \huge gorgeous } c^\markup { \huge fantastic }
+}
+
+{
+  \music
+  \break
+  \override DynamicLineSpanner.staff-padding = #3
+  \textLengthOn
+  \override TextScript.staff-padding = #1
+  \music
+}
index 270c696b3f040583607c60af793302086f60c28c..ad09b5755ba21e09989d1516d5e0d04db8791213 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.17.25"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.27
+\version "2.17.27"
 
 \header {
   lsrtags = "headword"
@@ -67,7 +68,7 @@ Piches headword
     % RH Voice 2
     \new Voice {
       \voiceTwo
-      \override Staff.DynamicLineSpanner.staff-padding = #2.5
+      \override Staff.DynamicLineSpanner.staff-padding = #3
       <e'' b'>2 \p
       <ds'' a'>4
       <cs'' gs'>4
@@ -75,8 +76,7 @@ Piches headword
       <bs' fs'>2
       e'2
       |
-      \once \override TextScript.staff-padding = #2.5
-      <b'! a'>2 _ \markup \italic { cresc. }
+      <b'! a'>2 -\tweak #'style #'none \cresc
       b'4
       <e'' cs''>4
       |
@@ -99,7 +99,7 @@ Piches headword
 
   % LH Staff
   \new Staff {
-    \override Staff.SustainPedalLineSpanner.staff-padding = #5
+    \override Staff.SustainPedalLineSpanner.staff-padding = #6
     <gs' e'>2 ( \sustainOn
     <fs' ds' b>4 \sustainOff
     <e' cs'>4
index 34c688c71b388786cf93f20c7e4c0f05b750512c..b32e5b9a51d364d303558b022a3aaa46d9801ecb 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.17.6
-\version "2.17.6"
+%% Note: this file works from version 2.17.18
+\version "2.17.18"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -58,10 +58,10 @@ follows:
   % in all voices to avoid multiple instances being printed
   \compressFullBarRests
   <<
-   \revert MultiMeasureRest.staff-position
+   \revert MultiMeasureRest.direction
     { R1*3 }
     \\
-   \revert MultiMeasureRest.staff-position
+   \revert MultiMeasureRest.direction
     { R1*3 }
   >>
 }
index 494a2c9b0ce687be8d2cb2c3b3b2678a9e0c9b27..82a609c12ff66ab2af1f3ff5dab4e56d575198fb 100644 (file)
@@ -1,20 +1,21 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.17.25"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.27
+\version "2.17.27"
 
 \header {
   lsrtags = "spacing, tweaks-and-overrides, workaround"
 
   texidoc = "
-By setting the @code{'Y-extent} property to a suitable value, all
-@code{DynamicLineSpanner} objects (hairpins and dynamic texts) can be
-aligned to a common reference point, regardless of their actual extent.
-This way, every element will be vertically aligned, thus producing a
-more pleasing output.
+All @code{DynamicLineSpanner} objects (hairpins and dynamic texts) are
+placed with their reference line at least @code{'staff-padding} from
+the staff, unless other notation forces them to be farther.
+Setting @code{'staff-padding} to a sufficiently large value aligns the
+dynamics.
 
 The same idea, together with @code{\\textLengthOn}, is used to align
 the text scripts along their baseline.
@@ -34,9 +35,8 @@ music = \relative c' {
 {
   \music
   \break
-  \override DynamicLineSpanner.staff-padding = #2.0
-  \override DynamicLineSpanner.Y-extent = #'(-1.5 . 1.5)
+  \override DynamicLineSpanner.staff-padding = #3
   \textLengthOn
-  \override TextScript.Y-extent = #'(-1.5 . 1.5)
+  \override TextScript.staff-padding = #1
   \music
 }
index ce3dc1f42beec03241cb71d546e8b2f99dd37385..43a99497c10c8c78af1b8432170123142eae2c4e 100644 (file)
@@ -2,13 +2,16 @@ depth = ../..
 
 STEPMAKE_TEMPLATES=documentation tex texinfo topdocs
 LOCALSTEPMAKE_TEMPLATES=lilypond ly
-OUT_TEXI_FILES = $(TELY_FILES:%.tely=$(outdir)/%.texi)
+OUT_TEXI_FILES = $(TEXI_FILES:%.texi=$(outdir)/%.texi) $(TELY_FILES:%.tely=$(outdir)/%.texi)
 HTML_FILES=$(TEXI_FILES:%.texi=$(outdir)/%.html) $(TELY_FILES:%.tely=$(outdir)/%.html)
 README_TOP_FILES=NEWS AUTHORS INSTALL README
 OUTTXT_FILES= $(outdir)/NEWS.txt
 
 include $(depth)/make/stepmake.make
 
+DOCUMENTATION_INCLUDES += -I $(outdir) \
+  -I $(top-src-dir)/Documentation
+
 # FIXME ad-hoc file copy?
 $(outdir)/NEWS.tely: $(top-src-dir)/Documentation/changes.tely
        cp -f $< $@
index 87d8474316adf7dced50154d180d117ff572ac0a..c9f0093381604ad131867608ef50e772de949f45 100644 (file)
@@ -1167,6 +1167,14 @@ AC_DEFUN(STEPMAKE_TEXMF_DIRS, [
 AC_DEFUN(STEPMAKE_TEXMF, [
     STEPMAKE_PROGS(METAFONT, mf-nowin mf mfw mfont, $1)
     STEPMAKE_PROGS(METAPOST, mpost, $1)
+    if test "$METAPOST" != ""; then
+       ver=`STEPMAKE_GET_VERSION($METAPOST)`
+       num=`STEPMAKE_NUMERIC_VERSION($ver)`
+       # Avoid buggy metapost versions: 1.600 <= x < 1.803
+       if test "$num" -ge "1600000" -a "$num" -lt "1803000"; then
+            STEPMAKE_ADD_ENTRY($1, ["mpost (due to a bug in metapost, versions 1.600 <= x < 1.803 are not supported; installed: $ver)"])
+       fi
+    fi
 
     AC_MSG_CHECKING(for working metafont mode)
     modelist='ljfour lj4 lj3 lj2 ljet laserjet'
index 2431769f91c409462f95f570f415b1ec3a4e922d..b1e85522a011d5464c0ffec7d7936c4a4e2ff5b6 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.27"
 
 \header {
   texidoc = "
@@ -29,7 +29,7 @@ notes = \relative c' {
 \score {
   \new TabStaff
   \with {
-    stringTunings = \stringTuning \notemode { <a d' f' a' d'' f''> }
+    stringTunings = \stringTuning <a d' f' a' d'' f''>
     tablatureFormat = #fret-letter-tablature-format
   }
   \new TabVoice {
diff --git a/input/regression/tablature-slurs-with-beams.ly b/input/regression/tablature-slurs-with-beams.ly
new file mode 100644 (file)
index 0000000..1425ed6
--- /dev/null
@@ -0,0 +1,36 @@
+\version "2.17.20"
+
+\header
+{
+  texidoc = "
+Slur placement in complementary tablatures should not be affected by
+either automatic or manual beaming.
+"
+}
+
+guitarSolo = {
+  \time 3/4
+  \set Timing.beamExceptions = #'((end . (((1 . 8) . (4 2)))))
+  <<
+    {bes'2( aes'8-. r)} \\
+    {r8 cis(-\tag #'beam [ b f'-\tag #'beam ]) <d f'>-. r}
+  >>
+  \bar "|."
+}
+
+guitarSolos = {
+  \tempo "Manual beams"
+  \guitarSolo
+  \tempo "Automatic beams"
+  \removeWithTag #'beam \guitarSolo
+}
+
+\score {
+  <<
+    \new StaffGroup <<
+      \new Staff { \clef "treble_8" \guitarSolos }
+      \new TabStaff \guitarSolos
+    >>
+    \new TabStaff \with { \tabFullNotation } \guitarSolos
+  >>
+}
index aee6dad7058411b187c9b7388cca059e3d92aec1..8a2a8d9b819a4469f2b60c73f75f1d0899963d91 100644 (file)
@@ -61,73 +61,85 @@ Align_interface::align_to_ideal_distances (SCM smob)
   return SCM_BOOL_T;
 }
 
-/* Return upper and lower skylines for VerticalAxisGroup g. If the extent
-   is non-empty but there is no skyline available (or pure is true), just
+/* for each grob, find its upper and lower skylines. If the grob has
+   an empty extent, delete it from the list instead. If the extent is
+   non-empty but there is no skyline available (or pure is true), just
    create a flat skyline from the bounding box */
 // TODO(jneem): the pure and non-pure parts seem to share very little
 // code. Split them into 2 functions, perhaps?
-static Skyline_pair
-get_skylines (Grob *g,
+static void
+get_skylines (Grob *me,
+              vector<Grob *> *const elements,
               Axis a,
-              Grob *other_common,
-              bool pure, int start, int end)
+              bool pure, int start, int end,
+              vector<Skyline_pair> *const ret)
 {
-  Skyline_pair skylines;
+  Grob *other_common = common_refpoint_of_array (*elements, me, other_axis (a));
 
-  if (!pure)
+  for (vsize i = elements->size (); i--;)
     {
-      Skyline_pair *skys = Skyline_pair::unsmob (g->get_property (a == Y_AXIS
-                                                                  ? "vertical-skylines"
-                                                                  : "horizontal-skylines"));
-      if (skys)
-        skylines = *skys;
-
-      /* This skyline was calculated relative to the grob g. In order to compare it to
-         skylines belonging to other grobs, we need to shift it so that it is relative
-         to the common reference. */
-      Real offset = g->relative_coordinate (other_common, other_axis (a));
-      skylines.shift (offset);
-    }
-  else if (Hara_kiri_group_spanner::request_suicide (g, start, end))
-    return skylines;
-  else
-    {
-      assert (a == Y_AXIS);
-      Interval extent = g->pure_height (g, start, end);
-
-      // This is a hack to get better accuracy on the pure-height of VerticalAlignment.
-      // It's quite common for a treble clef to be the highest element of one system
-      // and for a low note (or lyrics) to be the lowest note on another. The two will
-      // never collide, but the pure-height stuff only works with bounding boxes, so it
-      // doesn't know that. The result is a significant over-estimation of the pure-height,
-      // especially on systems with many staves. To correct for this, we build a skyline
-      // in two parts: the part we did above contains most of the grobs (note-heads, etc.)
-      // while the bit we're about to do only contains the breakable grobs at the beginning
-      // of the system. This way, the tall treble clefs are only compared with the treble
-      // clefs of the other staff and they will be ignored if the staff above is, for example,
-      // lyrics.
-      if (Axis_group_interface::has_interface (g))
+      Grob *g = (*elements)[i];
+      Skyline_pair skylines;
+
+      if (!pure)
         {
-          extent = Axis_group_interface::rest_of_line_pure_height (g, start, end);
-          Interval begin_of_line_extent = Axis_group_interface::begin_of_line_pure_height (g, start);
-          if (!begin_of_line_extent.is_empty ())
+          Skyline_pair *skys = Skyline_pair::unsmob (g->get_property (a == Y_AXIS
+                                                                      ? "vertical-skylines"
+                                                                      : "horizontal-skylines"));
+          if (skys)
+            skylines = *skys;
+
+          /* This skyline was calculated relative to the grob g. In order to compare it to
+             skylines belonging to other grobs, we need to shift it so that it is relative
+             to the common reference. */
+          Real offset = g->relative_coordinate (other_common, other_axis (a));
+          skylines.shift (offset);
+        }
+      else
+        {
+          assert (a == Y_AXIS);
+          Interval extent = g->pure_height (g, start, end);
+
+          // This is a hack to get better accuracy on the pure-height of VerticalAlignment.
+          // It's quite common for a treble clef to be the highest element of one system
+          // and for a low note (or lyrics) to be the lowest note on another. The two will
+          // never collide, but the pure-height stuff only works with bounding boxes, so it
+          // doesn't know that. The result is a significant over-estimation of the pure-height,
+          // especially on systems with many staves. To correct for this, we build a skyline
+          // in two parts: the part we did above contains most of the grobs (note-heads, etc.)
+          // while the bit we're about to do only contains the breakable grobs at the beginning
+          // of the system. This way, the tall treble clefs are only compared with the treble
+          // clefs of the other staff and they will be ignored if the staff above is, for example,
+          // lyrics.
+          if (Axis_group_interface::has_interface (g)
+              && !Hara_kiri_group_spanner::request_suicide (g, start, end))
+            {
+              extent = Axis_group_interface::rest_of_line_pure_height (g, start, end);
+              Interval begin_of_line_extent = Axis_group_interface::begin_of_line_pure_height (g, start);
+              if (!begin_of_line_extent.is_empty ())
+                {
+                  Box b;
+                  b[a] = begin_of_line_extent;
+                  b[other_axis (a)] = Interval (-infinity_f, -1);
+                  skylines.insert (b, other_axis (a));
+                }
+            }
+
+          if (!extent.is_empty ())
             {
               Box b;
-              b[a] = begin_of_line_extent;
-              b[other_axis (a)] = Interval (-infinity_f, -1);
+              b[a] = extent;
+              b[other_axis (a)] = Interval (0, infinity_f);
               skylines.insert (b, other_axis (a));
             }
         }
 
-      if (!extent.is_empty ())
-        {
-          Box b;
-          b[a] = extent;
-          b[other_axis (a)] = Interval (0, infinity_f);
-          skylines.insert (b, other_axis (a));
-        }
+      if (skylines.is_empty ())
+        elements->erase (elements->begin () + i);
+      else
+        ret->push_back (skylines);
     }
-  return skylines;
+  reverse (*ret);
 }
 
 vector<Real>
@@ -165,7 +177,7 @@ Align_interface::get_minimum_translations_without_min_dist (Grob *me,
 //   else centered dynamics will break when there is a fixed alignment).
 vector<Real>
 Align_interface::internal_get_minimum_translations (Grob *me,
-                                                    vector<Grob *> const &elems,
+                                                    vector<Grob *> const &all_grobs,
                                                     Axis a,
                                                     bool include_fixed_spacing,
                                                     bool pure, int start, int end)
@@ -192,14 +204,15 @@ Align_interface::internal_get_minimum_translations (Grob *me,
 
   Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"),
                                            DOWN);
+  vector<Grob *> elems (all_grobs); // writable copy
+  vector<Skyline_pair> skylines;
 
-  Grob *other_common = common_refpoint_of_array (elems, me, other_axis (a));
+  get_skylines (me, &elems, a, pure, start, end, &skylines);
 
   Real where = 0;
   Real default_padding = robust_scm2double (me->get_property ("padding"), 0.0);
   vector<Real> translates;
   Skyline down_skyline (stacking_dir);
-  Grob *last_nonempty_element = 0;
   Real last_spaceable_element_pos = 0;
   Grob *last_spaceable_element = 0;
   Skyline last_spaceable_skyline (stacking_dir);
@@ -209,18 +222,14 @@ Align_interface::internal_get_minimum_translations (Grob *me,
       Real dy = 0;
       Real padding = default_padding;
 
-      Skyline_pair skyline = get_skylines (elems[j], a, other_common, pure, start, end);
-
-      if (skyline.is_empty ())
-        dy = 0.0;
-      else if (!last_nonempty_element)
-        dy = skyline[-stacking_dir].max_height () + padding;
+      if (j == 0)
+        dy = skylines[j][-stacking_dir].max_height () + padding;
       else
         {
-          SCM spec = Page_layout_problem::get_spacing_spec (last_nonempty_element, elems[j], pure, start, end);
+          SCM spec = Page_layout_problem::get_spacing_spec (elems[j - 1], elems[j], pure, start, end);
           Page_layout_problem::read_spacing_spec (spec, &padding, ly_symbol2scm ("padding"));
 
-          dy = down_skyline.distance (skyline[-stacking_dir]) + padding;
+          dy = down_skyline.distance (skylines[j][-stacking_dir]) + padding;
 
           Real spec_distance = 0;
           if (Page_layout_problem::read_spacing_spec (spec, &spec_distance, ly_symbol2scm ("minimum-distance")))
@@ -240,7 +249,7 @@ Align_interface::internal_get_minimum_translations (Grob *me,
               Page_layout_problem::read_spacing_spec (spec,
                                                       &spaceable_padding,
                                                       ly_symbol2scm ("padding"));
-              dy = max (dy, (last_spaceable_skyline.distance (skyline[-stacking_dir])
+              dy = max (dy, (last_spaceable_skyline.distance (skylines[j][-stacking_dir])
                              + stacking_dir * (last_spaceable_element_pos - where) + spaceable_padding));
 
               Real spaceable_min_distance = 0;
@@ -254,9 +263,12 @@ Align_interface::internal_get_minimum_translations (Grob *me,
             }
         }
 
+      if (isinf (dy)) /* if the skyline is empty, maybe max_height is infinity_f */
+        dy = 0.0;
+
       dy = max (0.0, dy);
       down_skyline.raise (-stacking_dir * dy);
-      down_skyline.merge (skyline[stacking_dir]);
+      down_skyline.merge (skylines[j][stacking_dir]);
       where += stacking_dir * dy;
       translates.push_back (where);
 
@@ -267,19 +279,32 @@ Align_interface::internal_get_minimum_translations (Grob *me,
           last_spaceable_element_pos = where;
           last_spaceable_skyline = down_skyline;
         }
-      if (!skyline.is_empty ())
-        last_nonempty_element = elems[j];
+    }
+
+  // So far, we've computed the translates for all the non-empty elements.
+  // Here, we set the translates for the empty elements: an empty element
+  // gets the same translation as the last non-empty element before it.
+  vector<Real> all_translates;
+  if (!translates.empty ())
+    {
+      Real w = translates[0];
+      for (vsize i = 0, j = 0; j < all_grobs.size (); j++)
+        {
+          if (i < elems.size () && all_grobs[j] == elems[i])
+            w = translates[i++];
+          all_translates.push_back (w);
+        }
     }
 
   if (pure)
     {
       SCM mta = me->get_property ("minimum-translations-alist");
       mta = scm_cons (scm_cons (scm_cons (scm_from_int (start), scm_from_int (end)),
-                                ly_floatvector2scm (translates)),
+                                ly_floatvector2scm (all_translates)),
                       mta);
       me->set_property ("minimum-translations-alist", mta);
     }
-  return translates;
+  return all_translates;
 }
 
 void
index 00b9081b3e34889ed1d6cf26323b7d6efe3e3e2a..846e4a245c6d772cb7ec5097fbfe80a626bf33a0 100644 (file)
@@ -177,14 +177,18 @@ Beam_engraver::typeset_beam ()
 {
   if (finished_beam_)
     {
-      if (!finished_beam_->get_bound (RIGHT))
-        finished_beam_->set_bound (RIGHT, finished_beam_->get_bound (LEFT));
-      if (forced_direction_)
+      Grob *stem = finished_beam_->get_bound (RIGHT);
+      if (!stem)
         {
-          Grob *stem = finished_beam_->get_bound (RIGHT);
-          set_grob_direction (stem, forced_direction_);
-          forced_direction_ = CENTER;
+          stem = finished_beam_->get_bound (LEFT);
+          if (stem)
+            finished_beam_->set_bound (RIGHT, stem);
         }
+
+      if (stem && forced_direction_)
+        set_grob_direction (stem, forced_direction_);
+
+      forced_direction_ = CENTER;
       finished_beam_info_->beamify (finished_beaming_options_);
 
       Beam::set_beaming (finished_beam_, finished_beam_info_);
@@ -260,6 +264,14 @@ Beam_engraver::acknowledge_stem (Grob_info info)
   if (!valid_start_point ())
     return;
 
+  // It's suboptimal that we don't support callbacks returning ##f,
+  // but this makes beams have no effect on "stems" reliably in
+  // TabStaff when \tabFullNotation is switched off: the real stencil
+  // callback for beams is called quite late in the process, and we
+  // don't want to trigger it early.
+  if (scm_is_false (beam_->get_property_data ("stencil")))
+    return;
+
   Item *stem = dynamic_cast<Item *> (info.grob ());
   if (Stem::get_beam (stem))
     return;
index ac845103ea8f56c75d608da171224756b557314e..c590802675f8ac188a0c8e6e0df03f5e09a0aed4 100644 (file)
@@ -651,7 +651,7 @@ Beam_scoring_problem::calc_concaveness ()
   if (scm_is_number (conc))
     return scm_to_double (conc);
 
-  if (is_knee_)
+  if (is_knee_ || is_xstaff_)
     return 0.0;
 
   Direction beam_dir = CENTER;
index 8d44ca8f85c67d43c4ee5ab596839e2cd40e37cf..491ea8f0d864e4ffc0cbe729f5b0e0d4d8f25b12 100644 (file)
@@ -425,9 +425,19 @@ Context::get_default_interpreter (const string &context_id)
           warning (_f ("cannot find or create: `%s'", name.c_str ()));
           t = unsmob_context_def (this->definition_);
         }
-
-      Context *tg = create_context (t, context_id, SCM_EOL);
-      return tg->get_default_interpreter (context_id);
+      if (scm_is_symbol (t->get_default_child (SCM_EOL)))
+        {
+          Context *tg = create_context (t, "\\new", SCM_EOL);
+          return tg->get_default_interpreter (context_id);
+        }
+      return create_context (t, context_id, SCM_EOL);
+    }
+  else if (!context_id.empty () && context_id != id_string ())
+    {
+      if (daddy_context_ && !dynamic_cast<Global_context *> (daddy_context_))
+        return daddy_context_->get_default_interpreter (context_id);
+      warning (_f ("cannot find or create new Bottom = \"%s\"",
+                   context_id.c_str ()));
     }
   return this;
 }
index c492e59c5540809829324fbf50bdcb6ad8f4ba88..0a718f8f025fde752d3ccac7dc92237cefc51bf9 100644 (file)
@@ -380,7 +380,7 @@ Dynamic_engraver::typeset_all ()
       else if (!r && !l)
         {
           /*
-            This is a isolated dynamic apparently, and does not even have
+            This is an isolated dynamic apparently, and does not even have
             any interesting support item.
           */
           Grob *cc = unsmob_grob (get_property ("currentMusicalColumn"));
index 2fddd980b7918ab0006011e9643a8c2a212782e4..2776c8110502b678f061f4f2a597e77dae5bb2c9 100644 (file)
@@ -28,7 +28,7 @@
 #include <set>
 
 /*
-  The definition of a interpretation context as given in the
+  The definition of an interpretation context as given in the
   input. The lists are stored in order of definition.
 */
 struct Context_def
index aaecc3d923cd7b73469fa536d16f59dc753875cd..04168f420916b1d36063f1f2dd2a6ac27880a48f 100644 (file)
@@ -23,7 +23,7 @@
 #include "simple-music-iterator.hh"
 
 /**
-   Walk through a Event_chord
+   Walk through an Event_chord
 */
 class Event_chord_iterator : public Simple_music_iterator
 {
index 0e6729a81f5a34184c77aa48d8ea14f0f838f3a7..16016256903542770862e9c613591374afb46af2 100644 (file)
@@ -25,7 +25,7 @@
 #include "grob-info.hh"
 #include "translator.hh"
 
-/* Convert a music definition into a audio representation.
+/* Convert a music definition into an audio representation.
    A baseclass.  */
 class Performer : public Translator
 {
index 9941bc13c2abf79bc36fd25f952a084633d6e635..9cc808dde4491c11f87e928b001d1be1deedca0c 100644 (file)
@@ -43,7 +43,7 @@ Item::Item (SCM s)
 }
 
 /**
-   Item copy ctor.  Copy nothing: everything should be a elt property
+   Item copy ctor.  Copy nothing: everything should be an elt property
    or a special purpose pointer (such as broken_to_drul_[]) */
 Item::Item (Item const &s)
   : Grob (s)
index 18b999da82f20f2a3045f796b37322ff5fd3d65d..cebbd19627190c2504fbe5b547f8be83435cd16f 100644 (file)
@@ -736,10 +736,11 @@ BOM_UTF8  \357\273\277
                        {
                                LexerError (_ ("Unfinished main input").c_str ());
                                do {
-                                       pop_state ();
+                                       yy_pop_state ();
                                } while (YYSTATE != maininput);
                        }
-                       pop_state ();
+                       extra_tokens_ = SCM_EOL;
+                       yy_pop_state ();
                }
                if (!close_input () || !is_main_input_)
                /* Returns YY_NULL */
@@ -890,7 +891,9 @@ Lily_lexer::pop_state ()
        if (YYSTATE == notes || YYSTATE == chords)
                pitchname_tab_stack_ = scm_cdr (pitchname_tab_stack_);
 
-       yy_pop_state ();
+       // don't cross the maininput threshold
+       if (YYSTATE != maininput)
+               yy_pop_state ();
 
        if (extra) {
                hidden_state_ = YYSTATE;
index 11d8d17125991e7a2eb3510ec3592b49f2335cc3..a99dffcf3889056a2e4e01d128fd67639acc1bf4 100644 (file)
@@ -523,6 +523,10 @@ scm_function_call:
 embedded_lilypond:
        /* empty */
        {
+               // FIXME: @$ does not contain a useful source location
+               // for empty rules, and the only token in the whole
+               // production, EMBEDDED_LILY, is synthetic and also
+               // contains no source location.
                $$ = MAKE_SYNTAX ("void-music", @$);
        }
        | identifier_init
@@ -622,6 +626,7 @@ context_def_spec_block:
        CONTEXT '{' context_def_spec_body '}'
                {
                $$ = $3;
+               unsmob_context_def ($$)->origin ()->set_spot (@$);
        }
        ;
 
@@ -659,11 +664,9 @@ context_mod_embedded:
 context_def_spec_body:
        /**/ {
                $$ = Context_def::make_scm ();
-               unsmob_context_def ($$)->origin ()->set_spot (@$);
        }
        | CONTEXT_DEF_IDENTIFIER {
                $$ = $1;
-               unsmob_context_def ($$)->origin ()->set_spot (@$);
        }
        | context_def_spec_body context_mod {
                if (!SCM_UNBNDP ($2))
@@ -690,6 +693,7 @@ context_def_spec_body:
 book_block:
        BOOK '{' book_body '}'  {
                $$ = $3;
+               unsmob_book ($$)->origin ()->set_spot (@$);
                pop_paper (parser);
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), SCM_BOOL_F);
        }
@@ -702,7 +706,6 @@ book_body:
        {
                Book *book = new Book;
                init_papers (parser);
-               book->origin ()->set_spot (@$);
                book->paper_ = dynamic_cast<Output_def*> (unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
                book->paper_->unprotect ();
                push_paper (parser, book->paper_);
@@ -711,7 +714,6 @@ book_body:
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $$);
        }
        | BOOK_IDENTIFIER {
-               unsmob_book ($1)->origin ()->set_spot (@$);
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $1);
        }
        | book_body paper_block {
@@ -771,6 +773,7 @@ book_body:
 bookpart_block:
        BOOKPART '{' bookpart_body '}' {
                $$ = $3;
+               unsmob_book ($$)->origin ()->set_spot (@$);
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), SCM_BOOL_F);
        }
        ;
@@ -778,12 +781,10 @@ bookpart_block:
 bookpart_body:
        {
                Book *book = new Book;
-               book->origin ()->set_spot (@$);
                 $$ = book->unprotect ();
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $$);
        }
        | BOOK_IDENTIFIER {
-               unsmob_book ($1)->origin ()->set_spot (@$);
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $1);
        }
        | bookpart_body paper_block {
@@ -946,16 +947,7 @@ output_def_head_with_mode_switch:
 
 music_or_context_def:
        music_arg
-       {
-               parser->lexer_->pop_state ();
-       }
-       | CONTEXT
-       {
-               parser->lexer_->pop_state ();
-       } '{' context_def_spec_body '}'
-       {
-               $$ = $4;
-       }
+       | context_def_spec_block
        ;
 
 output_def_body:
@@ -982,6 +974,7 @@ output_def_body:
                parser->lexer_->push_note_state (nn);
        } music_or_context_def
        {
+               parser->lexer_->pop_state ();
                if (unsmob_context_def ($3))
                        assign_context_def (unsmob_output_def ($1), $3);
                else {
@@ -1131,7 +1124,11 @@ simple_music:
        ;
 
 context_modification:
-        WITH { parser->lexer_->push_initial_state (); } '{' context_mod_list '}'
+        WITH
+       {
+               SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
+               parser->lexer_->push_note_state (nn);
+       } '{' context_mod_list '}'
         {
                 parser->lexer_->pop_state ();
                 $$ = $4;
@@ -1144,8 +1141,12 @@ context_modification:
         {
                 $$ = $1;
         }
-       | WITH embedded_scm_closed
+       | WITH context_modification_arg
        {
+               if (unsmob_music ($2)) {
+                       SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
+                       $2 = scm_call_2 (proc, parser->self_scm (), $2);
+               }
                if (unsmob_context_mod ($2))
                        $$ = $2;
                else {
@@ -1155,6 +1156,11 @@ context_modification:
        }
         ;
 
+context_modification_arg:
+       embedded_scm_closed
+       | MUSIC_IDENTIFIER
+       ;
+
 optional_context_mod:
         /**/ {
             $$ = SCM_EOL;
index e3830d3d2f7d5484f8e3291e58385808aa64f491..54b5cb162b5c25739ddd15a7061062e9e75c38f6 100644 (file)
@@ -360,8 +360,8 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i
     }
 
   /*
-    Maintain a minimum distance to the staff. This is similar to side
-    position with padding, but it will put adjoining objects on a row if
+    Ensure 'staff-padding' from my refpoint to the staff.  This is similar to
+    side-position with padding, but it will put adjoining objects on a row if
     stuff sticks out of the staff a little.
   */
   Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
@@ -404,7 +404,7 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i
           Real staff_position = staff->maybe_pure_coordinate (common, Y_AXIS, pure, start, end);
           Interval staff_extent = staff->maybe_pure_extent (staff, a, pure, start, end);
           Real diff = (dir * staff_extent[dir] + staff_padding
-                       - dir * (total_off + iv[-dir])
+                       - dir * total_off
                        + dir * (staff_position - parent_position));
           total_off += dir * max (diff, 0.0);
         }
index 49f42ea4a6d3e4caa98f3c8b75a795825bbf5f7d..e8bedd2e70bab0c558525aa0f26a544b0c6b1d58 100644 (file)
@@ -129,7 +129,7 @@ Staff_spacing::get_spacing (Grob *me, Grob *right_col, Real situational_space)
       /*
         TODO:
 
-        Should  insert a adjustable space here? For excercises, you might want to
+        Should insert an adjustable space here? For exercises, you might want to
         use a staff without a clef in the beginning.
       */
 
index d211dcae38f55b39c91cb9095791816eb07396cc..1eccaabc06ffb663718f2b65fbcf5bfc4f2ce1c9 100644 (file)
@@ -92,8 +92,10 @@ Tuplet_bracket::parallel_beam (Grob *me_grob, vector<Grob *> const &cols,
 {
   Spanner *me = dynamic_cast<Spanner *> (me_grob);
 
-  if (me->get_bound (LEFT)->break_status_dir ()
-      || me->get_bound (RIGHT)->break_status_dir ())
+  Item *left = me->get_bound (LEFT);
+  Item *right = me->get_bound (RIGHT);
+  if (!left || left->break_status_dir ()
+      || !right || right->break_status_dir ())
     return 0;
 
   Drul_array<Grob *> stems (Note_column::get_stem (cols[0]),
index 4348044fbe002c5cc15f6a69802f4839766e536d..1fc30d898a178ef27e464b57fac4b925d1e4836c 100644 (file)
@@ -107,7 +107,7 @@ Tuplet_engraver::listen_tuplet_span (Stream_event *ev)
           tuplets_.pop_back ();
         }
       else if (!to_boolean (get_property ("skipTypesetting")))
-        ev->origin ()->warning (_ ("No tuplet to end"));
+        ev->origin ()->debug_output (_ ("No tuplet to end"));
     }
   else
     ev->origin ()->programming_error ("direction tuplet-span-event_ invalid.");
@@ -155,7 +155,10 @@ Tuplet_engraver::process_music ()
                                      stopped_tuplets_[i].bracket_->get_bound (LEFT));
                 }
               else
-                programming_error ("stopped tuplet bracket has neither left nor right bound");
+                {
+                  warning ("omitting tuplet bracket with neither left nor right bound");
+                  continue;
+                }
             }
           // todo: scrap last_tuplets_, use stopped_tuplets_ only.
           // clear stopped_tuplets_ at start_translation_timestep
index 2372b511f20d306d9152a3daa229c6e4e8a0ba67..9b1485777c962ecbfa0f89a731e036211afb3218 100644 (file)
@@ -166,7 +166,7 @@ Vaticana_ligature_engraver::need_extra_horizontal_space (int prev_prefix_set, in
 {
   if (prev_prefix_set & VIRGA)
     /*
-     * After a virga, make a an additional small space such that the
+     * After a virga, make an additional small space such that the
      * appendix on the right side of the head does not touch the
      * following head.
      */
@@ -181,7 +181,7 @@ Vaticana_ligature_engraver::need_extra_horizontal_space (int prev_prefix_set, in
 
   if ((context_info & FLEXA_LEFT) && ! (context_info & PES_UPPER))
     /*
-     * Before a flexa (but not within a torculus), make a an
+     * Before a flexa (but not within a torculus), make an
      * additional small space such that the appendix on the left side
      * of the flexa does not touch the this head.
      */
index 8e3ef0e7ef10ffa3ac1a0538b92bb69bf2fd431a..816bb2f0bf67f55de90b089c2a4e2b9c1972b979 100644 (file)
@@ -16,7 +16,7 @@
 %%%% You should have received a copy of the GNU General Public License
 %%%% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-\version "2.17.11"
+\version "2.17.14"
 
 %%
 %% setup for Request->Element conversion.
index d374e5ca7339d97b03dace3d413b210eb5ee2174..a86b198fe3301e241bd16e2689661efb51768a7b 100644 (file)
@@ -2,7 +2,7 @@
 .SUFFIXES: .html .info .texi .texinfo
 
 # Explicitly list the dependencies on generated content
-$(outdir)/web.texi: $(outdir)/weblinks.itexi
+$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi $(outdir)/version.itexi
 
 $(top-build-dir)/Documentation/$(outdir)/%/index.$(ISOLANG).html: $(outdir)/%/index.html $(TRANSLATION_LILY_IMAGES)
        mkdir -p $(dir $@)
@@ -32,7 +32,7 @@ $(outdir)/%.png: $(top-build-dir)/Documentation/$(outdir)/%.png
 $(MASTER_TEXI_FILES): $(ITELY_FILES) $(ITEXI_FILES) $(outdir)/pictures
 
 $(outdir)/pictures:
-       $(MAKE) -C $(top-build-dir)/Documentation/pictures WWW-1
+       $(MAKE) -C $(top-build-dir)/Documentation/pictures out=www WWW-1
        ln -sf $(top-build-dir)/Documentation/pictures/$(outdir) $@
 
 $(TRANSLATION_LILY_IMAGES): $(MASTER_TEXI_FILES)
index cd5001174ae660d762b3b0ee8e05869c75f73c36..875617a5031db393e35db55c588ee500903a8e61 100644 (file)
@@ -2,10 +2,10 @@ default:
 
 ifeq ($(out),www)
 ifneq ($(NO_PDF_FILES),)
-local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(XREF_MAPS_FILES)
+local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(XREF_MAPS_FILES) $(TRANSLATION_LILY_IMAGES)
 endif
 ifeq ($(NO_PDF_FILES),)
-local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES)
+local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES) $(TRANSLATION_LILY_IMAGES)
 endif
 
 local-WWW-2: $(DEEP_HTML_FILES) $(BIG_PAGE_HTML_FILES) $(DOCUMENTATION_LOCALE_TARGET)
index e279c6d88d13a562c3d20b58d42cfe91a9dc43ad..48cfcdbb123c9fd43313373e492ca1553cb867ed 100644 (file)
@@ -26,12 +26,14 @@ PDF_FILES := $(TELY_FILES:%.tely=$(top-build-dir)/Documentation/$(outdir)/%.$(IS
 ITELY_FILES := $(call src-wildcard,*.itely)
 ITEXI_FILES := $(call src-wildcard,*.itexi)
 
-DOCUMENTATION_INCLUDES = \
+DOCUMENTATION_INCLUDES += \
+  -I $(top-build-dir)/Documentation/$(outdir) \
+  -I $(top-build-dir)/Documentation/snippets/out \
   -I $(top-src-dir)/Documentation/$(ISOLANG)/included \
+  -I $(top-src-dir)/Documentation/included \
   -I $(top-src-dir)/Documentation \
-  -I $(top-build-dir)/Documentation/$(outdir)
+  -I $(top-src-dir)/input/regression
 
-LILYPOND_BOOK_INCLUDES += $(DOCUMENTATION_INCLUDES)
 MAKEINFO_FLAGS += --enable-encoding $(DOCUMENTATION_INCLUDES)
 MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS)
 
index 985197a4db640f6bc91eeb9ac44803bdcdb294dc..e67a570c92706d79e0913034b599577ef3e656ce 100644 (file)
@@ -27,13 +27,7 @@ MUSICXML2LY = $(script-dir)/musicxml2ly.py
 CONVERT_LY = $(script-dir)/convert-ly.py
 LILYPOND_BOOK = $(script-dir)/lilypond-book.py
 
-LILYPOND_BOOK_INCLUDES = -I $(outdir) -I $(src-dir) -I $(input-dir) \
- -I $(top-src-dir)/Documentation -I $(top-build-dir)/Documentation/snippets/out \
- -I $(input-dir)/regression/ -I $(top-src-dir)/Documentation/included/ \
- -I $(top-build-dir)/mf/$(outconfbase)/ \
- -I $(top-build-dir)/mf/out/ \
- -I $(top-src-dir)/Documentation/pictures \
- -I $(top-build-dir)/Documentation/pictures/$(outdir)
+LILYPOND_BOOK_INCLUDES = -I $(src-dir) $(DOCUMENTATION_INCLUDES)
 
 ## override from cmd line to speed up. 
 ANTI_ALIAS_FACTOR=2
index f81b56dabef7f8de1bd4cd73b9bec5c7670b21bd..9da619c823df9cda42b3874466293b928b3ab900 100644 (file)
@@ -7,7 +7,8 @@ STEPMAKE_TEMPLATES = metafont \
                     install-out
 LOCALSTEPMAKE_TEMPLATES = lilypond
 
-# We don't use $(MF_FILES), because there's more .mf cruft here
+# These are the main .mf files.  We don't use $(MF_FILES) here,
+# because there are more .mf files, input'ed into the main files.
 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) \
@@ -35,15 +36,10 @@ OTF_TABLES = $(STAFF_SIZES:%=$(outdir)/feta%.otf-table) \
 SVG_FILES = $(OTF_FILES:%.otf=%.svg)
 WOFF_FILES = $(OTF_FILES:%.otf=%.woff)
 
-FC_FIND = $(shell $(FCLIST) --verbose 'Century Schoolbook L:style=$(1)' \
-                 | grep 'file:' \
-                 | sed 's/.*"\([^"]*\)".*/\1/g')
-
 NCSB_OTFS = $(addprefix $(outdir)/,CenturySchL-Ital.otf \
                                   CenturySchL-BoldItal.otf \
                                   CenturySchL-Roma.otf \
                                   CenturySchL-Bold.otf)
-NCSB_INSTALL_DIR = $(local_lilypond_datadir)/fonts/otf
 
 LOG_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.log)
 LISP_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.lisp)
@@ -99,9 +95,10 @@ $(PE_SCRIPTS): $(buildscript-dir)/gen-emmentaler-scripts
        $< --dir=$(outdir)
 
 
-# Make tfm files first, log files last,
-# so that normally log files aren't made twice
-ALL_GEN_FILES = $(LOG_FILES) \
+# Generate emmentaler-*.pe scripts first, and *.otf, *.svg, *.woff files last,
+# so that normally these files aren't regenerated on a subsequent call to make.
+ALL_GEN_FILES = $(PE_SCRIPTS) \
+               $(LOG_FILES) \
                $(ENC_FILES) \
                $(LISP_FILES) \
                $(OTF_TABLES) \
index dbeb87530d11880a501cf03f46059bb4b00439f7..cf1bfae111f97d683063ec938276762e038ed450 100644 (file)
@@ -166,7 +166,7 @@ def draw_neomensural_longa (expr wid, holeheight, direction) =
 enddef;
 
 
-def draw_neomensural_black_head (expr width, height) =
+def draw_neomensural_black_head (expr width, height, concaveness) =
        save head_width, head_height, stem_width;
        save ne, nw, ne_dist, nw_dist;
        pair ne, nw, ne_dist, nw_dist;
@@ -197,25 +197,25 @@ def draw_neomensural_black_head (expr width, height) =
        ne_dist := (nw rotated -90) * blot_diameter / 2;
 
        fill lft z1
-            .. (z1 + nw_dist)
-            -- (z2 + nw_dist)
+            .. (z1 + nw_dist){ ne rotated -concaveness }
+            .. { ne rotated concaveness }(z2 + nw_dist)
             .. top z2
-            .. (z2 + ne_dist)
-            -- (z3 + ne_dist)
+            .. (z2 + ne_dist){ nw rotated (180 - concaveness) }
+            .. { nw rotated (180 + concaveness) }(z3 + ne_dist)
             .. rt z3
-            .. (z3 - nw_dist)
-            -- (z4 - nw_dist)
+            .. (z3 - nw_dist){ ne rotated (180 - concaveness) }
+            .. { ne rotated (180 + concaveness) }(z4 - nw_dist)
             .. bot z4
-            .. (z4 - ne_dist)
-            -- (z1 - ne_dist)
+            .. (z4 - ne_dist){ nw  rotated -concaveness }
+            .. { nw  rotated concaveness }(z1 - ne_dist)
             .. cycle;
 
        labels (1, 2, 3, 4);
 enddef;
 
 
-def draw_neomensural_open_head (expr width, height)=
-       draw_neomensural_black_head (width, height);
+def draw_neomensural_open_head (expr width, height, concaveness)=
+       draw_neomensural_black_head (width, height, concaveness);
 
        save headNW, headSW, stem_width;
 
@@ -317,15 +317,15 @@ save nm_height, nm_width;
 nm_height := noteheight#;
 nm_width := staff_space#;
 fet_beginchar ("Neo-mensural semibrevis head", "s0neomensural");
-       draw_neomensural_open_head (nm_width, nm_height);
+       draw_neomensural_open_head (nm_width, nm_height, 0);
 fet_endchar;
 
 fet_beginchar ("Neo-mensural minima head", "s1neomensural");
-       draw_neomensural_open_head (nm_width, nm_height);
+       draw_neomensural_open_head (nm_width, nm_height, 0);
 fet_endchar;
 
 fet_beginchar ("Neo-mensural semiminima head", "s2neomensural");
-       draw_neomensural_black_head (nm_width, nm_height);
+       draw_neomensural_black_head (nm_width, nm_height, 0);
 fet_endchar;
 
 %%%%%%%%
@@ -342,13 +342,13 @@ fet_endchar;
 %
 
 fet_beginchar ("Harmonic notehead (Neo-mensural open)", "s0harmonic");
-       draw_neomensural_open_head (1.3 staff_space#, 1.3 noteheight#);
+       draw_neomensural_open_head (1.3 staff_space#, 1.3 noteheight#, 5);
        charwx := head_width#;
        charwy := 0;
 fet_endchar;
 
 fet_beginchar ("Harmonic notehead (Neo-mensural black)", "s2harmonic");
-       draw_neomensural_black_head (1.3 staff_space#, 1.3 noteheight#);
+       draw_neomensural_black_head (1.3 staff_space#, 1.3 noteheight#, 5);
        charwx := head_width#;
        charwy := 0;
 fet_endchar;
@@ -737,15 +737,15 @@ petrucci_height := 1.4 noteheight#;
 petrucci_width := .72 petrucci_height;
 
 fet_beginchar ("Petrucci semibrevis head", "s0petrucci");
-       draw_neomensural_open_head (petrucci_width, petrucci_height);
+       draw_neomensural_open_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 fet_beginchar ("Petrucci minima head", "s1petrucci");
-       draw_neomensural_open_head (petrucci_width, petrucci_height);
+       draw_neomensural_open_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 fet_beginchar ("Petrucci semiminima head", "s2petrucci");
-       draw_neomensural_black_head (petrucci_width, petrucci_height);
+       draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 
@@ -754,15 +754,15 @@ fet_endchar;
 %
 
 fet_beginchar ("Petrucci colored semibrevis head", "s0blackpetrucci");
-       draw_neomensural_black_head (petrucci_width, petrucci_height);
+       draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 fet_beginchar ("Petrucci colored minima head", "s1blackpetrucci");
-       draw_neomensural_black_head (petrucci_width, petrucci_height);
+       draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 fet_beginchar ("Petrucci colored semiminima head", "s2blackpetrucci");
-       draw_neomensural_black_head (petrucci_width, petrucci_height);
+       draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 
index ba65d9683d3fcdb13c9fc5d40f09ce264afb0a2b..1ab911cca2c3f576f103e3eeee8566bfcd0bc481 100644 (file)
@@ -3521,6 +3521,28 @@ def conv(str):
                   r"\1/\2", str)
     return str
 
+@rule((2, 17, 14), r"\accepts ... -> \accepts ... \defaultchild ...")
+def conv(str):
+    def matchaccepts(m):
+        # First weed out definitions starting from an existing
+        # definition: we assume that the inherited \defaultchild is
+        # good enough for our purposes.  Heuristic: starts with a
+        # backslash and an uppercase letter.
+        if re.match (r"\s*\\[A-Z]", m.group (1)):
+            return m.group (0)
+        # existing defaultchild obviously trumps all
+        if re.search (r"\\defaultchild[^-_a-zA-Z]", m.group (1)):
+            return m.group (0)
+        # take the first \\accepts if any and replicate it
+        return re.sub ("(\r?\n[ \t]*|[ \t]+)"
+                       + r"""\\accepts(\s+(?:#?".*?"|[-_a-zA-Z]+))""",
+                       r"\g<0>\1\\defaultchild\2",
+                       m.group (0), 1)
+
+    str = re.sub (r"\\context\s*@?\{(" + brace_matcher (20) + ")\}",
+                  matchaccepts, str)
+    return str
+
 @rule((2, 17, 15), r"""#(ly:set-option 'old-relative)
 \relative -> \relative c'""")
 def conv(str):
@@ -3641,6 +3663,15 @@ def conv(str):
     str = re.sub (words + "|" + matchstring, wordreplace, str)
     return str
 
+@rule((2, 17, 27), r'''\stringTuning \notemode -> \stringTuning''')
+def conv(str):
+    str = re.sub (r"\\stringTuning\s*\\notemode(\s*)@?\{\s*(.*?)\s*@?}",
+                  r"\\stringTuning\1\2", str)
+    if re.search (r'\bstaff-padding\b', str):
+        stderr_write (NOT_SMART % "staff-padding")
+        stderr_write (_ ("Staff-padding now controls the distance to the baseline, not the nearest point."))
+    return str
+
 # Guidelines to write rules (please keep this at the end of this file)
 #
 # - keep at most one rule per version; if several conversions should be done,
index b432386372589e78b246014ff56be8064d3752a5..fedd21be9a750701645c9d0d063e61d420ac43a3 100644 (file)
@@ -801,7 +801,7 @@ no elements."
 ;; the size of the staff lines is evaluated as 0, which results in a
 ;; solid span bar line with faulty y coordinate.
 ;;
-;; This routine was originally by Juergen Reuter, but it was on the
+;; This routine was originally by Juergen Reuter, but it was on the
 ;; bulky side. Rewritten by Han-Wen. Ported from c++ to Scheme by Marc Hohl.
 (define-public (ly:span-bar::print grob)
   "The print routine for span bars."
index 040f3fc2dd54d6adbe899c9f643a1df50c07c9ed..097ffdc370f25c92894f330d80aa1aef15d5b923 100644 (file)
         (color . ,(grob::inherit-parent-property
                    X 'color))
         (self-alignment-X . ,CENTER)
-        (staff-padding . 0.2)
+        (staff-padding . 0.7)
         (stencil . ,ly:text-interface::print)
         (X-offset . ,(ly:make-simple-closure
                       `(,+
         (positioning-done . ,ly:script-interface::calc-positioning-done)
         (right-padding . 0.5)
         (self-alignment-X . ,CENTER)
-        (self-alignment-Y . ,CENTER)
         (stencil . ,ly:text-interface::print)
         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
         (Y-extent . ,grob::always-Y-extent-from-stencil)
         (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
-        (Y-offset . ,self-alignment-interface::y-aligned-on-self)
+        (Y-offset . ,(scale-by-font-size -0.6)) ; center on an 'm'
         (meta . ((class . Item)
                  (interfaces . (dynamic-interface
                                 dynamic-text-interface
         (outside-staff-priority . 400)
         (padding . 0.5)
         (shorten-pair . (0.0 . -0.6))
-        (staff-padding . 1.0)
+        (staff-padding . 2.0)
         (stencil . ,ly:ottava-bracket::print)
         (style . dashed-line)
         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
index 88d33ecda9ea4e886630e41100b9daab75985b0e..be87af5191aeb0be36b9191a8d91abe8657eaf00 100644 (file)
@@ -418,7 +418,7 @@ line thickness and padding around the markup.
   "
 @cindex drawing oval around text
 
-Draw a oval around @var{arg}.  Use @code{thickness},
+Draw an oval around @var{arg}.  Use @code{thickness},
 @code{x-padding}, @code{x-padding} and @code{font-size} properties to determine
 line thickness and padding around the markup.
 
index 4082cc49029666cf0b54c26ee84ef5ea4f2608de..5c9c12538e03b761798e17122d5ac807ac84ce4b 100644 (file)
@@ -28,7 +28,7 @@
    (lambda (x) (apply music-property-description x))
    `(
      (absolute-octave ,integer?
-                      "The absolute octave for a octave check note.")
+                      "The absolute octave for an octave check note.")
      (alteration ,number? "Alteration for figured bass.")
      (alternative-dir ,ly:dir? "Indicates if an AlternativeMusic is the
 First (-1), Middle (0), or Last (1) of group of alternate endings.")
@@ -148,7 +148,7 @@ Options are @code{solo1}, @code{solo2} and @code{unisono}.")
      (pitch ,ly:pitch? "The pitch of this note.")
      (pitch-alist ,list? "A list of pitches jointly forming the scale
 of a key signature.")
-     (pop-first ,boolean? "Do a revert before we try to do a override
+     (pop-first ,boolean? "Do a revert before we try to do an override
 on some grob property.")
      (prob-property ,symbol? "The symbol of the prob property to set.")
      (procedure ,procedure? "The function to run with @code{\\applycontext}.
index 0a796a1981b66b7f147e637ad972dfa1dac09a15..a39ad23002b9bf1d4edbd26bf08d7210dc11812b 100644 (file)
@@ -33,7 +33,7 @@ Syntax: @var{note}@code{\\x}, where @code{\\x} is a dynamic mark like
         ))
 
     (AlternativeEvent
-     . ((description . "Create a alternative event.")
+     . ((description . "Create an alternative event.")
         (types . (general-music event alternative-event))
         ))
 
index be77f2a48fcc86f93df99474ce55985550878ee9..defd663317d7da243e7a8f30f9ed7179a631f49f 100644 (file)
@@ -18,7 +18,7 @@
 ;;; Commentary:
 
 ;;; This file provides the support routines for a guile debugger called
-;;; from a environment controlled by LilyPond.  It works in conjunction
+;;; from an environment controlled by LilyPond.  It works in conjunction
 ;;; with file guile-debugger.ly.
 
 ;;; Code:
index 69a6ad13ffaf886912531f7704772e34a9fc7025..64a113973880e2f11e4b157aba24b6b368b5469b 100644 (file)
@@ -48,16 +48,13 @@ Example:
 (define-public interpret-markup ly:text-interface::interpret-markup)
 
 (define-public (interpret-markup-list layout props markup-list)
-  ;; This relies on the markup list returned by a markup list command
-  ;; to be modifiable
-  (reverse!
-   (fold
-    (lambda (m prev)
-      (if (markup-command-list? m)
-          (reverse! (apply (car m) layout props (cdr m)) prev)
-          (cons (interpret-markup layout props m) prev)))
-    '()
-    markup-list)))
+  (fold-right
+   (lambda (m prev)
+     (if (markup-command-list? m)
+         (append (apply (car m) layout props (cdr m)) prev)
+         (cons (interpret-markup layout props m) prev)))
+   '()
+   markup-list))
 
 (define-public (prepend-alist-chain key val chain)
   (cons (acons key val (car chain)) (cdr chain)))
index 092cf84e4b46a5e2c2f19d7fdc6617dd4da2f543..fb29e73cd2d4cc79d752c1606e77654fce4584d3 100644 (file)
@@ -973,24 +973,37 @@ predicates require the parameter to be entered as Scheme expression.
 predicates, to be used in case of a type error in arguments or
 result."
 
+  (define (currying-lambda args doc-string? body)
+    (if (and (pair? args)
+             (pair? (car args)))
+        (currying-lambda (car args) doc-string?
+                         `((lambda ,(cdr args) ,@body)))
+        (if doc-string?
+            `(lambda ,args ,doc-string? ,@body)
+            `(lambda ,args ,@body))))
+
   (set! signature (map (lambda (pred)
                          (if (pair? pred)
                              `(cons ,(car pred)
                                     ,(and (pair? (cdr pred)) (cadr pred)))
                              pred))
                        (cons type signature)))
-  (if (and (pair? body) (pair? (car body)) (eqv? '_i (caar body)))
-      ;; When the music function definition contains a i10n doc string,
-      ;; (_i "doc string"), keep the literal string only
-      (let ((docstring (cadar body))
-            (body (cdr body)))
-        `(ly:make-music-function (list ,@signature)
-                                 (lambda ,args
-                                   ,docstring
-                                   ,@body)))
-      `(ly:make-music-function (list ,@signature)
-                               (lambda ,args
-                                 ,@body))))
+
+  (let ((docstring
+         (and (pair? body) (pair? (cdr body))
+              (if (string? (car body))
+                  (car body)
+                  (and (pair? (car body))
+                       (eq? '_i (caar body))
+                       (pair? (cdar body))
+                       (string? (cadar body))
+                       (null? (cddar body))
+                       (cadar body))))))
+    ;; When the music function definition contains an i10n doc string,
+    ;; (_i "doc string"), keep the literal string only
+    `(ly:make-music-function
+      (list ,@signature)
+      ,(currying-lambda args docstring (if docstring (cdr body) body)))))
 
 (defmacro-public define-music-function rest
   "Defining macro returning music functions.
index e04b298975cde419bfc931c2fbdd34e4d84d574e..33a03139dead37a6f1e6a09d3cf57259ef466e6e 100644 (file)
@@ -854,6 +854,11 @@ and duration-log @var{log}."
    the previous calculated offset value."
   prev-offset)
 
+(define-public (scale-by-font-size x)
+  (ly:make-unpure-pure-container
+    (lambda (grob)
+      (* x (magstep (ly:grob-property grob 'font-size 0))))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 
index 5d40da8cfaaabfeafd3efc7e9368e1497669e4e8..823668830a71ba96d520f48f291f29bd525cf4d2 100644 (file)
@@ -582,7 +582,7 @@ only ~a fret labels provided")
   (make-vcenter-markup
    (format #f "~a" fret-number)))
 
-;; The 5-string banjo has got a extra string, the fifth (duh), which
+;; The 5-string banjo has got an extra string, the fifth (duh), which
 ;; starts at the fifth fret on the neck.  Frets on the fifth string
 ;; are referred to relative to the other frets:
 ;;   the "first fret" on the fifth string is really the sixth fret
index 20d13aa5082d754708d1168f89f749c7b7220d57..498682ef26bad2902abc22f1e4e4090e200567cd 100644 (file)
@@ -80,11 +80,21 @@ class meta_formatter (formatter):
      return str (val2);
 class tempo_formatter (formatter):
    def format_vals (self, val1, val2):
-     return str (val2) + " msec/quarter"
+    return str (ord (val2[0])*65536 + ord (val2[1])*256 + ord (val2[2])) \
+        + " msec/quarter"
 
 class time_signature_formatter (formatter):
    def format_vals (self, val1, val2 = ""):
-     return str (val2)   # TODO
+       from fractions import Fraction
+       # if there are more notated 32nd notes per midi quarter than 8,
+       # we display a fraction smaller than 1 as scale factor.
+       r = Fraction(8, ord (val2[3]))
+       if r == 1:
+           ratio =""
+       else:
+           ratio = " *" + str (r)
+       return str (ord (val2[0])) + "/" + str(1 << ord (val2[1])) + ratio \
+           + ", metronome "  + str (Fraction (ord (val2[2]), 96))
 class key_signature_formatter (formatter):
    def format_vals (self, val1, val2):
        key_names = ['F', 'C', 'G', 'D', 'A', 'E', 'B']
index 0b04186db4b8bde4c9293a4ef0f2e2281e127390..3e527e2eb79bcb6abadc416ba70e52558b4b474b 100644 (file)
@@ -3,6 +3,3 @@ $(outdir)/%: %.m4
 
 %.gz: %
        gzip -c9 $< > $@
-
-$(outdir)/%.css: $(CSS_DIRECTORY)/%.css
-       ln -f $< $@
index 1b998b938dfc3eb6b2c0bbb13dc0aa1c06be10e3..7e29760e42bfe15ef58c9b2ac62f58bf934ae820 100644 (file)
@@ -1,10 +1,12 @@
-.PHONY : all clean bin-clean default dist exe help html lib TAGS\
+.PHONY : all clean bin-clean default dist exe help html lib man TAGS\
         po doc doc-stage-1 WWW-1 WWW-2 WWW-post local-WWW-1 local-WWW-2\
-        log-clean
+        local-all local-clean local-bin-clean local-doc log-clean
 
-all:    default
+all: default
        $(LOOP)
 
+local-all: default
+
 man:
        $(LOOP)
 
@@ -37,8 +39,9 @@ generic-help:
        @echo "Targets specific to current directory:"
 
 help: generic-help local-help
-       @echo "Generic targets that recurse into subdirectories*:"
+       @echo "Generic targets that recurse into subdirectories:"
        @echo "  all          update everything except documentation with images"
+       @echo "               (same as the empty target)"
        @echo "  clean        remove all generated stuff in $(outdir)"
        @echo "  bin-clean    same as clean, except that mf/out is preserved"
        @echo "  doc          update documentation with images in directory \`out-www'"
@@ -52,7 +55,7 @@ help: generic-help local-help
        @echo "         any of the above commands to the current directory."
        @echo
        @echo "Other generic targets:"
-       @echo "  default      same as the empty target"
+       @echo "  default      same as \`make all', but restricted to the current directory"
        @echo "  exe          update all executables"
        @echo "  help         this help"
        @echo "  lib          update all libraries"
index 5b6ad17d91a0a204a1470509e61ea3cdac5e19e7..5be005a1985dc7e998a0d85df79b40c48f4784fe 100644 (file)
@@ -2,13 +2,13 @@
 
 # we want to see botched results as well.
 $(outdir)/%.dvi: %.mf
-       -MFINPUTS=$(src-dir) $(METAFONT) "\scrollmode; input $<;"
+       -$(DO_MF_DEP) MFINPUTS=$(src-dir) $(METAFONT) "\scrollmode; input $<;"
        gftodvi $(basename $<)
        mv $(basename $<).dvi $(outdir)
        rm $(basename $<).*gf
 
 $(outdir)/%.tfm $(outdir)/%.log: %.mf
-       MFINPUTS=$(src-dir) $(METAFONT) "\mode:=$(MFMODE); nonstopmode; input $<;" $(METAFONT_QUIET)
+       $(DO_MF_DEP) MFINPUTS=$(src-dir) $(METAFONT) "\mode:=$(MFMODE); nonstopmode; input $<;" $(METAFONT_QUIET)
 # Let's keep this log output, it saves another mf run.
        mv $(basename $(@F)).log $(basename $(@F)).tfm $(outdir)
        rm -f $(basename $(@F)).*gf  $(basename $(@F)).*pk
@@ -19,7 +19,7 @@ $(outdir)/%.tfm $(outdir)/%.log: %.mf
 # the soft link for mf2pt1.mp is for recent mpost versions
 # which no longer dump a .mem file
 $(outdir)/%.pfb: %.mf $(outdir)/mf2pt1.mem $(outdir)/%.log
-       TMP=`mktemp -d $(outdir)/pfbtemp.$*.XXXXXXXXX` \
+       $(DO_MF_DEP) TMP=`mktemp -d $(outdir)/pfbtemp.$*.XXXXXXXXX` \
        && ( cd $$TMP \
                && ln -s ../mf2pt1.mem . \
                && ln -s ../../mf2pt1.mp . \
index aeb75c5f004cf1ab1da0e78b985dfdd93dab11be..73f35a53ed68cd0490ccaa367b5f58fe83739492 100644 (file)
@@ -15,3 +15,24 @@ METAFONT_QUIET = >/dev/null
 else
 METAFONT_QUIET =
 endif
+
+# Find the metafont file $(1) within the source dirs and return its path.
+# If not found, return $(outdir)/$(1) assuming that it is a generated file.
+find-mf = \
+$(firstword \
+       $(wildcard $(src-dir)/$(1)) \
+       $(wildcard $(top-src-dir)/mf/$(1)) \
+       $(outdir)/$(1) \
+)
+
+# Recursively scan the metafont .mf file $(1) for "input X;"
+# and return all dependencies.
+scan-mf = \
+$(foreach f, $(shell test -f $(1) && sed -ne "/^[[:space:]]*input[[:space:]]/s/^[[:space:]]*input\([^.;]*\)\(.mf;\|;\)/\1.mf/p" $(1)), \
+       $(call find-mf,$(f)) \
+       $(call scan-mf,$(call find-mf,$(f))) \
+)
+
+# Find dependencies for the target $@, based on the metafont source file $<,
+# and write the dependencies to a .dep file.
+DO_MF_DEP = ( echo ./$@: $(call scan-mf,$<) > $(basename $@).dep ) &&
index 838219a673baaf5fc3c74874c35300f08296eea4..058276c2c2f9956d9dfb8452a8a0d9683a068acb 100644 (file)
@@ -24,7 +24,7 @@ endif
        touch $@
 
 # Copy files while tracking their dependencies.
-$(outdir)/%.texi: %.texi
+$(outdir)/%.texi: %.texi $(outdir)/version.itexi
        mkdir -p $(dir $@)
        $(DO_TEXI_DEP) cp -f $< $@
 
index d164356555ded29e50d405e3364a554d27f99f4c..b17824c8d76612536b58e3631bbb86eb1f7844b4 100644 (file)
@@ -20,7 +20,7 @@ $(firstword \
 # Recursively scan the file $(1) for @include, search for included files
 # within the texinfo include dirs, and return all dependencies.
 scan-texi = \
-$(foreach f, $(shell sed -ne "/^@include[[:space:]]/s/@include//p" $(1)), \
+$(foreach f, $(shell test -f $(1) && sed -ne "/^@include[[:space:]]/s/@include//p" $(1)), \
        $(call find-texi,$(f)) \
        $(call scan-texi,$(call find-texi,$(f))) \
 )
@@ -31,8 +31,6 @@ DO_TEXI_DEP = ( echo ./$@: $(call scan-texi,$<) > $(basename $@).dep ) &&
 
 TEXINFO_PAPERSIZE_OPTION= $(if $(findstring $(PAPERSIZE),a4),,-t @afourpaper)
 
-DOCUMENTATION_INCLUDES += -I $(top-src-dir)/Documentation
-
 MAKEINFO_FLAGS += --enable-encoding --error-limit=0 $(DOCUMENTATION_INCLUDES)
 MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS)
 
index f2fc5610ed65d60dd327593b34a07bc2bce5da4b..ca9a782aa17e5212df8abe2d6ee718f8e997c595 100644 (file)
@@ -1,7 +1,3 @@
 TO_TOP_FILES=$(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
 
-DOCUMENTATION_INCLUDES +=\
- -I $(top-src-dir)/Documentation/usage\
- -I $(top-src-dir)/Documentation/contributor\
-
 #