From aaf166ae9e7e58e09c5d27e5bd3f5951f98232aa Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 19:47:39 +0000 Subject: [PATCH] lilypond-0.0.74pre --- lily/engraver-group.cc | 19 +++++++------ lily/identifier.cc | 10 +++---- lily/include/input-translator.hh | 48 ++++++++++++++++++++++++++++++++ lily/parser.y | 32 ++++++++++++--------- 4 files changed, 82 insertions(+), 27 deletions(-) create mode 100644 lily/include/input-translator.hh diff --git a/lily/engraver-group.cc b/lily/engraver-group.cc index c91921cefc..f876bf2605 100644 --- a/lily/engraver-group.cc +++ b/lily/engraver-group.cc @@ -13,7 +13,8 @@ #include "debug.hh" #include "p-score.hh" #include "score-elem.hh" -#include "input-engraver.hh" +#include "input-translator.hh" +Engraver* get_engraver_p(String); Engraver_group_engraver::~Engraver_group_engraver() { @@ -41,7 +42,7 @@ Engraver_group_engraver::removable_b()const Engraver_group_engraver::Engraver_group_engraver() { - igrav_l_ =0; + itrans_l_ =0; } void @@ -199,17 +200,17 @@ Translator* Engraver_group_engraver::find_get_translator_l(String n,String id) { Translator * ret=0; - Input_engraver * igrav_l= igrav_l_-> recursive_find ( n ); - if (igrav_l ) { + Input_translator * itrans_l= itrans_l_-> recursive_find ( n ); + if (itrans_l ) { ret = find_engraver_l(n,id); if (!ret) { Engraver_group_engraver * group = - igrav_l-> get_group_engraver_p(); + itrans_l-> get_group_engraver_p(); add(group); ret = group; - if (group->igrav_l_->is_name_b( n ) ) + if (group->itrans_l_->is_name_b( n ) ) ret ->id_str_ = id; else return ret->find_get_translator_l(n,id); @@ -294,8 +295,8 @@ Engraver_group_engraver::get_default_interpreter() if ( is_bottom_engraver_b() ) return daddy_grav_l_->get_default_interpreter(); - Engraver_group_engraver *grav_p= igrav_l_-> - get_default_igrav_l()->get_group_engraver_p(); + Engraver_group_engraver *grav_p= itrans_l_-> + get_default_itrans_l()->get_group_engraver_p(); add(grav_p ); if (grav_p->is_bottom_engraver_b()) return grav_p; @@ -306,5 +307,5 @@ Engraver_group_engraver::get_default_interpreter() bool Engraver_group_engraver::is_bottom_engraver_b()const { - return !igrav_l_->get_default_igrav_l(); + return !itrans_l_->get_default_itrans_l(); } diff --git a/lily/identifier.cc b/lily/identifier.cc index 072cd4def4..40c7e543e8 100644 --- a/lily/identifier.cc +++ b/lily/identifier.cc @@ -12,12 +12,12 @@ #include "identifier.hh" #include "my-lily-lexer.hh" #include "debug.hh" -#include "input-engraver.hh" + #include "symtable.hh" #include "lookup.hh" #include "script-def.hh" #include "request.hh" -#include "input-engraver.hh" +#include "input-translator.hh" IMPLEMENT_STATIC_NAME(Identifier); IMPLEMENT_IS_TYPE_B(Identifier); @@ -66,7 +66,7 @@ DEFAULT_PRINT(Symtables_id, Symtables, symtables); DEFAULT_PRINT(Music_id,Music , music); DEFAULT_PRINT(Request_id, Request, request); DEFAULT_PRINT(Score_id, Score, score); -DEFAULT_PRINT(Input_gravs_id, Input_engraver, igravs); +DEFAULT_PRINT(Input_trans_id, Input_translator, itrans); DEFAULT_PRINT(Paper_def_id,Paper_def, paperdef); void @@ -119,7 +119,7 @@ implement_id_class(Symtables_id, Symtables, symtables); implement_id_class(Music_id, Music, music); implement_id_class(Score_id, Score, score); implement_id_class(Request_id, Request, request); -implement_id_class(Input_gravs_id, Input_engraver, igravs); +implement_id_class(Input_trans_id, Input_translator, itrans); implement_id_class(Paper_def_id, Paper_def, paperdef); Identifier::Identifier(Identifier const&) @@ -135,5 +135,5 @@ default_accessor(Symtables_id, Symtables, symtables); virtual_accessor(Music_id, Music, music); default_accessor(Score_id, Score, score); virtual_accessor(Request_id, Request, request); -default_accessor(Input_gravs_id, Input_engraver, igravs); +default_accessor(Input_trans_id, Input_translator, itrans); default_accessor(Paper_def_id, Paper_def, paperdef); diff --git a/lily/include/input-translator.hh b/lily/include/input-translator.hh new file mode 100644 index 0000000000..fa4790cbe8 --- /dev/null +++ b/lily/include/input-translator.hh @@ -0,0 +1,48 @@ +/* + input-translator.hh -- declare Input_translator + + source file of the GNU LilyPond music typesetter + + (c) 1997 Han-Wen Nienhuys +*/ + + +#ifndef INPUT_TRANSLATOR_HH +#define INPUT_TRANSLATOR_HH + +#include "plist.hh" +#include "string.hh" +#include "lily-proto.hh" +#include "input.hh" +#include "string.hh" +#include "varray.hh" + +struct Input_translator_list : public Pointer_list +{ + Input_translator_list(Input_translator_list const &); + Input_translator_list(){} +}; + +struct Input_translator : Input { + Input_translator_list contains_itrans_p_list_; + Array consists_str_arr_; + Array alias_str_arr_; + String base_str_; + String type_str_; + String default_id_str_; + + void add(Input_translator *); + bool is_name_b(String); + bool accept_req_b(); + bool accepts_b(String); + void print() const; + Engraver_group_engraver * get_group_engraver_p(); + // Performer_group_performer * get_group_performer_p(); + Input_translator * get_default_itrans_l(); + Input_translator * recursive_find(String nm); + Input_translator * find_itrans_l(String nm); +}; +Engraver* get_engraver_p(String); +Performer* get_performer_p(String); + +#endif // Input_translator_HH diff --git a/lily/parser.y b/lily/parser.y index a19e4780b0..27472489af 100644 --- a/lily/parser.y +++ b/lily/parser.y @@ -20,7 +20,7 @@ #include "musical-request.hh" #include "my-lily-parser.hh" #include "text-def.hh" -#include "input-engraver.hh" +#include "input-translator.hh" #include "score.hh" #include "music-list.hh" @@ -47,7 +47,7 @@ Chord * chord; Duration *duration; Identifier *id; - Input_engraver * iregs; + Input_translator * iregs; Music *music; Music_list *musiclist; Score *score; @@ -203,7 +203,7 @@ yylex(YYSTYPE *s, void * v_l) %type old_identifier %type symboldef %type symtable symtable_body -%type input_engraver_spec input_engraver_spec_body +%type input_translator_spec input_translator_spec_body %left PRIORITY @@ -320,27 +320,33 @@ declaration: -input_engraver_spec: - REQUESTENGRAVER '{' input_engraver_spec_body '}' +input_translator_spec: + REQUESTENGRAVER '{' input_translator_spec_body '}' { $$ = $3; } ; -input_engraver_spec_body: - STRING { - $$ = new Input_engraver; - $$->type_str_ =*$1; +input_translator_spec_body: + STRING STRING { + $$ = new Input_translator; + $$->base_str_ = *$1; + $$->type_str_ =*$2; $$->set_spot ( THIS->here_input() ); delete $1; + delete $2; + } + | input_translator_spec_body ID STRING ';' { + $$-> default_id_str_ = *$3; + delete $3; } - | input_engraver_spec_body ALIAS STRING ';' { + | input_translator_spec_body ALIAS STRING ';' { $$-> alias_str_arr_.push(*$3); delete $3; } - | input_engraver_spec_body CONSISTS STRING ';' { + | input_translator_spec_body CONSISTS STRING ';' { $$-> consists_str_arr_.push(*$3); delete $3; } - | input_engraver_spec_body CONTAINS input_engraver_spec { + | input_translator_spec_body CONTAINS input_translator_spec { $$->add($3); } ; @@ -411,7 +417,7 @@ paper_body: | paper_body STRING '=' REAL ';' { $$->set_var(*$2, $4); } - | paper_body input_engraver_spec { + | paper_body input_translator_spec { $$->set( $2 ); } | paper_body error { -- 2.39.5