// // WRPageHighlight.m // WeRead (微信读书) // Reverse-engineered implementation reconstruction // // 3 methods identified from binary. WRPageHighlight is a lightweight // model for text highlights on a page. // #import "WRPageHighlight.h" #import "WRBookmark.h" // --------------------------------------------------------------------------- // Color utility // --------------------------------------------------------------------------- static UIColor *UIColorForHighlightColor(WRHighlightColor color) { switch (color) { case WRHighlightColorYellow: return [UIColor colorWithRed:1.0 green:0.92 blue:0.23 alpha:0.35]; case WRHighlightColorBlue: return [UIColor colorWithRed:0.26 green:0.65 blue:0.96 alpha:0.35]; case WRHighlightColorRed: return [UIColor colorWithRed:0.96 green:0.26 blue:0.26 alpha:0.35]; case WRHighlightColorGreen: return [UIColor colorWithRed:0.30 green:0.85 blue:0.39 alpha:0.35]; case WRHighlightColorPurple: return [UIColor colorWithRed:0.67 green:0.33 blue:0.97 alpha:0.35]; default: return [UIColor colorWithRed:1.0 green:0.92 blue:0.23 alpha:0.35]; } } static NSString *NSStringFromHighlightColor(WRHighlightColor color) { switch (color) { case WRHighlightColorYellow: return @"yellow"; case WRHighlightColorBlue: return @"blue"; case WRHighlightColorRed: return @"red"; case WRHighlightColorGreen: return @"green"; case WRHighlightColorPurple: return @"purple"; default: return @"yellow"; } } #pragma mark - Implementation @implementation WRPageHighlight - (instancetype)initWithBookId:(NSString *)bookId chapterUid:(NSString *)chapterUid startPos:(NSInteger)startPos endPos:(NSInteger)endPos text:(NSString *)text color:(WRHighlightColor)color { self = [super init]; if (self) { _highlightId = [[NSUUID UUID] UUIDString]; _bookId = [bookId copy]; _chapterUid = [chapterUid copy]; _startPos = startPos; _endPos = endPos; _chapterOffset = startPos; // Simplified; real impl maps global->local _markedText = [text copy]; _color = color; _colorStyle = NSStringFromHighlightColor(color); _createTime = [[NSDate date] timeIntervalSince1970]; _isSynced = NO; } return self; } - (WRBookmark *)toBookmark { WRBookmark *bookmark = [WRBookmark highlightWithBookId:_bookId chapterUid:_chapterUid startPos:_startPos endPos:_endPos text:_markedText colorStyle:_colorStyle]; bookmark.bookmarkId = _highlightId; bookmark.chapterOffset = _chapterOffset; bookmark.pageIndex = _pageIndex; bookmark.createTime = _createTime; bookmark.isSynced = _isSynced; return bookmark; } - (UIColor *)uiColor { return UIColorForHighlightColor(_color); } #pragma mark - NSObject - (NSString *)description { return [NSString stringWithFormat:@"", _highlightId, _colorStyle, [_markedText substringToIndex:MIN(40, _markedText.length)]]; } @end