]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/context-property.cc
Imported Upstream version 2.14.2
[lilypond.git] / lily / context-property.cc
index 4645901b371afbae7d6e440e417dcef333bd4402..4d1de2403460d631be0eeb4ef752ede71f3c2feb 100644 (file)
@@ -1,10 +1,20 @@
 /*
-  context-property.cc -- implement manipulation of immutable Grob
-  property lists.
+  This file is part of LilyPond, the GNU music typesetter.
 
-  source file of the GNU LilyPond music typesetter
+  Copyright (C) 2004--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
-  (c) 2004--2009 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
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "context.hh"
@@ -35,7 +45,7 @@ general_pushpop_property (Context *context,
     }
 
   sloppy_general_pushpop_property (context, context_property,
-                                   grob_property_path, new_value);
+                                  grob_property_path, new_value);
 }
 
 
@@ -45,10 +55,10 @@ general_pushpop_property (Context *context,
   alist defined in a parent context. BASED-ON should always be a tail
   of ALIST.
 
-  Push or pop (depending on value of VAL) a single entry entry from a
+  Push or pop (depending on value of VAL) a single entry from a
   translator property list by name of PROP.  GROB_PROPERTY_PATH
   indicates nested alists, eg. '(beamed-stem-lengths details)
-  
+
 */
 void
 execute_override_property (Context *context,
@@ -57,7 +67,7 @@ execute_override_property (Context *context,
                           SCM new_value)
 {
   SCM current_context_val = SCM_EOL;
-  
+
   Context *where = context->where_defined (context_property,
                                           &current_context_val);
 
@@ -82,10 +92,17 @@ 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)))
     {
-      new_value = nested_property_alist (ly_assoc_get (symbol, target_alist, 
+      new_value = nested_property_alist (ly_assoc_get (symbol, target_alist,
                                                       SCM_EOL),
                                         scm_cdr (grob_property_path),
                                         new_value);
@@ -153,7 +170,7 @@ execute_revert_property (Context *context,
          programming_error ("Grob property path should be list of symbols.");
          return;
        }
-      
+
       SCM symbol = scm_car (grob_property_path);
       if (scm_is_pair (scm_cdr (grob_property_path)))
        {
@@ -161,7 +178,7 @@ execute_revert_property (Context *context,
          SCM new_val
            = nested_property_revert_alist (current_sub_alist,
                                            scm_cdr (grob_property_path));
-           
+
          if (scm_is_pair (current_alist)
              && scm_caar (current_alist) == symbol
              && current_alist != daddy)
@@ -173,7 +190,7 @@ execute_revert_property (Context *context,
       else
        {
          SCM new_alist = evict_from_alist (symbol, current_alist, daddy);
-         
+
          if (new_alist == daddy)
            context->unset_property (context_property);
          else
@@ -196,7 +213,7 @@ execute_pushpop_property (Context *context,
                            scm_list_1 (grob_property),
                            new_value);
 }
-  
+
 /*
   PRE_INIT_OPS is in the order specified, and hence must be reversed.
 */