Repo // "ctlInputMethod" -> "SessionCtl".
This commit is contained in:
parent
5815a49359
commit
216fe6e1ba
|
@ -13,7 +13,7 @@ Megrez Engine is a module made for processing lingual data of an input method. T
|
||||||
|
|
||||||
### §1. 初期化
|
### §1. 初期化
|
||||||
|
|
||||||
在你的 ctlInputMethod (InputMethodController) 或者 KeyHandler 內初期化一份 Megrez.Compositor 組字器副本(這裡將該副本命名為「`compositor`」)。由於 Megrez.Compositor 的型別是 Struct 型別(為了讓 Compositor 可以 deep copy),所以其副本可以用 var 來宣告。
|
在你的 IMKInputController 或者 KeyHandler 內初期化一份 Megrez.Compositor 組字器副本(這裡將該副本命名為「`compositor`」)。由於 Megrez.Compositor 的型別是 Struct 型別(為了讓 Compositor 可以 deep copy),所以其副本可以用 var 來宣告。
|
||||||
|
|
||||||
以 KeyHandler 為例:
|
以 KeyHandler 為例:
|
||||||
```swift
|
```swift
|
||||||
|
@ -24,17 +24,17 @@ class KeyHandler {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
以 ctlInputMethod 為例:
|
以 IMKInputController 為例:
|
||||||
```swift
|
```swift
|
||||||
@objc(ctlInputMethod) // 根據 info.plist 內的情況來確定型別的命名
|
@objc(IMKMyInputController) // 根據 info.plist 內的情況來確定型別的命名
|
||||||
class ctlInputMethod: IMKInputController {
|
class IMKMyInputController: IMKInputController {
|
||||||
// 先設定好變數
|
// 先設定好變數
|
||||||
var compositor: Megrez.Compositor = .init()
|
var compositor: Megrez.Compositor = .init()
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
由於 Swift 會在某個大副本(KeyHandler 或者 ctlInputMethod 副本)被銷毀的時候自動銷毀其中的全部副本,所以 Megrez.Compositor 的副本初期化沒必要寫在 init() 當中。但你很可能會想在 init() 時指定 Tekkon.Composer 所對接的語言模組型別、以及其可以允許的最大詞長。
|
由於 Swift 會在某個大副本(KeyHandler 或者 IMKInputController 副本)被銷毀的時候自動銷毀其中的全部副本,所以 Megrez.Compositor 的副本初期化沒必要寫在 init() 當中。但你很可能會想在 init() 時指定 Tekkon.Composer 所對接的語言模組型別、以及其可以允許的最大詞長。
|
||||||
|
|
||||||
這裡就需要在 init() 時使用參數:
|
這裡就需要在 init() 時使用參數:
|
||||||
```swift
|
```swift
|
||||||
|
|
|
@ -23,7 +23,7 @@ Regarding pinyin input support, we only support: Hanyu Pinyin, Secondary Pinyin,
|
||||||
|
|
||||||
### §1. 初期化
|
### §1. 初期化
|
||||||
|
|
||||||
在你的 ctlInputMethod (InputMethodController) 或者 KeyHandler 內初期化一份 Tekkon.Composer 注拼槽副本(這裡將該副本命名為「`_composer`」)。由於 Tekkon.Composer 的型別是 Struct 型別,所以其副本必須為變數(var),否則無法自我 mutate。
|
在你的 IMKInputController (InputMethodController) 或者 KeyHandler 內初期化一份 Tekkon.Composer 注拼槽副本(這裡將該副本命名為「`_composer`」)。由於 Tekkon.Composer 的型別是 Struct 型別,所以其副本必須為變數(var),否則無法自我 mutate。
|
||||||
|
|
||||||
以 KeyHandler 為例:
|
以 KeyHandler 為例:
|
||||||
```swift
|
```swift
|
||||||
|
@ -34,10 +34,10 @@ class KeyHandler: NSObject {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
以 ctlInputMethod 為例:
|
以 IMKInputController 為例:
|
||||||
```swift
|
```swift
|
||||||
@objc(ctlInputMethod) // 根據 info.plist 內的情況來確定型別的命名
|
@objc(IMKMyInputController) // 根據 info.plist 內的情況來確定型別的命名
|
||||||
class ctlInputMethod: IMKInputController {
|
class IMKMyInputController: IMKInputController {
|
||||||
// 先設定好變數
|
// 先設定好變數
|
||||||
var _composer: Tekkon.Composer = .init()
|
var _composer: Tekkon.Composer = .init()
|
||||||
...
|
...
|
||||||
|
@ -45,7 +45,7 @@ class ctlInputMethod: IMKInputController {
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
由於 Swift 會在某個大副本(KeyHandler 或者 ctlInputMethod 副本)被銷毀的時候自動銷毀其中的全部副本,所以 Tekkon.Composer 的副本初期化沒必要寫在 init() 當中。但你很可能會想在 init() 時指定 Tekkon.Composer 所使用的注音排列(是大千?還是倚天傳統?還是神通?等)。
|
由於 Swift 會在某個大副本(KeyHandler 或者 IMKInputController 副本)被銷毀的時候自動銷毀其中的全部副本,所以 Tekkon.Composer 的副本初期化沒必要寫在 init() 當中。但你很可能會想在 init() 時指定 Tekkon.Composer 所使用的注音排列(是大千?還是倚天傳統?還是神通?等)。
|
||||||
|
|
||||||
這裡就需要在 _composer 這個副本所在的型別當中額外寫一個過程函式。
|
這裡就需要在 _composer 這個副本所在的型別當中額外寫一個過程函式。
|
||||||
|
|
||||||
|
@ -159,9 +159,9 @@ final class TekkonTests: XCTestCase {
|
||||||
|
|
||||||
#### // 2. 訊號處理
|
#### // 2. 訊號處理
|
||||||
|
|
||||||
無論是 KeyHandler 還是 ctlInputMethod 都得要處理被傳入的 NSEvent 當中的 charCode 訊號。
|
無論是 KeyHandler 還是 IMKInputController 都得要處理被傳入的 NSEvent 當中的 charCode 訊號。
|
||||||
|
|
||||||
比如 ctlInputMethod 內:
|
比如 IMKInputController 內:
|
||||||
```swift
|
```swift
|
||||||
func handleInputText(_ inputText: String?, key keyCode: Int, modifiers flags: Int, client: Any?) -> Bool {
|
func handleInputText(_ inputText: String?, key keyCode: Int, modifiers flags: Int, client: Any?) -> Bool {
|
||||||
...
|
...
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
import LangModelAssembly
|
import LangModelAssembly
|
||||||
import Shared
|
import Shared
|
||||||
|
|
||||||
/// 用以呈現輸入法控制器(ctlInputMethod)的各種狀態。
|
/// 用以呈現輸入法控制器(SessionCtl)的各種狀態。
|
||||||
///
|
///
|
||||||
/// 從實際角度來看,輸入法屬於有限態械(Finite State Machine)。其藉由滑鼠/鍵盤
|
/// 從實際角度來看,輸入法屬於有限態械(Finite State Machine)。其藉由滑鼠/鍵盤
|
||||||
/// 等輸入裝置接收輸入訊號,據此切換至對應的狀態,再根據狀態更新使用者介面內容,
|
/// 等輸入裝置接收輸入訊號,據此切換至對應的狀態,再根據狀態更新使用者介面內容,
|
||||||
|
@ -49,7 +49,7 @@ public struct IMEState: IMEStateProtocol {
|
||||||
init(_ data: StateDataProtocol = StateData() as StateDataProtocol, type: StateType = .ofEmpty) {
|
init(_ data: StateDataProtocol = StateData() as StateDataProtocol, type: StateType = .ofEmpty) {
|
||||||
self.data = data
|
self.data = data
|
||||||
self.type = type
|
self.type = type
|
||||||
isVerticalTyping = ctlInputMethod.isVerticalTyping
|
isVerticalTyping = SessionCtl.isVerticalTyping
|
||||||
}
|
}
|
||||||
|
|
||||||
init(_ data: StateDataProtocol = StateData() as StateDataProtocol, type: StateType = .ofEmpty, node: CandidateNode) {
|
init(_ data: StateDataProtocol = StateData() as StateDataProtocol, type: StateType = .ofEmpty, node: CandidateNode) {
|
||||||
|
@ -83,10 +83,10 @@ extension IMEState {
|
||||||
var result = IMEState(type: .ofNotEmpty)
|
var result = IMEState(type: .ofNotEmpty)
|
||||||
// 注意資料的設定順序,一定得先設定 displayTextSegments。
|
// 注意資料的設定順序,一定得先設定 displayTextSegments。
|
||||||
result.data.displayTextSegments = displayTextSegments.map {
|
result.data.displayTextSegments = displayTextSegments.map {
|
||||||
if !ctlInputMethod.isVerticalTyping { return $0 }
|
if !SessionCtl.isVerticalTyping { return $0 }
|
||||||
guard PrefMgr.shared.hardenVerticalPunctuations else { return $0 }
|
guard PrefMgr.shared.hardenVerticalPunctuations else { return $0 }
|
||||||
var neta = $0
|
var neta = $0
|
||||||
ChineseConverter.hardenVerticalPunctuations(target: &neta, convert: ctlInputMethod.isVerticalTyping)
|
ChineseConverter.hardenVerticalPunctuations(target: &neta, convert: SessionCtl.isVerticalTyping)
|
||||||
return neta
|
return neta
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -202,14 +202,14 @@ extension StateData {
|
||||||
|
|
||||||
public var userPhraseDumped: String {
|
public var userPhraseDumped: String {
|
||||||
let pair = userPhraseKVPair
|
let pair = userPhraseKVPair
|
||||||
let nerfedScore = ctlInputMethod.areWeNerfing && markedTargetExists ? " -114.514" : ""
|
let nerfedScore = SessionCtl.areWeNerfing && markedTargetExists ? " -114.514" : ""
|
||||||
return "\(pair.1) \(pair.0)\(nerfedScore)"
|
return "\(pair.1) \(pair.0)\(nerfedScore)"
|
||||||
}
|
}
|
||||||
|
|
||||||
public var userPhraseDumpedConverted: String {
|
public var userPhraseDumpedConverted: String {
|
||||||
let pair = userPhraseKVPair
|
let pair = userPhraseKVPair
|
||||||
let text = ChineseConverter.crossConvert(pair.1)
|
let text = ChineseConverter.crossConvert(pair.1)
|
||||||
let nerfedScore = ctlInputMethod.areWeNerfing && markedTargetExists ? " -114.514" : ""
|
let nerfedScore = SessionCtl.areWeNerfing && markedTargetExists ? " -114.514" : ""
|
||||||
let convertedMark = "#𝙃𝙪𝙢𝙖𝙣𝘾𝙝𝙚𝙘𝙠𝙍𝙚𝙦𝙪𝙞𝙧𝙚𝙙"
|
let convertedMark = "#𝙃𝙪𝙢𝙖𝙣𝘾𝙝𝙚𝙘𝙠𝙍𝙚𝙦𝙪𝙞𝙧𝙚𝙙"
|
||||||
return "\(text) \(pair.0)\(nerfedScore)\t\(convertedMark)"
|
return "\(text) \(pair.0)\(nerfedScore)\t\(convertedMark)"
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ public protocol KeyHandlerDelegate {
|
||||||
|
|
||||||
/// KeyHandler 按鍵調度模組。
|
/// KeyHandler 按鍵調度模組。
|
||||||
public class KeyHandler {
|
public class KeyHandler {
|
||||||
/// 委任物件 (ctlInputMethod),以便呼叫其中的函式。
|
/// 委任物件 (SessionCtl),以便呼叫其中的函式。
|
||||||
public var delegate: KeyHandlerDelegate?
|
public var delegate: KeyHandlerDelegate?
|
||||||
public var prefs: PrefMgrProtocol
|
public var prefs: PrefMgrProtocol
|
||||||
|
|
||||||
|
|
|
@ -145,7 +145,7 @@ extension KeyHandler {
|
||||||
stateCallback(candidateState)
|
stateCallback(candidateState)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 將「這個按鍵訊號已經被輸入法攔截處理了」的結果藉由 ctlInputMethod 回報給 IMK。
|
// 將「這個按鍵訊號已經被輸入法攔截處理了」的結果藉由 SessionCtl 回報給 IMK。
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -400,7 +400,7 @@ extension KeyHandler {
|
||||||
|
|
||||||
// MARK: - 終末處理 (Still Nothing)
|
// MARK: - 終末處理 (Still Nothing)
|
||||||
|
|
||||||
/// 對剩下的漏網之魚做攔截處理、直接將當前狀態繼續回呼給 ctlInputMethod。
|
/// 對剩下的漏網之魚做攔截處理、直接將當前狀態繼續回呼給 SessionCtl。
|
||||||
/// 否則的話,可能會導致輸入法行為異常:部分應用會阻止輸入法完全攔截某些按鍵訊號。
|
/// 否則的話,可能會導致輸入法行為異常:部分應用會阻止輸入法完全攔截某些按鍵訊號。
|
||||||
/// 砍掉這一段會導致「F1-F12 按鍵干擾組字區」的問題。
|
/// 砍掉這一段會導致「F1-F12 按鍵干擾組字區」的問題。
|
||||||
/// 暫時只能先恢復這段,且補上偵錯彙報機制,方便今後排查故障。
|
/// 暫時只能先恢復這段,且補上偵錯彙報機制,方便今後排查故障。
|
||||||
|
|
|
@ -126,7 +126,7 @@ extension KeyHandler {
|
||||||
/// - input: 輸入按鍵訊號。
|
/// - input: 輸入按鍵訊號。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - errorCallback: 錯誤回呼。
|
/// - errorCallback: 錯誤回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleMarkingState(
|
func handleMarkingState(
|
||||||
_ state: IMEStateProtocol,
|
_ state: IMEStateProtocol,
|
||||||
input: InputSignalProtocol,
|
input: InputSignalProtocol,
|
||||||
|
@ -235,7 +235,7 @@ extension KeyHandler {
|
||||||
/// - isTypingVertical: 是否縱排輸入?
|
/// - isTypingVertical: 是否縱排輸入?
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - errorCallback: 錯誤回呼。
|
/// - errorCallback: 錯誤回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handlePunctuation(
|
func handlePunctuation(
|
||||||
_ customPunctuation: String,
|
_ customPunctuation: String,
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
|
@ -285,7 +285,7 @@ extension KeyHandler {
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - state: 當前狀態。
|
/// - state: 當前狀態。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleEnter(
|
func handleEnter(
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
stateCallback: @escaping (IMEStateProtocol) -> Void
|
stateCallback: @escaping (IMEStateProtocol) -> Void
|
||||||
|
@ -303,7 +303,7 @@ extension KeyHandler {
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - state: 當前狀態。
|
/// - state: 當前狀態。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleCtrlCommandEnter(
|
func handleCtrlCommandEnter(
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
stateCallback: @escaping (IMEStateProtocol) -> Void
|
stateCallback: @escaping (IMEStateProtocol) -> Void
|
||||||
|
@ -331,7 +331,7 @@ extension KeyHandler {
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - state: 當前狀態。
|
/// - state: 當前狀態。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleCtrlOptionCommandEnter(
|
func handleCtrlOptionCommandEnter(
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
stateCallback: @escaping (IMEStateProtocol) -> Void
|
stateCallback: @escaping (IMEStateProtocol) -> Void
|
||||||
|
@ -369,7 +369,7 @@ extension KeyHandler {
|
||||||
/// - input: 輸入按鍵訊號。
|
/// - input: 輸入按鍵訊號。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - errorCallback: 錯誤回呼。
|
/// - errorCallback: 錯誤回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleBackSpace(
|
func handleBackSpace(
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
input: InputSignalProtocol,
|
input: InputSignalProtocol,
|
||||||
|
@ -431,7 +431,7 @@ extension KeyHandler {
|
||||||
/// - input: 輸入按鍵訊號。
|
/// - input: 輸入按鍵訊號。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - errorCallback: 錯誤回呼。
|
/// - errorCallback: 錯誤回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleDelete(
|
func handleDelete(
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
input: InputSignalProtocol,
|
input: InputSignalProtocol,
|
||||||
|
@ -475,7 +475,7 @@ extension KeyHandler {
|
||||||
/// - state: 當前狀態。
|
/// - state: 當前狀態。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - errorCallback: 錯誤回呼。
|
/// - errorCallback: 錯誤回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleClockKey(
|
func handleClockKey(
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
stateCallback: @escaping (IMEStateProtocol) -> Void,
|
stateCallback: @escaping (IMEStateProtocol) -> Void,
|
||||||
|
@ -496,7 +496,7 @@ extension KeyHandler {
|
||||||
/// - state: 當前狀態。
|
/// - state: 當前狀態。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - errorCallback: 錯誤回呼。
|
/// - errorCallback: 錯誤回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleHome(
|
func handleHome(
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
stateCallback: @escaping (IMEStateProtocol) -> Void,
|
stateCallback: @escaping (IMEStateProtocol) -> Void,
|
||||||
|
@ -528,7 +528,7 @@ extension KeyHandler {
|
||||||
/// - state: 當前狀態。
|
/// - state: 當前狀態。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - errorCallback: 錯誤回呼。
|
/// - errorCallback: 錯誤回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleEnd(
|
func handleEnd(
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
stateCallback: @escaping (IMEStateProtocol) -> Void,
|
stateCallback: @escaping (IMEStateProtocol) -> Void,
|
||||||
|
@ -559,7 +559,7 @@ extension KeyHandler {
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - state: 當前狀態。
|
/// - state: 當前狀態。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleEsc(
|
func handleEsc(
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
stateCallback: @escaping (IMEStateProtocol) -> Void
|
stateCallback: @escaping (IMEStateProtocol) -> Void
|
||||||
|
@ -591,7 +591,7 @@ extension KeyHandler {
|
||||||
/// - input: 輸入按鍵訊號。
|
/// - input: 輸入按鍵訊號。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - errorCallback: 錯誤回呼。
|
/// - errorCallback: 錯誤回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleForward(
|
func handleForward(
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
input: InputSignalProtocol,
|
input: InputSignalProtocol,
|
||||||
|
@ -660,7 +660,7 @@ extension KeyHandler {
|
||||||
/// - input: 輸入按鍵訊號。
|
/// - input: 輸入按鍵訊號。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - errorCallback: 錯誤回呼。
|
/// - errorCallback: 錯誤回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleBackward(
|
func handleBackward(
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
input: InputSignalProtocol,
|
input: InputSignalProtocol,
|
||||||
|
@ -729,7 +729,7 @@ extension KeyHandler {
|
||||||
/// - reverseModifier: 是否有控制輪替方向的修飾鍵輸入。
|
/// - reverseModifier: 是否有控制輪替方向的修飾鍵輸入。
|
||||||
/// - stateCallback: 狀態回呼。
|
/// - stateCallback: 狀態回呼。
|
||||||
/// - errorCallback: 錯誤回呼。
|
/// - errorCallback: 錯誤回呼。
|
||||||
/// - Returns: 將按鍵行為「是否有處理掉」藉由 ctlInputMethod 回報給 IMK。
|
/// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。
|
||||||
func handleInlineCandidateRotation(
|
func handleInlineCandidateRotation(
|
||||||
state: IMEStateProtocol,
|
state: IMEStateProtocol,
|
||||||
reverseModifier: Bool,
|
reverseModifier: Bool,
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
import Shared
|
import Shared
|
||||||
|
|
||||||
// MARK: Auto parameter fix procedures, executed everytime on ctlInputMethod.activateServer().
|
// MARK: Auto parameter fix procedures, executed everytime on SessionCtl.activateServer().
|
||||||
|
|
||||||
extension PrefMgr {
|
extension PrefMgr {
|
||||||
public func fixOddPreferences() {
|
public func fixOddPreferences() {
|
||||||
|
|
|
@ -23,8 +23,8 @@ import Voltaire
|
||||||
/// 檢查委任物件是否實現了方法:若存在的話,就調用委任物件內的版本。
|
/// 檢查委任物件是否實現了方法:若存在的話,就調用委任物件內的版本。
|
||||||
/// - Remark: 在輸入法的主函式中分配的 IMKServer 型別為客體應用程式創建的每個
|
/// - Remark: 在輸入法的主函式中分配的 IMKServer 型別為客體應用程式創建的每個
|
||||||
/// 輸入會話創建一個控制器型別。因此,對於每個輸入會話,都有一個對應的 IMKInputController。
|
/// 輸入會話創建一個控制器型別。因此,對於每個輸入會話,都有一個對應的 IMKInputController。
|
||||||
@objc(ctlInputMethod) // 必須加上 ObjC,因為 IMK 是用 ObjC 寫的。
|
@objc(SessionCtl) // 必須加上 ObjC,因為 IMK 是用 ObjC 寫的。
|
||||||
class ctlInputMethod: IMKInputController {
|
class SessionCtl: IMKInputController {
|
||||||
/// 標記狀態來聲明目前新增的詞彙是否需要賦以非常低的權重。
|
/// 標記狀態來聲明目前新增的詞彙是否需要賦以非常低的權重。
|
||||||
static var areWeNerfing = false
|
static var areWeNerfing = false
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ class ctlInputMethod: IMKInputController {
|
||||||
|
|
||||||
// MARK: -
|
// MARK: -
|
||||||
|
|
||||||
/// 當前這個 ctlInputMethod 副本是否處於英數輸入模式。
|
/// 當前這個 SessionCtl 副本是否處於英數輸入模式。
|
||||||
var isASCIIMode = false {
|
var isASCIIMode = false {
|
||||||
didSet {
|
didSet {
|
||||||
resetKeyHandler()
|
resetKeyHandler()
|
||||||
|
@ -116,7 +116,7 @@ class ctlInputMethod: IMKInputController {
|
||||||
|
|
||||||
// MARK: - 工具函式
|
// MARK: - 工具函式
|
||||||
|
|
||||||
extension ctlInputMethod {
|
extension SessionCtl {
|
||||||
/// 指定鍵盤佈局。
|
/// 指定鍵盤佈局。
|
||||||
func setKeyLayout() {
|
func setKeyLayout() {
|
||||||
guard let client = client() else { return }
|
guard let client = client() else { return }
|
||||||
|
@ -145,7 +145,7 @@ extension ctlInputMethod {
|
||||||
|
|
||||||
// MARK: - IMKStateSetting 協定規定的方法
|
// MARK: - IMKStateSetting 協定規定的方法
|
||||||
|
|
||||||
extension ctlInputMethod {
|
extension SessionCtl {
|
||||||
/// 啟用輸入法時,會觸發該函式。
|
/// 啟用輸入法時,會觸發該函式。
|
||||||
/// - Parameter sender: 呼叫了該函式的客體(無須使用)。
|
/// - Parameter sender: 呼叫了該函式的客體(無須使用)。
|
||||||
override func activateServer(_ sender: Any!) {
|
override func activateServer(_ sender: Any!) {
|
||||||
|
@ -227,9 +227,9 @@ extension ctlInputMethod {
|
||||||
|
|
||||||
// MARK: - IMKServerInput 協定規定的方法(僅部分)
|
// MARK: - IMKServerInput 協定規定的方法(僅部分)
|
||||||
|
|
||||||
// 註:handle(_ event:) 位於 ctlInputMethod_HandleEvent.swift。
|
// 註:handle(_ event:) 位於 SessionCtl_HandleEvent.swift。
|
||||||
|
|
||||||
extension ctlInputMethod {
|
extension SessionCtl {
|
||||||
/// 該函式的回饋結果決定了輸入法會攔截且捕捉哪些類型的輸入裝置操作事件。
|
/// 該函式的回饋結果決定了輸入法會攔截且捕捉哪些類型的輸入裝置操作事件。
|
||||||
///
|
///
|
||||||
/// 一個客體應用會與輸入法共同確認某個輸入裝置操作事件是否可以觸發輸入法內的某個方法。預設情況下,
|
/// 一個客體應用會與輸入法共同確認某個輸入裝置操作事件是否可以觸發輸入法內的某個方法。預設情況下,
|
|
@ -12,7 +12,7 @@ import Shared
|
||||||
|
|
||||||
// MARK: - KeyHandler Delegate
|
// MARK: - KeyHandler Delegate
|
||||||
|
|
||||||
extension ctlInputMethod: KeyHandlerDelegate {
|
extension SessionCtl: KeyHandlerDelegate {
|
||||||
var clientBundleIdentifier: String {
|
var clientBundleIdentifier: String {
|
||||||
guard let client = client() else { return "" }
|
guard let client = client() else { return "" }
|
||||||
return client.bundleIdentifier() ?? ""
|
return client.bundleIdentifier() ?? ""
|
||||||
|
@ -49,7 +49,7 @@ extension ctlInputMethod: KeyHandlerDelegate {
|
||||||
|
|
||||||
// MARK: - Candidate Controller Delegate
|
// MARK: - Candidate Controller Delegate
|
||||||
|
|
||||||
extension ctlInputMethod: CtlCandidateDelegate {
|
extension SessionCtl: CtlCandidateDelegate {
|
||||||
func buzz() {
|
func buzz() {
|
||||||
IMEApp.buzz()
|
IMEApp.buzz()
|
||||||
}
|
}
|
|
@ -14,7 +14,7 @@ import Voltaire
|
||||||
|
|
||||||
// MARK: - Tooltip Display and Candidate Display Methods
|
// MARK: - Tooltip Display and Candidate Display Methods
|
||||||
|
|
||||||
extension ctlInputMethod {
|
extension SessionCtl {
|
||||||
// 有些 App 會濫用內文組字區的內容來預測使用者的輸入行為。
|
// 有些 App 會濫用內文組字區的內容來預測使用者的輸入行為。
|
||||||
// 對此類 App 有疑慮者,可以將這類 App 登記到客體管理員當中。
|
// 對此類 App 有疑慮者,可以將這類 App 登記到客體管理員當中。
|
||||||
// 這樣,不但強制使用(限制讀音 20 個的)浮動組字窗,而且內文組字區只會顯示一個空格。
|
// 這樣,不但強制使用(限制讀音 20 個的)浮動組字窗,而且內文組字區只會顯示一個空格。
|
|
@ -14,7 +14,7 @@ import Shared
|
||||||
|
|
||||||
// MARK: - Facade
|
// MARK: - Facade
|
||||||
|
|
||||||
extension ctlInputMethod {
|
extension SessionCtl {
|
||||||
/// 接受所有鍵鼠事件為 NSEvent,讓輸入法判斷是否要處理、該怎樣處理。
|
/// 接受所有鍵鼠事件為 NSEvent,讓輸入法判斷是否要處理、該怎樣處理。
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - event: 裝置操作輸入事件,可能會是 nil。
|
/// - event: 裝置操作輸入事件,可能會是 nil。
|
||||||
|
@ -112,7 +112,7 @@ extension ctlInputMethod {
|
||||||
|
|
||||||
// MARK: - Private functions
|
// MARK: - Private functions
|
||||||
|
|
||||||
extension ctlInputMethod {
|
extension SessionCtl {
|
||||||
/// 完成 handle() 函式本該完成的內容,但去掉了與 IMK 選字窗有關的判斷語句。
|
/// 完成 handle() 函式本該完成的內容,但去掉了與 IMK 選字窗有關的判斷語句。
|
||||||
/// 這樣分開處理很有必要,不然 handle() 函式會陷入無限迴圈。
|
/// 這樣分開處理很有必要,不然 handle() 函式會陷入無限迴圈。
|
||||||
/// - Parameter event: 由 IMK 選字窗接收的裝置操作輸入事件。
|
/// - Parameter event: 由 IMK 選字窗接收的裝置操作輸入事件。
|
||||||
|
@ -142,7 +142,7 @@ extension ctlInputMethod {
|
||||||
// IMK 選字窗處理,當且僅當啟用了 IMK 選字窗的時候才會生效。
|
// IMK 選字窗處理,當且僅當啟用了 IMK 選字窗的時候才會生效。
|
||||||
// 這樣可以讓 interpretKeyEvents() 函式自行判斷:
|
// 這樣可以讓 interpretKeyEvents() 函式自行判斷:
|
||||||
// - 是就地交給 imkCandidates.interpretKeyEvents() 處理?
|
// - 是就地交給 imkCandidates.interpretKeyEvents() 處理?
|
||||||
// - 還是藉由 delegate 扔回 ctlInputMethod 給 KeyHandler 處理?
|
// - 還是藉由 delegate 扔回 SessionCtl 給 KeyHandler 處理?
|
||||||
if let imkCandidates = Self.ctlCandidateCurrent as? CtlCandidateIMK, imkCandidates.visible {
|
if let imkCandidates = Self.ctlCandidateCurrent as? CtlCandidateIMK, imkCandidates.visible {
|
||||||
let event: NSEvent = CtlCandidateIMK.replaceNumPadKeyCodes(target: eventToDeal) ?? eventToDeal
|
let event: NSEvent = CtlCandidateIMK.replaceNumPadKeyCodes(target: eventToDeal) ?? eventToDeal
|
||||||
|
|
|
@ -13,7 +13,7 @@ import Shared
|
||||||
|
|
||||||
// MARK: - 狀態調度 (State Handling)
|
// MARK: - 狀態調度 (State Handling)
|
||||||
|
|
||||||
extension ctlInputMethod {
|
extension SessionCtl {
|
||||||
/// 針對傳入的新狀態進行調度。
|
/// 針對傳入的新狀態進行調度。
|
||||||
///
|
///
|
||||||
/// 先將舊狀態單獨記錄起來,再將新舊狀態作為參數,
|
/// 先將舊狀態單獨記錄起來,再將新舊狀態作為參數,
|
|
@ -11,7 +11,7 @@ import Tekkon
|
||||||
|
|
||||||
// MARK: - IMKCandidates 功能擴充
|
// MARK: - IMKCandidates 功能擴充
|
||||||
|
|
||||||
extension ctlInputMethod {
|
extension SessionCtl {
|
||||||
/// 生成 IMK 選字窗專用的候選字串陣列。
|
/// 生成 IMK 選字窗專用的候選字串陣列。
|
||||||
/// - Parameter sender: 呼叫了該函式的客體(無須使用)。
|
/// - Parameter sender: 呼叫了該函式的客體(無須使用)。
|
||||||
/// - Returns: IMK 選字窗專用的候選字串陣列。
|
/// - Returns: IMK 選字窗專用的候選字串陣列。
|
|
@ -21,7 +21,7 @@ extension Bool {
|
||||||
|
|
||||||
// 因為選單部分的內容又臭又長,所以就單獨拉到一個檔案內管理了。
|
// 因為選單部分的內容又臭又長,所以就單獨拉到一個檔案內管理了。
|
||||||
|
|
||||||
extension ctlInputMethod {
|
extension SessionCtl {
|
||||||
override func menu() -> NSMenu! {
|
override func menu() -> NSMenu! {
|
||||||
let optionKeyPressed = NSEvent.modifierFlags.contains(.option)
|
let optionKeyPressed = NSEvent.modifierFlags.contains(.option)
|
||||||
|
|
||||||
|
@ -192,7 +192,7 @@ extension ctlInputMethod {
|
||||||
|
|
||||||
// MARK: - IME Menu Items
|
// MARK: - IME Menu Items
|
||||||
|
|
||||||
extension ctlInputMethod {
|
extension SessionCtl {
|
||||||
@objc override func showPreferences(_: Any?) {
|
@objc override func showPreferences(_: Any?) {
|
||||||
if #unavailable(macOS 10.15) {
|
if #unavailable(macOS 10.15) {
|
||||||
showLegacyPreferences()
|
showLegacyPreferences()
|
|
@ -92,13 +92,13 @@
|
||||||
<key>InputMethodConnectionName</key>
|
<key>InputMethodConnectionName</key>
|
||||||
<string>org_atelierInmu_inputmethod_vChewing_Connection</string>
|
<string>org_atelierInmu_inputmethod_vChewing_Connection</string>
|
||||||
<key>InputMethodServerControllerClass</key>
|
<key>InputMethodServerControllerClass</key>
|
||||||
<string>ctlInputMethod</string>
|
<string>SessionCtl</string>
|
||||||
<key>InputMethodServerDelegateClass</key>
|
<key>InputMethodServerDelegateClass</key>
|
||||||
<string>ctlInputMethod</string>
|
<string>SessionCtl</string>
|
||||||
<key>InputMethodServerPreferencesWindowControllerClass</key>
|
<key>InputMethodServerPreferencesWindowControllerClass</key>
|
||||||
<string>ctlPrefWindow</string>
|
<string>ctlPrefWindow</string>
|
||||||
<key>InputMethodSessionController</key>
|
<key>InputMethodSessionController</key>
|
||||||
<string>ctlInputMethod</string>
|
<string>SessionCtl</string>
|
||||||
<key>LSApplicationCategoryType</key>
|
<key>LSApplicationCategoryType</key>
|
||||||
<string>public.app-category.utilities</string>
|
<string>public.app-category.utilities</string>
|
||||||
<key>LSHasLocalizedDisplayName</key>
|
<key>LSHasLocalizedDisplayName</key>
|
||||||
|
|
|
@ -7,19 +7,19 @@
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
5B00FA0C28DEC17200F6D436 /* ctlInputMethod_IMKCandidatesData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B00FA0B28DEC17200F6D436 /* ctlInputMethod_IMKCandidatesData.swift */; };
|
5B00FA0C28DEC17200F6D436 /* SessionCtl_IMKCandidatesData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B00FA0B28DEC17200F6D436 /* SessionCtl_IMKCandidatesData.swift */; };
|
||||||
5B09307628B6FC3B0021F8C5 /* shortcuts.html in Resources */ = {isa = PBXBuildFile; fileRef = 5B09307828B6FC3B0021F8C5 /* shortcuts.html */; };
|
5B09307628B6FC3B0021F8C5 /* shortcuts.html in Resources */ = {isa = PBXBuildFile; fileRef = 5B09307828B6FC3B0021F8C5 /* shortcuts.html */; };
|
||||||
5B0AF8B527B2C8290096FE54 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0AF8B427B2C8290096FE54 /* StringExtension.swift */; };
|
5B0AF8B527B2C8290096FE54 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0AF8B427B2C8290096FE54 /* StringExtension.swift */; };
|
||||||
5B0EF55D28CDBF7100F8F7CE /* frmClientListMgr.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B0EF55C28CDBF7100F8F7CE /* frmClientListMgr.xib */; };
|
5B0EF55D28CDBF7100F8F7CE /* frmClientListMgr.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B0EF55C28CDBF7100F8F7CE /* frmClientListMgr.xib */; };
|
||||||
5B0EF55F28CDBF8E00F8F7CE /* ctlClientListMgr.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0EF55E28CDBF8E00F8F7CE /* ctlClientListMgr.swift */; };
|
5B0EF55F28CDBF8E00F8F7CE /* ctlClientListMgr.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0EF55E28CDBF8E00F8F7CE /* ctlClientListMgr.swift */; };
|
||||||
5B21176C287539BB000443A9 /* ctlInputMethod_HandleStates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B21176B287539BB000443A9 /* ctlInputMethod_HandleStates.swift */; };
|
5B21176C287539BB000443A9 /* SessionCtl_HandleStates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B21176B287539BB000443A9 /* SessionCtl_HandleStates.swift */; };
|
||||||
5B21176E28753B35000443A9 /* ctlInputMethod_HandleDisplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B21176D28753B35000443A9 /* ctlInputMethod_HandleDisplay.swift */; };
|
5B21176E28753B35000443A9 /* SessionCtl_HandleDisplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B21176D28753B35000443A9 /* SessionCtl_HandleDisplay.swift */; };
|
||||||
5B21177028753B9D000443A9 /* ctlInputMethod_Delegates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B21176F28753B9D000443A9 /* ctlInputMethod_Delegates.swift */; };
|
5B21177028753B9D000443A9 /* SessionCtl_Delegates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B21176F28753B9D000443A9 /* SessionCtl_Delegates.swift */; };
|
||||||
5B3133BF280B229700A4A505 /* KeyHandler_States.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B3133BE280B229700A4A505 /* KeyHandler_States.swift */; };
|
5B3133BF280B229700A4A505 /* KeyHandler_States.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B3133BE280B229700A4A505 /* KeyHandler_States.swift */; };
|
||||||
5B40113928D7050D00A9D4CB /* Shared in Frameworks */ = {isa = PBXBuildFile; productRef = 5B40113828D7050D00A9D4CB /* Shared */; };
|
5B40113928D7050D00A9D4CB /* Shared in Frameworks */ = {isa = PBXBuildFile; productRef = 5B40113828D7050D00A9D4CB /* Shared */; };
|
||||||
5B40113C28D71C0100A9D4CB /* Uninstaller in Frameworks */ = {isa = PBXBuildFile; productRef = 5B40113B28D71C0100A9D4CB /* Uninstaller */; };
|
5B40113C28D71C0100A9D4CB /* Uninstaller in Frameworks */ = {isa = PBXBuildFile; productRef = 5B40113B28D71C0100A9D4CB /* Uninstaller */; };
|
||||||
5B62A33D27AE7CC100A19448 /* ctlAboutWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B62A33C27AE7CC100A19448 /* ctlAboutWindow.swift */; };
|
5B62A33D27AE7CC100A19448 /* ctlAboutWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B62A33C27AE7CC100A19448 /* ctlAboutWindow.swift */; };
|
||||||
5B6C141228A9D4B30098ADF8 /* ctlInputMethod_HandleEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6C141128A9D4B30098ADF8 /* ctlInputMethod_HandleEvent.swift */; };
|
5B6C141228A9D4B30098ADF8 /* SessionCtl_HandleEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6C141128A9D4B30098ADF8 /* SessionCtl_HandleEvent.swift */; };
|
||||||
5B73FB5E27B2BE1300E9BF49 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5B73FB6027B2BE1300E9BF49 /* InfoPlist.strings */; };
|
5B73FB5E27B2BE1300E9BF49 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5B73FB6027B2BE1300E9BF49 /* InfoPlist.strings */; };
|
||||||
5B782EC4280C243C007276DE /* KeyHandler_HandleCandidate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B782EC3280C243C007276DE /* KeyHandler_HandleCandidate.swift */; };
|
5B782EC4280C243C007276DE /* KeyHandler_HandleCandidate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B782EC3280C243C007276DE /* KeyHandler_HandleCandidate.swift */; };
|
||||||
5B78EE0D28A562B4009456C1 /* suiPrefPaneDevZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B78EE0C28A562B4009456C1 /* suiPrefPaneDevZone.swift */; };
|
5B78EE0D28A562B4009456C1 /* suiPrefPaneDevZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B78EE0C28A562B4009456C1 /* suiPrefPaneDevZone.swift */; };
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
5BA9FD1327FEDB6B002DE248 /* suiPrefPaneDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD0E27FEDB6B002DE248 /* suiPrefPaneDictionary.swift */; };
|
5BA9FD1327FEDB6B002DE248 /* suiPrefPaneDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD0E27FEDB6B002DE248 /* suiPrefPaneDictionary.swift */; };
|
||||||
5BAD0CD527D701F6003D127F /* vChewingKeyLayout.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 5B30F11227BA568800484E24 /* vChewingKeyLayout.bundle */; };
|
5BAD0CD527D701F6003D127F /* vChewingKeyLayout.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 5B30F11227BA568800484E24 /* vChewingKeyLayout.bundle */; };
|
||||||
5BAEFAD028012565001F42C9 /* LMMgr.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BAEFACF28012565001F42C9 /* LMMgr.swift */; };
|
5BAEFAD028012565001F42C9 /* LMMgr.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BAEFACF28012565001F42C9 /* LMMgr.swift */; };
|
||||||
5BB802DA27FABA8300CF1C19 /* ctlInputMethod_Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB802D927FABA8300CF1C19 /* ctlInputMethod_Menu.swift */; };
|
5BB802DA27FABA8300CF1C19 /* SessionCtl_Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB802D927FABA8300CF1C19 /* SessionCtl_Menu.swift */; };
|
||||||
5BBBB75F27AED54C0023B93A /* Beep.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB75D27AED54C0023B93A /* Beep.m4a */; };
|
5BBBB75F27AED54C0023B93A /* Beep.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB75D27AED54C0023B93A /* Beep.m4a */; };
|
||||||
5BBBB76027AED54C0023B93A /* Fart.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB75E27AED54C0023B93A /* Fart.m4a */; };
|
5BBBB76027AED54C0023B93A /* Fart.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB75E27AED54C0023B93A /* Fart.m4a */; };
|
||||||
5BBBB76D27AED5DB0023B93A /* frmAboutWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB76927AED5DB0023B93A /* frmAboutWindow.xib */; };
|
5BBBB76D27AED5DB0023B93A /* frmAboutWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BBBB76927AED5DB0023B93A /* frmAboutWindow.xib */; };
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
D427F76C278CA2B0004A2160 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D427F76B278CA1BA004A2160 /* AppDelegate.swift */; };
|
D427F76C278CA2B0004A2160 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D427F76B278CA1BA004A2160 /* AppDelegate.swift */; };
|
||||||
D47B92C027972AD100458394 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = D47B92BF27972AC800458394 /* main.swift */; };
|
D47B92C027972AD100458394 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = D47B92BF27972AC800458394 /* main.swift */; };
|
||||||
D47F7DCE278BFB57002F9DD7 /* ctlPrefWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = D47F7DCD278BFB57002F9DD7 /* ctlPrefWindow.swift */; };
|
D47F7DCE278BFB57002F9DD7 /* ctlPrefWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = D47F7DCD278BFB57002F9DD7 /* ctlPrefWindow.swift */; };
|
||||||
D4A13D5A27A59F0B003BE359 /* ctlInputMethod_Core.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4A13D5927A59D5C003BE359 /* ctlInputMethod_Core.swift */; };
|
D4A13D5A27A59F0B003BE359 /* SessionCtl_Core.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4A13D5927A59D5C003BE359 /* SessionCtl_Core.swift */; };
|
||||||
D4E33D8A27A838CF006DB1CF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = D4E33D8827A838CF006DB1CF /* Localizable.strings */; };
|
D4E33D8A27A838CF006DB1CF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = D4E33D8827A838CF006DB1CF /* Localizable.strings */; };
|
||||||
D4E33D8F27A838F0006DB1CF /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D4E33D8D27A838F0006DB1CF /* InfoPlist.strings */; };
|
D4E33D8F27A838F0006DB1CF /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D4E33D8D27A838F0006DB1CF /* InfoPlist.strings */; };
|
||||||
D4F0BBDF279AF1AF0071253C /* ArchiveUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4F0BBDE279AF1AF0071253C /* ArchiveUtil.swift */; };
|
D4F0BBDF279AF1AF0071253C /* ArchiveUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4F0BBDE279AF1AF0071253C /* ArchiveUtil.swift */; };
|
||||||
|
@ -155,7 +155,7 @@
|
||||||
/* End PBXCopyFilesBuildPhase section */
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
5B00FA0B28DEC17200F6D436 /* ctlInputMethod_IMKCandidatesData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ctlInputMethod_IMKCandidatesData.swift; sourceTree = "<group>"; };
|
5B00FA0B28DEC17200F6D436 /* SessionCtl_IMKCandidatesData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionCtl_IMKCandidatesData.swift; sourceTree = "<group>"; };
|
||||||
5B04305327B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
5B04305327B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
||||||
5B04305427B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
5B04305427B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||||
5B04305527B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainMenu.strings"; sourceTree = "<group>"; };
|
5B04305527B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainMenu.strings"; sourceTree = "<group>"; };
|
||||||
|
@ -195,9 +195,9 @@
|
||||||
5B18BA7427C7BD8C0056EB19 /* LICENSE-CHT.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "LICENSE-CHT.txt"; sourceTree = "<group>"; };
|
5B18BA7427C7BD8C0056EB19 /* LICENSE-CHT.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "LICENSE-CHT.txt"; sourceTree = "<group>"; };
|
||||||
5B20430B28BEFC0C00BFC6FD /* vChewing.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = vChewing.entitlements; sourceTree = "<group>"; };
|
5B20430B28BEFC0C00BFC6FD /* vChewing.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = vChewing.entitlements; sourceTree = "<group>"; };
|
||||||
5B20430C28BEFC1200BFC6FD /* vChewingPhraseEditor.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = vChewingPhraseEditor.entitlements; sourceTree = "<group>"; };
|
5B20430C28BEFC1200BFC6FD /* vChewingPhraseEditor.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = vChewingPhraseEditor.entitlements; sourceTree = "<group>"; };
|
||||||
5B21176B287539BB000443A9 /* ctlInputMethod_HandleStates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ctlInputMethod_HandleStates.swift; sourceTree = "<group>"; };
|
5B21176B287539BB000443A9 /* SessionCtl_HandleStates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionCtl_HandleStates.swift; sourceTree = "<group>"; };
|
||||||
5B21176D28753B35000443A9 /* ctlInputMethod_HandleDisplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ctlInputMethod_HandleDisplay.swift; sourceTree = "<group>"; };
|
5B21176D28753B35000443A9 /* SessionCtl_HandleDisplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionCtl_HandleDisplay.swift; sourceTree = "<group>"; };
|
||||||
5B21176F28753B9D000443A9 /* ctlInputMethod_Delegates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ctlInputMethod_Delegates.swift; sourceTree = "<group>"; };
|
5B21176F28753B9D000443A9 /* SessionCtl_Delegates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionCtl_Delegates.swift; sourceTree = "<group>"; };
|
||||||
5B2DB17127AF8771006D874E /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; name = Makefile; path = Data/Makefile; sourceTree = "<group>"; };
|
5B2DB17127AF8771006D874E /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; name = Makefile; path = Data/Makefile; sourceTree = "<group>"; };
|
||||||
5B2F2BB3286216A500B8557B /* vChewingTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = vChewingTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
5B2F2BB3286216A500B8557B /* vChewingTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = vChewingTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
5B30F11227BA568800484E24 /* vChewingKeyLayout.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = vChewingKeyLayout.bundle; sourceTree = "<group>"; };
|
5B30F11227BA568800484E24 /* vChewingKeyLayout.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = vChewingKeyLayout.bundle; sourceTree = "<group>"; };
|
||||||
|
@ -206,7 +206,7 @@
|
||||||
5B40113A28D71B8700A9D4CB /* vChewing_Uninstaller */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_Uninstaller; path = Packages/vChewing_Uninstaller; sourceTree = "<group>"; };
|
5B40113A28D71B8700A9D4CB /* vChewing_Uninstaller */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_Uninstaller; path = Packages/vChewing_Uninstaller; sourceTree = "<group>"; };
|
||||||
5B62A33C27AE7CC100A19448 /* ctlAboutWindow.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = ctlAboutWindow.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
5B62A33C27AE7CC100A19448 /* ctlAboutWindow.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = ctlAboutWindow.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||||
5B65B919284D0185007C558B /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
5B65B919284D0185007C558B /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
||||||
5B6C141128A9D4B30098ADF8 /* ctlInputMethod_HandleEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ctlInputMethod_HandleEvent.swift; sourceTree = "<group>"; };
|
5B6C141128A9D4B30098ADF8 /* SessionCtl_HandleEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionCtl_HandleEvent.swift; sourceTree = "<group>"; };
|
||||||
5B73FB5427B2BD6900E9BF49 /* PhraseEditor-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "PhraseEditor-Info.plist"; path = "UserPhraseEditor/PhraseEditor-Info.plist"; sourceTree = SOURCE_ROOT; };
|
5B73FB5427B2BD6900E9BF49 /* PhraseEditor-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "PhraseEditor-Info.plist"; path = "UserPhraseEditor/PhraseEditor-Info.plist"; sourceTree = SOURCE_ROOT; };
|
||||||
5B73FB5F27B2BE1300E9BF49 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
5B73FB5F27B2BE1300E9BF49 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
5B782EC3280C243C007276DE /* KeyHandler_HandleCandidate.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = KeyHandler_HandleCandidate.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
5B782EC3280C243C007276DE /* KeyHandler_HandleCandidate.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = KeyHandler_HandleCandidate.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||||
|
@ -230,7 +230,7 @@
|
||||||
5BA9FD0D27FEDB6B002DE248 /* suiPrefPaneExperience.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = suiPrefPaneExperience.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
5BA9FD0D27FEDB6B002DE248 /* suiPrefPaneExperience.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = suiPrefPaneExperience.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||||
5BA9FD0E27FEDB6B002DE248 /* suiPrefPaneDictionary.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = suiPrefPaneDictionary.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
5BA9FD0E27FEDB6B002DE248 /* suiPrefPaneDictionary.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = suiPrefPaneDictionary.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||||
5BAEFACF28012565001F42C9 /* LMMgr.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = LMMgr.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
5BAEFACF28012565001F42C9 /* LMMgr.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = LMMgr.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||||
5BB802D927FABA8300CF1C19 /* ctlInputMethod_Menu.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = ctlInputMethod_Menu.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
5BB802D927FABA8300CF1C19 /* SessionCtl_Menu.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = SessionCtl_Menu.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||||
5BBBB75D27AED54C0023B93A /* Beep.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = Beep.m4a; sourceTree = "<group>"; };
|
5BBBB75D27AED54C0023B93A /* Beep.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = Beep.m4a; sourceTree = "<group>"; };
|
||||||
5BBBB75E27AED54C0023B93A /* Fart.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = Fart.m4a; sourceTree = "<group>"; };
|
5BBBB75E27AED54C0023B93A /* Fart.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = Fart.m4a; sourceTree = "<group>"; };
|
||||||
5BBBB76A27AED5DB0023B93A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/frmAboutWindow.xib; sourceTree = "<group>"; };
|
5BBBB76A27AED5DB0023B93A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/frmAboutWindow.xib; sourceTree = "<group>"; };
|
||||||
|
@ -313,7 +313,7 @@
|
||||||
D427F76B278CA1BA004A2160 /* AppDelegate.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = AppDelegate.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
D427F76B278CA1BA004A2160 /* AppDelegate.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = AppDelegate.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||||
D47B92BF27972AC800458394 /* main.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = main.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
D47B92BF27972AC800458394 /* main.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = main.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||||
D47F7DCD278BFB57002F9DD7 /* ctlPrefWindow.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = ctlPrefWindow.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
D47F7DCD278BFB57002F9DD7 /* ctlPrefWindow.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = ctlPrefWindow.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||||
D4A13D5927A59D5C003BE359 /* ctlInputMethod_Core.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = ctlInputMethod_Core.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
D4A13D5927A59D5C003BE359 /* SessionCtl_Core.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = SessionCtl_Core.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||||
D4E33D8927A838CF006DB1CF /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = "<group>"; };
|
D4E33D8927A838CF006DB1CF /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
D4E33D8E27A838F0006DB1CF /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
D4E33D8E27A838F0006DB1CF /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
D4F0BBDE279AF1AF0071253C /* ArchiveUtil.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = ArchiveUtil.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
D4F0BBDE279AF1AF0071253C /* ArchiveUtil.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = ArchiveUtil.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||||
|
@ -662,13 +662,6 @@
|
||||||
5B62A33A27AE7C7500A19448 /* WindowControllers */,
|
5B62A33A27AE7C7500A19448 /* WindowControllers */,
|
||||||
D427F76B278CA1BA004A2160 /* AppDelegate.swift */,
|
D427F76B278CA1BA004A2160 /* AppDelegate.swift */,
|
||||||
5B8457A02871ADBE00C93B01 /* ChineseConverterBridge.swift */,
|
5B8457A02871ADBE00C93B01 /* ChineseConverterBridge.swift */,
|
||||||
D4A13D5927A59D5C003BE359 /* ctlInputMethod_Core.swift */,
|
|
||||||
5B21176F28753B9D000443A9 /* ctlInputMethod_Delegates.swift */,
|
|
||||||
5B21176D28753B35000443A9 /* ctlInputMethod_HandleDisplay.swift */,
|
|
||||||
5B6C141128A9D4B30098ADF8 /* ctlInputMethod_HandleEvent.swift */,
|
|
||||||
5B21176B287539BB000443A9 /* ctlInputMethod_HandleStates.swift */,
|
|
||||||
5B00FA0B28DEC17200F6D436 /* ctlInputMethod_IMKCandidatesData.swift */,
|
|
||||||
5BB802D927FABA8300CF1C19 /* ctlInputMethod_Menu.swift */,
|
|
||||||
5BF56F9728C39A2700DD6839 /* IMEState.swift */,
|
5BF56F9728C39A2700DD6839 /* IMEState.swift */,
|
||||||
5BF56F9928C39D1800DD6839 /* IMEStateData.swift */,
|
5BF56F9928C39D1800DD6839 /* IMEStateData.swift */,
|
||||||
5BD0113C2818543900609769 /* KeyHandler_Core.swift */,
|
5BD0113C2818543900609769 /* KeyHandler_Core.swift */,
|
||||||
|
@ -680,6 +673,13 @@
|
||||||
D47B92BF27972AC800458394 /* main.swift */,
|
D47B92BF27972AC800458394 /* main.swift */,
|
||||||
5B963CA728D5DB1400DCEE88 /* PrefMgr_Core.swift */,
|
5B963CA728D5DB1400DCEE88 /* PrefMgr_Core.swift */,
|
||||||
5BCCAFF728DB19A300AB1B27 /* PrefMgr_Extension.swift */,
|
5BCCAFF728DB19A300AB1B27 /* PrefMgr_Extension.swift */,
|
||||||
|
D4A13D5927A59D5C003BE359 /* SessionCtl_Core.swift */,
|
||||||
|
5B21176F28753B9D000443A9 /* SessionCtl_Delegates.swift */,
|
||||||
|
5B21176D28753B35000443A9 /* SessionCtl_HandleDisplay.swift */,
|
||||||
|
5B6C141128A9D4B30098ADF8 /* SessionCtl_HandleEvent.swift */,
|
||||||
|
5B21176B287539BB000443A9 /* SessionCtl_HandleStates.swift */,
|
||||||
|
5B00FA0B28DEC17200F6D436 /* SessionCtl_IMKCandidatesData.swift */,
|
||||||
|
5BB802D927FABA8300CF1C19 /* SessionCtl_Menu.swift */,
|
||||||
);
|
);
|
||||||
path = Modules;
|
path = Modules;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1056,18 +1056,18 @@
|
||||||
5BF56F9828C39A2700DD6839 /* IMEState.swift in Sources */,
|
5BF56F9828C39A2700DD6839 /* IMEState.swift in Sources */,
|
||||||
5B62A33D27AE7CC100A19448 /* ctlAboutWindow.swift in Sources */,
|
5B62A33D27AE7CC100A19448 /* ctlAboutWindow.swift in Sources */,
|
||||||
D47B92C027972AD100458394 /* main.swift in Sources */,
|
D47B92C027972AD100458394 /* main.swift in Sources */,
|
||||||
D4A13D5A27A59F0B003BE359 /* ctlInputMethod_Core.swift in Sources */,
|
D4A13D5A27A59F0B003BE359 /* SessionCtl_Core.swift in Sources */,
|
||||||
5B0EF55F28CDBF8E00F8F7CE /* ctlClientListMgr.swift in Sources */,
|
5B0EF55F28CDBF8E00F8F7CE /* ctlClientListMgr.swift in Sources */,
|
||||||
5B21177028753B9D000443A9 /* ctlInputMethod_Delegates.swift in Sources */,
|
5B21177028753B9D000443A9 /* SessionCtl_Delegates.swift in Sources */,
|
||||||
5B21176E28753B35000443A9 /* ctlInputMethod_HandleDisplay.swift in Sources */,
|
5B21176E28753B35000443A9 /* SessionCtl_HandleDisplay.swift in Sources */,
|
||||||
5BA9FD1027FEDB6B002DE248 /* suiPrefPaneKeyboard.swift in Sources */,
|
5BA9FD1027FEDB6B002DE248 /* suiPrefPaneKeyboard.swift in Sources */,
|
||||||
5B3133BF280B229700A4A505 /* KeyHandler_States.swift in Sources */,
|
5B3133BF280B229700A4A505 /* KeyHandler_States.swift in Sources */,
|
||||||
5B78EE0D28A562B4009456C1 /* suiPrefPaneDevZone.swift in Sources */,
|
5B78EE0D28A562B4009456C1 /* suiPrefPaneDevZone.swift in Sources */,
|
||||||
5B6C141228A9D4B30098ADF8 /* ctlInputMethod_HandleEvent.swift in Sources */,
|
5B6C141228A9D4B30098ADF8 /* SessionCtl_HandleEvent.swift in Sources */,
|
||||||
D47F7DCE278BFB57002F9DD7 /* ctlPrefWindow.swift in Sources */,
|
D47F7DCE278BFB57002F9DD7 /* ctlPrefWindow.swift in Sources */,
|
||||||
5BD0113D2818543900609769 /* KeyHandler_Core.swift in Sources */,
|
5BD0113D2818543900609769 /* KeyHandler_Core.swift in Sources */,
|
||||||
5BF56F9A28C39D1800DD6839 /* IMEStateData.swift in Sources */,
|
5BF56F9A28C39D1800DD6839 /* IMEStateData.swift in Sources */,
|
||||||
5B21176C287539BB000443A9 /* ctlInputMethod_HandleStates.swift in Sources */,
|
5B21176C287539BB000443A9 /* SessionCtl_HandleStates.swift in Sources */,
|
||||||
5BAEFAD028012565001F42C9 /* LMMgr.swift in Sources */,
|
5BAEFAD028012565001F42C9 /* LMMgr.swift in Sources */,
|
||||||
5B782EC4280C243C007276DE /* KeyHandler_HandleCandidate.swift in Sources */,
|
5B782EC4280C243C007276DE /* KeyHandler_HandleCandidate.swift in Sources */,
|
||||||
5BA9FD0F27FEDB6B002DE248 /* suiPrefPaneGeneral.swift in Sources */,
|
5BA9FD0F27FEDB6B002DE248 /* suiPrefPaneGeneral.swift in Sources */,
|
||||||
|
@ -1076,9 +1076,9 @@
|
||||||
5B8457A12871ADBE00C93B01 /* ChineseConverterBridge.swift in Sources */,
|
5B8457A12871ADBE00C93B01 /* ChineseConverterBridge.swift in Sources */,
|
||||||
5BA9FD1327FEDB6B002DE248 /* suiPrefPaneDictionary.swift in Sources */,
|
5BA9FD1327FEDB6B002DE248 /* suiPrefPaneDictionary.swift in Sources */,
|
||||||
5BFDF011289635C100417BBC /* IMKCandidatesImpl.swift in Sources */,
|
5BFDF011289635C100417BBC /* IMKCandidatesImpl.swift in Sources */,
|
||||||
5BB802DA27FABA8300CF1C19 /* ctlInputMethod_Menu.swift in Sources */,
|
5BB802DA27FABA8300CF1C19 /* SessionCtl_Menu.swift in Sources */,
|
||||||
5BE377A0288FED8D0037365B /* KeyHandler_HandleComposition.swift in Sources */,
|
5BE377A0288FED8D0037365B /* KeyHandler_HandleComposition.swift in Sources */,
|
||||||
5B00FA0C28DEC17200F6D436 /* ctlInputMethod_IMKCandidatesData.swift in Sources */,
|
5B00FA0C28DEC17200F6D436 /* SessionCtl_IMKCandidatesData.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue