Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
#######
#
# E-scripts on svg.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
# An introduction to eev can be found here:
#
#   (find-eev-quick-intro)
#   http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/svg.e>
#           or at <http://angg.twu.net/e/svg.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/.emacs[.html]>,
#                 <http://angg.twu.net/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######



# «.dom»		(to "dom")
# «.demo-1»		(to "demo-1")
# «.demo-2»		(to "demo-2")
# «.hlavaty-1»		(to "hlavaty-1")
# «.clippath»		(to "clippath")
# «.defs»		(to "defs")
# «.g»			(to "g")
# «.path»		(to "path")
# «.polyline»		(to "polyline")
# «.transform»		(to "transform")
# «.use»		(to "use")
# «.viewbox»		(to "viewbox")
# «.css-doodle»		(to "css-doodle")
# «.nanosvg»		(to "nanosvg")
# «.monospace-editing»	(to "monospace-editing")
# «.comeau-intro»	(to "comeau-intro")
# «.comeau-lines-3»	(to "comeau-lines-3")
# «.schedule»		(to "schedule")
# «.card-game.el»	(to "card-game.el")
# «.atamariya»		(to "atamariya")



# https://github.com/rougier/svg-lib
# https://gitlab.com/atamariya/emacs/-/blob/dev/lisp/svg.el
# https://mail.google.com/mail/ca/u/0/#search/svg/FMfcgzGljlmJXVhgbpfLKHkQFvWfCPMP
# https://lifeofpenguin.blogspot.com/2021/08/scribble-notes-in-gnu-emacs.html
# https://www.december.com/html/spec/colorsvg.html
# https://github.com/rougier/svg-tag-mode

# (find-es "emacs" "svg")
# (find-es "emacs" "sketch-mode")
# (find-elnode "SVG Images")
# (find-TH "2022eev-svg")




#####
#
# dom
# 2026jul31
#
#####

# «dom»  (to ".dom")
# (find-efunctiondescr   'svg-create)
# (find-efunction        'svg-create)
# (find-elnode "Index" "* svg-create:")
# (find-efile "svg.el" "(defun svg-create ")
# (find-efile "svg.el" "(defun svg--def ")
# (find-efile "svg.el" "(defun svg--def " "dom-by-tag")
# (find-efunction 'dom-attr)
# (find-efile "dom.el" "(defun dom-pp ")

# (find-efile "svg.el")
# (find-esh "cat svg.el | grep dom")
# (find-esh "cat svg.el | grep dom | tr '()' '  '")
# (find-esh "cat svg.el | grep dom | tr '()' '  ' | tr ' ' '\n' | grep dom")
# (find-esh "cat dom.el | grep defun")
# (find-esh "cat dom.el | grep defun | sort")
# (find-esh "cat svg.el | grep -i xml")

dom
dom-add-child-before
dom-append-child
dom-attr
dom-attributes
dom-by-id
dom-by-tag
dom-node
dom-remove-node
dom-set-attribute
dom-set-attributes
new-dom-node


# (find-efile "dom.el" "(defun dom-pp ")





#####
#
# demo-1
# 2022apr02
#
#####

# «demo-1»  (to ".demo-1")
# (find-angg ".emacs" "find-svgbuffer")
# (find-angg ".emacs" "ee-f9-jul-2026")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-04/msg00002.html
# (require 'svg)

(defun s   () (interactive) (find-svgbuffer "*svg*" svg))
(defun ks  () (interactive) (ee-kill-buffer "*svg*"))
(defun pps () (interactive) (find-epp svg))
(defun pps () (interactive) (find-eppp (cddr svg)))
(defun s3  () (interactive) (find-3a nil '(pps) '(s)))

(ks)
(setq svg (svg-create 200 200 :stroke "orange" :stroke-width 5))
(s3)

(svg-rectangle svg 10 20 30 40 :fill-color "yellow" :stroke "blue")
(svg-rectangle svg 50 20 30 40 :fill-color "red" :stroke "brown")
(svg-rectangle svg 90 20 30 40 :fill-color "red")
(svg-rectangle svg 90 20 30 40 :fill-color "red")
(svg-rectangle svg 90 20 30 40 :fill-color "orchid2")
(svg-rectangle svg 90 20 30 40 :fill-color "purple")
(s3)
(svg-gradient svg "gradient1" 'linear '((0 . "red")    (100 . "yellow")))
(svg-gradient svg "gradient2" 'linear '((0 . "yellow") (100 . "blue")))
(svg-gradient svg "gradient3" 'linear '((0 . "blue")   (100 . "violet")))
(svg-rectangle svg  30 50 20 20 :gradient "gradient1")
(svg-rectangle svg  70 50 20 40 :gradient "gradient2")
(svg-rectangle svg 110 50 20 60 :gradient "gradient3")

