X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Finclude%2Fscheme-engraver.hh;h=79e01a7e1de3a243cce7674c8966fb88e090309b;hb=6c29621572c6ba09e8410f4efc54dcddcdbd673e;hp=ffce5fa204f201241610f56062c5a895c289686c;hpb=c1d7bc2217462a63bf5c5c6d6f6df5cb00099180;p=lilypond.git diff --git a/lily/include/scheme-engraver.hh b/lily/include/scheme-engraver.hh index ffce5fa204..79e01a7e1d 100644 --- a/lily/include/scheme-engraver.hh +++ b/lily/include/scheme-engraver.hh @@ -24,21 +24,28 @@ #include "engraver.hh" -class Scheme_engraver : public Engraver +struct Preinit_Scheme_engraver { + SCM initialize_function_; + SCM finalize_function_; + SCM precomputable_methods_ [TRANSLATOR_METHOD_PRECOMPUTE_COUNT]; + + // hashq table of interface-symbol -> scheme-function + Drul_array interface_acknowledger_hash_; + + // Alist of listened-symbol . scheme-function + SCM per_instance_listeners_; + Preinit_Scheme_engraver (); +}; + +class Scheme_engraver : Preinit_Scheme_engraver, public Engraver { - void init_from_scheme (SCM definition); public: TRANSLATOR_FAMILY_DECLARATIONS (Scheme_engraver); - Scheme_engraver (SCM definition); + Scheme_engraver (SCM definition, Context *c); protected: ~Scheme_engraver (); - void stop_translation_timestep (); - void start_translation_timestep (); - void process_music (); - void process_acknowledged (); - virtual void initialize (); virtual void finalize (); virtual void derived_mark () const; @@ -46,36 +53,15 @@ protected: virtual bool must_be_last () const; private: - virtual SCM get_acknowledger (SCM sym) + virtual SCM get_acknowledger (SCM sym, Direction start_end) { - return generic_get_acknowledger (sym, interface_acknowledger_hash_); - } - virtual SCM get_end_acknowledger (SCM sym) - { - return generic_get_acknowledger (sym, interface_end_acknowledger_hash_); + return generic_get_acknowledger + (sym, interface_acknowledger_hash_[start_end]); } - void init_acknowledgers (SCM alist, SCM *hash); - // For now no description. In future, something derived from the - // definition might make sense. - SCM translator_description () const { return SCM_EOL; } + SCM init_acknowledgers (SCM alist); bool must_be_last_; - - SCM acknowledge_grob_function_; - SCM stop_translation_timestep_function_; - SCM start_translation_timestep_function_; - SCM process_music_function_; - SCM process_acknowledged_function_; - SCM initialize_function_; - SCM finalize_function_; - - // hashq table of interface-symbol -> scheme-function - SCM interface_acknowledger_hash_; - SCM interface_end_acknowledger_hash_; - - // Alist of listened-symbol . scheme-function - SCM per_instance_listeners_; }; #endif /* SCHEME_ENGRAVER_HH */