{"version":3,"file":"getPatternDefs.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","tagArray","elList","getMultipleNodes","el","j","patternDefs","length","id","getAttribute","elNew","parsePattern","svgToPattern","node","parentTransform","nodeType","nodeTranform","nodeName","transformMatrix","parseTransformAttribute","multiplyTransformMatrices","parseChildNodes","i","childNodes","child","Element","patternNode","source","patternTransform"],"mappings":";;;;AAMA;AACA;AACA;AACA;AACO,SAASA,cAAcA,CAACC,GAAa,EAAE;AAC5C,EAAA,IAAIC,QAAQ,GAAG,CAAC,SAAS,CAAC;AACxBC,IAAAA,MAAM,GAAGC,gBAAgB,CAACH,GAAG,EAAEC,QAAQ,CAAC;IACxCG,EAAE;AACFC,IAAAA,CAAC,GAAG,CAAC;EACP,MAAMC,WAA2C,GAAG,EAAE;EACtDD,CAAC,GAAGH,MAAM,CAACK,MAAM;EACjB,OAAOF,CAAC,EAAE,EAAE;AACVD,IAAAA,EAAE,GAAGF,MAAM,CAACG,CAAC,CAAC;AACd,IAAA,MAAMG,EAAE,GAAGJ,EAAE,CAACK,YAAY,CAAC,IAAI,CAAC;AAChC,IAAA,IAAID,EAAE,EAAE;AACN,MAAA,IAAIE,KAAK,GAAGC,YAAY,CAACX,GAAG,EAAEI,EAAE,CAAC;AACjC,MAAA,IAAIM,KAAK,EAAE;AACTJ,QAAAA,WAAW,CAACE,EAAE,CAAC,GAAGE,KAAK;AACzB;AACF;AACF;AACA,EAAA,OAAOJ,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASK,YAAYA,CAACX,GAAa,EAAEI,EAAW,EAAE;AAChD,EAAA,IAAIQ,YAAY,GAAG,UAAUC,IAAa,EAAEC,eAAuB,EAAE;AACnE,IAAA,IAAID,IAAI,CAACE,QAAQ,KAAK,CAAC,EAAE;AAEzB,IAAA,IAAIC,YAAY,GACdH,IAAI,CAACJ,YAAY,CACfI,IAAI,CAACI,QAAQ,KAAK,SAAS,GAAG,kBAAkB,GAAG,WACrD,CAAC,IAAI,EAAE;AACT,IAAA,IAAIC,eAAe,GAAGC,uBAAuB,CAACH,YAAY,CAAC;AAE3DF,IAAAA,eAAe,GAAGM,yBAAyB,CACzCN,eAAe,EACfI,eACF,CAAC;;AAED;AACJ;AACA;AACA;IACI,MAAMG,eAAe,GAAIR,IAAa,IAAK;AACzC,MAAA,KAAK,IAAIS,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGT,IAAI,CAACU,UAAU,CAAChB,MAAM,EAAEe,CAAC,EAAE,EAAE;AAC/C,QAAA,MAAME,KAAK,GAAEX,IAAI,CAACU,UAAU,CAACD,CAAC,CAAC;QAC/B,IAAIE,KAAK,YAAYC,OAAO,EAC5Bb,YAAY,CAACY,KAAK,EAAEV,eAAe,CAAC;AACtC;KACD;AACD;AACA,IAAA,IAAID,IAAI,CAACI,QAAQ,IAAI,QAAQ,EAAE;MAC7BI,eAAe,CAACR,IAAI,CAAC;AACvB,KAAC,MAAM,IAAIA,IAAI,CAACI,QAAQ,KAAK,GAAG,IAAIJ,IAAI,CAACI,QAAQ,KAAK,SAAS,EAAE;MAC/DI,eAAe,CAACR,IAAI,CAAC;AACvB,KAAC,MAAM,IAAIA,IAAI,CAACI,QAAQ,KAAK,UAAU,EAAE,CAGxC,MAAM,IAAIJ,IAAI,CAACI,QAAQ,KAAK,OAAO,EAAE;AACpCS,MAAAA,WAAW,GAAG;AACZC,QAAAA,MAAM,EAAEd,IAAI,CAACJ,YAAY,CAAC,YAAY,CAAC;AACvCmB,QAAAA,gBAAgB,EAAEd;OACnB;AACH;GACD;AACD;AACA,EAAA,IAAIY,WAAW;IAEbZ,eAAuB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7CF,EAAAA,YAAY,CAACR,EAAE,EAAEU,eAAe,CAAC;AACjC,EAAA,OAAOY,WAAW;AACpB;;;;"}