]> git.donarmstrong.com Git - lilypond.git/commitdiff
Implement 'apply context mod
authorDavid Kastrup <dak@gnu.org>
Tue, 13 Mar 2012 11:30:32 +0000 (12:30 +0100)
committerDavid Kastrup <dak@gnu.org>
Wed, 14 Mar 2012 21:10:27 +0000 (22:10 +0100)
lily/context-def.cc
lily/context-property.cc
ly/music-functions-init.ly
scm/lily-library.scm

index fb8208acdd38b1dc8ace2b76554915a2127e1494..9c988f4da9e1380971e044e7a61cf9de4ca9cd9a 100644 (file)
@@ -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_);
index a9d7e2fc449463e68384fc007b13ad3697709368..0c5e1ec55d689850efeeaf7eef209c4d2c4c3f32 100644 (file)
@@ -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));
     }
 }
 
index f9e30d33e2f9adca3fcc45086ffa68423027a4f7..783f7990ce6483867b908900de15facbcf051ba5 100644 (file)
@@ -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)
index 2951639266b744ee10687e01b4faebcab2acce2d..8d4e0a069fa5461b658678b344422d4ffe72bb37 100644 (file)
@@ -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)