|
@@ -1,211 +0,0 @@
|
|
|
-//
|
|
|
-// KMOCToolClass.m
|
|
|
-// PDF Master
|
|
|
-//
|
|
|
-// Created by lxy on 2022/11/18.
|
|
|
-//
|
|
|
-
|
|
|
-#import "KMOCToolClass.h"
|
|
|
-
|
|
|
-@implementation KMOCToolClass
|
|
|
-+ (NSArray *)filterAnnotation:(NSArray *)annotations types:(NSArray *)types {
|
|
|
- NSMutableArray *array = [NSMutableArray arrayWithArray:annotations];
|
|
|
- NSExpression *leftExpression = [NSExpression expressionForKeyPath:@"type"];
|
|
|
- NSExpression *rightExpression = [NSExpression expressionForConstantValue:types];
|
|
|
- NSPredicate *predicate = [NSComparisonPredicate predicateWithLeftExpression:leftExpression
|
|
|
- rightExpression:rightExpression
|
|
|
- modifier:NSDirectPredicateModifier
|
|
|
- type:NSInPredicateOperatorType
|
|
|
- options:NSDiacriticInsensitivePredicateOption];
|
|
|
- return [array filteredArrayUsingPredicate:predicate];
|
|
|
-}
|
|
|
-
|
|
|
-+ (NSArray *)filterAnnotation:(NSArray *)annotations colors:(NSArray *)colors {
|
|
|
- NSMutableArray *array = [NSMutableArray arrayWithArray:annotations];
|
|
|
- if ([array containsObject:[NSColor clearColor]]) {
|
|
|
- [array removeObject:[NSColor clearColor]];
|
|
|
- }
|
|
|
- NSExpression *leftExpression = [NSExpression expressionForKeyPath:@"color"];
|
|
|
- NSExpression *rightExpression = [NSExpression expressionForConstantValue:colors];
|
|
|
- NSPredicate *predicate = [NSComparisonPredicate predicateWithLeftExpression:leftExpression
|
|
|
- rightExpression:rightExpression
|
|
|
- modifier:NSDirectPredicateModifier
|
|
|
- type:NSInPredicateOperatorType
|
|
|
- options:NSDiacriticInsensitivePredicateOption];
|
|
|
- return [array filteredArrayUsingPredicate:predicate];
|
|
|
-}
|
|
|
-
|
|
|
-+ (NSArray *)filterAnnotation:(NSArray *)annotations authors:(NSArray *)authors {
|
|
|
- NSMutableArray *array = [NSMutableArray arrayWithArray:annotations];
|
|
|
- NSExpression *leftExpression = [NSExpression expressionForKeyPath:@"userName"];
|
|
|
- NSExpression *rightExpression = [NSExpression expressionForConstantValue:authors];
|
|
|
- NSPredicate *predicate = [NSComparisonPredicate predicateWithLeftExpression:leftExpression
|
|
|
- rightExpression:rightExpression
|
|
|
- modifier:NSDirectPredicateModifier
|
|
|
- type:NSInPredicateOperatorType
|
|
|
- options:NSDiacriticInsensitivePredicateOption];
|
|
|
- return [array filteredArrayUsingPredicate:predicate];
|
|
|
-}
|
|
|
-
|
|
|
-+ (BOOL)arrayContains:(NSArray *)array annotation:(id)item {
|
|
|
- if (!array || array.count == 0 || !item) {
|
|
|
- return NO;
|
|
|
- }
|
|
|
- return [array containsObject:item];
|
|
|
-}
|
|
|
-
|
|
|
-+ (NSInteger)arrayIndexOf:(NSArray *)array annotation:(id)item {
|
|
|
- if (!array || array.count == 0 || !item) {
|
|
|
- return 0;
|
|
|
- }
|
|
|
- return [array indexOfObject:item];
|
|
|
-}
|
|
|
-
|
|
|
-+ (NSString *)exproString:(CPDFAnnotation *)annotation {
|
|
|
- NSString *exproString = @"";
|
|
|
- if ([annotation isKindOfClass:[CPDFMarkupAnnotation class]]) {
|
|
|
- CPDFPage *page = annotation.page;
|
|
|
- NSArray *points = [(CPDFMarkupAnnotation *)annotation quadrilateralPoints];
|
|
|
- NSInteger count = 4;
|
|
|
- for (NSUInteger i=0; i+count <= points.count;) {
|
|
|
- CGPoint ptlt = [points[i++] pointValue];
|
|
|
- CGPoint ptrt = [points[i++] pointValue];
|
|
|
- CGPoint ptlb = [points[i++] pointValue];
|
|
|
- CGPoint ptrb = [points[i++] pointValue];
|
|
|
- CGRect rect = CGRectMake(ptlb.x, ptlb.y, ptrt.x - ptlb.x, ptrt.y - ptlb.y);
|
|
|
- NSString *string = [page stringForRect:rect];
|
|
|
- if (string && string.length >0) {
|
|
|
- if (exproString) {
|
|
|
- exproString = [exproString stringByAppendingString:@"\n"];
|
|
|
- exproString = [exproString stringByAppendingString:string];
|
|
|
- } else {
|
|
|
- exproString = string;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return exproString;
|
|
|
-}
|
|
|
-
|
|
|
-+ (NSMutableArray *)scannerCharaterString:(NSString *)string {
|
|
|
- NSScanner *scanner = [NSScanner scannerWithString:string];
|
|
|
- NSMutableArray *words = [NSMutableArray array];
|
|
|
- NSString *word;
|
|
|
- [scanner setCharactersToBeSkipped:nil];
|
|
|
- while ([scanner isAtEnd] == NO) {
|
|
|
- if ('"' == [[scanner string] characterAtIndex:[scanner scanLocation]]) {
|
|
|
- [scanner setScanLocation:[scanner scanLocation] + 1];
|
|
|
- if ([scanner scanUpToString:@"\"" intoString:&word])
|
|
|
- [words addObject:word];
|
|
|
- if ([scanner isAtEnd] == NO)
|
|
|
- [scanner setScanLocation:[scanner scanLocation] + 1];
|
|
|
- } else if ([scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:&word]) {
|
|
|
- [words addObject:word];
|
|
|
- }
|
|
|
- [scanner scanCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:NULL];
|
|
|
- }
|
|
|
- return words;
|
|
|
-}
|
|
|
-
|
|
|
-+ (NSMutableAttributedString *)getAttributedStringWithSelection:(CPDFSelection *)selection
|
|
|
- keyword:(NSString *)keyword
|
|
|
-{
|
|
|
- CPDFPage * currentPage = selection.page;
|
|
|
- NSRange range = selection.range;
|
|
|
- NSUInteger startLocation = 0;
|
|
|
- NSUInteger maxLocation = 10;
|
|
|
- NSUInteger maxEndLocation = 50;
|
|
|
-
|
|
|
- NSInteger keyLocation = 0;
|
|
|
- if (range.location > maxLocation) {
|
|
|
- startLocation = range.location - maxLocation;
|
|
|
- keyLocation = maxLocation;
|
|
|
- } else {
|
|
|
- startLocation = 0;
|
|
|
- keyLocation = range.location;
|
|
|
- }
|
|
|
- NSUInteger endLocation = 0;
|
|
|
- if (range.location + maxEndLocation > currentPage.numberOfCharacters) {
|
|
|
- endLocation = currentPage.numberOfCharacters;
|
|
|
- } else {
|
|
|
- endLocation = range.location + maxEndLocation;
|
|
|
- }
|
|
|
-
|
|
|
- NSMutableAttributedString * attributed = nil;
|
|
|
- if (endLocation> startLocation) {
|
|
|
- NSString * string = [currentPage stringForRange:NSMakeRange(startLocation, endLocation - startLocation)];
|
|
|
- NSString *currentString = @"...";
|
|
|
- NSArray *stringArr = [string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
|
|
|
- for (NSString *s in stringArr) {
|
|
|
- if (s.length == 0)
|
|
|
- currentString = [currentString stringByAppendingString:@" "];
|
|
|
- else
|
|
|
- currentString = [currentString stringByAppendingString:s];
|
|
|
- }
|
|
|
-
|
|
|
- NSRange tRange = NSMakeRange(keyLocation+3, keyword.length);
|
|
|
- if (tRange.location != NSNotFound) {
|
|
|
- attributed = [[NSMutableAttributedString alloc] initWithString:currentString];
|
|
|
-
|
|
|
- NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
|
|
|
- paragraphStyle.firstLineHeadIndent = 10.0;
|
|
|
- paragraphStyle.headIndent = 10.0;
|
|
|
- paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
|
|
|
- paragraphStyle.lineHeightMultiple = 1.32;
|
|
|
- NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@"SFProText-Regular" size:14.0],NSFontAttributeName,[NSColor colorWithRed:0.145 green:0.149 blue:0.161 alpha:1],NSForegroundColorAttributeName,paragraphStyle,NSParagraphStyleAttributeName,nil];
|
|
|
-
|
|
|
- NSRange range = [[attributed string] rangeOfString:[attributed string]];
|
|
|
- [attributed setAttributes:dic range:range];
|
|
|
-
|
|
|
- //hightlight string
|
|
|
- dic = [NSDictionary dictionaryWithObjectsAndKeys:[NSColor colorWithRed:1.0 green:0.9 blue:0.0 alpha:1.0],NSBackgroundColorAttributeName,nil];
|
|
|
- if (attributed.length > tRange.length + tRange.location) {
|
|
|
- [attributed addAttributes:dic range:tRange];
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return attributed;
|
|
|
-}
|
|
|
-
|
|
|
-+ (BOOL)wholeWordWithSelection:(CPDFSelection *)selection
|
|
|
- keyword:(NSString *)keyword {
|
|
|
- CPDFPage * currentPage = selection.page;
|
|
|
- NSRange range = selection.range;
|
|
|
- NSUInteger startLocation = 0;
|
|
|
- NSUInteger maxLocation = 10;
|
|
|
- NSUInteger maxEndLocation = 80;
|
|
|
- NSInteger keyLocation = 0;
|
|
|
- if (range.location > maxLocation) {
|
|
|
- startLocation = range.location - maxLocation;
|
|
|
- keyLocation = maxLocation;
|
|
|
- } else {
|
|
|
- startLocation = 0;
|
|
|
- keyLocation = range.location;
|
|
|
- }
|
|
|
- NSUInteger endLocation = 0;
|
|
|
- if (range.location + maxEndLocation > currentPage.numberOfCharacters) {
|
|
|
- endLocation = currentPage.numberOfCharacters;
|
|
|
- } else {
|
|
|
- endLocation = range.location + maxEndLocation;
|
|
|
- }
|
|
|
- if (endLocation> startLocation) {
|
|
|
- NSString * string = [currentPage stringForRange:NSMakeRange(startLocation, endLocation - startLocation)];
|
|
|
- NSString *currentString = @"";
|
|
|
- NSArray *stringArr = [string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
|
|
|
- for (NSString *s in stringArr) {
|
|
|
- if (s.length == 0)
|
|
|
- currentString = [currentString stringByAppendingString:@" "];
|
|
|
- else
|
|
|
- currentString = [currentString stringByAppendingString:s];
|
|
|
- }
|
|
|
-
|
|
|
- char leftChar = [currentString characterAtIndex:keyLocation == 0 ? 0 : keyLocation-1];
|
|
|
- char rightChar = [currentString characterAtIndex:(keyLocation+keyword.length)];
|
|
|
- if (leftChar == 32 && rightChar == 32) {
|
|
|
- return YES;
|
|
|
- }
|
|
|
- }
|
|
|
- return NO;
|
|
|
-}
|
|
|
-
|
|
|
-@end
|