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