X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmy-lily-parser.cc;h=5c14442745860ffb32fef0245173469b6d690165;hb=5e98b3e282d175f1908dc3017412431f443642c1;hp=9924a78a7e39f2405ff44c5c5d24c0c89abf962e;hpb=a41a7fb966e8552cc8da7c4eab1b60eb7b8eff3a;p=lilypond.git diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc index 9924a78a7e..5c14442745 100644 --- a/lily/my-lily-parser.cc +++ b/lily/my-lily-parser.cc @@ -1,7 +1,7 @@ /* - my-lily-parser.cc -- implement + my-lily-parser.cc -- implement My_lily_parser - source file of the LilyPond music typesetter + source file of the GNU LilyPond music typesetter (c) 1997 Han-Wen Nienhuys */ @@ -10,10 +10,21 @@ #include "my-lily-lexer.hh" #include "debug.hh" #include "main.hh" -#include "voice-element.hh" +#include "music-list.hh" #include "musical-request.hh" #include "command-request.hh" +#include "parser.hh" +void +My_lily_parser::clear_notenames() +{ + lexer_p_->clear_notenames(); +} +void +My_lily_parser::set_version_check(bool ig) +{ + ignore_version_b_ = ig; +} void My_lily_parser::set_debug() { @@ -25,11 +36,13 @@ My_lily_parser::set_debug() lexer_p_->set_debug( !monitor->silence(s+"Lexer") && check_debug); #endif } + void My_lily_parser::print_declarations() { #ifndef NPRINT String s = ""; + if (init_parse_b_) s = "Init"; if (!monitor->silence(s+"Declarations") && check_debug) { @@ -41,22 +54,24 @@ My_lily_parser::print_declarations() void My_lily_parser::parse_file(String init, String s) { - *mlog << "Parsing ... "; lexer_p_ = new My_lily_lexer; - - set_debug(); - - lexer_p_->new_input(init, source_l_); + init_str_ = init; + + *mlog << "Parsing ... "; + + init_parse_b_ = true; + lexer_p_->new_input( init, source_l_); do_yyparse(); print_declarations(); - + init_parse_b_ = false; - lexer_p_->new_input(s, source_l_); + lexer_p_->new_input( s , source_l_); do_yyparse(); + print_declarations(); - + if(!define_spot_array_.empty()) - warning("Braces don't match.",0); + warning("Braces don't match."); } My_lily_parser::~My_lily_parser() @@ -67,7 +82,7 @@ My_lily_parser::~My_lily_parser() void My_lily_parser::remember_spot() { - define_spot_array_.push(here_ch_C()); + define_spot_array_.push(here_input()); } char const * @@ -79,8 +94,7 @@ My_lily_parser::here_ch_C()const void My_lily_parser::parser_error(String s) { - lexer_p_->LexerError(s); - + here_input().error(s); if ( fatal_error_i_ ) exit( fatal_error_i_ ); error_level_i_ = 1; @@ -90,26 +104,34 @@ void My_lily_parser::set_duration_mode(String s) { s = s.upper_str(); - last_duration_mode = (s== "LAST"); + last_duration_mode_b_ = (s== "LAST"); } +void +My_lily_parser::set_default_duration(Duration const *d) +{ + last_duration_mode_b_ = false; + default_duration_ = *d; +} + + void My_lily_parser::set_last_duration(Duration const *d) { - if (last_duration_mode) + if (last_duration_mode_b_) default_duration_ = *d; } -Voice_element* +Chord* My_lily_parser::get_word_element(Text_def* tdef_p, Duration * duration_p) { - Voice_element* velt_p = new Voice_element; + Chord* velt_p = new Request_chord; Lyric_req* lreq_p = new Lyric_req(tdef_p); lreq_p->duration_ = *duration_p; - lreq_p->defined_ch_C_ = here_ch_C(); + lreq_p->set_spot( here_input()); velt_p->add(lreq_p); @@ -117,40 +139,53 @@ My_lily_parser::get_word_element(Text_def* tdef_p, Duration * duration_p) return velt_p; } -Voice_element * -My_lily_parser::get_rest_element(String, Duration * duration_p ) +Chord * +My_lily_parser::get_rest_element(String s, Duration * duration_p ) { - Voice_element* velt_p = new Voice_element; - velt_p->defined_ch_C_ = lexer_p_->here_ch_C(); + Chord* velt_p = new Request_chord; + velt_p->set_spot( here_input()); + + if (s=="s") { /* Space */ + Skip_req * skip_p = new Skip_req; + skip_p->duration_ = *duration_p; - Rest_req * rest_req_p = new Rest_req; - rest_req_p->duration_ = *duration_p; - rest_req_p->defined_ch_C_ = here_ch_C(); + skip_p->set_spot( here_input()); + velt_p->add(skip_p); + } + else { + Rest_req * rest_req_p = new Rest_req; + rest_req_p->duration_ = *duration_p; + rest_req_p->set_spot( here_input()); + + velt_p->add(rest_req_p); + } + Stem_req * stem_p = new Stem_req; + stem_p->duration_ = *duration_p; + stem_p->set_spot ( here_input ()); + velt_p->add(stem_p); - velt_p->add(rest_req_p); delete duration_p; return velt_p; } -Voice_element * +Chord * My_lily_parser::get_note_element(Note_req *rq, Duration * duration_p ) { - Voice_element*v = new Voice_element; - v->defined_ch_C_ = here_ch_C(); + Chord*v = new Request_chord; + v->set_spot( here_input()); + + v->add(rq); if (duration_p->type_i_ >= 2) { Stem_req * stem_req_p = new Stem_req(); stem_req_p->duration_ = *duration_p; - stem_req_p->defined_ch_C_ = here_ch_C(); + stem_req_p->set_spot( here_input()); v->add(stem_req_p); } rq->set_duration(*duration_p); - rq->defined_ch_C_ = here_ch_C(); - - - v->add(rq); + rq->set_spot( here_input()); delete duration_p ; return v; } @@ -160,10 +195,10 @@ My_lily_parser::get_parens_request(char c) { Request* req_p=0; switch (c) { - case '|': - req_p = new Barcheck_req; - break; + case '~': + req_p = new Tie_req; + break; case '[': case ']': { @@ -175,7 +210,12 @@ My_lily_parser::get_parens_request(char c) } break; - + case '>': + case '!': + case '<': + req_p = new Span_dynamic_req; + break; + case ')': case '(': req_p = new Slur_req; @@ -186,10 +226,13 @@ My_lily_parser::get_parens_request(char c) } switch (c) { + case '<': + case '>': case '(': case '[': req_p->span()->spantype = Span_req::START; break; + case '!': case ')': case ']': req_p->span()->spantype = Span_req::STOP; @@ -199,25 +242,30 @@ My_lily_parser::get_parens_request(char c) break; } - req_p->defined_ch_C_ = here_ch_C(); + if (req_p->musical()->span_dynamic()) { + Span_dynamic_req* s_l= (req_p->musical()->span_dynamic()) ; + s_l->dynamic_dir_i_ = (c == '<') ? 1:-1; + } + + req_p->set_spot( here_input()); return req_p; } My_lily_parser::My_lily_parser(Sources * source_l) { + first_b_ = true; source_l_ = source_l; lexer_p_ = 0; default_duration_.type_i_ = 4; - default_octave_i_ = 3; // retain old default + default_octave_i_ = 0; textstyle_str_="roman"; // in lexer? error_level_i_ = 0; - last_duration_mode = false; - defined_ch_C_ = 0; + last_duration_mode_b_ = true; fatal_error_i_ = 0; } void -My_lily_parser::add_requests(Voice_element*v) +My_lily_parser::add_requests(Chord*v) { for (int i = 0; i < pre_reqs.size(); i++) { v->add(pre_reqs[i]); @@ -228,3 +276,22 @@ My_lily_parser::add_requests(Voice_element*v) } post_reqs.set_size(0); } + +Input +My_lily_parser::pop_spot() +{ + return define_spot_array_.pop(); +} + +Input +My_lily_parser::here_input()const +{ + Source_file * f_l= lexer_p_->source_file_l(); + return Input(f_l, here_ch_C()); +} + +void +My_lily_parser::add_notename(String s, Melodic_req * m_p) +{ + lexer_p_->add_notename(s, m_p); +}