]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/script-interface.cc
Merge branch 'jneeman' of git+ssh://jneem@git.sv.gnu.org/srv/git/lilypond into jneeman
[lilypond.git] / lily / script-interface.cc
index 279b265a96b01c725e114d02d4ef37651c3c9a43..94bebe9e600aacdd848af6e03408ec237d7cda37 100644 (file)
@@ -1,20 +1,19 @@
-/*   
-  script-interface.cc --  implement Script_interface
-  
+/*
+  script-interface.cc -- implement Script_interface
+
   source file of the GNU LilyPond music typesetter
-  
-  (c) 1999--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
+
+  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+*/
+
+#include "script-interface.hh"
 
 #include "directional-element-interface.hh"
+#include "item.hh"
 #include "warn.hh"
-#include "script-interface.hh"
 #include "font-interface.hh"
 #include "side-position-interface.hh"
 #include "output-def.hh"
-#include "item.hh"
-#include "stencil.hh"
 #include "lookup.hh"
 #include "stem.hh"
 #include "note-column.hh"
@@ -23,19 +22,19 @@ Stencil
 Script_interface::get_stencil (Grob *me, Direction d)
 {
   SCM s = me->get_property ("script-stencil");
-  assert (ly_c_pair_p (s));
+  assert (scm_is_pair (s));
 
-  SCM key = ly_car (s);
+  SCM key = scm_car (s);
   if (key == ly_symbol2scm ("feta"))
     {
-      SCM name_entry = ly_cdr (s);
-      SCM str = ((ly_c_pair_p (name_entry)) ? index_get_cell (name_entry, d)
+      SCM name_entry = scm_cdr (s);
+      SCM str = ((scm_is_pair (name_entry)) ? index_get_cell (name_entry, d)
                 : name_entry);
       return Font_interface::get_default_font (me)
-       ->find_by_name ("scripts-" + ly_scm2string (str));
+       ->find_by_name ("scripts." + ly_scm2string (str));
     }
   else if (key == ly_symbol2scm ("accordion"))
-    return Lookup::accordion (ly_cdr (s), 1.0,
+    return Lookup::accordion (scm_cdr (s), 1.0,
                              Font_interface::get_default_font (me));
   else
     assert (false);
@@ -43,30 +42,27 @@ Script_interface::get_stencil (Grob *me, Direction d)
   return Stencil ();
 }
 
-MAKE_SCHEME_CALLBACK (Script_interface, before_line_breaking, 1);
+MAKE_SCHEME_CALLBACK (Script_interface, calc_direction, 1);
 SCM
-Script_interface::before_line_breaking (SCM smob)
+Script_interface::calc_direction (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
-
   Direction d = Side_position_interface::get_direction (me);
 
   if (!d)
     {
-      /* FIXME: This should never happen: `arbitrary' directions.  */
-      programming_error ("Script direction not yet known!");
+      me->programming_error ("script direction not yet known");
       d = DOWN;
     }
 
-  set_grob_direction (me, d);
-
   if (Grob *par = me->get_parent (X_AXIS))
     {
       Grob *stem = Note_column::get_stem (par);
       if (stem && Stem::first_head (stem))
        me->set_parent (Stem::first_head (stem), X_AXIS);
     }
-  return SCM_UNSPECIFIED;
+
+  return scm_from_int (d);
 }
 
 MAKE_SCHEME_CALLBACK (Script_interface, print, 1);
@@ -74,27 +70,38 @@ MAKE_SCHEME_CALLBACK (Script_interface, print, 1);
 SCM
 Script_interface::print (SCM smob)
 {
-  Grob *me= unsmob_grob (smob);
+  Grob *me = unsmob_grob (smob);
+
+  Direction dir = get_grob_direction (me);
 
-  Direction dir = Side_position_interface::get_direction (me);
-  if (!dir)
-    {
-      programming_error ("Script direction not known, but stencil wanted.");
-      dir = DOWN;
-    }
   return get_stencil (me, dir).smobbed_copy ();
 }
 
 struct Text_script
 {
-  static bool has_interface (Grob*);
+  DECLARE_GROB_INTERFACE();
 };
 
-ADD_INTERFACE (Text_script,"text-script-interface",
-  "An object that is put above or below a note",
-  "slur script-priority inside-slur");
-
-ADD_INTERFACE (Script_interface, "script-interface",
-  "An object that is put above or below a note",
-  "slur script-priority script-stencil inside-slur");
+ADD_INTERFACE (Text_script,
+              "An object that is put above or below a note",
+
+              /* properties */
+              "add-stem-support "
+              "avoid-slur "
+              "script-priority "
+              "slur "
+              );
+
+/*
+  Hmm. Where should we put add-stem-support ?
+*/
+ADD_INTERFACE (Script_interface,
+              "An object that is put above or below a note",
+              "add-stem-support "
+              "avoid-slur "
+              "script-priority "
+              "script-stencil "
+              "slur "
+              "slur-padding "
+              );