X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmy-lily-parser.cc;h=b081bcf6eb0a0cbc02eba38476f58f1448e92e04;hb=ee513a2f7d18fc8d43e1c291350ed81856b0192d;hp=d267732e97f6afa301a0e438c4f254fbfdd7c624;hpb=225485917d3e66bd7eb907d6462e981ae1bd1654;p=lilypond.git diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc index d267732e97..b081bcf6eb 100644 --- a/lily/my-lily-parser.cc +++ b/lily/my-lily-parser.cc @@ -3,7 +3,8 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--2000 Han-Wen Nienhuys + Jan Nieuwenhuizen */ #include "my-lily-parser.hh" @@ -13,21 +14,24 @@ #include "music-list.hh" #include "musical-request.hh" #include "command-request.hh" +#include "lily-guile.hh" #include "parser.hh" -#include "header.hh" - +#include "scope.hh" +#include "file-results.hh" +#include "midi-def.hh" +#include "paper-def.hh" +#include "identifier.hh" +#include "chord.hh" My_lily_parser::My_lily_parser (Sources * source_l) { first_b_ = true; source_l_ = source_l; lexer_p_ = 0; - abbrev_beam_type_i_ = 0; + chord_tremolo_type_i_ = 0; default_duration_.durlog_i_ = 2; - default_octave_i_ = 0; - textstyle_str_="roman"; // in lexer? error_level_i_ = 0; - last_duration_mode_b_ = true; + fatal_error_i_ = 0; default_header_p_ =0; } @@ -38,76 +42,35 @@ My_lily_parser::~My_lily_parser() delete default_header_p_; } - -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() -{ -#ifndef NPRINT - String s = ""; - if (init_parse_b_) - s = "Init"; - set_yydebug (!monitor->silent_b (s+"Parser") && check_debug); - lexer_p_->set_debug (!monitor->silent_b (s+"Lexer") && check_debug); -#endif -} - -void -My_lily_parser::print_declarations() -{ -#ifndef NPRINT - String s = ""; - - if (init_parse_b_) - s = "Init"; - if (!monitor->silent_b (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; + lexer_p_->main_input_str_ = s; - *mlog << _("Parsing ... "); - - init_parse_b_ = true; - set_debug(); - lexer_p_->new_input (init, source_l_); - do_yyparse(); - - if (error_level_i_) - { - error (_("Found errors in init files")); - } - print_declarations(); + progress_indication (_("Parsing...")); init_parse_b_ = false; - set_debug(); - lexer_p_->new_input (s , source_l_); - do_yyparse(); - print_declarations(); - + set_yydebug (flower_dstream &&!flower_dstream->silent_b ("Parser")); + 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_; + + error_level_i_ = error_level_i_ | lexer_p_->errorlevel_i_; // ugh naming. } void @@ -133,218 +96,68 @@ My_lily_parser::parser_error (String s) } void -My_lily_parser::set_duration_mode (String s) -{ - s = s.upper_str(); - last_duration_mode_b_ = (s== "LAST"); -} - -void -My_lily_parser::set_abbrev_beam (int type_i) -{ - abbrev_beam_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; } - void -My_lily_parser::set_last_duration (Duration const *d) +My_lily_parser::set_chord_tremolo (int type_i) { - if (last_duration_mode_b_) - default_duration_ = *d; + chord_tremolo_type_i_ = type_i; } -Chord* -My_lily_parser::get_word_element (Text_def* tdef_p, Duration * duration_p) -{ - Chord* velt_p = new Request_chord; - - Lyric_req* lreq_p = new Lyric_req (tdef_p); - lreq_p->duration_ = *duration_p; - lreq_p->set_spot (here_input()); - velt_p->add (lreq_p); - - delete duration_p; - return velt_p; -} - -Chord * -My_lily_parser::get_rest_element (String s, Duration * duration_p) +// junk me +Simultaneous_music * +My_lily_parser::get_chord (Musical_pitch tonic, Array* add_arr_p, Array* sub_arr_p, Musical_pitch* inversion_p, Musical_pitch* bass_p, Duration d) { - 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; - - skip_p->set_spot (here_input()); - velt_p->add (skip_p); - } - else if ((duration_p->plet_.type_i_ == 1) && (duration_p->plet_.iso_i_ > 1)) - { - Multi_measure_rest_req* m = new Multi_measure_rest_req; - plet_.iso_i_ = 1; - default_duration_.plet_.iso_i_ = 1; - m->duration_ = *duration_p; - m->set_spot (here_input()); - velt_p->add (m); - } - 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); - } + Simultaneous_music*v = new Request_chord; + v->set_spot (here_input ()); - delete duration_p; - return velt_p; -} + /* + UARGAUGRAGRUAUGRUINAGRAUGIRNA -Chord * -My_lily_parser::get_note_element (Note_req *rq, Duration * duration_p) -{ - Chord*v = new Request_chord; - v->set_spot (here_input ()); + ugh + */ + Chord chord = to_chord (tonic, add_arr_p, sub_arr_p, inversion_p, bass_p); - v->add (rq); + Tonic_req* t = new Tonic_req; + t->pitch_ = tonic; + v->add_music (t); - // too bad parser reads (default) duration via member access, - // this hack will do for now.. - if (abbrev_beam_type_i_) + //urg + if (inversion_p + && Chord::find_notename_i (&chord.pitch_arr_, *inversion_p) > 0) { - assert (!duration_p->plet_b ()); - duration_p->set_plet (1, 2); + Inversion_req* i = new Inversion_req; + i->pitch_ = *inversion_p; + v->add_music (i); } - rq->set_duration (*duration_p); - rq->set_spot (here_input ()); - delete duration_p ; - return v; -} -Array* -My_lily_parser::get_parens_request (int t) -{ - Array& reqs = *new Array; - switch (t) + if (bass_p) { - case '~': - 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_) - { - reqs.push (new Beam_req); - } - else - { - Abbreviation_beam_req* a = new Abbreviation_beam_req; - a->type_i_ = abbrev_beam_type_i_; - if (t==']') - abbrev_beam_type_i_ = 0; - reqs.push (a); - } - } - break; - - case '>': - case '!': - case '<': - 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 '(': - { - reqs.push (new Slur_req); - } - break; - default: - assert (false); - break; + Bass_req* b = new Bass_req; + b->pitch_ = *bass_p; + v->add_music (b); } - switch (t) + Array pitch_arr = chord.to_pitch_arr (); + for (int i = 0; i < pitch_arr.size (); i++) { - case BEAMPLET: - reqs.top ()->span()->spantype = Span_req::START; - /* fall through */ - case '<': - case '>': - case '(': - case '[': - case PLET: - reqs[0]->span ()->spantype = Span_req::START; - break; - case MAEBTELP: - reqs.top ()->span()->spantype = Span_req::STOP; - /* fall through */ - case '!': - case ')': - case ']': - reqs[0]->span ()->spantype = Span_req::STOP; - break; - - default: - break; + Musical_pitch p = pitch_arr[i]; + Note_req* n = new Note_req; + n->pitch_ = p; + n->duration_ = d; + v->add_music (n); } - for (int i = 0; i < reqs.size (); i++) - if (reqs[i]->musical ()->span_dynamic ()) - { - Span_dynamic_req* s_l= (reqs[i]->musical ()->span_dynamic ()) ; - s_l->dynamic_dir_ = (t == '<') ? UP:DOWN; - } - - // ugh? don't we do this in the parser too? - reqs[0]->set_spot (here_input()); - return &reqs; + return v; } -void -My_lily_parser::add_requests (Chord*v) -{ - for (int i = 0; i < pre_reqs.size(); i++) - { - v->add (pre_reqs[i]); - } - pre_reqs.clear(); - for (int i = 0; i add (post_reqs[i]); - } - post_reqs.clear(); -} + Input My_lily_parser::pop_spot() @@ -355,12 +168,20 @@ My_lily_parser::pop_spot() Input My_lily_parser::here_input() const { - Source_file * f_l= lexer_p_->source_file_l(); - return Input (f_l, here_ch_C()); + return lexer_p_->here_input (); } -void -My_lily_parser::add_notename (String s, Melodic_req * m_p) +Paper_def* +My_lily_parser::default_paper_p () { - lexer_p_->add_notename (s, m_p); + Identifier *id = lexer_p_->lookup_identifier ("$defaultpaper"); + return id ? id->access_content_Paper_def (true) : new Paper_def ; } + +Midi_def* +My_lily_parser::default_midi_p () +{ + Identifier *id = lexer_p_->lookup_identifier ("$defaultmidi"); + return id ? id->access_content_Midi_def (true) : new Midi_def ; +} +