LMSymbolNode // Parsing symbols.dat file from LibChewing.

This commit is contained in:
ShikiSuen 2022-06-22 08:38:42 +08:00
parent cf0c96463b
commit da92f38ad7
2 changed files with 37 additions and 1 deletions

View File

@ -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(""),

View File

@ -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(