@novel-segment/table-dict
Version:
1 lines • 5.08 kB
Source Map (JSON)
{"version":3,"file":"index.umd.production.min.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","this","__handleInput","_add","options","autoCjk","forEach","w2","self"],"mappings":";;;;EAGA,SAAAA,OAAAC;;;EAwCaC,MAAAA,kBAASC,EAAAA;WAGpBC;MACK,OAAAC,MAAAA,OAAAD;AAJL;;;UAWC,mBAAAA,IAWAE,IAAAF,IAIAG,MAAAC,QAAAJ;MAeG,wBAAA,OAAAE,GAEH,MAAA,IAAAG,UAAAC,KAAAC,UAAAP;MAYD,kBANCQ,KAAA,IAAAA,GAEDC,IAAAb,OAAAa,KAAA,IAAAA,GAIA;;;;;;QAQCC;;;QAMAV,GAAAW;MA8BD,IAAAT,GAAAM,GAAAC;;YAUAG,IAAAC,KAAAC,cAAAd;UAEAE,MAAAM,MAAAC,QAAAG,EAAAZ;;UAImBW,KAAAE,KAAAZ,OAAAC,IAEI,OAAsBW;MAW7CA,KAAAE,KAAA;QAAAb;QAAAM;QAAOC;YAAI;;cACXI;MAoCF,OAvBEA,KAAAG,QAAAC,yBASAC,SAAA,SAAAC;QAGEA,MAAQjB,KAAgBkB,EAAAnB,OAAAkB,MAIxBC,EAAAL,KAAA;UAAAb,GAAAiB;UAAAX;UAAAC;;WAOJI;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}