KMPDFConvertManager.swift 18 KB

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