{"version":3,"file":"index.cjs.development.cjs","sources":["../src/index.ts"],"sourcesContent":["/**\n * Created by user on 2018/4/15/015.\n */\nimport { IDictRow, stringifyLine } from '@novel-segment/loaders/segment/index';\nimport { textList as text_list } from '@lazy-cjk/zh-table-list/list';\nimport { AbstractTableDictCore, IDICT, IDICT2, IOptions } from '@novel-segment/table-core-abstract';\nimport { IWord } from '@novel-segment/types';\n\nexport type ITableDictRow = {\n\tp: number,\n\tf: number,\n\ts?: boolean,\n};\n\nexport { IDICT, IDICT2, IOptions }\n\nexport function notNum<T>(val: T): val is Exclude<T, number>\n{\n\treturn typeof val !== 'number' || Number.isNaN(val)\n}\n\n/**\n * @todo 掛接其他 dict\n */\nexport class TableDict extends AbstractTableDictCore<ITableDictRow>\n{\n\t//public override type: string;\n\n\tdeclare TABLE: IDICT<ITableDictRow>;\n\tdeclare TABLE2: IDICT2<ITableDictRow>;\n\n\t//override options: IOptions;\n\n\toverride exists(data: IWord | IDictRow | string): ITableDictRow\n\t{\n\t\treturn super.exists(data)\n\t}\n\n\tprotected __handleInput(data: IWord | IDictRow | string)\n\t{\n\t\tlet w: string, p: number, f: number;\n\t\tlet plus: Array<string | number>;\n\n\t\tif (typeof data === 'string')\n\t\t{\n\t\t\tw = data;\n\t\t}\n\t\telse if (Array.isArray(data))\n\t\t{\n\t\t\t[w, p, f, ...plus] = data;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t({ w, p, f } = data);\n\t\t}\n\n\t\tif (typeof w !== 'string' || w === '')\n\t\t{\n\t\t\tthrow new TypeError(JSON.stringify(data));\n\t\t}\n\n\t\tp = notNum(p) ? 0 : p;\n\t\tf = notNum(f) ? 0 : f;\n\n\t\treturn {\n\t\t\tdata: {\n\t\t\t\tw, p, f,\n\t\t\t},\n\t\t\tplus,\n\t\t}\n\t}\n\n\tadd(data: IWord | IDictRow | string, skipExists?: boolean)\n\t{\n\t\tlet w: string, p: number, f: number;\n\t\tlet plus: Array<string | number>;\n\n\t\t{\n\t\t\tlet ret = this.__handleInput(data);\n\n\t\t\t({ w, p, f } = ret.data);\n\t\t\tplus = ret.plus;\n\t\t}\n\n\t\tif (skipExists && this.exists(w))\n\t\t{\n\t\t\treturn this;\n\t\t}\n\n\t\tif (plus?.length)\n\t\t{\n\t\t\t// @todo do something\n\t\t}\n\n\t\tthis._add({ w, p, f, s: true });\n\n\t\tlet self = this;\n\n\t\t/**\n\t\t * @todo 需要更聰明的作法 目前的做法實在太蠢\n\t\t * @BUG 在不明原因下 似乎不會正確的添加每個項目 如果遇到這種情形請手動添加簡繁項目\n\t\t */\n\t\tif (1 && this.options.autoCjk)\n\t\t{\n\t\t\tlet wa = text_list(w);\n\n\t\t\twa.forEach(function (w2)\n\t\t\t{\n\t\t\t\tif (w2 !== w && !self.exists(w2))\n\t\t\t\t{\n\t\t\t\t\tself._add({ w: w2, p, f });\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/*\n\t\t\tlet w2: string;\n\t\t\tw2 = CjkConv.zh2jp(w);\n\n\t\t\tif (w2 != w && !this.exists(w2))\n\t\t\t{\n\t\t\t\tthis._add({w: w2, p, f});\n\t\t\t\t//console.log(w2);\n\t\t\t}\n\n\t\t\tw2 = CjkConv.cjk2zht(w);\n\n\t\t\tif (w2 !== w && !this.exists(w2))\n\t\t\t{\n\t\t\t\tthis._add({w: w2, p, f});\n\t\t\t\t//console.log(w2);\n\t\t\t}\n\n\t\t\tw2 = CjkConv.cjk2zhs(w);\n\n\t\t\tif (w2 !== w && !this.exists(w2))\n\t\t\t{\n\t\t\t\tthis._add({w: w2, p, f});\n\t\t\t\t//console.log(w2);\n\t\t\t}\n\t\t\t*/\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprotected _add({ w, p, f, s }: {\n\t\tw: string,\n\t\tp: number,\n\t\tf: number,\n\t\ts?: boolean,\n\t})\n\t{\n\t\tlet len = w.length;\n\n\t\tthis.TABLE[w] = {\n\t\t\tp,\n\t\t\tf,\n\t\t\ts,\n\t\t} as ITableDictRow;\n\n\t\tif (!this.TABLE2[len]) this.TABLE2[len] = {};\n\n\t\tthis.TABLE2[len][w] = this.TABLE[w];\n\t}\n\n\toverride remove(target: IWord | IDictRow | string)\n\t{\n\t\tlet { data, plus } = this.__handleInput(target);\n\n\t\tthis._remove(data);\n\n\t\treturn this\n\t}\n\n\tprotected override _remove({ w, p, f, s }: IWord)\n\t{\n\t\tlet len = w.length;\n\n\t\tdelete this.TABLE[w];\n\t\tif (this.TABLE2[len])\n\t\t{\n\t\t\tdelete this.TABLE2[len][w]\n\t\t}\n\n\t\treturn this\n\t}\n\n\t/**\n\t * 將目前的 表格 匯出\n\t */\n\toverride stringify(LF = \"\\n\")\n\t{\n\t\tlet self = this;\n\n\t\treturn Object.entries(self.TABLE)\n\t\t\t.reduce(function (a, [w, { p, f }])\n\t\t\t{\n\t\t\t\tlet line = stringifyLine([w, p, f]);\n\n\t\t\t\ta.push(line);\n\n\t\t\t\treturn a\n\t\t\t}, [])\n\t\t\t.join(typeof LF === 'string' ? LF : \"\\n\")\n\t\t\t;\n\t}\n}\n\nexport default TableDict\n"],"names":["notNum","val","TableDict","AbstractTableDictCore","data","exists","w","Array","isArray","TypeError","JSON","stringify","p","f","plus","skipExists","ret","__handleInput","_add","options","autoCjk","wa","forEach","w2","self"],"mappings":";;;;;;;;AAGA,SAAAA,OAAAC,GAAA,EAAA;;;AAaA;;AAGA;AAwBaC,MAAAA,SAAS,SAAAC,uCAAA,CAAA;SAGpBC,IAAA,EAAA;IACK,OAAAC,KAAAA,CAAAA,MAAA,CAAAD,IAAA,CAAA,CAAA;AAJL,GAAA;;;;AAWC,IAAA,IAAA,OAAAA,IAAA,KAAA,QAAA,EAAA;AAWAE,MAAAA,CAAA,GAAAF,IAAA,CAAA;AAEC,KAAA,UAEDG,KAAA,CAAAC,OAAA,CAAAJ,IAAA,CAAA,EAAA;;KAQA,MAAA;;;;;;AAIA,KAAA;gBAGG,KAAA,QAAA,IAAAE,CAAA,KAAA,EAAA,EAAA;AAEH,MAAA,MAAA,IAAAG,SAAA,CAAAC,IAAA,CAAAC,SAAA,CAAAP,IAAA,CAAA,CAAA,CAAA;;cAMD,CAACQ,CAAA,CAAA,GAAA,CAAA,GAAAA,CAAA,CAAA;AAED,IAAA,CAAA,GAAAZ,MAAA,CAAAa,CAAA,CAAA,GAAA,CAAA,GAAAA,CAAA,CAAA;AAIA,IAAA,OAAA;;;;;;AAQCC,MAAAA,IAAAA;AAEC,KAAA,CAAA;;MAIDV,IAAA,EAAAW,UAAG,EAAA;AA8BJ,IAAA,IAAAT,CAAA,EAAAM,CAAA,EAAAC,CAAA,CAAA;;UAUAG,GAAA,GAAA,IAAA,CAAAC,aAAA,CAAAb,IAAA,CAAA,CAAA;AAEA,MAAA,CAAA;QAAAE,CAAA;QAAAM,CAAA;AAAAC,QAAAA,CAAAA;OAAAG,GAAAA,GAAA,CAAAZ,IAAA,EAAA;;QAImBW,UAAA,IAAA,IAAAV,CAAAA,MAAA,CAAAC,CAAA,CAAA,EAAA;AAEI,MAAA,OAAsB,IAAA,CAAA;AAE7C,KAAA;AASA,IAAA,IAAA,CAAAY,IAAA,CAAA;MAAAZ,CAAA;MAAAM,CAAO;MAAAC;OAAI,EAAA,IAAA;AAAA,KAAA,CAAA,CAAA;YACX,GAAA,IAAA,CAAA;;;;;QAaA,IAAA,CAAAM,OAAA,CAAAC,OAAA,EAAA;+BAOgB,CAAA;MAEhBC,EAAA,CAAAC,OAAA,CAAA,UAAAC,EAAA,EAAA;QAGE,IAAAA,EAAA,KAAQjB,CAAA,IAAgB,CAAAkB,IAAA,CAAAnB,MAAA,CAAAkB,EAAA,CAAA,EAAA;AAIxBC,UAAAA,IAAA,CAAAN,IAAA,CAAA;AAAAZ,YAAAA,CAAA,EAAAiB,EAAA;YAAAX,CAAA;AAAAC,YAAAA,CAAAA;AAAA,WAAA,CAAA,CAAA;AAEA,SAAA;;;AAKJ,IAAA,OAAA,IAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}