LMCassette // Add support for `%symboldef` section.

This commit is contained in:
ShikiSuen 2023-06-19 21:55:24 +08:00
parent a6ccb51172
commit 7a76cc89d2
1 changed files with 22 additions and 1 deletions

View File

@ -30,6 +30,7 @@ public extension vChewingLM {
public private(set) var quickDefMap: [String: String] = [:]
public private(set) var charDefMap: [String: [String]] = [:]
public private(set) var charDefWildcardMap: [String: [String]] = [:]
public private(set) var symbolDefMap: [String: [String]] = [:]
public private(set) var reverseLookupMap: [String: [String]] = [:]
/// [:]
public private(set) var octagramMap: [String: Int] = [:]
@ -66,6 +67,7 @@ public extension vChewingLM {
/// - `%keyname begin` `%keyname end` Swift
/// - `%quick begin` `%quick end` value
/// - `%chardef begin` `%chardef end`
/// - `%symboldef begin` `%symboldef end`
/// - `%octagram begin` `%octagram end`
///
/// - Parameter path:
@ -84,10 +86,12 @@ public extension vChewingLM {
var loadingKeys = false
var loadingQuickSets = false
var loadingCharDefinitions = false
var loadingSymbolDefinitions = false
var loadingOctagramData = false
for strLine in lineReader {
if !loadingKeys, strLine.contains("%keyname"), strLine.contains("begin") { loadingKeys = true }
if loadingKeys, strLine.contains("%keyname"), strLine.contains("end") { loadingKeys = false }
// %quick
if !loadingQuickSets, strLine.contains("%quick"), strLine.contains("begin") {
loadingQuickSets = true
}
@ -95,6 +99,7 @@ public extension vChewingLM {
loadingQuickSets = false
if quickDefMap.keys.contains(wildcardKey) { wildcardKey = "" }
}
// %chardef
if !loadingCharDefinitions, strLine.contains("%chardef"), strLine.contains("begin") {
loadingCharDefinitions = true
}
@ -102,12 +107,22 @@ public extension vChewingLM {
loadingCharDefinitions = false
if charDefMap.keys.contains(wildcardKey) { wildcardKey = "" }
}
// %symboldef
if !loadingSymbolDefinitions, strLine.contains("%symboldef"), strLine.contains("begin") {
loadingSymbolDefinitions = true
}
if loadingSymbolDefinitions, strLine.contains("%symboldef"), strLine.contains("end") {
loadingSymbolDefinitions = false
if symbolDefMap.keys.contains(wildcardKey) { wildcardKey = "" }
}
// %octagram
if !loadingOctagramData, strLine.contains("%octagram"), strLine.contains("begin") {
loadingOctagramData = true
}
if loadingOctagramData, strLine.contains("%octagram"), strLine.contains("end") {
loadingOctagramData = false
}
// Start data parsing.
let cells: [String.SubSequence] =
strLine.contains("\t") ? strLine.split(separator: "\t") : strLine.split(separator: " ")
guard cells.count >= 2 else { continue }
@ -118,7 +133,9 @@ public extension vChewingLM {
} else if loadingQuickSets, !strLine.contains("%quick") {
theMaxKeyLength = max(theMaxKeyLength, cells[0].count)
quickDefMap[strFirstCell, default: .init()].append(strSecondCell)
} else if loadingCharDefinitions, !strLine.contains("%chardef") {
} else if loadingCharDefinitions, !loadingSymbolDefinitions,
!strLine.contains("%chardef"), !strLine.contains("%symboldef")
{
theMaxKeyLength = max(theMaxKeyLength, cells[0].count)
charDefMap[strFirstCell, default: []].append(strSecondCell)
reverseLookupMap[strSecondCell, default: []].append(strFirstCell)
@ -127,6 +144,10 @@ public extension vChewingLM {
keyComps.removeLast()
charDefWildcardMap[keyComps.joined() + wildcard, default: []].append(strSecondCell)
}
} else if loadingSymbolDefinitions, !strLine.contains("%chardef"), !strLine.contains("%symboldef") {
theMaxKeyLength = max(theMaxKeyLength, cells[0].count)
symbolDefMap[strFirstCell, default: []].append(strSecondCell)
reverseLookupMap[strSecondCell, default: []].append(strFirstCell)
} else if loadingOctagramData, !strLine.contains("%octagram") {
guard let countValue = Int(cells[1]) else { continue }
switch cells.count {