mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-16 08:36:07 +09:00
restricting host access
This commit is contained in:
@@ -8419,428 +8419,6 @@ xxi,丶
|
|||||||
xr,。
|
xr,。
|
||||||
xxr,〇
|
xxr,〇
|
||||||
xxxxx,〇
|
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,
|
zxaa,
|
||||||
zxab,,
|
zxab,,
|
||||||
zxac,、
|
zxac,、
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ let reset = () => {
|
|||||||
states.candidates = ""
|
states.candidates = ""
|
||||||
}
|
}
|
||||||
let getCandidatesUsingBuf = () => {
|
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)
|
states.code = 1 + (states.candidates.length == 0)
|
||||||
// console.log(`cangjie in, buf: ${states.buf}, candidates: ${states.candidates}`)
|
// console.log(`cangjie in, buf: ${states.buf}, candidates: ${states.candidates}`)
|
||||||
return `${states.buf},${states.candidates}`
|
return `${states.buf},${states.candidates}`
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ let reset = () => {
|
|||||||
states.candidates = ""
|
states.candidates = ""
|
||||||
}
|
}
|
||||||
let getCandidatesUsingBuf = () => {
|
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)
|
states.code = 1 + (states.candidates.length == 0)
|
||||||
// console.log(`cangjie in, buf: ${states.buf}, candidates: ${states.candidates}`)
|
// console.log(`cangjie in, buf: ${states.buf}, candidates: ${states.candidates}`)
|
||||||
return `${states.buf},${states.candidates}`
|
return `${states.buf},${states.candidates}`
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ object IME {
|
|||||||
private val highLayers = HashMap<String, TerrarumInputMethod>()
|
private val highLayers = HashMap<String, TerrarumInputMethod>()
|
||||||
|
|
||||||
private val context = org.graalvm.polyglot.Context.newBuilder("js")
|
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 { it.equals("net.torvald.terrarum.gamecontroller.IMEProviderDelegate") }
|
||||||
.allowHostClassLookup { false }
|
.allowHostClassLookup { false }
|
||||||
.allowIO(false)
|
.allowIO(false)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package net.torvald.terrarum.gamecontroller
|
|||||||
|
|
||||||
import net.torvald.terrarum.App.printdbg
|
import net.torvald.terrarum.App.printdbg
|
||||||
import net.torvald.util.SortedArrayList
|
import net.torvald.util.SortedArrayList
|
||||||
|
import org.graalvm.polyglot.HostAccess
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileReader
|
import java.io.FileReader
|
||||||
|
|
||||||
@@ -9,6 +10,7 @@ class IMEProviderDelegate(val ime: IME) {
|
|||||||
|
|
||||||
private val dictionaries = HashMap<String, IMEDictionary>()
|
private val dictionaries = HashMap<String, IMEDictionary>()
|
||||||
|
|
||||||
|
@HostAccess.Export
|
||||||
fun requestDictionary(filename: String): IMEDictionary {
|
fun requestDictionary(filename: String): IMEDictionary {
|
||||||
return dictionaries.getOrPut(filename) { IMEDictionary(filename) }
|
return dictionaries.getOrPut(filename) { IMEDictionary(filename) }
|
||||||
}
|
}
|
||||||
@@ -18,7 +20,7 @@ class IMEProviderDelegate(val ime: IME) {
|
|||||||
class IMEDictionary(private val filename: String) {
|
class IMEDictionary(private val filename: String) {
|
||||||
|
|
||||||
private val candidates = HashMap<String, String>(16384)
|
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
|
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
|
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()
|
//if (!dictLoaded) loadDict()
|
||||||
|
|
||||||
val out = StringBuilder()
|
val out = StringBuilder()
|
||||||
var outsize = 0
|
var outsize = 0
|
||||||
var index = keys.searchForInterval(key) { it }.second
|
var index = keys.searchForInterval(key) { it }.second
|
||||||
|
|
||||||
while (outsize < 10) {
|
val allRelevantKeys = ArrayList<String>() // oh, oha, ohag, ohbt, ohby, ...
|
||||||
val keysym = keys[index]
|
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
|
if (!keysym.startsWith(key)) break
|
||||||
|
|
||||||
val outstr = ",${candidates[keysym]}"
|
val outstr = ",${candidates[keysym]}"
|
||||||
@@ -64,5 +87,5 @@ class IMEDictionary(private val filename: String) {
|
|||||||
|
|
||||||
return if (out.isNotEmpty()) out.substring(1) else ""
|
return if (out.isNotEmpty()) out.substring(1) else ""
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user