]> git.donarmstrong.com Git - lilypond.git/commitdiff
Helper functions to enter incipits and print them with the instrument names.
authorNicolas Sceaux <nicolas.sceaux@free.fr>
Fri, 15 Feb 2008 21:04:10 +0000 (22:04 +0100)
committerNicolas Sceaux <nicolas.sceaux@free.fr>
Fri, 15 Feb 2008 21:04:10 +0000 (22:04 +0100)
input/regression/incipit.ly [new file with mode: 0644]
lily/output-def-scheme.cc
lily/score-scheme.cc

diff --git a/input/regression/incipit.ly b/input/regression/incipit.ly
new file mode 100644 (file)
index 0000000..bbcc17b
--- /dev/null
@@ -0,0 +1,56 @@
+\header {
+
+  texidoc = "Incipit can be printed using an InstrumentName grob."
+
+}
+
+\version "2.11.39"
+
+%% to avoid warnings:
+#(set-object-property! 'music 'backend-type? ly:music?)
+#(set-object-property! 'music 'backend-doc "Incipit music")
+
+\score {
+  \new Staff {
+    %% All this would be shortcuted by an appropriate music function:
+    \override Staff.InstrumentName #'music = ##{ \clef "petrucci-c1" c'4 d' e' f' #}
+    \override Staff.InstrumentName #'self-alignment-X = #RIGHT
+    \override Staff.InstrumentName #'self-alignment-Y = #UP
+    \override Staff.InstrumentName #'Y-offset = #4
+    \override Staff.InstrumentName #'padding = #0
+    \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-music 'SequentialMusic
+                      'elements (list (make-music 'ContextSpeccedMusic
+                                        'context-type 'MensuralStaff
+                                        'element (make-music 'PropertySet
+                                                   'symbol 'instrumentName
+                                                   'value instrument-name))
+                                      (ly:grob-property grob 'music))))
+              (score (ly:make-score music))
+              (mm (ly:output-def-lookup layout 'mm))
+              (indent (ly:output-def-lookup layout 'indent))
+              (incipit-width (ly:output-def-lookup layout 'incipit-width))
+              (scaled-incipit-width (if (number? incipit-width)
+                                        (* incipit-width mm)
+                                        (* indent 0.5))))
+         (ly:output-def-set-variable! layout 'indent (- indent scaled-incipit-width))
+         (ly:output-def-set-variable! layout 'line-width scaled-incipit-width)
+         (ly:output-def-set-variable! layout 'ragged-right #f)
+         (ly:score-add-output-def! score layout)
+         (set! (ly:grob-property grob 'long-text)
+               (markup #:score score))
+         (ly:system-start-text::print grob)))
+
+    %% the instrument name definition is separated:
+    \set Staff.instrumentName = \markup Instrument
+    c'4 d' e' f' g'1
+  }
+  \layout {
+    ragged-right = ##t
+    indent = 5\cm
+    incipit-width = 3 \cm
+  }
+}
\ No newline at end of file
index 29c8949ab97994abafb2ba122e0e18d5cd6f4061..91a7933d00f20ebec81e6b2ecdc8e2c85683a3b9 100644 (file)
@@ -54,6 +54,17 @@ LY_DEFINE (ly_output_def_parent, "ly:output-def-parent",
   return op->parent_ ? op->parent_->self_scm () : SCM_EOL;
 }
 
+LY_DEFINE (ly_output_def_set_variable_x, "ly:output-def-set-variable!",
+           3, 0, 0, (SCM def, SCM sym, SCM val),
+           "Set an output definition @var{def} variable @var{sym} to @var{val}.")
+{
+  LY_ASSERT_SMOB (Output_def, def, 1);
+  Output_def *output_def = unsmob_output_def (def);
+  LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
+  output_def->set_variable (sym, val);
+  return SCM_UNSPECIFIED;
+}
+
 LY_DEFINE (ly_output_def_clone, "ly:output-def-clone",
           1, 0, 0, (SCM def),
           "Clone output definition @var{def}.")
index c10347530251767fc8bfafd5e98f08b49f96bf3f..d52b25f0961b90b88b7138aaab1cb9456d23d8dc 100644 (file)
@@ -41,7 +41,17 @@ LY_DEFINE (ly_score_output_defs, "ly:score-output-defs",
   return scm_reverse_x (l, SCM_EOL);
 }
 
-
+LY_DEFINE (ly_score_add_output_def_x, "ly:score-add-output-def!",
+          2, 0, 0, (SCM score, SCM def),
+          "Add an output definition @var{def} to @var{score}.")
+{
+  LY_ASSERT_SMOB (Score, score, 1);
+  LY_ASSERT_SMOB (Output_def, def, 2);
+  Score *sc = unsmob_score (score);
+  Output_def *output_def = unsmob_output_def (def);
+  sc->add_output_def (output_def);
+  return SCM_UNSPECIFIED;
+}
 
 LY_DEFINE (ly_score_header, "ly:score-header",
           1, 0, 0, (SCM score),