You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.1 KiB
48 lines
1.1 KiB
1 year ago
|
/**
|
||
|
* Parse the d property of an SVG path into an array of drawing commands.
|
||
|
* @param {String} d SvgPath d attribute.]
|
||
|
* @return {Array} an array of drawing commands.
|
||
|
*/
|
||
|
export function parseSvgPath(d) {
|
||
|
//jshint ignore:line
|
||
|
'use strict'
|
||
|
|
||
|
var commands = []
|
||
|
var commandTokens = ['M', 'L', 'I', 'H', 'V', 'C', 'S', 'Q', 'T', 'A']
|
||
|
var command
|
||
|
var in_x = false
|
||
|
var in_y = false
|
||
|
var x = ''
|
||
|
var y = ''
|
||
|
for (var i = 0; i <= d.length; i++) {
|
||
|
if (commandTokens.indexOf(d[i]) !== -1) {
|
||
|
if (in_x || in_y) {
|
||
|
commands.push({ command: command, x: x, y: y })
|
||
|
x = ''
|
||
|
y = ''
|
||
|
}
|
||
|
command = d[i]
|
||
|
in_x = true
|
||
|
in_y = false
|
||
|
} else {
|
||
|
if (d[i] === ',') {
|
||
|
if (in_y) {
|
||
|
commands.push({ command: command, x: x, y: y })
|
||
|
x = ''
|
||
|
y = ''
|
||
|
}
|
||
|
in_x = !in_x
|
||
|
in_y = !in_y
|
||
|
} else if (in_x) {
|
||
|
x += d[i]
|
||
|
} else if (in_y) {
|
||
|
y += d[i]
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (d[i] !== ',' && in_y) {
|
||
|
commands.push({ command: command, x: x, y: y })
|
||
|
}
|
||
|
return commands
|
||
|
}
|