--- /dev/null
+\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
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}.")
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),