]> git.donarmstrong.com Git - lilypond.git/commitdiff
* scm/lily.scm (collect-scores-for-book): new function.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 20 Jun 2004 20:27:05 +0000 (20:27 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 20 Jun 2004 20:27:05 +0000 (20:27 +0000)
* ly/init.ly: print collected scores/musics.

* lily/my-lily-parser.cc (LY_DEFINE): define parser in parser
scope, not in lily module.

* lily/book.cc (LY_DEFINE): ly:make-book. New function.

ChangeLog
lily/book.cc
lily/my-lily-parser.cc
lily/score.cc
ly/declarations-init.ly
ly/init.ly
scm/lily.scm
scm/safe-lily.scm

index a64a4a6536515e47477dbf2d988717aa7a793a1d..3afcd91c295d6192dde3233c608d0cd02fe4cc3d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2004-06-20  Han-Wen Nienhuys   <hanwen@xs4all.nl>
 
+       * scm/lily.scm (collect-scores-for-book): new function.
+
+       * ly/init.ly: print collected scores/musics.
+
+       * lily/my-lily-parser.cc (LY_DEFINE): define parser in parser
+       scope, not in lily module.
+
+       * lily/book.cc (LY_DEFINE): ly:make-book. New function.
+
        * configure.in (PKG_CONFIG_PATH): add --enable-gui flag, and
        encapsulate gtk/pango tests.
  
index 7387d645d63818a9314f3695bd6ed59a9322c513..f84560d3cdf2694b9181d5bfac31c52c4eb18455 100644 (file)
@@ -95,3 +95,30 @@ Book::process (String outname, Output_def *default_def)
   return paper_book;
 }
 
+LY_DEFINE(ly_make_book, "ly:make-book",
+         2, 0, 1, (SCM bookpaper, SCM header, SCM scores),
+         "Make a \\book of @var{bookpaper} and @var{header} (which may be #f as well)  "
+         "containing @code{\scores}.")
+{
+  Output_def * odef = unsmob_output_def (bookpaper);
+  SCM_ASSERT_TYPE (odef, bookpaper,
+                  SCM_ARG1, __FUNCTION__, "Output_def");
+
+  Book *book = new Book;
+  book->bookpaper_ = odef;
+
+  if (ly_c_module_p (header))
+    book->header_ = header;
+  
+  for (SCM s = scores; ly_c_pair_p (s); s = ly_cdr (s))
+    {
+      Score *score = unsmob_score (ly_car (s));
+      if (score)
+       book->scores_.push (score);
+    }
+  
+  SCM x = book->self_scm ();
+  scm_gc_unprotect_object (x);
+  return x;
+}
+  
index bd8939af9d5bca92d663060794895f8646853ac0..1abe0fe85a9f3c62a8a8619bd670d424c35a09af 100644 (file)
@@ -281,8 +281,8 @@ LY_DEFINE (ly_parse_file, "ly:parse-file",
       My_lily_parser *parser = new My_lily_parser (&sources);
 
       // TODO: use $parser 
-      scm_module_define (global_lily_module, ly_symbol2scm ("parser"),
-                        parser->self_scm ());
+      parser->lexer_->set_identifier (ly_symbol2scm ("parser"),
+                                     parser->self_scm ());
       parser->parse_file (init, file_name, out_file);
 
       bool error = parser->error_level_;
@@ -377,7 +377,7 @@ get_paper (My_lily_parser *parser)
   paper = paper ? paper->clone () : new Output_def;
   paper->set_variable (ly_symbol2scm ("is-paper"), SCM_BOOL_T);
 
-  paper->parent_ =unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultbookpaper"));
+  paper->parent_ = unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultbookpaper"));
   return paper;
 }
 
index 86eccf3e6e489f4ab48c10f999bb3ce8182de328..133e1a987afc4df52ca4356b174abb8743e254bb 100644 (file)
@@ -260,7 +260,7 @@ LY_DEFINE (ly_score_bookify, "ly:score-bookify",
           "@var{header} as book level header.")
 {
   SCM_ASSERT_TYPE (unsmob_score (score_smob), score_smob,
-                  SCM_ARG1, __FUNCTION__, "score_smob");
+                  SCM_ARG1, __FUNCTION__, "Score");
   
   Score *score = unsmob_score (score_smob);
   Book *book = new Book;
index 92ec2ee052f7b42b471375391bc670d7a130388c..0c874f436da96dc219126f0c99c24d62f1ca4590 100644 (file)
@@ -133,9 +133,6 @@ unusedEntry = \notes { c4 }
 %% must have size argument for GUILE 1.6 compat.
 #(define musicQuotes (make-hash-table 29))
 
-%%#(define-public toplevel-music-handler ly:parser-add-book-and-score)
-#(define toplevel-book-handler default-toplevel-book-handler)
-#(define toplevel-music-handler default-toplevel-music-handler)
-#(define toplevel-score-handler default-toplevel-score-handler)
-
-#(define toplevel-score-handler default-toplevel-score-handler)
+#(define toplevel-book-handler ly:parser-print-book)
+#(define toplevel-music-handler collect-music-for-book)
+#(define toplevel-score-handler collect-scores-for-book)
index cf9571d58bf48a1227c20c490aca4a4492d2f69d..4bfdb7fb0ee13af21eea382211c08247d958140a 100644 (file)
 
 #(ly:set-option 'new-relative)
 #(ly:set-point-and-click #f)
+#(define  toplevel-scores '())
 
 \maininput
 % there is a problem at the end of the input file
 
-
 %%
 %% above and below message is to compensate for look ahead of the parser.
 %%
@@ -29,6 +29,8 @@
        )))% there is a problem at the end of the input file
 
 
+#(if (pair? toplevel-scores)
+  (ly:parser-print-book parser (apply ly:make-book $defaultbookpaper $globalheader toplevel-scores)))
 
 #(if (ly:get-option 'verbose)
   (begin
index e082e897f3acc5b6fa22e10ecfdcf9f2baef94e8..ecd29e3876fd13186d43fc8ba993cdb2d9ffb356 100644 (file)
@@ -94,7 +94,7 @@
 
 ;; parser stuff.
 (define-public (print-music-as-book parser music)
-  (let* ((score (ly:music-scorify music))
+  (let* (
         (head  (ly:parser-lookup parser '$globalheader))
         (book (ly:score-bookify score head)))
     (ly:parser-print-book parser book)))
        (book (ly:score-bookify score head)))
     (ly:parser-print-score parser book)))
                
-(define-public default-toplevel-music-handler print-music-as-book)
-(define-public default-toplevel-book-handler ly:parser-print-book)
-(define-public default-toplevel-score-handler print-score-as-book)
-
-
+(define-public (collect-scores-for-book  parser score)
+  (let*
+      ((oldval (ly:parser-lookup parser 'toplevel-scores)))
+    (ly:parser-define parser 'toplevel-scores (cons score oldval))
+    ))
 
+(define-public (collect-music-for-book parser music)
+  (collect-scores-for-book parser (score (ly:music-scorify music))))
+  
 ;;;;;;;;;;;;;;;;
 ; alist
 (define-public (assoc-get key alist . default)
index 10e88ad7ec18ca52398826240205d1d1ef0606d4..47752e3bedef7798cd95f45229b071067bf3555e 100644 (file)
      make-voice-props-set
      chord-name->german-markup
      note-name->german-markup
-     default-toplevel-music-handler
-     default-toplevel-book-handler
-     default-toplevel-score-handler
 
      Accidental_interface::after_line_breaking
      Accidental_interface::print