/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2010 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2011 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "warn.hh" // error ()
+#include "font-interface.hh"
+#include "grob-array.hh"
#include "item.hh"
#include "output-def.hh"
-#include "system.hh"
-#include "font-interface.hh"
#include "paper-score.hh"
-#include "grob-array.hh"
+#include "simple-closure.hh"
+#include "system.hh"
+#include "warn.hh" // error ()
LY_DEFINE (ly_grob_property_data, "ly:grob-property-data",
2, 0, 0, (SCM grob, SCM sym),
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
if (!ly_is_procedure (val)
+ && !is_simple_closure (val)
&& !type_check_assignment (sym, val, ly_symbol2scm ("backend-type?")))
error ("typecheck failed");
LY_DEFINE (ly_grob_object, "ly:grob-object",
2, 0, 0, (SCM grob, SCM sym),
- "Return the value of a pointer in grob@tie{}@var{g} of property"
+ "Return the value of a pointer in grob @var{grob} of property"
" @var{sym}. It returns @code{'()} (end-of-list) if @var{sym}"
- " is undefined in@tie{}@var{g}.")
+ " is undefined in @var{grob}.")
{
Grob *sc = unsmob_grob (grob);
LY_DEFINE (ly_grob_translate_axis_x, "ly:grob-translate-axis!",
3, 0, 0, (SCM grob, SCM d, SCM a),
- "Translate @var{g} on axis@tie{}@var{a} over"
+ "Translate @var{grob} on axis@tie{}@var{a} over"
" distance@tie{}@var{d}.")
{
Grob *me = unsmob_grob (grob);
LY_DEFINE (ly_grob_default_font, "ly:grob-default-font",
1, 0, 0, (SCM grob),
- "Return the default font for grob @var{gr}.")
+ "Return the default font for grob @var{grob}.")
{
Grob *gr = unsmob_grob (grob);
Grob *refp = common_refpoint_of_array (ga->array (), gr, Axis (scm_to_int (axis)));
return refp ? refp->self_scm () : SCM_BOOL_F;
}
+
+LY_DEFINE (ly_grob_chain_callback, "ly:grob-chain-callback",
+ 3, 0, 0, (SCM grob, SCM proc, SCM sym),
+ "Find the callback that is stored as property"
+ " @var{sym} of grob @var{grob} and chain @var{proc}"
+ " to the head of this, meaning that it is called"
+ " using @var{grob} and the previous callback's result.")
+{
+ Grob *gr = unsmob_grob (grob);
+
+ LY_ASSERT_SMOB (Grob, grob, 1);
+ LY_ASSERT_TYPE (ly_is_procedure, proc, 2);
+ LY_ASSERT_TYPE (ly_is_symbol, sym, 3);
+
+ chain_callback (gr, proc, sym);
+ return SCM_UNSPECIFIED;
+}