X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fcontext-property.cc;h=4d1de2403460d631be0eeb4ef752ede71f3c2feb;hb=f3daeb0eea20497980ea716cca137a82ee88d7df;hp=fd57fcd1f372fc439b9a8808178ec6403892398a;hpb=bc95f4434f760d41191341ab4508b2064eb19025;p=lilypond.git diff --git a/lily/context-property.cc b/lily/context-property.cc index fd57fcd1f3..4d1de24034 100644 --- a/lily/context-property.cc +++ b/lily/context-property.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2004--2010 Han-Wen Nienhuys + Copyright (C) 2004--2011 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 @@ -45,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); } @@ -55,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, @@ -67,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); @@ -92,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); @@ -163,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))) { @@ -171,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) @@ -183,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 @@ -206,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. */