X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmy-lily-parser.cc;h=049455393000565035b8d089de9b6dbf98646d38;hb=refs%2Ftags%2Frelease%2F1.0.8;hp=9878369e16b96ae6d0d9ce4ec1c0748f54cd379d;hpb=439b9eae8f830918d62c7374d4f72a1079334316;p=lilypond.git diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc index 9878369e16..0494553930 100644 --- a/lily/my-lily-parser.cc +++ b/lily/my-lily-parser.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1998 Han-Wen Nienhuys */ #include "my-lily-parser.hh" @@ -15,7 +15,10 @@ #include "command-request.hh" #include "parser.hh" #include "header.hh" - +#include "file-results.hh" +#include "midi-def.hh" +#include "paper-def.hh" +#include "identifier.hh" My_lily_parser::My_lily_parser (Sources * source_l) { @@ -23,12 +26,9 @@ My_lily_parser::My_lily_parser (Sources * source_l) source_l_ = source_l; lexer_p_ = 0; abbrev_beam_type_i_ = 0; - default_abbrev_type_i_ = 0; default_duration_.durlog_i_ = 2; - default_octave_i_ = 0; - textstyle_str_="roman"; // in lexer? + default_abbrev_i_ = 0; error_level_i_ = 0; - last_duration_mode_b_ = true; fatal_error_i_ = 0; default_header_p_ =0; } @@ -38,7 +38,7 @@ My_lily_parser::~My_lily_parser() delete lexer_p_; delete default_header_p_; } - + void My_lily_parser::clear_notenames() @@ -51,59 +51,28 @@ My_lily_parser::set_version_check (bool ig) { ignore_version_b_ = ig; } -void -My_lily_parser::set_debug() -{ -#ifndef NPRINT - String s = ""; - if (init_parse_b_) - s = "Init"; - set_yydebug (!monitor->silence (s+"Parser") && check_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) - { - lexer_p_->print_declarations (init_parse_b_); - } -#endif -} void My_lily_parser::parse_file (String init, String s) { lexer_p_ = new My_lily_lexer; init_str_ = init; - - *mlog << "Parsing ... "; - - init_parse_b_ = true; - set_debug(); - lexer_p_->new_input (init, source_l_); - do_yyparse(); - print_declarations(); + lexer_p_->main_input_str_ = s; + + *mlog << _ ("Parsing..."); init_parse_b_ = false; - set_debug(); - lexer_p_->new_input (s , source_l_); - do_yyparse(); - print_declarations(); + set_yydebug (!monitor->silent_b ("Parser") && check_debug); + lexer_p_->new_input (init, source_l_); + do_yyparse (); - if (!define_spot_array_.empty()) { - warning ("Braces don't match."); + warning (_ ("braces don't match")); error_level_i_ = 1; } + + inclusion_global_array = lexer_p_->filename_str_arr_; } void @@ -112,7 +81,7 @@ My_lily_parser::remember_spot() define_spot_array_.push (here_input()); } -char const * +char const * My_lily_parser::here_ch_C() const { return lexer_p_->here_ch_C(); @@ -125,13 +94,7 @@ My_lily_parser::parser_error (String s) if (fatal_error_i_) exit (fatal_error_i_); error_level_i_ = 1; -} - -void -My_lily_parser::set_duration_mode (String s) -{ - s = s.upper_str(); - last_duration_mode_b_ = (s== "LAST"); + exit_status_i_ = 1; } void @@ -140,81 +103,72 @@ My_lily_parser::set_abbrev_beam (int type_i) abbrev_beam_type_i_ = type_i; } -void -My_lily_parser::set_last_abbrev (int type_i) -{ - default_abbrev_type_i_ = type_i; -} void -My_lily_parser::set_default_duration (Duration const *d) +My_lily_parser::set_last_duration (Duration const *d) { - last_duration_mode_b_ = false; default_duration_ = *d; - set_last_abbrev (0); -} - -void -My_lily_parser::set_last_duration (Duration const *d) -{ - if (last_duration_mode_b_) - default_duration_ = *d; - set_last_abbrev (0); + /* + forget plet part, + but keep sticky plet factor within plet brackets + */ + default_duration_.plet_ = plet_; } -Chord* -My_lily_parser::get_word_element (Text_def* tdef_p, Duration * duration_p) +Simultaneous_music* +My_lily_parser::get_word_element (String s, Duration * duration_p) { - Chord* velt_p = new Request_chord; - - Lyric_req* lreq_p = new Lyric_req (tdef_p); + Simultaneous_music* velt_p = new Request_chord; + Lyric_req* lreq_p = new Lyric_req; + lreq_p ->text_str_ = s; lreq_p->duration_ = *duration_p; lreq_p->set_spot (here_input()); - velt_p->add (lreq_p); + velt_p->add_music (lreq_p); delete duration_p; return velt_p; } -Chord * + +Simultaneous_music * My_lily_parser::get_rest_element (String s, Duration * duration_p) -{ - Chord* velt_p = new Request_chord; +{ + Simultaneous_music* 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; + Skip_req * skip_p = new Skip_req; + skip_p->duration_ = *duration_p; - skip_p->set_spot (here_input()); - velt_p->add (skip_p); + skip_p->set_spot (here_input()); + velt_p->add_music (skip_p); } - else + 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); + + velt_p->add_music (rest_req_p); } delete duration_p; return velt_p; } -Chord * +Simultaneous_music * My_lily_parser::get_note_element (Note_req *rq, Duration * duration_p) { - Chord*v = new Request_chord; - v->set_spot (here_input()); + Simultaneous_music*v = new Request_chord; + v->set_spot (here_input ()); + + v->add_music (rq); - v->add (rq); - // too bad parser reads (default) duration via member access, // this hack will do for now.. if (abbrev_beam_type_i_) @@ -223,98 +177,121 @@ My_lily_parser::get_note_element (Note_req *rq, Duration * duration_p) duration_p->set_plet (1, 2); } rq->set_duration (*duration_p); - rq->set_spot (here_input()); + rq->set_spot (here_input ()); delete duration_p ; return v; } -Request* -My_lily_parser::get_parens_request (char c) +Array* +My_lily_parser::get_parens_request (int t) { - Request* req_p=0; - switch (c) + Array& reqs = *new Array; + switch (t) { - case '~': - req_p = new Tie_req; + reqs.push (new Tie_req); break; + case BEAMPLET: + case MAEBTELP: + { + Plet_req* p = new Plet_req; + p->plet_i_ = plet_.type_i_; + reqs.push (p); + } + /* fall through */ case '[': case ']': { if (!abbrev_beam_type_i_) { - Beam_req*b = new Beam_req; - int p_i=plet_.type_i_ ; // ugh . Should junk? - if (p_i!= 1) - b->nplet = p_i; - req_p = b; + reqs.push (new Beam_req); } else { Abbreviation_beam_req* a = new Abbreviation_beam_req; a->type_i_ = abbrev_beam_type_i_; - if (c==']') + if (t==']') abbrev_beam_type_i_ = 0; - req_p = a; + reqs.push (a); } } - break; + break; case '>': case '!': case '<': - req_p = new Span_dynamic_req; + reqs.push (new Span_dynamic_req); + break; + + case PLET: + case TELP: + { + Plet_req* p = new Plet_req; + p->plet_i_ = plet_.type_i_; + reqs.push (p); + } break; - case ')': case '(': - req_p = new Slur_req; + { + reqs.push (new Slur_req); + } break; default: assert (false); break; } - - switch (c) + + switch (t) { + case BEAMPLET: + reqs.top ()->access_Span_req ()->spantype = Span_req::START; + /* fall through */ case '<': case '>': case '(': case '[': - req_p->span()->spantype = Span_req::START; + case PLET: + reqs[0]->access_Span_req ()->spantype = Span_req::START; break; + case MAEBTELP: + reqs.top ()->access_Span_req ()->spantype = Span_req::STOP; + /* fall through */ case '!': case ')': case ']': - req_p->span()->spantype = Span_req::STOP; + reqs[0]->access_Span_req ()->spantype = Span_req::STOP; break; - + default: break; } - if (req_p->musical()->span_dynamic ()) - { - Span_dynamic_req* s_l= (req_p->musical()->span_dynamic ()) ; - s_l->dynamic_dir_ = (c == '<') ? UP:DOWN; - } + for (int i = 0; i < reqs.size (); i++) + if (reqs[i]->access_Musical_req ()->access_Span_dynamic_req ()) + { + Span_dynamic_req* s_l= (reqs[i]->access_Musical_req ()->access_Span_dynamic_req ()) ; + s_l->dynamic_dir_ = (t == '<') ? UP:DOWN; + } - req_p->set_spot (here_input()); - return req_p; + // ugh? don't we do this in the parser too? + reqs[0]->set_spot (here_input()); + return &reqs; } void -My_lily_parser::add_requests (Chord*v) +My_lily_parser::add_requests (Simultaneous_music*v) { - for (int i = 0; i < pre_reqs.size(); i++) + for (int i = 0; i < pre_reqs.size(); i++) { - v->add (pre_reqs[i]); + v->add_music (pre_reqs[i]); } pre_reqs.clear(); - for (int i = 0; i add (post_reqs[i]); + v->add_music (post_reqs[i]); } + post_reqs.clear(); } @@ -332,7 +309,23 @@ My_lily_parser::here_input() const } void -My_lily_parser::add_notename (String s, Melodic_req * m_p) +My_lily_parser::add_notename (String s, Musical_pitch p) +{ + lexer_p_->add_notename (s, p); + +} + +Paper_def* +My_lily_parser::default_paper_p () { - lexer_p_->add_notename (s, m_p); + Identifier *id = lexer_p_->lookup_identifier ("default_paper"); + return id ? id->access_Paper_def () : new Paper_def ; } + +Midi_def* +My_lily_parser::default_midi_p () +{ + Identifier *id = lexer_p_->lookup_identifier ("default_midi"); + return id ? id->access_Midi_def () : new Midi_def ; +} +