From 13d7d1ca88393d21480f4ebf84225c052207dbcf Mon Sep 17 00:00:00 2001
From: hanwen <hanwen>
Date: Mon, 16 Feb 2004 02:38:26 +0000
Subject: [PATCH] more files.

---
 ChangeLog                        |   4 +
 lily/context-scheme.cc           | 169 +++++++++++++++++++++++++++++++
 lily/include/score-translator.hh |  28 +++++
 lily/score-translator.cc         |  31 ++++++
 4 files changed, 232 insertions(+)
 create mode 100644 lily/context-scheme.cc
 create mode 100644 lily/include/score-translator.hh
 create mode 100644 lily/score-translator.cc

diff --git a/ChangeLog b/ChangeLog
index 07b3b2e3aa..ce1b4a6bdc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2004-02-16  Han-Wen Nienhuys   <hanwen@xs4all.nl>
 
+	* lily/context-scheme.cc: new file.
+
+	* lily/score-translator.cc (get_output): new file.
+
 	* lily/include/grob-info.hh: origin_contexts() now does not
 	include the originating engraver
 
diff --git a/lily/context-scheme.cc b/lily/context-scheme.cc
new file mode 100644
index 0000000000..a9f28b7fac
--- /dev/null
+++ b/lily/context-scheme.cc
@@ -0,0 +1,169 @@
+#include "context.hh"
+#include "context-def.hh"
+
+
+LY_DEFINE(ly_context_id,
+	  "ly:context-id", 1,0,0,  (SCM context),
+	  "Return the id string of @var{context}, i.e. for @code{\\context Voice "
+"= one .. } it will return the string @code{one}.")
+{
+  Context * tr =   (unsmob_context (context));
+  SCM_ASSERT_TYPE(tr, context, SCM_ARG1, __FUNCTION__, "Context");
+
+  return scm_makfrom0str (tr->id_string_. to_str0 ());
+}
+
+
+LY_DEFINE(ly_context_name,
+	  "ly:context-name", 1,0,0,  (SCM context),
+	  "Return the name of @var{context}, i.e. for @code{\\context Voice "
+"= one .. } it will return the symbol @code{Voice}.")
+{
+  Context * tr =   (unsmob_context (context));
+  SCM_ASSERT_TYPE(tr, context, SCM_ARG1, __FUNCTION__, "Context");
+
+  return unsmob_context_def (tr->definition_)->get_context_name (); 
+}
+
+
+LY_DEFINE(ly_context_pushpop_property,
+	  "ly:context-pushpop-property", 3, 1, 0,
+	  (SCM context, SCM grob, SCM eltprop, SCM val),
+	  "Do a single @code{\\override} or @code{\\revert} operation "
+	  "in @var{context}. The grob definition @code{grob} is extended with "
+	  "@code{eltprop} (if @var{val} is specified) "
+	  "or reverted (if  unspecified).")
+{
+  Context *tg =  (unsmob_context (context));
+
+  SCM_ASSERT_TYPE(tg, context, SCM_ARG1, __FUNCTION__, "context");
+  SCM_ASSERT_TYPE(gh_symbol_p (grob), grob, SCM_ARG2, __FUNCTION__, "symbol");
+  SCM_ASSERT_TYPE(gh_symbol_p (eltprop), eltprop, SCM_ARG3, __FUNCTION__, "symbol");
+
+  execute_pushpop_property (tg, grob, eltprop, val);
+
+  return SCM_UNDEFINED;
+}
+
+
+LY_DEFINE(ly_get_context_property,
+	  "ly:get-context-property", 2, 0, 0,
+	  (SCM context, SCM name),
+	  "retrieve the value of @var{name} from context @var{context}")
+{
+  Context *t = unsmob_context (context);
+  Context * tr=    (t);
+  SCM_ASSERT_TYPE(tr, context, SCM_ARG1, __FUNCTION__, "Translator group");
+  SCM_ASSERT_TYPE(gh_symbol_p (name), name, SCM_ARG2, __FUNCTION__, "symbol");
+
+  return tr->internal_get_property (name);
+  
+}
+
+LY_DEFINE(ly_set_context_property,
+	  "ly:set-context-property!", 3, 0, 0,
+	  (SCM context, SCM name, SCM val),
+	  "set value of property @var{name} in context @var{context} to @var{val}.")
+{
+  Context *t = unsmob_context (context);
+  Context * tr=    (t);
+
+  SCM_ASSERT_TYPE(tr, context, SCM_ARG1, __FUNCTION__, "Context");
+  SCM_ASSERT_TYPE(gh_symbol_p (name), name, SCM_ARG2, __FUNCTION__, "symbol");
+
+  tr->internal_set_property (name, val);
+
+  return SCM_UNSPECIFIED;
+}
+
+
+LY_DEFINE(ly_context_property_where_defined,
+	  "ly:context-property-where-defined", 2, 0, 0,
+	  (SCM context, SCM name),
+	  "Return the context above @var{context} where @var{name}  is defined.")
+{
+  Context *t = unsmob_context (context);
+  Context * tr =  (t);
+  SCM_ASSERT_TYPE(tr, context, SCM_ARG1, __FUNCTION__, "Context");
+  SCM_ASSERT_TYPE(gh_symbol_p (name), name, SCM_ARG2, __FUNCTION__, "symbol");
+
+
+  tr = tr->where_defined (name);
+
+  if (tr)
+    return tr->self_scm();
+
+  return SCM_EOL;
+}
+
+LY_DEFINE(ly_unset_context_property,
+	  "ly:unset-context-property", 2, 0, 0,
+	  (SCM context, SCM name),
+	  "Unset value of property @var{name} in context @var{context}.")
+{
+  Context *t = unsmob_context (context);
+  Context * tr =  (t);
+  SCM_ASSERT_TYPE(tr, context, SCM_ARG1, __FUNCTION__, "Context");
+  SCM_ASSERT_TYPE(gh_symbol_p (name), name, SCM_ARG2, __FUNCTION__, "symbol");
+
+  tr->unset_property (name);
+
+  return SCM_UNSPECIFIED;
+}
+
+
+
+LY_DEFINE(ly_context_parent,
+	  "ly:context-parent", 1, 0, 0,
+	  (SCM context),
+	  "Return the parent of @var{context}, #f if none.")
+{
+  Context *t = unsmob_context (context);
+  Context * tr=    (t);
+
+  SCM_ASSERT_TYPE(tr, context, SCM_ARG1, __FUNCTION__, "Context");
+
+  tr =  tr->daddy_context_ ;
+  if (tr)
+    return tr->self_scm();
+  else
+    return SCM_BOOL_F;
+}
+
+/*
+  Todo: should support translator IDs, and creation?
+ */
+LY_DEFINE(ly_translator_find,
+	  "ly:translator-find", 2, 0,0,
+	  (SCM context, SCM name),
+	  "Find a parent of @var{context} that has name or alias @var{name}. "
+	  "Return @code{#f} if not found." )
+{
+  Context * tr=    ( unsmob_context (context));
+
+  SCM_ASSERT_TYPE(tr, context, SCM_ARG1, __FUNCTION__, "context");
+  SCM_ASSERT_TYPE(gh_symbol_p (name), name, SCM_ARG2, __FUNCTION__, "symbol");
+  
+  while (tr)
+    {
+      if (tr->is_alias (name))
+	return tr->self_scm();
+      tr =  tr->daddy_context_ ;
+    }
+  
+  return SCM_BOOL_F;
+}
+
+
+LY_DEFINE(ly_context_properties,
+	  "ly:context-properties", 1, 0, 0,
+	  (SCM context),
+	  "Return all properties  of @var{context} in an alist.")
+{
+  Context *t = unsmob_context (context);
+  Context * tr= (t);
+
+  SCM_ASSERT_TYPE(tr, context, SCM_ARG1, __FUNCTION__, "Context");
+
+  return tr->properties_as_alist ();
+}
diff --git a/lily/include/score-translator.hh b/lily/include/score-translator.hh
new file mode 100644
index 0000000000..0b619fc191
--- /dev/null
+++ b/lily/include/score-translator.hh
@@ -0,0 +1,28 @@
+/*   
+  score-translator.hh -- declare Score_translator
+
+source file of the GNU LilyPond music typesetter
+
+(c) 2004 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ */
+
+#ifndef SCORE_TRANSLATOR_HH
+#define SCORE_TRANSLATOR_HH
+
+#include "translator-group.hh" 
+
+class Score_translator : public virtual Translator_group 
+{
+  friend class Score_context;
+ protected:
+  virtual Music_output* get_output ();
+  virtual void prepare (Moment);
+  virtual void finish ();
+  virtual void one_time_step ();
+};
+
+
+#endif /* SCORE_TRANSLATOR_HH */
+
+
diff --git a/lily/score-translator.cc b/lily/score-translator.cc
new file mode 100644
index 0000000000..74c2411d41
--- /dev/null
+++ b/lily/score-translator.cc
@@ -0,0 +1,31 @@
+/*   
+  score-translator.cc --  implement Score_translator
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2004 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ */
+
+#include "score-translator.hh"
+#include "moment.hh"
+
+void
+Score_translator::prepare (Moment)
+{
+}
+
+Music_output*
+Score_translator::get_output ()
+{
+  return 0;
+}
+
+void
+Score_translator::finish ()
+{
+}
+
+void
+Score_translator::one_time_step ()
+{
+}
-- 
2.39.5