{"version":3,"file":"trie.mjs","sources":["../../../../../../packages/components/emoji/src/trie.ts"],"sourcesContent":["// https://github.com/buddys/qq-wechat-emotion-parser/blob/master/src/trie.js\n\nimport { emoticonListKeys, emoticonListMap } from './helper'\n\nexport class Trie {\n  words: number\n  empty: number\n  index: number\n  children: any\n\n  constructor() {\n    this.words = 0\n    this.empty = 1\n    this.index = 0\n    this.children = {}\n  }\n\n  insert(str: string, pos: number, idx: number) {\n    if (str.length === 0) {\n      return\n    }\n    if (pos === undefined) {\n      pos = 0\n    }\n    if (pos === str.length) {\n      this.index = idx\n      return\n    }\n    const k = str[pos]\n    if (this.children[k] === undefined) {\n      this.children[k] = new Trie()\n      this.empty = 0\n      this.children[k].words = this.words + 1\n    }\n    const child = this.children[k]\n    child.insert(str, pos + 1, idx)\n  }\n\n  build(arr: string[]) {\n    const len = arr.length\n    for (let i = 0; i < len; i++) {\n      this.insert(arr[i], 0, i)\n    }\n  }\n\n  searchOne(str: string, pos: number) {\n    if (pos === undefined) {\n      pos = 0\n    }\n    const result: any = {}\n    if (str.length === 0) return result\n    result.arr = []\n    const k = str[pos]\n    const child = this.children[k]\n    if (child !== undefined && pos < str.length) {\n      return child.searchOne(str, pos + 1)\n    }\n    if (child === undefined && this.empty === 0) return result\n    if (this.empty == 1) {\n      result.arr[0] = pos - this.words\n      result.arr[1] = this.index\n      result.words = this.words\n      return result\n    }\n    return result\n  }\n\n  search(str: string) {\n    if (this.empty == 1) return []\n    const len = str.length\n    const searchResult = []\n    let tmp\n    for (let i = 0; i < len - 1; i++) {\n      tmp = this.searchOne(str, i)\n      if (typeof tmp.arr !== 'undefined' && tmp.arr.length > 0) {\n        searchResult.push(tmp.arr)\n        i = i + tmp.words - 1\n      }\n    }\n    return searchResult\n  }\n}\n\nconst trie = new Trie()\ntrie.build(emoticonListKeys)\n\nfunction splice(str: string, index: number, count: number, add: string) {\n  return str.slice(0, index) + add + str.slice(index + count)\n}\n\n/**\n * 文案转 -> img\n * eg: /::) -> <img src=\"https://res.wx.qq.com/mpres/htmledition/images/icon/emotion/0.gif\" alt=\"/::)\">\n * eg: [微笑] -> <img src=\"https://res.wx.qq.com/mpres/htmledition/images/icon/emotion/0.gif\" alt=\"[微笑]\">\n * @param text\n * @returns\n */\nexport const emotionParser = (text: string = '') => {\n  const indices = trie.search(text)\n  indices.reverse().forEach((idx: number[]) => {\n    const pos = idx[0],\n      emotion = emoticonListKeys[idx[1]],\n      img = `<img src=\"${emoticonListMap[emotion]}\" alt=\"${emotion}\">`\n    text = splice(text, pos, emotion.length, img)\n  })\n  return text\n}\n"],"names":[],"mappings":"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"}