// // KMPageRangeTools.swift // PDF Reader Pro // // Created by tangchao on 2022/12/19. // import Cocoa class KMPageRangeTools: NSObject { class func isValidPagesString(pagesString: String)-> Bool { var valid = false for ch in pagesString { if ch != "0" && ch != "1" && ch != "2" && ch != "3" && ch != "4" && ch != "5" && ch != "6" && ch != "7" && ch != "8" && ch != "9" && ch != "," && ch != "-" { valid = false break } else { valid = true } } return valid } class func findSelectPage(pageRangeString: String, pageCount: Int) -> ([Int]) { if !isValidPagesString(pagesString: pageRangeString) { return [] } var result: [Int] = [] let array = pageRangeString.components(separatedBy: ",") for string in array { if string.isEmpty { return [] } else { let pages = string .components(separatedBy: "-") if pages.count > 2 { return [] } else if pages.count == 1 { let page = pages[0] if page.isEmpty || Int(page)! > pageCount || Int(page)! == 0 { return [] } else { var hasSame: Bool = false for i in result { if i == Int(page)! { hasSame = true return [] } } if !hasSame { result.append(Int(page)!) } } } else if pages.count == 2 { let page1 = pages[0] let page2 = pages[1] if page1.isEmpty || page2.isEmpty || Int(page1)! >= Int(page2)! || Int(page2)! > pageCount || Int(page1)! == 0 { return [] } else { var hasSame: Bool = false for i in Int(page1)! ... Int(page2)! { for j in result { if j == i { hasSame = true return [] } } } if !hasSame { for i in Int(page1)! ... Int(page2)! { result.append(i) } } } } } } return result } class func newParseSelectedIndexs(selectedIndex: Array) -> String { if (selectedIndex.count == 0) { return "" } if (selectedIndex.count == 1) { return "\(selectedIndex.first!+1)" } var newDatas: Array = [] for i in selectedIndex { newDatas.append(i) } /// 排序 /// 根据id进行排序(升序) newDatas.sort(){$0 < $1} var a: Int = 0 var b: Int = 0 var result: String? = nil for i in newDatas { if (result == nil) { a = i b = i result = "" } else { if (i == b+1) { b = i if (i == newDatas.last) { result!.append(String(format: "%d-%d", a+1,b+1)) } } else { if (a == b) { result!.append(String(format: "%d,", a+1)) } else { result!.append(String(format: "%d-%d,", a+1,b+1)) } a = i b = i if (i == newDatas.last) { result!.append(String(format: "%d", a+1)) } } } } return result! } }