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) }
|
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(
|
static let catCommonSymbols = String(
|
||||||
format: NSLocalizedString("catCommonSymbols", comment: ""))
|
format: NSLocalizedString("catCommonSymbols", comment: ""))
|
||||||
static let catHoriBrackets = String(
|
static let catHoriBrackets = String(
|
||||||
|
@ -71,7 +99,9 @@ class SymbolNode {
|
||||||
static let catLineSegments = String(
|
static let catLineSegments = String(
|
||||||
format: NSLocalizedString("catLineSegments", comment: ""))
|
format: NSLocalizedString("catLineSegments", comment: ""))
|
||||||
|
|
||||||
static let root: SymbolNode = .init(
|
private(set) static var root: SymbolNode = .init("/")
|
||||||
|
|
||||||
|
private static let defaultSymbolRoot: SymbolNode = .init(
|
||||||
"/",
|
"/",
|
||||||
[
|
[
|
||||||
SymbolNode("`"),
|
SymbolNode("`"),
|
||||||
|
|
|
@ -158,6 +158,7 @@ enum mgrLangModel {
|
||||||
)
|
)
|
||||||
gLangModelCHT.loadUserSymbolData(path: userSymbolDataPath(InputMode.imeModeCHT))
|
gLangModelCHT.loadUserSymbolData(path: userSymbolDataPath(InputMode.imeModeCHT))
|
||||||
gLangModelCHS.loadUserSymbolData(path: userSymbolDataPath(InputMode.imeModeCHS))
|
gLangModelCHS.loadUserSymbolData(path: userSymbolDataPath(InputMode.imeModeCHS))
|
||||||
|
SymbolNode.parseUserSymbolNodeData()
|
||||||
}
|
}
|
||||||
|
|
||||||
public static func loadUserAssociatesData() {
|
public static func loadUserAssociatesData() {
|
||||||
|
@ -244,6 +245,11 @@ enum mgrLangModel {
|
||||||
return URL(fileURLWithPath: dataFolderPath(isDefaultFolder: false)).appendingPathComponent(fileName).path
|
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: - 檢查具體的使用者語彙檔案是否存在
|
// MARK: - 檢查具體的使用者語彙檔案是否存在
|
||||||
|
|
||||||
static func ensureFileExists(
|
static func ensureFileExists(
|
||||||
|
|
Loading…
Reference in New Issue