parse-path-string.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var lodash_es_1 = require("lodash-es");
  4. var SPACES = '\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029';
  5. var PATH_COMMAND = new RegExp('([a-z])[' + SPACES + ',]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[' + SPACES + ']*,?[' + SPACES + ']*)+)', 'ig');
  6. var PATH_VALUES = new RegExp('(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[' + SPACES + ']*,?[' + SPACES + ']*', 'ig');
  7. // Parses given path string into an array of arrays of path segments
  8. function parsePathString(pathString) {
  9. if (!pathString) {
  10. return null;
  11. }
  12. if (lodash_es_1.isArray(pathString)) {
  13. return pathString;
  14. }
  15. var paramCounts = {
  16. a: 7,
  17. c: 6,
  18. o: 2,
  19. h: 1,
  20. l: 2,
  21. m: 2,
  22. r: 4,
  23. q: 4,
  24. s: 4,
  25. t: 2,
  26. v: 1,
  27. u: 3,
  28. z: 0,
  29. };
  30. var data = [];
  31. String(pathString).replace(PATH_COMMAND, function (a, b, c) {
  32. var params = [];
  33. var name = b.toLowerCase();
  34. c.replace(PATH_VALUES, function (a, b) {
  35. b && params.push(+b);
  36. });
  37. if (name === 'm' && params.length > 2) {
  38. data.push([b].concat(params.splice(0, 2)));
  39. name = 'l';
  40. b = b === 'm' ? 'l' : 'L';
  41. }
  42. if (name === 'o' && params.length === 1) {
  43. data.push([b, params[0]]);
  44. }
  45. if (name === 'r') {
  46. data.push([b].concat(params));
  47. }
  48. else {
  49. while (params.length >= paramCounts[name]) {
  50. data.push([b].concat(params.splice(0, paramCounts[name])));
  51. if (!paramCounts[name]) {
  52. break;
  53. }
  54. }
  55. }
  56. return '';
  57. });
  58. return data;
  59. }
  60. exports.default = parsePathString;
  61. //# sourceMappingURL=parse-path-string.js.map