From f113ae17e0084403171994301303451f2fb98b13 Mon Sep 17 00:00:00 2001 From: Nicolas Sceaux Date: Fri, 15 Feb 2008 22:04:10 +0100 Subject: [PATCH] Helper functions to enter incipits and print them with the instrument names. --- input/regression/incipit.ly | 56 +++++++++++++++++++++++++++++++++++++ lily/output-def-scheme.cc | 11 ++++++++ lily/score-scheme.cc | 12 +++++++- 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 input/regression/incipit.ly diff --git a/input/regression/incipit.ly b/input/regression/incipit.ly new file mode 100644 index 0000000000..bbcc17b3e7 --- /dev/null +++ b/input/regression/incipit.ly @@ -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 diff --git a/lily/output-def-scheme.cc b/lily/output-def-scheme.cc index 29c8949ab9..91a7933d00 100644 --- a/lily/output-def-scheme.cc +++ b/lily/output-def-scheme.cc @@ -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}.") diff --git a/lily/score-scheme.cc b/lily/score-scheme.cc index c103475302..d52b25f096 100644 --- a/lily/score-scheme.cc +++ b/lily/score-scheme.cc @@ -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), -- 2.39.5