]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/molecule-scheme.cc
2003 -> 2004
[lilypond.git] / lily / molecule-scheme.cc
index be94c0d8b634da129c4aff34213b34861dc5b177..3ac21c095ac486d5f82085a7976ca997ec21a68d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "molecule.hh"
@@ -20,8 +20,8 @@ LY_DEFINE(ly_molecule_set_extent_x,"ly:molecule-set-extent!", 3 , 0, 0,
 {
   Molecule* m = unsmob_molecule (mol);
   SCM_ASSERT_TYPE (m, mol, SCM_ARG1, __FUNCTION__, "molecule");
-  SCM_ASSERT_TYPE (ly_axis_p (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
-  SCM_ASSERT_TYPE (ly_number_pair_p (np), np, SCM_ARG3, __FUNCTION__, "number pair");
+  SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
+  SCM_ASSERT_TYPE (is_number_pair (np), np, SCM_ARG3, __FUNCTION__, "number pair");
 
   Interval iv = ly_scm2interval (np);
   m->dim_[Axis (gh_scm2int (axis))] = iv;
@@ -37,7 +37,7 @@ LY_DEFINE(ly_translate_molecule_axis,"ly:molecule-translate-axis", 3, 0, 0,
   Molecule* m = unsmob_molecule (mol);
   SCM_ASSERT_TYPE (m, mol, SCM_ARG1, __FUNCTION__, "molecule");
   SCM_ASSERT_TYPE (gh_number_p (amount), amount, SCM_ARG2, __FUNCTION__, "number pair");
-  SCM_ASSERT_TYPE (ly_axis_p (axis), axis, SCM_ARG3, __FUNCTION__, "axis");
+  SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG3, __FUNCTION__, "axis");
 
 
   Molecule q (*m);
@@ -52,7 +52,7 @@ LY_DEFINE(ly_translate_molecule,"ly:molecule-translate", 2, 0, 0,
 {
   Molecule* m = unsmob_molecule (mol);
   SCM_ASSERT_TYPE (m, mol, SCM_ARG1, __FUNCTION__, "molecule");
-  SCM_ASSERT_TYPE (ly_number_pair_p (offset), offset, SCM_ARG2, __FUNCTION__, "number pair");
+  SCM_ASSERT_TYPE (is_number_pair (offset), offset, SCM_ARG2, __FUNCTION__, "number pair");
   Offset o = ly_scm2offset (offset);
   
   Molecule q (*m);
@@ -60,7 +60,7 @@ LY_DEFINE(ly_translate_molecule,"ly:molecule-translate", 2, 0, 0,
   return q.smobbed_copy();
 }
 
-LY_DEFINE(ly_get_molecule_extent,
+LY_DEFINE(ly_molecule_get_extent,
          "ly:molecule-get-extent", 2 , 0, 0,  (SCM mol, SCM axis),
          "Return a pair of numbers signifying the extent of @var{mol} in "
 "@var{axis} direction (0 or 1 for x and y axis respectively)."
@@ -68,7 +68,7 @@ LY_DEFINE(ly_get_molecule_extent,
 {
   Molecule *m = unsmob_molecule (mol);
   SCM_ASSERT_TYPE (m, mol, SCM_ARG1, __FUNCTION__, "molecule");
-  SCM_ASSERT_TYPE (ly_axis_p (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
+  SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
  
   return ly_interval2scm (m->extent (Axis (gh_scm2int (axis))));
 }
@@ -93,8 +93,8 @@ LY_DEFINE(ly_molecule_combined_at_edge,
   Molecule result;
 
 
-  SCM_ASSERT_TYPE(ly_axis_p (axis), axis, SCM_ARG3, __FUNCTION__, "axis");
-  SCM_ASSERT_TYPE(ly_dir_p (direction), direction, SCM_ARG4, __FUNCTION__, "dir");
+  SCM_ASSERT_TYPE(is_axis (axis), axis, SCM_ARG3, __FUNCTION__, "axis");
+  SCM_ASSERT_TYPE(is_direction (direction), direction, SCM_ARG4, __FUNCTION__, "dir");
 
   Real p = 0.0;
   if (padding != SCM_UNDEFINED)
@@ -119,23 +119,32 @@ LY_DEFINE(ly_molecule_combined_at_edge,
 }
 
 /*
-  FIXME: support variable number of arguments "
+  FIXME: support variable number of arguments. 
+  
  */
 LY_DEFINE(ly_molecule_add , 
-         "ly:molecule-add", 2, 0, 0, (SCM first, SCM second),
-         "Combine two molecules."
+         "ly:molecule-add", 0, 0, 1, (SCM args),
+         "Combine molecules. Takes any number of arguments."
          )
 {
-  Molecule * m1 = unsmob_molecule (first);
-  Molecule * m2 = unsmob_molecule (second);
+#define FUNC_NAME __FUNCTION__
+  SCM_VALIDATE_REST_ARGUMENT (args);
+
   Molecule result;
 
+  while (!SCM_NULLP (args))
+    {
+      Molecule * m = unsmob_molecule (gh_car (args));
 
-  if (m1)
-    result = *m1;
-  if (m2)
-    result.add_molecule (*m2);
+      if (!m)
+       SCM_ASSERT_TYPE(m, gh_car (args), SCM_ARGn, __FUNCTION__,
+                       "Molecule");
+
+      result.add_molecule (*m);
 
+      args = gh_cdr (args);
+    }
+  
   return result.smobbed_copy ();
 }
 
@@ -174,8 +183,8 @@ LY_DEFINE(ly_make_molecule,
 "can run with the @code{-f scm} option. The scheme expressions are then \n"
 "dumped in the output file.")
 {
-  SCM_ASSERT_TYPE (ly_number_pair_p (xext), xext, SCM_ARG2, __FUNCTION__, "number pair");
-  SCM_ASSERT_TYPE (ly_number_pair_p (yext), yext, SCM_ARG3, __FUNCTION__, "number pair");  
+  SCM_ASSERT_TYPE (is_number_pair (xext), xext, SCM_ARG2, __FUNCTION__, "number pair");
+  SCM_ASSERT_TYPE (is_number_pair (yext), yext, SCM_ARG3, __FUNCTION__, "number pair");  
 
   Box b (ly_scm2interval (xext), ly_scm2interval(yext));
   Molecule m (b, expr);
@@ -202,13 +211,17 @@ LY_DEFINE(ly_fontify_atom,"ly:fontify-atom", 2, 0, 0,
   return fontify_atom (unsmob_metrics (met), f);
 }
 LY_DEFINE(ly_align_to_x,"ly:molecule-align-to!", 3, 0, 0,  (SCM mol, SCM axis, SCM dir),
-         "Align @var{mol} using its own extents.")
+
+         "Align @var{mol} using its own extents. @var{dir} is a number -1, 1 are "
+         " left and right respectively. Other values are interpolated (so 0 means "
+         " the center. ")
 {
   SCM_ASSERT_TYPE(unsmob_molecule (mol), mol, SCM_ARG1, __FUNCTION__, "molecule");
-  SCM_ASSERT_TYPE(ly_axis_p (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
-  SCM_ASSERT_TYPE(ly_dir_p (dir), dir, SCM_ARG3, __FUNCTION__, "dir");
+  SCM_ASSERT_TYPE(is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
+  SCM_ASSERT_TYPE(gh_number_p (dir), dir, SCM_ARG3, __FUNCTION__, "number");
 
-  unsmob_molecule (mol)->align_to ((Axis)gh_scm2int (axis), Direction (gh_scm2int (dir)));
+  unsmob_molecule (mol)->align_to ((Axis)gh_scm2int (axis),
+                                  gh_scm2double (dir));
 
   return SCM_UNDEFINED;
 }