|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
}
|