X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmy-lily-lexer.cc;h=00e55ae4dbbc75c4393ef1eacbda98f49707447f;hb=eabde958a9a4559f474d2736e298bfda9920c4e0;hp=01b33c406eaaeddd4fdcf602832abba91c85c806;hpb=151617937a431d3db3e94a16db011600acdb4288;p=lilypond.git diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index 01b33c406e..00e55ae4db 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--1998 Han-Wen Nienhuys + (c) 1997--1999 Han-Wen Nienhuys */ #include @@ -11,61 +11,67 @@ #include "notename-table.hh" #include "interval.hh" #include "identifier.hh" -#include "assoc-iter.hh" #include "parser.hh" #include "keyword.hh" -#include "assoc.hh" #include "my-lily-lexer.hh" #include "debug.hh" #include "source-file.hh" -#include "parseconstruct.hh" #include "main.hh" #include "scope.hh" +#include "input.hh" static Keyword_ent the_key_tab[]={ - {"absdynamic", ABSDYNAMIC}, + {"spanrequest", SPANREQUEST}, {"accepts", ACCEPTS}, + {"alternative", ALTERNATIVE}, {"bar", BAR}, + {"breathe", BREATHE}, {"cadenza", CADENZA}, - {"clear", CLEAR}, + {"chordmodifiers", CHORDMODIFIERS}, + {"chords", CHORDS}, {"clef", CLEF}, {"cm", CM_T}, {"consists", CONSISTS}, - {"contains", CONTAINS}, + {"consistsend", CONSISTSEND}, + {"context", CONTEXT}, {"duration", DURATION}, {"font", FONT}, - {"grouping", GROUPING}, + {"grace", GRACE}, {"header", HEADER}, {"in", IN_T}, - {"lyric", LYRIC}, + {"lyrics", LYRICS}, {"key", KEY}, {"keysignature", KEYSIGNATURE}, {"mark", MARK}, {"musicalpitch", MUSICAL_PITCH}, {"time", TIME_T}, + {"times", TIMES}, {"midi", MIDI}, {"mm", MM_T}, + {"name", NAME}, {"notenames", NOTENAMES}, {"notes" , NOTES}, - {"octave", OCTAVE}, - {"output", OUTPUT}, {"partial", PARTIAL}, {"paper", PAPER}, {"penalty", PENALTY}, {"property", PROPERTY}, {"pt", PT_T}, {"relative", RELATIVE}, + {"remove", REMOVE}, + {"repeat", REPEAT}, + {"repetitions", REPETITIONS}, + {"addlyrics", ADDLYRICS}, + {"scm", SCM_T}, + {"scmfile", SCMFILE}, {"score", SCORE}, {"script", SCRIPT}, {"shape", SHAPE}, {"skip", SKIP}, - {"table", TABLE}, - {"spandynamic", SPANDYNAMIC}, - {"symboltables", SYMBOLTABLES}, + {"textscript", TEXTSCRIPT}, {"tempo", TEMPO}, {"translator", TRANSLATOR}, - {"type", TYPE}, {"transpose", TRANSPOSE}, + {"type", TYPE}, {"version", VERSION}, {0,0} }; @@ -77,6 +83,8 @@ My_lily_lexer::My_lily_lexer() scope_l_arr_.push (toplevel_scope_p_); errorlevel_i_ = 0; note_tab_p_ = new Notename_table; + chordmodifier_tab_p_ = new Notename_table; + main_input_b_ = false; } int @@ -88,9 +96,11 @@ My_lily_lexer::lookup_keyword (String s) Identifier* My_lily_lexer::lookup_identifier (String s) { + SCM sym = ly_symbol (s.ch_C()); + for (int i = scope_l_arr_.size (); i--; ) - if (scope_l_arr_[i]->elt_b (s)) - return (*scope_l_arr_[i])[s]; + if (scope_l_arr_[i]->elem_b (sym)) + return scope_l_arr_[i]->elem(sym); return 0; } @@ -102,15 +112,22 @@ My_lily_lexer::start_main_input () if (!monitor->silent_b ("InitLexer") && check_debug) set_debug (1); + new_input (main_input_str_, source_global_l); + if (safe_global_b) + allow_includes_b_ = false; print_declarations(true); } void -My_lily_lexer::set_identifier (String name_str, Identifier* i, bool unique_b) +My_lily_lexer::set_identifier (String name_str, Identifier* i, bool ) { - Identifier *old = lookup_identifier (name_str); + Identifier *old =0; + if (scope_l_arr_.top ()->elem_b (name_str)) + old = scope_l_arr_.top ()->elem(name_str); + + if (old) { #if 0 @@ -124,18 +141,19 @@ My_lily_lexer::set_identifier (String name_str, Identifier* i, bool unique_b) warning ( _f ("Identifier name is a keyword (`%s')", name_str)); } - (*scope_l_arr_.top ())[name_str] = i; + scope_l_arr_.top ()->elem (name_str) = i; } My_lily_lexer::~My_lily_lexer() { + delete chordmodifier_tab_p_; delete keytable_p_; delete toplevel_scope_p_ ; delete note_tab_p_; } void -My_lily_lexer::print_declarations (bool init_b) const +My_lily_lexer::print_declarations (bool ) const { for (int i=scope_l_arr_.size (); i--; ) { @@ -160,28 +178,41 @@ My_lily_lexer::LexerError (char const *s) } Musical_pitch -My_lily_lexer::lookup_pitch (String s) +My_lily_lexer::lookup_notename (String s) { return (*note_tab_p_)[s]; } +Musical_pitch +My_lily_lexer::lookup_chordmodifier (String s) +{ + return (*chordmodifier_tab_p_)[s]; +} + bool My_lily_lexer::notename_b (String s) const { - return note_tab_p_->elt_b (s); + return note_tab_p_->elem_b (s); } void -My_lily_lexer::add_notename (String s, Musical_pitch p) +My_lily_lexer::set_notename_table (Notename_table *p) +{ + delete note_tab_p_; + note_tab_p_ = p; +} + +bool +My_lily_lexer::chordmodifier_b (String s) const { - (*note_tab_p_)[s] = p; + return chordmodifier_tab_p_->elem_b (s); } void -My_lily_lexer::clear_notenames() +My_lily_lexer::set_chordmodifier_table (Notename_table *p) { - delete note_tab_p_; - note_tab_p_ = new Notename_table; + delete chordmodifier_tab_p_; + chordmodifier_tab_p_ = p; } char @@ -201,3 +232,10 @@ My_lily_lexer::escaped_char(char c) const } return 0; } + +Input +My_lily_lexer::here_input () const +{ + Source_file * f_l= source_file_l(); + return Input (f_l, here_ch_C()); +}