LMSymbolNode // Parsing symbols.dat file from LibChewing.
This commit is contained in:
parent
cf0c96463b
commit
da92f38ad7
|
@ -40,6 +40,34 @@ class SymbolNode {
|
|||
children = Array(symbols).map { SymbolNode(String($0), nil) }
|
||||
}
|
||||
|
||||
static func parseUserSymbolNodeData() {
|
||||
let path = mgrLangModel.userSymbolNodeDataPath()
|
||||
// 這兩個變數單獨拿出來,省得每次都重建還要浪費算力。
|
||||
var arrLines = [String.SubSequence]()
|
||||
var fieldSlice = [Substring.SubSequence]()
|
||||
var arrChildren = [SymbolNode]()
|
||||
do {
|
||||
arrLines = try String(contentsOfFile: path, encoding: .utf8).split(separator: "\n")
|
||||
for strLine in arrLines.lazy.filter({ !$0.isEmpty }) {
|
||||
fieldSlice = strLine.split(separator: "=")
|
||||
switch fieldSlice.count {
|
||||
case 1: arrChildren.append(.init(String(fieldSlice[0])))
|
||||
case 2: arrChildren.append(.init(String(fieldSlice[0]), symbols: .init(fieldSlice[1])))
|
||||
default: break
|
||||
}
|
||||
}
|
||||
if arrChildren.isEmpty {
|
||||
root = defaultSymbolRoot
|
||||
} else {
|
||||
root = .init("/", arrChildren)
|
||||
}
|
||||
} catch {
|
||||
root = defaultSymbolRoot
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Static data.
|
||||
|
||||
static let catCommonSymbols = String(
|
||||
format: NSLocalizedString("catCommonSymbols", comment: ""))
|
||||
static let catHoriBrackets = String(
|
||||
|
@ -71,7 +99,9 @@ class SymbolNode {
|
|||
static let catLineSegments = String(
|
||||
format: NSLocalizedString("catLineSegments", comment: ""))
|
||||
|
||||
static let root: SymbolNode = .init(
|
||||
private(set) static var root: SymbolNode = .init("/")
|
||||
|
||||
private static let defaultSymbolRoot: SymbolNode = .init(
|
||||
"/",
|
||||
[
|
||||
SymbolNode("`"),
|
||||
|
|
|
@ -158,6 +158,7 @@ enum mgrLangModel {
|
|||
)
|
||||
gLangModelCHT.loadUserSymbolData(path: userSymbolDataPath(InputMode.imeModeCHT))
|
||||
gLangModelCHS.loadUserSymbolData(path: userSymbolDataPath(InputMode.imeModeCHS))
|
||||
SymbolNode.parseUserSymbolNodeData()
|
||||
}
|
||||
|
||||
public static func loadUserAssociatesData() {
|
||||
|
@ -244,6 +245,11 @@ enum mgrLangModel {
|
|||
return URL(fileURLWithPath: dataFolderPath(isDefaultFolder: false)).appendingPathComponent(fileName).path
|
||||
}
|
||||
|
||||
static func userSymbolNodeDataPath() -> String {
|
||||
let fileName = "symbols.dat"
|
||||
return URL(fileURLWithPath: dataFolderPath(isDefaultFolder: false)).appendingPathComponent(fileName).path
|
||||
}
|
||||
|
||||
// MARK: - 檢查具體的使用者語彙檔案是否存在
|
||||
|
||||
static func ensureFileExists(
|
||||
|
|
Loading…
Reference in New Issue