]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/output-svg.scm
Merge branch 'lilypond/translation' of ssh://jomand@git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / scm / output-svg.scm
index 11223df43d12396af8fb6f524b47ee6717e71bb9..7d7a6b343717a07b987642dbe7a359fa0c19fdf7 100644 (file)
@@ -5,14 +5,6 @@
 ;;;; (c) 2002--2009 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;;                Patrick McCarty <pnorcks@gmail.com>
 
-;;;; Recommendations:
-;;;; http://www.w3.org/TR/SVG11/
-;;;; http://www.w3.org/TR/SVGTiny12/
-;;;; http://www.w3.org/TR/SVGPrint/ -- page, pageSet in draft
-
-;;;; TODO:
-;;;;  * inkscape page/pageSet support
-
 (define-module (scm output-svg))
 (define this-module (current-module))
 
 
 (define (dispatch expr)
   (let ((keyword (car expr)))
-    (cond
-     ((eq? keyword 'some-func) "")
-     (else
-      (if (module-defined? this-module keyword)
-         (apply (eval keyword this-module) (cdr expr))
-         (begin
-           (ly:warning (_ "undefined: ~S") keyword)
-           ""))))))
+    (cond ((eq? keyword 'some-func) "")
+         (else (if (module-defined? this-module keyword)
+                   (apply (eval keyword this-module) (cdr expr))
+                   (begin (ly:warning (_ "undefined: ~S") keyword)
+                          ""))))))
 
 ;; Helper functions
 (define-public (attributes attributes-alist)
   (define alist '())
   (define (set-attribute attr val)
     (set! alist (assoc-set! alist attr val)))
-  (let*
-    ((match-1 (regexp-exec pango-description-regexp-comma str))
-     (match-2 (regexp-exec pango-description-regexp-nocomma str))
-     (match (if match-1
-               match-1
-               match-2)))
+  (let* ((match-1 (regexp-exec pango-description-regexp-comma str))
+        (match-2 (regexp-exec pango-description-regexp-nocomma str))
+        (match (if match-1 match-1 match-2)))
 
     (if (regexp-match? match)
        (begin
 ;;
 (define (glyph-element-regexp name)
   (make-regexp (string-append "<glyph"
-                             "(([\r\n\t ]+[-a-z]+=\"[^\"]*\")+)?"
-                             "[\r\n\t ]+glyph-name=\"("
+                             "(([[:space:]]+[-a-z]+=\"[^\"]*\")+)?"
+                             "[[:space:]]+glyph-name=\"("
                              name
                              ")\""
-                             "(([\r\n\t ]+[-a-z]+=\"[^\"]*\")+)?"
-                             "([\r\n\t ]+)?"
+                             "(([[:space:]]+[-a-z]+=\"[^\"]*\")+)?"
+                             "([[:space:]]+)?"
                              "/>")))
 
 (define (extract-glyph all-glyphs name size . rest)
 
 (define (circle radius thick is-filled)
   (entity
-   'circle ""
-   '(stroke-linejoin . "round")
-   '(stroke-linecap . "round")
-   `(fill . ,(if is-filled "currentColor" "none"))
-   `(stroke . "currentColor")
-   `(stroke-width . ,thick)
-   `(r . ,radius)))
+    'circle ""
+    '(stroke-linejoin . "round")
+    '(stroke-linecap . "round")
+    `(fill . ,(if is-filled "currentColor" "none"))
+    `(stroke . "currentColor")
+    `(stroke-width . ,thick)
+    `(r . ,radius)))
 
 (define (dashed-line thick on off dx dy phase)
   (draw-line thick 0 0 dx dy
 (define (draw-line thick x1 y1 x2 y2 . alist)
   (apply entity 'line ""
         (append
-         `((stroke-linejoin . "round")
-           (stroke-linecap . "round")
-           (stroke-width . ,thick)
-           (stroke . "currentColor")
-           (x1 . ,x1)
-           (y1 . ,(- y1))
-           (x2 . ,x2)
-           (y2 . ,(- y2)))
-         alist)))
+          `((stroke-linejoin . "round")
+            (stroke-linecap . "round")
+            (stroke-width . ,thick)
+            (stroke . "currentColor")
+            (x1 . ,x1)
+            (y1 . ,(- y1))
+            (x2 . ,x2)
+            (y2 . ,(- y2)))
+          alist)))
 
 (define (ellipse x-radius y-radius thick is-filled)
   (entity
-   'ellipse ""
-   '(stroke-linejoin . "round")
-   '(stroke-linecap . "round")
-   `(fill . ,(if is-filled "currentColor" "none"))
-   `(stroke . "currentColor")
-   `(stroke-width . ,thick)
-   `(rx . ,x-radius)
-   `(ry . ,y-radius)))
+    'ellipse ""
+    '(stroke-linejoin . "round")
+    '(stroke-linecap . "round")
+    `(fill . ,(if is-filled "currentColor" "none"))
+    `(stroke . "currentColor")
+    `(stroke-width . ,thick)
+    `(rx . ,x-radius)
+    `(ry . ,y-radius)))
 
 (define (embedded-svg string)
   string)
 
 (define (oval x-radius y-radius thick is-filled)
   (let ((x-max x-radius)
-        (x-min (- x-radius))
-        (y-max y-radius)
-        (y-min (- y-radius)))
+       (x-min (- x-radius))
+       (y-max y-radius)
+       (y-min (- y-radius)))
     (entity
-     'path ""
-     '(stroke-linejoin . "round")
-     '(stroke-linecap . "round")
-     `(fill . ,(if is-filled "currentColor" "none"))
-     `(stroke . "currentColor")
-     `(stroke-width . ,thick)
-     `(d . ,(ly:format "M~4f ~4fC~4f ~4f ~4f ~4f ~4f ~4fS~4f ~4f ~4f ~4fz"
-               x-max 0
-               x-max y-max
-               x-min y-max
-               x-min 0
-               x-max y-min
-               x-max 0)))))
+      'path ""
+      '(stroke-linejoin . "round")
+      '(stroke-linecap . "round")
+      `(fill . ,(if is-filled "currentColor" "none"))
+      `(stroke . "currentColor")
+      `(stroke-width . ,thick)
+      `(d . ,(ly:format "M~4f ~4fC~4f ~4f ~4f ~4f ~4f ~4fS~4f ~4f ~4f ~4fz"
+                       x-max 0
+                       x-max y-max
+                       x-min y-max
+                       x-min 0
+                       x-max y-min
+                       x-max 0)))))
 
 (define (path thick commands)
   (define (convert-path-exps exps)
                                  (closepath . z))
                                "")))
 
-         (cons (format "~a~a"
-                       svg-head (number-list->point args))
+         (cons (format "~a~a" svg-head (number-list->point args))
                (convert-path-exps (drop rest arity))))
        '()))
 
 
 (define (polygon coords blot-diameter is-filled)
   (entity
-   'polygon ""
-   '(stroke-linejoin . "round")
-   '(stroke-linecap . "round")
-   `(stroke-width . ,blot-diameter)
-   `(fill . ,(if is-filled "currentColor" "none"))
-   '(stroke . "currentColor")
-   `(points . ,(string-join
-               (map offset->point (ly:list->offsets '() coords))))))
+    'polygon ""
+    '(stroke-linejoin . "round")
+    '(stroke-linecap . "round")
+    `(stroke-width . ,blot-diameter)
+    `(fill . ,(if is-filled "currentColor" "none"))
+    '(stroke . "currentColor")
+    `(points . ,(string-join
+                 (map offset->point (ly:list->offsets '() coords))))))
 
 (define (repeat-slash width slope thickness)
   (define (euclidean-length x y)
   "</g>\n")
 
 (define (round-filled-box breapth width depth height blot-diameter)
-  (entity 'rect ""
-         ;; The stroke will stick out.  To use stroke,
-         ;; the stroke-width must be subtracted from all other dimensions.
-         ;;'(stroke-linejoin . "round")
-         ;;'(stroke-linecap . "round")
-         ;;`(stroke-width . ,blot)
-         ;;'(stroke . "red")
-         ;;'(fill . "orange")
-
-         `(x . ,(- breapth))
-         `(y . ,(- height))
-         `(width . ,(+ breapth width))
-         `(height . ,(+ depth height))
-         `(ry . ,(/ blot-diameter 2))
-         '(fill . "currentColor")))
+  (entity
+    'rect ""
+    ;; The stroke will stick out.  To use stroke,
+    ;; the stroke-width must be subtracted from all other dimensions.
+    ;;'(stroke-linejoin . "round")
+    ;;'(stroke-linecap . "round")
+    ;;`(stroke-width . ,blot)
+    ;;'(stroke . "red")
+    ;;'(fill . "orange")
+
+    `(x . ,(- breapth))
+    `(y . ,(- height))
+    `(width . ,(+ breapth width))
+    `(height . ,(+ depth height))
+    `(ry . ,(/ blot-diameter 2))
+    '(fill . "currentColor")))
 
 (define (setcolor r g b)
   (format "<g color=\"rgb(~a%, ~a%, ~a%)\">\n"
 ;; rotate around given point
 (define (setrotation ang x y)
   (ly:format "<g transform=\"rotate(~4f, ~4f, ~4f)\">\n"
-            (* -1 ang) x (* -1 y)))
+            (- ang) x (- y)))
 
 (define (text font string)
   (dispatch `(fontify ,font ,(entity 'tspan (string->entities string)))))