#include "system.hh"
#include "font-interface.hh"
+
+
+LY_DEFINE (ly_grob_property_data, "ly:grob-property-data",
+ 2, 0, 0, (SCM grob, SCM sym),
+ //, SCM dfault),
+ "Retrieve @var{sym} for @var{grob} but don't process callbacks.")
+{
+ Grob *sc = unsmob_grob (grob);
+ SCM_ASSERT_TYPE (sc, grob, SCM_ARG1, __FUNCTION__, "grob");
+ SCM_ASSERT_TYPE (scm_is_symbol (sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
+ // SCM_ASSERT_TYPE (ly_is_procedure (proc), proc, SCM_ARG3, __FUNCTION__, "procedure");
+
+ return sc->get_property_data (sym);
+}
+
LY_DEFINE (ly_grob_set_property_x, "ly:grob-set-property!",
3, 0, 0, (SCM grob, SCM sym, SCM val),
"Set @var{sym} in grob @var{grob} to value @var{val}")
SCM_ASSERT_TYPE (sc, grob, SCM_ARG1, __FUNCTION__, "grob");
SCM_ASSERT_TYPE (scm_is_symbol (sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
- if (!type_check_assignment (sym, val, ly_symbol2scm ("backend-type?")))
+ if (!ly_is_procedure (val)
+ && !type_check_assignment (sym, val, ly_symbol2scm ("backend-type?")))
error ("typecheck failed");
sc->internal_set_property (sym, val);
LY_DEFINE (ly_grob_property, "ly:grob-property",
2, 0, 0, (SCM grob, SCM sym),
"Return the value of a value in grob @var{g} of property @var{sym}. "
- "It will return @code{' ()} (end-of-list) "
+ "It will return @code{'()} (end-of-list) "
"if @var{sym} is undefined in @var{g}."
"\n\n")
{
return sc->internal_get_property (sym);
}
+
+LY_DEFINE (ly_grob_interfaces, "ly:grob-interfaces",
+ 1, 0, 0, (SCM grob),
+ "Return the interfaces list of grob @var{grob}.")
+{
+ Grob *sc = unsmob_grob (grob);
+ SCM_ASSERT_TYPE (sc, grob, SCM_ARG1, __FUNCTION__, "grob");
+
+ return sc->get_interfaces ();
+}
+
LY_DEFINE (ly_grob_object, "ly:grob-object",
2, 0, 0, (SCM grob, SCM sym),
"Return the value of a pointer in grob @var{g} of property @var{sym}. "