Reviewers: , Message: goes on top of https://codereview.appspot.com/555760043/
Description: Compute SVG skyline based on original data Since stencil data is used as input to formatting decisions, this will make SVG output more similar to PS/PDF output. Please review this at https://codereview.appspot.com/545970043/ Affected files (+11, -4 lines): M lily/pango-font.cc M lily/stencil-integral.cc M scm/output-socket.scm M scm/output-svg.scm Index: lily/pango-font.cc diff --git a/lily/pango-font.cc b/lily/pango-font.cc index 0b80883b9ef89980408111f3b43cbffaf4e17f45..4acc3d4b5da874cf7181c3f632a7f00dbecf5f26 100644 --- a/lily/pango-font.cc +++ b/lily/pango-font.cc @@ -504,9 +504,10 @@ Pango_font::text_stencil (Output_def * /* state */, if (has_utf8_string && ((to_paths && !music_string) || !to_paths)) { // For Pango based backends, we take a shortcut. - SCM exp = scm_list_3 (ly_symbol2scm ("utf-8-string"), + SCM exp = scm_list_4 (ly_symbol2scm ("utf-8-string"), ly_string2scm (description_string ()), - ly_string2scm (str)); + ly_string2scm (str), + scm_list_2 (ly_symbol2scm ("quote"), dest.expr ())); Box b (Interval (0, 0), Interval (0, 0)); b.unite (dest.extent_box ()); Index: lily/stencil-integral.cc diff --git a/lily/stencil-integral.cc b/lily/stencil-integral.cc index b809699324e9cfdbb722e9c0bec8b736b2df0d25..bce34e940072ed922f778dd9d5973f55b222699d 100644 --- a/lily/stencil-integral.cc +++ b/lily/stencil-integral.cc @@ -721,6 +721,12 @@ interpret_stencil_for_skyline (Lazy_skyline_pair *skyline, interpret_stencil_for_skyline (skyline, transform, scm_caddr (expr)); else if (scm_is_eq (head, ly_symbol2scm ("output-attributes"))) interpret_stencil_for_skyline (skyline, transform, scm_caddr (expr)); + else if (scm_is_eq (head, ly_symbol2scm ("utf-8-string"))) + { + // 4th element, strip the (quote ..) + SCM orig = scm_cadar (scm_cdddr (expr)); + interpret_stencil_for_skyline (skyline, transform, orig); + } else if (scm_is_eq (head, ly_symbol2scm ("with-outline"))) interpret_stencil_for_skyline (skyline, transform, scm_cadr (expr)); else if (scm_is_eq (head, ly_symbol2scm ("draw-line"))) Index: scm/output-socket.scm diff --git a/scm/output-socket.scm b/scm/output-socket.scm index 3532fc97325728e0e843ccbd5667d429083ee14a..fad8bb9907f31fac2f6e9a81b8037aa6163b13ca 100644 --- a/scm/output-socket.scm +++ b/scm/output-socket.scm @@ -89,7 +89,7 @@ (format #f "draw_round_box ~a ~a ~a ~a ~a" breapth width depth height blot-diameter)) -(define (utf-8-string descr string) +(define (utf-8-string descr string orig) (format #f "utf-8 \"~a\" \"~a\"" (escape-string descr) ;; don't want unescaped spaces. Index: scm/output-svg.scm diff --git a/scm/output-svg.scm b/scm/output-svg.scm index 4ceea8d4cc1a5e0cf6fee8f028c3ae75e39ebbd2..8f56f2626f0f9382c211719a9635fcf337c0d32f 100644 --- a/scm/output-svg.scm +++ b/scm/output-svg.scm @@ -650,7 +650,7 @@ '(stroke-width . "0.0")) (ec 'a))) -(define (utf-8-string pango-font-description string) +(define (utf-8-string pango-font-description string orig) (let ((escaped-string (string-regexp-substitute "<" "<" (string-regexp-substitute "&" "&" string))))