LMMgr // Conforming to PhraseEditorDelegate.
- LMMgr // Classification.
This commit is contained in:
parent
9f72ecc88a
commit
68b2b2554e
|
@ -9,6 +9,7 @@
|
||||||
import BookmarkManager
|
import BookmarkManager
|
||||||
import LangModelAssembly
|
import LangModelAssembly
|
||||||
import NotifierUI
|
import NotifierUI
|
||||||
|
import PhraseEditorUI
|
||||||
import Shared
|
import Shared
|
||||||
|
|
||||||
/// 使用者辭典資料預設範例檔案名稱。
|
/// 使用者辭典資料預設範例檔案名稱。
|
||||||
|
@ -19,13 +20,14 @@ private let kTemplateNameUserSymbolPhrases = "template-usersymbolphrases"
|
||||||
private let kTemplateNameUserAssociatesCHS = "template-associatedPhrases-chs"
|
private let kTemplateNameUserAssociatesCHS = "template-associatedPhrases-chs"
|
||||||
private let kTemplateNameUserAssociatesCHT = "template-associatedPhrases-cht"
|
private let kTemplateNameUserAssociatesCHT = "template-associatedPhrases-cht"
|
||||||
|
|
||||||
public enum LMMgr {
|
public class LMMgr {
|
||||||
|
public static var shared = LMMgr()
|
||||||
public private(set) static var lmCHS = vChewingLM.LMInstantiator(isCHS: true)
|
public private(set) static var lmCHS = vChewingLM.LMInstantiator(isCHS: true)
|
||||||
public private(set) static var lmCHT = vChewingLM.LMInstantiator(isCHS: false)
|
public private(set) static var lmCHT = vChewingLM.LMInstantiator(isCHS: false)
|
||||||
public private(set) static var uomCHS = vChewingLM.LMUserOverride(
|
public private(set) static var uomCHS = vChewingLM.LMUserOverride(
|
||||||
dataURL: Self.userOverrideModelDataURL(.imeModeCHS))
|
dataURL: LMMgr.userOverrideModelDataURL(.imeModeCHS))
|
||||||
public private(set) static var uomCHT = vChewingLM.LMUserOverride(
|
public private(set) static var uomCHT = vChewingLM.LMUserOverride(
|
||||||
dataURL: Self.userOverrideModelDataURL(.imeModeCHT))
|
dataURL: LMMgr.userOverrideModelDataURL(.imeModeCHT))
|
||||||
|
|
||||||
public static var currentLM: vChewingLM.LMInstantiator {
|
public static var currentLM: vChewingLM.LMInstantiator {
|
||||||
switch IMEApp.currentInputMode {
|
switch IMEApp.currentInputMode {
|
||||||
|
@ -599,6 +601,7 @@ public enum LMMgr {
|
||||||
|
|
||||||
// The new FolderMonitor module does NOT monitor cases that files are modified
|
// The new FolderMonitor module does NOT monitor cases that files are modified
|
||||||
// by the current application itself, requiring additional manual loading process here.
|
// by the current application itself, requiring additional manual loading process here.
|
||||||
|
if #available(macOS 10.15, *) { FileObserveProject.shared.touch() }
|
||||||
loadUserPhrasesData(type: .thePhrases)
|
loadUserPhrasesData(type: .thePhrases)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -727,3 +730,53 @@ public enum LMMgr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension LMMgr: PhraseEditorDelegate {
|
||||||
|
public var currentInputMode: Shared.InputMode { IMEApp.currentInputMode }
|
||||||
|
|
||||||
|
public func openPhraseFile(mode: Shared.InputMode, type: vChewingLM.ReplacableUserDataType, app: String) {
|
||||||
|
Self.openPhraseFile(fromURL: Self.userDictDataURL(mode: mode, type: type), app: app)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func consolidate(text strProcessed: inout String, pragma shouldCheckPragma: Bool) {
|
||||||
|
vChewingLM.LMConsolidator.consolidate(text: &strProcessed, pragma: shouldCheckPragma)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func checkIfUserPhraseExist(userPhrase: String, mode: Shared.InputMode, key unigramKey: String) -> Bool {
|
||||||
|
Self.checkIfUserPhraseExist(userPhrase: userPhrase, mode: mode, key: unigramKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func retrieveData(mode: Shared.InputMode, type: vChewingLM.ReplacableUserDataType) -> String {
|
||||||
|
Self.retrieveData(mode: mode, type: type)
|
||||||
|
}
|
||||||
|
|
||||||
|
public static func retrieveData(mode: Shared.InputMode, type: vChewingLM.ReplacableUserDataType) -> String {
|
||||||
|
vCLog("Retrieving data. Mode: \(mode.localizedDescription), type: \(type.localizedDescription)")
|
||||||
|
let theURL = Self.userDictDataURL(mode: mode, type: type)
|
||||||
|
do {
|
||||||
|
return try .init(contentsOf: theURL, encoding: .utf8)
|
||||||
|
} catch {
|
||||||
|
vCLog("Error reading: \(theURL.absoluteString)")
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func saveData(mode: Shared.InputMode, type: vChewingLM.ReplacableUserDataType, data: String) -> String {
|
||||||
|
Self.saveData(mode: mode, type: type, data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
@discardableResult public static func saveData(
|
||||||
|
mode: Shared.InputMode, type: vChewingLM.ReplacableUserDataType, data: String
|
||||||
|
) -> String {
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
let theURL = Self.userDictDataURL(mode: mode, type: type)
|
||||||
|
do {
|
||||||
|
try data.write(to: theURL, atomically: true, encoding: .utf8)
|
||||||
|
Self.loadUserPhrasesData(type: type)
|
||||||
|
} catch {
|
||||||
|
vCLog("Failed to save current database to: \(theURL.absoluteString)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue