{"version":3,"file":"getPatternDefs.min.mjs","sources":["../../../src/parser/getPatternDefs.ts"],"sourcesContent":["import { getMultipleNodes } from './getMultipleNodes';\nimport { parseTransformAttribute } from './parseTransformAttribute';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type { TMat2D } from '../typedefs';\nimport { PatternOptions } from '../Pattern';\n\n/**\n * Parse all pattern found in it\n * @param {*} doc\n */\nexport function getPatternDefs(doc: Document) {\n  var tagArray = [\"pattern\"],\n    elList = getMultipleNodes(doc, tagArray),\n    el,\n    j = 0;\n  const patternDefs: Record<string, PatternOptions> = {};\n  j = elList.length;\n  while (j--) {\n    el = elList[j];\n    const id = el.getAttribute(\"id\");\n    if (id) {\n      var elNew = parsePattern(doc, el);\n      if (elNew) {\n        patternDefs[id] = elNew;\n      }\n    }\n  }\n  return patternDefs;\n}\n\n/**\n * parse pattern\n * @param {*} doc\n * @param {*} el\n */\nfunction parsePattern(doc: Document, el: Element) {\n  var svgToPattern = function (node: Element, parentTransform: TMat2D) {\n    if (node.nodeType === 3) return;\n\n    var nodeTranform =\n      node.getAttribute(\n        node.nodeName === \"pattern\" ? \"patternTransform\" : \"transform\"\n      ) || \"\";\n    var transformMatrix = parseTransformAttribute(nodeTranform);\n\n    parentTransform = multiplyTransformMatrices(\n      parentTransform,\n      transformMatrix\n    );\n\n    /**\n     * 解析子节点\n     * @param node \n     */\n    const parseChildNodes = (node: Element) => {\n      for (var i = 0; i < node.childNodes.length; i++) {\n        const child =node.childNodes[i];\n        if (child instanceof Element) \n        svgToPattern(child, parentTransform);\n      }\n    }\n    // switch 直接用它的子节点\n    if (node.nodeName == \"switch\") {\n      parseChildNodes(node);\n    } else if (node.nodeName === \"g\" || node.nodeName === \"pattern\") {\n      parseChildNodes(node);\n    } else if (node.nodeName === \"clipPath\") {\n      // 取得pattern的clippath\n      // 暂不处理\n    } else if (node.nodeName === \"image\") {\n      patternNode = {\n        source: node.getAttribute(\"xlink:href\"),\n        patternTransform: parentTransform,\n      };\n    }\n  };\n  // 开始解析SVG\n  var patternNode,\n    clipPath,\n    parentTransform: TMat2D = [1, 0, 0, 1, 0, 0];\n  svgToPattern(el, parentTransform);\n  return patternNode;\n}"],"names":["getPatternDefs","doc","el","elList","getMultipleNodes","j","patternDefs","length","id","getAttribute","elNew","parsePattern","patternNode","svgToPattern","node","parentTransform","nodeType","nodeTranform","nodeName","transformMatrix","parseTransformAttribute","multiplyTransformMatrices","parseChildNodes","i","childNodes","child","Element","source","patternTransform"],"mappings":"kNAUO,SAASA,EAAeC,GAC7B,IAEEC,EADAC,EAASC,EAAiBH,EADb,CAAC,YAGdI,EAAI,EACN,MAAMC,EAA8C,CAAE,EAEtD,IADAD,EAAIF,EAAOI,OACJF,KAAK,CAEV,MAAMG,GADNN,EAAKC,EAAOE,IACEI,aAAa,MAC3B,GAAID,EAAI,CACN,IAAIE,EAAQC,EAAaV,EAAKC,GAC1BQ,IACFJ,EAAYE,GAAME,EAEtB,CACF,CACA,OAAOJ,CACT,CAOA,SAASK,EAAaV,EAAeC,GACnC,IAyCIU,EAzCAC,EAAe,SAAUC,EAAeC,GAC1C,GAAsB,IAAlBD,EAAKE,SAAgB,OAEzB,IAAIC,EACFH,EAAKL,aACe,YAAlBK,EAAKI,SAAyB,mBAAqB,cAChD,GACHC,EAAkBC,EAAwBH,GAE9CF,EAAkBM,EAChBN,EACAI,GAOF,MAAMG,EAAmBR,IACvB,IAAK,IAAIS,EAAI,EAAGA,EAAIT,EAAKU,WAAWjB,OAAQgB,IAAK,CAC/C,MAAME,EAAOX,EAAKU,WAAWD,GACzBE,aAAiBC,SACrBb,EAAaY,EAAOV,EACtB,GAGmB,UAAjBD,EAAKI,UAEoB,MAAlBJ,EAAKI,UAAsC,YAAlBJ,EAAKI,SADvCI,EAAgBR,GAGW,aAAlBA,EAAKI,UAGa,UAAlBJ,EAAKI,WACdN,EAAc,CACZe,OAAQb,EAAKL,aAAa,cAC1BmB,iBAAkBb,GAGvB,EAMD,OADAF,EAAaX,EADe,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAErCU,CACT"}