From 46a3f814c8d750e4ee28a63afa5274b93e2bb058 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Tue, 13 Mar 2012 12:30:32 +0100 Subject: [PATCH] Implement 'apply context mod --- lily/context-def.cc | 3 ++- lily/context-property.cc | 2 ++ ly/music-functions-init.ly | 4 ++++ scm/lily-library.scm | 4 ++++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lily/context-def.cc b/lily/context-def.cc index fb8208acdd..9c988f4da9 100644 --- a/lily/context-def.cc +++ b/lily/context-def.cc @@ -146,7 +146,8 @@ Context_def::add_context_mod (SCM mod) else if (ly_symbol2scm ("pop") == tag || ly_symbol2scm ("push") == tag || ly_symbol2scm ("assign") == tag - || ly_symbol2scm ("unset") == tag) + || ly_symbol2scm ("unset") == tag + || ly_symbol2scm ("apply") == tag) property_ops_ = scm_cons (mod, property_ops_); else if (ly_symbol2scm ("alias") == tag) context_aliases_ = scm_cons (sym, context_aliases_); diff --git a/lily/context-property.cc b/lily/context-property.cc index a9d7e2fc44..0c5e1ec55d 100644 --- a/lily/context-property.cc +++ b/lily/context-property.cc @@ -247,6 +247,8 @@ apply_property_operations (Context *tg, SCM pre_init_ops) } else if (type == ly_symbol2scm ("assign")) tg->set_property (scm_car (entry), scm_cadr (entry)); + else if (type == ly_symbol2scm ("apply")) + scm_apply_1 (scm_car (entry), tg->self_scm (), scm_cdr (entry)); } } diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index f9e30d33e2..783f7990ce 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -997,6 +997,10 @@ a context modification duplicating their effect.") (ly:music-property m 'symbol) (ly:music-property m 'grob-property-path))))) (case (ly:music-property m 'name) + ((ApplyContext) + (ly:add-context-mod mods + (list 'apply + (ly:music-property m 'procedure)))) ((SequentialMusic SimultaneousMusic) (for-each musicop (ly:music-property m 'elements))) ((ContextSpeccedMusic) diff --git a/scm/lily-library.scm b/scm/lily-library.scm index 2951639266..8d4e0a069f 100644 --- a/scm/lily-library.scm +++ b/scm/lily-library.scm @@ -298,6 +298,10 @@ bookoutput function" (case (ly:music-property m 'name) ((SequentialMusic SimultaneousMusic) (fold loop mods (ly:music-property m 'elements))) + ((ApplyContext) + (ly:add-context-mod mods + (list 'apply + (ly:music-property m 'procedure)))) ((ContextSpeccedMusic) (let ((sym (ly:music-property m 'context-type))) (if (eq? sym 'Bottom) -- 2.39.5