diff --git a/lisp/svg.el b/lisp/svg.el index 7aadbc2359..45870e0bfe 100644 --- a/lisp/svg.el +++ b/lisp/svg.el @@ -154,9 +154,9 @@ svg-polyline (dom-node 'polyline `((points . ,(mapconcat (lambda (pair) - (format "%s %s" (car pair) (cdr pair))) + (format "%s,%s" (car pair) (cdr pair))) points - ", ")) + " ")) ,@(svg--arguments svg args))))) (defun svg-polygon (svg points &rest args) @@ -214,16 +214,17 @@ svg--encode-text (buffer-string))) (defun svg--append (svg node) + ;; id is expected to be unique. (let ((old (and (dom-attr node 'id) (dom-by-id svg (concat "\\`" (regexp-quote (dom-attr node 'id)) "\\'"))))) (if old - ;; FIXME: This was (dom-set-attributes old (dom-attributes node)) - ;; and got changed by commit f7ea7aa11f6211b5142bbcfc41c580d75485ca56 - ;; without any explanation. - (setcdr (car old) (cdr node)) - (dom-append-child svg node))) + ;; Remove old node. New node might be a different type. + (mapc (lambda (a) + (dom-remove-node svg a)) + old)) + (dom-append-child svg node)) (svg-possibly-update-image svg)) (defun svg--image-data (image image-type datap) @@ -311,7 +312,8 @@ svg-print (insert (format "<%s" (car dom))) (dolist (attr (nth 1 dom)) ;; Ignore attributes that start with a colon. - (unless (= (aref (format "%s" (car attr)) 0) ?:) + (unless (or (= (aref (format "%s" (car attr)) 0) ?:) + (null (cdr attr))) (insert (format " %s=\"%s\"" (car attr) (cdr attr))))) (insert ">") (dolist (elem (nthcdr 2 dom))