UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

1 lines 4.63 kB
{"version":3,"file":"parseTransformAttribute.min.mjs","names":[],"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 * @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"],"mappings":"iaAcA,MAAM,EAAI,IAAI,EAAA,GACR,EAAQ,OAAO,GAAG,YAAY,EAAA,IAC9B,EAAQ,OAAO,GAAG,YAAY,EAAA,IAC9B,EAAS,OAAO,GAAG,aAAa,EAAA,MAAQ,EAAA,GAAK,EAAA,MAC7C,EAAQ,OAAO,GAAG,YAAY,EAAA,MAAQ,EAAA,MACtC,EAAY,OAAO,GAAG,gBAAgB,EAAA,MAAQ,EAAA,MAE9C,EAAY,MADH,OAAO,GAAG,aAAa,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,IAAA,GAC7B,EAAA,GAAa,EAAA,GAAU,EAAA,GAAS,EAAA,GAAS,EAAA,GACrE,EAAa,MAAM,EAAA,IACnB,EAAgB,OAAO,GAAG,UAAU,EAAA,QAEpC,EAAkB,IAAI,OAAO,EAAA,CAC7B,EAAc,IAAI,OAAO,EAAA,CACzB,EAAiB,IAAI,OAAO,EAAW,IAAA,CAQ7C,SAAgB,EAAwB,EAAA,CAOtC,IAAM,EAAqB,EAAA,CAI3B,GAAA,EATA,EAAiB,EAAoB,EAAA,CAElC,QAAQ,iBAAkB,KAAA,GAS1B,GAAA,CAAmB,EAAgB,KAAK,EAAA,CAEzC,MAAO,CAAA,GAAI,EAAA,CAGb,IAAK,IAAM,KAAS,EAAe,SAAS,EAAA,CAAiB,CAC3D,IAAM,EAAiB,EAAY,KAAK,EAAM,GAAA,CAC9C,GAAA,CAAK,EACH,SAEF,IAAI,EAAiB,EAErB,EAAS,EAAA,GAAc,GADD,EAAe,OAAQ,GAAA,CAAA,CAAQ,EAAA,CAAA,CAE9C,EAAM,EAAM,EAAM,EAAM,EAAM,GAAQ,EAAQ,IAAK,GACxD,WAAW,EAAA,CAAA,CAGb,OAAQ,EAAR,CACE,IAAK,YACH,EAAS,EAAsB,EAAM,EAAA,CACrC,MACF,KAAK,EACH,EAAS,EAAmB,CAAE,MAAO,EAAA,CAAQ,CAAE,EAAG,EAAM,EAAG,EAAA,CAAA,CAC3D,MACF,KAAK,EACH,EAAS,EAAkB,EAAM,EAAA,CACjC,MACF,KAAK,EACH,EAAS,EAAkB,EAAA,CAC3B,MACF,KAAK,EACH,EAAS,EAAkB,EAAA,CAC3B,MACF,IAAK,SACH,EAAS,CAAC,EAAM,EAAM,EAAM,EAAM,EAAM,EAAA,CAK5C,EAAS,KAAK,EAAA,CAGhB,OAAO,EAA6B,EAAA,CAAA,OAAA,KAAA"}