]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/my-lily-parser.cc
release: 0.1.1
[lilypond.git] / lily / my-lily-parser.cc
index db4561e1085d42da267e90b5423ac99c0c8cfeac..5c14442745860ffb32fef0245173469b6d690165 100644 (file)
@@ -1,7 +1,7 @@
 /*
   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 <hanwen@stack.nl>
 */
@@ -10,7 +10,7 @@
 #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"
@@ -36,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) {
@@ -49,25 +51,25 @@ My_lily_parser::print_declarations()
 #endif   
 }
 
-void
-My_lily_parser::do_init_file()
-{
-    init_parse_b_ = true;
-    set_debug();
-    lexer_p_->new_input(init_str_, source_l_);
-}
-
 void
 My_lily_parser::parse_file(String init, String s)
 {
-    *mlog << "Parsing ... ";
     lexer_p_ = new My_lily_lexer;
     init_str_ = init;
     
-    lexer_p_->new_input(s, source_l_);
+    *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_);
     do_yyparse();
     print_declarations();
 
+    
     if(!define_spot_array_.empty())
        warning("Braces don't match.");
 }
@@ -102,13 +104,13 @@ 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 = false;
+    last_duration_mode_b_ = false;
     default_duration_ = *d;
 }
 
@@ -116,15 +118,15 @@ My_lily_parser::set_default_duration(Duration const *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);
 
@@ -137,15 +139,16 @@ My_lily_parser::get_word_element(Text_def* tdef_p, Duration * duration_p)
     return velt_p;
 }
 
-Voice_element *
+Chord *
 My_lily_parser::get_rest_element(String s,  Duration * duration_p )
 {    
-    Voice_element* velt_p = new Voice_element;
+    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->length();
+       skip_p->duration_ = *duration_p;
+
        skip_p->set_spot( here_input());
        velt_p->add(skip_p);
     }
@@ -165,10 +168,10 @@ My_lily_parser::get_rest_element(String s,  Duration * 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;
+    Chord*v = new Request_chord;
     v->set_spot( here_input());
 
     v->add(rq);
@@ -193,6 +196,9 @@ My_lily_parser::get_parens_request(char c)
     Request* req_p=0;
     switch (c) {
 
+    case '~':
+       req_p = new Tie_req;
+       break;
     case '[':
     case ']':
     {
@@ -254,12 +260,12 @@ My_lily_parser::My_lily_parser(Sources * source_l)
     default_octave_i_ = 0;
     textstyle_str_="roman";            // in lexer?
     error_level_i_ = 0;
-    last_duration_mode = false;
+    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]);