X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Ftranslator.hh;h=754bfba73a9acdf6afc39652bea8459c06457e01;hb=7f6816438d66f6d70db5b68454d80656a0f3f131;hp=b1e333a59adc39feaee2d7dc3a44dc04f116aa3c;hpb=6ce61146edb1c36647b514778c29cdc9beedab6a;p=lilypond.git diff --git a/lily/include/translator.hh b/lily/include/translator.hh index b1e333a59a..754bfba73a 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -3,36 +3,96 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--2005 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 "input.hh" +#include "smobs.hh" + +struct Acknowledge_information +{ + SCM symbol_; + Engraver_void_function_engraver_grob_info function_; +}; + +#define TRANSLATOR_DECLARATIONS(NAME) \ + public: \ + NAME (); \ + VIRTUAL_COPY_CONSTRUCTOR (Translator, NAME); \ + static SCM static_description_; \ + static Array acknowledge_static_array_; \ + virtual void fetch_precomputable_methods (Translator_void_method_ptr methods[]);\ + virtual SCM static_translator_description () const; \ + virtual SCM translator_description () const; \ + virtual Engraver_void_function_engraver_grob_info get_acknowledger (SCM sym) { \ + return static_get_acknowledger (sym);\ + }\ + static Engraver_void_function_engraver_grob_info static_get_acknowledger (SCM sym); + +#define DECLARE_ACKNOWLEDGER(x) public: void acknowledge_ ## x (Grob_info); protected: + +enum Translator_precompute_index { + START_TRANSLATION_TIMESTEP, + STOP_TRANSLATION_TIMESTEP, + PROCESS_MUSIC, + PROCESS_ACKNOWLEDGED, + TRANSLATOR_METHOD_PRECOMPUTE_COUNT, +}; + +/* + Translate music into grobs. +*/ +class Translator +{ + void init (); + +protected: + bool must_be_last_; -class Translator { public: - String id_str_; - - int iterator_count_; - - virtual Global_translator *global_l() { return 0; } - - /// Score_register = 0, Staff_registers = 1, etc) - virtual void print()const; - virtual int depth_i()const=0; - virtual bool is_bottom_engraver_b() const { return false; } - virtual bool try_request(Request*); - virtual Translator *find_get_translator_l(String name, String id)=0; - virtual Translator *ancestor_l(int l=1)=0; - virtual ~Translator(){} - NAME_MEMBERS(); - Translator(); - virtual Translator *get_default_interpreter()=0; + bool must_be_last () const; + + Context *context () const { return daddy_context_; } + + Translator (Translator const &); + + SCM internal_get_property (SCM symbol) const; + + virtual Output_def *get_output_def () const; + virtual Translator_group *get_daddy_translator ()const; + virtual Moment now_mom () const; + + virtual bool try_music (Music *req); + virtual void initialize (); + virtual void finalize (); + + void stop_translation_timestep (); + void start_translation_timestep (); + void process_music (); + void process_acknowledged (); + + Score_context *get_score_context () const; + Global_context *get_global_context () const; + + TRANSLATOR_DECLARATIONS (Translator); + DECLARE_SMOBS (Translator, dummy); + +protected: // should be private. + Context *daddy_context_; + virtual void derived_mark () const; + + friend class Context_def; + friend class Context; }; +void add_translator (Translator *trans); +Translator *get_translator (SCM s); +DECLARE_UNSMOB (Translator, translator); #endif // TRANSLATOR_HH