X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fgrob-property.cc;h=f174f7ee01f6128bd79c6c6d405c80998e862659;hb=f018757016404595c92e21346ae0661dafe7ea46;hp=1fcded7df749e3197ce2e2031a1dced00bc39317;hpb=2ab08fee7154ad37565f31353d8344599ebd9294;p=lilypond.git diff --git a/lily/grob-property.cc b/lily/grob-property.cc index 1fcded7df7..f174f7ee01 100644 --- a/lily/grob-property.cc +++ b/lily/grob-property.cc @@ -47,14 +47,14 @@ FIXME: this should use ly:set-option interface instead. LY_DEFINE (ly_set_grob_modification_callback, "ly:set-grob-modification-callback", 1, 0, 0, (SCM cb), - "Specify a procedure that will be called every time lilypond modifies " - "a grob property. The callback will receive as arguments " - "the grob that is being modified, " - "the name of the C++ file in which the modification was requested, " - "the line number in the C++ file in which the modification was requested, " - "the name of the function in which the modification was requested, " - "the property to be changed and " - "the new value for the property.") + "Specify a procedure that will be called every time LilyPond" + " modifies a grob property. The callback will receive as" + " arguments the grob that is being modified, the name of the" + " C++ file in which the modification was requested, the line" + " number in the C++ file in which the modification was requested," + " the name of the function in which the modification was" + " requested, the property to be changed, and the new value for" + " the property.") { modification_callback = (ly_is_procedure (cb)) ? cb : SCM_BOOL_F; return SCM_UNSPECIFIED; @@ -62,13 +62,12 @@ LY_DEFINE (ly_set_grob_modification_callback, "ly:set-grob-modification-callback LY_DEFINE (ly_set_property_cache_callback, "ly:set-property-cache-callback", 1, 0, 0, (SCM cb), - "Specify a procedure that will be called whenever lilypond calculates " - "a callback function and caches the result. The callback will " - "receive as arguments " - "the grob whose property it is, " - "the name of the property, " - "the name of the callback that calculated the property and " - "the new (cached) value of the property.") + "Specify a procedure that will be called whenever lilypond" + " calculates a callback function and caches the result. The" + " callback will receive as arguments the grob whose property it" + " is, the name of the property, the name of the callback that" + " calculated the property, and the new (cached) value of the" + " property.") { cache_callback = (ly_is_procedure (cb)) ? cb : SCM_BOOL_F; return SCM_UNSPECIFIED; @@ -192,6 +191,26 @@ Grob::internal_get_property (SCM sym) const return val; } +/* Unlike internal_get_property, this function does no caching. Use it, therefore, with caution. */ +SCM +Grob::internal_get_pure_property (SCM sym, int start, int end) const +{ + SCM val = internal_get_property_data (sym); + if (ly_is_procedure (val)) + return call_pure_function (val, scm_list_1 (self_scm ()), start, end); + if (is_simple_closure (val)) + return evaluate_with_simple_closure (self_scm (), + simple_closure_expression (val), + true, start, end); + return val; +} + +SCM +Grob::internal_get_maybe_pure_property (SCM sym, bool pure, int start, int end) const +{ + return pure ? internal_get_pure_property (sym, start, end) : internal_get_property (sym); +} + SCM Grob::try_callback_on_alist (SCM *alist, SCM sym, SCM proc) {