]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/my-lily-parser.cc
release: 0.0.63
[lilypond.git] / lily / my-lily-parser.cc
index 21645d93bc6dd4838a06b5668012485bd07065ba..5389803e63dff272b66fdfa09607361334fb9656 100644 (file)
@@ -36,6 +36,7 @@ My_lily_parser::set_debug()
     lexer_p_->set_debug( !monitor->silence(s+"Lexer") && check_debug);
 #endif
 }
+
 void
 My_lily_parser::print_declarations()
 {
@@ -60,11 +61,17 @@ My_lily_parser::do_init_file()
 void
 My_lily_parser::parse_file(String init, String s)
 {
-    *mlog << "Parsing ... ";
     lexer_p_ = new My_lily_lexer;
     init_str_ = init;
     
+    
+
+    *mlog << "Parsing ... ";
     lexer_p_->new_input(s, source_l_);
+    if (!lexer_p_->source_file_l()) {
+       warning("Can not find toplevel file. Ignoring " + s);
+       return; 
+    }
     do_yyparse();
     print_declarations();
 
@@ -105,6 +112,14 @@ My_lily_parser::set_duration_mode(String s)
     last_duration_mode = (s== "LAST");
 }
 
+void
+My_lily_parser::set_default_duration(Duration const *d)
+{
+    last_duration_mode = false;
+    default_duration_ = *d;
+}
+
+
 void
 My_lily_parser::set_last_duration(Duration const *d)
 {
@@ -130,21 +145,29 @@ My_lily_parser::get_word_element(Text_def* tdef_p, Duration * duration_p)
 }
 
 Voice_element *
-My_lily_parser::get_rest_element(String,  Duration * duration_p )
+My_lily_parser::get_rest_element(String s,  Duration * duration_p )
 {    
     Voice_element* velt_p = new Voice_element;
     velt_p->set_spot( here_input());
 
-    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);
-    
+    if (s=="s") { /* Space */
+       Skip_req * skip_p = new Skip_req;
+       skip_p->duration_ = duration_p->length();
+       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;
 }
@@ -177,6 +200,9 @@ My_lily_parser::get_parens_request(char c)
     Request* req_p=0;
     switch (c) {
 
+    case '~':
+       req_p = new Tie_req;
+       break;
     case '[':
     case ']':
     {