Last active
January 22, 2026 09:53
-
-
Save notpushkin/4733af6b6567b9f063e26e606dbf81b6 to your computer and use it in GitHub Desktop.
Optimized version of https://github.com/nickdrewe/traditional-or-simplified, licensed MIT
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const mapping = | |
| "S......S..S.S......SSSS.T..S.SSTS..S.S...S...S.....S..SS.........SS..S...S...S...........SS....S.........SS............T...T......S....SS.S......STS...T........S.S........S..S..S......S.....S........S..S.S......................S.S..........S...............................SSSSS..SSS...SSSS..SS...........................T...........S....TS.........S.S................................T...............T.........S..S.SSSSSS.S.........T..........TT.............................T..S..S.SSS..S..................T.....T..T.T.....T.........................T..............S...S..........T..................................S.......TT.....S.TSS.................T....T.TT...........S.SSS...T.T...TTT.T......T...T..T...T.......T...................T..T................T......T.T.T...TT......T...TT..T......T..........T.......T....T..TTT..S............T....ST...ST..S............T.T......S..SS....S.S.S...S...S.TS.T.S............S.SS.....S.......T....S..SS.S.....S....S...S.S..S..ST.S.S.........ST...S...S......S.S.S.T.........SS..S.............S....S.....SSSS....S....T....TSSS........S......S.SS.S.T..T........SS.....T...T.T.......S.S......T.....TT.............TT..TTTT.TT...T...........SS..SS.....S........SSS...........S.T.........S....S....T...TS..TT...T......T.......T.T.T..T..T....S.....................................S......TS..T........SS....T.............SS....TSS...........S.S..S...S........S.....ST......S..SS..S.SSS.......S...T........SS..S.SS...TS...T.T..........S..ST..SS....S....S......SS......S.T.......S...........SS.S...S...S............S...TS.S.S...........S....S...S..S...TS.............T...............SS.SSSSS.SS....................T...S......T..................S....S....S.S.S......S...S...........S...S...T...............SS...SSSSS.S.S..SS.S.TT.................................T................T....TS.S..SSSSS..........................S...............T..............TT..T....S....SSS.S...S...S.................................T...............T.T.T...T....S.....SS.......TT..T...T...........T..............T.ST......S..T......................T......T.TTS...T.......S....T....TTTS...T..T....T.......T.............T........ST..T....TT........T..T.T...T...S...T......T....T...T....T.............S..T.T......S..TTT.T.........TTT..T..TT.......T................S.......T..S...S..SS.......SS.......ST...T.T....TT..T.T..........S.....................SS.......S............S.......S..SSSSSSS...............T...................SSS...........S...................SS.S.S.S.S.SS.ST..................................SSS..S...T.............S.......T.............T....T......S...ST......T.................T.T..T..........T......S...TT...T..T....T..T.......T.T................T...T................T..............S..T.................T....T..T.......T........T...T.......T....TTT...TT..T......TT...STS..S..S.S.T.TT......S..S.....S.................ST.T..T..............S...SSS...T..SS........S....T.....S..............S.T.TT...T.......................SSS....................T...........SSS.................................T.........S....S.......................................SSSSS..................T.....................SS.S............T....................................T......T.....SSSS................................................T..S....T............TT.............T......S.S..T.........................S...T.....T...T........T..TT............T.......T..T.....T.....T......ST...................T............S............S...ST............T......T.S...........................SS.SS........SS..T..............SS..............................S....T...TT.T.TT........TT..S.SS..S......STT..T.TT.....S...S....S.........S............S..TS....S....SS..T..SS..T...........T..T.S..ST.T.S.T...TT.................S.SS...................SSSSSS.....T...........S.....S.........S.S...SS............................S.SSSS.............T.T......T....SSS........T.........T........T.T..........S.....T............................T.......S.SS.S......................S............T..T..T............T..T........T.T....TT.....T.....T...T.T.TT.......S.....T......T.T....................S.....ST........T.......S...S..S......SS.......S...S........TSS...T..S..S.T..T....SS...T.ST...................TT.....ST...T.......TT.....S...S..T....TS....S.S.........SS.SS....S....SS...........T................S....TT.T...T.....T...........T..T.TTTTT.....TS.T......T............S.SS............................S....S....S....S...T.T.T.SS...........T.T...T.T...SS.S...T.....ST....TS....................S........S.......T....T...S........T.TS.......................T............S........S.......S...............S......................S.SSSSSSS.....................S........................T.....SS..S...........S.........................T.............S..S.SSSSSS.......T................................S....SSS.S.....TT...................S......................T.....SSS.SSSSS.TT........T.................S.............TT...S...S.S.T...........T..T......TS...........T.T...S......T.T....T...T......TT.ST....T..T...........T.......T.....TTT...T...T.........T......T..T...T...TS...............T.T..TT...SS.S..........T...T....T.........T...TTT.T.T.T.T.....ST...S...S....T..SS..............T.T..S...T.T...TS......................S..S...............T....SS.SSSS...S.........................................SS...SSSS.SS...............................S.....T..............T....S..SS.SSSSS..................S.....S.......................SSSSSSSSSSSSS.......................T...............................SS.SSS.......T..S............S.......TT..................T.T.T.......................SS..SS.S.S...T.........................TT..................T.........S....S.SSSS..S.......T........TT..............................T...S.........SSSSS.S......T..........T..T...T...........T...T..T....T........S...T......TTS.T......T....T...T.T.....T......TT.S.SS.ST..TT.T..T..T..TT........T.....T...S.T...........T..TTTT.T..T..TTT.T.....T.T........T..S.T.T..T.TTT....TTT.....T.T...............................S..........TT..S....................S....T..T.........TT.......S.......S.T.S.................S..TS.........T....T...................................S......S..............SSS................................S..................................SSS...T......T.S......SSSSS......T....................................S.....TT..............T.........T....S...T........................T.TT.T............T.........T.......T...T...........T..........T...................................T.....S.S....S.....S.....S.SS.............................S...S..SS......ST............S..S..S.........................S...SS.S.SS.SS.S..............................................S...S....................T.......S..S....S.SSSSSS.SS.S....S................................S......S...........S.....................SSSSSSSSSS..........................................T...T....T.T......S.....................S.S.S.S.T.................TT.......T.......T....T.....T...T..........S.............T...............SS...S........S............................T........T....................T....T.......T......S.......S..SSS................................T...T................T.T.........T.T............SS...SS......TT..........T.............TT..T.............T.....T....T....T......S....S.S......TTT.............T..T...................T..T..S.....T.....S.......S..S....T.......T......S...T.......T..T..TT.....S....T....T....T..T..T....T...............T......TT.TTT.....T.TT.TTT......T....T..T........T.....T....T..T...T.......T...S.S..S.....................T................T.T..............T.T................T.....T...S..T.S.....S...S......SS....T.S...T..S..T......T..TT..T.S.....T.T...TSS...T..............S...S.......S...................S.........T.......ST...T.......S.............ST.....S.TT.....ST.....T.............S.S...............T.......S..S....................ST.......................TS...........S.S.SSSSSSSS..........S...........T............................S...........S...........SSS.SSSSS..S................S...................................T.....S......S.SSSSSSS.SSSSSSSSS...................................T........S....T....S..............S.SSSSSSSS.SSSS..................T...S.................T.......T..........T..TTT..........TT...T...............S.SSS.SS..S.SS.T.T......T...T..S..T...........S.....T...........T...................T....T...T.......T..............SS...S.SSST.............T.....TT.............T..T....T................TT......T.T........S..S...SSSSS.SSS.SSS.T..T..T.....T..T..TT.T........T...............T.......TTS.......T.....T..T..T......T.T....SS...S.S...T..T......TS.......T..........TT...S..T.......TT.....TT...............T....S...T...T.T..T....T..T...............T.T.............SS.TT..T...T..T....T......T....TT........T.T.T......TT..T.T...T.....T..T....T.TT.....TTT.........T...........T....TT..........S.T......T....T.....TT....T...S.S.....S.......TSSS........S............S.....SS...........................ST.SS...SSS...........T...........S...S......SSSS.SSS......T................................SS.S........T...................................ST..T........T......T........T..T...T..T......S..............................T....TS........................TT...........T..T......TT........T......T..T..T......T......T......T.......T.T..............T..T..........T.................T...S.....S..T...TT......T......S..........T.............S..............S....S..T............S...........T....T...S..T....T..............SSSS......T.......S....S...............SS.............SSSSSSS......T...T.....S..........S......S...T.T.....S........SSS.S.......T....T.....T..TT........T.........................T.TT.ST.T.T..T.TT.TTT...T................S.......SSS............T.....SSSS........S..............S.....SSS..............................S.S...........T...............SSS.........................................T.S..T.........T.T......T................TT....TT.......T...SS...............S.T....S..................T.T..T....T....T....T.......T.T..........T....T..S.T.....T...................SS............................T........T............T..................S.....S.........S.......................T....T........T....T.S.S.T................T..T...........SS.......SSS..........S.SS.S..S...................SS........S...S..T..............S.SS........S.............T..SS....T.T.....T...SS.....T..T.....T..SS..T...........T...SS..T...TT.T..............T.....ST.TTST....T.STTTSTTT.........T....................S........T.....................TSS.....T.T....................SSS....SSS...T.T..T.TT..T.....................................S.......................TS.....S.................T.SS..............SS..........T.T...................................................S.....T.....T..........S..................T......................T......T................S...T......S......TSSSS....................SS..S.S.............................SS..S.SS...S...............SSS.SS.T.......T...T.....ST.......S.....................S.............SS............T...T...S......TST.T....................T.......ST........T...T.......T.............T......T.........T..........T............T...TTT....T..........S.................S...................S............S.......SS......TS...SS.......TT......T................T...T...T.TT.........S...T...S..S.T....S.................................SS............SS......TS.T.....S................T...S..........T..T.S............T...........TTT..S..............TTT......T...T.........S...........S.........S...S..........SS.......SS..TT..STT......T...T.........TT.T..T...........S.......S.......................T............S.......S........SS....................................S.S.S.......T......T...S........SSSS.........T.................S....S.S..........T...T...S..................SSSSSS....................T...T....T.T.....S.S................T....T....S..S.T............T............T........S.......T..T.T.......T...........T.T...TT..S.T........T............T..T..TT........TT.T.T...T.S......SS...............................SS......S.....S...S......T...........S.....S..T..................TT........T..........T.T.T.T..S..T.T.T.TTTTTT.T.T..T..TTTTTTTTTTT...T.....S......T.TT.T.T...TT.T..TT.T.T.T.......TTT....T.....T.TT..TT...T.T.......TTTT...S.T.......T.T..T.T...T..T...T........T.T.T.TT........TT.TTTT.T...TTTT.TTT....T..T..TT......TTT..TTTT..TT.TT.T..T.TT..T..T.TT.T.T..T..............TTTT....TT...T.T...T.TTT...T.......T.TT..TT..TTT.T...TT....T.TT.T.........T.TT....T...T..TT......TT..T.TT..T.....T..TTT........TT.T.T..T...T..T.T...T..SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.......T....S.........T....S.....S..S.......S.............T...ST.T.........S...TT.T..T...................S.S...T..TT........................................T.....SSS.................T............T...T....................................S....S....T.T.........S..S......S........SSS......S.T.......T..........SS....TT.TT.TTT.T...TT....S.T..........................S...S..................S......SSSS....S.....................S..........SS.SS..........S..............T..TST..S.SSS.SS.....ST...............T.....S....S.ST................S.S.T.......T.S........T....T....T.S.....T....T..SSSS..T.T.............S...T....T.....T........T...................TTT.........T...T.T..T.....T.T.S..TT.T..T..T.............................STTTT........................S............SS.........S.............................T..........T.T....T....ST.S....TSS.......S.....S..............S....S.........S....................T.....S.....SS..SSSSS........S..............T.................S.........S..........SS.S..SS.................S..........T...................S...T.....S........SSSS.SSSS.SSSSSSSSSSSSS.....................S....T...........T.....S.....T....T.........SSSS.SSSSS.S..................................................T.......................T..T...............S..S......SSSSS...T........T...................T........T....T............T.T..........S.....T...............S.S.SS.......T.........T.............................T...T..........T.................S.SS..S.SST......TT....T........T................................T....T.TT......T.........S.SS.S....T....T.......T...T..T..T.........T......TT..T....S.S..T................T.T.T....T..T...T......T......T..T....S...........T......S...........TT....S.........T.......T....T...........T..TT.....T...T.TT..TT..............T...T...T..........T............T....T...............S.S...T....STT..T.......T...SS.ST.............SSSSSS..................S.......S..............S.............................S...SS..............................S.SSSSS.....TT..........T..............S.S.........S.....................................SSS....S......T.........T......T.................T...S.S.S...T.........................T...T.....S..................T...T....T...T.....TS...................T........T..T..T...T....T.........TT......T..TT..T..........T...T....T........T....T....T.........S.............TS......T.T.......S......S.S.....................SSS.....................S.T..............S.S.....................SS.S......T............TT...TSSSS.......................T.........T....T...........T..S......................TTS...T..T.....S....TT.......T.....ST......T..T...T.....T....T..T.T......................T..TT...T..T.T........T...TT...T.T..T..T....T..T..T.TTSSSSSSSSSSSSSSSSS............S.......S........S....T.T.T........TTT....T.T.T.T.T.TT.TT.T..T.T.T...T.T...TT..T...T..T.T...T......T....T.......T.T.T.TTTTT..T..TSTTTT..T..T.TTTT.TTTT.T......T..T....TTTT.SS.TT...TT..T..T.T...T.TT.TTTT.T.T.....T.T...T..T..T..T..T.T..T.T.T.T.T.TT...TT...TTTT..TT.T.TT...T.TT..T.T..TTT.T.T.T.TTT.TT....T...T.T...T.TT.T.T.T..T.......T..TT......T.....T....T..........T....TT......T.TTT.T..............T...TT...T..TT....TT.T.........TT..T...TT.TT...T.T.T.SSSSSSSSSSSS.SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.SSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS................T.....T.T...T.......................T.S.......T............................T.........TTTTTT....TTTTTT..TT.TTT.TTT.TTTT.TTTTTTT.TT.T......TTT.T...TT.T.T.TTTTT.TT..T.TT......TT....TTTTT.....TT.TT....T.TT..TT.TT...T.SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS......S.T........SS....................S.........T...T..............T........ST.....S..........SS.................S.......S..T...................SSSSS.S..............S.S...T.........................S.S..S....T.......................T....SS..T..........T..TT...........S.........T....S..T......TTT.T.S.TTT.T....T.S....T...TT...T....S................T.........TTTT...TT.T......T...T....T......T......T.....TTTTT.T....T.T.TTTT.......T.TT.....TTTTT.....TT..TT.T..T...T....T..T..TTT.T.TTT..T...TT.....T..........T.TT.T.SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...S.......T..S.S.TTT..T......S...SS..S.....SS.......S.......SS.SSSSS.........S.........S.....S........S......SS.......S..T...T.........T..S...........T........S..............TT..T.....TT.S.T..TTT.T....S...T........T....TT.T.T....T..T..T..T....TT..S.........S..............S.S..........SSS.....S..S..........SSS.S...........T....T.SS.............T..S.............T..T........T.T.T................T.....T..T.T.T.T...T.............T....................S........S..........S...........SSS...T........................T.T............TT....T..............TT.T.T....STS......TTT.TTT...T.....TT..T.T...........T.T.TT.....TT.TT...TT...T..TTT.TT........T....T.TTT........T..TT..TTTT..TTTT....S..TT...T...T...T.T..TT..T.....T.T.....TT......S.T.T.TT...TT..T.T.......T...T.T..T.T.TTT...T..T.TT.TTTTT.S..T.T...T...TT....T.T.T.T....T..T..T......T...T.T...TTTT.T.T....TTT....T.T...T....T..T.TTT.......T.T..T..TTT....TTTT...T.TT.T..TT...T....T.....S..T....TTT..T.T......T...T.TT....T...TT......T...T....TT...T...T...T.T.....T.........T.T.T..T.....TTT..TT..T.T.T.T..T...........T...T...TT...TT..TT.....TT...T.TT.TT.T...T.......T....T.T.T...T.....T.......T....T.TTT...TT......T.....TT...T..T...TT.TT.T.T....T....T.....T.......T.T.........T.T..T.T.......T..T.T....T.T..TTTT.T....SSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.SSSS.SSSSSS..S.SSSSSSSSSSSSSSSSSS.SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.SS.S.SSSSSSSSS.SS.SSSSSSSSSSSSSSSSSSSSSSSSS..SSSSS.SSSSSSS..SSS.SSSSSSTSSSSSSSSSSSSSSSSSSSSS.ST.......ST.TT..T.TT.TT.TT.TTTT...T........T.T.T..TT.TTT...T....T..T.TTTTT...T....T.TTTT..T.TTTTT.....T.T.TT..TT..SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...S..........T........SSSS..............SSSSS...........S..T....T.....T...SSS......T..T....T....T...........TT...TSS....T.....T............T.T......T..T.S.T..T.SS............T...S......T..T.TT.T.S.TT..............TS.......T..S..S.......S.............................T.....S...............T....T.T.T.TT.........S.....ST.T.....S..ST.T.......................T..............T.SS............................S....S........T...T.T.....T.TTT.....T.....T..TTT.......SSSSSSS........S.....T...T.TTT.TTTT.T.T.TTTTTT...TT...T....T..T.T......TT.T.T.T..TTT.T..........T.....TTTT..TT....TT.T..T...T..T.T...TT..TTT.TTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSST....TTT......T.T.TTT...T...T.T.......SSSSSSSSSSSSST..S....T.T..STTT.T.T..T.T.......TTTT...TTT...TT.TSTT.TTT.TT.T..TT.T..T......T........T.T..TT..T.T.TT.T.T.T..TTTTT....TT....T....T.T...T.SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS......................TTT..T.TT....T.......T..............TTT.TT..TT.T.T.T..T..........T..TT......T......T.TT..T......TTTT......T..T..........T......T.TT.T.....TTT.....T.TTTTTT....T.TT.T.....T.T..TT...T..T.TTT...TTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.............................S.....SS..T..T.TTT..........................................T....T............S..............T..T.TTT....T..T.....................S.S....T.........T.TT......T.....T......T....T..T..T......T.T......TT.T..TTTT......T.T.T.......T...TT.TT....T..T...T.....TT.....T.TT.......T.TTTT...T.T...TT.T..TT.TT....T...TT.T.....T.T.TTT....TT...T.T..TT........T..TT..T.T..TT...TT..T.T.T.T.T.TT.T...T..T..TT........T.T.TTT....T.TT..TT..TT....T.T.......TT.T.SSSSSSS.SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.SSSSSSSSS.T.T.T........TTT.T...............TT.T........T..T.....T.TTT...T..T.T...T..TT...T......T...T..TT............TTTT........TT..TT........T.T.TT..T....T...............T.TT........T....T.T......T..TT...T..T..T..T.T....TTTT..T.TT.......T........T..TT.TT..........TT....T...T..TT....TTT............T....T..T.....T..T.TT.TTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.SSSSSSSSSSSSSSSSSSSS.SSSSSST...TT.TTS......T.................T.............TS..T...........T..S...T......TS....S..T.................T..S......TSS.......T.T.TT.....TST..T....T.T.SSS.........S............................T....S..........S..T..TT..TTSST.TT.T.T..T..TTT....TT..T.T.....T...TT.......SSSSSSSSSSSSSST..T...TT...SSST.."; | |
| // First codepoint | |
| const offset = 19975; | |
| function isTraditional(str) { | |
| return detect(str).detectedCharacters === "traditional"; | |
| } | |
| function isSimplified(str) { | |
| return detect(str).detectedCharacters === "simplified"); | |
| } | |
| function detect(str) { | |
| var result = { | |
| inputLength: str.length, | |
| simplifiedCharacters: 0, | |
| traditionalCharacters: 0, | |
| }; | |
| for (var i = 0; i < str.length; i++) { | |
| switch (mapping[str.substr(i, 1).codePointAt(0) - offset]) { | |
| case "S": | |
| result.simplifiedCharacters++; | |
| break; | |
| case "T": | |
| result.traditionalCharacters++; | |
| break; | |
| } | |
| if (i == str.length - 1) { | |
| if (result.simplifiedCharacters > result.traditionalCharacters) { | |
| result.detectedCharacters = "simplified"; | |
| result.detectionRate = | |
| (result.simplifiedCharacters / result.traditionalCharacters) | 1; | |
| } else if (result.simplifiedCharacters < result.traditionalCharacters) { | |
| result.detectedCharacters = "traditional"; | |
| result.detectionRate = | |
| (result.traditionalCharacters / result.simplifiedCharacters) | 1; | |
| } else { | |
| result.detectedCharacters = "unknown"; | |
| result.detectionRate = 0; | |
| } | |
| return result; | |
| } | |
| } | |
| } | |
| module.exports = { | |
| isTraditional, | |
| isSimplified, | |
| detect, | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment