diff --git a/JavyInputAppendix.js b/JavyInputAppendix.js index 7ebd094..d59de3c 100644 --- a/JavyInputAppendix.js +++ b/JavyInputAppendix.js @@ -20,19 +20,19 @@ */ function base64ToUint8Array(base64) { - // 将Base64字符串转换为二进制字符串 - const binaryString = _atob(base64); - // 将二进制字符串转换为Uint8Array - const len = binaryString.length; - const bytes = new Uint8Array(len); - for (let i = 0; i < len; i++) { - bytes[i] = binaryString.charCodeAt(i); - } - return bytes; + // 将Base64字符串转换为二进制字符串 + const binaryString = _atob(base64); + // 将二进制字符串转换为Uint8Array + const len = binaryString.length; + const bytes = new Uint8Array(len); + for (let i = 0; i < len; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes; } function uint8ArrayToBase64(uint8Array) { - return _btoa(String.fromCharCode.apply(null, uint8Array)); + return _btoa(String.fromCharCode.apply(null, uint8Array)); } // Read input from stdin @@ -44,53 +44,53 @@ JavywriteOutput(Javyresult); // The main function. function index(input) { - if(input === "ERROR"){ + if (input === "ERROR") { return "INCORRECT JSON"; } - if(input.method == "NEXT"){ - if(input.inputType == "TEXT"){ - let Abra = new Abracadabra(input.inputType,input.outputType); - Abra.Input_Next(input.input,input.mode,input.key,input.q,input.r); - let Output = Abra.Output(); - if(input.outputType == "UINT8"){ - Output = uint8ArrayToBase64(Output); - } - return Output; - }else if(input.inputType == "UINT8"){ - let Abra = new Abracadabra(input.inputType,input.outputType); - let UINT8In = base64ToUint8Array(input.input); - Abra.Input_Next(UINT8In,input.mode,input.key,input.q,input.r); - let Output = Abra.Output(); - if(input.outputType == "UINT8"){ - Output = uint8ArrayToBase64(Output); - } - return Output; - }else{ - return "ERROR inputType"; + if (input.method == "NEXT") { + if (input.inputType == "TEXT") { + let Abra = new Abracadabra(input.inputType, input.outputType); + Abra.Input_Next(input.input, input.mode, input.key, input.q, input.r); + let Output = Abra.Output(); + if (input.outputType == "UINT8") { + Output = uint8ArrayToBase64(Output); + } + return Output; + } else if (input.inputType == "UINT8") { + let Abra = new Abracadabra(input.inputType, input.outputType); + let UINT8In = base64ToUint8Array(input.input); + Abra.Input_Next(UINT8In, input.mode, input.key, input.q, input.r); + let Output = Abra.Output(); + if (input.outputType == "UINT8") { + Output = uint8ArrayToBase64(Output); + } + return Output; + } else { + return "ERROR inputType"; } - }else if(input.method == "OLD"){ - if(input.inputType == "TEXT"){ - let Abra = new Abracadabra(input.inputType,input.outputType); - Abra.Input(input.input,input.mode,input.key,input.q); - let Output = Abra.Output(); - if(input.outputType == "UINT8"){ - Output = uint8ArrayToBase64(Output); - } - return Output; - }else if(input.inputType == "UINT8"){ - let Abra = new Abracadabra(input.inputType,input.outputType); - let UINT8In = base64ToUint8Array(input.input); - Abra.Input(UINT8In,input.mode,input.key,input.q); - let Output = Abra.Output(); - if(input.outputType == "UINT8"){ - Output = uint8ArrayToBase64(Output); - } - return Output; - }else{ - return "ERROR inputType"; + } else if (input.method == "OLD") { + if (input.inputType == "TEXT") { + let Abra = new Abracadabra(input.inputType, input.outputType); + Abra.Input(input.input, input.mode, input.key, input.q); + let Output = Abra.Output(); + if (input.outputType == "UINT8") { + Output = uint8ArrayToBase64(Output); + } + return Output; + } else if (input.inputType == "UINT8") { + let Abra = new Abracadabra(input.inputType, input.outputType); + let UINT8In = base64ToUint8Array(input.input); + Abra.Input(UINT8In, input.mode, input.key, input.q); + let Output = Abra.Output(); + if (input.outputType == "UINT8") { + Output = uint8ArrayToBase64(Output); + } + return Output; + } else { + return "ERROR inputType"; } - }else{ + } else { return "ERROR method"; } } @@ -122,12 +122,12 @@ function JavyreadInput() { context.bufferOffset += chunk.length; return context; }, - { bufferOffset: 0, finalBuffer: new Uint8Array(totalBytes) }, + { bufferOffset: 0, finalBuffer: new Uint8Array(totalBytes) } ); const InputDecoded = new TextDecoder().decode(finalBuffer); try { - return JSON.parse(InputDecoded);; + return JSON.parse(InputDecoded); } catch { return "ERROR"; } @@ -140,4 +140,4 @@ function JavywriteOutput(output) { // Stdout file descriptor const fd = 1; Javy.IO.writeSync(fd, buffer); -} \ No newline at end of file +} diff --git a/USAGE.md b/USAGE.md index 314e49a..1b7466b 100644 --- a/USAGE.md +++ b/USAGE.md @@ -126,5 +126,4 @@ Demo 页使用 Vue 构建,你可以随时下载源码,在你喜欢的地方 ### 通顺 如果嫌生成的句子过于生硬,不妨多次尝试生成(多点几下加密),选择一个看起来最好的密文。 -只要密钥和原文相同,生成出的所有密文均可以正常解密。 - +只要密钥和原文相同,生成出的所有密文均可以正常解密。 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 09eba1a..aef6c8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "abracadabra-cn", - "version": "3.0.9", + "version": "3.0.11", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "abracadabra-cn", - "version": "3.0.9", + "version": "3.0.11", "dependencies": { "crypto-js": "^4.2.0", "js-base64": "^3.7.7", diff --git a/package.json b/package.json index 285bc2d..d9685d5 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "abracadabra-cn", "description": "Use Chinese to Encode Everything", "private": false, - "version": "3.0.10", + "version": "3.0.11", "main": "./dist/abracadabra-cn.js", "type": "module", "scripts": { diff --git a/src/javascript/main.js b/src/javascript/main.js index aa8bf16..2bb26ef 100644 --- a/src/javascript/main.js +++ b/src/javascript/main.js @@ -172,7 +172,7 @@ export class Abracadabra { } } } - /** + /** * 输入数据以处理,请注意指定的类型 * * **模式定义** @@ -188,38 +188,36 @@ export class Abracadabra { * @param{bool}q 指定是否为密文添加标点符号,默认 true/添加; * @param{int}r 密文算法的随机程度,越大随机性越强,默认 50,最大100,超过100将会出错; */ - Input_Next(input, mode, key = "ABRACADABRA", q = true , r = 50) { + Input_Next(input, mode, key = "ABRACADABRA", q = true, r = 50) { if (this.#input == Abracadabra.UINT8) { //如果指定输入类型是UINT8 if (Object.prototype.toString.call(input) != "[object Uint8Array]") { throw "Unexpected Input Type"; } - if(mode == Abracadabra.ENCRYPT){ - let Nextinput = new Object(); - Nextinput.output = input; - this.#res = Util_Next.enMap(Nextinput, key, q, r); - }else if(mode == Abracadabra.DECRYPT){ - let Nextinput = new Object(); - Nextinput.output = input; - this.#res = Util_Next.deMap(Nextinput, key); - } - return 0; - + if (mode == Abracadabra.ENCRYPT) { + let Nextinput = new Object(); + Nextinput.output = input; + this.#res = Util_Next.enMap(Nextinput, key, q, r); + } else if (mode == Abracadabra.DECRYPT) { + let Nextinput = new Object(); + Nextinput.output = input; + this.#res = Util_Next.deMap(Nextinput, key); + } + return 0; } else if (this.#input == Abracadabra.TEXT) { //如果指定输入类型是TEXT if (Object.prototype.toString.call(input) != "[object String]") { throw "Unexpected Input Type"; } - let Nextinput = new Object(); - Nextinput.output = Util.stringToUint8Array(input); - if(mode == Abracadabra.ENCRYPT){ - this.#res = Util_Next.enMap(Nextinput, key, q, r); - }else if(mode == Abracadabra.DECRYPT){ - this.#res = Util_Next.deMap(Nextinput, key); - } - return 0; + let Nextinput = new Object(); + Nextinput.output = Util.stringToUint8Array(input); + if (mode == Abracadabra.ENCRYPT) { + this.#res = Util_Next.enMap(Nextinput, key, q, r); + } else if (mode == Abracadabra.DECRYPT) { + this.#res = Util_Next.deMap(Nextinput, key); + } + return 0; } return 0; } - } diff --git a/src/javascript/mapping_next.json b/src/javascript/mapping_next.json index 278eb51..71b752a 100644 --- a/src/javascript/mapping_next.json +++ b/src/javascript/mapping_next.json @@ -146,7 +146,7 @@ "=": "言" } }, - "MV": ["欲", "应", "可", "能", "将", "请", "想","必", "当"], + "MV": ["欲", "应", "可", "能", "将", "请", "想", "必", "当"], "A": { "alphabet": { "a": "莹", @@ -296,30 +296,30 @@ "zhe": ["者"], "ye": ["也"], "for": ["为"], - "ba":["把"], - "le":["了"], - "er":["而"], - "this":["此","斯"], - "still":["仍"], - "with":["与","同"], - "also":["亦","也"], - "is":["是","乃"], - "not":["未","莫"], - "or":["或"], - "more":["更"], - "make":["使","将","让"], + "ba": ["把"], + "le": ["了"], + "er": ["而"], + "this": ["此", "斯"], + "still": ["仍"], + "with": ["与", "同"], + "also": ["亦", "也"], + "is": ["是", "乃"], + "not": ["未", "莫"], + "or": ["或"], + "more": ["更"], + "make": ["使", "将", "让"], "and": ["与", "同"], "anti": ["非", "不"], - "why": ["为何", "奈何","何哉"], + "why": ["为何", "奈何", "何哉"], "but": ["但", "却", "则", "而", "况", "且"], "like": ["似", "如", "若"], - "if":["若","倘"], + "if": ["若", "倘"], "int": ["哉", "呼", "噫"], - "self":["自"], - "by":["以","于"] + "self": ["自"], + "by": ["以", "于"] }, - "Sentences":{ - "Begin":[ + "Sentences": { + "Begin": [ "1/非/N/ye", "1/N/曰", "1/若夫/N", @@ -353,6 +353,7 @@ "5/今/N/乃/A/N/A/N", "5/A/N/V/A/N", "5/夫/N/、/N/不/MV/AD/V/N", + "5/不/有/A/N/,/何/V/A/N/Q", "6/以/N/V/,/like/V/N/V/N", "6/A/N/zhi/N/,/V/zhi/以/V/其/N", "6/A/N/V/于/N/而/V/N", @@ -384,7 +385,7 @@ "9/此/N/有/A/N/A/N/,/A/N/A/N/P", "9/是/N/ye/,/N/A/N/A/,/N/A/N/A/P" ], - "Main":[ + "Main": [ "1/非/N/ye", "1/anti/MV/V/ye", "2/N/make/N/zhi", @@ -401,12 +402,14 @@ "4/N/有/MV/V/,/N/有/AD/然/P", "4/N/非/V/而/V/之/者/,/孰/MV/无/N/P", "4/A/N/常有/,/而/A/N/不常有/P", + "4/不/以/N/V/,/不/以/N/V/P", "5/今/V/N/以/V/A/N", "5/N/乃/V/V/N/zhi/N", "5/本/MV/V/A/,/anti/V/N/N", "5/今/N/乃/A/N/A/N", "5/每/有/V/N/,/便/AD/然/V/N/P", "5/N/V/而/A/N/V/也", + "5/不/有/A/N/,/何/V/A/N/Q", "6/以/N/V/,/like/V/N/V/N", "6/N/V/,/V/N/V/N", "6/虽/V/V/A/A/,/A/A/不/同/P", @@ -416,6 +419,7 @@ "6/V/A/N/,/V/A/N", "6/V/MV/with/其/N/,/而/V/MV/V/以/N/者/,/N/也/P", "6/A/N/必/有/A/N/V/之者/、/予/可/无/N/也/P", + "6/将/有/V/,/则/V/A/N/以/V/N/P", "7/N/V/以/N/V/,/V/不/V/N", "7/N/N/V/N/,/A/于/N/N", "7/MV/AD/V/A/N/,/but/V/V/不/A", @@ -425,6 +429,7 @@ "7/A/N/之/N/不在/N/,/在乎/A/N/之/N/也/P", "7/A/N/之/N/,/V/之/N/而/V/之/N/也/P", "7/是故/A/N/不必不如/N/,/N/不必/A/于/A/N/P", + "7/有/A/N/、/A/N/、/A/N/之/N/P", "8/N/anti/MV/V/N/,/still/继/N/V/,/why/,/and/N/而/anti/V/N/ye/P", "8/是/故/无/A/无/A/,/无/A/无/A/,/N/之/所/V/、/N/之/所/V/ye/P", "8/V/N/A/A/,/V/N/A/A", @@ -437,15 +442,15 @@ "8/N/V/于/A/N/,/而/N/V/于/A/N", "8/A/N/MV/A/N/之/A/,/V/N/中/之/A", "8/N/V/于/A/N/之上/,/AD/V/于/A/N/之间/P", + "8/使/其/A/N/AD/V/,/A/N/AD/V/P", "9/N/MV/V/N/V/V/,/but/N/N/AD/V", "9/A/N/V/zhi/而不/V/zhi/、亦/make/A/N/er/复/V/A/N/ye/P", "9/以/N/,/当/V/A/N/,/非/N/V/N/所/MV/AD/V/P", "9/此/N/有/A/N/A/N/,/A/N/A/N/P", "9/是/N/ye/,/N/A/N/A/,/N/A/N/A", "9/V/A/N/,/N/A/N/A/,/乃/AD/V" - ], - "End":[ + "End": [ "1/非/N/ye", "1/anti/MV/V/ye", "2/唯/N/V/zhi", @@ -464,12 +469,14 @@ "4/V/N/以/V/N", "4/N/无/N/,/无以/V/N", "4/噫/,/A/N/ye/,/N/谁/与/V/Q", + "4/不/以/N/V/,/不/以/N/V/P", "5/请/V/N/zhi/N/中/,/是/N/zhi/N/P", "5/今/V/N/以/V/A/N", "5/N/乃/V/V/N/zhi/N", "5/本/MV/V/A/,/anti/V/N/N", "5/今/N/乃/A/N/A/N", "5/N/V/而/A/N/V/也", + "5/不/有/A/N/,/何/V/A/N/Q", "6/以/N/V/,/like/V/N/V/N", "6/A/zhi/V/N/,/亦/like/今/zhi/V/N/,/A/夫/P", "6/N/V/,/V/N/V/N", @@ -477,6 +484,7 @@ "6/V/MV/with/其/N/,/而/V/MV/V/以/N/者/,/N/也/P", "6/A/N/必/有/A/N/V/之者/、/予/可/无/N/也/P", "6/虽/V/V/A/A/,/A/A/不/同/P", + "6/将/有/V/,/则/V/A/N/以/V/N/P", "7/N/V/以/N/V/,/V/不/V/N", "7/N/N/V/N/,/A/于/N/N", "7/MV/AD/V/A/N/,/but/V/V/不/A", @@ -484,6 +492,7 @@ "7/A/N/之/N/不在/N/,/在乎/A/N/之/N/也/P", "7/A/N/之/N/,/V/之/N/而/V/之/N/也/P", "7/是故/A/N/不必不如/N/,/N/不必/A/于/A/N/P", + "7/有/A/N/、/A/N/、/A/N/之/N/P", "8/虽/N/A/N/A/,/所/以/V/N/,其/N/A/ye/P", "8/何必/V/N/V/N/,/V/N/zhi/N/N/哉/P", "8/N/anti/MV/V/N/,/still/继/N/V/,/why/,/and/N/而/anti/V/N/ye/P", @@ -493,6 +502,7 @@ "8/虽/无/N/N/zhi/V/,/亦/V/以/AD/V/A/N/P", "8/故/V/A/N/者/,/当/V/A/N/之/A/N/P", "8/N/V/于/A/N/之上/,/AD/V/于/A/N/之间/P", + "8/使/其/A/N/AD/V/,/A/N/AD/V/P", "9/A/N/V/zhi/而不/V/zhi/、亦/make/A/N/er/复/V/A/N/ye/P", "9/N/MV/V/N/V/V/,/but/N/N/AD/V", "9/以/N/,/当/V/A/N/,/非/N/V/N/所/MV/AD/V/P", @@ -514,6 +524,5 @@ //Q 问号 //依需要添加在句式末尾,代替原有逗号。 - // by... -> 虚词 -// 其他->不做修改/替换 \ No newline at end of file +// 其他->不做修改/替换 diff --git a/src/javascript/utils.js b/src/javascript/utils.js index f6bfd4c..ec0b445 100644 --- a/src/javascript/utils.js +++ b/src/javascript/utils.js @@ -542,22 +542,22 @@ function CheckLuhnBit(Data) { } } -function RemovePadding(Base64String){ +function RemovePadding(Base64String) { let PaddingCount = 0; - for(let i = Base64String.length - 1; i >= Base64String.length - 4 ;i--){ - if(Base64String[i] == "="){ - PaddingCount ++; + for (let i = Base64String.length - 1; i >= Base64String.length - 4; i--) { + if (Base64String[i] == "=") { + PaddingCount++; } } - return Base64String.slice(0,Base64String.length - PaddingCount); + return Base64String.slice(0, Base64String.length - PaddingCount); } -function AddPadding(Base64String){ - if(Base64String.length % 4 == 3 ){ +function AddPadding(Base64String) { + if (Base64String.length % 4 == 3) { return Base64String + "="; - }else if(Base64String.length % 4 == 2 ){ + } else if (Base64String.length % 4 == 2) { return Base64String + "=="; - }else{ + } else { return Base64String; } } @@ -586,7 +586,7 @@ function setCharOnIndex(string, index, char) { } function GetRandomIndex(length) { - let MT = new MersenneTwister(Math.floor(Math.random() * 1000000000)) + let MT = new MersenneTwister(Math.floor(Math.random() * 1000000000)); let Rand = Math.floor(MT.random() * length); return Rand; diff --git a/src/javascript/utils_next.js b/src/javascript/utils_next.js index ea9caeb..2443455 100644 --- a/src/javascript/utils_next.js +++ b/src/javascript/utils_next.js @@ -33,7 +33,8 @@ import * as Unishox from "./unishox2.js"; import "pako"; import MersenneTwister from "mersenne-twister"; -const Map = '{\"Actual\":{\"N\":{\"alphabet\":{\"a\":\"人\",\"b\":\"镜\",\"c\":\"鹏\",\"d\":\"曲\",\"e\":\"霞\",\"f\":\"绸\",\"g\":\"裳\",\"h\":\"路\",\"i\":\"岩\",\"j\":\"叶\",\"k\":\"鲤\",\"l\":\"月\",\"m\":\"雪\",\"n\":\"冰\",\"o\":\"局\",\"p\":\"恋\",\"q\":\"褔\",\"r\":\"铃\",\"s\":\"琴\",\"t\":\"家\",\"u\":\"天\",\"v\":\"韵\",\"w\":\"书\",\"x\":\"莺\",\"y\":\"璃\",\"z\":\"雨\",\"A\":\"文\",\"B\":\"涧\",\"C\":\"水\",\"D\":\"花\",\"E\":\"风\",\"F\":\"棋\",\"G\":\"楼\",\"H\":\"鹤\",\"I\":\"鸢\",\"J\":\"灯\",\"K\":\"雁\",\"L\":\"星\",\"M\":\"声\",\"N\":\"树\",\"O\":\"茶\",\"P\":\"竹\",\"Q\":\"兰\",\"R\":\"苗\",\"S\":\"心\",\"T\":\"语\",\"U\":\"礼\",\"V\":\"梦\",\"W\":\"庭\",\"X\":\"木\",\"Y\":\"驿\",\"Z\":\"火\"},\"numbersymbol\":{\"0\":\"森\",\"1\":\"夏\",\"2\":\"光\",\"3\":\"林\",\"4\":\"物\",\"5\":\"云\",\"6\":\"夜\",\"7\":\"城\",\"8\":\"春\",\"9\":\"空\",\"+\":\"雀\",\"/\":\"鹂\",\"=\":\"鸳\"}},\"V\":{\"alphabet\":{\"a\":\"关\",\"b\":\"赴\",\"c\":\"呈\",\"d\":\"添\",\"e\":\"停\",\"f\":\"成\",\"g\":\"走\",\"h\":\"达\",\"i\":\"行\",\"j\":\"称\",\"k\":\"见\",\"l\":\"学\",\"m\":\"听\",\"n\":\"买\",\"o\":\"作\",\"p\":\"弹\",\"q\":\"写\",\"r\":\"定\",\"s\":\"谈\",\"t\":\"动\",\"u\":\"旅\",\"v\":\"返\",\"w\":\"度\",\"x\":\"开\",\"y\":\"筑\",\"z\":\"选\",\"A\":\"流\",\"B\":\"指\",\"C\":\"换\",\"D\":\"探\",\"E\":\"放\",\"F\":\"看\",\"G\":\"报\",\"H\":\"事\",\"I\":\"泊\",\"J\":\"现\",\"K\":\"迸\",\"L\":\"彰\",\"M\":\"需\",\"N\":\"飞\",\"O\":\"游\",\"P\":\"求\",\"Q\":\"御\",\"R\":\"航\",\"S\":\"歌\",\"T\":\"读\",\"U\":\"振\",\"V\":\"登\",\"W\":\"任\",\"X\":\"留\",\"Y\":\"奏\",\"Z\":\"连\"},\"numbersymbol\":{\"0\":\"知\",\"1\":\"至\",\"2\":\"致\",\"3\":\"去\",\"4\":\"画\",\"5\":\"说\",\"6\":\"进\",\"7\":\"信\",\"8\":\"取\",\"9\":\"问\",\"+\":\"笑\",\"/\":\"视\",\"=\":\"言\"}},\"MV\":[\"欲\",\"应\",\"可\",\"能\",\"将\",\"请\",\"想\",\"必\",\"当\"],\"A\":{\"alphabet\":{\"a\":\"莹\",\"b\":\"畅\",\"c\":\"新\",\"d\":\"高\",\"e\":\"静\",\"f\":\"美\",\"g\":\"绿\",\"h\":\"佳\",\"i\":\"善\",\"j\":\"良\",\"k\":\"瀚\",\"l\":\"明\",\"m\":\"早\",\"n\":\"宏\",\"o\":\"青\",\"p\":\"遥\",\"q\":\"速\",\"r\":\"慧\",\"s\":\"绚\",\"t\":\"绮\",\"u\":\"寒\",\"v\":\"冷\",\"w\":\"银\",\"x\":\"灵\",\"y\":\"绣\",\"z\":\"北\",\"A\":\"临\",\"B\":\"南\",\"C\":\"俊\",\"D\":\"捷\",\"E\":\"骏\",\"F\":\"益\",\"G\":\"雅\",\"H\":\"舒\",\"I\":\"智\",\"J\":\"谜\",\"K\":\"彩\",\"L\":\"余\",\"M\":\"短\",\"N\":\"秋\",\"O\":\"乐\",\"P\":\"怡\",\"Q\":\"瑞\",\"R\":\"惠\",\"S\":\"和\",\"T\":\"纯\",\"U\":\"悦\",\"V\":\"迷\",\"W\":\"长\",\"X\":\"少\",\"Y\":\"近\",\"Z\":\"清\"},\"numbersymbol\":{\"0\":\"远\",\"1\":\"极\",\"2\":\"安\",\"3\":\"聪\",\"4\":\"秀\",\"5\":\"旧\",\"6\":\"浩\",\"7\":\"盈\",\"8\":\"快\",\"9\":\"悠\",\"+\":\"后\",\"/\":\"轻\",\"=\":\"坚\"}},\"AD\":{\"alphabet\":{\"a\":\"诚\",\"b\":\"畅\",\"c\":\"新\",\"d\":\"高\",\"e\":\"静\",\"f\":\"恒\",\"g\":\"愈\",\"h\":\"谨\",\"i\":\"善\",\"j\":\"良\",\"k\":\"频\",\"l\":\"笃\",\"m\":\"早\",\"n\":\"湛\",\"o\":\"昭\",\"p\":\"遥\",\"q\":\"速\",\"r\":\"朗\",\"s\":\"祗\",\"t\":\"攸\",\"u\":\"徐\",\"v\":\"咸\",\"w\":\"皆\",\"x\":\"灵\",\"y\":\"恭\",\"z\":\"弥\",\"A\":\"临\",\"B\":\"允\",\"C\":\"公\",\"D\":\"捷\",\"E\":\"淳\",\"F\":\"益\",\"G\":\"雅\",\"H\":\"舒\",\"I\":\"嘉\",\"J\":\"勤\",\"K\":\"协\",\"L\":\"永\",\"M\":\"短\",\"N\":\"歆\",\"O\":\"乐\",\"P\":\"怡\",\"Q\":\"已\",\"R\":\"忻\",\"S\":\"和\",\"T\":\"谧\",\"U\":\"悦\",\"V\":\"稍\",\"W\":\"长\",\"X\":\"少\",\"Y\":\"近\",\"Z\":\"尚\"},\"numbersymbol\":{\"0\":\"远\",\"1\":\"极\",\"2\":\"安\",\"3\":\"竟\",\"4\":\"悉\",\"5\":\"渐\",\"6\":\"颇\",\"7\":\"辄\",\"8\":\"快\",\"9\":\"悠\",\"+\":\"后\",\"/\":\"轻\",\"=\":\"曾\"}}},\"Virtual\":{\"zhi\":[\"之\"],\"hu\":[\"乎\"],\"zhe\":[\"者\"],\"ye\":[\"也\"],\"for\":[\"为\"],\"ba\":[\"把\"],\"le\":[\"了\"],\"er\":[\"而\"],\"this\":[\"此\",\"斯\"],\"still\":[\"仍\"],\"with\":[\"与\",\"同\"],\"also\":[\"亦\",\"也\"],\"is\":[\"是\",\"乃\"],\"not\":[\"未\",\"莫\"],\"or\":[\"或\"],\"more\":[\"更\"],\"make\":[\"使\",\"将\",\"让\"],\"and\":[\"与\",\"同\"],\"anti\":[\"非\",\"不\"],\"why\":[\"为何\",\"奈何\",\"何哉\"],\"but\":[\"但\",\"却\",\"则\",\"而\",\"况\",\"且\"],\"like\":[\"似\",\"如\",\"若\"],\"if\":[\"若\",\"倘\"],\"int\":[\"哉\",\"呼\",\"噫\"],\"self\":[\"自\"],\"by\":[\"以\",\"于\"]},\"Sentences\":{\"Begin\":[\"1/非/N/ye\",\"1/N/曰\",\"1/若夫/N\",\"1/anti/MV/V/ye/P\",\"2/A/N/曰\",\"2/N/以/A\",\"2/N/anti/在/A\",\"2/N/make/N/zhi\",\"2/MV/N/zhe/A\",\"2/有/N/则/A\",\"2/V/zhe/V/zhi\",\"2/but/MV/A/zhe/A\",\"3/初,/N/V/by/N\",\"3/夫/N/anti/V/by/N\",\"3/AD/V/zhi/谓/A\",\"3/V/而/V/zhi/zhi/谓/A\",\"3/N/,/N/zhi/N/ye/P\",\"3/A/之/V/者/必/有/N/P\",\"4/非/N/不/A/,/V/不/A\",\"4/A/N/AD/V\",\"4/V/N/以/V/N\",\"4/N/不在/A/,/有/N/则/A/P\",\"4/A/N/常有/,/而/A/N/不常有/P\",\"4/N/有/MV/V/,/N/有/AD/然/P\",\"4/N/无/N/,/无以/V/N\",\"5/V/N/而/V/A/,/V/zhi/道/ye/P\",\"5/N/zhi/V/V/,/实为/A/A/P\",\"5/本/MV/V/A/,/anti/V/N/N\",\"5/今/V/N/以/V/A/N\",\"5/N/乃/V/V/N/zhi/N\",\"5/今/N/乃/A/N/A/N\",\"5/A/N/V/A/N\",\"5/夫/N/、/N/不/MV/AD/V/N\",\"6/以/N/V/,/like/V/N/V/N\",\"6/A/N/zhi/N/,/V/zhi/以/V/其/N\",\"6/A/N/V/于/N/而/V/N\",\"6/A/N/未/V/N/、/N/之/N\",\"7/N/以/A/A/,/AD/V/A/N\",\"7/V/N/A/,/A/N/V/N\",\"7/N/V/以/N/V/,/V/不/V/N\",\"7/N/N/V/N/,/A/于/N/N\",\"7/MV/AD/V/A/N/,/but/V/V/不/A\",\"7/或/V/N/V/N/,/V/N/于/N\",\"7/则有/N/A/N/A/,/N/N/具/V\",\"7/V/A/N/zhe/,/常/V/其/所/A/,/而/V/其/所/A/P\",\"7/A/N/之/N/不在/N/,/在乎/A/N/之/N/也/P\",\"8/V/A/N/,/V/A/N/,/by/MV/A/zhi/N/P\",\"8/N/anti/AD/V/zhe/by/AD/V/zhe/V/,/anti/MV/AD/V/P\",\"8/N/anti/MV/V/N/,/still/继/N/V/,/why/,/and/N/而/anti/V/N/ye/P\",\"8/V/N/A/A/,/V/N/A/A\",\"8/N/V/A/N/,/N/V/A/N\",\"8/N/在/A/N/,/A/N/zhi/A/,/V/于/N/P\",\"8/A/N/AD/V/,/N/N/AD/V\",\"8/A/N/V/N/,/N/N/V/N/P\",\"8/尝/V/A/N/,/AD/V/A/N/zhi/N\",\"8/予/V/夫/A/N/A/N/,/在/A/N/之/N\",\"8/N/V/于/A/N/,/而/N/V/于/A/N\",\"8/虽/无/N/N/zhi/V/,/亦/V/以/AD/V/A/N/P\",\"9/A/N/V/zhi/而不/V/zhi/、亦/make/A/N/er/复/V/A/N/ye/P\",\"9/N/MV/V/N/V/V/,/but/N/N/AD/V/P\",\"9/以/N/,/当/V/A/N/,/非/N/V/N/所/MV/AD/V/P\",\"9/此/N/有/A/N/A/N/,/A/N/A/N/P\",\"9/是/N/ye/,/N/A/N/A/,/N/A/N/A/P\"],\"Main\":[\"1/非/N/ye\",\"1/anti/MV/V/ye\",\"2/N/make/N/zhi\",\"2/MV/N/zhe/A\",\"2/有/N/则/A\",\"2/V/zhe/V/zhi\",\"2/but/MV/A/zhe/A\",\"3/N/with/N/V\",\"3/N/曰,何/A/zhi/V/Q\",\"4/A/N/AD/V\",\"4/V/N/以/V/N\",\"4/N/无/N/,/无以/V/N/P\",\"4/N/不在/A/,/有/N/则/A/P\",\"4/N/有/MV/V/,/N/有/AD/然/P\",\"4/N/非/V/而/V/之/者/,/孰/MV/无/N/P\",\"4/A/N/常有/,/而/A/N/不常有/P\",\"5/今/V/N/以/V/A/N\",\"5/N/乃/V/V/N/zhi/N\",\"5/本/MV/V/A/,/anti/V/N/N\",\"5/今/N/乃/A/N/A/N\",\"5/每/有/V/N/,/便/AD/然/V/N/P\",\"5/N/V/而/A/N/V/也\",\"6/以/N/V/,/like/V/N/V/N\",\"6/N/V/,/V/N/V/N\",\"6/虽/V/V/A/A/,/A/A/不/同/P\",\"6/而/A/N/zhi/N/,/V/zhi/以/V/其/N/P\",\"6/A/N/V/于/N/而/V/N\",\"6/A/N/未/V/N/、/N/之/N\",\"6/V/A/N/,/V/A/N\",\"6/V/MV/with/其/N/,/而/V/MV/V/以/N/者/,/N/也/P\",\"6/A/N/必/有/A/N/V/之者/、/予/可/无/N/也/P\",\"7/N/V/以/N/V/,/V/不/V/N\",\"7/N/N/V/N/,/A/于/N/N\",\"7/MV/AD/V/A/N/,/but/V/V/不/A\",\"7/或/V/N/V/N/,/V/N/于/N\",\"7/V/A/N/zhe/,/常/V/其/所/A/,/而/V/其/所/A/P\",\"7/A/N/之/不/V/也/AD/矣/,/欲/N/之/无/N/也/AD/矣/P\",\"7/A/N/之/N/不在/N/,/在乎/A/N/之/N/也/P\",\"7/A/N/之/N/,/V/之/N/而/V/之/N/也/P\",\"7/是故/A/N/不必不如/N/,/N/不必/A/于/A/N/P\",\"8/N/anti/MV/V/N/,/still/继/N/V/,/why/,/and/N/而/anti/V/N/ye/P\",\"8/是/故/无/A/无/A/,/无/A/无/A/,/N/之/所/V/、/N/之/所/V/ye/P\",\"8/V/N/A/A/,/V/N/A/A\",\"8/N/在/A/N/,/A/N/zhi/A/,/V/于/N/P\",\"8/A/N/AD/V/,/N/N/AD/V\",\"8/A/N/V/N/,/N/N/V/N/P\",\"8/虽/无/N/N/zhi/V/,/亦/V/以/AD/V/A/N/P\",\"8/予/V/夫/A/N/A/N/,/在/A/N/之/N\",\"8/故/V/A/N/者/,/当/V/A/N/之/A/N/P\",\"8/N/V/于/A/N/,/而/N/V/于/A/N\",\"8/A/N/MV/A/N/之/A/,/V/N/中/之/A\",\"8/N/V/于/A/N/之上/,/AD/V/于/A/N/之间/P\",\"9/N/MV/V/N/V/V/,/but/N/N/AD/V\",\"9/A/N/V/zhi/而不/V/zhi/、亦/make/A/N/er/复/V/A/N/ye/P\",\"9/以/N/,/当/V/A/N/,/非/N/V/N/所/MV/AD/V/P\",\"9/此/N/有/A/N/A/N/,/A/N/A/N/P\",\"9/是/N/ye/,/N/A/N/A/,/N/A/N/A\",\"9/V/A/N/,/N/A/N/A/,/乃/AD/V\"],\"End\":[\"1/非/N/ye\",\"1/anti/MV/V/ye\",\"2/唯/N/V/zhi\",\"2/V/by/N\",\"2/其/also/A/hu/其/V/ye/P\",\"2/N/make/N/zhi\",\"2/MV/N/zhe/A\",\"2/有/N/则/A\",\"2/V/zhe/V/zhi\",\"2/but/MV/A/zhe/A\",\"3/V/在/A/N\",\"3/今/zhi/V/zhe/,/亦将有/V/于/this/N/P\",\"3/某也/A/,/某也/A/,/可/不/A/哉\",\"4/V/N/zhi/N/by/N\",\"4/A/N/AD/V\",\"4/V/N/以/V/N\",\"4/N/无/N/,/无以/V/N\",\"4/噫/,/A/N/ye/,/N/谁/与/V/Q\",\"5/请/V/N/zhi/N/中/,/是/N/zhi/N/P\",\"5/今/V/N/以/V/A/N\",\"5/N/乃/V/V/N/zhi/N\",\"5/本/MV/V/A/,/anti/V/N/N\",\"5/今/N/乃/A/N/A/N\",\"5/N/V/而/A/N/V/也\",\"6/以/N/V/,/like/V/N/V/N\",\"6/A/zhi/V/N/,/亦/like/今/zhi/V/N/,/A/夫/P\",\"6/N/V/,/V/N/V/N\",\"6/V/N/之/N/,/为/N/V/者/,/可以/V/矣/P\",\"6/V/MV/with/其/N/,/而/V/MV/V/以/N/者/,/N/也/P\",\"6/A/N/必/有/A/N/V/之者/、/予/可/无/N/也/P\",\"6/虽/V/V/A/A/,/A/A/不/同/P\",\"7/N/V/以/N/V/,/V/不/V/N\",\"7/N/N/V/N/,/A/于/N/N\",\"7/MV/AD/V/A/N/,/but/V/V/不/A\",\"7/或/V/N/V/N/,/V/N/于/N\",\"7/A/N/之/N/不在/N/,/在乎/A/N/之/N/也/P\",\"7/A/N/之/N/,/V/之/N/而/V/之/N/也/P\",\"7/是故/A/N/不必不如/N/,/N/不必/A/于/A/N/P\",\"8/虽/N/A/N/A/,/所/以/V/N/,其/N/A/ye/P\",\"8/何必/V/N/V/N/,/V/N/zhi/N/N/哉/P\",\"8/N/anti/MV/V/N/,/still/继/N/V/,/why/,/and/N/而/anti/V/N/ye/P\",\"8/V/N/A/A/,/V/N/A/A\",\"8/N/在/A/N/,/A/N/zhi/A/,/V/于/N/P\",\"8/A/N/AD/V/,/N/N/AD/V\",\"8/虽/无/N/N/zhi/V/,/亦/V/以/AD/V/A/N/P\",\"8/故/V/A/N/者/,/当/V/A/N/之/A/N/P\",\"8/N/V/于/A/N/之上/,/AD/V/于/A/N/之间/P\",\"9/A/N/V/zhi/而不/V/zhi/、亦/make/A/N/er/复/V/A/N/ye/P\",\"9/N/MV/V/N/V/V/,/but/N/N/AD/V\",\"9/以/N/,/当/V/A/N/,/非/N/V/N/所/MV/AD/V/P\",\"9/此/N/有/A/N/A/N/,/A/N/A/N/P\",\"9/是/N/ye/,/N/A/N/A/,/N/A/N/A/P\"]}}'; +const Map = + '{"Actual":{"N":{"alphabet":{"a":"人","b":"镜","c":"鹏","d":"曲","e":"霞","f":"绸","g":"裳","h":"路","i":"岩","j":"叶","k":"鲤","l":"月","m":"雪","n":"冰","o":"局","p":"恋","q":"褔","r":"铃","s":"琴","t":"家","u":"天","v":"韵","w":"书","x":"莺","y":"璃","z":"雨","A":"文","B":"涧","C":"水","D":"花","E":"风","F":"棋","G":"楼","H":"鹤","I":"鸢","J":"灯","K":"雁","L":"星","M":"声","N":"树","O":"茶","P":"竹","Q":"兰","R":"苗","S":"心","T":"语","U":"礼","V":"梦","W":"庭","X":"木","Y":"驿","Z":"火"},"numbersymbol":{"0":"森","1":"夏","2":"光","3":"林","4":"物","5":"云","6":"夜","7":"城","8":"春","9":"空","+":"雀","/":"鹂","=":"鸳"}},"V":{"alphabet":{"a":"关","b":"赴","c":"呈","d":"添","e":"停","f":"成","g":"走","h":"达","i":"行","j":"称","k":"见","l":"学","m":"听","n":"买","o":"作","p":"弹","q":"写","r":"定","s":"谈","t":"动","u":"旅","v":"返","w":"度","x":"开","y":"筑","z":"选","A":"流","B":"指","C":"换","D":"探","E":"放","F":"看","G":"报","H":"事","I":"泊","J":"现","K":"迸","L":"彰","M":"需","N":"飞","O":"游","P":"求","Q":"御","R":"航","S":"歌","T":"读","U":"振","V":"登","W":"任","X":"留","Y":"奏","Z":"连"},"numbersymbol":{"0":"知","1":"至","2":"致","3":"去","4":"画","5":"说","6":"进","7":"信","8":"取","9":"问","+":"笑","/":"视","=":"言"}},"MV":["欲","应","可","能","将","请","想","必","当"],"A":{"alphabet":{"a":"莹","b":"畅","c":"新","d":"高","e":"静","f":"美","g":"绿","h":"佳","i":"善","j":"良","k":"瀚","l":"明","m":"早","n":"宏","o":"青","p":"遥","q":"速","r":"慧","s":"绚","t":"绮","u":"寒","v":"冷","w":"银","x":"灵","y":"绣","z":"北","A":"临","B":"南","C":"俊","D":"捷","E":"骏","F":"益","G":"雅","H":"舒","I":"智","J":"谜","K":"彩","L":"余","M":"短","N":"秋","O":"乐","P":"怡","Q":"瑞","R":"惠","S":"和","T":"纯","U":"悦","V":"迷","W":"长","X":"少","Y":"近","Z":"清"},"numbersymbol":{"0":"远","1":"极","2":"安","3":"聪","4":"秀","5":"旧","6":"浩","7":"盈","8":"快","9":"悠","+":"后","/":"轻","=":"坚"}},"AD":{"alphabet":{"a":"诚","b":"畅","c":"新","d":"高","e":"静","f":"恒","g":"愈","h":"谨","i":"善","j":"良","k":"频","l":"笃","m":"早","n":"湛","o":"昭","p":"遥","q":"速","r":"朗","s":"祗","t":"攸","u":"徐","v":"咸","w":"皆","x":"灵","y":"恭","z":"弥","A":"临","B":"允","C":"公","D":"捷","E":"淳","F":"益","G":"雅","H":"舒","I":"嘉","J":"勤","K":"协","L":"永","M":"短","N":"歆","O":"乐","P":"怡","Q":"已","R":"忻","S":"和","T":"谧","U":"悦","V":"稍","W":"长","X":"少","Y":"近","Z":"尚"},"numbersymbol":{"0":"远","1":"极","2":"安","3":"竟","4":"悉","5":"渐","6":"颇","7":"辄","8":"快","9":"悠","+":"后","/":"轻","=":"曾"}}},"Virtual":{"zhi":["之"],"hu":["乎"],"zhe":["者"],"ye":["也"],"for":["为"],"ba":["把"],"le":["了"],"er":["而"],"this":["此","斯"],"still":["仍"],"with":["与","同"],"also":["亦","也"],"is":["是","乃"],"not":["未","莫"],"or":["或"],"more":["更"],"make":["使","将","让"],"and":["与","同"],"anti":["非","不"],"why":["为何","奈何","何哉"],"but":["但","却","则","而","况","且"],"like":["似","如","若"],"if":["若","倘"],"int":["哉","呼","噫"],"self":["自"],"by":["以","于"]},"Sentences":{"Begin":["1/非/N/ye","1/N/曰","1/若夫/N","1/anti/MV/V/ye/P","2/A/N/曰","2/N/以/A","2/N/anti/在/A","2/N/make/N/zhi","2/MV/N/zhe/A","2/有/N/则/A","2/V/zhe/V/zhi","2/but/MV/A/zhe/A","3/初,/N/V/by/N","3/夫/N/anti/V/by/N","3/AD/V/zhi/谓/A","3/V/而/V/zhi/zhi/谓/A","3/N/,/N/zhi/N/ye/P","3/A/之/V/者/必/有/N/P","4/非/N/不/A/,/V/不/A","4/A/N/AD/V","4/V/N/以/V/N","4/N/不在/A/,/有/N/则/A/P","4/A/N/常有/,/而/A/N/不常有/P","4/N/有/MV/V/,/N/有/AD/然/P","4/N/无/N/,/无以/V/N","5/V/N/而/V/A/,/V/zhi/道/ye/P","5/N/zhi/V/V/,/实为/A/A/P","5/本/MV/V/A/,/anti/V/N/N","5/今/V/N/以/V/A/N","5/N/乃/V/V/N/zhi/N","5/今/N/乃/A/N/A/N","5/A/N/V/A/N","5/夫/N/、/N/不/MV/AD/V/N","5/不/有/A/N/,/何/V/A/N/Q","6/以/N/V/,/like/V/N/V/N","6/A/N/zhi/N/,/V/zhi/以/V/其/N","6/A/N/V/于/N/而/V/N","6/A/N/未/V/N/、/N/之/N","7/N/以/A/A/,/AD/V/A/N","7/V/N/A/,/A/N/V/N","7/N/V/以/N/V/,/V/不/V/N","7/N/N/V/N/,/A/于/N/N","7/MV/AD/V/A/N/,/but/V/V/不/A","7/或/V/N/V/N/,/V/N/于/N","7/则有/N/A/N/A/,/N/N/具/V","7/V/A/N/zhe/,/常/V/其/所/A/,/而/V/其/所/A/P","7/A/N/之/N/不在/N/,/在乎/A/N/之/N/也/P","8/V/A/N/,/V/A/N/,/by/MV/A/zhi/N/P","8/N/anti/AD/V/zhe/by/AD/V/zhe/V/,/anti/MV/AD/V/P","8/N/anti/MV/V/N/,/still/继/N/V/,/why/,/and/N/而/anti/V/N/ye/P","8/V/N/A/A/,/V/N/A/A","8/N/V/A/N/,/N/V/A/N","8/N/在/A/N/,/A/N/zhi/A/,/V/于/N/P","8/A/N/AD/V/,/N/N/AD/V","8/A/N/V/N/,/N/N/V/N/P","8/尝/V/A/N/,/AD/V/A/N/zhi/N","8/予/V/夫/A/N/A/N/,/在/A/N/之/N","8/N/V/于/A/N/,/而/N/V/于/A/N","8/虽/无/N/N/zhi/V/,/亦/V/以/AD/V/A/N/P","9/A/N/V/zhi/而不/V/zhi/、亦/make/A/N/er/复/V/A/N/ye/P","9/N/MV/V/N/V/V/,/but/N/N/AD/V/P","9/以/N/,/当/V/A/N/,/非/N/V/N/所/MV/AD/V/P","9/此/N/有/A/N/A/N/,/A/N/A/N/P","9/是/N/ye/,/N/A/N/A/,/N/A/N/A/P"],"Main":["1/非/N/ye","1/anti/MV/V/ye","2/N/make/N/zhi","2/MV/N/zhe/A","2/有/N/则/A","2/V/zhe/V/zhi","2/but/MV/A/zhe/A","3/N/with/N/V","3/N/曰,何/A/zhi/V/Q","4/A/N/AD/V","4/V/N/以/V/N","4/N/无/N/,/无以/V/N/P","4/N/不在/A/,/有/N/则/A/P","4/N/有/MV/V/,/N/有/AD/然/P","4/N/非/V/而/V/之/者/,/孰/MV/无/N/P","4/A/N/常有/,/而/A/N/不常有/P","4/不/以/N/V/,/不/以/N/V/P","5/今/V/N/以/V/A/N","5/N/乃/V/V/N/zhi/N","5/本/MV/V/A/,/anti/V/N/N","5/今/N/乃/A/N/A/N","5/每/有/V/N/,/便/AD/然/V/N/P","5/N/V/而/A/N/V/也","5/不/有/A/N/,/何/V/A/N/Q","6/以/N/V/,/like/V/N/V/N","6/N/V/,/V/N/V/N","6/虽/V/V/A/A/,/A/A/不/同/P","6/而/A/N/zhi/N/,/V/zhi/以/V/其/N/P","6/A/N/V/于/N/而/V/N","6/A/N/未/V/N/、/N/之/N","6/V/A/N/,/V/A/N","6/V/MV/with/其/N/,/而/V/MV/V/以/N/者/,/N/也/P","6/A/N/必/有/A/N/V/之者/、/予/可/无/N/也/P","6/将/有/V/,/则/V/A/N/以/V/N/P","7/N/V/以/N/V/,/V/不/V/N","7/N/N/V/N/,/A/于/N/N","7/MV/AD/V/A/N/,/but/V/V/不/A","7/或/V/N/V/N/,/V/N/于/N","7/V/A/N/zhe/,/常/V/其/所/A/,/而/V/其/所/A/P","7/A/N/之/不/V/也/AD/矣/,/欲/N/之/无/N/也/AD/矣/P","7/A/N/之/N/不在/N/,/在乎/A/N/之/N/也/P","7/A/N/之/N/,/V/之/N/而/V/之/N/也/P","7/是故/A/N/不必不如/N/,/N/不必/A/于/A/N/P","7/有/A/N/、/A/N/、/A/N/之/N/P","8/N/anti/MV/V/N/,/still/继/N/V/,/why/,/and/N/而/anti/V/N/ye/P","8/是/故/无/A/无/A/,/无/A/无/A/,/N/之/所/V/、/N/之/所/V/ye/P","8/V/N/A/A/,/V/N/A/A","8/N/在/A/N/,/A/N/zhi/A/,/V/于/N/P","8/A/N/AD/V/,/N/N/AD/V","8/A/N/V/N/,/N/N/V/N/P","8/虽/无/N/N/zhi/V/,/亦/V/以/AD/V/A/N/P","8/予/V/夫/A/N/A/N/,/在/A/N/之/N","8/故/V/A/N/者/,/当/V/A/N/之/A/N/P","8/N/V/于/A/N/,/而/N/V/于/A/N","8/A/N/MV/A/N/之/A/,/V/N/中/之/A","8/N/V/于/A/N/之上/,/AD/V/于/A/N/之间/P","8/使/其/A/N/AD/V/,/A/N/AD/V/P","9/N/MV/V/N/V/V/,/but/N/N/AD/V","9/A/N/V/zhi/而不/V/zhi/、亦/make/A/N/er/复/V/A/N/ye/P","9/以/N/,/当/V/A/N/,/非/N/V/N/所/MV/AD/V/P","9/此/N/有/A/N/A/N/,/A/N/A/N/P","9/是/N/ye/,/N/A/N/A/,/N/A/N/A","9/V/A/N/,/N/A/N/A/,/乃/AD/V"],"End":["1/非/N/ye","1/anti/MV/V/ye","2/唯/N/V/zhi","2/V/by/N","2/其/also/A/hu/其/V/ye/P","2/N/make/N/zhi","2/MV/N/zhe/A","2/有/N/则/A","2/V/zhe/V/zhi","2/but/MV/A/zhe/A","3/V/在/A/N","3/今/zhi/V/zhe/,/亦将有/V/于/this/N/P","3/某也/A/,/某也/A/,/可/不/A/哉","4/V/N/zhi/N/by/N","4/A/N/AD/V","4/V/N/以/V/N","4/N/无/N/,/无以/V/N","4/噫/,/A/N/ye/,/N/谁/与/V/Q","4/不/以/N/V/,/不/以/N/V/P","5/请/V/N/zhi/N/中/,/是/N/zhi/N/P","5/今/V/N/以/V/A/N","5/N/乃/V/V/N/zhi/N","5/本/MV/V/A/,/anti/V/N/N","5/今/N/乃/A/N/A/N","5/N/V/而/A/N/V/也","5/不/有/A/N/,/何/V/A/N/Q","6/以/N/V/,/like/V/N/V/N","6/A/zhi/V/N/,/亦/like/今/zhi/V/N/,/A/夫/P","6/N/V/,/V/N/V/N","6/V/N/之/N/,/为/N/V/者/,/可以/V/矣/P","6/V/MV/with/其/N/,/而/V/MV/V/以/N/者/,/N/也/P","6/A/N/必/有/A/N/V/之者/、/予/可/无/N/也/P","6/虽/V/V/A/A/,/A/A/不/同/P","6/将/有/V/,/则/V/A/N/以/V/N/P","7/N/V/以/N/V/,/V/不/V/N","7/N/N/V/N/,/A/于/N/N","7/MV/AD/V/A/N/,/but/V/V/不/A","7/或/V/N/V/N/,/V/N/于/N","7/A/N/之/N/不在/N/,/在乎/A/N/之/N/也/P","7/A/N/之/N/,/V/之/N/而/V/之/N/也/P","7/是故/A/N/不必不如/N/,/N/不必/A/于/A/N/P","7/有/A/N/、/A/N/、/A/N/之/N/P","8/虽/N/A/N/A/,/所/以/V/N/,其/N/A/ye/P","8/何必/V/N/V/N/,/V/N/zhi/N/N/哉/P","8/N/anti/MV/V/N/,/still/继/N/V/,/why/,/and/N/而/anti/V/N/ye/P","8/V/N/A/A/,/V/N/A/A","8/N/在/A/N/,/A/N/zhi/A/,/V/于/N/P","8/A/N/AD/V/,/N/N/AD/V","8/虽/无/N/N/zhi/V/,/亦/V/以/AD/V/A/N/P","8/故/V/A/N/者/,/当/V/A/N/之/A/N/P","8/N/V/于/A/N/之上/,/AD/V/于/A/N/之间/P","8/使/其/A/N/AD/V/,/A/N/AD/V/P","9/A/N/V/zhi/而不/V/zhi/、亦/make/A/N/er/复/V/A/N/ye/P","9/N/MV/V/N/V/V/,/but/N/N/AD/V","9/以/N/,/当/V/A/N/,/非/N/V/N/所/MV/AD/V/P","9/此/N/有/A/N/A/N/,/A/N/A/N/P","9/是/N/ye/,/N/A/N/A/,/N/A/N/A/P"]}}'; var RoundFlip = 0; //标志现在到哪了 var RoundControl = new Uint8Array(32); //一个数组,用密钥哈希来控制轮转的行为 @@ -51,7 +52,6 @@ var NUMBERSYMBOL_ROUND_1 = "0123456789+/="; var NUMBERSYMBOL_ROUND_2 = "5=0764+389/12"; //手动随机打乱的乱序轮 var NUMBERSYMBOL_ROUND_3 = "0123456789+/="; - //const SIG_DECRYPT_JP = "桜込凪雫実沢"; //const SIG_DECRYPT_CN = "玚俟玊欤瞐珏"; const NULL_STR = "孎"; //默认忽略的占位字符,一个生僻字。 @@ -129,34 +129,64 @@ const Map_Obj = JSON.parse(Map); let DecodeTable = {}; let PayloadLetter = ""; - -function InitDecodeTable(){ +function InitDecodeTable() { DecodeTable = {}; PayloadLetter = ""; - for(let i = 0; i < 52 ; i++){ + for (let i = 0; i < 52; i++) { DecodeTable[LETTERS[i]] = []; - DecodeTable[LETTERS[i]].push(Map_Obj["Actual"]["N"]["alphabet"][LETTERS[i]]); - DecodeTable[LETTERS[i]].push(Map_Obj["Actual"]["A"]["alphabet"][LETTERS[i]]); - DecodeTable[LETTERS[i]].push(Map_Obj["Actual"]["V"]["alphabet"][LETTERS[i]]); - PayloadLetter = PayloadLetter + Map_Obj["Actual"]["N"]["alphabet"][LETTERS[i]]; - PayloadLetter = PayloadLetter + Map_Obj["Actual"]["A"]["alphabet"][LETTERS[i]]; - PayloadLetter = PayloadLetter + Map_Obj["Actual"]["V"]["alphabet"][LETTERS[i]]; - if(Map_Obj["Actual"]["A"]["alphabet"][LETTERS[i]] != Map_Obj["Actual"]["AD"]["alphabet"][LETTERS[i]]){ - DecodeTable[LETTERS[i]].push(Map_Obj["Actual"]["AD"]["alphabet"][LETTERS[i]]); - PayloadLetter = PayloadLetter + Map_Obj["Actual"]["AD"]["alphabet"][LETTERS[i]]; + DecodeTable[LETTERS[i]].push( + Map_Obj["Actual"]["N"]["alphabet"][LETTERS[i]] + ); + DecodeTable[LETTERS[i]].push( + Map_Obj["Actual"]["A"]["alphabet"][LETTERS[i]] + ); + DecodeTable[LETTERS[i]].push( + Map_Obj["Actual"]["V"]["alphabet"][LETTERS[i]] + ); + PayloadLetter = + PayloadLetter + Map_Obj["Actual"]["N"]["alphabet"][LETTERS[i]]; + PayloadLetter = + PayloadLetter + Map_Obj["Actual"]["A"]["alphabet"][LETTERS[i]]; + PayloadLetter = + PayloadLetter + Map_Obj["Actual"]["V"]["alphabet"][LETTERS[i]]; + if ( + Map_Obj["Actual"]["A"]["alphabet"][LETTERS[i]] != + Map_Obj["Actual"]["AD"]["alphabet"][LETTERS[i]] + ) { + DecodeTable[LETTERS[i]].push( + Map_Obj["Actual"]["AD"]["alphabet"][LETTERS[i]] + ); + PayloadLetter = + PayloadLetter + Map_Obj["Actual"]["AD"]["alphabet"][LETTERS[i]]; } } - for(let i = 0; i < 13 ; i++){ + for (let i = 0; i < 13; i++) { DecodeTable[NUMBERSYMBOL[i]] = []; - DecodeTable[NUMBERSYMBOL[i]].push(Map_Obj["Actual"]["N"]["numbersymbol"][NUMBERSYMBOL[i]]); - DecodeTable[NUMBERSYMBOL[i]].push(Map_Obj["Actual"]["A"]["numbersymbol"][NUMBERSYMBOL[i]]); - DecodeTable[NUMBERSYMBOL[i]].push(Map_Obj["Actual"]["V"]["numbersymbol"][NUMBERSYMBOL[i]]); - PayloadLetter = PayloadLetter + Map_Obj["Actual"]["N"]["numbersymbol"][NUMBERSYMBOL[i]]; - PayloadLetter = PayloadLetter + Map_Obj["Actual"]["A"]["numbersymbol"][NUMBERSYMBOL[i]]; - PayloadLetter = PayloadLetter + Map_Obj["Actual"]["V"]["numbersymbol"][NUMBERSYMBOL[i]]; - if(Map_Obj["Actual"]["A"]["numbersymbol"][NUMBERSYMBOL[i]] != Map_Obj["Actual"]["AD"]["numbersymbol"][NUMBERSYMBOL[i]]){ - DecodeTable[NUMBERSYMBOL[i]].push(Map_Obj["Actual"]["AD"]["numbersymbol"][NUMBERSYMBOL[i]]); - PayloadLetter = PayloadLetter + Map_Obj["Actual"]["AD"]["numbersymbol"][NUMBERSYMBOL[i]]; + DecodeTable[NUMBERSYMBOL[i]].push( + Map_Obj["Actual"]["N"]["numbersymbol"][NUMBERSYMBOL[i]] + ); + DecodeTable[NUMBERSYMBOL[i]].push( + Map_Obj["Actual"]["A"]["numbersymbol"][NUMBERSYMBOL[i]] + ); + DecodeTable[NUMBERSYMBOL[i]].push( + Map_Obj["Actual"]["V"]["numbersymbol"][NUMBERSYMBOL[i]] + ); + PayloadLetter = + PayloadLetter + Map_Obj["Actual"]["N"]["numbersymbol"][NUMBERSYMBOL[i]]; + PayloadLetter = + PayloadLetter + Map_Obj["Actual"]["A"]["numbersymbol"][NUMBERSYMBOL[i]]; + PayloadLetter = + PayloadLetter + Map_Obj["Actual"]["V"]["numbersymbol"][NUMBERSYMBOL[i]]; + if ( + Map_Obj["Actual"]["A"]["numbersymbol"][NUMBERSYMBOL[i]] != + Map_Obj["Actual"]["AD"]["numbersymbol"][NUMBERSYMBOL[i]] + ) { + DecodeTable[NUMBERSYMBOL[i]].push( + Map_Obj["Actual"]["AD"]["numbersymbol"][NUMBERSYMBOL[i]] + ); + PayloadLetter = + PayloadLetter + + Map_Obj["Actual"]["AD"]["numbersymbol"][NUMBERSYMBOL[i]]; } } } @@ -577,22 +607,22 @@ function CheckLuhnBit(Data) { } } -function RemovePadding(Base64String){ +function RemovePadding(Base64String) { let PaddingCount = 0; - for(let i = Base64String.length - 1; i >= Base64String.length - 4 ;i--){ - if(Base64String[i] == "="){ - PaddingCount ++; + for (let i = Base64String.length - 1; i >= Base64String.length - 4; i--) { + if (Base64String[i] == "=") { + PaddingCount++; } } - return Base64String.slice(0,Base64String.length - PaddingCount); + return Base64String.slice(0, Base64String.length - PaddingCount); } -function AddPadding(Base64String){ - if(Base64String.length % 4 == 3 ){ +function AddPadding(Base64String) { + if (Base64String.length % 4 == 3) { return Base64String + "="; - }else if(Base64String.length % 4 == 2 ){ + } else if (Base64String.length % 4 == 2) { return Base64String + "=="; - }else{ + } else { return Base64String; } } @@ -606,17 +636,13 @@ function wordArrayToUint8Array(data) { return dataArray; } -function stringToUint8Array(str) { - let tempBase64 = Base64.encode(str); - return Base64.toUint8Array(tempBase64); -} function Uint8ArrayTostring(fileData) { let tempBase64 = Base64.fromUint8Array(fileData); return Base64.decode(tempBase64); } function GetRandomIndex(length) { - let MT = new MersenneTwister(Math.floor(Math.random() * 1000000000)) + let MT = new MersenneTwister(Math.floor(Math.random() * 1000000000)); let Rand = Math.floor(MT.random() * length); return Rand; @@ -767,25 +793,30 @@ export class PreCheckResult { } } - -export function selectSentence(PayloadLength,RandomIndex = 0){ //句式选择算法 +export function selectSentence(PayloadLength, RandomIndex = 0) { + //句式选择算法 //RandomIndex 随机指数,越大,给出的句式越随机,最大100。 let selectRand; - let DividedPayload = distributeInteger(PayloadLength);//把Payload平均分配给三个部分。 - - let ElementResult = []; //最终要返回的语素序列 + let DividedPayload = distributeInteger(PayloadLength); //把Payload平均分配给三个部分。 - for(let i=0;i<3;i++){ //第一重循环,选择Payload + let ElementResult = []; //最终要返回的语素序列 + + for (let i = 0; i < 3; i++) { + //第一重循环,选择Payload let Payload = DividedPayload[i]; - if(i == 0){ //在Begin句式库中选择。 + if (i == 0) { + //在Begin句式库中选择。 - for(let a=0 ;a < Payload;){ //第二重循环,用算法选择句式,满足载荷 + for (let a = 0; a < Payload; ) { + //第二重循环,用算法选择句式,满足载荷 selectRand = GetRandomIndex(101) + RandomIndex; let PossiblePayload = []; - for(let b = 1;b <= Payload - a;b++){ //三重,求取所有可能载荷。 - if(b == 9){ //最大为9 + for (let b = 1; b <= Payload - a; b++) { + //三重,求取所有可能载荷。 + if (b == 9) { + //最大为9 PossiblePayload.push(b); break; } @@ -793,44 +824,54 @@ export function selectSentence(PayloadLength,RandomIndex = 0){ //句式选择算 } //这里给出的可能载荷数组应当是从小到大的。 let TargetPayload; - if(selectRand <= 100){ //选择贪心最优解之一 - if(PossiblePayload[PossiblePayload.length-1] > 6){ //如果可以选到6以上 + if (selectRand <= 100) { + //选择贪心最优解之一 + if (PossiblePayload[PossiblePayload.length - 1] > 6) { + //如果可以选到6以上 let GreedyRand = GetRandomIndex(91); //在三个多逻辑句式的载荷量之间随机选一个 - if(GreedyRand<30){ - TargetPayload = PossiblePayload[PossiblePayload.length-3]; - }else if(GreedyRand >=30 && GreedyRand < 60){ - TargetPayload = PossiblePayload[PossiblePayload.length-2]; - }else{ - TargetPayload = PossiblePayload[PossiblePayload.length-1]; + if (GreedyRand < 30) { + TargetPayload = PossiblePayload[PossiblePayload.length - 3]; + } else if (GreedyRand >= 30 && GreedyRand < 60) { + TargetPayload = PossiblePayload[PossiblePayload.length - 2]; + } else { + TargetPayload = PossiblePayload[PossiblePayload.length - 1]; } - }else{ + } else { TargetPayload = PossiblePayload.pop(); //目标Payload,参照这个去库里寻句式。 } - }else if(selectRand > 100 && selectRand <= 200){ //随机选择一个,不一定是最优解 - TargetPayload = PossiblePayload[GetRandomIndex(PossiblePayload.length)]; - PossiblePayload = PossiblePayload.filter(item => item > TargetPayload); + } else if (selectRand > 100 && selectRand <= 200) { + //随机选择一个,不一定是最优解 + TargetPayload = + PossiblePayload[GetRandomIndex(PossiblePayload.length)]; + PossiblePayload = PossiblePayload.filter( + (item) => item > TargetPayload + ); } let PossibleSentences = []; //所有挑选出来的可能句式,选择时任选其一。 - for(let c = 0;c 6){ //如果可以选到6以上 + if (selectRand <= 100) { + //选择贪心最优解 + if (PossiblePayload[PossiblePayload.length - 1] > 6) { + //如果可以选到6以上 let GreedyRand = GetRandomIndex(91); //在三个多逻辑句式的载荷量之间随机选一个 - if(GreedyRand<30){ - TargetPayload = PossiblePayload[PossiblePayload.length-3]; - }else if(GreedyRand >=30 && GreedyRand < 60){ - TargetPayload = PossiblePayload[PossiblePayload.length-2]; - }else{ - TargetPayload = PossiblePayload[PossiblePayload.length-1]; + if (GreedyRand < 30) { + TargetPayload = PossiblePayload[PossiblePayload.length - 3]; + } else if (GreedyRand >= 30 && GreedyRand < 60) { + TargetPayload = PossiblePayload[PossiblePayload.length - 2]; + } else { + TargetPayload = PossiblePayload[PossiblePayload.length - 1]; } - }else{ + } else { TargetPayload = PossiblePayload.pop(); //目标Payload,参照这个去库里寻句式。 } - }else if(selectRand > 100 && selectRand <= 200){ //随机选择一个,不一定是最优解 - TargetPayload = PossiblePayload[GetRandomIndex(PossiblePayload.length)]; - PossiblePayload = PossiblePayload.filter(item => item > TargetPayload); + } else if (selectRand > 100 && selectRand <= 200) { + //随机选择一个,不一定是最优解 + TargetPayload = + PossiblePayload[GetRandomIndex(PossiblePayload.length)]; + PossiblePayload = PossiblePayload.filter( + (item) => item > TargetPayload + ); } let PossibleSentences = []; //所有挑选出来的可能句式,选择时任选其一。 - for(let c = 0;c 6){ //如果可以选到6以上 + if (selectRand <= 100) { + //选择贪心最优解 + if (PossiblePayload[PossiblePayload.length - 1] > 6) { + //如果可以选到6以上 let GreedyRand = GetRandomIndex(91); //在三个多逻辑句式的载荷量之间随机选一个 - if(GreedyRand<30){ - TargetPayload = PossiblePayload[PossiblePayload.length-3]; - }else if(GreedyRand >=30 && GreedyRand < 60){ - TargetPayload = PossiblePayload[PossiblePayload.length-2]; - }else{ - TargetPayload = PossiblePayload[PossiblePayload.length-1]; + if (GreedyRand < 30) { + TargetPayload = PossiblePayload[PossiblePayload.length - 3]; + } else if (GreedyRand >= 30 && GreedyRand < 60) { + TargetPayload = PossiblePayload[PossiblePayload.length - 2]; + } else { + TargetPayload = PossiblePayload[PossiblePayload.length - 1]; } - }else{ + } else { TargetPayload = PossiblePayload.pop(); //目标Payload,参照这个去库里寻句式。 } - }else if(selectRand > 100 && selectRand <= 200){ //随机选择一个,不一定是最优解 - TargetPayload = PossiblePayload[GetRandomIndex(PossiblePayload.length)]; - PossiblePayload = PossiblePayload.filter(item => item > TargetPayload); + } else if (selectRand > 100 && selectRand <= 200) { + //随机选择一个,不一定是最优解 + TargetPayload = + PossiblePayload[GetRandomIndex(PossiblePayload.length)]; + PossiblePayload = PossiblePayload.filter( + (item) => item > TargetPayload + ); } let PossibleSentences = []; //所有挑选出来的可能句式,选择时任选其一。 - for(let c = 0;c=3 && j != Sentence.length -2){ //最大逗号数量也不能超过门槛 - TempStr1 = TempStr1 + "。"; - CommaCounter = 0; - }else{ - TempStr1 = TempStr1 + ","; - CommaCounter += (CommaNumInSentence + 1); - } - }else{ //超过门槛就加上句号,然后重置逗号计数器 + if (i == size) { + Finished = true; + } + } + if (Finished) { + if (q && !hasSpecialEndSymbol) { + TempStr1 = TempStr1 + "。"; + break; + } + } else { + if (q && !hasSpecialEndSymbol) { + let TestCommaCount = CommaCounter + (CommaNumInSentence + 1); //计算本句添加后可能的最大逗号数量 + if (CommaCounter < 3 || j == Sentence.length - 2) { + //如果逗号数量没到门槛,而且这不是倒数第二个句式,那么就添加逗号 + if (TestCommaCount >= 3 && j != Sentence.length - 2) { + //最大逗号数量也不能超过门槛 TempStr1 = TempStr1 + "。"; CommaCounter = 0; + } else { + TempStr1 = TempStr1 + ","; + CommaCounter += CommaNumInSentence + 1; } - } - if(hasSpecialEndSymbol){ + } else { + //超过门槛就加上句号,然后重置逗号计数器 + TempStr1 = TempStr1 + "。"; CommaCounter = 0; } } + if (hasSpecialEndSymbol) { + CommaCounter = 0; + } } + } - if(!q){ - let TempStrQ = ""; - for(let i = 0;i