UNPKG

fabric

Version:

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

1 lines 5.79 kB
{"version":3,"file":"parseTransformAttribute.min.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","matrices","cleanupSvgAttribute","replace","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":"4gBAcA,MAAMA,EAAC,IAAAC,OAAOC,EAAQ,KAChBC,EAAQC,OAAOC,IAAGC,IAAAA,EAAAC,EAAA,CAAA,WAAA,KAAA,CAAA,aAAA,SAAYP,GAC9BQ,EAAQJ,OAAOC,IAAGI,IAAAA,EAAAF,EAAA,CAAA,WAAA,KAAA,CAAA,aAAA,SAAYP,GAC9BU,EAASN,OAAOC,IAAGM,IAAAA,EAAAJ,EAAaP,CAAAA,YAAAA,OAAAA,IAAAA,OAAAA,CAAAA,cAAAA,OAAAA,IAAAA,WAAAA,EAAQA,EAAKA,GAC7CY,EAAQR,OAAOC,IAAGQ,IAAAA,EAAAN,EAAA,CAAA,WAAA,OAAA,OAAA,CAAA,aAAA,OAAA,WAAYP,EAAQA,GACtCc,EAAYV,OAAOC,IAAGU,IAAAA,EAAAR,EAAA,CAAA,eAAA,OAAA,OAAA,CAAA,iBAAA,OAAA,WAAgBP,EAAQA,GAC9CgB,EAASZ,OAAOC,IAAGY,IAAAA,EAAAV,oFAAaP,EAAKA,EAAKA,EAAKA,EAAKA,EAAKA,GACzDkB,EAASjB,MAAAA,OAASe,OAAMf,OAAIa,EAAS,KAAAb,OAAIS,EAAMT,KAAAA,OAAIW,EAAKX,KAAAA,OAAIE,EAAKF,KAAAA,OAAIO,EAAQ,KAC7EW,EAAU,MAAAlB,OAASiB,EAAa,MAChCE,EAAgBhB,OAAOC,IAAGgB,IAAAA,EAAAd,EAAA,CAAA,SAAA,SAAA,CAAA,WAAA,aAAUY,GAEpCG,EAAkB,IAAIC,OAAOH,GAC7BI,EAAc,IAAID,OAAOL,GACzBO,EAAiB,IAAIF,OAAOL,EAAW,KAWtC,SAASQ,EAAwBC,GAOtC,MAAMC,EAAqB,GAI3B,KATAD,EAAiBE,EAAoBF,GAElCG,QAAQ,iBAAkB,QAS1BH,IAAmBL,EAAgBS,KAAKJ,GAEzC,MAAO,IAAIK,GAGb,IAAK,MAAMC,KAASN,EAAeO,SAAST,GAAiB,CAC3D,MAAMU,EAAiBX,EAAYY,KAAKH,EAAM,IAC9C,IAAKE,EACH,SAEF,IAAInB,EAAiBgB,EACrB,MAAMK,EAAgBF,EAAeG,QAAQC,KAAQA,MAC5CC,KAAcC,GAAWJ,GAC3BK,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,GAAQN,EAAQO,KAAKC,GACxDC,WAAWD,KAGb,OAAQT,GACN,IAAK,YACHxB,EAASmC,EAAsBT,EAAMC,GACrC,MACF,KAAKS,EACHpC,EAASqC,EAAmB,CAAEC,MAAOZ,GAAQ,CAAEa,EAAGZ,EAAMa,EAAGZ,IAC3D,MACF,KAAKa,EACHzC,EAAS0C,EAAkBhB,EAAMC,GACjC,MACF,KAAKgB,EACH3C,EAAS4C,EAAkBlB,GAC3B,MACF,KAAKmB,EACH7C,EAAS8C,EAAkBpB,GAC3B,MACF,IAAK,SACH1B,EAAS,CAAC0B,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,GAK5CnB,EAASmC,KAAK/C,EAChB,CAEA,OAAOgD,EAA6BpC,EACtC"}