Turn SVG path into line segments


I am trying to turn a SVG path into a list of points in Node. I’m using elementtree to parse the SVG file.

d is the definition for the path, getPos simply turns a “x,y” into an object with an x and a y, doLine simply adds the coordinates to the list.

d = path.get('d')

words = d.split(' ')

oldPos = undefined
startPos = undefined

for i in [0..words.length]
word = words[i]

if word == 'm' or word == 'M'
oldPos = getPos(words[i + 1])
startPos = getPos(words[i + 1])
i += 1

else if word == 'l' or word == 'L'
console.log('done nothing...')

else if word == 'z' or word == 'Z'
doLine(oldPos, startPos)

else if word
pos = getPos(word)
doLine(oldPos, pos)
oldPos = pos

Currently, this doesn’t seem to work correctly.

I know that my path will never have curves, so I don’t need to worry about that.

I’m not sure on the SVG standard, so if anyone could help me, that would be many thanks.

Problem courtesy of: Tom Leese


SVG contains its own path segment parser so why reinvent the wheel. Try building on this: http://jsfiddle.net/longsonr/skWH5/

In gecko the path is parsed by starting at the beginning, reading one non-whitespace character, then using a table of the number of expected arguments that follow to know to read so many numbers (which may have up to one comma separating them). This continues till the end of the string.

Solution courtesy of: Robert Longson

View additional discussion.