KanjiConv // Use Hotenka Chinese Converter instead.

This commit is contained in:
ShikiSuen 2022-07-03 18:56:03 +08:00
parent 4266d9daf2
commit db66acea36
7 changed files with 249 additions and 784 deletions

View File

@ -0,0 +1,54 @@
// Copyright (c) 2021 and onwards The vChewing Project (MIT-NTL License).
/*
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
1. The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
2. No trademark license is granted to use the trade names, trademarks, service
marks, or product names of Contributor, except as required to fulfill notice
requirements above.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
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.
*/
import Foundation
public class ChineseConverter {
public static let shared = HotenkaChineseConverter.init(plistDir: mgrLangModel.getBundleDataPath("convdict"))
/// CrossConvert.
///
/// - Parameter string: Text in Original Script.
/// - Returns: Text converted to Different Script.
public static func crossConvert(_ string: String) -> String? {
switch IME.currentInputMode {
case InputMode.imeModeCHS:
return shared.convert(string, to: .zhHantTW)
case InputMode.imeModeCHT:
return shared.convert(string, to: .zhHansCN)
default:
return string
}
}
public static func cnvTradToKangXi(_ strObj: String) -> String {
return shared.convert(strObj, to: .zhHantKX)
}
public static func cnvTradToJIS(_ strObj: String) -> String {
//
let strObj = cnvTradToKangXi(strObj)
return shared.convert(strObj, to: .zhHansJP)
}
}

View File

@ -0,0 +1,170 @@
// Swiftified by (c) 2022 and onwards The vChewing Project (MIT-NTL License).
// Rebranded from (c) Nick Chen's Obj-C library "NCChineseConverter" (MIT License).
/*
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
1. The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
2. No trademark license is granted to use the trade names, trademarks, service
marks, or product names of Contributor, except as required to fulfill notice
requirements above.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
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.
*/
import Foundation
public enum DictType {
case zhHantTW
case zhHantHK
case zhHansSG
case zhHansJP
case zhHantKX
case zhHansCN
}
public class HotenkaChineseConverter {
private(set) var dict: [String: [String: String]]
private var dictFiles: [String: [String]]
public init(plistDir: String) {
dictFiles = .init()
do {
let rawData = try Data(contentsOf: URL(fileURLWithPath: plistDir))
let rawPlist: [String: [String: String]] =
try PropertyListSerialization.propertyList(from: rawData, format: nil) as? [String: [String: String]] ?? .init()
dict = rawPlist
} catch {
NSLog("// Exception happened when reading dict plist at: \(plistDir).")
dict = .init()
}
}
public init(dictDir: String) {
dictFiles = [
"zh2TW": [String](),
"zh2HK": [String](),
"zh2SG": [String](),
"zh2JP": [String](),
"zh2KX": [String](),
"zh2CN": [String](),
]
dict = [
"zh2TW": [String: String](),
"zh2HK": [String: String](),
"zh2SG": [String: String](),
"zh2JP": [String: String](),
"zh2KX": [String: String](),
"zh2CN": [String: String](),
]
let enumerator = FileManager.default.enumerator(atPath: dictDir)
guard let filePaths = enumerator?.allObjects as? [String] else { return }
let arrFiles = filePaths.filter { $0.contains(".txt") }.compactMap { URL(string: dictDir + $0) }
for theURL in arrFiles {
let fullFilename = theURL.lastPathComponent
let mainFilename = (fullFilename as NSString).substring(to: (fullFilename as NSString).range(of: ".").location)
if var neta = dictFiles[mainFilename] {
neta.append(theURL.path)
dictFiles[mainFilename] = neta
} else {
dictFiles[mainFilename] = [theURL.path]
}
}
for dictType in dictFiles.keys {
guard let arrFiles = dictFiles[dictType] else { continue }
if arrFiles.count <= 0 {
continue
}
for filePath in arrFiles {
if !FileManager.default.fileExists(atPath: filePath) {
continue
}
do {
let arrLines = try String(contentsOfFile: filePath, encoding: .utf8).split(separator: "\n")
for line in arrLines {
let arrWords = line.split(separator: "\t")
if arrWords.count == 2 {
if var theSubDict = dict[dictType] {
theSubDict[String(arrWords[0])] = String(arrWords[1])
dict[dictType] = theSubDict
} else {
dict[dictType] = .init()
}
}
}
} catch {
continue
}
}
}
sleep(1)
}
// MARK: - Public Methods
func convert(_ target: String, to dictType: DictType) -> String {
var dictTypeKey: String
switch dictType {
case .zhHantTW:
dictTypeKey = "zh2TW"
case .zhHantHK:
dictTypeKey = "zh2HK"
case .zhHansSG:
dictTypeKey = "zh2SG"
case .zhHansJP:
dictTypeKey = "zh2JP"
case .zhHantKX:
dictTypeKey = "zh2KX"
case .zhHansCN:
dictTypeKey = "zh2CN"
}
var result = ""
guard let useDict = dict[dictTypeKey] else { return target }
var i = 0
while i < (target.count) {
let max = (target.count) - i
var j: Int
j = max
innerloop: while j > 0 {
let start = target.index(target.startIndex, offsetBy: i)
let end = target.index(target.startIndex, offsetBy: i + j)
guard let useDictSubStr = useDict[String(target[start..<end])] else {
j -= 1
continue
}
result = result + useDictSubStr
break innerloop
}
if j == 0 {
let start = target.index(target.startIndex, offsetBy: i)
let end = target.index(target.startIndex, offsetBy: i + 1)
result = result + String(target[start..<end])
i += 1
} else {
i += j
}
}
return result
}
}

