]> 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 edf700aa6095583e0b9aae663b3de86a78ea2523..e806689a42a08622d75fdf2a134f3571ac21d7b6 100644 (file)
 #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}")
@@ -24,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);
@@ -34,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")
 {
@@ -45,6 +60,31 @@ 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}. "
+          "It will return @code{' ()} (end-of-list) "
+          "if  @var{sym} is undefined in @var{g}."
+          "\n\n")
+{
+  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");
+
+  return sc->internal_get_object (sym);
+}
+
 LY_DEFINE (ly_spanner_get_bound, "ly:spanner-get-bound",
           2, 0, 0, (SCM slur, SCM dir),
           "Get one of the bounds of @var{spanner}. @var{dir} is @code{-1} "
@@ -78,8 +118,11 @@ LY_DEFINE (ly_grob_alist_chain, "ly:grob-alist-chain",
   SCM_ASSERT_TYPE (sc, grob, SCM_ARG1, __FUNCTION__, "grob");
 
   if (global == SCM_UNDEFINED)
-    global
-      = sc->get_layout ()->lookup_variable (ly_symbol2scm ("font-defaults"));
+    {
+      global = sc->get_layout ()->lookup_variable (ly_symbol2scm ("font-defaults"));
+      if (global == SCM_UNDEFINED)
+       global = SCM_EOL;
+    }
 
   return sc->get_property_alist_chain (global);
 }
@@ -170,7 +213,7 @@ LY_DEFINE (ly_spanner_broken_into, "ly:spanner-broken-into",
   return s;
 }
 
-LY_DEFINE (ly_grob_suicide, "ly:grob-suicide",
+LY_DEFINE (ly_grob_suicide_x, "ly:grob-suicide!",
           1, 0, 0, (SCM g),
           "Kill @var{g}.")
 {
@@ -204,25 +247,6 @@ LY_DEFINE (ly_spanner_p, "ly:spanner?",
   return ly_bool2scm (b);
 }
 
-LY_DEFINE (ly_item_p, "ly:item?",
-          1, 0, 0, (SCM g),
-          "Is @var{g} an @code{Item} object?")
-{
-  Grob *me = unsmob_grob (g);
-  bool b = dynamic_cast<Item *> (me);
-  return ly_bool2scm (b);
-}
-
-LY_DEFINE (ly_item_break_dir, "ly:item-break-dir",
-          1, 0, 0, (SCM it),
-          "The break status dir of item @var{it}. @code{-1} is end of "
-          "line, @code{0} unbroken, and @code{1} begin of line.")
-{
-  Item *me = dynamic_cast<Item *> (unsmob_grob (it));
-  SCM_ASSERT_TYPE (me, it, SCM_ARG1, __FUNCTION__, "Item");
-  return scm_int2num (me->break_status_dir ());
-}
-
 LY_DEFINE (ly_grob_key, "ly:grob-key",
           1, 0, 0,
           (SCM grob),
@@ -233,8 +257,6 @@ LY_DEFINE (ly_grob_key, "ly:grob-key",
   return me->get_key ()->self_scm ();
 }
 
-
-
 LY_DEFINE (ly_grob_default_font, "ly:grob-default-font",
           1, 0, 0, (SCM grob),
           "Return the default font for grob @var{gr}.")