]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/snippets/new/incipit.ly
Imported Upstream version 2.16.0
[lilypond.git] / Documentation / snippets / new / incipit.ly
index cc217ccba97b2b7d95b537c46b70513f0c67f950..8a22de16c3adf9f52a7bd179f9de423645a71a38 100644 (file)
@@ -1,7 +1,7 @@
-\version "2.14.0"
+\version "2.16.0"
 
 \header {
-  lsrtags = "staff-notation, ancient-notation"
+  lsrtags = "staff-notation, ancient-notation, really-cool"
   texidoc = "
 Incipits can be added using the instrument name grob, but keeping
 separate the instrument name definition and the incipit definition.
@@ -20,35 +20,31 @@ incipit =
     \once \override Staff.InstrumentName #'padding = #0.3
     \once \override Staff.InstrumentName #'stencil =
       #(lambda (grob)
-         (let* ((instrument-name (ly:grob-property grob 'long-text))
-                (layout (ly:output-def-clone (ly:grob-layout grob)))
-                (music (make-sequential-music
-                        (list (context-spec-music
-                               (make-sequential-music
-                                (list (make-property-set
-                                       'instrumentName instrument-name)
-                                      (make-grob-property-set
-                                       'VerticalAxisGroup
-                                       'Y-extent '(-4 . 4))))
-                               'MensuralStaff)
-                              $incipit-music)))
-                (score (ly:make-score music))
-                (mm (ly:output-def-lookup layout 'mm))
-                (indent (ly:output-def-lookup layout 'indent))
-                (width (ly:output-def-lookup layout 'incipit-width))
-                (incipit-width (if (number? width)
-                                   (* width mm)
-                                   (* indent 0.5))))
-
-           (ly:output-def-set-variable! layout 'indent (- indent
-                                                          incipit-width))
-           (ly:output-def-set-variable! layout 'line-width indent)
-           (ly:output-def-set-variable! layout 'ragged-right #f)
-           (ly:output-def-set-variable! layout 'ragged-last #f)
-           (ly:output-def-set-variable! layout 'system-count 1)
-           (ly:score-add-output-def! score layout)
-           (ly:grob-set-property! grob 'long-text
-                                  (markup #:score score))
+        (let* ((instrument-name (ly:grob-property grob 'long-text)))
+          (set! (ly:grob-property grob 'long-text)
+                #{ \markup
+                     \score
+                        {
+                          { \context MensuralStaff \with {
+                               instrumentName = #instrument-name
+                               \override VerticalAxisGroup
+                                #'Y-extent = #'(-4 . 4)
+                            } $incipit-music
+                          }
+                          \layout { $(ly:grob-layout grob)
+                                    line-width = \indent
+                                    indent =
+                               % primitive-eval is probably easiest for
+                               % escaping lexical closure and evaluating
+                               % everything respective to (current-module).
+                                    #(primitive-eval
+                                       '(or (false-if-exception (- indent (* mm incipit-width)))
+                                           (* 0.5 indent)))
+                                    ragged-right = ##f
+                                    ragged-last = ##f
+                                    system-count = #1 }
+                        }
+                 #})
            (system-start-text::print grob)))
   #})