]> git.donarmstrong.com Git - lilypond.git/commitdiff
Rewire lilypond-book output.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 2 Jan 2007 18:05:05 +0000 (19:05 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 2 Jan 2007 18:05:05 +0000 (19:05 +0100)
For lilypond-book, toplevel elements (markup, score, music) are now
collected in a single \book, which is then output system for system.
This has several consequences

- toplevel markups are now output without taking up a complete page

- multiple scores in a .ly file all end up in the output

- naming of output files has been changed.  Multiple scores don't
result in base-1-1, base-2-1, .. naming.

- In LP-book output toplevel \layout{} and \paper {} settings
influences appearance of preceding scores.

lily/book-scheme.cc
lily/score-scheme.cc
ly/init.ly
ly/lilypond-book-preamble.ly
scm/lily-library.scm

index 750917187f65a86612d86fe0d21b2959010be73e..23d728edf202b2e50f21a143ff999bd3c7a933a0 100644 (file)
@@ -64,3 +64,33 @@ LY_DEFINE (ly_parser_print_book, "ly:book-process",
   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;
+}
+
index b48219ad44895e36a0f1ec77a705ba0563186014..3b256b01f4dd92cf8038f5789974b2a6f1ad028b 100644 (file)
@@ -114,67 +114,3 @@ LY_DEFINE (ly_score_embedded_format, "ly:score-embedded-format",
   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;
-}
-
index eab90ef3d5905527c56ee3c36edabbc4cba0f243..062ca06cbdfdfb4c5780fbc7e6732d27e5038035 100644 (file)
@@ -39,6 +39,8 @@
   (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)))
index aa82b7330c55c4e33e435f684f3e693f1f3f9e1a..91fde7c84b874f2796bf80742981864335deae0a 100644 (file)
@@ -1,12 +1,10 @@
 
 \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)
index 1e8fe97e477809c669338cb9072e8594a31adb16..52331aa04c64357eef187113dfddb791af056ec1 100644 (file)
@@ -89,7 +89,6 @@
    (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