X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmy-lily-lexer.cc;h=49d84d6335efbb3619cc61a937be719042924de3;hb=0cf97b5cdceecbba937f43ac827f4065aad5001e;hp=1e0b06c06a5768c8d590f3749a120e3bb7c5a017;hpb=1ecbcc5337a3ea4d347b197c60e9c95ea11ad93e;p=lilypond.git diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index 1e0b06c06a..49d84d6335 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,30 +11,35 @@ #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}, + {"autochange", AUTOCHANGE}, + {"spanrequest", SPANREQUEST}, + {"simultaneous", SIMULTANEOUS}, + {"sequential", SEQUENTIAL}, {"accepts", ACCEPTS}, {"alternative", ALTERNATIVE}, {"bar", BAR}, + {"breathe", BREATHE}, {"cadenza", CADENZA}, + {"chordmodifiers", CHORDMODIFIERS}, {"chords", CHORDS}, {"clef", CLEF}, {"cm", CM_T}, {"consists", CONSISTS}, + {"consistsend", CONSISTSEND}, + {"context", CONTEXT}, {"duration", DURATION}, {"font", FONT}, - {"grouping", GROUPING}, + {"grace", GRACE}, {"header", HEADER}, {"in", IN_T}, {"lyrics", LYRICS}, @@ -48,7 +53,7 @@ static Keyword_ent the_key_tab[]={ {"mm", MM_T}, {"name", NAME}, {"notenames", NOTENAMES}, - {"notes" , NOTES}, + {"notes", NOTES}, {"partial", PARTIAL}, {"paper", PAPER}, {"penalty", PENALTY}, @@ -57,19 +62,19 @@ static Keyword_ent the_key_tab[]={ {"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} }; @@ -81,6 +86,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 @@ -92,21 +99,26 @@ 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]->elem_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; } void My_lily_lexer::start_main_input () { - if (!monitor->silent_b ("InitDeclarations") && check_debug) + if (flower_dstream && !flower_dstream->silent_b ("InitDeclarations") && flower_dstream) print_declarations (true); - if (!monitor->silent_b ("InitLexer") && check_debug) + if (flower_dstream && !flower_dstream->silent_b ("InitLexer") && flower_dstream) set_debug (1); + new_input (main_input_str_, source_global_l); + if (safe_global_b) + allow_includes_b_ = false; print_declarations(true); } @@ -123,20 +135,21 @@ My_lily_lexer::set_identifier (String name_str, Identifier* i, bool ) { #if 0 if (unique_b) - old->warning(_f ("redeclaration of `\\%s\'", name_str)); + old->warning(_f ("redeclaration of `\\%s'", name_str)); #endif delete old; } if (lookup_keyword (name_str) >= 0) { - warning ( _f ("Identifier name is a keyword (`%s')", name_str)); + 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_; @@ -147,7 +160,7 @@ My_lily_lexer::print_declarations (bool ) const { for (int i=scope_l_arr_.size (); i--; ) { - DOUT << "Scope no. " << i << '\n'; + DEBUG_OUT << "Scope no. " << i << '\n'; scope_l_arr_[i]->print (); } } @@ -168,11 +181,17 @@ 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 { @@ -180,16 +199,23 @@ My_lily_lexer::notename_b (String s) const } void -My_lily_lexer::add_notename (String s, Musical_pitch p) +My_lily_lexer::set_notename_table (Notename_table *p) { - (*note_tab_p_)[s] = p; + delete note_tab_p_; + note_tab_p_ = p; +} + +bool +My_lily_lexer::chordmodifier_b (String s) const +{ + return chordmodifier_tab_p_->elem_b (s); } void -My_lily_lexer::set_notename_table(Notename_table *p) +My_lily_lexer::set_chordmodifier_table (Notename_table *p) { - delete note_tab_p_; - note_tab_p_ = p; + delete chordmodifier_tab_p_; + chordmodifier_tab_p_ = p; } char @@ -209,3 +235,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, (char*)here_ch_C ()); +}