mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
restricting host access
This commit is contained in:
@@ -8419,428 +8419,6 @@ xxi,丶
|
||||
xr,。
|
||||
xxr,〇
|
||||
xxxxx,〇
|
||||
za,‘
|
||||
za,’
|
||||
za,“
|
||||
za,”
|
||||
za,〔
|
||||
za,〕
|
||||
za,〈
|
||||
za,〉
|
||||
za,《
|
||||
za,》
|
||||
za,…
|
||||
za,「
|
||||
za,」
|
||||
za,『
|
||||
za,』
|
||||
za,〖
|
||||
za,〗
|
||||
za,【
|
||||
za,】
|
||||
za,№
|
||||
za,☆
|
||||
za,★
|
||||
za,○
|
||||
za,●
|
||||
za,◎
|
||||
za,◇
|
||||
za,◆
|
||||
za,□
|
||||
za,■
|
||||
za,△
|
||||
za,▲
|
||||
za,※
|
||||
za,→
|
||||
za,←
|
||||
za,↑
|
||||
za,↓
|
||||
za,〓
|
||||
zb,ⅰ
|
||||
zb,ⅱ
|
||||
zb,ⅲ
|
||||
zb,ⅳ
|
||||
zb,ⅴ
|
||||
zb,ⅵ
|
||||
zb,ⅶ
|
||||
zb,ⅷ
|
||||
zb,ⅸ
|
||||
zb,ⅹ
|
||||
zba,⒈
|
||||
zba,⒉
|
||||
zba,⒊
|
||||
zba,⒋
|
||||
zba,⒌
|
||||
zba,⒍
|
||||
zba,⒎
|
||||
zba,⒏
|
||||
zba,⒐
|
||||
zba,⒑
|
||||
zba,⒒
|
||||
zba,⒓
|
||||
zba,⒔
|
||||
zba,⒕
|
||||
zba,⒖
|
||||
zba,⒗
|
||||
zba,⒘
|
||||
zba,⒙
|
||||
zba,⒚
|
||||
zba,⒛
|
||||
zbb,⑴
|
||||
zbb,⑵
|
||||
zbb,⑶
|
||||
zbb,⑷
|
||||
zbb,⑸
|
||||
zbb,⑹
|
||||
zbb,⑺
|
||||
zbb,⑻
|
||||
zbb,⑼
|
||||
zbb,⑽
|
||||
zbb,⑾
|
||||
zbb,⑿
|
||||
zbb,⒀
|
||||
zbb,⒁
|
||||
zbb,⒂
|
||||
zbb,⒃
|
||||
zbb,⒄
|
||||
zbb,⒅
|
||||
zbb,⒆
|
||||
zbb,⒇
|
||||
zbc,①
|
||||
zbc,②
|
||||
zbc,③
|
||||
zbc,④
|
||||
zbc,⑤
|
||||
zbc,⑥
|
||||
zbc,⑦
|
||||
zbc,⑧
|
||||
zbc,⑨
|
||||
zbc,⑩
|
||||
zbd,㈠
|
||||
zbd,㈡
|
||||
zbd,㈢
|
||||
zbd,㈣
|
||||
zbd,㈤
|
||||
zbd,㈥
|
||||
zbd,㈦
|
||||
zbd,㈧
|
||||
zbd,㈨
|
||||
zbd,㈩
|
||||
zbe,Ⅰ
|
||||
zbe,Ⅱ
|
||||
zbe,Ⅲ
|
||||
zbe,Ⅳ
|
||||
zbe,Ⅴ
|
||||
zbe,Ⅵ
|
||||
zbe,Ⅶ
|
||||
zbe,Ⅷ
|
||||
zbe,Ⅸ
|
||||
zbe,Ⅹ
|
||||
zbe,Ⅺ
|
||||
zbe,Ⅻ
|
||||
zc,ぁ
|
||||
zc,あ
|
||||
zc,ぃ
|
||||
zc,い
|
||||
zc,ぅ
|
||||
zc,う
|
||||
zc,ぇ
|
||||
zc,え
|
||||
zc,ぉ
|
||||
zc,お
|
||||
zc,か
|
||||
zc,が
|
||||
zc,き
|
||||
zc,ぎ
|
||||
zc,く
|
||||
zc,ぐ
|
||||
zc,け
|
||||
zc,げ
|
||||
zc,こ
|
||||
zc,ご
|
||||
zc,さ
|
||||
zc,ざ
|
||||
zc,し
|
||||
zc,じ
|
||||
zc,す
|
||||
zc,ず
|
||||
zc,せ
|
||||
zc,ぜ
|
||||
zc,そ
|
||||
zc,ぞ
|
||||
zc,た
|
||||
zc,だ
|
||||
zc,ち
|
||||
zc,ぢ
|
||||
zc,っ
|
||||
zc,つ
|
||||
zc,づ
|
||||
zc,て
|
||||
zc,で
|
||||
zc,と
|
||||
zc,ど
|
||||
zc,な
|
||||
zc,に
|
||||
zc,ぬ
|
||||
zc,ね
|
||||
zc,の
|
||||
zc,は
|
||||
zc,ば
|
||||
zc,ぱ
|
||||
zc,ひ
|
||||
zc,び
|
||||
zc,ぴ
|
||||
zc,ふ
|
||||
zc,ぶ
|
||||
zc,ぷ
|
||||
zc,へ
|
||||
zc,べ
|
||||
zc,ぺ
|
||||
zc,ほ
|
||||
zc,ぼ
|
||||
zc,ぽ
|
||||
zc,ま
|
||||
zc,み
|
||||
zc,む
|
||||
zc,め
|
||||
zc,も
|
||||
zc,ゃ
|
||||
zc,や
|
||||
zc,ゅ
|
||||
zc,ゆ
|
||||
zc,ょ
|
||||
zc,よ
|
||||
zc,ら
|
||||
zc,り
|
||||
zc,る
|
||||
zc,れ
|
||||
zc,ろ
|
||||
zc,ゎ
|
||||
zc,わ
|
||||
zc,ゐ
|
||||
zc,ゑ
|
||||
zc,を
|
||||
zc,ん
|
||||
zd,ァ
|
||||
zd,ア
|
||||
zd,ィ
|
||||
zd,イ
|
||||
zd,ゥ
|
||||
zd,ウ
|
||||
zd,ェ
|
||||
zd,エ
|
||||
zd,ォ
|
||||
zd,オ
|
||||
zd,カ
|
||||
zd,ガ
|
||||
zd,キ
|
||||
zd,ギ
|
||||
zd,ク
|
||||
zd,グ
|
||||
zd,ケ
|
||||
zd,ゲ
|
||||
zd,コ
|
||||
zd,ゴ
|
||||
zd,サ
|
||||
zd,ザ
|
||||
zd,シ
|
||||
zd,ジ
|
||||
zd,ス
|
||||
zd,ズ
|
||||
zd,セ
|
||||
zd,ゼ
|
||||
zd,ソ
|
||||
zd,ゾ
|
||||
zd,タ
|
||||
zd,ダ
|
||||
zd,チ
|
||||
zd,ヂ
|
||||
zd,ッ
|
||||
zd,ツ
|
||||
zd,ヅ
|
||||
zd,テ
|
||||
zd,デ
|
||||
zd,ト
|
||||
zd,ド
|
||||
zd,ナ
|
||||
zd,ニ
|
||||
zd,ヌ
|
||||
zd,ネ
|
||||
zd,ノ
|
||||
zd,ハ
|
||||
zd,バ
|
||||
zd,パ
|
||||
zd,ヒ
|
||||
zd,ビ
|
||||
zd,ピ
|
||||
zd,フ
|
||||
zd,ブ
|
||||
zd,プ
|
||||
zd,ヘ
|
||||
zd,ベ
|
||||
zd,ペ
|
||||
zd,ホ
|
||||
zd,ボ
|
||||
zd,ポ
|
||||
zd,マ
|
||||
zd,ミ
|
||||
zd,ム
|
||||
zd,メ
|
||||
zd,モ
|
||||
zd,ャ
|
||||
zd,ヤ
|
||||
zd,ュ
|
||||
zd,ユ
|
||||
zd,ョ
|
||||
zd,ヨ
|
||||
zd,ラ
|
||||
zd,リ
|
||||
zd,ル
|
||||
zd,レ
|
||||
zd,ロ
|
||||
zd,ヮ
|
||||
zd,ワ
|
||||
zd,ヰ
|
||||
zd,ヱ
|
||||
zd,ヲ
|
||||
zd,ン
|
||||
zd,ヴ
|
||||
zd,ヵ
|
||||
zd,ヶ
|
||||
zf,Α
|
||||
zf,Β
|
||||
zf,Γ
|
||||
zf,Δ
|
||||
zf,Ε
|
||||
zf,Ζ
|
||||
zf,Η
|
||||
zf,Θ
|
||||
zf,Ι
|
||||
zf,Κ
|
||||
zf,Λ
|
||||
zf,Μ
|
||||
zf,Ν
|
||||
zf,Ξ
|
||||
zf,Ο
|
||||
zf,Π
|
||||
zf,Ρ
|
||||
zf,Σ
|
||||
zf,Τ
|
||||
zf,Υ
|
||||
zf,Φ
|
||||
zf,Χ
|
||||
zf,Ψ
|
||||
zf,Ω
|
||||
zf,α
|
||||
zf,β
|
||||
zf,γ
|
||||
zf,δ
|
||||
zf,ε
|
||||
zf,ζ
|
||||
zf,η
|
||||
zf,θ
|
||||
zf,ι
|
||||
zf,κ
|
||||
zf,λ
|
||||
zf,μ
|
||||
zf,ν
|
||||
zf,ξ
|
||||
zf,ο
|
||||
zf,π
|
||||
zf,ρ
|
||||
zf,σ
|
||||
zf,τ
|
||||
zf,υ
|
||||
zf,φ
|
||||
zf,χ
|
||||
zf,ψ
|
||||
zf,ω
|
||||
zf,︵
|
||||
zf,︶
|
||||
zf,︹
|
||||
zf,︺
|
||||
zf,︿
|
||||
zf,﹀
|
||||
zf,︽
|
||||
zf,︾
|
||||
zf,﹁
|
||||
zf,﹂
|
||||
zf,﹃
|
||||
zf,﹄
|
||||
zf,︻
|
||||
zf,︼
|
||||
zf,︷
|
||||
zf,︸
|
||||
zf,︱
|
||||
zf,
|
||||
zf,︳
|
||||
zf,︴
|
||||
zg,А
|
||||
zg,Б
|
||||
zg,В
|
||||
zg,Г
|
||||
zg,Д
|
||||
zg,Е
|
||||
zg,Ё
|
||||
zg,Ж
|
||||
zg,З
|
||||
zg,И
|
||||
zg,Й
|
||||
zg,К
|
||||
zg,Л
|
||||
zg,М
|
||||
zg,Н
|
||||
zg,О
|
||||
zg,П
|
||||
zg,Р
|
||||
zg,С
|
||||
zg,Т
|
||||
zg,У
|
||||
zg,Ф
|
||||
zg,Х
|
||||
zg,Ц
|
||||
zg,Ч
|
||||
zg,Ш
|
||||
zg,Щ
|
||||
zg,Ъ
|
||||
zg,Ы
|
||||
zg,Ь
|
||||
zg,Э
|
||||
zg,Ю
|
||||
zg,Я
|
||||
zg,а
|
||||
zg,б
|
||||
zg,в
|
||||
zg,г
|
||||
zg,д
|
||||
zg,е
|
||||
zg,ё
|
||||
zg,ж
|
||||
zg,з
|
||||
zg,и
|
||||
zg,й
|
||||
zg,к
|
||||
zg,л
|
||||
zg,м
|
||||
zg,н
|
||||
zg,о
|
||||
zg,п
|
||||
zg,р
|
||||
zg,с
|
||||
zg,т
|
||||
zg,у
|
||||
zg,ф
|
||||
zg,х
|
||||
zg,ц
|
||||
zg,ч
|
||||
zg,ш
|
||||
zg,щ
|
||||
zg,ъ
|
||||
zg,ы
|
||||
zg,ь
|
||||
zg,э
|
||||
zg,ю
|
||||
zg,я
|
||||
zxaa,
|
||||
zxab,,
|
||||
zxac,、
|
||||
|
||||
@@ -264,7 +264,7 @@ let reset = () => {
|
||||
states.candidates = ""
|
||||
}
|
||||
let getCandidatesUsingBuf = () => {
|
||||
states.candidates = states.dict.get(states.buf) // comma-separated values
|
||||
states.candidates = states.dict.getCangjie(states.buf) // comma-separated values
|
||||
states.code = 1 + (states.candidates.length == 0)
|
||||
// console.log(`cangjie in, buf: ${states.buf}, candidates: ${states.candidates}`)
|
||||
return `${states.buf},${states.candidates}`
|
||||
|
||||
@@ -264,7 +264,7 @@ let reset = () => {
|
||||
states.candidates = ""
|
||||
}
|
||||
let getCandidatesUsingBuf = () => {
|
||||
states.candidates = states.dict.get(states.buf) // comma-separated values
|
||||
states.candidates = states.dict.getCangjie(states.buf) // comma-separated values
|
||||
states.code = 1 + (states.candidates.length == 0)
|
||||
// console.log(`cangjie in, buf: ${states.buf}, candidates: ${states.candidates}`)
|
||||
return `${states.buf},${states.candidates}`
|
||||
|
||||
@@ -47,7 +47,7 @@ object IME {
|
||||
private val highLayers = HashMap<String, TerrarumInputMethod>()
|
||||
|
||||
private val context = org.graalvm.polyglot.Context.newBuilder("js")
|
||||
.allowHostAccess(org.graalvm.polyglot.HostAccess.ALL)
|
||||
.allowHostAccess(org.graalvm.polyglot.HostAccess.EXPLICIT)
|
||||
// .allowHostClassLookup { it.equals("net.torvald.terrarum.gamecontroller.IMEProviderDelegate") }
|
||||
.allowHostClassLookup { false }
|
||||
.allowIO(false)
|
||||
|
||||
@@ -2,6 +2,7 @@ package net.torvald.terrarum.gamecontroller
|
||||
|
||||
import net.torvald.terrarum.App.printdbg
|
||||
import net.torvald.util.SortedArrayList
|
||||
import org.graalvm.polyglot.HostAccess
|
||||
import java.io.File
|
||||
import java.io.FileReader
|
||||
|
||||
@@ -9,6 +10,7 @@ class IMEProviderDelegate(val ime: IME) {
|
||||
|
||||
private val dictionaries = HashMap<String, IMEDictionary>()
|
||||
|
||||
@HostAccess.Export
|
||||
fun requestDictionary(filename: String): IMEDictionary {
|
||||
return dictionaries.getOrPut(filename) { IMEDictionary(filename) }
|
||||
}
|
||||
@@ -18,7 +20,7 @@ class IMEProviderDelegate(val ime: IME) {
|
||||
class IMEDictionary(private val filename: String) {
|
||||
|
||||
private val candidates = HashMap<String, String>(16384)
|
||||
private val keys = SortedArrayList<String>(16384)
|
||||
private val keys = SortedArrayList<String>(16384) // keys on the .han file are absofreakinlutely not sorted
|
||||
|
||||
private var dictLoaded = false
|
||||
|
||||
@@ -44,15 +46,36 @@ class IMEDictionary(private val filename: String) {
|
||||
loadDict() // loading the dict doesn't take too long so no need to do it lazily
|
||||
}
|
||||
|
||||
operator fun get(key: String): String {
|
||||
@HostAccess.Export
|
||||
fun getCangjie(key: String): String {
|
||||
//if (!dictLoaded) loadDict()
|
||||
|
||||
val out = StringBuilder()
|
||||
var outsize = 0
|
||||
var index = keys.searchForInterval(key) { it }.second
|
||||
|
||||
while (outsize < 10) {
|
||||
val keysym = keys[index]
|
||||
val allRelevantKeys = ArrayList<String>() // oh, oha, ohag, ohbt, ohby, ...
|
||||
for (i in 0 until 10) {
|
||||
if (index + 1 >= keys.size) break
|
||||
val keysym = keys[index + i]
|
||||
if (!keysym.startsWith(key)) break
|
||||
allRelevantKeys.add(keysym)
|
||||
}
|
||||
|
||||
// printdbg(this, "lookup key: $key")
|
||||
|
||||
// sort allRelevantKeys so that short sequences come first
|
||||
// e.g. oh, oha, ohg, ohj, ohn, ohq, ohag, ohbt, ...
|
||||
allRelevantKeys.sortWith { it, other ->
|
||||
if (it.length == other.length) it.compareTo(other)
|
||||
else it.length.compareTo(other.length)
|
||||
}
|
||||
|
||||
// printdbg(this, "predictions: (${allRelevantKeys.size}) ${allRelevantKeys.joinToString()}")
|
||||
|
||||
index = 0 // now this is an index for the allRelevantKeys
|
||||
while (outsize < 10 && index < allRelevantKeys.size) {
|
||||
val keysym = allRelevantKeys[index]
|
||||
if (!keysym.startsWith(key)) break
|
||||
|
||||
val outstr = ",${candidates[keysym]}"
|
||||
@@ -64,5 +87,5 @@ class IMEDictionary(private val filename: String) {
|
||||
|
||||
return if (out.isNotEmpty()) out.substring(1) else ""
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user