From b742b25b80d6be8f434c622f379c235fa638e274 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Wed, 19 Jul 2006 13:05:33 +0000 Subject: [PATCH] * scm/output-ps.scm (path): reorder arguments. * scm/output-svg.scm (path): support for path primitive. --- ChangeLog | 6 ++++++ scm/output-ps.scm | 6 +++--- scm/output-svg.scm | 45 ++++++++++++++++++++++++++++++++++++++------- 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index e4bc54887b..6151491b8e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2006-07-19 Han-Wen Nienhuys + * scm/output-lib.scm (fall::print): use new order. + + * scm/output-ps.scm (path): reorder arguments. + + * scm/output-svg.scm (path): support for path primitive. + * input/regression/bend-after.ly: new file. * Documentation/user/GNUmakefile ($(outdir)/%.pdf): foolproof diff --git a/scm/output-ps.scm b/scm/output-ps.scm index 6fe28dc446..94d53f71de 100644 --- a/scm/output-ps.scm +++ b/scm/output-ps.scm @@ -323,7 +323,7 @@ (define (path thickness exps) - (define (path-exps->ps-path-exps exps) + (define (convert-path-exps exps) (if (pair? exps) (let* ((head (car exps)) @@ -340,12 +340,12 @@ (cons (format "~a ~a " (string-join (map (lambda (x) (format "~a " x)) args) " ") head) - (path-exps->ps-path-exps (drop rest arity)))) + (convert-path-exps (drop rest arity)))) '())) (format "1 setlinecap ~a setlinewidth\n~a stroke" thickness - (string-join (path-exps->ps-path-exps exps) " "))) + (string-join (convert-path-exps exps) " "))) diff --git a/scm/output-svg.scm b/scm/output-svg.scm index cabf8f7da0..3ed5e22c14 100644 --- a/scm/output-svg.scm +++ b/scm/output-svg.scm @@ -24,6 +24,7 @@ (guile) (ice-9 regex) (lily) + (srfi srfi-1) (srfi srfi-13)) @@ -70,6 +71,16 @@ (define (offset->point o) (format #f " ~S,~S" (car o) (- (cdr o)))) +(define (number-list->point lst) + (define (helper lst) + (if (null? lst) + '() + (cons (format "~S,~S" (car lst) (cadr lst)) + (helper (cddr lst))))) + + (string-join (helper lst) " ")) + + (define (svg-bezier lst close) (let* ((c0 (car (list-tail lst 3))) (c123 (list-head lst 3))) @@ -201,20 +212,40 @@ ))) (define (path thick commands) - (define (ps-path-entries->svg-path entries) - + (define (convert-path-exps exps) + (if (pair? exps) + (let* + ((head (car exps)) + (rest (cdr exps)) + (arity + (cond + ((memq head '(rmoveto rlineto lineto moveto)) 2) + ((memq head '(rcurveto curveto)) 6) + (else 1))) + (args (take rest arity)) + (svg-head (assoc-get head '((rmoveto . m) + (rcurveto . c) + (curveto . C) + (moveto . M) + (lineto . L) + (rlineto . l)) + "")) + ) + + (cons (format "~a~a " + svg-head (number-list->point args) + ) + (convert-path-exps (drop rest arity)))) + '())) (entity 'path "" `(stroke-width . ,thick) '(stroke-linejoin . "round") '(stroke-linecap . "round") '(stroke . "currentColor") - '(fill . "currentColor") - + '(fill . "none") + `(d . ,(string-join (convert-path-exps commands) " ")))) - )) - - (define (char font i) (dispatch `(fontify ,font ,(entity 'tspan (char->entity (integer->char i)))))) -- 2.39.2