]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/lily-parser.cc
* tex/lilyponddefs.tex (\lyitem): Don't use \topalign to make
[lilypond.git] / lily / lily-parser.cc
index 3183421f39e6278b3171b57f58a4895073486dd9..355791e7191c0865ab5560d88d3f37b9ec4ad887 100644 (file)
@@ -66,7 +66,7 @@ IMPLEMENT_DEFAULT_EQUAL_P (Lily_parser);
 SCM
 Lily_parser::mark_smob (SCM s)
 {
-  Lily_parser *parser = (Lily_parser*) ly_cdr (s);
+  Lily_parser *parser = (Lily_parser*) SCM_CELL_WORD_1 (s);
   return (parser->lexer_) ? parser->lexer_->self_scm () : SCM_EOL;
 }
 
@@ -74,7 +74,7 @@ int
 Lily_parser::print_smob (SCM s, SCM port, scm_print_state*)
 {
   scm_puts ("#<my_lily_parser ", port);
-  Lily_parser *parser = (Lily_parser*) ly_cdr (s);
+  Lily_parser *parser = (Lily_parser*) SCM_CELL_WORD_1 (s);
   (void) parser;
   scm_puts (" >", port);
   return 1;
@@ -118,10 +118,6 @@ Lily_parser::parse_file (String init, String name, String out_name)
 void
 Lily_parser::parse_string (String ly_code)
 {
-#if 0
-  SCM parent_prot = lexer_ ? lexer_->self_scm () : SCM_EOL;
-#endif
-
   Lily_lexer * parent = lexer_;
   lexer_ = (parent == 0 ? new Lily_lexer (sources_)
            : new Lily_lexer (*parent));
@@ -129,7 +125,7 @@ Lily_parser::parse_string (String ly_code)
 
 
   SCM oldmod = scm_current_module ();
-  scm_set_current_module (ly_car (lexer_->scopes_));
+  scm_set_current_module (scm_car (lexer_->scopes_));
   
   // TODO: use $parser 
   lexer_->set_identifier (ly_symbol2scm ("parser"),
@@ -150,24 +146,6 @@ Lily_parser::parse_string (String ly_code)
 
   error_level_ = error_level_ | lexer_->error_level_;
 
-#if 0
-  if (Lily_lexer::unsmob (parent_prot))
-    {
-      /*
-       what the fuck is this good for?
-       */
-      parent->encoding_ = lexer_->encoding_;
-      parent->chordmodifier_tab_ = lexer_->chordmodifier_tab_;
-      parent->pitchname_tab_stack_ = lexer_->pitchname_tab_stack_;
-      parent->sources_ = lexer_->sources_;
-      parent->scopes_ = lexer_->scopes_;
-      parent->error_level_ = lexer_->error_level_; 
-      parent->main_input_b_ = lexer_->main_input_b_;
-    }
-  
-  scm_remember_upto_here_1 (parent_prot);
-#endif
-  
   scm_set_current_module (oldmod);
   lexer_ = 0;
 }
@@ -356,7 +334,7 @@ LY_DEFINE (ly_parser_define, "ly:parser-define",
           "Bind SYMBOL to VAL in PARSER_SMOB's module.")
 {
   Lily_parser *parser = unsmob_my_lily_parser (parser_smob);
-  SCM_ASSERT_TYPE (ly_c_symbol_p (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
+  SCM_ASSERT_TYPE (scm_is_symbol (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
   SCM_ASSERT_TYPE (parser, parser_smob, SCM_ARG2, __FUNCTION__, "parser");  
 
   parser->lexer_->set_identifier (scm_symbol_to_string (symbol), val);
@@ -370,7 +348,7 @@ LY_DEFINE (ly_parser_lookup, "ly:parser-lookup",
 {
   Lily_parser *parser = unsmob_my_lily_parser (parser_smob);
 
-  SCM_ASSERT_TYPE (ly_c_symbol_p (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
+  SCM_ASSERT_TYPE (scm_is_symbol (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
   SCM_ASSERT_TYPE (parser, parser_smob, SCM_ARG2, __FUNCTION__, "parser");  
 
   SCM val= parser->lexer_->lookup_identifier (ly_scm2string (scm_symbol_to_string (symbol)));
@@ -396,15 +374,14 @@ LY_DEFINE (ly_parser_parse_string, "ly:parser-parse-string",
 }
 
 Output_def*
-get_paper (Lily_parser *parser)
+get_layout (Lily_parser *parser)
 {
-  SCM id = parser->lexer_->lookup_identifier ("$defaultpaper");
-  Output_def *paper = unsmob_output_def (id);
-  paper = paper ? paper->clone () : new Output_def;
-  paper->set_variable (ly_symbol2scm ("is-paper"), SCM_BOOL_T);
+  SCM id = parser->lexer_->lookup_identifier ("$defaultlayout");
+  Output_def *layout = unsmob_output_def (id);
+  layout = layout ? layout->clone () : new Output_def;
+  layout->set_variable (ly_symbol2scm ("is-layout"), SCM_BOOL_T);
 
-  paper->parent_ = unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultbookpaper"));
-  return paper;
+  return layout;
 }
 
 
@@ -412,22 +389,22 @@ Output_def*
 get_midi (Lily_parser *parser)
 {
   SCM id = parser->lexer_->lookup_identifier ("$defaultmidi");
-  Output_def *paper = unsmob_output_def (id);
-  paper = paper ? paper->clone () : new Output_def;
-  paper->set_variable (ly_symbol2scm ("is-midi"), SCM_BOOL_T);
-  return paper;
+  Output_def *layout = unsmob_output_def (id);
+  layout = layout ? layout->clone () : new Output_def;
+  layout->set_variable (ly_symbol2scm ("is-midi"), SCM_BOOL_T);
+  return layout;
 }
 
 
 Output_def*
-get_bookpaper (Lily_parser *parser)
+get_paper (Lily_parser *parser)
 {
-  SCM id = parser->lexer_->lookup_identifier ("$defaultbookpaper");
-  Output_def *paper = unsmob_output_def (id);
+  SCM id = parser->lexer_->lookup_identifier ("$defaultpaper");
+  Output_def *layout = unsmob_output_def (id);
 
-  paper = paper ? dynamic_cast<Output_def*> (paper->clone ()) : new Output_def;
-  paper->set_variable (ly_symbol2scm ("is-bookpaper"), SCM_BOOL_T);
-  return paper;
+  layout = layout ? dynamic_cast<Output_def*> (layout->clone ()) : new Output_def;
+  layout->set_variable (ly_symbol2scm ("is-paper"), SCM_BOOL_T);
+  return layout;
 }
 
 
@@ -441,6 +418,9 @@ LY_DEFINE (ly_parser_print_score, "ly:parser-print-score",
   Lily_parser *parser = unsmob_my_lily_parser (parser_smob);
   Score *score = unsmob_score (score_smob);
 
+  if (score->error_found_)
+    return SCM_UNSPECIFIED;
+  
   SCM_ASSERT_TYPE (parser, parser_smob, SCM_ARG1, __FUNCTION__, "parser");
   SCM_ASSERT_TYPE (score, score_smob, SCM_ARG2, __FUNCTION__, "score");
 
@@ -454,19 +434,19 @@ LY_DEFINE (ly_parser_print_score, "ly:parser-print-score",
   (*c)++;
 
   SCM os = scm_makfrom0str (outname.to_string ().to_str0 ());
-  SCM bookpaper = get_bookpaper (parser)->self_scm ();
+  SCM paper = get_paper (parser)->self_scm ();
   for (int i = 0; i < score->defs_.size (); i++)
-    default_rendering (score->music_, score->defs_[i]->self_scm (),
-                      bookpaper,
+    default_rendering (score->get_music (), score->defs_[i]->self_scm (),
+                      paper,
                       header, os);
 
   if (score->defs_.is_empty ())
     {
-      Output_def *paper = get_paper (parser);
-      default_rendering (score->music_, paper->self_scm (),
-                        get_bookpaper (parser)->self_scm (),
+      Output_def *layout = get_layout (parser);
+      default_rendering (score->get_music(), layout->self_scm (),
+                        get_paper (parser)->self_scm (),
                         header, os);
-      scm_gc_unprotect_object (paper->self_scm ());
+      scm_gc_unprotect_object (layout->self_scm ());
     }
   return SCM_UNSPECIFIED;
 }
@@ -496,13 +476,13 @@ LY_DEFINE (ly_parser_print_book, "ly:parser-print-book",
 {
   Lily_parser *parser = unsmob_my_lily_parser (parser_smob);
   Book *book = unsmob_book (book_smob);
-  Output_def *bp = unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultbookpaper"));
+  Output_def *bp = unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultpaper"));
   
   SCM_ASSERT_TYPE (parser, parser_smob, SCM_ARG1, __FUNCTION__, "Lilypond parser");
   SCM_ASSERT_TYPE (book, book_smob, SCM_ARG2, __FUNCTION__, "Book");
   
   /*  ugh. changing argument.*/
-  book->bookpaper_ = bp;
+  book->paper_ = bp;
   
   File_name outname (parser->output_basename_);
   int *c = &parser->book_count_;
@@ -510,15 +490,16 @@ LY_DEFINE (ly_parser_print_book, "ly:parser-print-book",
     outname.base_ += "-" + to_string (*c);
   (*c)++;
 
-  Output_def *paper = get_paper (parser);
-
-  Paper_book* pb = book->process (outname.to_string (), paper);
+  Output_def *layout = get_layout (parser);
 
-  pb->output (outname.to_string ());
-  
-  scm_gc_unprotect_object (paper->self_scm ());
-  scm_gc_unprotect_object (pb->self_scm ());
+  Paper_book* pb = book->process (outname.to_string (), layout);
+  if (pb)
+    {
+      pb->output (outname.to_string ());
+      scm_gc_unprotect_object (pb->self_scm ());
+    }
 
+  scm_gc_unprotect_object (layout->self_scm ());
   return SCM_UNSPECIFIED;
 }