X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmy-lily-parser.cc;h=4a44f5919a8f814821e23923db12fd8f430bdaa2;hb=54404c570a48ddf9772c5ca64a154d0c0149e61e;hp=69be888d94c3bebcdea41904490e6bacb2c9dcae;hpb=b17fe8f245d6eab3eb1c8d66ee8a6f7acb94f85e;p=lilypond.git diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc index 69be888d94..4a44f5919a 100644 --- a/lily/my-lily-parser.cc +++ b/lily/my-lily-parser.cc @@ -3,295 +3,129 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--2001 Han-Wen Nienhuys + Jan Nieuwenhuizen */ #include "my-lily-parser.hh" #include "my-lily-lexer.hh" #include "debug.hh" #include "main.hh" -#include "music-list.hh" -#include "musical-request.hh" -#include "command-request.hh" #include "parser.hh" +#include "file-results.hh" +#include "scope.hh" -void -My_lily_parser::clear_notenames() -{ - lexer_p_->clear_notenames(); -} -void -My_lily_parser::set_version_check(bool ig) +My_lily_parser::My_lily_parser (Sources * source_l) { - ignore_version_b_ = ig; + source_l_ = source_l; + lexer_p_ = 0; + default_duration_ = Duration (2,0); + error_level_i_ = 0; + + + default_header_p_ =0; } -void -My_lily_parser::set_debug() + +My_lily_parser::~My_lily_parser () { -#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 + delete lexer_p_; + delete default_header_p_; } void -My_lily_parser::print_declarations() +My_lily_parser::set_version_check (bool) { -#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) +My_lily_parser::parse_file (String init, String s) { - lexer_p_ = new My_lily_lexer; - init_str_ = init; - - *mlog << "Parsing ... "; - - init_parse_b_ = true; - lexer_p_->new_input( init, source_l_); - do_yyparse(); - print_declarations(); + lexer_p_ = new My_lily_lexer; - init_parse_b_ = false; - lexer_p_->new_input( s , source_l_); - do_yyparse(); - print_declarations(); + lexer_p_->main_input_str_ = s; - - if(!define_spot_array_.empty()) - warning("Braces don't match."); -} + progress_indication (_ ("Parsing...")); -My_lily_parser::~My_lily_parser() -{ - delete lexer_p_; -} - -void -My_lily_parser::remember_spot() -{ - define_spot_array_.push(here_input()); -} + set_yydebug (0); + lexer_p_->new_input (init, source_l_); + do_yyparse (); -char const * -My_lily_parser::here_ch_C()const -{ - return lexer_p_->here_ch_C(); + progress_indication ("\n"); + + if (!define_spot_array_.empty ()) + { + define_spot_array_.top ().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 -My_lily_parser::parser_error(String s) +My_lily_parser::push_spot () { - here_input().error(s); - if ( fatal_error_i_ ) - exit( fatal_error_i_ ); - error_level_i_ = 1; + define_spot_array_.push (here_input ()); } -void -My_lily_parser::set_duration_mode(String s) +char const * +My_lily_parser::here_ch_C () const { - s = s.upper_str(); - last_duration_mode_b_ = (s== "LAST"); + return lexer_p_->here_ch_C (); } void -My_lily_parser::set_default_duration(Duration const *d) +My_lily_parser::parser_error (String s) { - last_duration_mode_b_ = false; - default_duration_ = *d; + here_input ().error (s); + error_level_i_ = 1; + exit_status_global = 1; } - void -My_lily_parser::set_last_duration(Duration const *d) +My_lily_parser::set_last_duration (Duration const *d) { - if (last_duration_mode_b_) - default_duration_ = *d; + default_duration_ = *d; } -Chord* -My_lily_parser::get_word_element(Text_def* tdef_p, Duration * duration_p) +Input +My_lily_parser::pop_spot () { - Chord* velt_p = new Voice_element; - - 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; + return define_spot_array_.pop (); } -Chord * -My_lily_parser::get_rest_element(String s, Duration * duration_p ) -{ - Chord* velt_p = new Voice_element; - 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 { - 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); - - delete duration_p; - return velt_p; -} - -Chord * -My_lily_parser::get_note_element(Note_req *rq, Duration * duration_p ) +Input +My_lily_parser::here_input () const { - Chord*v = new Voice_element; - 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->set_spot( here_input()); - v->add(stem_req_p); - } - - rq->set_duration(*duration_p); - rq->set_spot( here_input()); - delete duration_p ; - return v; + return lexer_p_->here_input (); } -Request* -My_lily_parser::get_parens_request(char c) -{ - Request* req_p=0; - switch (c) { - - case '~': - req_p = new Tie_req; - break; - case '[': - case ']': - { - Beam_req*b = new Beam_req; - int p_i=default_duration_.plet_.type_i_ ; // ugh . Should junk? - if (p_i!= 1) - b->nplet = p_i; - req_p = b; - } - break; - - case '>': - case '!': - case '<': - req_p = new Span_dynamic_req; - break; - - case ')': - case '(': - req_p = new Slur_req; - break; - default: - assert(false); - break; - } - - switch (c) { - case '<': - case '>': - case '(': - case '[': - req_p->span()->spantype = Span_req::START; - break; - case '!': - case ')': - case ']': - req_p->span()->spantype = Span_req::STOP; - break; - - default: - break; - } +// move me? +#include "paper-def.hh" +#include "translator-def.hh" - if (req_p->musical()->span_dynamic()) { - Span_dynamic_req* s_l= (req_p->musical()->span_dynamic()) ; - s_l->dynamic_dir_i_ = (c == '<') ? 1:-1; - } +My_lily_parser * current_parser; - req_p->set_spot( here_input()); - return req_p; -} +MAKE_SCHEME_CALLBACK (My_lily_parser,paper_description, 0); -My_lily_parser::My_lily_parser(Sources * source_l) +SCM +My_lily_parser::paper_description () { - first_b_ = true; - source_l_ = source_l; - lexer_p_ = 0; - default_duration_.type_i_ = 4; - default_octave_i_ = 0; - textstyle_str_="roman"; // in lexer? - error_level_i_ = 0; - last_duration_mode_b_ = true; - fatal_error_i_ = 0; -} + My_lily_parser * me = current_parser; -void -My_lily_parser::add_requests(Chord*v) -{ - for (int i = 0; i < pre_reqs.size(); i++) { - v->add(pre_reqs[i]); - } - pre_reqs.set_size(0); - for (int i = 0; i add(post_reqs[i]); - } - post_reqs.set_size(0); -} - -Input -My_lily_parser::pop_spot() -{ - return define_spot_array_.pop(); -} + Music_output_def *id = unsmob_music_output_def (me->lexer_p_->lookup_identifier ("$defaultpaper")); + Paper_def *p = dynamic_cast (id->clone ()); -Input -My_lily_parser::here_input()const -{ - Source_file * f_l= lexer_p_->source_file_l(); - return Input(f_l, here_ch_C()); + SCM al = p->translator_p_dict_p_->to_alist (); + SCM l = SCM_EOL; + for (SCM s = al ; gh_pair_p (s); s = gh_cdr (s)) + { + Translator_def * td = unsmob_translator_def (gh_cdar (s)); + l = gh_cons (gh_cons (gh_caar (s), td->to_alist ()), l); + } + return l; } + -void -My_lily_parser::add_notename(String s, Melodic_req * m_p) -{ - lexer_p_->add_notename(s, m_p); -}