fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 4.71 kB
Source Map (JSON)
{"version":3,"file":"parseTransformAttribute.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":";;;;;AAcA,MAAM,IAAI,IAAI,MAAM;AACpB,MAAM,QAAQ,OAAO,GAAG,YAAY,EAAE;AACtC,MAAM,QAAQ,OAAO,GAAG,YAAY,EAAE;AACtC,MAAM,SAAS,OAAO,GAAG,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE;AACrD,MAAM,QAAQ,OAAO,GAAG,YAAY,EAAE,MAAM,EAAE;AAC9C,MAAM,YAAY,OAAO,GAAG,gBAAgB,EAAE,MAAM,EAAE;AAEtD,MAAM,YAAY,MADH,OAAO,GAAG,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAClC,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM;AACjF,MAAM,aAAa,MAAM,UAAU;AACnC,MAAM,gBAAgB,OAAO,GAAG,UAAU,WAAW;AAErD,MAAM,kBAAkB,IAAI,OAAO,cAAc;AACjD,MAAM,cAAc,IAAI,OAAO,UAAU;AACzC,MAAM,iBAAiB,IAAI,OAAO,WAAW,IAAI;;;;;;AAQjD,SAAgB,wBAAwB,gBAAgC;AAEtE,kBAAiB,oBAAoB,eAAe,CAEjD,QAAQ,kBAAkB,KAAK;CAGlC,MAAM,WAAqB,EAAE;AAI7B,KACE,CAAC,kBACA,kBAAkB,CAAC,gBAAgB,KAAK,eAAe,CAExD,QAAO,CAAC,GAAG,QAAQ;AAGrB,MAAK,MAAM,SAAS,eAAe,SAAS,eAAe,EAAE;EAC3D,MAAM,iBAAiB,YAAY,KAAK,MAAM,GAAG;AACjD,MAAI,CAAC,eACH;EAEF,IAAI,SAAiB;EAErB,MAAM,GAAG,WAAW,GAAG,WADD,eAAe,QAAQ,MAAM,CAAC,CAAC,EAAE;EAEvD,MAAM,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ,QAAQ,KAAK,QACxD,WAAW,IAAI,CAChB;AAED,UAAQ,WAAR;GACE,KAAK;AACH,aAAS,sBAAsB,MAAM,KAAK;AAC1C;GACF,KAAK;AACH,aAAS,mBAAmB,EAAE,OAAO,MAAM,EAAE;KAAE,GAAG;KAAM,GAAG;KAAM,CAAC;AAClE;GACF,KAAK;AACH,aAAS,kBAAkB,MAAM,KAAK;AACtC;GACF,KAAK;AACH,aAAS,kBAAkB,KAAK;AAChC;GACF,KAAK;AACH,aAAS,kBAAkB,KAAK;AAChC;GACF,KAAK;AACH,aAAS;KAAC;KAAM;KAAM;KAAM;KAAM;KAAM;KAAK;AAC7C;;AAIJ,WAAS,KAAK,OAAO;;AAGvB,QAAO,6BAA6B,SAAS"}