diff --git a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmCassette.swift b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmCassette.swift index 285f5d8d..59c33940 100644 --- a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmCassette.swift +++ b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmCassette.swift @@ -15,8 +15,10 @@ import Shared extension vChewingLM { /// 磁帶模組,用來方便使用者自行擴充字根輸入法。 public class LMCassette { + public private(set) var nameShort: String = "" public private(set) var nameENG: String = "" public private(set) var nameCJK: String = "" + public private(set) var nameIntl: String = "" /// 一個漢字可能最多要用到多少碼。 public private(set) var maxKeyLength: Int = 1 public private(set) var selectionKeys: [String] = [] @@ -48,7 +50,8 @@ extension vChewingLM { /// 載入給定的 CIN 檔案內容。 /// - Note: /// - 檢查是否以 `%gen_inp` 或者 `%ename` 開頭、以確認其是否為 cin 檔案。在讀到這些資訊之前的行都會被忽略。 - /// - `%ename` 決定磁帶的英文名、`%cname` 決定磁帶的 CJK 名稱。 + /// - `%ename` 決定磁帶的英文名、`%cname` 決定磁帶的 CJK 名稱、 + /// `%sname` 決定磁帶的最短英文縮寫名稱、`%intlname` 決定磁帶的本地化名稱綜合字串。 /// - `%encoding` 不處理,因為 Swift 只認 UTF-8。 /// - `%selkey` 不處理,因為威注音輸入法有自己的選字鍵體系。 /// - `%endkey` 是會觸發組字事件的按鍵。 @@ -117,7 +120,11 @@ extension vChewingLM { } if nameENG.isEmpty { nameENG = String(cells[1]) } } + if nameIntl.isEmpty, strLine.contains("%intlname ") { + nameIntl = String(cells[1]).replacingOccurrences(of: "_", with: " ") + } if nameCJK.isEmpty, strLine.contains("%cname ") { nameCJK = String(cells[1]) } + if nameShort.isEmpty, strLine.contains("%sname ") { nameShort = String(cells[1]) } if selectionKeys.isEmpty, strLine.contains("%selkey ") { selectionKeys = cells[1].map { String($0) }.deduplicated } @@ -144,6 +151,7 @@ extension vChewingLM { keyNameMap.removeAll() charDefMap.removeAll() charDefWildcardMap.removeAll() + nameShort.removeAll() nameENG.removeAll() nameCJK.removeAll() selectionKeys.removeAll() @@ -151,6 +159,7 @@ extension vChewingLM { octagramMap.removeAll() octagramDividedMap.removeAll() wildcardKey.removeAll() + nameIntl.removeAll() maxKeyLength = 1 norm = 0 } diff --git a/Packages/vChewing_LangModelAssembly/Tests/LangModelAssemblyTests/LMCassetteTests.swift b/Packages/vChewing_LangModelAssembly/Tests/LangModelAssemblyTests/LMCassetteTests.swift index 5dedfb72..1265229e 100644 --- a/Packages/vChewing_LangModelAssembly/Tests/LangModelAssemblyTests/LMCassetteTests.swift +++ b/Packages/vChewing_LangModelAssembly/Tests/LangModelAssemblyTests/LMCassetteTests.swift @@ -31,8 +31,10 @@ final class LMCassetteTests: XCTestCase { XCTAssertEqual(lmCassette.charDefWildcardMap.count, 8390) XCTAssertEqual(lmCassette.octagramMap.count, 14616) XCTAssertEqual(lmCassette.octagramDividedMap.count, 0) + XCTAssertEqual(lmCassette.nameShort, "WUBI") XCTAssertEqual(lmCassette.nameENG, "Wubi") XCTAssertEqual(lmCassette.nameCJK, "五笔") + XCTAssertEqual(lmCassette.nameIntl, "Haifeng Wubi:en;海峰五笔:zh-Hans;海峰五筆:zh-Hant") XCTAssertEqual(lmCassette.maxKeyLength, 4) XCTAssertEqual(lmCassette.endKeys.count, 0) XCTAssertEqual(lmCassette.selectionKeys.count, 10) diff --git a/Packages/vChewing_LangModelAssembly/Tests/TestCINData/wubi.cin b/Packages/vChewing_LangModelAssembly/Tests/TestCINData/wubi.cin index 327a38c3..95b879f1 100644 --- a/Packages/vChewing_LangModelAssembly/Tests/TestCINData/wubi.cin +++ b/Packages/vChewing_LangModelAssembly/Tests/TestCINData/wubi.cin @@ -1,8 +1,9 @@ # 該磁帶(CIN 表格)檔案僅供單元測試之用途,使用體驗不受威注音專案保證。請依個人需求自備磁帶檔案。 # 八股文詞頻資料取自 CNCorpus。 -%ename Wubi:en;五笔:zh_CN;五筆:zh; +%ename Wubi:en;五笔:zh_CN;五筆:zh %cname 五笔 -#sname WUBI +%sname WUBI +%intlname Haifeng_Wubi:en;海峰五笔:zh-Hans;海峰五筆:zh-Hant %selkey 1234567890 %wildcardkey z %keyname begin