]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/context-property.cc
Run grand-replace (issue 3765)
[lilypond.git] / lily / context-property.cc
index f4f5f07b5cba92e5a2cde81a637c3f9ea0e0513c..fa77969e1c886f1a3c6a10593655f1d9563cd127 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2004--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  Copyright (C) 2004--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -91,13 +91,6 @@ execute_override_property (Context *context,
 
   SCM target_alist = scm_car (current_context_val);
 
-  /*
-    If the car is a list, the property path comes from a nested override
-    using list syntax inside a \context block
-  */
-  if (scm_is_pair (scm_car (grob_property_path)))
-    grob_property_path = scm_car (grob_property_path);
-
   SCM symbol = scm_car (grob_property_path);
   if (scm_is_pair (scm_cdr (grob_property_path)))
     {
@@ -116,13 +109,14 @@ execute_override_property (Context *context,
   bool ok = true;
   bool pc = is_unpure_pure_container (new_value);
   SCM vals[] = {pc ? unpure_pure_container_unpure_part (new_value) : new_value,
-                pc ? unpure_pure_container_pure_part (new_value) : SCM_BOOL_F};
+                pc ? unpure_pure_container_pure_part (new_value) : SCM_BOOL_F
+               };
 
   for (int i = 0; i < 2; i++)
     if (!ly_is_procedure (vals[i])
         && !is_simple_closure (vals[i]))
       ok = ok && type_check_assignment (symbol, vals[i],
-                                    ly_symbol2scm ("backend-type?"));
+                                        ly_symbol2scm ("backend-type?"));
 
   /*
     tack onto alist.  We can use set_car, since
@@ -224,8 +218,7 @@ execute_pushpop_property (Context *context,
 void
 apply_property_operations (Context *tg, SCM pre_init_ops)
 {
-  SCM correct_order = scm_reverse (pre_init_ops);
-  for (SCM s = correct_order; scm_is_pair (s); s = scm_cdr (s))
+  for (SCM s = pre_init_ops; scm_is_pair (s); s = scm_cdr (s))
     {
       SCM entry = scm_car (s);
       SCM type = scm_car (entry);
@@ -247,6 +240,10 @@ 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));
+      else if (type == ly_symbol2scm ("unset"))
+        tg->unset_property (scm_car (entry));
     }
 }