]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/snippets/center-text-below-hairpin-dynamics.ly
Rerun scripts/auxiliar/update-with-convert-ly.sh
[lilypond.git] / Documentation / snippets / center-text-below-hairpin-dynamics.ly
index dda530f46fe9c9637c26b34e55998af081a5cf21..0df124d21e273eff58f6c9999aab805f62e4d0f0 100644 (file)
@@ -1,26 +1,21 @@
-%% Do not edit this file; it is automatically
+%% 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.13.10"
+\version "2.17.6"
 
 \header {
-  lsrtags = "expressive-marks, text"
-
-%% Translation of GIT committish: 4385ed4cc738e164a95798862580b4b86703356f
-  texidoces = "
-Este ejemplo proporciona una función para tipografiar un regulador con
-texto por debajo, como @qq{molto} o @qq{poco}. El ejemplo ilustra
-también cómo modificar la manera en que se imprime normalmente un
-objeto, utilizando código de Scheme.
-
-"
-  doctitlees = "Centrar texto debajo de un regulador"
+  lsrtags = "expressive-marks, really-cool, scheme-language, text"
 
   texidoc = "
 This example provides a function to typeset a hairpin (de)crescendo
 with some additional text below it, such as @qq{molto} or @qq{poco}.
-The example also illustrates how to modify the way an object is
-normally printed, using some Scheme code.
+The added text will change the direction according to the direction of
+the hairpin. The Hairpin is aligned to DynamicText.  The example also
+illustrates how to modify the way an object is normally printed, using
+some Scheme code.
 
 "
   doctitle = "Center text below hairpin dynamics"
@@ -29,17 +24,39 @@ normally printed, using some Scheme code.
 hairpinWithCenteredText =
 #(define-music-function (parser location text) (markup?)
 #{
-  \override Voice.Hairpin #'stencil = #(lambda (grob)
-    (ly:stencil-aligned-to
-     (ly:stencil-combine-at-edge
-      (ly:stencil-aligned-to (ly:hairpin::print grob) X CENTER)
-      Y DOWN
-      (ly:stencil-aligned-to (grob-interpret-markup grob $text) X CENTER))
-     X LEFT))
+  \once \override Voice.Hairpin.after-line-breaking =
+    #(lambda (grob)
+      (let* ((stencil (ly:hairpin::print grob))
+             (par-y (ly:grob-parent grob Y))
+             (dir (ly:grob-property par-y 'direction))
+             (new-stencil (ly:stencil-aligned-to
+                  (ly:stencil-combine-at-edge
+                    (ly:stencil-aligned-to stencil X CENTER)
+                    Y dir
+                    (ly:stencil-aligned-to (grob-interpret-markup grob text) X CENTER))
+                    X LEFT))
+             (staff-space (ly:output-def-lookup (ly:grob-layout grob) 'staff-space))
+             (staff-line-thickness (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
+             (grob-name (lambda (x) (assq-ref (ly:grob-property x 'meta) 'name)))
+             (par-x (ly:grob-parent grob X))
+             (dyn-text (eq? (grob-name par-x) 'DynamicText ))
+             (dyn-text-stencil-x-length (if dyn-text
+                                           (interval-length (ly:stencil-extent (ly:grob-property par-x 'stencil) X))
+                                           0))
+             (x-shift (if dyn-text (- (+ staff-space dyn-text-stencil-x-length) (* 0.5 staff-line-thickness)) 0)))
+
+      (ly:grob-set-property! grob 'Y-offset 0)
+      (ly:grob-set-property! grob 'stencil
+         (ly:stencil-translate-axis
+          new-stencil
+          x-shift X))))
 #})
 
-hairpinMolto = \hairpinWithCenteredText \markup { \italic molto }
-hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo }
+hairpinMolto =
+\hairpinWithCenteredText \markup { \italic molto }
+
+hairpinMore =
+\hairpinWithCenteredText \markup { \larger moltissimo }
 
 \layout { ragged-right = ##f }
 
@@ -47,5 +64,10 @@ hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo }
   \hairpinMolto
   c2\< c\f
   \hairpinMore
-  c2\< c\f
+  c2\ppppp\< c\f
+  \break
+  \hairpinMolto
+  c2^\< c\f
+  \hairpinMore
+  c2\ppppp\< c\f
 }