KMPDFConvertManager.swift 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505
  1. //
  2. // KMPDFConvertManager.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by tangchao on 2022/12/7.
  6. //
  7. import Cocoa
  8. class KMPDFConvertManager: NSObject {
  9. static let defaultManager = KMPDFConvertManager()
  10. var operationQueue: OperationQueue = OperationQueue()
  11. // lazy var ocrLanguages: [COCRLanguage] = {
  12. // return [.chinese, .chineseTraditional, .english, .japanese, .korean,
  13. // // // Latin
  14. // .serbian, .occitan, .danish, .german, .french, .italian, .spanish, .portuguese, .maori, .malay,
  15. // .maltese, .dutch, .norwegian, .polish, .romanian, .slovak, .slovenian, .albanian, .swedish, .swahili,
  16. // .tagalog, .turish, .uzbek, .vietnamese, .afrikaans, .azerbaijani, .bosnian, .czech, .welsh, .estonian,
  17. // .irish, .croatian, .hungarian, .indonesian, .icelandic, .kurdish, .lithuanian, .latvian,
  18. // // Devanagari
  19. //// .marathi, .nepali, .hindi, .bihari, .maithili, .angika, .bhojpuri, .magahi, .nagpur, .newari,
  20. //// .goanKonkani, .saudiArabia
  21. // ]
  22. // }()
  23. // lazy var ocrLanguageStrings: [String] = {
  24. // var array: [String] = []
  25. // for ocrLanguage in self.ocrLanguages {
  26. // array.append(self.ocrLanguageString(ocrLanguage: ocrLanguage))
  27. // }
  28. // return array
  29. // }()
  30. // private var _languages_asc: [COCRLanguage] = []
  31. // var languages_asc: [COCRLanguage] {
  32. // get {
  33. // if (!self._languages_asc.isEmpty) {
  34. // return self._languages_asc
  35. // }
  36. //
  37. // self._languages_asc = self.getOCRLanguages(sortMode: .ascending)
  38. // return self._languages_asc
  39. // }
  40. // }
  41. // private var _languages_desc: [COCRLanguage] = []
  42. // var languages_desc: [COCRLanguage] {
  43. // get {
  44. // if (!self._languages_desc.isEmpty) {
  45. // return self._languages_desc
  46. // }
  47. //
  48. // self._languages_desc = self.getOCRLanguages(sortMode: .descending)
  49. // return self._languages_desc
  50. // }
  51. // }
  52. private var _languages_asc_strings: [String] = []
  53. // var languages_asc_strings: [String] {
  54. // get {
  55. // if (!self._languages_asc_strings.isEmpty) {
  56. // return self._languages_asc_strings
  57. // }
  58. //
  59. // self._languages_asc_strings = self.getOCRLanguageStrings(sortMode: .ascending)
  60. // return self._languages_asc_strings
  61. // }
  62. // }
  63. private var _languages_desc_strings: [String] = []
  64. // var languages_desc_strings: [String] {
  65. // get {
  66. // if (!self._languages_desc_strings.isEmpty) {
  67. // return self._languages_desc_strings
  68. // }
  69. //
  70. // self._languages_desc_strings = self.getOCRLanguageStrings(sortMode: .descending)
  71. // return self._languages_desc_strings
  72. // }
  73. // }
  74. //
  75. override init() {
  76. super.init()
  77. operationQueue.maxConcurrentOperationCount = 1
  78. }
  79. func convert(convert: KMPDFConvert, completion: @escaping (_ finished: Bool, _ error: Error?) -> ()) {
  80. convert.callback = completion
  81. operationQueue.addOperation(convert)
  82. }
  83. func convert(convert: KMPDFConvert, progress:@escaping (Int)->Void, completion: @escaping (_ finished: Bool, _ error: Error?) -> ()) {
  84. convert.callback = completion
  85. convert.progress = progress
  86. operationQueue.addOperation(convert)
  87. }
  88. func cancel(convert: KMPDFConvert) {
  89. convert.cancel()
  90. self.operationQueue.cancelAllOperations()
  91. }
  92. // public func ocrLanguageString(ocrLanguage: COCRLanguage) -> String {
  93. // switch ocrLanguage {
  94. // case .chinese:
  95. // return NSLocalizedString("Chinese", comment: "")
  96. // case .chineseTraditional:
  97. // return NSLocalizedString("Chinese Traditional", comment: "")
  98. // case .english:
  99. // return NSLocalizedString("English", comment: "")
  100. // case .japanese:
  101. // return NSLocalizedString("Japanese", comment: "")
  102. // case .korean:
  103. // return NSLocalizedString("Kroean", comment: "")
  104. //
  105. // /// Latin
  106. // case .serbian:
  107. // return NSLocalizedString("Serbian", comment: "")
  108. // case .occitan:
  109. // return NSLocalizedString("Occitan", comment: "")
  110. // case .danish:
  111. // return NSLocalizedString("Danish", comment: "")
  112. // case .german:
  113. // return NSLocalizedString("German", comment: "")
  114. // case .french:
  115. // return NSLocalizedString("French", comment: "")
  116. // case .italian:
  117. // return NSLocalizedString("Italian", comment: "")
  118. // case .spanish:
  119. // return NSLocalizedString("Spanish", comment: "")
  120. // case .portuguese:
  121. // return NSLocalizedString("Portuguese", comment: "")
  122. // case .maori:
  123. // return NSLocalizedString("Maori", comment: "")
  124. // case .malay:
  125. // return NSLocalizedString("Malay", comment: "")
  126. //
  127. // case .maltese:
  128. // return NSLocalizedString("Maltese", comment: "")
  129. // case .dutch:
  130. // return NSLocalizedString("Dutch", comment: "")
  131. // case .norwegian:
  132. // return NSLocalizedString("Norwegian", comment: "")
  133. // case .polish:
  134. // return NSLocalizedString("Polish", comment: "")
  135. // case .romanian:
  136. // return NSLocalizedString("Romanian", comment: "")
  137. // case .slovak:
  138. // return NSLocalizedString("Slovak", comment: "")
  139. // case .slovenian:
  140. // return NSLocalizedString("Slovenian", comment: "")
  141. // case .albanian:
  142. // return NSLocalizedString("Albanian", comment: "")
  143. // case .swedish:
  144. // return NSLocalizedString("Swedish", comment: "")
  145. // case .swahili:
  146. // return NSLocalizedString("Swahili", comment: "")
  147. //
  148. // case .tagalog:
  149. // return NSLocalizedString("Tagalog", comment: "")
  150. // case .turish:
  151. // return NSLocalizedString("Turish", comment: "")
  152. // case .uzbek:
  153. // return NSLocalizedString("Uzbek", comment: "")
  154. // case .vietnamese:
  155. // return NSLocalizedString("Vietnamese", comment: "")
  156. // case .afrikaans:
  157. // return NSLocalizedString("Afrikaans", comment: "")
  158. // case .azerbaijani:
  159. // return NSLocalizedString("Azerbaijani", comment: "")
  160. // case .bosnian:
  161. // return NSLocalizedString("Bosnian", comment: "")
  162. // case .czech:
  163. // return NSLocalizedString("Czech", comment: "")
  164. // case .welsh:
  165. // return NSLocalizedString("Welsh", comment: "")
  166. // case .estonian:
  167. // return NSLocalizedString("Estonian", comment: "")
  168. //
  169. // case .irish:
  170. // return NSLocalizedString("Irish", comment: "")
  171. // case .croatian:
  172. // return NSLocalizedString("Croatian", comment: "")
  173. // case .hungarian:
  174. // return NSLocalizedString("Hungarian", comment: "")
  175. // case .indonesian:
  176. // return NSLocalizedString("Indonesian", comment: "")
  177. // case .icelandic:
  178. // return NSLocalizedString("Icelandic", comment: "")
  179. // case .kurdish:
  180. // return NSLocalizedString("Kurdish", comment: "")
  181. // case .lithuanian:
  182. // return NSLocalizedString("Lithuanian", comment: "")
  183. // case .latvian:
  184. // return NSLocalizedString("Latvian", comment: "")
  185. //
  186. // /// Devanagari
  187. // case .marathi:
  188. // return NSLocalizedString("Marathi", comment: "")
  189. // case .nepali:
  190. // return NSLocalizedString("Nepali", comment: "")
  191. // case .hindi:
  192. // return NSLocalizedString("Hindi", comment: "")
  193. // case .bihari:
  194. // return NSLocalizedString("Bihari", comment: "")
  195. // case .maithili:
  196. // return NSLocalizedString("Maithili", comment: "")
  197. // case .angika:
  198. // return NSLocalizedString("Angika", comment: "")
  199. // case .bhojpuri:
  200. // return NSLocalizedString("Bhojpuri", comment: "")
  201. // case .magahi:
  202. // return NSLocalizedString("Magahi", comment: "")
  203. // case .nagpur:
  204. // return NSLocalizedString("Nagpur", comment: "")
  205. // case .newari:
  206. // return NSLocalizedString("Newari", comment: "")
  207. //
  208. // case .goanKonkani:
  209. // return NSLocalizedString("GoanKonkani", comment: "")
  210. // case .saudiArabia:
  211. // return NSLocalizedString("SaudiArabia", comment: "")
  212. // @unknown default:
  213. // return ""
  214. // }
  215. // }
  216. //
  217. // func ocrLanguageIsSupport(appleLanguage: String?) -> Bool {
  218. // if let _ = KMPDFConvertManager.defaultManager._ocrLanguage(appleLanguage: appleLanguage) {
  219. // return true
  220. // }
  221. // return false
  222. // }
  223. // func ocrLanguage(appleLanguage: String?) -> COCRLanguage? {
  224. // return KMPDFConvertManager.defaultManager._ocrLanguage(appleLanguage: appleLanguage)
  225. // }
  226. // MARK: - Private Methods
  227. // fileprivate func _ocrLanguage(appleLanguage: String?) -> COCRLanguage? {
  228. // guard let _appleLanguage = appleLanguage else {
  229. // return nil
  230. // }
  231. //
  232. // if (_appleLanguage.hasPrefix("zh-Hans")) {
  233. // return .chinese
  234. // }
  235. // if (_appleLanguage.hasPrefix("zh-Hant")) {
  236. // return .chineseTraditional
  237. // }
  238. // if (_appleLanguage.hasPrefix("en")) {
  239. // return .english
  240. // }
  241. // if (_appleLanguage.hasPrefix("ja")) {
  242. // return .japanese
  243. // }
  244. // if (_appleLanguage.hasPrefix("ko")) {
  245. // return .korean
  246. // }
  247. //
  248. // if (_appleLanguage.hasPrefix("sr")) {
  249. // return .serbian
  250. // }
  251. // if (_appleLanguage.hasPrefix("oc")) {
  252. // return .occitan
  253. // }
  254. // if (_appleLanguage.hasPrefix("da")) {
  255. // return .danish
  256. // }
  257. // if (_appleLanguage.hasPrefix("de")) {
  258. // return .german
  259. // }
  260. // if (_appleLanguage.hasPrefix("fr")) {
  261. // return .french
  262. // }
  263. // if (_appleLanguage.hasPrefix("it")) {
  264. // return .italian
  265. // }
  266. // if (_appleLanguage.hasPrefix("es")) {
  267. // return .spanish
  268. // }
  269. // if (_appleLanguage.hasPrefix("pt")) {
  270. // return .portuguese
  271. // }
  272. // if (_appleLanguage.hasPrefix("mi")) {
  273. // return .maori
  274. // }
  275. // if (_appleLanguage.hasPrefix("ms")) {
  276. // return .malay
  277. // }
  278. //
  279. // if (_appleLanguage.hasPrefix("mt")) {
  280. // return .maltese
  281. // }
  282. // if (_appleLanguage.hasPrefix("nl")) {
  283. // return .dutch
  284. // }
  285. // if (_appleLanguage.hasPrefix("nb")) {
  286. // return .norwegian
  287. // }
  288. // if (_appleLanguage.hasPrefix("pl")) {
  289. // return .polish
  290. // }
  291. // if (_appleLanguage.hasPrefix("ro")) {
  292. // return .romanian
  293. // }
  294. // if (_appleLanguage.hasPrefix("sk")) {
  295. // return .slovak
  296. // }
  297. // if (_appleLanguage.hasPrefix("sl")) {
  298. // return .slovenian
  299. // }
  300. // if (_appleLanguage.hasPrefix("sq")) {
  301. // return .albanian
  302. // }
  303. // if (_appleLanguage.hasPrefix("sv")) {
  304. // return .welsh
  305. // }
  306. // if (_appleLanguage.hasPrefix("sw")) {
  307. // return .swahili
  308. // }
  309. //
  310. // if (_appleLanguage.hasPrefix("fil")) { // tagalog 塔加洛语 Filipino 菲律宾语
  311. // return .tagalog
  312. // }
  313. // if (_appleLanguage.hasPrefix("tr")) { // Turkish
  314. // return .turish
  315. // }
  316. // if (_appleLanguage.hasPrefix("uz")) {
  317. // return .uzbek
  318. // }
  319. // if (_appleLanguage.hasPrefix("vi")) {
  320. // return .vietnamese
  321. // }
  322. // if (_appleLanguage.hasPrefix("af")) {
  323. // return .afrikaans
  324. // }
  325. // if (_appleLanguage.hasPrefix("az")) {
  326. // return .azerbaijani
  327. // }
  328. // if (_appleLanguage.hasPrefix("bs")) {
  329. // return .bosnian
  330. // }
  331. // if (_appleLanguage.hasPrefix("cs")) {
  332. // return .czech
  333. // }
  334. // if (_appleLanguage.hasPrefix("cy")) {
  335. // return .welsh
  336. // }
  337. // if (_appleLanguage.hasPrefix("et")) { // eston
  338. // return .estonian
  339. // }
  340. //
  341. // if (_appleLanguage.hasPrefix("ga")) {
  342. // return .irish
  343. // }
  344. // if (_appleLanguage.hasPrefix("hr")) {
  345. // return .croatian
  346. // }
  347. // if (_appleLanguage.hasPrefix("hu")) {
  348. // return .hungarian
  349. // }
  350. // if (_appleLanguage.hasPrefix("id")) {
  351. // return .indonesian
  352. // }
  353. // if (_appleLanguage.hasPrefix("is")) {
  354. // return .icelandic
  355. // }
  356. // if (_appleLanguage.hasPrefix("ckb")) {
  357. // return .kurdish
  358. // }
  359. // if (_appleLanguage.hasPrefix("lt")) {
  360. // return .lithuanian
  361. // }
  362. // if (_appleLanguage.hasPrefix("lv")) {
  363. // return .latvian
  364. // }
  365. //// if (_appleLanguage.hasPrefix("")) {
  366. ////
  367. //// }
  368. //
  369. // return nil
  370. // }
  371. // public func appleLanguagePrefix(appleLanguage: String?) -> String? {
  372. // guard let _appleLanguage = appleLanguage else {
  373. // return nil
  374. // }
  375. //
  376. // if _appleLanguage.hasPrefix("zh-Hans") {
  377. // return "zh-Hans"
  378. // } else if _appleLanguage.hasPrefix("en") {
  379. // return "en"
  380. // } else if let result = newValue?.hasPrefix("zh-Hant"), result {
  381. // ocrLanuguageIndex = 1
  382. // } else if let result = newValue?.hasPrefix("fr"), result {
  383. // ocrLanuguageIndex = 3
  384. // } else if let result = newValue?.hasPrefix("de"), result {
  385. // ocrLanuguageIndex = 4
  386. // } else if let result = newValue?.hasPrefix("ht"), result { /// 海地克里奥尔语 Haitian
  387. // ocrLanuguageIndex = 5
  388. // } else if let result = newValue?.hasPrefix("ja"), result {
  389. // ocrLanuguageIndex = 6
  390. // } else if let result = newValue?.hasPrefix("ko"), result {
  391. // ocrLanuguageIndex = 7
  392. // } else if let result = newValue?.hasPrefix("la"), result { /// 拉丁语 Latin
  393. // ocrLanuguageIndex = 8
  394. // } else {
  395. // ocrLanuguageIndex = 2
  396. // }
  397. // }
  398. }
  399. extension KMPDFConvertManager {
  400. // func getOCRLanguages(sortMode: KMSortMode = .none) -> [COCRLanguage] {
  401. // if (sortMode == .none) {
  402. // return self.ocrLanguages
  403. // }
  404. //
  405. // let result = self.ocrLanguages.sorted {[unowned self] lan1, lan2 in
  406. // if self.ocrLanguageString(ocrLanguage: lan1) > self.ocrLanguageString(ocrLanguage: lan2) {
  407. // return sortMode != .ascending
  408. // }
  409. // return sortMode == .ascending
  410. // }
  411. //
  412. // return result
  413. // }
  414. // func getOCRLanguageStrings(sortMode: KMSortMode = .none) -> [String] {
  415. // let ocrLanguages = self.getOCRLanguages(sortMode: sortMode)
  416. //
  417. // var array: [String] = []
  418. // for ocrLanguage in ocrLanguages {
  419. // array.append(self.ocrLanguageString(ocrLanguage: ocrLanguage))
  420. // }
  421. // return array
  422. // }
  423. }
  424. /*
  425. return [.chinese, .chineseTraditional, .english, .japanese, .korean,
  426. // // Latin
  427. .serbian, .occitan, .danish, .german, .french, .italian, .spanish, .portuguese, .maori, .malay,
  428. .maltese, .dutch, .norwegian, .polish, .romanian, .slovak, .slovenian, .albanian, .swedish, .swahili,
  429. .tagalog, .turish, .uzbek, .vietnamese, .afrikaans, .azerbaijani, .bosnian, .czech, .welsh, .estonian,
  430. .irish, .croatian, .hungarian, .indonesian, .icelandic, .kurdish, .lithuanian, .latvian,
  431. // Devanagari
  432. // .marathi, .nepali, .hindi, .bihari, .maithili, .angika, .bhojpuri, .magahi, .nagpur, .newari,
  433. // .goanKonkani, .saudiArabia
  434. ]
  435. chinese 简体中文 zh-Hans-CN
  436. chineseTraditional 繁体中文 zh-Hant-CN
  437. english 英语 en-CN
  438. japanese 日语 ja-CN
  439. korean 韩语 ko
  440. serbian 塞尔维亚语 sr-CN sr-Latn-CN
  441. occitan 奥克西坦语 oc-CN
  442. danish 丹麦语 da-CN
  443. german 德语 de-AT
  444. french 法语 fr
  445. italian 意大利 it-CH
  446. spanish 西班牙 es-419
  447. portuguese 葡萄牙语 pt-BR
  448. maori 毛利人 mi-CN
  449. malay 马来语 ms-CN
  450. maltese 马耳他语 mt-CN
  451. dutch 荷兰 nl-CN
  452. norwegian 挪威语 nb-CN
  453. polish 波兰语 pl-CN
  454. romanian 罗马尼亚语 ro-CN
  455. slovak 斯洛伐克 sk-CN
  456. slovenian 斯洛文尼亚人 sl-CN
  457. albanian 阿尔巴尼亚语 sq-CN
  458. wedish 瑞典 sv-CN s
  459. swahili 斯瓦希里语 sw-CN
  460. tagalog 塔加洛语 Filipino 菲律宾语 fil-CN
  461. turish(Turkish) 土耳其语 tr-CN
  462. uzbek 乌兹别克 uz-Cyrl-CN
  463. vietnamese 越南 vi-CN
  464. afrikaans 南非荷兰语 af-CN
  465. azerbaijani 阿塞拜疆 az-CN
  466. bosnian 波斯尼亚 bs-CN
  467. czech 捷克 cs-CN
  468. welsh 威尔士 cy-CN
  469. estonian(eston) 爱沙尼亚 et-CN
  470. irish 爱尔兰 ga-CN
  471. croatian 克罗地亚 hr-CN
  472. hungarian 匈牙利 hu-CN
  473. indonesian 印度尼西亚 id-CN
  474. icelandic 冰岛 is-CN
  475. kurdish 库尔迪什语 ckb-CN
  476. lithuanian 立陶宛语 lt-CN
  477. latvian 拉脱维亚 lv-CN
  478. */