fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 7.83 kB
Source Map (JSON)
{"version":3,"file":"parseTransformAttribute.mjs","sources":["../../../src/parser/parseTransformAttribute.ts"],"sourcesContent":["import { ROTATE, SCALE, SKEW_X, SKEW_Y, iMatrix } from '../constants';\nimport { reNum } from './constants';\nimport type { TMat2D } from '../typedefs';\nimport { cleanupSvgAttribute } from '../util/internals/cleanupSvgAttribute';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createSkewXMatrix,\n createSkewYMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\n\n// == begin transform regexp\nconst p = `(${reNum})`;\nconst skewX = String.raw`(skewX)\\(${p}\\)`;\nconst skewY = String.raw`(skewY)\\(${p}\\)`;\nconst rotate = String.raw`(rotate)\\(${p}(?: ${p} ${p})?\\)`;\nconst scale = String.raw`(scale)\\(${p}(?: ${p})?\\)`;\nconst translate = String.raw`(translate)\\(${p}(?: ${p})?\\)`;\nconst matrix = String.raw`(matrix)\\(${p} ${p} ${p} ${p} ${p} ${p}\\)`;\nconst transform = `(?:${matrix}|${translate}|${rotate}|${scale}|${skewX}|${skewY})`;\nconst transforms = `(?:${transform}*)`;\nconst transformList = String.raw`^\\s*(?:${transforms}?)\\s*$`;\n// http://www.w3.org/TR/SVG/coords.html#TransformAttribute\nconst reTransformList = new RegExp(transformList);\nconst reTransform = new RegExp(transform);\nconst reTransformAll = new RegExp(transform, 'g');\n// == end transform regexp\n\n/**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {TTransformMatrix} Array of 6 elements representing transformation matrix\n */\nexport function parseTransformAttribute(attributeValue: string): TMat2D {\n // first we clean the string\n attributeValue = cleanupSvgAttribute(attributeValue)\n // remove spaces around front parentheses\n .replace(/\\s*([()])\\s*/gi, '$1');\n\n // start with identity matrix\n const matrices: TMat2D[] = [];\n\n // return if no argument was given or\n // an argument does not match transform attribute regexp\n if (\n !attributeValue ||\n (attributeValue && !reTransformList.test(attributeValue))\n ) {\n return [...iMatrix];\n }\n\n for (const match of attributeValue.matchAll(reTransformAll)) {\n const transformMatch = reTransform.exec(match[0]);\n if (!transformMatch) {\n continue;\n }\n let matrix: TMat2D = iMatrix;\n const matchedParams = transformMatch.filter((m) => !!m);\n const [, operation, ...rawArgs] = matchedParams;\n const [arg0, arg1, arg2, arg3, arg4, arg5] = rawArgs.map((arg) =>\n parseFloat(arg),\n );\n\n switch (operation) {\n case 'translate':\n matrix = createTranslateMatrix(arg0, arg1);\n break;\n case ROTATE:\n matrix = createRotateMatrix({ angle: arg0 }, { x: arg1, y: arg2 });\n break;\n case SCALE:\n matrix = createScaleMatrix(arg0, arg1);\n break;\n case SKEW_X:\n matrix = createSkewXMatrix(arg0);\n break;\n case SKEW_Y:\n matrix = createSkewYMatrix(arg0);\n break;\n case 'matrix':\n matrix = [arg0, arg1, arg2, arg3, arg4, arg5];\n break;\n }\n\n // snapshot current matrix into matrices array\n matrices.push(matrix);\n }\n\n return multiplyTransformMatrixArray(matrices);\n}\n"],"names":["p","concat","reNum","skewX","String","raw","_templateObject","_taggedTemplateLiteral","skewY","_templateObject2","rotate","_templateObject3","scale","_templateObject4","translate","_templateObject5","matrix","_templateObject6","transform","transforms","transformList","_templateObject7","reTransformList","RegExp","reTransform","reTransformAll","parseTransformAttribute","attributeValue","cleanupSvgAttribute","replace","matrices","test","iMatrix","match","matchAll","transformMatch","exec","matchedParams","filter","m","operation","rawArgs","arg0","arg1","arg2","arg3","arg4","arg5","map","arg","parseFloat","createTranslateMatrix","ROTATE","createRotateMatrix","angle","x","y","SCALE","createScaleMatrix","SKEW_X","createSkewXMatrix","SKEW_Y","createSkewYMatrix","push","multiplyTransformMatrixArray"],"mappings":"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"}