X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Ftranslator.hh;h=1e1109d99cdc12dc6e0bee75b0accf363365bccf;hb=0817e0513d1016ff22a633b6fee20ddba2a062f2;hp=5c3cfec42b649ccb6a1f052ef006d5811049ced9;hpb=d6048913c2c793a6298a3e16a1a25c76711463b1;p=lilypond.git diff --git a/lily/include/translator.hh b/lily/include/translator.hh index 5c3cfec42b..1e1109d99c 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -3,43 +3,76 @@ source file of the GNU LilyPond music typesetter - (c) 1997--1999 Han-Wen Nienhuys + (c) 1997--2001 Han-Wen Nienhuys */ #ifndef TRANSLATOR_HH #define TRANSLATOR_HH + #include "global-ctor.hh" #include "string.hh" #include "lily-proto.hh" #include "virtual-methods.hh" -#include "scalar.hh" -#include "dictionary.hh" +#include "lily-guile.hh" #include "parray.hh" #include "input.hh" +#include "smobs.hh" + +#define get_property(x) internal_get_property(ly_symbol2scm(x)) +#define TRANSLATOR_DECLARATIONS(NAME) \ +public: \ + NAME();\ + VIRTUAL_COPY_CONS (Translator); \ + static SCM static_description_; \ + virtual SCM static_translator_description () const; \ + virtual SCM translator_description () const; + /** Make some kind of #Element#s from Requests. Elements are made by hierarchically grouped #Translator#s */ class Translator : public Input { + void init (); public: Music_output_def * output_def_l_; String type_str_; - virtual const char *name() const; bool is_alias_b (String) const; - VIRTUAL_COPY_CONS(Translator); + Translator (Translator const &); - Translator (); - virtual ~Translator (); + Translator_group * daddy_trans_l_ ; - - void print () const; - + DECLARE_SCHEME_CALLBACK(name, (SCM trans)); + DECLARE_SCHEME_CALLBACK(description,(SCM trans)); + void announces (); + + void removal_processing (); /** + ask daddy for a feature + */ + Music_output_def *output_def_l () const; + + SCM internal_get_property (SCM symbol) const; + + virtual Moment now_mom () const; + + /* + ugh: bubbled up from Translator_group. + */ + SCM simple_trans_list_; + SCM trans_group_list_; + SCM definition_; + + SCM properties_scm_; + DECLARE_SMOBS (Translator, dummy); + +public: + TRANSLATOR_DECLARATIONS(Translator); + /** try to fit the request in this engraver @return @@ -48,44 +81,12 @@ public: true: request swallowed. Don't try to put the request elsewhere. */ - bool try_music (Music*); - void pre_move_processing(); - void add_processing (); - void creation_processing (); - void process_requests(); - void post_move_processing(); - void removal_processing(); - /** - ask daddy for a feature - */ - Music_output_def *output_def_l () const; - Scalar get_property (String, Translator_group **) const; - virtual Moment now_mom () const; - -protected: - enum { - ORPHAN, - VIRGIN, - CREATION_INITED, - MOVE_INITED, - ACCEPTED_REQS, - PROCESSED_REQS, - ACKED_REQS, - MOVE_DONE - } status; - - /* - @see{try_request} - Default: always return false - */ - virtual void do_add_processing (); - virtual bool do_try_music (Music *req_l); - virtual void do_print () const; - virtual void do_pre_move_processing(){} - virtual void do_post_move_processing(){} - virtual void do_process_requests () {} - virtual void do_creation_processing() {} - virtual void do_removal_processing() {} + virtual bool try_music (Music *req_l); + virtual void stop_translation_timestep (); + virtual void start_translation_timestep (); + virtual void do_announces () ; + virtual void initialize () ; + virtual void finalize (); }; @@ -93,12 +94,49 @@ protected: A macro to automate administration of translators. */ #define ADD_THIS_TRANSLATOR(T) \ +SCM T::static_description_ = SCM_EOL;\ static void _ ## T ## _adder () {\ T *t = new T;\ + T::static_description_ = t->static_translator_description ();\ + scm_permanent_object (T::static_description_);\ t->type_str_ = classname (t);\ add_translator (t);\ }\ -ADD_GLOBAL_CTOR(_ ## T ## _adder); +SCM T::translator_description() const\ +{ \ + return static_description_;\ +}\ +ADD_GLOBAL_CTOR (_ ## T ## _adder); + + + + +#define ENTER_DESCRIPTION(classname,desc,grobs,acked,read,write) \ +ADD_THIS_TRANSLATOR (classname);\ +SCM \ +classname::static_translator_description () const \ +{ \ + SCM static_properties= SCM_EOL; \ + /* static_properties= acons (name ,gh_str02scm (Translator::name (self_scm ())), \ + static_properties_); \ + */ \ + static_properties= scm_acons (ly_symbol2scm ("grobs-created"), \ + parse_symbol_list (grobs), static_properties); \ + \ + static_properties= scm_acons (ly_symbol2scm ("description"), \ + ly_str02scm (desc), static_properties); \ + \ + static_properties= scm_acons (ly_symbol2scm ("interfaces-acked"), \ + parse_symbol_list (acked), static_properties); \ + \ + static_properties= scm_acons (ly_symbol2scm ("properties-read"), \ + parse_symbol_list (read), static_properties); \ + \ + static_properties= scm_acons (ly_symbol2scm ("properties-written"), \ + parse_symbol_list (write), static_properties); \ + \ + return static_properties; \ +} @@ -106,5 +144,5 @@ extern Dictionary *global_translator_dict_p; void add_translator (Translator*trans_p); Translator*get_translator_l (String s); - +DECLARE_UNSMOB(Translator,translator); #endif // TRANSLATOR_HH