* 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.
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.
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;
+}
+
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_;
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;
}
"@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;
%% 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)
#(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.
%%
)))% 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
;; 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)
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