An SVG path data library for Chicken Scheme

  1. An SVG path data library for Chicken Scheme
    1. Procedures
      1. path->string
      2. ->apath
      3. ->rpath
      4. ->mpath
      5. add-coords
      6. add-distances
    2. measure-path
    3. reverse-path
    4. Source code

This library can turn SVG path data to tagged sexp format (compatible with SXML). You can switch between absolute and relative coordinates, and turn it into a minified string.

The procedures work on both this library's own tagged format and on path data strings.

The data format uses single-letter symbols for the commands and exacts for the numbers. Every node is always a separate list, even when there's multiple subsequent nodes of the same command.

Every node can have attributes with an @ attribute marker, just like in SXML.

You can put in any attributes you want so you can keep track of node-local data. They're stripped out when you export the path back to string.

Here's an example of an H command with one argument, which happens to be 105, and with absolute coords added as an attribute:

(H (@ (coords (x 105) (y 200))) 105)

Procedures

path->string

(path->string "M100 100 L101,101 90 102")
⇒ "M100 100l1 1-11 1"

Reads a path (in sexp or string format) and returns a minified string.

->apath

(->apath "M100 200L200 100-100-200")
⇒ ((M 100 200) (L 200 100) (L -100 -200))

Reads a path (in sexp or string format) and returns sexp format with absolute coordinates.

->rpath

(->rpath "M100 200L200 100-100-200")
⇒ ((m 100 200) (l 100 -100) (l -300 -300))

Reads a path (in sexp or string format) and returns sexp format with relative coordinates.

->mpath

(->mpath "M100 200L200 100-100-200")
⇒ ((M 100 200) (L 200 100) (L -100 -200))

Reads a path (in sexp or string format) and returns sexp format with whatever coordinate format will print the shortest. This is almost never that useful when doing path programming, but path->string uses it internally.

add-coords

Change a path (in sexp or string format) into sexp format with a coords attribute added that stores the absolute coordinates of the node. If the path already had coords, only the newly computated coords will be returned.

add-distances

Change a path (in sexp or string format) into sexp format with a distance attribute added that stores the pythagorean diagonal distance from the previous node. If the path has a coords attribute on all of its nodes, they will be trusted, otherwise new ones will be calculated and added for all nodes.

measure-path

Convenience function returning a sub of the distances in a path.

reverse-path

Reads a path in any format and returns it in sexp format reversed. Any attributes in the input path are stripped.

Source code

For a repo,

git clone https://idiomdrottning.org/svgpath