LMs // Add documentation to LMCoreNS & LMCoreEX.

This commit is contained in:
ShikiSuen 2022-05-25 15:08:16 +08:00
parent 0ff626b80a
commit 4419548fd8
2 changed files with 91 additions and 8 deletions

View File

@ -23,26 +23,38 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
/// LMCore LMCoreEX range
/// range strData
/// C++ ParselessLM Swift
/// For
import Foundation import Foundation
extension vChewing { extension vChewing {
/// LMCore LMCoreEX range
/// range strData
/// C++ ParselessLM Swift
/// For
@frozen public struct LMCoreEX { @frozen public struct LMCoreEX {
/// 便 strData
var rangeMap: [String: [Range<String.Index>]] = [:] var rangeMap: [String: [Range<String.Index>]] = [:]
///
var strData: String = "" var strData: String = ""
///
var shouldReverse: Bool = false var shouldReverse: Bool = false
var allowConsolidation: Bool = false var allowConsolidation: Bool = false
///
var defaultScore: Double = 0 var defaultScore: Double = 0
///
var shouldForceDefaultScore: Bool = false var shouldForceDefaultScore: Bool = false
///
public var count: Int { public var count: Int {
rangeMap.count rangeMap.count
} }
///
///
/// - parameters:
/// - reverse:
/// - consolidate: 使
/// - defaultScore:
/// - forceDefaultScore:
public init( public init(
reverse: Bool = false, consolidate: Bool = false, defaultScore scoreDefault: Double = 0, reverse: Bool = false, consolidate: Bool = false, defaultScore scoreDefault: Double = 0,
forceDefaultScore: Bool = false forceDefaultScore: Bool = false
@ -54,10 +66,14 @@ extension vChewing {
shouldForceDefaultScore = forceDefaultScore shouldForceDefaultScore = forceDefaultScore
} }
///
public func isLoaded() -> Bool { public func isLoaded() -> Bool {
!rangeMap.isEmpty !rangeMap.isEmpty
} }
///
/// - parameters:
/// - path:
@discardableResult public mutating func open(_ path: String) -> Bool { @discardableResult public mutating func open(_ path: String) -> Bool {
if isLoaded() { if isLoaded() {
return false return false
@ -89,6 +105,7 @@ extension vChewing {
return true return true
} }
///
public mutating func close() { public mutating func close() {
if isLoaded() { if isLoaded() {
rangeMap.removeAll() rangeMap.removeAll()
@ -97,6 +114,9 @@ extension vChewing {
// MARK: - Advanced features // MARK: - Advanced features
/// macOS Console.app
///
///
public func dump() { public func dump() {
var strDump = "" var strDump = ""
for entry in rangeMap { for entry in rangeMap {
@ -110,12 +130,21 @@ extension vChewing {
IME.prtDebugIntel(strDump) IME.prtDebugIntel(strDump)
} }
/// 使 strData
///
///
/// - parameters:
/// - precedingKey:
/// - key:
public func bigramsForKeys(precedingKey: String, key: String) -> [Megrez.Bigram] { public func bigramsForKeys(precedingKey: String, key: String) -> [Megrez.Bigram] {
// Swift // Swift
// [Megrez.Bigram]() // [Megrez.Bigram]()
precedingKey == key ? [Megrez.Bigram]() : [Megrez.Bigram]() precedingKey == key ? [Megrez.Bigram]() : [Megrez.Bigram]()
} }
/// strData
/// - parameters:
/// - key:
public func unigramsFor(key: String) -> [Megrez.Unigram] { public func unigramsFor(key: String) -> [Megrez.Unigram] {
var grams: [Megrez.Unigram] = [] var grams: [Megrez.Unigram] = []
if let arrRangeRecords: [Range<String.Index>] = rangeMap[key] { if let arrRangeRecords: [Range<String.Index>] = rangeMap[key] {
@ -136,6 +165,9 @@ extension vChewing {
return grams return grams
} }
///
/// - parameters:
/// - key:
public func hasUnigramsFor(key: String) -> Bool { public func hasUnigramsFor(key: String) -> Bool {
rangeMap[key] != nil rangeMap[key] != nil
} }
@ -145,6 +177,9 @@ extension vChewing {
// MARK: - StringView Ranges Extension (by Isaac Xen) // MARK: - StringView Ranges Extension (by Isaac Xen)
extension String { extension String {
///
/// - parameters:
/// - splitBy:
fileprivate func ranges(splitBy separator: Element) -> [Range<String.Index>] { fileprivate func ranges(splitBy separator: Element) -> [Range<String.Index>] {
var startIndex = startIndex var startIndex = startIndex
return split(separator: separator).reduce(into: []) { ranges, substring in return split(separator: separator).reduce(into: []) { ranges, substring in

View File

@ -22,24 +22,40 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
/// LMCore LMCoreNS plist
/// mac
import Foundation import Foundation
extension vChewing { extension vChewing {
/// LMCore LMCoreNS plist
/// mac
/// 使 plist
@frozen public struct LMCoreNS { @frozen public struct LMCoreNS {
/// UTF8
var rangeMap: [String: [Data]] = [:] var rangeMap: [String: [Data]] = [:]
/// LMCoreNS
var strData: String = "" var strData: String = ""
///
var shouldReverse: Bool = false var shouldReverse: Bool = false
/// 使
var allowConsolidation: Bool = false var allowConsolidation: Bool = false
///
var defaultScore: Double = 0 var defaultScore: Double = 0
///
var shouldForceDefaultScore: Bool = false var shouldForceDefaultScore: Bool = false
///
public var count: Int { public var count: Int {
rangeMap.count rangeMap.count
} }
///
///
/// LMCoreNS 便
///
/// - parameters:
/// - reverse:
/// - consolidate: 使
/// - defaultScore:
/// - forceDefaultScore:
public init( public init(
reverse: Bool = false, consolidate: Bool = false, defaultScore scoreDefault: Double = 0, reverse: Bool = false, consolidate: Bool = false, defaultScore scoreDefault: Double = 0,
forceDefaultScore: Bool = false forceDefaultScore: Bool = false
@ -51,10 +67,14 @@ extension vChewing {
shouldForceDefaultScore = forceDefaultScore shouldForceDefaultScore = forceDefaultScore
} }
///
public func isLoaded() -> Bool { public func isLoaded() -> Bool {
!rangeMap.isEmpty !rangeMap.isEmpty
} }
///
/// - parameters:
/// - path:
@discardableResult public mutating func open(_ path: String) -> Bool { @discardableResult public mutating func open(_ path: String) -> Bool {
if isLoaded() { if isLoaded() {
return false return false
@ -77,6 +97,7 @@ extension vChewing {
return true return true
} }
///
public mutating func close() { public mutating func close() {
if isLoaded() { if isLoaded() {
rangeMap.removeAll() rangeMap.removeAll()
@ -85,6 +106,9 @@ extension vChewing {
// MARK: - Advanced features // MARK: - Advanced features
/// macOS Console.app
///
///
public func dump() { public func dump() {
var strDump = "" var strDump = ""
for entry in rangeMap { for entry in rangeMap {
@ -104,12 +128,21 @@ extension vChewing {
IME.prtDebugIntel(strDump) IME.prtDebugIntel(strDump)
} }
/// 使 UTF8
///
///
/// - parameters:
/// - precedingKey:
/// - key:
public func bigramsForKeys(precedingKey: String, key: String) -> [Megrez.Bigram] { public func bigramsForKeys(precedingKey: String, key: String) -> [Megrez.Bigram] {
// Swift // Swift
// [Megrez.Bigram]() // [Megrez.Bigram]()
precedingKey == key ? [Megrez.Bigram]() : [Megrez.Bigram]() precedingKey == key ? [Megrez.Bigram]() : [Megrez.Bigram]()
} }
/// UTF8
/// - parameters:
/// - key:
public func unigramsFor(key: String) -> [Megrez.Unigram] { public func unigramsFor(key: String) -> [Megrez.Unigram] {
var grams: [Megrez.Unigram] = [] var grams: [Megrez.Unigram] = []
if let arrRangeRecords: [Data] = rangeMap[cnvPhonabetToASCII(key)] { if let arrRangeRecords: [Data] = rangeMap[cnvPhonabetToASCII(key)] {
@ -131,10 +164,20 @@ extension vChewing {
return grams return grams
} }
///
/// - parameters:
/// - key:
public func hasUnigramsFor(key: String) -> Bool { public func hasUnigramsFor(key: String) -> Bool {
rangeMap[cnvPhonabetToASCII(key)] != nil rangeMap[cnvPhonabetToASCII(key)] != nil
} }
///
///
/// 使 plist
///
/// ASCII
/// - parameters:
/// - incoming:
func cnvPhonabetToASCII(_ incoming: String) -> String { func cnvPhonabetToASCII(_ incoming: String) -> String {
let dicPhonabet2ASCII = [ let dicPhonabet2ASCII = [
"": "b", "": "p", "": "m", "": "f", "": "d", "": "t", "": "n", "": "l", "": "g", "": "k", "": "h", "": "b", "": "p", "": "m", "": "f", "": "d", "": "t", "": "n", "": "l", "": "g", "": "k", "": "h",
@ -151,6 +194,11 @@ extension vChewing {
return strOutput return strOutput
} }
///
///
/// ASCII
/// - parameters:
/// - incoming:
func restorePhonabetFromASCII(_ incoming: String) -> String { func restorePhonabetFromASCII(_ incoming: String) -> String {
let dicPhonabet4ASCII = [ let dicPhonabet4ASCII = [
"b": "", "p": "", "m": "", "f": "", "d": "", "t": "", "n": "", "l": "", "g": "", "k": "", "h": "", "b": "", "p": "", "m": "", "f": "", "d": "", "t": "", "n": "", "l": "", "g": "", "k": "", "h": "",