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.
47 lines
1.1 KiB
47 lines
1.1 KiB
/** |
|
* 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 |
|
}
|
|
|