svg-helper.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /**
  2. * Parse the d property of an SVG path into an array of drawing commands.
  3. * @param {String} d SvgPath d attribute.]
  4. * @return {Array} an array of drawing commands.
  5. */
  6. export function parseSvgPath(d) {
  7. //jshint ignore:line
  8. 'use strict'
  9. var commands = []
  10. var commandTokens = ['M', 'L', 'I', 'H', 'V', 'C', 'S', 'Q', 'T', 'A']
  11. var command
  12. var in_x = false
  13. var in_y = false
  14. var x = ''
  15. var y = ''
  16. for (var i = 0; i <= d.length; i++) {
  17. if (commandTokens.indexOf(d[i]) !== -1) {
  18. if (in_x || in_y) {
  19. commands.push({ command: command, x: x, y: y })
  20. x = ''
  21. y = ''
  22. }
  23. command = d[i]
  24. in_x = true
  25. in_y = false
  26. } else {
  27. if (d[i] === ',') {
  28. if (in_y) {
  29. commands.push({ command: command, x: x, y: y })
  30. x = ''
  31. y = ''
  32. }
  33. in_x = !in_x
  34. in_y = !in_y
  35. } else if (in_x) {
  36. x += d[i]
  37. } else if (in_y) {
  38. y += d[i]
  39. }
  40. }
  41. }
  42. if (d[i] !== ',' && in_y) {
  43. commands.push({ command: command, x: x, y: y })
  44. }
  45. return commands
  46. }