Reviewers: ,

Message:
This change supersedes Issue 326960043 with an entry to changes.tely.

Description:
Add '-dcrop' option to ps and svg backends

This change allows the output of scores in the format provided by the
'-dpreview' option but including all systems, not just the first.

This would allow for easier SVG use in HTML, without the need for
cropping snippets. Further, SVG is an HTML standard, and its vector
nature makes its use unparalleled for the web. This change would allow
SVG use in 'lilypond-book' in the future.

Please review this at https://codereview.appspot.com/329990043/

Affected files (+55, -1 lines):
  M Documentation/changes.tely
  M Documentation/usage/running.itely
  M lily/paper-book.cc
  M scm/framework-ps.scm
  M scm/framework-svg.scm
  M scm/lily.scm


Index: Documentation/changes.tely
diff --git a/Documentation/changes.tely b/Documentation/changes.tely
index 482bbbdd659d598db0ef027dc0336ccce51bf063..3428a084944f3585bfbeef417e229c8ec3bdaa19 100644
--- a/Documentation/changes.tely
+++ b/Documentation/changes.tely
@@ -62,6 +62,10 @@ which scares away people.
 @end ignore

 @item
+An argument, @code{-dcrop}, has been added, formatting @code{SVG} and
+@code{PDF} output without margins or page-breaks.
+
+@item
 It is now possible to move systems with reference to their current
 position using the @code{extra-offset} subproperty of
 @code{NonMusicalPaperColumn.line-break-system-details}.  Both vertical
Index: Documentation/usage/running.itely
diff --git a/Documentation/usage/running.itely b/Documentation/usage/running.itely index 4eeabc80dc587e6c033cebe160b6d8e66ffe3bb5..1fe748d93a2f3099808810f395b5d46b615184c3 100644
--- a/Documentation/usage/running.itely
+++ b/Documentation/usage/running.itely
@@ -505,6 +505,10 @@ in case an SVG viewer is unable to handle them. When using
 block.  See @ruser{Extracting fragments of music}.  No fragments are
 extracted though if used with the @option{-dno-print-pages} option.

+@item @code{crop}
+@tab @code{#f}
+@tab Match the size of the normal output to the typeset image.
+
 @item @code{datadir}
 @tab
 @tab Prefix for data files (read-only).
@@ -672,7 +676,7 @@ To suppress the usual output, use the @option{-dprint-pages} or
 @item @code{print-pages}
 @tab @code{#t}
 @tab Generate full pages, the default.  @option{-dno-print-pages} is
-useful in combination with @option{-dpreview}.
+useful in combination with @option{-dpreview} or @option{-dcrop}.

 @item @code{profile-property-accesses}
 @tab @code{#f}
Index: lily/paper-book.cc
diff --git a/lily/paper-book.cc b/lily/paper-book.cc
index c17ed576f1895c0a91febb29164ea9987dda1b0f..f1787e99550f2bb09eb001188b69384c69e5f004 100644
--- a/lily/paper-book.cc
+++ b/lily/paper-book.cc
@@ -219,6 +219,25 @@ Paper_book::output (SCM output_channel)
warning (_f ("program option -dpreview not supported by backend `%s'",
                      get_output_backend_name ()));
     }
+
+  if (get_program_option ("crop"))
+    {
+      SCM framework
+        = ly_module_lookup (mod, ly_symbol2scm ("output-crop-framework"));
+
+      if (scm_is_true (framework))
+        {
+          SCM func = scm_variable_ref (framework);
+          scm_call_4 (func,
+                      output_channel,
+                      self_scm (),
+                      scopes,
+                      dump_fields ());
+        }
+      else
+        warning (_f ("program option -dcrop not supported by backend `%s'",
+                     get_output_backend_name ()));
+    }
 }

 void
Index: scm/framework-ps.scm
diff --git a/scm/framework-ps.scm b/scm/framework-ps.scm
index 2cd9b5edc619bd6e067081cbbd521a30a65ef386..a9c5de2823dfc32271cf484f0f4d2dcc40f073b6 100644
--- a/scm/framework-ps.scm
+++ b/scm/framework-ps.scm
@@ -866,6 +866,22 @@ mark {ly~a_stream} /CLOSE pdfmark
                         #t
                         )))

+(define-public (output-crop-framework basename book scopes fields)
+  (let* ((paper (ly:paper-book-paper book))
+         (systems (relevant-book-systems book)))
+    (dump-stencil-as-EPS paper
+                         (stack-stencils Y DOWN 0.0
+                                         (map paper-system-stencil
+                                              (reverse (reverse systems))))
+                         (format #f "~a.cropped" basename)
+                         #t)
+    (postprocess-output book framework-ps-module
+                        (cons "png" (ly:output-formats))
+                        (format #f "~a.cropped" basename)
+                        (format #f "~a.cropped.eps" basename)
+                        #t
+                        )))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 (define (output-width-height defs)
Index: scm/framework-svg.scm
diff --git a/scm/framework-svg.scm b/scm/framework-svg.scm
index a4cf2e996055305dbeb36730dc78247b0a1016a4..85cbe1c2c11bb52a4473a6757de4b150819a525b 100644
--- a/scm/framework-svg.scm
+++ b/scm/framework-svg.scm
@@ -197,3 +197,11 @@ src: url('~a');
                                   (map paper-system-stencil
                                        (reverse to-dump-systems)))
                   (format #f "~a.preview.svg" basename))))
+
+(define (output-crop-framework basename book scopes fields)
+  (let* ((paper (ly:paper-book-paper book))
+         (systems (relevant-book-systems book))
+         (page-stencils (stack-stencils Y DOWN 0.0
+                                        (map paper-system-stencil
+ (reverse (reverse systems)))))) + (dump-preview paper page-stencils (format #f "~a.cropped.svg" basename))))
Index: scm/lily.scm
diff --git a/scm/lily.scm b/scm/lily.scm
index 4b3c9c7e1c4cad55c64a53fe611d1effcf692612..5e727f1a5892cbb4de4d067f53e719ab3e9fcaf8 100644
--- a/scm/lily.scm
+++ b/scm/lily.scm
@@ -228,6 +228,9 @@ EPS backend.")
     (clip-systems
      #f
      "Generate cut-out snippets of a score.")
+    (crop
+     #f
+     "Match the size of the normal output to the typeset image.")
     (datadir
      #f
      "LilyPond prefix for data files (read-only).")



_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to