LMMgr && Main // Allow dumping user dicts through terminal.

This commit is contained in:
ShikiSuen 2024-04-02 16:38:10 +08:00
parent 97a9e9aa5c
commit 67a6bb5f87
2 changed files with 38 additions and 0 deletions

View File

@ -345,3 +345,26 @@ public extension LMMgr {
}
}
}
// MARK: - 使 JSON
// JSON 便
public extension LMMgr {
@discardableResult static func dumpUserDictDataToJSON(print: Bool = false, all: Bool) -> String? {
var summarizedDict = [LMAssembly.UserDictionarySummarized]()
Shared.InputMode.allCases.forEach { mode in
guard mode != .imeModeNULL else { return }
summarizedDict.append(mode.langModel.summarize(all: all))
}
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
if #available(macOS 10.13, *) {
encoder.outputFormatting.insert(.sortedKeys)
}
guard let data = try? encoder.encode(summarizedDict) else { return nil }
guard let outputStr = String(data: data, encoding: .utf8) else { return nil }
if print { Swift.print(outputStr) }
return outputStr
}
}

View File

@ -9,6 +9,7 @@
import AppKit
import IMKUtils
import InputMethodKit
import LangModelAssembly
import MainAssembly
import Shared
import Uninstaller
@ -24,6 +25,19 @@ case 1:
print(strDumpedPrefs)
}
exit(0)
case "--dump-user-dict":
LMAssembly.LMInstantiator.asyncLoadingUserData = false
LMMgr.initUserLangModels()
LMMgr.loadUserPhraseReplacement()
LMMgr.dumpUserDictDataToJSON(print: true, all: false)
exit(0)
case "--dump-user-dict-all":
LMAssembly.LMInstantiator.asyncLoadingUserData = false
LMMgr.initUserLangModels()
LMMgr.loadUserPhraseReplacement()
LMMgr.loadUserAssociatesData()
LMMgr.dumpUserDictDataToJSON(print: true, all: true)
exit(0)
case "install":
let exitCode = IMKHelper.registerInputMethod()
exit(exitCode)
@ -60,6 +74,7 @@ case 2:
exit(0)
default: break
}
exit(0)
default: exit(0)
}