(svg-polyline svg '((10 . 100) (30 . 100) (20 . 70)) :stroke-color "green")
(svg-polyline svg '((10 . 100) (30 . 100) (20 . 70)) :stroke-color "green" :fill-color "black")

(svg-circle   svg 160 40 15 :id "circle1")
(s3)

(setq svg (svg-create 520 520 :stroke "orange" :stroke-width 5))
(setq svg (svg-create 200 200 :stroke "orange" :stroke-width 5))

(find-svgbuffers "*svg*" svg "stroke")
(svg-rectangle svg 100 100 500 500 :gradient "gradient" :id "rec1")
(svg-circle    svg 60 50 40 :id "circle1")
(svg-ellipse   svg 100 100 50 90 :stroke "red" :id "ellipse1")


(require 'svg)
(setq svg (svg-create 201 101))
(find-svgbuffers "*svg*" svg)
(svg-gradient svg "gradient1" 'linear '((0 . "red") (25 . "green") (100 . "blue")))
(svg-circle svg 50 50 50 :gradient "gradient1")
(svg-gradient svg "gradient2" 'linear '((0 . "red") (100 . "blue")))
(svg-circle svg 100 50 50 :gradient "gradient2")




#####
#
# demo-2
# 2022apr03
#
#####

# «demo-2»  (to ".demo-2")
# (find-angg ".emacs" "ee-f9-jul-2026")
# (find-fline "~/LOGS/2022apr02.emacs-2")
# (require 'svg)

;; Test: (ramp 100 100)
;;
(defun ramp (x0 y0)
  `((,(+ x0  0) . ,(+ y0   0))
    (,(+ x0 20) . ,(+ y0   0))
    (,(+ x0 30) . ,(+ y0 -10))))


(defun s   () (interactive) (find-svgbuffer "*svg*" svg))
(defun ks  () (interactive) (ee-kill-buffer "*svg*"))
(defun pps () (interactive) (find-eppp (cddr svg)))
(defun pps () (interactive) (find-epp svg))
(defun s3  () (interactive) (find-3a nil '(pps) '(s)))

(ks)
(setq svg (svg-create 200 200))
(s3)

(svg-rectangle svg 0 0 200 200 :fill-color "#eeeeee")
(svg-polyline svg (ramp 20 20) :stroke-color "black")
(svg-polyline svg (ramp 30 30) :stroke-color "black" :fill-color "blue")
(svg-polyline svg (ramp 40 40) :stroke-color "black" :fill-color "blue" :stroke-width 3)
(svg-polyline svg (ramp 50 50) :stroke-color "black" :fill-color "none" :stroke-width 3)
(svg-polyline svg (ramp 60 60) :stroke-color "black" :fill-color nil    :stroke-width 3)
(s3)

(svg-rectangle svg 50 20 30 40 :fill-color "red" :stroke "brown")
(svg-rectangle svg 90 20 30 40 :fill-color "red")
(svg-rectangle svg 90 20 30 40 :fill-color "red")
(svg-rectangle svg 90 20 30 40 :fill-color "orchid2")
(svg-rectangle svg 90 20 30 40 :fill-color "purple")
(s3)
(svg-gradient svg "gradient1" 'linear '((0 . "red")    (100 . "yellow")))
(svg-gradient svg "gradient2" 'linear '((0 . "yellow") (100 . "blue")))
(svg-gradient svg "gradient3" 'linear '((0 . "blue")   (100 . "violet")))
(svg-rectangle svg  30 50 20 20 :gradient "gradient1")
(svg-rectangle svg  70 50 20 40 :gradient "gradient2")
(svg-rectangle svg 110 50 20 60 :gradient "gradient3")

(svg-polyline svg '((10 . 100) (30 . 100) (20 . 70)) :stroke-color "green")
(svg-polyline svg '((10 . 100) (30 . 100) (20 . 70)) :stroke-color "green" :fill-color "black")

(svg-circle   svg 160 40 15 :id "circle1")
(s3)





#####
#
# hlavaty-1
# 2022apr02
#
#####

# «hlavaty-1»  (to ".hlavaty-1")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-04/msg00007.html
# (find-angg ".emacs" "find-svgbuffer")
# (find-hfunction 'svg-rectangle)
# The prefix "hsvg-" means "(based on) Tomas Hlavaty's SVG functions".

;; Tests:            (hsvg 1 2 3 4 :BO "DY")
;;                                 (hsvg-circle 5 6 7)
;;                   (hsvg 1 2 3 4 (hsvg-circle 5 6 7))
;; (ee-xml-to-string (hsvg 1 2 3 4 (hsvg-circle 5 6 7)))

' (ee-xml-to-string
   '((svg
      ((xmlns . "http://www.w3.org/2000/svg")
       (viewBox . "0 0 100 100"))
      (circle ((cx . "50")
	       (cy . "50")
	       (r . "20")))
      ))
   )

(defun hsvg-n (n) (format "%s" n))
(setq  hsvg-viewbox "0 0 100 100")

(defun hsvg (&rest body)
  `(svg
    ((xmlns . "http://www.w3.org/2000/svg")
     (viewBox . ,hsvg-viewbox))
    ,@body))

(defun hsvg-circle (cx cy r &rest rest)
  `(circle
    ((cx . ,(hsvg-n cx))
     (cy . ,(hsvg-n cy))
     (r  . ,(hsvg-n r))
     ,@rest
     )))

                        (hsvg (hsvg-circle 25 25 10))
(find-svgbuffer "*svg*" (hsvg (hsvg-circle 25 25 10)))
(find-svgbuffer "*svg*" (hsvg (hsvg-circle 25 25 10 '(fill . "red"))))


(fill . "red") (stroke-width . 5)

`(,@(prog1 nil (setq a 22))
  ,a
  ,@(prog1 nil (setq a 33))
  ,a
 )











(require 'xml)
(with-temp-buffer
  (xml-print
   '((svg
      ((xmlns . "http://www.w3.org/2000/svg")
       (viewBox . "0 0 100 100"))
      (circle
       ((cx . "50") (cy . "50") (r . "20"))))))
  (write-file "/tmp/a.svg"))

which you can refactor anyway you like, e.g.

(defun hsvg (x y w h &rest body)
  `((svg
     ((xmlns . "http://www.w3.org/2000/svg";)
      (viewBox . ,(format "%s %s %s %s" x y w h)))
     ,@body)))

(defun hsvg-circle (cx cy r)
  `(circle
    ((cx . ,(format "%s" cx)
     (cy . ,(format "%s" cy))
     (r . ,(format "%s" r))))))

(with-temp-buffer
  (xml-print
   (svg 0 0 100 100 (svg-circle 50 50 20)))
  (write-file "/tmp/a.svg"))


 -- Function: svg-polygon svg points &rest args
     Add a polygon to SVG where POINTS is a list of X/Y pairs that
     describe the outer circumference of the polygon.

          (svg-polygon svg '((100 . 100) (200 . 150) (150 . 90))
                       :stroke-color "blue" :fill-color "red")



#####
#
# clippath
# 2026aug11
#
#####

# «clippath»  (to ".clippath")
# https://www.fffuel.co/sssvg/#clippath
# (find-efile "svg.el" "(defun svg--append ")

'("This is a test block for `eepitch-svg'! Use <f9>s!"

* (load-esvg)
  (setq svg (svg-create 600 600 :stroke "orange" :stroke-width 5))
  (show-svg)
  (defun f (o) (svg--append svg o) o)

  (f (esvg-circle 100 100 10 :id "circle-nw"))
  (f (esvg-circle 200 100 20 :id "circle-ne"))
  (f (esvg-circle 200 200 30 :id "circle-se"))
  (f (esvg-circle 100 200 40 :id "circle-sw"))

  svg

  (defun esvg-clippath (&rest rest)
    `(clipPath ,@(esvg-translate-el rest)))

  (setq myclippath (esvg-clippath :id "my-clip-path"))
  (defun f (o) (add-to-list 'myclippath o 'append) myclippath)

  (f (esvg-circle 200 200 200 :id "circle1"))
  (f (esvg-circle 600 200 100 :id "circle2"))
  (f (esvg-circle 600 600 150 :id "circle3"))
  (f (esvg-circle 200 600 120 :id "circle4"))

  (setq svg (svg-create 600 600 :stroke "orange" :stroke-width 5))
  (show-svg)
  (defun f (o) (svg--append svg o) o)

  (esvg-rectangle
   193 200 400 400
   :fill "pink" :stroke "#red" :stroke-width 11
   :clip-path "url(#my-clip-path)"
  )

    clip-path="url(#my-clip-path)" x="193" y="200"
    width="400" height="400"
    fill="#FF4DC2" stroke="#B30077" stroke-width="11"




  <rect
    clip-path="url(#my-clip-path)" x="193" y="200"
    width="400" height="400"
    fill="#FF4DC2" stroke="#B30077" stroke-width="11"
  ></rect>
</svg>


  (defun f (o) (svg--append clip1 o) o)



  (setq clip1 (esvg-clippath :id "my-clip-path"))

  (defun f (o) o)

  (setq circles

 -- Function: add-to-list symbol element &optional append compare-fn

"--")




#####
#
# defs
# 2026aug21
#
#####

# «defs»  (to ".defs")
# https://www.fffuel.co/sssvg/#defs
# https://www.fffuel.co/sssvg/#use
# (find-esvg "esvg-xy.el" "SBGAT-test-2")





#####
#
# g
# 2026aug09
#
#####

# «g»  (to ".g")
# (find-esvg "esvg-demos.el" "demo-group-1")
# https://www.fffuel.co/sssvg/
# https://www.fffuel.co/sssvg/#group
# https://www.sarasoueidan.com/blog/structuring-grouping-referencing-in-svg/
# https://www.w3.org/TR/SVG2/struct.html#GElement

 '("This is a test block for `eepitch-svg'! Use <f9>s!"

* (load-esvg)  ; (find-angg ".emacs" "load-esvg")



  (defun f (o) (esvg-append svg o) (show-svg-pp))
  (defun test (&rest args)
    (setq svg (apply 'svg-create args))
    (f (esvg-rectangle 0 0 4 4 :fill "#333333"))
    (f (esvg-circle 0 0 0.5 :fill "red"))
    (f (esvg-circle 1 0 0.5 :fill "orange"))
    (f (esvg-circle 2 0 0.5 :fill "yellow"))
    (f (esvg-circle 3 0 0.5 :fill "green"))
    (f (esvg-circle 4 0 0.5 :fill "blue"))
    (f (esvg-circle 4 4 0.5 :fill "violet")))


"--")




# https://www.fffuel.co/sssvg/#circle
# https://www.fffuel.co/sssvg/#ellipse
# https://www.fffuel.co/sssvg/#rect
# https://www.fffuel.co/sssvg/#line
# https://www.fffuel.co/sssvg/#polyline
# https://www.fffuel.co/sssvg/#path

# https://www.fffuel.co/sssvg/#fill-stroke
# https://svgwg.org/svg2-draft/painting.html#StrokeWidthProperty
# https://svgwg.org/svg2-draft/coords.html#Units
# https://svgwg.org/svg2-draft/coords.html#TermUserUnits


# https://www.fffuel.co/sssvg/#transform
# https://www.fffuel.co/sssvg/#symbol
# https://www.fffuel.co/sssvg/#mask
# https://www.fffuel.co/sssvg/#pattern
# https://www.fffuel.co/sssvg/#lineargradient
# https://www.fffuel.co/sssvg/#radialgradient
# https://www.fffuel.co/sssvg/#filter
# https://www.fffuel.co/sssvg/#marker
# https://www.fffuel.co/sssvg/#text
# https://www.fffuel.co/sssvg/#tspan





#####
#
# path
# 2026aug18
#
#####

# «path»  (to ".path")
# (find-esvg "esvg-xy.el" "SBGAT-test-2")
# https://svgwg.org/svg2-draft/paths.html#PathElement
# https://svgwg.org/svg2-draft/paths.html#PathData
# https://svgwg.org/svg2-draft/paths.html#PathDataLinetoCommands
# https://svgwg.org/svg2-draft/paths.html#PathDataQuadraticBezierCommands
# https://svgwg.org/svg2-draft/paths.html#PathDataCubicBezierCommands
# https://svgwg.org/svg2-draft/paths.html#ReflectedControlPoints
# https://svgwg.org/svg2-draft/paths.html#PathDataEllipticalArcCommands
# https://svgwg.org/svg2-draft/paths.html#PathDataBNF

'("This is a test block for `eepitch-svg'! Use <f9>s!"

* (load-esvg)  ; (find-angg ".emacs" "load-esvg")
  (defun d (&rest r) (show-svg))            ; display
  (defun st   (o)    (setq svg   o))        ; set top-level svg
  (defun sa   (o)    (setq svg-a o))        ; set where appends happen
  (defun sta  (o)    (setq svg o svg-a o))  ; set top-level and append
  (defun a    (o)    (esvg-append svg-a o)) ; append
  (defun ad   (o)    (a o) (d))             ; append and display
  (defun asad (o)    (a o) (sa o) (d))      ; append, set append, display

  (d (sta (esvg-xy-sbgat-A  0 0  5 4   nil 500)))
  (asad (esvg-g :stroke "orange"))
  (ad (esvg-path "M 1 2  L 2 2  M 3 1  L 4 1"))
  (ad (esvg-path "M 1 1  l 1 0  l 1 1  l 1 0"))

  (setq pts '((1 1) (1 2) (2 3) (3 3)))

  (defun p (n) (nth n pts))
  (defun drawp () (ad (esvg-path `(M ,(p 0) C ,(p 1) ,(p 2) ,(p 3)) :id "p")))
  (defun drawc () (ad (esvg-xy-circles pts 0.15 :stroke "none" :id "circles")))
  (defun spdraw (newpts) (setq pts newpts) (drawp) (drawc))

  (d (sta (esvg-xy-sbgat-A  0 0  5 4   nil 500)))
  (asad (esvg-g :stroke "gray"))

  (spdraw '((1 1) (1 2)   (2 3)   (3 3)))
  (spdraw '((1 1) (1 2)   (2 3.5) (3 3)))
  (spdraw '((1 1) (1 2)   (2 3)   (3 3)))
  (spdraw '((1 1) (0.5 2) (2 3)   (3 3)))
  (spdraw '((1 1) (1 2)   (2 3)   (3 3)))

"--")




#####
#
# polyline
# 2026aug22
#
#####

# «polyline»  (to ".polyline")
# (find-efunction 'svg-polyline)
# (find-efunction 'esvg-polyline)





#####
#
# transform
# 2026aug09
#
#####

# «transform»  (to ".transform")
# https://www.fffuel.co/sssvg/#transform
# https://www.w3.org/TR/SVG2/coords.html#TransformProperty
# https://www.w3.org/TR/css-transforms-1/#svg-syntax
# https://www.w3.org/TR/css-transforms-1/#svg-transform-function
# https://www.w3.org/TR/css-transforms-1/#svg-transform-functions
# https://www.w3.org/TR/css-transforms-1/#svg-translate
# https://www.w3.org/TR/css-transforms-1/#svg-scale




#####
#
# use
# 2026aug15
#
#####

# «use»  (to ".use")
# https://www.fffuel.co/sssvg/#use
# https://svgwg.org/svg2-draft/struct.html#UseElement
# https://svgwg.org/svg2-draft/struct.html#UseElementHrefAttribute
# https://www.w3schools.com/graphics/svg_reference.asp

'("This is a test block for `eepitch-svg'! Use <f9>s!"

* (load-esvg)  ; (find-angg ".emacs" "load-esvg")
  (setq svg (svg-create 400 400 :viewBox "0 0 800 800"))
  (setq svg-a svg)
  (defun f (o) (esvg-append svg-a o) (show-svg-pp-xml))
  (defun f (o) (esvg-append svg-a o) (show-svg))

  (setq myface (esvg-g :id "my-face"))
  (f    myface)
  (setq svg-a myface)
    (f (esvg-circle 204.5 588.5 125  :fill "#ffa34d"))
    (f (esvg-circle 174.5 538.5 16.5 :fill "#b35600"))
    (f (esvg-circle 238.5 538.5 16.5 :fill "#b35600"))
    (f (esvg-ellipse 205 639 32 13   :fill "#b35600"))

    (f (esvg-circle 204.5 588.5 125  :fill "orange"))
    (f (esvg-circle 174.5 538.5 16.5 :fill "brown"))
    (f (esvg-circle 238.5 538.5 16.5 :fill "brown"))
    (f (esvg-ellipse 205 639 32 13   :fill "brown"))
  (setq svg-a svg)

  (f (esvg-use "my-face" :x 300 :y -300 :transform "skewY(15)" :id "face2"))
  (f (esvg-use "my-face" :x 290 :y -300 :transform "skewY(15)" :id "face2"))
  (f (esvg-use "my-face" :x 290 :y -300 :transform "skewY(10)" :id "face2"))

"--")





#####
#
# viewbox
# 2026aug05
#
#####

# «viewbox»  (to ".viewbox")
# (to "hlavaty-1")
# https://sachachua.com/blog/2024/01/patching-elfeed-and-shr-to-handle-svg-images-with-viewbox-attributes/
# https://www.sarasoueidan.com/blog/svg-coordinate-systems/
# https://www.sarasoueidan.com/blog/svg-transformations/
# http://sarasoueidan.com/blog/nesting-svgs
# https://www.fffuel.co/sssvg/#viewbox

# https://www.w3.org/TR/SVG2/coords.html#ViewBoxAttribute
# ^ "A negative value for <width> or <height> is an error and
#    invalidates the ‘viewBox’ attribute. A value of zero
#    disables rendering of the element."

'("This is a test block for `eepitch-svg'! Use <f9>s!"

* (load-esvg)  ; (find-angg ".emacs" "load-esvg")

  (setq svg (svg-create 300 300))
  (defun f (o) (esvg-append svg o) (show-svg-pp))
  (f (esvg-rectangle 100 100 100 100 :fill "brown" :stroke "orange"))

  (defun test-create (&rest args)
    (setq svg (apply 'svg-create args))
    (defun f (o) (esvg-append svg o) (show-svg-pp))
    (f (esvg-rectangle 100 100 100 100 :fill "brown" :stroke "orange")))

  (test-create 300 300)
  (test-create 190 190)
  (test-create 180 180)

  (test-create 300 300)
  (test-create 300 300 :stroke-width 5)

  (test-create 300 300)
  (test-create 300 300 :viewBox "0 0 300 300")
  (test-create 300 300 :viewBox "0 0 290 290")
  (test-create 300 300 :viewBox "0 0 280 280")

  (test-create 300 300)
  (test-create 300 300 :viewBox " 50  50 250 250")
  (test-create 300 300 :viewBox "100 100 200 200")
  (test-create 290 290 :viewBox "100 100 200 200")
  (test-create 280 280 :viewBox "100 100 200 200")

  (defun f (o) (esvg-append svg o) (show-svg-pp))
  (defun test (&rest args)
    (setq svg (apply 'svg-create args))
    (f (esvg-rectangle 0 0 4 4 :fill "#333333"))
    (f (esvg-circle 0 0 0.5 :fill "red"))
    (f (esvg-circle 1 0 0.5 :fill "orange"))
    (f (esvg-circle 2 0 0.5 :fill "yellow"))
    (f (esvg-circle 3 0 0.5 :fill "green"))
    (f (esvg-circle 4 0 0.5 :fill "blue"))
    (f (esvg-circle 4 4 0.5 :fill "violet")))

  (test 300 300 :viewBox "0 0 4 4")
  (test 300 300 :viewBox "-0.1 -0.1 4 4")
  (test 300 300 :viewBox "-0.1 -0.1 4.1 4.1")
  (test 300 300 :viewBox "-0.1 -0.1 4.2 4.2")
  (test 300 300 :viewBox "0 0 5 5")
  (test 300 300 :viewBox "2 2 2 2")

"--")






#####
#
# css-doodle
# 2022sep26
#
#####

# «css-doodle»  (to ".css-doodle")
# https://news.ycombinator.com/item?id=32990177 Experimenting a New Syntax to Write SVG (yuanchuan.dev)
# https://yuanchuan.dev/experimenting-a-new-syntax-to-write-svg
# https://css-doodle.com/
# https://github.com/css-doodle/css-doodle
# https://webdesign.tutsplus.com/tutorials/how-to-draw-patterns-with-css-using-css-doodle--cms-33110
# https://www.youtube.com/watch?v=KKg6Uo1pVLU




#####
#
# nanosvg
# 2023jan27
#
#####

# «nanosvg»  (to ".nanosvg")
# https://github.com/memononen/nanosvg
# (find-git-links "https://github.com/memononen/nanosvg" "nanosvg")
# (code-c-d "nanosvg" "~/usrc/nanosvg/")
# (find-nanosvgfile "")
# (find-nanosvgfile "README.md")

https://lists.gnu.org/archive/html/emacs-devel/2023-01/msg00513.html Jean / IceWM




#####
#
# How to set up emacs as an SVG editor (by monospace)
# 2025jun21
#
#####

# «monospace-editing»  (to ".monospace-editing")
# https://monospace.games/posts/20231030-editing-svg-with-emacs.html
# (find-wget "https://monospace.games/posts/20231030-editing-svg-with-emacs.html")
# (find-wget "https://monospace.games/posts/20231030-editing-svg-with-emacs.html" "svg-demo.mp4")
# https://monospace.games/assets/svg-demo.mp4
# (code-video "svgdemovideo" "$S/https/monospace.games/assets/svg-demo.mp4")
# (find-svgdemovideo "0:00")
# (find-es "xml" "trang")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "/tmp/trang/")
rm -Rv /tmp/trang/
mkdir  /tmp/trang/
cd     /tmp/trang/
sudo apt-get install trang
wget https://www.w3.org/Graphics/SVG/1.1/DTD/svg11-flat-20110816.dtd
# Convert it to RELAX NG Compact format with trang
trang svg11-flat-20110816.dtd svg.rnc

# (find-fline "/tmp/trang/")
# (find-fline "/tmp/trang/svg11-flat-20110816.dtd")
# (find-fline "/tmp/trang/svg.rnc")

# https://github.com/emacscollective/no-littering
# (find-epackage-links 'no-littering)
# (find-epackages      'no-littering)
# (find-epackage       'no-littering)
# (code-c-d "nolittering" "~/.emacs.d/elpa/no-littering-20260731.2241/")
# (find-nolitteringfile "")




#####
#
# comeau-intro
# 2026aug02
#
#####

# «comeau-intro»  (to ".comeau-intro")
# https://www.joshwcomeau.com/svg/friendly-introduction-to-svg/
# (find-htmlpdf-links "comeauintro" "https://www.joshwcomeau.com/svg/friendly-introduction-to-svg/")

;; <comeauintro>
;; https://www.joshwcomeau.com/svg/friendly-introduction-to-svg/
;; (find-fline "$S/https/www.joshwcomeau.com/svg/friendly-introduction-to-svg/")
(code-pdf-page  "comeauintro" "$S/https/www.joshwcomeau.com/svg/friendly-introduction-to-svg/index.pdf")
(code-pdf-text8 "comeauintro" "$S/https/www.joshwcomeau.com/svg/friendly-introduction-to-svg/index.pdf")
;; (find-comeauintropage)
;; (find-comeauintrotext)




#####
#
# comeau-lines-3
# 2026aug08
#
#####

# «comeau-lines-3»  (to ".comeau-lines-3")
# https://www.joshwcomeau.com/svg/friendly-introduction-to-svg/#lines-3

<svg width="280" height="280" class="s1j66pt9">
  <defs>
    <pattern id="Rarhheiavfelb-grid" width="20" height="20" patternUnits="userSpaceOnUse">
      <path d=" M 20 0 L 20 20 M 0 20 L 20 20 " fill="none" stroke="hsl(0 0% 80%)" stroke-width="0.5">
      </path>
    </pattern>
  </defs>
  <rect width="100%" height="100%" fill="url(#Rarhheiavfelb-grid)" fill-opacity="0.5">
  </rect>
  <g style="opacity:1" class="i1wntda9">
    <line data-is-active="false" x1="73" y1="80" x2="0" y2="80" class="gvcx5r gqltevh">
    </line>
    <line data-is-active="false" x1="73" y1="80" x2="0" y2="80" class="g1mx31e3 gqltevh">
    </line>
    <line data-is-active="false" x1="80" y1="73" x2="80" y2="0" class="gvcx5r gqltevh">
    </line>
    <line data-is-active="false" x1="80" y1="73" x2="80" y2="0" class="g1mx31e3 gqltevh">
    </line>
    <line data-is-active="false" x1="193" y1="200" x2="0" y2="200" class="gvcx5r gqltevh">
    </line>
    <line data-is-active="false" x1="193" y1="200" x2="0" y2="200" class="g1mx31e3 gqltevh">
    </line>
    <line data-is-active="false" x1="200" y1="193" x2="200" y2="0" class="gvcx5r gqltevh">
    </line>
    <line data-is-active="false" x1="200" y1="193" x2="200" y2="0" class="g1mx31e3 gqltevh">
    </line>
    <line x1="80" y1="80" x2="200" y2="200" stroke="var(--wham-complementary-500)" stroke-width="5">
    </line>
    <text x="40" y="100" text-anchor="middle" dominant-baseline="bottom" font-size="1rem" data-is-hidden="false" data-is-active="false" class="l1s5y600 ley0nm0">x1</text>
    <text x="40" y="100" text-anchor="middle" dominant-baseline="bottom" font-size="1rem" data-is-hidden="false" data-is-active="false" class="l1tcs5u4 ley0nm0">x1</text>
    <text x="110" y="40" text-anchor="end" dominant-baseline="middle" font-size="1rem" data-is-hidden="false" data-is-active="false" class="l1s5y600 ley0nm0">y1</text>
    <text x="110" y="40" text-anchor="end" dominant-baseline="middle" font-size="1rem" data-is-hidden="false" data-is-active="false" class="l1tcs5u4 ley0nm0">y1</text>
    <text x="100" y="220" text-anchor="middle" dominant-baseline="bottom" font-size="1rem" data-is-hidden="false" data-is-active="false" class="l1s5y600 ley0nm0">x2</text>
    <text x="100" y="220" text-anchor="middle" dominant-baseline="bottom" font-size="1rem" data-is-hidden="false" data-is-active="false" class="l1tcs5u4 ley0nm0">x2</text>
    <text x="230" y="100" text-anchor="end" dominant-baseline="middle" font-size="1rem" data-is-hidden="false" data-is-active="false" class="l1s5y600 ley0nm0">y2</text>
    <text x="230" y="100" text-anchor="end" dominant-baseline="middle" font-size="1rem" data-is-hidden="false" data-is-active="false" class="l1tcs5u4 ley0nm0">y2</text>
    <circle cx="80" cy="80" r="5" fill="var(--color-background)">
    </circle>
    <circle cx="80" cy="80" r="3" fill="white">
    </circle>
    <circle cx="200" cy="200" r="5" fill="var(--color-background)">
    </circle>
    <circle cx="200" cy="200" r="3" fill="white">
    </circle>
  </g>
</svg> 




#####
#
# schedule
# 2026aug08
#
#####

# «schedule»  (to ".schedule")
# https://sachachua.com/blog/2023/09/emacsconf-backstage-scheduling-with-svgs/
# https://sachachua.com/blog/2023/09/emacsconf-backstage-scheduling-with-svgs/schedule.svg

<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <title> Graphical view of the schedule</title>
  <g transform="translate(0,0)">
    <title> Schedule for Saturday</title>
    <rect width="800" height="100" x="0" y="0" fill="white">
    </rect>
    <text font-size="10" fill="black" y="12" x="3"> Saturday</text>
    <a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open">
      <title> 9:00- 9:10 Saturday opening remarks</title>
      <rect x="0" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(13,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text>
      </g>
    </a>
    <a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure">
      <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title>
      <rect x="15" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="gray">
      </rect>
      <g transform="translate(28,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text>
      </g>
    </a>
    <a href="/2023/talks/writing" title="Emacs Turbo-Charges My Writing" data-slug="writing">
      <title> 9:30- 9:40 Emacs Turbo-Charges My Writing</title>
      <rect x="47" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(60,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text>
      </g>
    </a>
    <a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one">
      <title> 10:10-10:30 one.el: the static site generator for Emacs Lisp Programmers</title>
      <rect x="109" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(138,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text>
      </g>
    </a>
    <a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni">
      <title> 11:00-11:20 Authoring and presenting university courses with Emacs and a full libre software stack</title>
      <rect x="188" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(217,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text>
      </g>
    </a>
    <a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive">
      <title> 12:50- 1:10 hyperdrive.el: Peer-to-peer filesystem in Emacs</title>
      <rect x="360" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(389,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text>
      </g>
    </a>
    <a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref">
      <title> 1:40- 2:00 Org-Mode workflow: informal reference tracking</title>
      <rect x="439" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="gray">
      </rect>
      <g transform="translate(468,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text>
      </g>
    </a>
    <a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor">
      <title> 2:10- 2:20 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title>
      <rect x="486" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(499,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text>
      </g>
    </a>
    <a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat">
      <title> 2:50- 3:00 A modern Emacs look-and-feel without pain</title>
      <rect x="549" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(562,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text>
      </g>
    </a>
    <a href="/2023/talks/hn" title="The many ways to browse Hacker News from Emacs" data-slug="hn">
      <title> 3:30- 3:40 The many ways to browse Hacker News from Emacs</title>
      <rect x="611" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="gray">
      </rect>
      <g transform="translate(624,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hn</text>
      </g>
    </a>
    <a href="/2023/talks/web" title="Emacs saves the Web" data-slug="web">
      <title> 4:00- 4:40 Emacs saves the Web</title>
      <rect x="658" y="15" opacity="0.8" width="62" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(718,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text>
      </g>
    </a>
    <g transform="translate(0,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 9 AM</text>
    </g>
    <g transform="translate(94,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 10 AM</text>
    </g>
    <g transform="translate(188,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 11 AM</text>
    </g>
    <g transform="translate(282,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 12 PM</text>
    </g>
    <g transform="translate(376,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 1 PM</text>
    </g>
    <g transform="translate(470,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 2 PM</text>
    </g>
    <g transform="translate(564,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 3 PM</text>
    </g>
    <g transform="translate(658,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 4 PM</text>
    </g>
    <g transform="translate(752,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 5 PM</text>
    </g>
  </g>
  <g transform="translate(0,100)">
    <title> Schedule for Sunday</title>
    <rect width="800" height="100" x="0" y="0" fill="white">
    </rect>
    <text font-size="10" fill="black" y="12" x="3"> Sunday</text>
    <a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open">
      <title> 9:00- 9:05 Sunday opening remarks</title>
      <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(5,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text>
      </g>
    </a>
    <a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows">
      <title> 9:05- 9:45 Windows into Freedom</title>
      <rect x="7" y="15" opacity="0.8" width="62" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(67,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text>
      </g>
    </a>
    <a href="/2023/talks/extending" title="GNU Emacs for electronics, note-taking, and as lightweight IDE" data-slug="extending">
      <title> 10:15-10:35 GNU Emacs for electronics, note-taking, and as lightweight IDE</title>
      <rect x="117" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(146,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> extending</text>
      </g>
    </a>
    <a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml">
      <title> 12:05-12:15 Writing a language server in OCaml for Emacs, fun, and profit</title>
      <rect x="290" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(303,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text>
      </g>
    </a>
    <a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing">
      <title> 12:45- 1:05 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title>
      <rect x="352" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(381,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text>
      </g>
    </a>
    <a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen">
      <title> 1:35- 1:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title>
      <rect x="431" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="gray">
      </rect>
      <g transform="translate(460,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text>
      </g>
    </a>
    <a href="/2023/talks/voice" title="Improving access to AI-assisted literate programming with voice control" data-slug="voice">
      <title> 2:05- 2:25 Improving access to AI-assisted literate programming with voice control</title>
      <rect x="478" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(507,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text>
      </g>
    </a>
    <a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm">
      <title> 2:55- 3:15 LLM clients in Emacs, functionality and standardization</title>
      <rect x="556" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="gray">
      </rect>
      <g transform="translate(585,48)">
	<text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text>
      </g>
    </a>
    <g transform="translate(0,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 9 AM</text>
    </g>
    <g transform="translate(94,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 10 AM</text>
    </g>
    <g transform="translate(188,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 11 AM</text>
    </g>
    <g transform="translate(282,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 12 PM</text>
    </g>
    <g transform="translate(376,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 1 PM</text>
    </g>
    <g transform="translate(470,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 2 PM</text>
    </g>
    <g transform="translate(564,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 3 PM</text>
    </g>
    <g transform="translate(658,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 4 PM</text>
    </g>
    <g transform="translate(752,15)">
      <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70">
      </line>
      <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 5 PM</text>
    </g>
  </g>
</svg>




#####
#
# card-game.el
# 2026aug08
#
#####

# «card-game.el»  (to ".card-game.el")
# (find-esvg "esvg-demos.el" "demo-card-games-1")
# (find-angg "elisp/2026-eepitch-svg.el" "demo-card-game")
# (find-git-links "https://code.bru.st/corwin/card-game.el" "cardgame")
# (code-c-d "cardgame" "~/usrc/card-game.el/")
# (find-cardgamefile "")
# (find-cardgamegrep "grep --color=auto -niH --null -e svg *.el")
# (find-cardgamegrep "grep --color=auto -niH --null -e suit *.el")
# (find-cardgamegrep "grep --color=auto -niH --null -e spade *.el")
# (find-cardgamefile "card-games-svg.el")
# (find-cardgamefile "card-games.el")

# (add-to-list 'load-path "~/usrc/card-game.el/")
# (require 'card-games)


'("This is a test block for `eepitch-svg'! Use <f9>s!"

* (setq svg (card-games-svg-cards-svg '(("A" 1))))
* (show-svg-pp-xml)

"--")

https://www.reddit.com/r/emacs/comments/1vqd074/cardgames_melpa_thirtyfive_single_and_multiplayer/
https://corwin.bru.st/2026-08-16-emacs-card-games-on-melpa/
https://code.bru.st/corwin/card-game.el





#####
#
# atamariya
# 2026aug25
#
#####

# «atamariya»  (to ".atamariya")

# (find-fline "~/LOGS/2026aug24.emacs" "https://gitlab.com/atamariya/emacs/-/blob/dev/lisp/svg.el")
# https://gitlab.com/atamariya/emacs/-/blob/dev/lisp/svg.el
# https://gitlab.com/atamariya/emacs/-/raw/dev/lisp/svg.el

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
wget https://gitlab.com/atamariya/emacs/-/raw/dev/lisp/svg.el

tkdiff ~/bigsrc/emacs31/lisp/svg.el /tmp/svg.el

# (find-efile "svg.el")
# (find-fline "/tmp/svg.el")

# (find-fline "~/bigsrc/emacs31/lisp/svg.el")









http://git.savannah.nongnu.org/cgit/dungeon.git/tree/src/dm-map.el

<corwin> edrx: these are really, really messy but...
         http://git.savannah.nongnu.org/cgit/dungeon.git/tree/src/dm-map.el
<corwin> And then a rewrite of the 'tiling engine' is in dm-draw,
         with the actual user facing stuff here:
         http://git.savannah.nongnu.org/cgit/dungeon.git/tree/src/dm-sketch.el

<corwin> edrx: although this is basically impossible to read, this
         one function might help. it draws the 'graph paper'
         background.
         http://git.savannah.nongnu.org/cgit/dungeon.git/tree/src/dm-draw.el#n602
*** igemnace QUIT Quit: WeeChat 3.5
*** reedrichards QUIT Remote host closed the connection
*** HaSt QUIT Ping timeout: 260 seconds
<corwin> edrx: anyway... yea, I have been working with svg.el a
         bit; I'd be happy to chat or exchange emails but I'd just
         as soon not have my views on this topic kibitzed on devel.


https://news.ycombinator.com/item?id=33584941 Forking Chrome to turn HTML into SVG (fathy.fr)

https://github.com/misohena/el-easydraw
https://misohena.jp/blog/2021-09-21-emacs-easy-draw.html
https://svg-tutorial.com/ Learn SVG with 25 examples – How to code images in HTML
https://prideout.net/blog/svg_knots/
https://news.ycombinator.com/item?id=39079943 SVG images can contain JavaScript (github.com/berthubert)

https://rhodesmill.org/brandon/2019/animating-the-equant/ ***
https://news.ycombinator.com/item?id=40454475 Animating Ptolemy's Equant with Python, SVG, and CSS (rhodesmill.org)
https://fietkau.software/qr
https://news.ycombinator.com/item?id=41410442 Client-side QR code generator with SVG output (fietkau.software)
https://cyberb.space/notes/2024/how-i-added-maps-to-my-travel-posts/
https://news.ycombinator.com/item?id=41532958 I Added SVG Maps to My Travel Posts (cyberb.space)
https://notxor.nueva-actitud.org/2024/12/26/dibujando-figuras-con-emacs.html
https://www.joshwcomeau.com/svg/friendly-introduction-to-svg/ ***
https://www.joshwcomeau.com/svg/interactive-guide-to-paths/
https://news.ycombinator.com/item?id=44941605 An interactive guide to SVG paths (joshwcomeau.com)
https://www.perfectfreehand.com/
https://news.ycombinator.com/item?id=44955624 Perfect Freehand – Draw perfect pressure-sensitive freehand lines (perfectfreehand.com)

https://www.w3.org/2000/svg
https://www.joshwcomeau.com/svg/friendly-introduction-to-svg/
https://www.joshwcomeau.com/svg/interactive-guide-to-paths/
https://www.reddit.com/r/programming/comments/rkw5wz/a_challenger_to_the_throne_of_vector_graphics_svg/

https://lars.ingebrigtsen.no/2026/02/17/a-little-collection-of-svg-tricks-for-emacs/
https://lars.ingebrigtsen.no/page/1/?s=svg
https://www.emacswiki.org/emacs/EmacsSvg

https://monospace.games/posts/20231030-editing-svg-with-emacs.html





#  Local Variables:
#  coding:               utf-8-unix
#  End: