return SCM_UNSPECIFIED;
}
+
+LY_DEFINE (ly_parser_print_book_to_systems, "ly:book-process-to-systems",
+ 4, 0, 0, (SCM book_smob,
+ SCM default_paper,
+ SCM default_layout,
+ SCM output),
+ "Print book. @var{output} is passed to the backend unchanged. "
+ "Eg. it may be "
+ "a string (for file based outputs) or a socket (for network based "
+ "output).")
+{
+ Book *book = unsmob_book (book_smob);
+
+ SCM_ASSERT_TYPE (book, book_smob, SCM_ARG1, __FUNCTION__, "Book");
+ SCM_ASSERT_TYPE (unsmob_output_def (default_paper),
+ default_layout, SCM_ARG2, __FUNCTION__, "\\paper block");
+ SCM_ASSERT_TYPE (unsmob_output_def (default_layout),
+ default_layout, SCM_ARG3, __FUNCTION__, "\\layout block");
+
+ Paper_book *pb = book->process (unsmob_output_def (default_paper),
+ unsmob_output_def (default_layout));
+ if (pb)
+ {
+ pb->classic_output (output);
+ pb->unprotect ();
+ }
+
+ return SCM_UNSPECIFIED;
+}
+
scm_remember_upto_here_1 (prot);
return output;
}
-
-LY_DEFINE (ly_score_process, "ly:render-music-as-systems",
- 5, 0, 0, (SCM music,
- SCM outdef,
- SCM book_outputdef,
- SCM header,
- SCM outname),
- "Create output using a default \\book block. ")
-{
- SCM_ASSERT_TYPE(unsmob_music(music), music,
- SCM_ARG1, __FUNCTION__, "music");
- SCM_ASSERT_TYPE(unsmob_output_def (outdef), outdef,
- SCM_ARG2, __FUNCTION__, "output def");
- SCM_ASSERT_TYPE(unsmob_output_def (book_outputdef), book_outputdef,
- SCM_ARG3, __FUNCTION__, "output def");
- SCM_ASSERT_TYPE(scm_is_string (outname), outname,
- SCM_ARG5, __FUNCTION__, "string");
-
-
- SCM scaled_def = outdef;
- SCM scaled_bookdef = book_outputdef;
-
- Output_def *bpd = unsmob_output_def (book_outputdef);
-
- /* ugh . */
- assert (bpd->c_variable ("is-paper") == SCM_BOOL_T);
-
- Real scale = scm_to_double (bpd->c_variable ("output-scale"));
-
- Output_def *def = scale_output_def (unsmob_output_def (outdef), scale);
- Output_def *bdef = scale_output_def (bpd, scale);
- def->parent_ = bdef;
-
- scaled_def = def->self_scm ();
- scaled_bookdef = bdef->self_scm ();
-
- def->unprotect ();
- bdef->unprotect ();
-
- SCM context = ly_run_translator (music, scaled_def, SCM_BOOL_F);
- SCM output_as_scm = ly_format_output (context);
- Music_output *output = unsmob_music_output (output_as_scm);
-
- Paper_score *pscore = dynamic_cast<Paper_score *> (output);
- assert (pscore);
-
- /* ugh, this is strange, Paper_book without a Book object. */
- Paper_book *paper_book = new Paper_book ();
- paper_book->header_ = header;
- paper_book->paper_ = unsmob_output_def (scaled_bookdef);
-
- if (ly_is_module (header))
- paper_book->add_score (header);
-
- paper_book->add_score (pscore->self_scm ());
- paper_book->classic_output (outname);
- paper_book->unprotect ();
-
- scm_remember_upto_here_1 (scaled_def);
- scm_remember_upto_here_1 (scaled_bookdef);
-
- return SCM_UNSPECIFIED;
-}
-
(version-not-seen-message input-file-name))
#(if (pair? toplevel-scores)
- (toplevel-book-handler
+ ((if (defined? 'default-toplevel-book-handler)
+ default-toplevel-book-handler
+ toplevel-book-handler)
parser
(apply ly:make-book $defaultpaper $defaultheader toplevel-scores)))
\version "2.10.0"
-#(set! toplevel-score-handler print-score-with-defaults)
-#(set! toplevel-music-handler
- (lambda (p m)
- (if (not (eq? (ly:music-property m 'void) #t))
- (print-score-with-defaults
- p (scorify-music m p)))))
+%% toplevel \book gets output per page,
+%% everything else gets output per system/title
+#(define default-toplevel-book-handler
+ print-book-with-defaults-as-systems )
#(ly:set-option (quote no-point-and-click))
#(define inside-lilypond-book #t)
(cons score (ly:parser-lookup parser 'toplevel-scores))))
(define-public (scorify-music music parser)
-
(for-each (lambda (func)
(set! music (func music parser)))
toplevel-music-functions)
(collect-scores-for-book parser (scorify-music music parser)))))
-(define-public (print-book-with-defaults parser book)
+(define (print-book-with parser book process-procedure)
(let*
((paper (ly:parser-lookup parser '$defaultpaper))
(layout (ly:parser-lookup parser '$defaultlayout))
(set! base (format #f "~a-~a" base count)))
(ly:parser-define! parser 'output-count (1+ count))
- (ly:book-process book paper layout base)
+ (process-procedure book paper layout base)
))
-(define-public (print-score-with-defaults parser score)
- (let*
- ((paper (ly:parser-lookup parser '$defaultpaper))
- (count (ly:parser-lookup parser 'output-count))
- (base (ly:parser-output-name parser)))
-
- (if (not (integer? count))
- (set! count 0))
-
- (if (> count 0)
- (set! base (format #f "~a-~a" base count)))
-
- (ly:parser-define! parser 'output-count (1+ count))
-
- (if (not (ly:score-error? score))
- (let*
- ((header (ly:score-header score))
- (output-defs (ly:score-output-defs score))
- (layout-defs (filter (lambda (d) (eq? #t (ly:output-def-lookup d 'is-layout)))
- output-defs))
- (midi-defs (filter (lambda (d) (eq? #t (ly:output-def-lookup d 'is-midi)))
- output-defs))
- (music (ly:score-music score))
- (layout-def (if (null? layout-defs)
- (ly:parser-lookup parser '$defaultlayout)
- (car layout-defs))))
-
- (if (not (module? header))
- (set! header (ly:parser-lookup parser '$defaultheader)))
-
- (ly:render-music-as-systems
- music layout-def paper header base)
-
- (if (pair? midi-defs)
- (ly:performance-write (ly:format-output (ly:run-translator music (car midi-defs)))
- (format #f "~a.midi" base)
- ))
-
- ))))
-
-
-
+(define-public (print-book-with-defaults parser book)
+ (print-book-with parser book ly:book-process))
+(define-public (print-book-with-defaults-as-systems parser book)
+ (print-book-with parser book ly:book-process-to-systems))
;;;;;;;;;;;;;;;;
;; alist