From 6ec233d36c15d082279ed05eb57f3f605a4ce3cd Mon Sep 17 00:00:00 2001
From: Mike Solomon <mike@apollinemike.com>
Date: Thu, 29 Jul 2010 19:26:10 +0200
Subject: [PATCH 2/2] Add engraver-make-spanner

---
 lily/engraver-scheme.cc  |   19 +++++++++++++++++++
 lily/include/engraver.hh |    1 +
 2 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/lily/engraver-scheme.cc b/lily/engraver-scheme.cc
index c2cbe1a..adbbff3 100644
--- a/lily/engraver-scheme.cc
+++ b/lily/engraver-scheme.cc
@@ -19,6 +19,7 @@
 
 #include "engraver.hh"
 #include "grob.hh"
+#include "spanner.hh"
 
 LY_DEFINE (ly_engraver_make_grob, "ly:engraver-make-grob",
 	   3, 0, 0, (SCM engraver, SCM grob_name, SCM cause),
@@ -38,3 +39,21 @@ LY_DEFINE (ly_engraver_make_grob, "ly:engraver-make-grob",
   return g->self_scm ();
 }
 
+LY_DEFINE (ly_engraver_make_spanner, "ly:engraver-make-spanner",
+	   3, 0, 0, (SCM engraver, SCM spanner_name, SCM cause),
+	   "Creates a spanner originating from given engraver instance, "
+	   "with give @code{grob_name}, a symbol.  "
+	   "@code{cause} should either be another grob "
+	   "or a music event.")
+{
+  LY_ASSERT_TYPE (unsmob_engraver, engraver, 1);
+  LY_ASSERT_TYPE (ly_is_symbol, spanner_name, 2);
+  LY_ASSERT_TYPE (ly_is_grob_cause, cause, 3);
+
+  Spanner *s = unsmob_engraver (engraver)->
+    internal_make_spanner(spanner_name, cause,
+		       ly_symbol2string (spanner_name).c_str (),
+		       "scheme", 0, "scheme");
+  return s->self_scm ();
+}
+
diff --git a/lily/include/engraver.hh b/lily/include/engraver.hh
index 3cf83b9..675c262 100644
--- a/lily/include/engraver.hh
+++ b/lily/include/engraver.hh
@@ -32,6 +32,7 @@ class Engraver : public Translator
   Grob *internal_make_grob (SCM sym, SCM cause, char const *name,
 			    char const *f, int l, char const *fun);
   friend SCM ly_engraver_make_grob (SCM, SCM, SCM);
+  friend SCM ly_engraver_make_spanner (SCM, SCM, SCM);
   friend class Engraver_group;
 protected:
   /*
-- 
1.6.6.1

