X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmy-lily-lexer.cc;h=d070a412c97c4ab51616ac7da815f02a5088012f;hb=7a748b8d385139bf3c68d1370a119d277d92134b;hp=48f08e8e98652677eede2f50e10bd6915c659954;hpb=11613b92019bb42418863f43de92287a64878f14;p=lilypond.git diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index 48f08e8e98..d070a412c9 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2003 Han-Wen Nienhuys + (c) 1997--2004 Han-Wen Nienhuys */ #include @@ -12,7 +12,6 @@ #include "lily-proto.hh" #include "scm-hash.hh" #include "interval.hh" -#include "input-file-results.hh" #include "lily-guile.hh" #include "parser.hh" #include "keyword.hh" @@ -22,13 +21,14 @@ #include "main.hh" #include "input.hh" #include "moment.hh" -#include "ly-modules.hh" +#include "ly-module.hh" -static Keyword_ent the_key_tab[]={ - {"accacciatura", ACCACCIATURA}, +static Keyword_ent the_key_tab[] = { + {"acciaccatura", ACCIACCATURA}, {"accepts", ACCEPTS}, {"addlyrics", ADDLYRICS}, + {"addquote", ADDQUOTE}, {"alias", ALIAS}, {"alternative", ALTERNATIVE}, {"apply", APPLY}, @@ -37,8 +37,9 @@ static Keyword_ent the_key_tab[]={ {"appoggiatura", APPOGGIATURA}, {"autochange", AUTOCHANGE}, {"bar", BAR}, + {"book", BOOK}, {"breathe", BREATHE}, - {"chordmodifiers", CHORDMODIFIERS}, + {"change", CHANGE}, {"chords", CHORDS}, {"clef", CLEF}, {"consists", CONSISTS}, @@ -46,14 +47,15 @@ static Keyword_ent the_key_tab[]={ {"context", CONTEXT}, {"default", DEFAULT}, {"denies", DENIES}, + {"drums", DRUMS}, {"description", DESCRIPTION}, - {"duration", DURATION}, {"figures",FIGURES}, {"grace", GRACE}, {"grobdescriptions", GROBDESCRIPTIONS}, {"header", HEADER}, {"key", KEY}, {"lyrics", LYRICS}, + {"lyricsto", NEWADDLYRICS}, {"mark", MARK}, {"markup", MARKUP}, {"midi", MIDI}, @@ -62,14 +64,11 @@ static Keyword_ent the_key_tab[]={ {"notes", NOTES}, {"octave", OCTAVE}, {"once", ONCE}, - {"outputproperty", OUTPUTPROPERTY}, {"override", OVERRIDE}, {"paper", PAPER}, {"partcombine", PARTCOMBINE}, {"partial", PARTIAL}, - {"pitch", PITCH}, - {"pitchnames", PITCHNAMES}, - {"property", PROPERTY}, + {"quote", QUOTE}, {"relative", RELATIVE}, {"remove", REMOVE}, {"repeat", REPEAT}, @@ -80,55 +79,64 @@ static Keyword_ent the_key_tab[]={ {"set", SET}, {"simultaneous", SIMULTANEOUS}, {"skip", SKIP}, + {"tag", TAG}, {"tempo", TEMPO}, {"time", TIME_T}, {"times", TIMES}, - {"translator", TRANSLATOR}, {"transpose", TRANSPOSE}, + {"transposition", TRANSPOSITION}, {"type", TYPE}, {"unset", UNSET}, - {0,0} + {"with", WITH}, + {0, 0} }; -My_lily_lexer::My_lily_lexer () +My_lily_lexer::My_lily_lexer (Sources *srcs) { keytable_ = new Keyword_table (the_key_tab); + encoding_ = SCM_EOL; + chordmodifier_tab_ = scm_make_vector (scm_int2num (1), SCM_EOL); + pitchname_tab_stack_ = SCM_EOL; + sources_ = srcs; scopes_ = SCM_EOL; - add_scope(ly_make_anonymous_module()); - errorlevel_ =0; + add_scope (ly_make_anonymous_module ()); + errorlevel_ = 0; main_input_b_ = false; } +SCM +My_lily_lexer::encoding () const +{ + return encoding_ ; +} + void My_lily_lexer::add_scope (SCM module) { - ly_reexport_module (scm_current_module()); + ly_reexport_module (scm_current_module ()); scm_set_current_module (module); - for (SCM s = scopes_; gh_pair_p (s); s = gh_cdr (s)) + for (SCM s = scopes_; ly_c_pair_p (s); s = ly_cdr (s)) { - /* - UGH. how to do this more neatly? - */ - SCM expr = scm_list_n (ly_symbol2scm ("module-use!"), - module, scm_list_n (ly_symbol2scm ("module-public-interface"), - gh_car (s), SCM_UNDEFINED), - SCM_UNDEFINED); - - scm_primitive_eval(expr); + /* UGH. how to do this more neatly? */ + SCM expr + = scm_list_3 (ly_symbol2scm ("module-use!"), + module, + scm_list_2 (ly_symbol2scm ("module-public-interface"), + ly_car (s))); + scm_primitive_eval (expr); } - scopes_ = scm_cons (module, scopes_); } SCM My_lily_lexer::remove_scope () { - SCM sc = gh_car (scopes_); - scopes_ = gh_cdr (scopes_); - scm_set_current_module (gh_car (scopes_)); + SCM sc = ly_car (scopes_); + scopes_ = ly_cdr (scopes_); + scm_set_current_module (ly_car (scopes_)); return sc; } @@ -144,11 +152,11 @@ SCM My_lily_lexer::lookup_identifier (String s) { SCM sym = ly_symbol2scm (s.to_str0()); - for (SCM s = scopes_; gh_pair_p (s); s = gh_cdr (s)) + for (SCM s = scopes_; ly_c_pair_p (s); s = ly_cdr (s)) { - SCM var = ly_module_lookup (gh_car (s), sym); + SCM var = ly_module_lookup (ly_car (s), sym); if (var != SCM_BOOL_F) - return scm_variable_ref(var); + return scm_variable_ref (var); } return SCM_UNDEFINED; @@ -156,30 +164,29 @@ My_lily_lexer::lookup_identifier (String s) void My_lily_lexer::start_main_input () -{ - new_input (main_input_string_, &global_input_file->sources_); - allow_includes_b_ = allow_includes_b_ && ! (safe_global_b); +{ + // yy_flex_debug = 1; + new_input (main_input_name_, sources_); + /* Do not allow \include in --safe-mode */ + allow_includes_b_ = allow_includes_b_ && ! safe_global_b; - scm_module_define (gh_car (scopes_), + scm_module_define (ly_car (scopes_), ly_symbol2scm ("input-file-name"), - scm_makfrom0str (main_input_string_.to_str0())); + scm_makfrom0str (main_input_name_.to_str0 ())); } void My_lily_lexer::set_identifier (SCM name, SCM s) { - assert (gh_string_p (name)); + assert (ly_c_string_p (name)); if (lookup_keyword (ly_scm2string (name)) >= 0) { - size_t sz; - char * str = gh_scm2newstr (name, &sz) ; - warning (_f ("Identifier name is a keyword: `%s'", str)); - free (str); + warning (_f ("Identifier name is a keyword: `%s'", SCM_STRING_CHARS (name))); } SCM sym = scm_string_to_symbol (name); - SCM mod = gh_car (scopes_); + SCM mod = ly_car (scopes_); scm_module_define (mod, sym, s); } @@ -194,10 +201,8 @@ My_lily_lexer::~My_lily_lexer () void My_lily_lexer::LexerError (char const *s) { - if (include_stack_.empty ()) - { - progress_indication (_f ("error at EOF: %s", s)+ String ("\n")); - } + if (include_stack_.is_empty ()) + progress_indication (_f ("error at EOF: %s", s) + String ("\n")); else { errorlevel_ |= 1; @@ -234,23 +239,14 @@ My_lily_lexer::here_input () const void My_lily_lexer::prepare_for_next_token () { - last_input_ = here_input(); + last_input_ = here_input (); } -#if 0 -SCM -My_lily_lexer::scan_markup_word (String s) +void +My_lily_lexer::set_encoding (String s) { - /* - TODO: better implementation: - - - make a table of markup functions, for quicker lookup - - - error handling. - - */ - SCM s = scm_c_eval_str ((s + "-markup").to_str0()); - yylval.scm = s; - return MARKUP_HEAD; + if (s.length ()) + encoding_ = ly_symbol2scm (s.to_str0 ()); + else + encoding_ = SCM_EOL; } -#endif