You've already forked wakapi-readme-stats
50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
// Path parsing and rendering code adapted from fabric.js -- Thanks!
|
|
var cmdlen = { m:2, l:2, h:1, v:1, c:6, s:4, q:4, t:2, a:7 },
|
|
regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\d)([-+])/g, /\s|,|###/];
|
|
|
|
export default function(pathstr) {
|
|
var result = [],
|
|
path,
|
|
curr,
|
|
chunks,
|
|
parsed, param,
|
|
cmd, len, i, j, n, m;
|
|
|
|
// First, break path into command sequence
|
|
path = pathstr
|
|
.slice()
|
|
.replace(regexp[0], '###$1')
|
|
.split(regexp[1])
|
|
.slice(1);
|
|
|
|
// Next, parse each command in turn
|
|
for (i=0, n=path.length; i<n; ++i) {
|
|
curr = path[i];
|
|
chunks = curr
|
|
.slice(1)
|
|
.trim()
|
|
.replace(regexp[2],'$1###$2')
|
|
.split(regexp[3]);
|
|
cmd = curr.charAt(0);
|
|
|
|
parsed = [cmd];
|
|
for (j=0, m=chunks.length; j<m; ++j) {
|
|
if ((param = +chunks[j]) === param) { // not NaN
|
|
parsed.push(param);
|
|
}
|
|
}
|
|
|
|
len = cmdlen[cmd.toLowerCase()];
|
|
if (parsed.length-1 > len) {
|
|
for (j=1, m=parsed.length; j<m; j+=len) {
|
|
result.push([cmd].concat(parsed.slice(j, j+len)));
|
|
}
|
|
}
|
|
else {
|
|
result.push(parsed);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|