{"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 * @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","reNum","skewX","String","raw","skewY","rotate","scale","translate","transform","transforms","transformList","reTransformList","RegExp","reTransform","reTransformAll","parseTransformAttribute","attributeValue","matrices","cleanupSvgAttribute","replace","test","iMatrix","match","matchAll","transformMatch","exec","matrix","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":"iaAcA,MAAMA,EAAI,IAAIC,KACRC,EAAQC,OAAOC,GAAG,YAAYJ,MAC9BK,EAAQF,OAAOC,GAAG,YAAYJ,MAC9BM,EAASH,OAAOC,GAAG,aAAaJ,QAAQA,KAAKA,QAC7CO,EAAQJ,OAAOC,GAAG,YAAYJ,QAAQA,QACtCQ,EAAYL,OAAOC,GAAG,gBAAgBJ,QAAQA,QAE9CS,EAAY,MADHN,OAAOC,GAAG,aAAaJ,KAAKA,KAAKA,KAAKA,KAAKA,KAAKA,SAC7BQ,KAAaF,KAAUC,KAASL,KAASG,KACrEK,EAAa,MAAMD,MACnBE,EAAgBR,OAAOC,GAAG,UAAUM,UAEpCE,EAAkB,IAAIC,OAAOF,GAC7BG,EAAc,IAAID,OAAOJ,GACzBM,EAAiB,IAAIF,OAAOJ,EAAW,KAQtC,SAASO,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,IAAIE,EAAiBL,EACrB,MAAMM,EAAgBH,EAAeI,OAAQC,KAAQA,KAC5CC,KAAcC,GAAWJ,GAC3BK,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,GAAQN,EAAQO,IAAKC,GACxDC,WAAWD,IAGb,OAAQT,GACN,IAAK,YACHJ,EAASe,EAAsBT,EAAMC,GACrC,MACF,KAAKS,EACHhB,EAASiB,EAAmB,CAAEC,MAAOZ,GAAQ,CAAEa,EAAGZ,EAAMa,EAAGZ,IAC3D,MACF,KAAKa,EACHrB,EAASsB,EAAkBhB,EAAMC,GACjC,MACF,KAAKgB,EACHvB,EAASwB,EAAkBlB,GAC3B,MACF,KAAKmB,EACHzB,EAAS0B,EAAkBpB,GAC3B,MACF,IAAK,SACHN,EAAS,CAACM,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,GAK5CpB,EAASoC,KAAK3B,EAChB,CAEA,OAAO4B,EAA6BrC,EACtC"}