Spaces:
Sleeping
Sleeping
| import { SVGPathData } from "./SVGPathData"; | |
| import { SVGCommand } from "./types"; | |
| // Encode SVG PathData | |
| // http://www.w3.org/TR/SVG/paths.html#PathDataBNF | |
| // Private consts : Char groups | |
| const WSP = " "; | |
| export function encodeSVGPath(commands: SVGCommand | SVGCommand[]) { | |
| let str = ""; | |
| if (!Array.isArray(commands)) { | |
| commands = [commands]; | |
| } | |
| for (let i = 0; i < commands.length; i++) { | |
| const command = commands[i]; | |
| if (command.type === SVGPathData.CLOSE_PATH) { | |
| str += "z"; | |
| } else if (command.type === SVGPathData.HORIZ_LINE_TO) { | |
| str += (command.relative ? "h" : "H") + | |
| command.x; | |
| } else if (command.type === SVGPathData.VERT_LINE_TO) { | |
| str += (command.relative ? "v" : "V") + | |
| command.y; | |
| } else if (command.type === SVGPathData.MOVE_TO) { | |
| str += (command.relative ? "m" : "M") + | |
| command.x + WSP + command.y; | |
| } else if (command.type === SVGPathData.LINE_TO) { | |
| str += (command.relative ? "l" : "L") + | |
| command.x + WSP + command.y; | |
| } else if (command.type === SVGPathData.CURVE_TO) { | |
| str += (command.relative ? "c" : "C") + | |
| command.x1 + WSP + command.y1 + | |
| WSP + command.x2 + WSP + command.y2 + | |
| WSP + command.x + WSP + command.y; | |
| } else if (command.type === SVGPathData.SMOOTH_CURVE_TO) { | |
| str += (command.relative ? "s" : "S") + | |
| command.x2 + WSP + command.y2 + | |
| WSP + command.x + WSP + command.y; | |
| } else if (command.type === SVGPathData.QUAD_TO) { | |
| str += (command.relative ? "q" : "Q") + | |
| command.x1 + WSP + command.y1 + | |
| WSP + command.x + WSP + command.y; | |
| } else if (command.type === SVGPathData.SMOOTH_QUAD_TO) { | |
| str += (command.relative ? "t" : "T") + | |
| command.x + WSP + command.y; | |
| } else if (command.type === SVGPathData.ARC) { | |
| str += (command.relative ? "a" : "A") + | |
| command.rX + WSP + command.rY + | |
| WSP + command.xRot + | |
| WSP + (+command.lArcFlag) + WSP + (+command.sweepFlag) + | |
| WSP + command.x + WSP + command.y; | |
| } else { | |
| // Unknown command | |
| throw new Error( | |
| `Unexpected command type "${ (command as any).type}" at index ${i}.`); | |
| } | |
| } | |
| return str; | |
| } | |