X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fcontext-property.cc;h=940643e7660d8d04f80a4893afcf275acfd51f4e;hb=41b8dd4d0bec0445e1850ed8b87fef3599d2d41b;hp=d1e1c9f60d452597d40f38bcd1f2a0200c321be4;hpb=e3e3dc3b08c55ee1ec5813ef0719365eac1e068d;p=lilypond.git diff --git a/lily/context-property.cc b/lily/context-property.cc index d1e1c9f60d..940643e766 100644 --- a/lily/context-property.cc +++ b/lily/context-property.cc @@ -1,14 +1,13 @@ /* - context-property.cc -- implement manipulation of immutable Grob - property lists. + context-property.cc -- implement manipulation of immutable Grob + property lists. - source file of the GNU LilyPond music typesetter + source file of the GNU LilyPond music typesetter - (c) 2004 Han-Wen Nienhuys + (c) 2004--2005 Han-Wen Nienhuys */ #include "context.hh" -#include "grob-selector.hh" #include "engraver.hh" #include "item.hh" #include "main.hh" @@ -20,17 +19,15 @@ represented as a (ALIST . BASED-ON) pair, where BASED-ON is the 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 (ELTPROP . VAL) entry from a translator property list by name of PROP */ - void -execute_pushpop_property (Context * trg, +execute_pushpop_property (Context *trg, SCM prop, SCM eltprop, SCM val) { if (scm_is_symbol (prop) && scm_is_symbol (eltprop)) @@ -38,37 +35,37 @@ execute_pushpop_property (Context * trg, if (val != SCM_UNDEFINED) { SCM prev = SCM_EOL; - Context * where = trg->where_defined (prop); + Context *where = trg->where_defined (prop); /* Don't mess with MIDI. - */ + */ if (!where) - return ; - + return; + if (where != trg) { SCM base = updated_grob_properties (trg, prop); - prev = scm_cons (base, base); + prev = scm_cons (base, base); trg->internal_set_property (prop, prev); } else prev = trg->internal_get_property (prop); - + if (!scm_is_pair (prev)) { - programming_error ("Grob definition should be cons."); - return ; + programming_error ("Grob definition should be cons"); + return; } SCM prev_alist = scm_car (prev); - + if (scm_is_pair (prev_alist) || prev_alist == SCM_EOL) { bool ok = type_check_assignment (eltprop, val, ly_symbol2scm ("backend-type?")); /* - tack onto alist: + tack onto alist: */ if (ok) scm_set_car_x (prev, scm_acons (eltprop, val, prev_alist)); @@ -83,7 +80,7 @@ execute_pushpop_property (Context * trg, SCM prev = trg->internal_get_property (prop); SCM prev_alist = scm_car (prev); SCM daddy = scm_cdr (prev); - + SCM new_alist = SCM_EOL; SCM *tail = &new_alist; @@ -92,10 +89,9 @@ execute_pushpop_property (Context * trg, if (ly_c_equal_p (scm_caar (prev_alist), eltprop)) { prev_alist = scm_cdr (prev_alist); - break ; + break; } - *tail = scm_cons (scm_car (prev_alist), SCM_EOL); tail = SCM_CDRLOC (*tail); prev_alist = scm_cdr (prev_alist); @@ -112,15 +108,15 @@ execute_pushpop_property (Context * trg, } else { - warning ("Need symbol arguments for \\override and \\revert"); - if (internal_type_checking_global_b) + warning (_ ("need symbol arguments for \\override and \\revert")); + if (do_internal_type_checking_global) assert (false); } } /* PRE_INIT_OPS is in the order specified, and hence must be reversed. - */ +*/ void apply_property_operations (Context *tg, SCM pre_init_ops) { @@ -129,8 +125,8 @@ apply_property_operations (Context *tg, SCM pre_init_ops) { SCM entry = scm_car (s); SCM type = scm_car (entry); - entry = scm_cdr (entry); - + entry = scm_cdr (entry); + if (type == ly_symbol2scm ("push") || type == ly_symbol2scm ("poppush")) { SCM val = scm_cddr (entry); @@ -147,23 +143,23 @@ apply_property_operations (Context *tg, SCM pre_init_ops) /* Return the object alist for SYM, checking if its base in enclosing - contexts has changed. The alist is updated if necessary. - */ + contexts has changed. The alist is updated if necessary. +*/ SCM -updated_grob_properties (Context * tg, SCM sym) +updated_grob_properties (Context *tg, SCM sym) { assert (scm_is_symbol (sym)); - + tg = tg->where_defined (sym); if (!tg) return SCM_EOL; - + SCM daddy_props = (tg->get_parent_context ()) ? updated_grob_properties (tg->get_parent_context (), sym) : SCM_EOL; - - SCM props = tg->internal_get_property (sym); + + SCM props = tg->internal_get_property (sym); if (!scm_is_pair (props)) { @@ -181,13 +177,13 @@ updated_grob_properties (Context * tg, SCM sym) SCM copy = daddy_props; SCM *tail = © SCM p = scm_car (props); - while (p != based_on) + while (p != based_on) { *tail = scm_cons (scm_car (p), daddy_props); tail = SCM_CDRLOC (*tail); p = scm_cdr (p); } - + scm_set_car_x (props, copy); scm_set_cdr_x (props, daddy_props); @@ -196,29 +192,29 @@ updated_grob_properties (Context * tg, SCM sym) } Item * -make_item_from_properties (Translator *tr, SCM x, SCM cause) +make_item_from_properties (Engraver *tr, SCM x, SCM cause, const char *name) { Context *context = tr->context (); - + SCM props = updated_grob_properties (context, x); - Item *it = new Item (props); -#ifdef TWEAK - Grob_selector::register_grob (context, it); -#endif - dynamic_cast(tr)->announce_grob (it, cause); + + Object_key const *key = context->get_grob_key (name); + Item *it = new Item (props, key); + + dynamic_cast (tr)->announce_grob (it, cause); return it; } -Spanner* -make_spanner_from_properties (Translator *tr, SCM x, SCM cause) +Spanner * +make_spanner_from_properties (Engraver *tr, SCM x, SCM cause, const char *name) { - Context *tg = tr->context (); + Context *context = tr->context (); - SCM props = updated_grob_properties (tg, x); - Spanner *it = new Spanner (props); + SCM props = updated_grob_properties (context, x); + Spanner *it = new Spanner (props, context->get_grob_key (name)); - dynamic_cast(tr)->announce_grob (it, cause); + dynamic_cast (tr)->announce_grob (it, cause); return it; }