104 lines
2.5 KiB
Plaintext
104 lines
2.5 KiB
Plaintext
VectorCanvas.prototype.pathSvgToVml = function (path) {
|
|
var result = '';
|
|
var cx = 0, cy = 0, ctrlx, ctrly;
|
|
|
|
return path.replace(/([MmLlHhVvCcSs])((?:-?(?:\d+)?(?:\.\d+)?,?\s?)+)/g, function (segment, letter, coords) {
|
|
coords = coords.replace(/(\d)-/g, '$1,-').replace(/\s+/g, ',').split(',');
|
|
if (!coords[0]) {
|
|
coords.shift();
|
|
}
|
|
|
|
for (var i = 0, l = coords.length; i < l; i++) {
|
|
coords[i] = Math.round(100 * coords[i]);
|
|
}
|
|
|
|
switch (letter) {
|
|
case 'm':
|
|
cx += coords[0];
|
|
cy += coords[1];
|
|
result = 't' + coords.join(',');
|
|
break;
|
|
|
|
case 'M':
|
|
cx = coords[0];
|
|
cy = coords[1];
|
|
result = 'm' + coords.join(',');
|
|
break;
|
|
|
|
case 'l':
|
|
cx += coords[0];
|
|
cy += coords[1];
|
|
result = 'r' + coords.join(',');
|
|
break;
|
|
|
|
case 'L':
|
|
cx = coords[0];
|
|
cy = coords[1];
|
|
result = 'l' + coords.join(',');
|
|
break;
|
|
|
|
case 'h':
|
|
cx += coords[0];
|
|
result = 'r' + coords[0] + ',0';
|
|
break;
|
|
|
|
case 'H':
|
|
cx = coords[0];
|
|
result = 'l' + cx + ',' + cy;
|
|
break;
|
|
|
|
case 'v':
|
|
cy += coords[0];
|
|
result = 'r0,' + coords[0];
|
|
break;
|
|
|
|
case 'V':
|
|
cy = coords[0];
|
|
result = 'l' + cx + ',' + cy;
|
|
break;
|
|
|
|
case 'c':
|
|
ctrlx = cx + coords[coords.length - 4];
|
|
ctrly = cy + coords[coords.length - 3];
|
|
cx += coords[coords.length - 2];
|
|
cy += coords[coords.length - 1];
|
|
result = 'v' + coords.join(',');
|
|
break;
|
|
|
|
case 'C':
|
|
ctrlx = coords[coords.length - 4];
|
|
ctrly = coords[coords.length - 3];
|
|
cx = coords[coords.length - 2];
|
|
cy = coords[coords.length - 1];
|
|
result = 'c' + coords.join(',');
|
|
break;
|
|
|
|
case 's':
|
|
coords.unshift(cy - ctrly);
|
|
coords.unshift(cx - ctrlx);
|
|
ctrlx = cx + coords[coords.length - 4];
|
|
ctrly = cy + coords[coords.length - 3];
|
|
cx += coords[coords.length - 2];
|
|
cy += coords[coords.length - 1];
|
|
result = 'v' + coords.join(',');
|
|
break;
|
|
|
|
case 'S':
|
|
coords.unshift(cy + cy - ctrly);
|
|
coords.unshift(cx + cx - ctrlx);
|
|
ctrlx = coords[coords.length - 4];
|
|
ctrly = coords[coords.length - 3];
|
|
cx = coords[coords.length - 2];
|
|
cy = coords[coords.length - 1];
|
|
result = 'c' + coords.join(',');
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return result;
|
|
|
|
}).replace(/z/g, '');
|
|
};
|