Binary file not shown.

View File

@ -373,10 +373,10 @@ enum InputState {
var userPhraseConverted: String {
let text =
OpenCCBridge.crossConvert(composingBuffer.utf16SubString(with: markedRange)) ?? ""
ChineseConverter.crossConvert(composingBuffer.utf16SubString(with: markedRange)) ?? ""
let selectedReadings = readings[literalMarkedRange]
let joined = selectedReadings.joined(separator: "-")
let convertedMark = "#𝙊𝙥𝙚𝙣𝘾𝘾"
let convertedMark = "#𝙃𝙪𝙢𝙖𝙣𝘾𝙝𝙚𝙘𝙠𝙍𝙚𝙦𝙪𝙞𝙧𝙚𝙙"
return "\(text) \(joined)\t\(convertedMark)"
}
}

View File

@ -1,775 +0,0 @@
// Copyright (c) 2021 and onwards The vChewing Project (MIT-NTL License).
/*
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
1. The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
2. No trademark license is granted to use the trade names, trademarks, service
marks, or product names of Contributor, except as required to fulfill notice
requirements above.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
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.
*/
import Cocoa
extension String {
fileprivate mutating func selfReplace(_ strOf: String, _ strWith: String = "") {
self = replacingOccurrences(of: strOf, with: strWith)
}
}
class vChewingKanjiConverter {
class func cnvTradToKangXi(_ strObj: String) -> String {
var strObj = strObj
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("口喫", "口吃")
strObj.selfReplace("合着", "合著")
strObj.selfReplace("名着", "名著")
strObj.selfReplace("巨着", "巨著")
strObj.selfReplace("鉅着", "鉅著")
strObj.selfReplace("昭着", "昭著")
strObj.selfReplace("所着", "所著")
strObj.selfReplace("遺着", "遺著")
strObj.selfReplace("顯着", "顯著")
strObj.selfReplace("土着", "土著")
strObj.selfReplace("着作", "著作")
strObj.selfReplace("着名", "著名")
strObj.selfReplace("着式", "著式")
strObj.selfReplace("着志", "著志")
strObj.selfReplace("着於", "著於")
strObj.selfReplace("着書", "著書")
strObj.selfReplace("着白", "著白")
strObj.selfReplace("着稱", "著稱")
strObj.selfReplace("着者", "著者")
strObj.selfReplace("着述", "著述")
strObj.selfReplace("着錄", "著錄")
strObj.selfReplace("蹇喫", "蹇吃")
strObj.selfReplace("大着", "大著")
strObj.selfReplace("刊着", "刊著")
strObj.selfReplace("玄着", "玄著")
strObj.selfReplace("白着", "白著")
strObj.selfReplace("住着", "住著")
strObj.selfReplace("刻着", "刻著")
strObj.selfReplace("卓着", "卓著")
strObj.selfReplace("拙着", "拙著")
strObj.selfReplace("查着", "查著")
strObj.selfReplace("炳着", "炳著")
strObj.selfReplace("原着", "原著")
strObj.selfReplace("專着", "專著")
strObj.selfReplace("焯着", "焯著")
strObj.selfReplace("着論", "著論")
strObj.selfReplace("着績", "著績")
strObj.selfReplace("較着", "較著")
strObj.selfReplace("彰着", "彰著")
strObj.selfReplace("撰着", "撰著")
strObj.selfReplace("編着", "編著")
strObj.selfReplace("論着", "論著")
strObj.selfReplace("雜着", "雜著")
strObj.selfReplace("譯着", "譯著")
strObj.selfReplace("地覈", "地核")
strObj.selfReplace("多覈", "多核")
strObj.selfReplace("氘覈", "氘核")
strObj.selfReplace("杏覈", "杏核")
strObj.selfReplace("非覈", "非核")
strObj.selfReplace("覈三", "核三")
strObj.selfReplace("覈下", "核下")
strObj.selfReplace("覈災", "核災")
strObj.selfReplace("覈武", "核武")
strObj.selfReplace("覈狀", "核狀")
strObj.selfReplace("覈桃", "核桃")
strObj.selfReplace("覈彈", "核彈")
strObj.selfReplace("覈戰", "核戰")
strObj.selfReplace("覈糖", "核糖")
strObj.selfReplace("覈醣", "核醣")
strObj.selfReplace("晶覈", "晶核")
strObj.selfReplace("熱覈", "熱核")
strObj.selfReplace("反覈", "反核")
strObj.selfReplace("卵覈", "卵核")
strObj.selfReplace("果覈", "果核")
strObj.selfReplace("剋覈", "剋核")
strObj.selfReplace("覈力", "核力")
strObj.selfReplace("覈子", "核子")
strObj.selfReplace("覈仁", "核仁")
strObj.selfReplace("覈心", "核心")
strObj.selfReplace("覈四", "核四")
strObj.selfReplace("覈果", "核果")
strObj.selfReplace("覈型", "核型")
strObj.selfReplace("覈苷", "核苷")
strObj.selfReplace("覈能", "核能")
strObj.selfReplace("覈傘", "核傘")
strObj.selfReplace("覈發", "核發")
strObj.selfReplace("覈電", "核電")
strObj.selfReplace("覈塵", "核塵")
strObj.selfReplace("覈酸", "核酸")
strObj.selfReplace("覈膜", "核膜")
strObj.selfReplace("覈爆", "核爆")
strObj.selfReplace("痔覈", "痔核")
strObj.selfReplace("陰覈", "陰核")
strObj.selfReplace("殽覈", "殽核")
strObj.selfReplace("結覈", "結核")
strObj.selfReplace("菌覈", "菌核")
strObj.selfReplace("煤覈", "煤核")
strObj.selfReplace("着涎茶", "著涎茶")
strObj.selfReplace("喫口令", "吃口令")
strObj.selfReplace("鄧艾喫", "鄧艾吃")
strObj.selfReplace("杏仁覈", "杏仁核")
strObj.selfReplace("覈一廠", "核一廠")
strObj.selfReplace("覈二廠", "核二廠")
strObj.selfReplace("覈三廠", "核三廠")
strObj.selfReplace("覈融合", "核融合")
strObj.selfReplace("覈四廠", "核四廠")
strObj.selfReplace("覈生化", "核生化")
strObj.selfReplace("覈災變", "核災變")
strObj.selfReplace("覈動力", "核動力")
strObj.selfReplace("覈試爆", "核試爆")
strObj.selfReplace("杏覈兒", "杏核兒")
strObj.selfReplace("原子覈", "原子核")
strObj.selfReplace("覈分裂", "核分裂")
strObj.selfReplace("覈化學", "核化學")
strObj.selfReplace("覈反應", "核反應")
strObj.selfReplace("覈半徑", "核半徑")
strObj.selfReplace("覈污染", "核污染")
strObj.selfReplace("覈武器", "核武器")
strObj.selfReplace("覈苷酸", "核苷酸")
strObj.selfReplace("覈蛋白", "核蛋白")
strObj.selfReplace("覈黃疸", "核黃疸")
strObj.selfReplace("覈黃素", "核黃素")
strObj.selfReplace("覈裝置", "核裝置")
strObj.selfReplace("覈電廠", "核電廠")
strObj.selfReplace("覈廢料", "核廢料")
strObj.selfReplace("覈彈頭", "核彈頭")
strObj.selfReplace("覈潛艇", "核潛艇")
strObj.selfReplace("覈燃料", "核燃料")
strObj.selfReplace("桃覈雕", "桃核雕")
strObj.selfReplace("細胞覈", "細胞核")
strObj.selfReplace("棗覈臉", "棗核臉")
strObj.selfReplace("以微知着", "以微知著")
strObj.selfReplace("見微知着", "見微知著")
strObj.selfReplace("恩威並着", "恩威並著")
strObj.selfReplace("視微知着", "視微知著")
strObj.selfReplace("睹微知着", "睹微知著")
strObj.selfReplace("遐邇着聞", "遐邇著聞")
strObj.selfReplace("積微成着", "積微成著")
strObj.selfReplace("地下覈試", "地下核試")
strObj.selfReplace("地下覈爆", "地下核爆")
strObj.selfReplace("非覈武區", "非核武區")
strObj.selfReplace("覈反應器", "核反應器")
strObj.selfReplace("覈物理學", "核物理學")
strObj.selfReplace("覈能發電", "核能發電")
strObj.selfReplace("覈能電廠", "核能電廠")
strObj.selfReplace("覈能廢料", "核能廢料")
strObj.selfReplace("覈能潛艇", "核能潛艇")
strObj.selfReplace("覈磁共振", "核磁共振")
strObj.selfReplace("熱覈反應", "熱核反應")
strObj.selfReplace("賣李鑽覈", "賣李鑽核")
strObj.selfReplace("雙覈都市", "雙核都市")
strObj.selfReplace("罵人不吐覈", "罵人不吐核")
return strObj
}
class func cnvTradToJIS(_ strObj: String) -> String {
//
var strObj = cnvTradToKangXi(strObj)
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "寿")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "湿")
strObj.selfReplace("", "")
strObj.selfReplace("滿", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("祿", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("", "")
strObj.selfReplace("叮嚀", "丁寧")
strObj.selfReplace("鄭重", "丁重")
strObj.selfReplace("輿論", "世論")
strObj.selfReplace("唖鈴", "亜鈴")
strObj.selfReplace("交叉", "交差")
strObj.selfReplace("饗宴", "供宴")
strObj.selfReplace("駿馬", "俊馬")
strObj.selfReplace("堡塁", "保塁")
strObj.selfReplace("扁平", "偏平")
strObj.selfReplace("碇泊", "停泊")
strObj.selfReplace("優駿", "優俊")
strObj.selfReplace("尖兵", "先兵")
strObj.selfReplace("尖鋭", "先鋭")
strObj.selfReplace("共軛", "共役")
strObj.selfReplace("饒舌", "冗舌")
strObj.selfReplace("兇器", "凶器")
strObj.selfReplace("鑿岩", "削岩")
strObj.selfReplace("庖丁", "包丁")
strObj.selfReplace("繃帯", "包帯")
strObj.selfReplace("区劃", "区画")
strObj.selfReplace("儼然", "厳然")
strObj.selfReplace("友誼", "友宜")
strObj.selfReplace("叛乱", "反乱")
strObj.selfReplace("蒐集", "収集")
strObj.selfReplace("抒情", "叙情")
strObj.selfReplace("擡頭", "台頭")
strObj.selfReplace("合弁", "合弁")
strObj.selfReplace("歎願", "嘆願")
strObj.selfReplace("廻転", "回転")
strObj.selfReplace("回游", "回遊")
strObj.selfReplace("捧持", "奉持")
strObj.selfReplace("萎縮", "委縮")
strObj.selfReplace("輾転", "展転")
strObj.selfReplace("稀少", "希少")
strObj.selfReplace("眩惑", "幻惑")
strObj.selfReplace("広汎", "広範")
strObj.selfReplace("曠野", "広野")
strObj.selfReplace("廃墟", "廃虚")
strObj.selfReplace("弁当", "弁当")
strObj.selfReplace("弁膜", "弁膜")
strObj.selfReplace("弁護", "弁護")
strObj.selfReplace("辮髪", "弁髪")
strObj.selfReplace("絃歌", "弦歌")
strObj.selfReplace("恩誼", "恩義")
strObj.selfReplace("意嚮", "意向")
strObj.selfReplace("臆断", "憶断")
strObj.selfReplace("臆病", "憶病")
strObj.selfReplace("戦歿", "戦没")
strObj.selfReplace("煽情", "扇情")
strObj.selfReplace("手帖", "手帳")
strObj.selfReplace("伎倆", "技量")
strObj.selfReplace("抜萃", "抜粋")
strObj.selfReplace("披瀝", "披歴")
strObj.selfReplace("牴触", "抵触")
strObj.selfReplace("抽籤", "抽選")
strObj.selfReplace("勾引", "拘引")
strObj.selfReplace("醵出", "拠出")
strObj.selfReplace("醵金", "拠金")
strObj.selfReplace("掘鑿", "掘削")
strObj.selfReplace("扣除", "控除")
strObj.selfReplace("掩護", "援護")
strObj.selfReplace("抛棄", "放棄")
strObj.selfReplace("撒水", "散水")
strObj.selfReplace("敬虔", "敬謙")
strObj.selfReplace("敷衍", "敷延")
strObj.selfReplace("断乎", "断固")
strObj.selfReplace("簇生", "族生")
strObj.selfReplace("陞叙", "昇叙")
strObj.selfReplace("煖房", "暖房")
strObj.selfReplace("暗誦", "暗唱")
strObj.selfReplace("闇夜", "暗夜")
strObj.selfReplace("曝露", "暴露")
strObj.selfReplace("涸渇", "枯渇")
strObj.selfReplace("恰好", "格好")
strObj.selfReplace("恰幅", "格幅")
strObj.selfReplace("毀損", "棄損")
strObj.selfReplace("摸索", "模索")
strObj.selfReplace("欠欠", "欠缺")
strObj.selfReplace("屍体", "死体")
strObj.selfReplace("臀部", "殿部")
strObj.selfReplace("拇指", "母指")
strObj.selfReplace("気魄", "気迫")
strObj.selfReplace("訣別", "決別")
strObj.selfReplace("決潰", "決壊")
strObj.selfReplace("沈澱", "沈殿")
strObj.selfReplace("波瀾", "波乱")
strObj.selfReplace("註釈", "注釈")
strObj.selfReplace("洗滌", "洗濯")
strObj.selfReplace("活潑", "活発")
strObj.selfReplace("滲透", "浸透")
strObj.selfReplace("浸蝕", "浸食")
strObj.selfReplace("銷却", "消却")
strObj.selfReplace("渾然", "混然")
strObj.selfReplace("弯曲", "湾曲")
strObj.selfReplace("熔接", "溶接")
strObj.selfReplace("漁撈", "漁労")
strObj.selfReplace("飄然", "漂然")
strObj.selfReplace("激昂", "激高")
strObj.selfReplace("火焔", "火炎")
strObj.selfReplace("焦躁", "焦燥")
strObj.selfReplace("斑点", "班点")
strObj.selfReplace("溜飲", "留飲")
strObj.selfReplace("掠奪", "略奪")
strObj.selfReplace("疏通", "疎通")
strObj.selfReplace("醱酵", "発酵")
strObj.selfReplace("白堊", "白亜")
strObj.selfReplace("相剋", "相克")
strObj.selfReplace("智慧", "知恵")
strObj.selfReplace("破毀", "破棄")
strObj.selfReplace("確乎", "確固")
strObj.selfReplace("禁錮", "禁固")
strObj.selfReplace("符牒", "符丁")
strObj.selfReplace("扮装", "粉装")
strObj.selfReplace("紫斑", "紫班")
strObj.selfReplace("終熄", "終息")
strObj.selfReplace("綜合", "総合")
strObj.selfReplace("編輯", "編集")
strObj.selfReplace("義捐", "義援")
strObj.selfReplace("肝腎", "肝心")
strObj.selfReplace("悖徳", "背徳")
strObj.selfReplace("脈搏", "脈拍")
strObj.selfReplace("膨脹", "膨張")
strObj.selfReplace("芳醇", "芳純")
strObj.selfReplace("叡智", "英知")
strObj.selfReplace("蒸溜", "蒸留")
strObj.selfReplace("燻蒸", "薫蒸")
strObj.selfReplace("燻製", "薫製")
strObj.selfReplace("衣裳", "衣装")
strObj.selfReplace("衰頽", "衰退")
strObj.selfReplace("悠然", "裕然")
strObj.selfReplace("輔佐", "補佐")
strObj.selfReplace("訓誡", "訓戒")
strObj.selfReplace("試煉", "試練")
strObj.selfReplace("詭弁", "詭弁")
strObj.selfReplace("媾和", "講和")
strObj.selfReplace("象嵌", "象眼")
strObj.selfReplace("貫禄", "貫録")
strObj.selfReplace("買弁", "買弁")
strObj.selfReplace("讚辞", "賛辞")
strObj.selfReplace("蹈襲", "踏襲")
strObj.selfReplace("車両", "車両")
strObj.selfReplace("顛倒", "転倒")
strObj.selfReplace("輪廓", "輪郭")
strObj.selfReplace("褪色", "退色")
strObj.selfReplace("杜絶", "途絶")
strObj.selfReplace("連繫", "連係")
strObj.selfReplace("連合", "連合")
strObj.selfReplace("銓衡", "選考")
strObj.selfReplace("醋酸", "酢酸")
strObj.selfReplace("野鄙", "野卑")
strObj.selfReplace("礦石", "鉱石")
strObj.selfReplace("間歇", "間欠")
strObj.selfReplace("函数", "関数")
strObj.selfReplace("防御", "防御")
strObj.selfReplace("嶮岨", "険阻")
strObj.selfReplace("牆壁", "障壁")
strObj.selfReplace("障礙", "障害")
strObj.selfReplace("湮滅", "隠滅")
strObj.selfReplace("聚落", "集落")
strObj.selfReplace("雇傭", "雇用")
strObj.selfReplace("諷喩", "風諭")
strObj.selfReplace("蜚語", "飛語")
strObj.selfReplace("香奠", "香典")
strObj.selfReplace("骨骼", "骨格")
strObj.selfReplace("亢進", "高進")
strObj.selfReplace("鳥瞰", "鳥観")
strObj.selfReplace("一攫", "一獲")
strObj.selfReplace("肩胛", "肩甲")
strObj.selfReplace("箇条", "個条")
strObj.selfReplace("啓動", "起動")
strObj.selfReplace("三叉路", "三差路")
strObj.selfReplace("嬉遊曲", "喜遊曲")
strObj.selfReplace("建蔽率", "建坪率")
strObj.selfReplace("慰藉料", "慰謝料")
strObj.selfReplace("橋頭堡", "橋頭保")
strObj.selfReplace("油槽船", "油送船")
strObj.selfReplace("耕耘機", "耕運機")
return strObj
}
}

