UNPKG

svg-path-d

Version:

SVG path data (path[d] attribute content) manipulation library.

120 lines 4.19 kB
"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