X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fcontext-property.cc;h=7f09f0b94a4cc2c8ccfd666ddc3ce87d36259240;hb=b5c2ba0cc01c8edf1d5fb25968ca7345b174957c;hp=08ade8f954391ab4eec71e482063fa370e523663;hpb=a6a4b3fc2009f17a1a48cca0c11bfd3f38645937;p=lilypond.git diff --git a/lily/context-property.cc b/lily/context-property.cc index 08ade8f954..7f09f0b94a 100644 --- a/lily/context-property.cc +++ b/lily/context-property.cc @@ -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--2010 Han-Wen Nienhuys - (c) 2004--2008 Han-Wen Nienhuys + 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 . */ #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, ¤t_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. */