View File

@ -46,10 +46,10 @@ public enum IME {
static func kanjiConversionIfRequired(_ text: String) -> String {
if currentInputMode == InputMode.imeModeCHT {
switch (mgrPrefs.chineseConversionEnabled, mgrPrefs.shiftJISShinjitaiOutputEnabled) {
case (false, true): return vChewingKanjiConverter.cnvTradToJIS(text)
case (true, false): return vChewingKanjiConverter.cnvTradToKangXi(text)
case (false, true): return ChineseConverter.cnvTradToJIS(text)
case (true, false): return ChineseConverter.cnvTradToKangXi(text)
//
case (true, true): return vChewingKanjiConverter.cnvTradToJIS(text)
case (true, true): return ChineseConverter.cnvTradToJIS(text)
case (false, false): return text
}
}

View File

@ -41,6 +41,9 @@
5B782EC4280C243C007276DE /* KeyHandler_HandleCandidate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B782EC3280C243C007276DE /* KeyHandler_HandleCandidate.swift */; };
5B7BC4B027AFFBE800F66C24 /* frmPrefWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B7BC4AE27AFFBE800F66C24 /* frmPrefWindow.xib */; };
5B7F225D2808501000DDD3CB /* KeyHandler_HandleInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7F225C2808501000DDD3CB /* KeyHandler_HandleInput.swift */; };
5B84579E2871AD2200C93B01 /* convdict.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5B84579C2871AD2200C93B01 /* convdict.plist */; };
5B84579F2871AD2200C93B01 /* HotenkaChineseConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B84579D2871AD2200C93B01 /* HotenkaChineseConverter.swift */; };
5B8457A12871ADBE00C93B01 /* HotenkaCCBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8457A02871ADBE00C93B01 /* HotenkaCCBridge.swift */; };
5B887F302826AEA400B6651E /* lmCoreEX.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B887F2F2826AEA400B6651E /* lmCoreEX.swift */; };
5B949BD92816DC5400D87B5D /* LineReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B949BD82816DC5400D87B5D /* LineReader.swift */; };
5B949BDB2816DDBC00D87B5D /* LMConsolidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B949BDA2816DDBC00D87B5D /* LMConsolidator.swift */; };
@ -105,7 +108,6 @@
5BEDB723283B4C250078EB25 /* data-cht.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5BEDB720283B4AEA0078EB25 /* data-cht.plist */; };
5BEDB724283B4C250078EB25 /* data-symbols.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5BEDB71E283B4AEA0078EB25 /* data-symbols.plist */; };
5BEDB725283B4C250078EB25 /* data-chs.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5BEDB71C283B4AEA0078EB25 /* data-chs.plist */; };
5BF8423127BAA942008E7E4C /* vChewingKanjiConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF8423027BAA942008E7E4C /* vChewingKanjiConverter.swift */; };
6A187E2616004C5900466B2E /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6A187E2816004C5900466B2E /* MainMenu.xib */; };
6A225A1F23679F2600F685C6 /* NotarizedArchives in Resources */ = {isa = PBXBuildFile; fileRef = 6A225A1E23679F2600F685C6 /* NotarizedArchives */; };
6A2E40F6253A69DA00D1AE1D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6A2E40F5253A69DA00D1AE1D /* Images.xcassets */; };
@ -226,6 +228,9 @@
5B7BC4AF27AFFBE800F66C24 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/frmPrefWindow.xib; sourceTree = "<group>"; };
5B7BC4B227AFFC0B00F66C24 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/frmPrefWindow.strings; sourceTree = "<group>"; };
5B7F225C2808501000DDD3CB /* KeyHandler_HandleInput.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = KeyHandler_HandleInput.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
5B84579C2871AD2200C93B01 /* convdict.plist */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; path = convdict.plist; sourceTree = "<group>"; };
5B84579D2871AD2200C93B01 /* HotenkaChineseConverter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HotenkaChineseConverter.swift; sourceTree = "<group>"; };
5B8457A02871ADBE00C93B01 /* HotenkaCCBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HotenkaCCBridge.swift; sourceTree = "<group>"; };
5B887F2F2826AEA400B6651E /* lmCoreEX.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = lmCoreEX.swift; sourceTree = "<group>"; usesTabs = 0; };
5B949BD82816DC5400D87B5D /* LineReader.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; lineEnding = 0; path = LineReader.swift; sourceTree = "<group>"; usesTabs = 0; };
5B949BDA2816DDBC00D87B5D /* LMConsolidator.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; lineEnding = 0; path = LMConsolidator.swift; sourceTree = "<group>"; usesTabs = 0; };
@ -300,7 +305,6 @@
5BEDB71E283B4AEA0078EB25 /* data-symbols.plist */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; name = "data-symbols.plist"; path = "Data/data-symbols.plist"; sourceTree = "<group>"; };
5BEDB71F283B4AEA0078EB25 /* data-zhuyinwen.plist */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; name = "data-zhuyinwen.plist"; path = "Data/data-zhuyinwen.plist"; sourceTree = "<group>"; };
5BEDB720283B4AEA0078EB25 /* data-cht.plist */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; name = "data-cht.plist"; path = "Data/data-cht.plist"; sourceTree = "<group>"; };
5BF8423027BAA942008E7E4C /* vChewingKanjiConverter.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = vChewingKanjiConverter.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
5BFDF48C27B51867009523B6 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Main.strings"; sourceTree = "<group>"; };
6A0D4EA215FC0D2D00ABF4B3 /* vChewing.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = vChewing.app; sourceTree = BUILT_PRODUCTS_DIR; };
6A0D4EF515FC0DA600ABF4B3 /* IME-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "IME-Info.plist"; sourceTree = "<group>"; };
@ -426,6 +430,7 @@
5B62A30127AE732800A19448 /* 3rdParty */ = {
isa = PBXGroup;
children = (
5B84579B2871AD2200C93B01 /* HotenkaChineseConverter */,
5B949BD72816DC4400D87B5D /* LineReader */,
5B707CE627D9F43E0099EF99 /* OpenCCBridge */,
5BA9FCEA27FED652002DE248 /* SindreSorhus */,
@ -458,7 +463,6 @@
5B3133BE280B229700A4A505 /* KeyHandler_States.swift */,
5B62A33727AE79CD00A19448 /* StringUtils.swift */,
5BAA8FBD282CAF380066C406 /* SyllableComposer.swift */,
5BF8423027BAA942008E7E4C /* vChewingKanjiConverter.swift */,
);
path = ControllerModules;
sourceTree = "<group>";
@ -610,6 +614,16 @@
path = OpenCCBridge;
sourceTree = "<group>";
};
5B84579B2871AD2200C93B01 /* HotenkaChineseConverter */ = {
isa = PBXGroup;
children = (
5B84579C2871AD2200C93B01 /* convdict.plist */,
5B8457A02871ADBE00C93B01 /* HotenkaCCBridge.swift */,
5B84579D2871AD2200C93B01 /* HotenkaChineseConverter.swift */,
);
path = HotenkaChineseConverter;
sourceTree = "<group>";
};
5B949BD72816DC4400D87B5D /* LineReader */ = {
isa = PBXGroup;
children = (
@ -1007,6 +1021,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5B84579E2871AD2200C93B01 /* convdict.plist in Resources */,
5BBBB77427AED70B0023B93A /* MenuIcon-SCVIM@2x.png in Resources */,
D4E33D8A27A838CF006DB1CF /* Localizable.strings in Resources */,
5BDCBB2E27B4E67A00D0CC59 /* vChewingPhraseEditor.app in Resources */,
@ -1152,6 +1167,7 @@
5BA9FD4827FEF3C9002DE248 /* PreferencesWindowController.swift in Sources */,
5BD0113B28180D6100609769 /* LMInstantiator.swift in Sources */,
D4E569DC27A34D0E00AC2CEF /* CTools.m in Sources */,
5B84579F2871AD2200C93B01 /* HotenkaChineseConverter.swift in Sources */,
5B887F302826AEA400B6651E /* lmCoreEX.swift in Sources */,
5BA9FD4627FEF3C9002DE248 /* Container.swift in Sources */,
D47F7DD0278C0897002F9DD7 /* ctlNonModalAlertWindow.swift in Sources */,
@ -1184,6 +1200,7 @@
5BA9FD3E27FEF3C8002DE248 /* Utilities.swift in Sources */,
5B242403284B0D6500520FE4 /* ctlCandidateUniversal.swift in Sources */,
5BA9FD1127FEDB6B002DE248 /* ctlPrefUI.swift in Sources */,
5B8457A12871ADBE00C93B01 /* HotenkaCCBridge.swift in Sources */,
5B38F59C281E2E49007D5F5D /* 2_Grid.swift in Sources */,
5B40730D281672610023DFFF /* lmReplacements.swift in Sources */,
5B38F59E281E2E49007D5F5D /* 6_Bigram.swift in Sources */,
@ -1196,7 +1213,6 @@
5BA9FD1327FEDB6B002DE248 /* suiPrefPaneDictionary.swift in Sources */,
5BBBB77A27AEDC690023B93A /* clsSFX.swift in Sources */,
5BA9FD4727FEF3C9002DE248 /* PreferencesStyleController.swift in Sources */,
5BF8423127BAA942008E7E4C /* vChewingKanjiConverter.swift in Sources */,
5B949BDB2816DDBC00D87B5D /* LMConsolidator.swift in Sources */,
5B38F59F281E2E49007D5F5D /* 3_NodeAnchor.swift in Sources */,
5B62A34727AE7CD900A19448 /* ctlCandidate.swift in Sources */,