svg-path-d
Version:
SVG path data (path[d] attribute content) manipulation library.
120 lines • 4.19 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createReversed = exports.appendReversed = void 0;
var command_assertion_1 = require("./command-assertion");
var curve_node_1 = require("./curve-node");
var path_node_1 = require("./path-node");
function hasClosePath(items, index) {
for (; index < items.length; index++) {
var item = items[index];
if (command_assertion_1.isClosePath(item)) {
return true;
}
else if (command_assertion_1.isMoveTo(item)) {
return false;
}
}
return false;
}
function appendReversed(items, index, acc) {
var item = items[index];
var prev = items[index - 1];
var next = items[index + 1];
var x = path_node_1.getX(prev);
var y = path_node_1.getY(prev);
if (command_assertion_1.isEllipticalArc(item)) {
acc.push({
name: 'A',
rx: item.rx,
ry: item.ry,
angle: item.angle,
largeArcFlag: item.largeArcFlag,
sweepFlag: !item.sweepFlag,
x: x,
y: y,
});
}
else if (command_assertion_1.isLineTo(item)) {
acc.push({ name: 'L', x: x, y: y });
}
else if (command_assertion_1.isHLineTo(item)) {
acc.push({ name: 'H', x: x });
}
else if (command_assertion_1.isVLineTo(item)) {
acc.push({ name: 'V', y: y });
}
else if (command_assertion_1.isCurveTo(item)) {
if (next && command_assertion_1.isSmoothCurveTo(next)) {
acc.push({ name: 'S', x2: item.x1, y2: item.y1, x: x, y: y });
}
else {
acc.push({ name: 'C', x1: item.x2, y1: item.y2, x2: item.x1, y2: item.y1, x: x, y: y });
}
}
else if (command_assertion_1.isQCurveTo(item)) {
if (next && command_assertion_1.isSmoothQCurveTo(next)) {
acc.push({ name: 'T', x: x, y: y });
}
else {
acc.push({ name: 'Q', x1: item.x1, y1: item.y1, x: x, y: y });
}
}
else if (command_assertion_1.isSmoothCurveTo(item)) {
var x2 = curve_node_1.getReflectedX1(item);
var y2 = curve_node_1.getReflectedY1(item);
if (next && command_assertion_1.isSmoothCurveTo(next)) {
acc.push({ name: 'S', x2: x2, y2: y2, x: x, y: y });
}
else {
acc.push({ name: 'C', x1: item.x2, y1: item.y2, x2: x2, y2: y2, x: x, y: y });
}
}
else if (command_assertion_1.isSmoothQCurveTo(item)) {
if (next && command_assertion_1.isSmoothQCurveTo(next)) {
acc.push({ name: 'T', x: x, y: y });
}
else {
acc.push({ name: 'Q', x1: curve_node_1.getReflectedX1(item), y1: curve_node_1.getReflectedY1(item), x: x, y: y });
}
}
else {
var x0 = path_node_1.getX(item);
var y0 = path_node_1.getY(item);
if (command_assertion_1.isMoveTo(item)) {
if (hasClosePath(items, index + 1)) {
acc.push({ name: 'Z' });
}
if (prev && (x0 !== x || y0 !== y)) {
acc.push({ name: 'M', x: x, y: y });
}
}
else if (command_assertion_1.isClosePath(item)) {
if (x0 !== x) {
if (y0 !== y) {
acc.push({ name: 'L', x: x, y: y });
}
else {
acc.push({ name: 'H', x: x });
}
}
else if (y0 !== y) {
acc.push({ name: 'V', y: y });
}
}
}
}
exports.appendReversed = appendReversed;
function createReversed(items) {
var reveresed = [];
var i = items.length;
if (i > 0) {
var last = items[i - 1];
reveresed.push({ name: 'M', x: path_node_1.getX(last), y: path_node_1.getY(last) });
while (i-- > 0) {
appendReversed(items, i, reveresed);
}
}
return path_node_1.makePath(reveresed);
}
exports.createReversed = createReversed;
//# sourceMappingURL=reverse.js.map