]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/grob-scheme.cc
* scripts/convert-ly.py (datadir): add prefix switching hack to
[lilypond.git] / lily / grob-scheme.cc
index bc561caf9657017510f322af8b38baa99df78ded..e806689a42a08622d75fdf2a134f3571ac21d7b6 100644 (file)
 #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}")
@@ -23,7 +38,8 @@ LY_DEFINE (ly_grob_set_property_x, "ly:grob-set-property!",
   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);
@@ -33,7 +49,7 @@ LY_DEFINE (ly_grob_set_property_x, "ly:grob-set-property!",
 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")
 {
@@ -44,6 +60,17 @@ LY_DEFINE (ly_grob_property, "ly:grob-property",
   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}. "