diff --git a/.gitignore b/.gitignore index 3a632aa..ee42c01 100644 --- a/.gitignore +++ b/.gitignore @@ -8,22 +8,10 @@ xcuserdata/ .swift-module-cache/ ReadViewDemo/build/ -# This repository checks in the Demo Pods project. Keep generated files for the -# local RDEpubReaderView/RDPDFReaderView pods and vendored SnapKit visible even -# when a global gitignore excludes Pods. -!ReadViewDemo/Pods/ -!ReadViewDemo/Pods/Local Podspecs/ -!ReadViewDemo/Pods/Local Podspecs/RDEpubReaderView.podspec.json -!ReadViewDemo/Pods/Local Podspecs/RDPDFReaderView.podspec.json -!ReadViewDemo/Pods/Target Support Files/ -!ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/ -!ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/** -!ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/ -!ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/** -!ReadViewDemo/Pods/SnapKit/ -!ReadViewDemo/Pods/SnapKit/** -!ReadViewDemo/Pods/Target Support Files/SnapKit/ -!ReadViewDemo/Pods/Target Support Files/SnapKit/** +# CocoaPods output for the Demo project is not vendored — everyone runs +# `pod install` locally. +ReadViewDemo/Pods/ +ReadViewDemo/Podfile.lock # macOS system files .DS_Store diff --git a/ReadViewDemo/Podfile.lock b/ReadViewDemo/Podfile.lock deleted file mode 100644 index 0fc59b1..0000000 --- a/ReadViewDemo/Podfile.lock +++ /dev/null @@ -1,102 +0,0 @@ -PODS: - - DTCoreText (1.6.28): - - DTCoreText/Core (= 1.6.28) - - DTFoundation/Core (~> 1.7.19) - - DTFoundation/DTAnimatedGIF (~> 1.7.19) - - DTFoundation/DTHTMLParser (~> 1.7.19) - - DTFoundation/UIKit (~> 1.7.19) - - DTCoreText/Core (1.6.28): - - DTFoundation/Core (~> 1.7.19) - - DTFoundation/DTAnimatedGIF (~> 1.7.19) - - DTFoundation/DTHTMLParser (~> 1.7.19) - - DTFoundation/UIKit (~> 1.7.19) - - DTFoundation/Core (1.7.19) - - DTFoundation/DTAnimatedGIF (1.7.19) - - DTFoundation/DTHTMLParser (1.7.19): - - DTFoundation/Core - - DTFoundation/UIKit (1.7.19): - - DTFoundation/Core - - RDAIReaderView/Core (0.1.0) - - RDAIReaderView/FoundationModels (0.1.0): - - RDAIReaderView/Core (~> 0.1) - - RDAIReaderView/NaturalLanguage (0.1.0): - - RDAIReaderView/Core (~> 0.1) - - RDAIReaderView/UI (0.1.0): - - RDAIReaderView/Core (~> 0.1) - - RDEpubReaderView (0.0.2): - - DTCoreText (~> 1.6) - - RDEpubReaderView/AI (= 0.0.2) - - RDEpubReaderView/Speech (= 0.0.2) - - SnapKit (~> 5.7) - - ZIPFoundation (~> 0.9) - - RDEpubReaderView/AI (0.0.2): - - DTCoreText (~> 1.6) - - RDAIReaderView/NaturalLanguage (~> 0.1) - - RDAIReaderView/UI (~> 0.1) - - SnapKit (~> 5.7) - - ZIPFoundation (~> 0.9) - - RDEpubReaderView/Speech (0.0.2): - - DTCoreText (~> 1.6) - - RDSpeechReaderView (~> 0.1) - - SnapKit (~> 5.7) - - ZIPFoundation (~> 0.9) - - RDPDFReaderView (0.0.1): - - RDPDFReaderView/AI (= 0.0.1) - - RDPDFReaderView/Speech (= 0.0.1) - - SnapKit (~> 5.7) - - RDPDFReaderView/AI (0.0.1): - - RDAIReaderView/NaturalLanguage (~> 0.1) - - RDAIReaderView/UI (~> 0.1) - - SnapKit (~> 5.7) - - RDPDFReaderView/Speech (0.0.1): - - RDSpeechReaderView (~> 0.1) - - SnapKit (~> 5.7) - - RDSpeechReaderView (0.1.0): - - RDSpeechReaderView/AI (= 0.1.0) - - RDSpeechReaderView/AI (0.1.0): - - RDAIReaderView/Core (~> 0.1) - - SnapKit (5.7.1) - - ZIPFoundation (0.9.20) - -DEPENDENCIES: - - RDAIReaderView/FoundationModels (from `../Sources/RDAIReaderView`) - - RDAIReaderView/NaturalLanguage (from `../Sources/RDAIReaderView`) - - RDAIReaderView/UI (from `../Sources/RDAIReaderView`) - - RDEpubReaderView (from `../Sources/RDEpubReaderView`) - - RDEpubReaderView/AI (from `../Sources/RDEpubReaderView`) - - RDEpubReaderView/Speech (from `../Sources/RDEpubReaderView`) - - RDPDFReaderView (from `../Sources/RDPDFReaderView`) - - RDPDFReaderView/AI (from `../Sources/RDPDFReaderView`) - - RDPDFReaderView/Speech (from `../Sources/RDPDFReaderView`) - - RDSpeechReaderView/AI (from `../Sources/RDSpeechReaderView`) - -SPEC REPOS: - trunk: - - DTCoreText - - DTFoundation - - SnapKit - - ZIPFoundation - -EXTERNAL SOURCES: - RDAIReaderView: - :path: "../Sources/RDAIReaderView" - RDEpubReaderView: - :path: "../Sources/RDEpubReaderView" - RDPDFReaderView: - :path: "../Sources/RDPDFReaderView" - RDSpeechReaderView: - :path: "../Sources/RDSpeechReaderView" - -SPEC CHECKSUMS: - DTCoreText: 11b7fe2104f476f82e75a4e3dbdde74d7186cecb - DTFoundation: 76b624967cf5bcaae6bb057d622c536c36ef36d0 - RDAIReaderView: 01a156e412fb7a52a6963c097ffbe2f1792021fd - RDEpubReaderView: 180444055ba2da2c52797cc08b307232f103a6d9 - RDPDFReaderView: 885be07e2b81cd0a8dc8a937b75faf9017ce045c - RDSpeechReaderView: 25fff9437d2692965ba326f37b108baf3e2ae7ef - SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a - ZIPFoundation: dfd3d681c4053ff7e2f7350bc4e53b5dba3f5351 - -PODFILE CHECKSUM: 72bd92309c87ce13a247b8134a321f6b325af731 - -COCOAPODS: 1.16.2 diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/CTLineUtils.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/CTLineUtils.h deleted file mode 100644 index 3b05513..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/CTLineUtils.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// CTLineUtils.h -// DTCoreText -// -// Created by Oleksandr Deundiak on 7/15/15. -// Copyright 2015. All rights reserved. -// - -#import - -BOOL areLinesEqual(CTLineRef line1, CTLineRef line2); -CFIndex getTruncationIndex(CTLineRef line, CTLineRef trunc); diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/CTLineUtils.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/CTLineUtils.m deleted file mode 100644 index 46df7ab..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/CTLineUtils.m +++ /dev/null @@ -1,102 +0,0 @@ -// -// CTLineUtils.m -// DTCoreText -// -// Created by Oleksandr Deundiak on 7/15/15. -// Copyright 2015. All rights reserved. -// - -#import "CTLineUtils.h" - -BOOL areLinesEqual(CTLineRef line1, CTLineRef line2) -{ - if(line1 == nil || line2 == nil) { - return NO; - } - - CFArrayRef glyphRuns1 = CTLineGetGlyphRuns(line1); - CFArrayRef glyphRuns2 = CTLineGetGlyphRuns(line2); - CFIndex runCount1 = CFArrayGetCount(glyphRuns1), runCount2 = CFArrayGetCount(glyphRuns2); - - if (runCount1 != runCount2) - return NO; - - for (CFIndex i = 0; i < runCount1; i++) - { - CTRunRef run1 = CFArrayGetValueAtIndex(glyphRuns1, i); - CTRunRef run2 = CFArrayGetValueAtIndex(glyphRuns2, i); - - CFIndex countInRun1 = CTRunGetGlyphCount(run1), countInRun2 = CTRunGetGlyphCount(run2); - if (countInRun1 != countInRun2) - return NO; - - const CGGlyph* constGlyphs1 = CTRunGetGlyphsPtr(run1); - CGGlyph* glyphs1 = NULL; - if (constGlyphs1 == NULL) - { - glyphs1 = (CGGlyph*)malloc(countInRun1*sizeof(CGGlyph)); - CTRunGetGlyphs(run1, CFRangeMake(0, countInRun1), glyphs1); - constGlyphs1 = glyphs1; - } - - const CGGlyph* constGlyphs2 = CTRunGetGlyphsPtr(run2); - CGGlyph* glyphs2 = NULL; - if (constGlyphs2 == NULL) - { - glyphs2 = (CGGlyph*)malloc(countInRun2*sizeof(CGGlyph)); - CTRunGetGlyphs(run2, CFRangeMake(0, countInRun2), glyphs2); - constGlyphs2 = glyphs2; - } - - BOOL result = YES; - for (CFIndex j = 0; j < countInRun1; j++) - { - if (constGlyphs1[j] != constGlyphs2[j]) - { - result = NO; - break; - } - } - - if (glyphs1 != NULL) - free(glyphs1); - - if (glyphs2 != NULL) - free(glyphs2); - - if (!result) - return NO; - } - - return YES; -} - -CFIndex getTruncationIndex(CTLineRef line, CTLineRef trunc) -{ - if (line == nil || trunc == nil) return 0; - - CFIndex truncCount = CFArrayGetCount(CTLineGetGlyphRuns(trunc)); - - CFArrayRef lineRuns = CTLineGetGlyphRuns(line); - CFIndex lineRunsCount = CFArrayGetCount(lineRuns); - - CFIndex index = lineRunsCount - truncCount - 1; - - // If the index is negative, CFArrayGetValueAtIndex will crash on iOS 10 beta. - // We will just return 0 because on iOS 9, CFArrayGetValueAtIndex would have - // returned nil anyways and the return truncation index would be 0. - // Apple might have enabled an assert that only appears in the iOS 10 beta - // release, but we will just avoid passing invalid arguments just to be safe. - if (index < 0) - { - return 0; - } - else - { - CTRunRef lineLastRun = CFArrayGetValueAtIndex(lineRuns, index); - - CFRange lastRunRange = CTRunGetStringRange(lineLastRun); - - return lastRunRange.location = lastRunRange.length; - } -} diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAccessibilityElement.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAccessibilityElement.h deleted file mode 100644 index 4b51bfc..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAccessibilityElement.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// DTAccessibilityElement.h -// DTCoreText -// -// Created by Austen Green on 3/13/13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -/** - A UIAccessibilityElement subclass that automatically converts its local accessibilityFrame to screen coordinates. - */ -@interface DTAccessibilityElement : UIAccessibilityElement -/** - The frame for the accessibility element in terms of the receiver's superview. - */ -@property (nonatomic, assign) CGRect localCoordinateAccessibilityFrame; - -/** - The point for activating accessibility events in terms of the receiver's superview. - */ -@property (nonatomic, assign) CGPoint localCoordinateAccessibilityActivationPoint; - -/** - The designated initializer. This class should be initialized with a UIView as its accessibility container. - @param parentView The logical superview for the onscreen element the receiver represents. - @returns Returns an initialized DTAccessibilityElement */ - -- (id)initWithParentView:(UIView *)parentView; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAccessibilityElement.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAccessibilityElement.m deleted file mode 100644 index 2845211..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAccessibilityElement.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// DTAccessibilityElement.m -// DTCoreText -// -// Created by Austen Green on 3/13/13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTAccessibilityElement.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -static const CGPoint DTAccessibilityElementNullActivationPoint = {CGFLOAT_MAX, CGFLOAT_MAX}; - -@interface DTAccessibilityElement() -@property (nonatomic, DT_WEAK_PROPERTY) UIView *parentView; -@end - -@implementation DTAccessibilityElement - -- (id)initWithParentView:(UIView *)parentView -{ - self = [super initWithAccessibilityContainer:parentView]; - if (self) - { - _parentView = parentView; - _localCoordinateAccessibilityActivationPoint = DTAccessibilityElementNullActivationPoint; - } - return self; -} - -- (CGRect)accessibilityFrame -{ - CGRect frame = self.localCoordinateAccessibilityFrame; - frame = [self.parentView.window convertRect:frame fromView:self.parentView]; - return frame; -} - -- (CGPoint)accessibilityActivationPoint -{ - CGPoint point = self.localCoordinateAccessibilityActivationPoint; - if (CGPointEqualToPoint(point, DTAccessibilityElementNullActivationPoint)) - { - point = [super accessibilityActivationPoint]; - } - - point = [self.parentView.window convertPoint:point fromView:self.parentView]; - - return point; -} - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAccessibilityViewProxy.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAccessibilityViewProxy.h deleted file mode 100644 index 696a94c..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAccessibilityViewProxy.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// DTAccessibilityViewProxy.h -// DTCoreText -// -// Created by Austen Green on 5/6/13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" -#import "DTAccessibilityElement.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import "DTTextAttachment.h" -#import - -@protocol DTAccessibilityViewProxyDelegate; - -/** - UIView proxy for DTAttributedTextContentView custom subviews for text attachments. - */ - -@interface DTAccessibilityViewProxy : NSObject -/** - The delegate for the proxy - */ -@property (nonatomic, DT_WEAK_PROPERTY, readonly) id delegate; - -/** - The text attachment represented by the proxy - */ -@property (nonatomic, strong, readonly) DTTextAttachment *textAttachment; - -/** - Creates a text attachment proxy for use with the VoiceOver system. - @param textAttachment The that will be represented by a view. - @param delegate An object conforming to that will provide a view when needed by the proxy. - @returns A new proxy object - */ - -- (id)initWithTextAttachment:(DTTextAttachment *)textAttachment delegate:(id)delegate; - -@end - -/** - Protocol to provide custom views for accessibility elements representing a DTTextAttachment. - */ -@protocol DTAccessibilityViewProxyDelegate -@required -/** - Provides a view for an attachment, e.g. an imageView for images - - @param attachment The that the requested view should represent - @param proxy The frame that the view should use to fit on top of the space reserved for the attachment. - @returns The sender requesting the view. - */ - -- (UIView *)viewForTextAttachment:(DTTextAttachment *)attachment proxy:(DTAccessibilityViewProxy *)proxy; -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAccessibilityViewProxy.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAccessibilityViewProxy.m deleted file mode 100644 index 61e74eb..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAccessibilityViewProxy.m +++ /dev/null @@ -1,62 +0,0 @@ -// -// DTAccessibilityViewProxy.m -// DTCoreText -// -// Created by Austen Green on 5/6/13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTAccessibilityViewProxy.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -@implementation DTAccessibilityViewProxy - -- (id)initWithTextAttachment:(DTTextAttachment *)textAttachment delegate:(id)delegate -{ - _textAttachment = textAttachment; - _delegate = delegate; - return self; -} - -- (UIView *)proxiedView -{ - return [self.delegate viewForTextAttachment:self.textAttachment proxy:self]; -} - -- (Class)class -{ - Class aClass = [[self proxiedView] class]; - - if (!aClass) - aClass = [DTAccessibilityViewProxy class]; - - return aClass; -} - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel -{ - NSMethodSignature *signature = [UIView instanceMethodSignatureForSelector:sel]; - - return signature; -} - -- (void)forwardInvocation:(NSInvocation *)invocation -{ - UIView *view = [self proxiedView]; - [invocation invokeWithTarget:view]; -} - -- (BOOL)isEqual:(id)object -{ - return [[self proxiedView] isEqual:object]; -} - -- (NSUInteger)hash -{ - return [[self proxiedView] hash]; -} - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAnchorHTMLElement.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAnchorHTMLElement.h deleted file mode 100644 index dfa0671..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAnchorHTMLElement.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// DTHTMLElementA.h -// DTCoreText -// -// Created by Oliver Drobnik on 21.03.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTHTMLElement.h" - -/** - Specialized subclass of that represents a hyperlink. - */ -@interface DTAnchorHTMLElement : DTHTMLElement - -/** - Foreground text color of the receiver when highlighted - */ -@property (nonatomic, strong) DTColor *highlightedTextColor; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAnchorHTMLElement.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAnchorHTMLElement.m deleted file mode 100644 index 7a855b5..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAnchorHTMLElement.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// DTHTMLElementA.m -// DTCoreText -// -// Created by Oliver Drobnik on 21.03.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" -#import "DTAnchorHTMLElement.h" -#import "DTColorFunctions.h" - -@implementation DTAnchorHTMLElement -{ - DTColor *_highlightedTextColor; -} - -- (void)applyStyleDictionary:(NSDictionary *)styles -{ - [super applyStyleDictionary:styles]; - - // get highlight color from a:active pseudo-selector - NSString *activeColor = [styles objectForKey:@"active:color"]; - - if (activeColor) - { - self.highlightedTextColor = DTColorCreateWithHTMLName(activeColor); - } -} - -- (NSAttributedString *)attributedString -{ - // super returns a mutable attributed string - NSMutableAttributedString *mutableAttributedString = (NSMutableAttributedString *)[super attributedString]; - - if (_highlightedTextColor) - { - NSRange range = NSMakeRange(0, [mutableAttributedString length]); - - // this additional attribute keeps the highlight color - [mutableAttributedString addAttribute:DTLinkHighlightColorAttribute value:(id)_highlightedTextColor range:range]; - - // we need to set the text color via the graphics context - [mutableAttributedString addAttribute:(id)kCTForegroundColorFromContextAttributeName value:[NSNumber numberWithBool:YES] range:range]; - } - - return mutableAttributedString; -} - -#pragma mark - Properties - -@synthesize highlightedTextColor = _highlightedTextColor; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedLabel.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedLabel.h deleted file mode 100644 index 484428b..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedLabel.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// DTAttributedLabel.h -// DTCoreText -// -// Created by Brian Kenny on 1/17/13. -// Copyright (c) 2013 Cocoanetics.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import "DTAttributedTextContentView.h" - -/** - A Rich Text replacement for `UILabel`. It inherits from and as such you can also set the delegate to provide custom subviews i.e. for images or hyperlinks. - - Contrary to DTAttributedTextContentView the intrinsicContentSize is only as wide as the text content. To shrink the DTAttributedLabel to that call -sizeToFit. - */ - -@interface DTAttributedLabel : DTAttributedTextContentView - -/** - @name Setting Attributes - */ - -/** - The number of lines to display in the receiver - */ -@property(nonatomic, assign) NSInteger numberOfLines; - -/** - The line break mode of the receiver - */ -@property(nonatomic, assign) NSLineBreakMode lineBreakMode; - -/** - The string to append to the visible string in case a truncation occurs - */ -@property(nonatomic, strong) NSAttributedString *truncationString; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedLabel.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedLabel.m deleted file mode 100644 index ec46428..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedLabel.m +++ /dev/null @@ -1,125 +0,0 @@ -// -// DTAttributedLabel.m -// DTCoreText -// -// Created by Brian Kenny on 1/17/13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTAttributedLabel.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import "DTCoreTextLayoutFrame.h" -#import - -@implementation DTAttributedLabel - -+ (Class)layerClass -{ - // most likely the label will be less than a screen size and so we don't want any tiling behavior - return [CALayer class]; -} - -- (void) setupAttributedLabel -{ - // we want to relayout the text if height or width change - self.relayoutMask = DTAttributedTextContentViewRelayoutOnHeightChanged | DTAttributedTextContentViewRelayoutOnWidthChanged; - - self.layoutFrameHeightIsConstrainedByBounds = YES; // height is not flexible -} - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - - if (self) - { - [self setupAttributedLabel]; - } - - return self; -} - -- (id) initWithCoder:(NSCoder *)aDecoder { - self = [super initWithCoder:aDecoder]; - - if (self != nil) - { - [self setupAttributedLabel]; - } - - return self; -} - - - -- (void) awakeFromNib -{ - [super awakeFromNib]; - [self setupAttributedLabel]; -} - -#pragma mark - Sizing - -- (CGSize)intrinsicContentSize -{ - if (!self.layoutFrame) // creates new layout frame if possible - { - return CGSizeMake(-1, -1); // UIViewNoIntrinsicMetric as of iOS 6 - } - - // we have a layout frame and from this we get the needed size - CGSize intrisicContentSize = [_layoutFrame intrinsicContentFrame].size; - return CGSizeMake(intrisicContentSize.width + _edgeInsets.left + _edgeInsets.right, - intrisicContentSize.height + _edgeInsets.top + _edgeInsets.bottom); -} - -#pragma mark - Properties - -- (NSInteger)numberOfLines -{ - return _numberOfLines; -} - -- (void)setNumberOfLines:(NSInteger)numberOfLines -{ - if (numberOfLines != _numberOfLines) - { - _numberOfLines = numberOfLines; - [self relayoutText]; - } -} - -- (NSLineBreakMode)lineBreakMode -{ - return _lineBreakMode; -} - -- (void)setLineBreakMode:(NSLineBreakMode)lineBreakMode -{ - if (lineBreakMode != _lineBreakMode) - { - _lineBreakMode = lineBreakMode; - [self relayoutText]; - } -} - -- (NSAttributedString*)truncationString -{ - return _truncationString; -} - -- (void)setTruncationString:(NSAttributedString *)truncationString -{ - if (![truncationString isEqualToAttributedString:_truncationString]) - { - _truncationString = truncationString; - [self relayoutText]; - } -} - - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextCell.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextCell.h deleted file mode 100644 index ce75904..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextCell.h +++ /dev/null @@ -1,93 +0,0 @@ -// -// DTAttributedTextCell.h -// DTCoreText -// -// Created by Oliver Drobnik on 8/4/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -#import "DTAttributedTextContentView.h" -#import - -/** - This class represents a tableview cell that contains an attributed text as its content. - */ -@interface DTAttributedTextCell : UITableViewCell - -/** - @name Creating Cells - */ - -/** - Creates a tableview cell with a given reuse identifier. - @param reuseIdentifier The reuse identifier to use for the cell - @returns A prepared cell - */ -- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier; - -/** - @name Setting Attributed Content - */ - -/** - The attributed string content of the receiver - */ -@property (nonatomic, strong) NSAttributedString *attributedString; - -/** - A delegate implementing DTAttributedTextContentViewDelegate to provide custom subviews for images and links. - */ -@property (nonatomic, DT_WEAK_PROPERTY) IBOutlet id textDelegate; - -/** - This method allows to set HTML text directly as content of the receiver. - - This will be converted to an attributed string. - @param html The HTML string to set as the receiver's text content - */ -- (void)setHTMLString:(NSString *)html; - -/** - This method allows to set HTML text directly as content of the receiver. - - This will be converted to an attributed string. - @param html The HTML string to set as the receiver's text content - @param options The options used for rendering the HTML - */ -- (void) setHTMLString:(NSString *)html options:(NSDictionary*) options; - - -/** - @name Getting Information - */ - -/** - Determines the row height that is needed in a specific table view to show the entire text content. - - The table view is necessary because from this the method can know the style. Also the accessory type needs to be set before calling this method because this reduces the available space. - @note This value is only useful for table views with variable row height. - @param tableView The table view to determine the height for. - */ -- (CGFloat)requiredRowHeightInTableView:(UITableView *)tableView; - -/** - Determines whether the cells built-in contentView is allowed to dictate the size available for text. If active then attributedTextContextView's height always matches the cell height. - - Set this to `YES` for use in fixed row height table views, leave it `NO` for flexible row height table views. - */ -@property (nonatomic, assign) BOOL hasFixedRowHeight; - -/** - The attributed text content view that the receiver uses to display the attributed text content. - */ -@property (nonatomic, readonly) DTAttributedTextContentView *attributedTextContextView; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextCell.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextCell.m deleted file mode 100644 index c6d057d..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextCell.m +++ /dev/null @@ -1,276 +0,0 @@ -// -// DTAttributedTextCell.m -// DTCoreText -// -// Created by Oliver Drobnik on 8/4/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#import "DTAttributedTextCell.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import "DTCoreText.h" -#import "DTCSSStylesheet.h" - -#import - -@implementation DTAttributedTextCell -{ - DTAttributedTextContentView *_attributedTextContextView; - - DT_WEAK_VARIABLE id _textDelegate; - - NSUInteger _htmlHash; // preserved hash to avoid relayouting for same HTML - - BOOL _hasFixedRowHeight; - DT_WEAK_VARIABLE UITableView *_containingTableView; -} - -- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]; - - if (self) - { - // content view created lazily - } - - return self; -} - -- (void)dealloc -{ - _textDelegate = nil; - _containingTableView = nil; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - if (!self.superview) - { - return; - } - - if (_hasFixedRowHeight) - { - self.attributedTextContextView.frame = self.contentView.bounds; - } - else - { - CGFloat neededContentHeight = [self requiredRowHeightInTableView:_containingTableView]; - - // after the first call here the content view size is correct - CGRect frame = CGRectMake(0, 0, self.contentView.bounds.size.width, neededContentHeight); - self.attributedTextContextView.frame = frame; - } -} - -- (UITableView *)_findContainingTableView -{ - UIView *tableView = self.superview; - - while (tableView) - { - if ([tableView isKindOfClass:[UITableView class]]) - { - return (UITableView *)tableView; - } - - tableView = tableView.superview; - } - - return nil; -} - -- (void)didMoveToSuperview -{ - [super didMoveToSuperview]; - - _containingTableView = [self _findContainingTableView]; - - // on < iOS 7 we need to make the background translucent to avoid artifacts at rounded edges - if (_containingTableView.style == UITableViewStyleGrouped) - { - if (NSFoundationVersionNumber < DTNSFoundationVersionNumber_iOS_7_0) - { - _attributedTextContextView.backgroundColor = [UIColor clearColor]; - } - } -} - -// http://stackoverflow.com/questions/4708085/how-to-determine-margin-of-a-grouped-uitableview-or-better-how-to-set-it/4872199#4872199 -- (CGFloat)_groupedCellMarginWithTableWidth:(CGFloat)tableViewWidth -{ - CGFloat marginWidth; - if(tableViewWidth > 20) - { - if(tableViewWidth < 400 || [UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPhone) - { - marginWidth = 10; - } - else - { - marginWidth = MAX(31.f, MIN(45.f, tableViewWidth*0.06f)); - } - } - else - { - marginWidth = tableViewWidth - 10; - } - return marginWidth; -} - -- (CGFloat)requiredRowHeightInTableView:(UITableView *)tableView -{ - if (_hasFixedRowHeight) - { - DTLogWarning(@"You are calling %s even though the cell is configured with fixed row height", (const char *)__PRETTY_FUNCTION__); - } - - BOOL ios6Style = (NSFoundationVersionNumber < DTNSFoundationVersionNumber_iOS_7_0); - CGFloat contentWidth = tableView.frame.size.width; - - // reduce width for grouped table views - if (ios6Style && tableView.style == UITableViewStyleGrouped) - { - contentWidth -= [self _groupedCellMarginWithTableWidth:contentWidth] * 2; - } - - // reduce width for accessories - - switch (self.accessoryType) - { - case UITableViewCellAccessoryDisclosureIndicator: - { - contentWidth -= ios6Style ? 20.0f : 10.0f + 8.0f + 15.0f; - break; - } - - case UITableViewCellAccessoryCheckmark: - { - contentWidth -= ios6Style ? 20.0f : 10.0f + 14.0f + 15.0f; - break; - } -#if TARGET_OS_IOS - case UITableViewCellAccessoryDetailDisclosureButton: - { - contentWidth -= ios6Style ? 33.0f : 10.0f + 42.0f + 15.0f; - break; - } - -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1 - case UITableViewCellAccessoryDetailButton: - { - contentWidth -= 10.0f + 22.0f + 15.0f; - break; - } -#endif -#endif - case UITableViewCellAccessoryNone: - { - break; - } - - default: - { - DTLogWarning(@"AccessoryType %d not implemented on %@", self.accessoryType, NSStringFromClass([self class])); - break; - } - } - - CGSize neededSize = [self.attributedTextContextView suggestedFrameSizeToFitEntireStringConstraintedToWidth:contentWidth]; - - // note: non-integer row heights caused trouble < iOS 5.0 - return neededSize.height; -} - -#pragma mark Properties - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -- (void)setHTMLString:(NSString *)html -{ - [self setHTMLString:html options:nil]; -} - -- (void) setHTMLString:(NSString *)html options:(NSDictionary*) options { - - NSUInteger newHash = [html hash]; - - if (newHash == _htmlHash) - { - return; - } - - _htmlHash = newHash; - - NSData *data = [html dataUsingEncoding:NSUTF8StringEncoding]; - NSAttributedString *string = [[NSAttributedString alloc] initWithHTMLData:data options:options documentAttributes:NULL]; - self.attributedString = string; - - [self setNeedsLayout]; - -} - -- (void)setAttributedString:(NSAttributedString *)attributedString -{ - // passthrough - self.attributedTextContextView.attributedString = attributedString; -} - -- (NSAttributedString *)attributedString -{ - // passthrough - return _attributedTextContextView.attributedString; -} - -- (DTAttributedTextContentView *)attributedTextContextView -{ - if (!_attributedTextContextView) - { - // don't know size because there's no string in it - _attributedTextContextView = [[DTAttributedTextContentView alloc] initWithFrame:self.contentView.bounds]; - - _attributedTextContextView.edgeInsets = UIEdgeInsetsMake(5, 5, 5, 5); - _attributedTextContextView.layoutFrameHeightIsConstrainedByBounds = _hasFixedRowHeight; - _attributedTextContextView.delegate = _textDelegate; - - [self.contentView addSubview:_attributedTextContextView]; - } - - return _attributedTextContextView; -} - -- (void)setHasFixedRowHeight:(BOOL)hasFixedRowHeight -{ - if (_hasFixedRowHeight != hasFixedRowHeight) - { - _hasFixedRowHeight = hasFixedRowHeight; - - [self setNeedsLayout]; - } -} - -- (void)setTextDelegate:(id)textDelegate -{ - _textDelegate = textDelegate; - _attributedTextContextView.delegate = _textDelegate; -} - -@synthesize attributedTextContextView = _attributedTextContextView; -@synthesize hasFixedRowHeight = _hasFixedRowHeight; -@synthesize textDelegate = _textDelegate; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextContentView.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextContentView.h deleted file mode 100644 index 84c96f1..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextContentView.h +++ /dev/null @@ -1,370 +0,0 @@ -// -// DTAttributedTextContentView.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/9/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import "DTCoreTextLayoutFrame.h" -#import - -@class DTAttributedTextContentView; -@class DTCoreTextLayoutFrame; -@class DTTextBlock; -@class DTCoreTextLayouter; -@class DTTextAttachment; - -/** - notification that gets sent as soon as the receiver has done a layout pass - */ -extern NSString * const DTAttributedTextContentViewDidFinishLayoutNotification; - -/** - Protocol to provide custom views for elements in an DTAttributedTextContentView. Also the delegate gets notified once the text view has been drawn. - */ -@protocol DTAttributedTextContentViewDelegate - -@optional - -/** - @name Notifications - */ - -/** - Called before a layout frame or a part of it is drawn. The text delegate can draw contents that goes under the text in this method. - - @param attributedTextContentView The content view that will be drawing a layout frame - @param layoutFrame The layout frame that will be drawn for - @param context The graphics context that will drawn into - */ -- (void)attributedTextContentView:(DTAttributedTextContentView *)attributedTextContentView willDrawLayoutFrame:(DTCoreTextLayoutFrame *)layoutFrame inContext:(CGContextRef)context; - - -/** - Called after a layout frame or a part of it is drawn. The text delegate can draw contents that goes over the text in this method. - - @param attributedTextContentView The content view that drew a layout frame - @param layoutFrame The layout frame that was drawn for - @param context The graphics context that was drawn into - */ -- (void)attributedTextContentView:(DTAttributedTextContentView *)attributedTextContentView didDrawLayoutFrame:(DTCoreTextLayoutFrame *)layoutFrame inContext:(CGContextRef)context; - - -/** - Called before the text belonging to a text block is drawn. - - This gives the developer an opportunity to draw a custom background below a text block. - - @param attributedTextContentView The content view that drew a layout frame - @param textBlock The text block - @param frame The frame within the content view's coordinate system that will be drawn into - @param context The graphics context that will be drawn into - @param layoutFrame The layout frame that will be drawn for - @returns `YES` is the standard fill of the text block should be drawn, `NO` if it should not - */ -- (BOOL)attributedTextContentView:(DTAttributedTextContentView *)attributedTextContentView shouldDrawBackgroundForTextBlock:(DTTextBlock *)textBlock frame:(CGRect)frame context:(CGContextRef)context forLayoutFrame:(DTCoreTextLayoutFrame *)layoutFrame; - -/** - @name Providing Custom Views for Content - */ - - -/** - Provide custom view for an attachment, e.g. an imageView for images - - @param attributedTextContentView The content view asking for a custom view - @param attachment The that this view should represent - @param frame The frame that the view should use to fit on top of the space reserved for the attachment - @returns The view that should represent the given attachment - */ -- (UIView *)attributedTextContentView:(DTAttributedTextContentView *)attributedTextContentView viewForAttachment:(DTTextAttachment *)attachment frame:(CGRect)frame; - - -/** - Provide button to be placed over links, the identifier is used to link multiple parts of the same A tag - - @param attributedTextContentView The content view asking for a custom view - @param url The `NSURL` of the hyperlink - @param identifier An identifier that uniquely identifies the hyperlink within the document - @param frame The frame that the view should use to fit on top of the space reserved for the attachment - @returns The view that should represent the given hyperlink - */ -- (UIView *)attributedTextContentView:(DTAttributedTextContentView *)attributedTextContentView viewForLink:(NSURL *)url identifier:(NSString *)identifier frame:(CGRect)frame; - - -/** - Provide generic views for all attachments. - - This is only called if the more specific delegate methods are not implemented. - - @param attributedTextContentView The content view asking for a custom view - @param string The attributed sub-string containing this element - @param frame The frame that the view should use to fit on top of the space reserved for the attachment - @returns The view that should represent the given hyperlink or text attachment - @see attributedTextContentView:viewForAttachment:frame: and attributedTextContentView:viewForAttachment:frame: - */ -- (UIView *)attributedTextContentView:(DTAttributedTextContentView *)attributedTextContentView viewForAttributedString:(NSAttributedString *)string frame:(CGRect)frame; - -@end - - -enum { - DTAttributedTextContentViewRelayoutNever = 0, - DTAttributedTextContentViewRelayoutOnWidthChanged = 1 << 0, - DTAttributedTextContentViewRelayoutOnHeightChanged = 1 << 1, -}; -typedef NSUInteger DTAttributedTextContentViewRelayoutMask; - - -/** - Attributed Text Content Views display attributed strings generated by DTHTMLAttributedStringBuilder. They can display images and hyperlinks inline or optionally place custom subviews (which get provided via the in the appropriate places. By itself content views do not scroll, for that there is the `UIScrollView` subclass . - - Generally you have two options to providing content: - - - set the attributed string - - set a layout frame - - The first you would normally use, the second you would use if you are layouting a larger text and then simply want to display individual parts (e.g. pages from an e-book) in a content view. - - DTAttributedTextContentView is designed to be used as the content view inside a DTAttributedTextView and thus sizes its intrinsicContentSize always to be the same as the width of the set frame. Use DTAttributedLabel if you don't require scrolling behavior. - */ - -@interface DTAttributedTextContentView : UIView -{ - NSAttributedString *_attributedString; - DTCoreTextLayoutFrame *_layoutFrame; - - UIEdgeInsets _edgeInsets; - - NSMutableDictionary *customViewsForAttachmentsIndex; - - BOOL _flexibleHeight; - - // for layoutFrame - NSInteger _numberOfLines; - NSLineBreakMode _lineBreakMode; - NSAttributedString *_truncationString; -} - - -/** - @name Sizing - */ - -/** - Calculates the suggested frame size that would fit the entire with a maximum width. - - This does a full layout pass that is cached in . If you specify a frame that fits the result from this method then the resulting layoutFrame is reused. - - Since this obeys the you have to add these to the final frame size. - - @param width The maximum width to layout for - @returns The suggested frame size - */ -- (CGSize)suggestedFrameSizeToFitEntireStringConstraintedToWidth:(CGFloat)width; // obeys the edge insets - -/** - The size of contents of the receiver. This is possibly used by auto-layout, but also for example if you want to get the size of the receiver necessary for a scroll view - - This method is defined as of iOS 6, but to support earlier OS versions - */ -- (CGSize)intrinsicContentSize; - -/** - Whether the receiver calculates layout limited to the view bounds. - - If set to `YES` then the layout process calculates the layoutFrame with open ended height. If set to ´NO` then the current bounds of the receiver determine the height. - */ -@property (nonatomic, assign) BOOL layoutFrameHeightIsConstrainedByBounds; - - -/** - @name Layouting - */ - -/** - Discards the current and creates a new one based on the . - */ -- (void)relayoutText; - - -/** - The layouter to use for the receiver. Created by default. - - By default this is generated automatically for the current . You can also supply your own if you require special layouting behavior. - */ -@property (atomic, strong) DTCoreTextLayouter *layouter; - - -/** - The layout frame to use for the receiver. Created by default. - - A layout frame is basically one rectangle, inset by the . By default this is automatically generated for the current . You can also create a seperately and set this property to display the layout frame. This is usedful for example if you layout entire e-book and then set the for displaying individual pages. - */ -@property (atomic, strong) DTCoreTextLayoutFrame *layoutFrame; - - -/** - @name Working with Custom Subviews - */ - -/** - Removes all custom subviews (excluding views representing links) from the receiver. - */ -- (void)removeAllCustomViews; - - -/** - Removes all custom subviews representing links from the receiver - */ -- (void)removeAllCustomViewsForLinks; - - -/** - Removes invisible custom subviews and lays out subviews visible in the given rectangle - @param rect The bounds of the visible area to layout custom subviews in. - */ -- (void)layoutSubviewsInRect:(CGRect)rect; - - -/** - @name Providing Content - */ - -/** - The attributed string to display in the receiver - */ -@property (nonatomic, copy) NSAttributedString *attributedString; - - -/** - The delegate that is in charge of supplying custom behavior for the receiver. It must conform to and provide custom subviews, link buttons, etc. - */ - -@property (nonatomic, DT_WEAK_PROPERTY) IBOutlet id delegate; - -/** - @name Customizing Content Display - */ - -/** - The insets to apply around the text content - */ -@property (nonatomic) UIEdgeInsets edgeInsets; - -/** - Specifies if the receiver should draw image text attachments. - - Set to `NO` if you use the delegate methods to provide custom subviews to display images. - */ -@property (nonatomic) BOOL shouldDrawImages; - - -/** - Specified if the receiver should draw hyperlinks. - - If set to `NO` then your custom subview/button for hyperlinks is responsible for displaying hyperlinks. You can use to have links show a differently for normal and highlighted style - */ -@property (nonatomic) BOOL shouldDrawLinks; - - -/** - Specifies if the receiver should layout custom subviews in layoutSubviews. - - If set to `YES` then all custom subviews will always be layouted. Set to `NO` to only layout visible subviews, e.g. in a scroll view. Defaults to `YES` if used stand-alone, `NO` inside a . - */ -@property (nonatomic) BOOL shouldLayoutCustomSubviews; - - -/** - The amount by which all contents of the receiver will offset of display and subview layouting - */ -@property (nonatomic) CGPoint layoutOffset; - - -/** - The offset to apply for drawing the background. - - If you set a pattern color as background color you can have the pattern phase be offset by this value. - */ -@property (nonatomic) CGSize backgroundOffset; - - -/** - An integer bit mask that determines how the receiver relayouts its contents when its bounds change. - - When the view’s bounds change, that view automatically re-layouts its text according to the relayout mask. You specify the value of this mask by combining the constants described in DTAttributedTextContentViewRelayoutMask using the C bitwise OR operator. Combining these constants lets you specify which dimensions will cause a re-layout if modified. The default value of this property is DTAttributedTextContentViewRelayoutOnWidthChanged, which indicates that the text will be re-layouted if the width changes, but not if the height changes. - */ -@property (nonatomic) DTAttributedTextContentViewRelayoutMask relayoutMask; - -@end - - -/** - You can globally customize the layer class to be used for new instances of . By itself it makes most sense to go with the default `CALayer`. For larger bodies of text, i.e. if there is scrolling then you should use a `CATiledLayer` subclass instead. - */ -@interface DTAttributedTextContentView (Tiling) - -/** - Sets the layer class globally to use in new instances of content views. Defaults to `CALayer`. - - While being fine for most use cases you should use a `CATiledLayer` subclass for anything larger than a screen full, e.g. in scroll views. - @param layerClass The class to use, should be a `CALayer` subclass - */ -+ (void)setLayerClass:(Class)layerClass; - -/** - The current layer class that is used for new instances - @returns The `CALayer` subclass that new instances are using - */ -+ (Class)layerClass; - -@end - - -/** - Methods for drawing the content view - */ -@interface DTAttributedTextContentView (Drawing) - -/** - Creates an image from a part of the receiver's content view - @param bounds The bounds of the content to draw - @param options The drawing options to apply when drawing - @see [DTCoreTextLayoutFrame drawInContext:options:] for a list of available drawing options - @returns A `UIImage` with the specified content - */ -- (UIImage *)contentImageWithBounds:(CGRect)bounds options:(DTCoreTextLayoutFrameDrawingOptions)options; - -@end - - -/** - Methods for getting cursor position and frame. Those are convenience methods that call through to the layoutFrame property which has the same coordinate system as the receiver. - */ -@interface DTAttributedTextContentView (Cursor) - -/** - Determines the closest string index to a point in the receiver's frame. - - This can be used to find the cursor position to position an input caret at. - @param point The point - @returns The resulting string index - */ -- (NSInteger)closestCursorIndexToPoint:(CGPoint)point; - -/** - The rectangle to draw a caret for a given index - @param index The string index for which to determine a cursor frame - @returns The cursor rectangle - */ -- (CGRect)cursorRectAtIndex:(NSInteger)index; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextContentView.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextContentView.m deleted file mode 100644 index 7a7c98d..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextContentView.m +++ /dev/null @@ -1,1116 +0,0 @@ -// -// DTAttributedTextContentView.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/9/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTAttributedTextContentView.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -#import "DTCoreText.h" -#import "DTDictationPlaceholderTextAttachment.h" -#import "DTAccessibilityViewProxy.h" -#import "DTAccessibilityElement.h" -#import "DTCoreTextLayoutFrameAccessibilityElementGenerator.h" - -#import - -#if !__has_feature(objc_arc) -#error THIS CODE MUST BE COMPILED WITH ARC ENABLED! -#endif - -NSString * const DTAttributedTextContentViewDidFinishLayoutNotification = @"DTAttributedTextContentViewDidFinishLayoutNotification"; - -@interface DTAttributedTextContentView () -{ - BOOL _shouldAddFirstLineLeading; - BOOL _shouldDrawImages; - BOOL _shouldDrawLinks; - BOOL _shouldLayoutCustomSubviews; - DTAttributedTextContentViewRelayoutMask _relayoutMask; - - NSMutableSet *customViews; - NSMutableDictionary *customViewsForLinksIndex; - - BOOL _isTiling; - BOOL _layoutFrameHeightIsConstrainedByBounds; - - DTCoreTextLayouter *_layouter; - - CGPoint _layoutOffset; - CGSize _backgroundOffset; - - // lookup bitmask what delegate methods are implemented - struct - { - unsigned int delegateSupportsCustomViewsForAttachments:1; - unsigned int delegateSupportsCustomViewsForLinks:1; - unsigned int delegateSupportsGenericCustomViews:1; - unsigned int delegateSupportsNotificationBeforeDrawing:1; - unsigned int delegateSupportsNotificationAfterDrawing:1; - unsigned int delegateSupportsNotificationBeforeTextBoxDrawing:1; - } _delegateFlags; - - DT_WEAK_VARIABLE id _delegate; -} - -@property (nonatomic, strong) NSMutableDictionary *customViewsForLinksIndex; -@property (nonatomic, strong) NSMutableDictionary *customViewsForAttachmentsIndex; -@property (nonatomic, strong) NSMutableSet *customViews; - -@property (nonatomic, strong) NSArray *accessibilityElements; - -- (void)removeAllCustomViews; -- (void)removeAllCustomViewsForLinks; -- (void)removeSubviewsOutsideRect:(CGRect)rect; - -@end - -static Class _layerClassToUseForDTAttributedTextContentView = nil; - -@implementation DTAttributedTextContentView (Tiling) - -+ (void)setLayerClass:(Class)layerClass -{ - _layerClassToUseForDTAttributedTextContentView = layerClass; -} - -+ (Class)layerClass -{ - if (_layerClassToUseForDTAttributedTextContentView) - { - return _layerClassToUseForDTAttributedTextContentView; - } - - return [CALayer class]; -} - -@end - - -@implementation DTAttributedTextContentView (Cursor) - -- (NSInteger)closestCursorIndexToPoint:(CGPoint)point -{ - return [self.layoutFrame closestCursorIndexToPoint:point]; -} - -- (CGRect)cursorRectAtIndex:(NSInteger)index -{ - return [self.layoutFrame cursorRectAtIndex:index]; -} - -@end - - -@implementation DTAttributedTextContentView - -- (void)setup -{ - self.contentMode = UIViewContentModeTopLeft; // to avoid bitmap scaling effect on resize - _shouldLayoutCustomSubviews = YES; - - // no extra leading is added by default - _shouldAddFirstLineLeading = NO; - - // by default we draw images, if custom views are supported (by setting delegate) this is disabled - // if you still want images to be drawn together with text then set it back to YES after setting delegate - _shouldDrawImages = YES; - - // by default we draw links. If you don't want that because you want to highlight the text in - // DTLinkButton set this property to NO and create a highlighted version of the attributed string - _shouldDrawLinks = YES; - - _layoutFrameHeightIsConstrainedByBounds = NO; // we calculate the necessary height unemcumbered by bounds - _relayoutMask = DTAttributedTextContentViewRelayoutOnWidthChanged; - - // possibly already set in NIB - if (!self.backgroundColor) - { - self.backgroundColor = [DTColor whiteColor]; - } - - // set tile size if applicable - CATiledLayer *layer = (id)self.layer; - if ([layer isKindOfClass:[CATiledLayer class]]) - { - // get larger dimension and multiply by scale - UIScreen *mainScreen = [UIScreen mainScreen]; - CGFloat largerDimension = MAX(mainScreen.bounds.size.width, mainScreen.bounds.size.height); - CGFloat scale = mainScreen.scale; - - // this way tiles cover entire screen regardless of orientation or scale - CGSize tileSize = CGSizeMake(largerDimension * scale, largerDimension * scale); - layer.tileSize = tileSize; - - _isTiling = YES; - } -} - -- (id)initWithFrame:(CGRect)frame -{ - if ((self = [super initWithFrame:frame])) - { - [self setup]; - } - return self; -} - -- (void)awakeFromNib -{ - [super awakeFromNib]; - [self setup]; -} - -- (void)dealloc -{ - if (_isTiling) - { - self.layer.contents = nil; - self.layer.delegate = nil; - } - - [self removeAllCustomViews]; -} - -- (NSString *)debugDescription -{ - NSString *extract = [[[_layoutFrame attributedStringFragment] string] substringFromIndex:[self.layoutFrame visibleStringRange].location]; - - if ([extract length]>10) - { - extract = [extract substringToIndex:10]; - } - - return [NSString stringWithFormat:@"<%@ %@ range:%@ '%@...'>", [self class], NSStringFromCGRect(self.frame),NSStringFromRange([self.layoutFrame visibleStringRange]), extract]; -} - -- (void)layoutSubviewsInRect:(CGRect)rect -{ - // if we are called for partial (non-infinite) we remove unneeded custom subviews first - if (!CGRectIsInfinite(rect)) - { - [self removeSubviewsOutsideRect:rect]; - } - - [CATransaction begin]; - [CATransaction setDisableActions:YES]; - - DTCoreTextLayoutFrame *theLayoutFrame = self.layoutFrame; - - NSAttributedString *layoutString = [theLayoutFrame attributedStringFragment]; - NSArray *lines; - if (CGRectIsInfinite(rect)) - { - lines = [theLayoutFrame lines]; - } - else - { - lines = [theLayoutFrame linesVisibleInRect:rect]; - } - - // hide all customViews - for (UIView *view in self.customViews) - { - view.hidden = YES; - } - - for (DTCoreTextLayoutLine *oneLine in lines) - { - NSUInteger skipRunsBeforeLocation = 0; - - for (DTCoreTextGlyphRun *oneRun in oneLine.glyphRuns) - { - // add custom views if necessary - NSRange runRange = [oneRun stringRange]; - CGRect frameForSubview = CGRectZero; - - if (runRange.location>=skipRunsBeforeLocation) - { - // see if it's a link - NSRange effectiveRangeOfLink = runRange; - - // make sure that a link is only as long as the area to the next attachment or the current attachment itself - DTTextAttachment *attachment = oneRun.attributes[NSAttachmentAttributeName]; - - // if there is no attachment then the effectiveRangeOfAttachment contains the range until the next attachment - NSURL *linkURL = oneRun.attributes[DTLinkAttribute]; - - // avoid chaining together glyph runs for an attachment - if (linkURL && !attachment) - { - NSInteger glyphIndex = [oneLine.glyphRuns indexOfObject:oneRun]; - - // chain together this glyph run with following runs for combined link buttons - for (NSInteger i=glyphIndex+1; i<[oneLine.glyphRuns count]; i++) - { - DTCoreTextGlyphRun *followingRun = oneLine.glyphRuns[i]; - NSURL *followingURL = followingRun.attributes[DTLinkAttribute]; - - if (![[followingURL absoluteString] isEqualToString:[linkURL absoluteString]]) - { - // following glyph run has different or no link URL - break; - } - - if (followingRun.attachment) - { - // do not join a following attachment to the combined link - break; - } - - // extend effective link range - effectiveRangeOfLink = NSUnionRange(effectiveRangeOfLink, followingRun.stringRange); - } - - // frame for link view includes for all joined glyph runs with same link in this line - frameForSubview = [oneLine frameOfGlyphsWithRange:effectiveRangeOfLink]; - - // this following glyph run link attribute is joined to link range - skipRunsBeforeLocation = NSMaxRange(effectiveRangeOfLink); - } - else - { - // individual glyph run - - if (attachment) - { - // frame might be different due to image vertical alignment - CGFloat ascender = [attachment ascentForLayout]; - CGFloat descender = [attachment descentForLayout]; - - frameForSubview = CGRectMake(oneRun.frame.origin.x, oneLine.baselineOrigin.y - ascender, oneRun.frame.size.width, ascender+descender); - } - else - { - frameForSubview = oneRun.frame; - } - } - - // if there is an attachment then we continue even with empty frame, might be a lazily loaded image - if ((frameForSubview.size.width<=0 || frameForSubview.size.height<=0) && !attachment) - { - continue; - } - - NSNumber *indexKey = [NSNumber numberWithInteger:runRange.location]; - - // offset layout if necessary - if (!CGPointEqualToPoint(_layoutOffset, CGPointZero)) - { - frameForSubview.origin.x += _layoutOffset.x; - frameForSubview.origin.y += _layoutOffset.y; - } - - // round frame - frameForSubview.origin.x = floor(frameForSubview.origin.x); - frameForSubview.origin.y = ceil(frameForSubview.origin.y); - frameForSubview.size.width = round(frameForSubview.size.width); - frameForSubview.size.height = round(frameForSubview.size.height); - - if (CGRectGetMinY(frameForSubview)> CGRectGetMaxY(rect) || CGRectGetMaxY(frameForSubview) < CGRectGetMinY(rect)) - { - // is still outside even though the bounds of the line already intersect visible area - continue; - } - - if (attachment) - { - indexKey = [NSNumber numberWithInteger:[attachment hash]]; - UIView *existingAttachmentView = [self.customViewsForAttachmentsIndex objectForKey:indexKey]; - - if (existingAttachmentView) - { - existingAttachmentView.hidden = NO; - existingAttachmentView.frame = frameForSubview; - - existingAttachmentView.alpha = 1; - - [existingAttachmentView setNeedsLayout]; - [existingAttachmentView setNeedsDisplay]; - - linkURL = nil; // prevent adding link button on top of image view - } - else - { - UIView *newCustomAttachmentView = nil; - - if ([attachment isKindOfClass:[DTDictationPlaceholderTextAttachment class]]) - { - newCustomAttachmentView = [DTDictationPlaceholderView placeholderView]; - newCustomAttachmentView.frame = frameForSubview; // set fixed frame - } - else if (_delegateFlags.delegateSupportsCustomViewsForAttachments) - { - newCustomAttachmentView = [_delegate attributedTextContentView:self viewForAttachment:attachment frame:frameForSubview]; - } - else if (_delegateFlags.delegateSupportsGenericCustomViews) - { - NSMutableAttributedString *string = [layoutString attributedSubstringFromRange:runRange].mutableCopy; - [string addAttributes:oneRun.attributes range:NSMakeRange(0, string.length)]; - newCustomAttachmentView = [_delegate attributedTextContentView:self viewForAttributedString:string frame:frameForSubview]; - } - - if (newCustomAttachmentView) - { - // delegate responsible to set frame - if (newCustomAttachmentView) - { - newCustomAttachmentView.tag = [indexKey integerValue]; - [self addSubview:newCustomAttachmentView]; - - [self.customViews addObject:newCustomAttachmentView]; - [self.customViewsForAttachmentsIndex setObject:newCustomAttachmentView forKey:indexKey]; - - linkURL = nil; // prevent adding link button on top of image view - } - } - } - } - - if (linkURL && (_delegateFlags.delegateSupportsCustomViewsForLinks || _delegateFlags.delegateSupportsGenericCustomViews)) - { - UIView *existingLinkView = [self.customViewsForLinksIndex objectForKey:indexKey]; - - // make sure that the frame height is no less than the line height for hyperlinks - if (frameForSubview.size.height < oneLine.frame.size.height) - { - frameForSubview.origin.y = trunc(oneLine.frame.origin.y); - frameForSubview.size.height = ceil(oneLine.frame.size.height); - } - - if (existingLinkView) - { - existingLinkView.frame = frameForSubview; - existingLinkView.hidden = NO; - } - else - { - UIView *newCustomLinkView = nil; - - // make sure that the frame height is no less than the line height for hyperlinks - if (frameForSubview.size.height < oneLine.frame.size.height) - { - frameForSubview.origin.y = trunc(oneLine.frame.origin.y); - frameForSubview.size.height = ceil(oneLine.frame.size.height); - } - - if (_delegateFlags.delegateSupportsCustomViewsForLinks) - { - NSDictionary *attributes = [layoutString attributesAtIndex:runRange.location effectiveRange:NULL]; - - NSString *guid = [attributes objectForKey:DTGUIDAttribute]; - newCustomLinkView = [_delegate attributedTextContentView:self viewForLink:linkURL identifier:guid frame:frameForSubview]; - } - else if (_delegateFlags.delegateSupportsGenericCustomViews) - { - NSMutableAttributedString *string = [layoutString attributedSubstringFromRange:runRange].mutableCopy; - [string addAttributes:oneRun.attributes range:NSMakeRange(0, string.length)]; - newCustomLinkView = [_delegate attributedTextContentView:self viewForAttributedString:string frame:frameForSubview]; - } - - // delegate responsible to set frame - if (newCustomLinkView) - { - newCustomLinkView.tag = runRange.location; - [self addSubview:newCustomLinkView]; - - [self.customViews addObject:newCustomLinkView]; - [self.customViewsForLinksIndex setObject:newCustomLinkView forKey:indexKey]; - } - } - } - } - } - } - - [CATransaction commit]; -} - -- (void)layoutSubviews -{ -// if (!_isTiling && (self.bounds.size.width>1024.0 || self.bounds.size.height>1024.0)) -// { -// if (![self.layer isKindOfClass:[CATiledLayer class]]) -// { -// NSLog(@"Warning: A %@ with size %@ is using a non-tiled layer. Set the layer class to a CATiledLayer subclass with [DTAttributedTextContentView setLayerClass:[DTTiledLayerWithoutFade class]].", NSStringFromClass([self class]), NSStringFromCGSize(self.bounds.size)); -// } -// } - - if (_shouldLayoutCustomSubviews) - { - [self layoutSubviewsInRect:CGRectInfinite]; - } - - [super layoutSubviews]; -} - -- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx -{ - // needs clearing of background - CGRect rect = CGContextGetClipBoundingBox(ctx); - - if (_backgroundOffset.height != 0 || _backgroundOffset.width != 0) - { - CGContextSetPatternPhase(ctx, _backgroundOffset); - } - - CGContextSetFillColorWithColor(ctx, [self.backgroundColor CGColor]); - CGContextFillRect(ctx, rect); - - // offset layout if necessary - if (!CGPointEqualToPoint(_layoutOffset, CGPointZero)) - { - CGAffineTransform transform = CGAffineTransformMakeTranslation(_layoutOffset.x, _layoutOffset.y); - CGContextConcatCTM(ctx, transform); - } - - DTCoreTextLayoutFrame *theLayoutFrame = self.layoutFrame; // this is synchronized - - // construct drawing options - DTCoreTextLayoutFrameDrawingOptions options = DTCoreTextLayoutFrameDrawingDefault; - - if (!_shouldDrawImages) - { - options |= DTCoreTextLayoutFrameDrawingOmitAttachments; - } - - if (!_shouldDrawLinks) - { - options |= DTCoreTextLayoutFrameDrawingOmitLinks; - } - - if (_delegateFlags.delegateSupportsNotificationBeforeDrawing) - { - [_delegate attributedTextContentView:self willDrawLayoutFrame:theLayoutFrame inContext:ctx]; - } - - // need to prevent updating of string and drawing at the same time - [theLayoutFrame drawInContext:ctx options:options]; - - if (_delegateFlags.delegateSupportsNotificationAfterDrawing) - { - [_delegate attributedTextContentView:self didDrawLayoutFrame:theLayoutFrame inContext:ctx]; - } -} - -- (void)drawRect:(CGRect)rect -{ - CGContextRef context = UIGraphicsGetCurrentContext(); - [self.layoutFrame drawInContext:context options:DTCoreTextLayoutFrameDrawingDefault]; -} - -- (void)relayoutText -{ - DT_WEAK_VARIABLE typeof(self) weakSelf = self; - DTBlockPerformSyncIfOnMainThreadElseAsync(^{ - DTAttributedTextContentView *strongSelf = weakSelf; - // Make sure we actually have a superview and a previous layout before attempting to relayout the text. - if (strongSelf->_layoutFrame && strongSelf.superview) - { - // need new layout frame, layouter can remain because the attributed string is probably the same - strongSelf.layoutFrame = nil; - - // remove all links because they might have merged or split - [strongSelf removeAllCustomViewsForLinks]; - - if (strongSelf->_attributedString) - { - // triggers new layout - CGSize neededSize = [self intrinsicContentSize]; - - CGRect optimalFrame = CGRectMake(self.frame.origin.x, self.frame.origin.y, neededSize.width, neededSize.height); - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSValue valueWithCGRect:optimalFrame] forKey:@"OptimalFrame"]; - - [[NSNotificationCenter defaultCenter] postNotificationName:DTAttributedTextContentViewDidFinishLayoutNotification object:self userInfo:userInfo]; - } - - [strongSelf setNeedsLayout]; - [strongSelf setNeedsDisplayInRect:self.bounds]; - - if ([strongSelf respondsToSelector:@selector(invalidateIntrinsicContentSize)]) - { - [strongSelf invalidateIntrinsicContentSize]; - } - } - }); -} - -- (void)removeAllCustomViewsForLinks -{ - NSArray *linkViews = [customViewsForLinksIndex allValues]; - - for (UIView *customView in linkViews) - { - [customView removeFromSuperview]; - [customViews removeObject:customView]; - } - - [customViewsForLinksIndex removeAllObjects]; -} - -- (void)removeAllCustomViews -{ - NSSet *allCustomViews = [NSSet setWithSet:customViews]; - for (UIView *customView in allCustomViews) - { - [customView removeFromSuperview]; - [customViews removeObject:customView]; - } - - [customViewsForAttachmentsIndex removeAllObjects]; - [customViewsForLinksIndex removeAllObjects]; -} - -- (void)removeSubviewsOutsideRect:(CGRect)rect -{ - NSSet *allCustomViews = [NSSet setWithSet:customViews]; - for (UIView *customView in allCustomViews) - { - if (CGRectGetMinY(customView.frame)> CGRectGetMaxY(rect) || CGRectGetMaxY(customView.frame) < CGRectGetMinY(rect)) - { - NSNumber *indexKey = [NSNumber numberWithInteger:customView.tag]; - - [customView removeFromSuperview]; - [customViews removeObject:customView]; - - [customViewsForAttachmentsIndex removeObjectForKey:indexKey]; - [customViewsForLinksIndex removeObjectForKey:indexKey]; - } - } -} - -#pragma mark - Sizing - -- (void)setBounds:(CGRect)bounds { - - if (!CGSizeEqualToSize(self.bounds.size, bounds.size)) { - _layoutFrame = nil; - [self invalidateIntrinsicContentSize]; - } - [super setBounds:bounds]; -} - -- (CGSize)intrinsicContentSize -{ - if (!self.layoutFrame) // creates new layout frame if possible - { - return CGSizeMake(-1, -1); // UIViewNoIntrinsicMetric as of iOS 6 - } - - // we have a layout frame and from this we get the needed size - return CGSizeMake(_layoutFrame.frame.size.width + _edgeInsets.left + _edgeInsets.right, CGRectGetMaxY(_layoutFrame.frame) + _edgeInsets.bottom); -} - -- (CGSize)sizeThatFits:(CGSize)size -{ - CGSize neededSize = [self intrinsicContentSize]; // creates layout frame if necessary - - if (neededSize.width>=0 && neededSize.height>=0) - { - return neededSize; - } - - // return empty size plus padding - return CGSizeMake(_edgeInsets.left + _edgeInsets.right, _edgeInsets.bottom + _edgeInsets.top); -} - -- (CGRect)_frameForLayoutFrameConstraintedToWidth:(CGFloat)constrainWidth -{ - if (!isnormal(constrainWidth)) - { - constrainWidth = self.bounds.size.width; - } - - CGRect bounds = self.bounds; - bounds.size.width = constrainWidth; - CGRect rect = UIEdgeInsetsInsetRect(bounds, _edgeInsets); - - if (rect.size.width<=0) - { - // cannot create layout frame with negative or zero width - return CGRectZero; - } - - if (_layoutFrameHeightIsConstrainedByBounds) - { - if (rect.size.height<=0) - { - // cannot create layout frame with negative or zero height if flexible height is disabled - return CGRectZero; - } - - // already set height to bounds height - } - else - { - rect.size.height = CGFLOAT_HEIGHT_UNKNOWN; // necessary height set as soon as we know it. - } - - return rect; -} - -- (CGSize)suggestedFrameSizeToFitEntireStringConstraintedToWidth:(CGFloat)width -{ - // create a temporary frame, will be cached by the layouter for the given rect - CGRect rect = [self _frameForLayoutFrameConstraintedToWidth:width]; - DTCoreTextLayoutFrame *tmpLayoutFrame = [self.layouter layoutFrameWithRect:rect range:NSMakeRange(0, 0)]; - - // assign current layout frame properties to tmpLayoutFrame - tmpLayoutFrame.numberOfLines = _numberOfLines; - tmpLayoutFrame.lineBreakMode = _lineBreakMode; - tmpLayoutFrame.truncationString = _truncationString; - - // we have a layout frame and from this we get the needed size - return CGSizeMake(tmpLayoutFrame.frame.size.width + _edgeInsets.left + _edgeInsets.right, CGRectGetMaxY(tmpLayoutFrame.frame) + _edgeInsets.bottom); -} - -#pragma mark Properties -- (void)setEdgeInsets:(UIEdgeInsets)edgeInsets -{ - if (!UIEdgeInsetsEqualToEdgeInsets(edgeInsets, _edgeInsets)) - { - _edgeInsets = edgeInsets; - - [self relayoutText]; - - if ([self respondsToSelector:@selector(invalidateIntrinsicContentSize)]) - { - [self invalidateIntrinsicContentSize]; - } - } -} - -- (void)setAttributedString:(NSAttributedString *)string -{ - if (_attributedString != string) - { - // keep the layouter, update string - self.layouter.attributedString = string; - - _attributedString = [string copy]; - - // only do relayout if there is a previous layout frame and visible - if (_layoutFrame) - { - // new layout invalidates all positions for custom views - [self removeAllCustomViews]; - - // relayout only occurs if the view is visible - [self relayoutText]; - } - else - { - // this is needed or else no lazy layout will be triggered if there is no layout frame yet (before this is added to a superview) - [self setNeedsLayout]; - [self setNeedsDisplayInRect:self.bounds]; - } - - if ([self respondsToSelector:@selector(invalidateIntrinsicContentSize)]) - { - [self invalidateIntrinsicContentSize]; - } - } -} - -- (void)setFrame:(CGRect)frame -{ - CGRect oldFrame = self.frame; - - [super setFrame:frame]; - - if (!_layoutFrame) - { - return; - } - - // having a layouter means we are responsible for layouting yourselves - - // relayout based on relayoutMask - - BOOL shouldRelayout = NO; - - if (_relayoutMask & DTAttributedTextContentViewRelayoutOnHeightChanged) - { - if (oldFrame.size.height != frame.size.height) - { - shouldRelayout = YES; - } - } - - if (_relayoutMask & DTAttributedTextContentViewRelayoutOnWidthChanged) - { - if (oldFrame.size.width != frame.size.width) - { - shouldRelayout = YES; - } - } - - if (shouldRelayout) - { - [self relayoutText]; - } - - if (oldFrame.size.height < frame.size.height) - { - // need to draw the newly visible area - [self setNeedsDisplayInRect:CGRectMake(0, oldFrame.size.height, self.bounds.size.width, frame.size.height - oldFrame.size.height)]; - } -} - -- (void)setShouldAddFirstLineLeading:(BOOL)shouldAddLeading -{ - if (_shouldAddFirstLineLeading != shouldAddLeading) - { - _shouldAddFirstLineLeading = shouldAddLeading; - - [self setNeedsDisplay]; - - if ([self respondsToSelector:@selector(invalidateIntrinsicContentSize)]) - { - [self invalidateIntrinsicContentSize]; - } - } -} - -- (void)setShouldDrawImages:(BOOL)shouldDrawImages -{ - if (_shouldDrawImages != shouldDrawImages) - { - _shouldDrawImages = shouldDrawImages; - - [self setNeedsDisplay]; - - if ([self respondsToSelector:@selector(invalidateIntrinsicContentSize)]) - { - [self invalidateIntrinsicContentSize]; - } - } -} - -- (void)setShouldDrawLinks:(BOOL)shouldDrawLinks -{ - if (_shouldDrawLinks != shouldDrawLinks) - { - _shouldDrawLinks = shouldDrawLinks; - - [self setNeedsDisplay]; - - if ([self respondsToSelector:@selector(invalidateIntrinsicContentSize)]) - { - [self invalidateIntrinsicContentSize]; - } - } -} - -- (void)setBackgroundColor:(DTColor *)newColor -{ - super.backgroundColor = newColor; - - if ([newColor alphaComponent]<1.0) - { - self.opaque = NO; - } - else - { - self.opaque = YES; - } -} - - -- (DTCoreTextLayouter *)layouter -{ - @synchronized(self) - { - if (!_layouter) - { - if (_attributedString) - { - _layouter = [[DTCoreTextLayouter alloc] initWithAttributedString:_attributedString]; - - // allow frame caching if somebody uses the suggestedSize - _layouter.shouldCacheLayoutFrames = YES; - } - } - - return _layouter; - } -} - -- (void)setLayouter:(DTCoreTextLayouter *)layouter -{ - @synchronized(self) - { - if (_layouter != layouter) - { - _layouter = layouter; - } - } -} - -- (DTCoreTextLayoutFrame *)layoutFrame -{ - @synchronized(self) - { - DTCoreTextLayouter *theLayouter = self.layouter; - - if (!_layoutFrame) - { - // we can only layout if we have our own layouter - if (theLayouter) - { - CGRect rect = UIEdgeInsetsInsetRect(self.bounds, _edgeInsets); - - if (rect.size.width<=0) - { - // cannot create layout frame with negative or zero width - return nil; - } - - if (_layoutFrameHeightIsConstrainedByBounds) - { - if (rect.size.height<=0) - { - // cannot create layout frame with negative or zero height if flexible height is disabled - return nil; - } - - // height already set - } - else - { - rect.size.height = CGFLOAT_HEIGHT_UNKNOWN; // necessary height set as soon as we know it. - } - - _layoutFrame = [theLayouter layoutFrameWithRect:rect range:NSMakeRange(0, 0)]; - _layoutFrame.numberOfLines = _numberOfLines; - _layoutFrame.lineBreakMode = _lineBreakMode; - _layoutFrame.truncationString = _truncationString; - - // this must have been the initial layout pass - CGSize neededSize = CGSizeMake(_layoutFrame.frame.size.width + _edgeInsets.left + _edgeInsets.right, CGRectGetMaxY(_layoutFrame.frame) + _edgeInsets.bottom); - - CGRect optimalFrame = CGRectMake(self.frame.origin.x, self.frame.origin.y, neededSize.width, neededSize.height); - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSValue valueWithCGRect:optimalFrame] forKey:@"OptimalFrame"]; - - [[NSNotificationCenter defaultCenter] postNotificationName:DTAttributedTextContentViewDidFinishLayoutNotification object:self userInfo:userInfo]; - - if (_delegateFlags.delegateSupportsNotificationBeforeTextBoxDrawing) - { - DT_WEAK_VARIABLE DTAttributedTextContentView *weakself = self; - - [_layoutFrame setTextBlockHandler:^(DTTextBlock *textBlock, CGRect frame, CGContextRef context, BOOL *shouldDrawDefaultBackground) { - - DTAttributedTextContentView *strongself = weakself; - - BOOL result = [strongself->_delegate attributedTextContentView:strongself shouldDrawBackgroundForTextBlock:textBlock frame:frame context:context forLayoutFrame:strongself->_layoutFrame]; - - if (shouldDrawDefaultBackground) - { - *shouldDrawDefaultBackground = result; - } - - }]; - } - - [self invalidateAccessibilityElements]; - } - } - - return _layoutFrame; - } -} - -- (void)setLayoutFrame:(DTCoreTextLayoutFrame *)layoutFrame -{ - @synchronized(self) - { - if (_layoutFrame != layoutFrame) - { - [self removeAllCustomViewsForLinks]; - - if (layoutFrame) - { - [self setNeedsLayout]; - [self setNeedsDisplayInRect:self.bounds]; - } - _layoutFrame = layoutFrame; - - [self invalidateAccessibilityElements]; - } - }; -} - -- (NSMutableSet *)customViews -{ - if (!customViews) - { - customViews = [[NSMutableSet alloc] init]; - } - - return customViews; -} - -- (NSMutableDictionary *)customViewsForLinksIndex -{ - if (!customViewsForLinksIndex) - { - customViewsForLinksIndex = [[NSMutableDictionary alloc] init]; - } - - return customViewsForLinksIndex; -} - -- (NSMutableDictionary *)customViewsForAttachmentsIndex -{ - if (!customViewsForAttachmentsIndex) - { - customViewsForAttachmentsIndex = [[NSMutableDictionary alloc] init]; - } - - return customViewsForAttachmentsIndex; -} - -- (void)setDelegate:(id)delegate -{ - _delegate = delegate; - - _delegateFlags.delegateSupportsCustomViewsForAttachments = [_delegate respondsToSelector:@selector(attributedTextContentView:viewForAttachment:frame:)]; - _delegateFlags.delegateSupportsCustomViewsForLinks = [_delegate respondsToSelector:@selector(attributedTextContentView:viewForLink:identifier:frame:)]; - _delegateFlags.delegateSupportsGenericCustomViews = [_delegate respondsToSelector:@selector(attributedTextContentView:viewForAttributedString:frame:)]; - _delegateFlags.delegateSupportsNotificationBeforeDrawing = [_delegate respondsToSelector:@selector(attributedTextContentView:willDrawLayoutFrame:inContext:)]; - _delegateFlags.delegateSupportsNotificationAfterDrawing = [_delegate respondsToSelector:@selector(attributedTextContentView:didDrawLayoutFrame:inContext:)]; - _delegateFlags.delegateSupportsNotificationBeforeTextBoxDrawing = [_delegate respondsToSelector:@selector(attributedTextContentView:shouldDrawBackgroundForTextBlock:frame:context:forLayoutFrame:)]; - - if (!_delegateFlags.delegateSupportsCustomViewsForLinks && !_delegateFlags.delegateSupportsGenericCustomViews) - { - [self removeAllCustomViewsForLinks]; - } - - // we don't draw the images if imageViews are provided by the delegate method - // if you want images to be drawn even though you use custom views, set it back to YES after setting delegate - if (_delegateFlags.delegateSupportsGenericCustomViews || _delegateFlags.delegateSupportsCustomViewsForAttachments) - { - _shouldDrawImages = NO; - } - else - { - _shouldDrawImages = YES; - } -} - -#pragma mark - Accessibility - -- (void)invalidateAccessibilityElements -{ - _accessibilityElements = nil; -} - -- (BOOL)isAccessibilityElement -{ - return NO; -} - -- (NSInteger)accessibilityElementCount -{ - return [[self accessibilityElements] count]; -} - -- (id)accessibilityElementAtIndex:(NSInteger)index -{ - NSUInteger count = [self accessibilityElementCount]; - - if (count > 0 && index < count) - { - return [[self accessibilityElements] objectAtIndex:index]; - } - - return nil; -} - -- (NSInteger)indexOfAccessibilityElement:(id)element -{ - // It seems like indexOfObject: is failing for the proxy views, even though isEqual: and hash are both implemented - // on the proxy. Perhaps UIView doesn't like isEqual: with our proxy view. Regardless, this implementation seems to work. - NSInteger index = [[self accessibilityElements] indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { - BOOL equal = [obj isEqual:element]; - *stop = equal; - return equal; - }]; - - return index; -} - -- (NSArray *)accessibilityElements -{ - if (!_accessibilityElements) - { - DTCoreTextLayoutFrameAccessibilityElementGenerator *generator = [[DTCoreTextLayoutFrameAccessibilityElementGenerator alloc] init]; - _accessibilityElements = [generator accessibilityElementsForLayoutFrame:self.layoutFrame view:self attachmentViewProvider:^id(DTTextAttachment *attachment) { - // Since we actually take the views out of the view hierarchy when they're off screen, create a proxy object that stands - // in for the view until it's needed by VoiceOver. By the time VoiceOver asks for the view, it should already be onscreen. - return [[DTAccessibilityViewProxy alloc] initWithTextAttachment:attachment delegate:self]; - }]; - } - return _accessibilityElements; -} - -#pragma mark - DTAccessibilityViewProxyDelegate - -- (UIView *)viewForTextAttachment:(DTTextAttachment *)textAttachment proxy:(DTAccessibilityViewProxy *)proxy -{ - NSNumber *indexKey = [NSNumber numberWithInteger:[textAttachment hash]]; - UIView *existingAttachmentView = [self.customViewsForAttachmentsIndex objectForKey:indexKey]; - return existingAttachmentView; -} - -@synthesize layouter = _layouter; -@synthesize layoutFrame = _layoutFrame; -@synthesize attributedString = _attributedString; -@synthesize delegate = _delegate; -@synthesize edgeInsets = _edgeInsets; -@synthesize shouldDrawImages = _shouldDrawImages; -@synthesize shouldDrawLinks = _shouldDrawLinks; -@synthesize shouldLayoutCustomSubviews = _shouldLayoutCustomSubviews; -@synthesize layoutOffset = _layoutOffset; -@synthesize backgroundOffset = _backgroundOffset; - -@synthesize customViews; -@synthesize customViewsForLinksIndex; -@synthesize customViewsForAttachmentsIndex; -@synthesize relayoutMask = _relayoutMask; - -@synthesize accessibilityElements = _accessibilityElements; - -@end - -@implementation DTAttributedTextContentView (Drawing) - -- (UIImage *)contentImageWithBounds:(CGRect)bounds options:(DTCoreTextLayoutFrameDrawingOptions)options -{ - UIGraphicsBeginImageContextWithOptions(bounds.size, NO, 0); - - CGContextRef context = UIGraphicsGetCurrentContext(); - - if(!context) { - return nil; - } - - CGContextTranslateCTM(context, -bounds.origin.x, -bounds.origin.y); - - [self.layoutFrame drawInContext:context options:options]; - - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return image; -} - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextView.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextView.h deleted file mode 100644 index f85c068..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextView.h +++ /dev/null @@ -1,136 +0,0 @@ -// -// DTAttributedTextView.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/12/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -#import "DTAttributedTextContentView.h" - -@class DTAttributedTextView; - -/** - This view is designed to be a replacement for `UITextView`. It is a `UIScrollView` subclass and creates a as content view for displaying the text. - - The content view of type is created lazily. You should not set values on it directly if you use it in conjunction with this class for scrolling. - */ - -@interface DTAttributedTextView : UIScrollView -{ - // ivars needed by subclasses - DTAttributedTextContentView *_attributedTextContentView; -} - -/** - @name Providing Content - */ - -/** - The attributed text to be displayed in the text content view of the receiver. - */ -@property (nonatomic, strong) NSAttributedString *attributedString; - - -/** - A delegate implementing DTAttributedTextContentViewDelegate to provide custom subviews for images and links. - */ -@property (nonatomic, DT_WEAK_PROPERTY) IBOutlet id textDelegate; - - -/** - Performs a new layout pass on the receiver. This destroys the frame setter, calls relayoutText on the content view and marks the receiver as needing layout so that custom subviews get appropriately sized. - */ -- (void)relayoutText; - -/** - @name Accessing Subviews - */ - -/** - References to the DTAttributedTextContentView that display the text. This is not named contentView because this class inherits from `UIScrollView` which has an internal property of this name - */ -@property (nonatomic, strong, readonly) DTAttributedTextContentView *attributedTextContentView; - -/** - A view to be displayed behind the text content view - */ -@property (nonatomic, strong) IBOutlet UIView *backgroundView; - - -/** - @name Customizing Display - */ - -/** - If the content view of the receiver should draw links. Set to `NO` if displaying links as custom views via textDelegate; - - Defaults to `YES` if you supply your own link drawing then set this property to NO and supply your custom view (e.g. ) via the . - */ -@property (nonatomic, assign) BOOL shouldDrawLinks; - -/** - If the content view of the receiver should draw images. Set to `NO` if displaying images as custom views via textDelegate; - - Defaults to `YES` if you supply your own image drawing then set this property to NO and supply your custom image view (e.g. ) via the . - */ -@property (nonatomic, assign) BOOL shouldDrawImages; - - -/** - @name Customizing Content View - */ - -/** - You can override this method to provide a different class to use for the content view. If you replace the content view class then it should inherit from which is also the default. - @returns The class to use for the content view. - */ -- (Class)classForContentView; - -/** - @name User Interaction - */ - -/** - Scrolls the receiver to the anchor with the given name to the top. - @param anchorName The name of the href anchor. - @param animated `YES` if the movement should be animated. - */ -- (void)scrollToAnchorNamed:(NSString *)anchorName animated:(BOOL)animated; - -/** - Scrolls the receiver until the text in the specified range is visible. - @param range The range of text to scroll into view. - @param animated `YES` if the movement should be animated. - */ -- (void)scrollRangeToVisible:(NSRange)range animated:(BOOL)animated; - -/** - @name Working with a Cursor - */ - -/** - Determines the closest string index to a point in the receiver's frame. - - This can be used to find the cursor position to position an input caret at. - @param point The point - @returns The resulting string index - */ -- (NSInteger)closestCursorIndexToPoint:(CGPoint)point; - -/** - The rectangle to draw a caret for a given index - @param index The string index for which to determine a cursor frame - @returns The cursor rectangle - */ -- (CGRect)cursorRectAtIndex:(NSInteger)index; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextView.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextView.m deleted file mode 100644 index d772f85..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTAttributedTextView.m +++ /dev/null @@ -1,429 +0,0 @@ -// -// DTAttributedTextView.m -// DTCoreText -// -// Created by Oliver Drobnik on 1/12/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTAttributedTextView.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -#import "DTCoreText.h" - -#import -#import - - -@interface DTAttributedTextView () - -- (void)_setup; - -@end - - - -@implementation DTAttributedTextView -{ - UIView *_backgroundView; - - // these are pass-through, i.e. store until the content view is created - DT_WEAK_VARIABLE id textDelegate; - NSAttributedString *_attributedString; - - BOOL _shouldDrawLinks; - BOOL _shouldDrawImages; -} - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - - if (self) - { - [self _setup]; - } - - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - self.attributedTextContentView.edgeInsets = self.contentInset; - - // layout custom subviews for visible area - [_attributedTextContentView layoutSubviewsInRect:self.bounds]; -} - -- (void)awakeFromNib -{ - [super awakeFromNib]; - [self _setup]; -} - -- (void)safeAreaInsetsDidChange -{ - [super safeAreaInsetsDidChange]; -} - -// default -- (void)_setup -{ - if (self.backgroundColor) - { - CGFloat alpha = [self.backgroundColor alphaComponent]; - - if (alpha < 1.0) - { - self.opaque = NO; - } - else - { - self.opaque = YES; - } - } - else - { - self.backgroundColor = [DTColor whiteColor]; - self.opaque = YES; - } - - self.autoresizesSubviews = NO; - self.clipsToBounds = YES; - - // defaults - _shouldDrawLinks = YES; - _shouldDrawImages = YES; -} - -// override class e.g. for mutable content view -- (Class)classForContentView -{ - return [DTAttributedTextContentView class]; -} - -#pragma mark External Methods -- (void)scrollToAnchorNamed:(NSString *)anchorName animated:(BOOL)animated -{ - NSRange range = [self.attributedTextContentView.attributedString rangeOfAnchorNamed:anchorName]; - - if (range.location != NSNotFound) - { - [self scrollRangeToVisible:range animated:animated]; - } -} - -- (void)scrollRangeToVisible:(NSRange)range animated:(BOOL)animated -{ - // get the line of the first index of the anchor range - DTCoreTextLayoutLine *line = [self.attributedTextContentView.layoutFrame lineContainingIndex:range.location]; - - // make sure we don't scroll too far - CGFloat maxScrollPos = self.contentSize.height - self.bounds.size.height + self.contentInset.bottom + self.contentInset.top; - CGFloat scrollPos = MIN(line.frame.origin.y, maxScrollPos); - - // scroll - [self setContentOffset:CGPointMake(0, scrollPos) animated:animated]; -} - -- (void)relayoutText -{ - DT_WEAK_VARIABLE typeof(self) weakSelf = self; - DTBlockPerformSyncIfOnMainThreadElseAsync(^{ - DTAttributedTextView *strongSelf = weakSelf; - - // need to reset the layouter because otherwise we get the old framesetter or cached layout frames - strongSelf->_attributedTextContentView.layouter = nil; - - // here we're layouting the entire string, might be more efficient to only relayout the paragraphs that contain these attachments - [strongSelf->_attributedTextContentView relayoutText]; - - // layout custom subviews for visible area - [strongSelf setNeedsLayout]; - }); -} - -#pragma mark - Working with a Cursor - -- (NSInteger)closestCursorIndexToPoint:(CGPoint)point -{ - // the point is in the coordinate system of the receiver, need to convert into those of the content view first - CGPoint pointInContentView = [self.attributedTextContentView convertPoint:point fromView:self]; - - return [self.attributedTextContentView closestCursorIndexToPoint:pointInContentView]; -} - -- (CGRect)cursorRectAtIndex:(NSInteger)index -{ - CGRect rectInContentView = [self.attributedTextContentView cursorRectAtIndex:index]; - - // the point is in the coordinate system of the content view, need to convert into those of the receiver first - CGRect rect = [self.attributedTextContentView convertRect:rectInContentView toView:self]; - - return rect; -} - -#pragma mark Notifications -- (void)contentViewDidLayout:(NSNotification *)notification -{ - DT_WEAK_VARIABLE typeof(self) weakSelf = self; - DTBlockPerformSyncIfOnMainThreadElseAsync(^{ - DTAttributedTextView *strongSelf = weakSelf; - - NSDictionary *userInfo = [notification userInfo]; - CGRect optimalFrame = [[userInfo objectForKey:@"OptimalFrame"] CGRectValue]; - - CGRect frame = UIEdgeInsetsInsetRect(self.bounds, self.contentInset); - - // ignore possibly delayed layout notification for a different width - if (optimalFrame.size.width == frame.size.width) - { - strongSelf->_attributedTextContentView.frame = optimalFrame; - strongSelf.contentSize = [strongSelf->_attributedTextContentView intrinsicContentSize]; - } - }); -} - -#pragma mark Properties -- (DTAttributedTextContentView *)attributedTextContentView -{ - if (!_attributedTextContentView) - { - // subclasses can specify a DTAttributedTextContentView subclass instead - Class classToUse = [self classForContentView]; - - CGRect frame = UIEdgeInsetsInsetRect(self.bounds, self.contentInset); - - if (frame.size.width<=0 || frame.size.height<=0) - { - frame = CGRectZero; - } - - // make sure we always have a tiled layer - Class previousLayerClass = nil; - - // for DTAttributedTextContentView subclasses we force a tiled layer - if ([classToUse isSubclassOfClass:[DTAttributedTextContentView class]]) - { - Class layerClass = [DTAttributedTextContentView layerClass]; - - if (![layerClass isSubclassOfClass:[CATiledLayer class]]) - { - [DTAttributedTextContentView setLayerClass:[DTTiledLayerWithoutFade class]]; - previousLayerClass = layerClass; - } - } - - _attributedTextContentView = [[classToUse alloc] initWithFrame:frame]; - - // restore previous layer class if we changed the layer class for the content view - if (previousLayerClass) - { - [DTAttributedTextContentView setLayerClass:previousLayerClass]; - } - - _attributedTextContentView.userInteractionEnabled = YES; - _attributedTextContentView.backgroundColor = self.backgroundColor; - _attributedTextContentView.shouldLayoutCustomSubviews = NO; // we call layout when scrolling - - // adjust opaqueness based on background color alpha - CGFloat alpha = [self.backgroundColor alphaComponent]; - - if (alpha < 1.0) - { - _attributedTextContentView.opaque = NO; - } - else - { - _attributedTextContentView.opaque = YES; - } - - // set text delegate if it was set before instantiation of content view - _attributedTextContentView.delegate = self->_textDelegate; - - // pass on setting - _attributedTextContentView.shouldDrawLinks = _shouldDrawLinks; - - // notification that tells us about the actual size of the content view - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contentViewDidLayout:) name:DTAttributedTextContentViewDidFinishLayoutNotification object:_attributedTextContentView]; - - // temporary frame to specify the width - _attributedTextContentView.frame = frame; - - // set text we previously got, this also triggers a relayout - _attributedTextContentView.attributedString = _attributedString; - - // this causes a relayout and the resulting notification will allow us to set the final frame - - [self addSubview:_attributedTextContentView]; - } - - return _attributedTextContentView; -} - -- (void)setBackgroundColor:(DTColor *)newColor -{ - if ([newColor alphaComponent] < 1.0) - { - super.backgroundColor = newColor; - _attributedTextContentView.backgroundColor = [DTColor clearColor]; - self.opaque = NO; - } - else - { - super.backgroundColor = newColor; - - if (_attributedTextContentView.opaque) - { - _attributedTextContentView.backgroundColor = newColor; - } - } -} - -- (void)setContentInset:(UIEdgeInsets)contentInset -{ - [super setContentInset:contentInset]; - - // height does not matter, that will be determined anyhow - CGRect contentFrame = CGRectMake(0, 0, self.frame.size.width - self.contentInset.left - self.contentInset.right, _attributedTextContentView.frame.size.height); - - if (CGRectEqualToRect(contentFrame, self.attributedTextContentView.frame)) - { - self.attributedTextContentView.frame = contentFrame; - } -} - -- (UIView *)backgroundView -{ - if (!_backgroundView) - { - _backgroundView = [[UIView alloc] initWithFrame:self.bounds]; - _backgroundView.backgroundColor = [DTColor whiteColor]; - - // default is no interaction because background should have no interaction - _backgroundView.userInteractionEnabled = NO; - - [self insertSubview:_backgroundView belowSubview:self.attributedTextContentView]; - - // make content transparent so that we see the background - _attributedTextContentView.backgroundColor = [DTColor clearColor]; - _attributedTextContentView.opaque = NO; - } - - return _backgroundView; -} - -- (void)setBackgroundView:(UIView *)backgroundView -{ - if (_backgroundView != backgroundView) - { - [_backgroundView removeFromSuperview]; - _backgroundView = backgroundView; - - if (_attributedTextContentView) - { - [self insertSubview:_backgroundView belowSubview:_attributedTextContentView]; - } - else - { - [self addSubview:_backgroundView]; - } - - if (_backgroundView) - { - // make content transparent so that we see the background - _attributedTextContentView.backgroundColor = [DTColor clearColor]; - _attributedTextContentView.opaque = NO; - } - else - { - _attributedTextContentView.backgroundColor = [DTColor whiteColor]; - _attributedTextContentView.opaque = YES; - } - } -} - -- (void)setAttributedString:(NSAttributedString *)string -{ - _attributedString = string; - - // might need layout for visible custom views - [self setNeedsLayout]; - - if (_attributedTextContentView) - { - // pass it along if contentView already exists - _attributedTextContentView.attributedString = string; - - // this causes a relayout and the resulting notification will allow us to set the frame and contentSize - } -} - -- (NSAttributedString *)attributedString -{ - return _attributedString; -} - -- (void)setFrame:(CGRect)frame -{ - CGRect oldFrame = self.frame; - - if (!CGRectEqualToRect(oldFrame, frame)) - { - [super setFrame:frame]; // need to set own frame first because layout completion needs this updated frame - - if (oldFrame.size.width != frame.size.width) - { - // height does not matter, that will be determined anyhow - CGRect contentFrame = CGRectMake(0, 0, frame.size.width - self.contentInset.left - self.contentInset.right, _attributedTextContentView.frame.size.height); - - _attributedTextContentView.frame = contentFrame; - } - } -} - -- (void)setTextDelegate:(id)aTextDelegate -{ - // store unsafe pointer to delegate because we might not have a contentView yet - self->_textDelegate = aTextDelegate; - - // set it if possible, otherwise it will be set in contentView lazy property - _attributedTextContentView.delegate = aTextDelegate; -} - -- (id)textDelegate -{ - return _attributedTextContentView.delegate ?: self->_textDelegate; -} - -- (void)setShouldDrawLinks:(BOOL)shouldDrawLinks -{ - _shouldDrawLinks = shouldDrawLinks; - _attributedTextContentView.shouldDrawLinks = _shouldDrawLinks; -} - -- (void)setShouldDrawImages:(BOOL)shouldDrawImages -{ - _shouldDrawImages = shouldDrawImages; - _attributedTextContentView.shouldDrawImages = _shouldDrawImages; -} - -@synthesize attributedTextContentView = _attributedTextContentView; -@synthesize attributedString = _attributedString; -@synthesize textDelegate = _textDelegate; - -@synthesize shouldDrawLinks = _shouldDrawLinks; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTBreakHTMLElement.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTBreakHTMLElement.h deleted file mode 100644 index ba83df1..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTBreakHTMLElement.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// DTHTMLElementBR.h -// DTCoreText -// -// Created by Oliver Drobnik on 26.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTHTMLElement.h" - -/** - Specialized subclass of that represents a line break. - */ - -@interface DTBreakHTMLElement : DTHTMLElement - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTBreakHTMLElement.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTBreakHTMLElement.m deleted file mode 100644 index f903223..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTBreakHTMLElement.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// DTHTMLElementBR.m -// DTCoreText -// -// Created by Oliver Drobnik on 26.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTBreakHTMLElement.h" - -@implementation DTBreakHTMLElement - -- (NSAttributedString *)attributedString -{ - @synchronized(self) - { - NSDictionary *attributes = [self attributesForAttributedStringRepresentation]; - return [[NSAttributedString alloc] initWithString:UNICODE_LINE_FEED attributes:attributes]; - } -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCSSListStyle.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCSSListStyle.h deleted file mode 100644 index a2ec9c0..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCSSListStyle.h +++ /dev/null @@ -1,264 +0,0 @@ -// -// DTCSSListStyle.h -// DTCoreText -// -// Created by Oliver Drobnik on 8/11/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -/** - List Styles - */ -typedef NS_ENUM(NSUInteger, DTCSSListStyleType) -{ - /** - The list style should be inherited from the parent - */ - DTCSSListStyleTypeInherit = 0, - - /** - No list style - */ - DTCSSListStyleTypeNone, - - /** - Circle bullet list style - */ - DTCSSListStyleTypeCircle, - - /** - Decimal number list style - */ - DTCSSListStyleTypeDecimal, - - /** - Decimal number list style with a leading zero - */ - DTCSSListStyleTypeDecimalLeadingZero, - - /** - Disc bullet list style - */ - DTCSSListStyleTypeDisc, - - /** - Square bullet list style - */ - DTCSSListStyleTypeSquare, - - /** - Numbered list style with uppercase letters - */ - DTCSSListStyleTypeUpperAlpha, - - /** - Numbered list style with uppercase letters - */ - DTCSSListStyleTypeUpperLatin, - - /** - Numbered list style with uppercase roman numbers - */ - DTCSSListStyleTypeUpperRoman, - - /** - Numbered list style with lowercase letters - */ - DTCSSListStyleTypeLowerAlpha, - - /** - Numbered list style with lowercase letters - */ - DTCSSListStyleTypeLowerLatin, - - /** - Numbered list style with lowercase roman numbers - */ - DTCSSListStyleTypeLowerRoman, - - /** - Plus bullet list style - */ - DTCSSListStyleTypePlus, - - /** - Underscore bullet list style - */ - DTCSSListStyleTypeUnderscore, - - /** - Image bullet list style - */ - DTCSSListStyleTypeImage, - - /** - Value used to represent an invalid list style - */ - DTCSSListStyleTypeInvalid = NSIntegerMax -}; - -/** - List Marker Positions - */ -typedef NS_ENUM(NSUInteger, DTCSSListStylePosition) -{ - /** - List position should be inherited - */ - DTCSSListStylePositionInherit = 0, - - /** - List prefix position inside - */ - DTCSSListStylePositionInside, - - /** - List prefix position outside - */ - DTCSSListStylePositionOutside, - - /** - Value used to represent an invalid list style position - */ - DTCSSListStylePositionInvalid = NSIntegerMax -}; - - -/** - This class is the equivalent of `NSTextList` on Mac with the added handling of the marker position. - */ -@interface DTCSSListStyle : NSObject - - -/** - @name Getting Types from Strings - */ - -/** - Convert a string into a list style type. - - @param string The string to convert - */ -+ (DTCSSListStyleType)listStyleTypeFromString:(NSString *)string; - - -/** - Convert a string into a marker position. - - @param string The string to convert - */ -+ (DTCSSListStylePosition)listStylePositionFromString:(NSString *)string; - -/** - @name Creating List Styles - */ - -/** - Creates a list style from the passed CSS style dictionary - - @param styles A CSS style dictionary from which the construct a suitable list style - */ -- (id)initWithStyles:(NSDictionary *)styles; - -/** - @name Working with CSS Styles - */ - -/** - Update the receiver from the CSS styles dictionary passed - - @param styles A dictionary of CSS styles. - */ -- (void)updateFromStyleDictionary:(NSDictionary *)styles; - - -/** - @name Working with Prefixes - */ - - -/** - Returns the prefix for lists of the receiver's settings. - - @param counter The counter value to use for ordered lists. - @returns The prefix string to prepend to list items. - */ -- (NSString *)prefixWithCounter:(NSInteger)counter; - - -/** - @name Managing Item Numbering - */ - - -/** - Sets the starting item number for the text list. - - The default value is `1`. This value will be used only for ordered lists, and ignored in other cases. - - @param itemNum The item number. - */ -- (void)setStartingItemNumber:(NSInteger)itemNum; - - -/** - Returns the starting item number for the text list. - - The default value is `1`. This value will be used only for ordered lists, and ignored in other cases. - @returns The item number. - */ -- (NSInteger)startingItemNumber; - - -/** - @name Comparing Lists - */ - -/** - Determine if another list style has equivalent settings. Note that this does not mean that they are identical, only that they look the same. - @param otherListStyle The other list style to compare the receiver with - @returns `YES` if the other list style has the same values - */ -- (BOOL)isEqualToListStyle:(DTCSSListStyle *)otherListStyle; - - -/** - @name Getting Information about Lists - */ - -/** - Returns if the receiver is an ordered or unordered list - - @returns `YES` if the receiver is ordered, `NO` if it is unordered - */ -- (BOOL)isOrdered; - -/** - If the list style is inherited. - - @warn This is not implemented. - */ -@property (nonatomic, assign) BOOL inherit; - - -/** - The type of the text list. See DTCSSListStyleType for available types - */ -@property (nonatomic, assign) DTCSSListStyleType type; - - -/** - The position of the marker in the prefix. See DTCSSListStylePosition for available positions. - */ -@property (nonatomic, assign) DTCSSListStylePosition position; - - -/** - The image name to use for the marker - */ -@property (nonatomic, copy) NSString *imageName; - - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCSSListStyle.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCSSListStyle.m deleted file mode 100644 index 8a63b25..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCSSListStyle.m +++ /dev/null @@ -1,483 +0,0 @@ -// -// DTCSSListStyle.m -// DTCoreText -// -// Created by Oliver Drobnik on 8/11/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCSSListStyle.h" - -#import "DTCoreTextConstants.h" - -#import "NSScanner+HTML.h" -#import "NSNumber+RomanNumerals.h" - - -@interface DTCSSListStyle () - -- (void)updateFromStyleDictionary:(NSDictionary *)styles; - -@property (nonatomic, assign) NSInteger startingItemNumber; - -@end - - - -@implementation DTCSSListStyle -{ - BOOL _inherit; - - DTCSSListStyleType _type; - DTCSSListStylePosition _position; - - NSString *_imageName; - NSInteger _startingItemNumber; -} - -- (id)initWithStyles:(NSDictionary *)styles -{ - self = [super init]; - - if (self) - { - // default - _position = DTCSSListStylePositionOutside; - _startingItemNumber = 1; - - [self updateFromStyleDictionary:styles]; - } - - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [super init]; - if (self) { - _inherit = [aDecoder decodeBoolForKey:@"inherit"]; - _type = [aDecoder decodeIntegerForKey:@"type"]; - _position = [aDecoder decodeIntegerForKey:@"position"]; - _imageName = [aDecoder decodeObjectForKey:@"imageName"]; - _startingItemNumber = [aDecoder decodeIntegerForKey:@"startingItemNumber"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeBool:_inherit forKey:@"inherit"]; - [aCoder encodeInteger:_type forKey:@"type"]; - [aCoder encodeInteger:_position forKey:@"position"]; - [aCoder encodeObject:_imageName forKey:@"imageName"]; - [aCoder encodeInteger:_startingItemNumber forKey:@"startingItemNumber"]; -} - -// convert string to listStyleType -+ (DTCSSListStyleType)listStyleTypeFromString:(NSString *)string -{ - if (!string) - { - return DTCSSListStyleTypeInvalid; - } - - // always compare lower case - string = [string lowercaseString]; - - if ([string isEqualToString:@"inherit"]) - { - return DTCSSListStyleTypeInherit; - } - else if ([string isEqualToString:@"none"]) - { - return DTCSSListStyleTypeNone; - } - else if ([string isEqualToString:@"circle"]) - { - return DTCSSListStyleTypeCircle; - } - else if ([string isEqualToString:@"square"]) - { - return DTCSSListStyleTypeSquare; - } - else if ([string isEqualToString:@"decimal"]) - { - return DTCSSListStyleTypeDecimal; - } - else if ([string isEqualToString:@"decimal-leading-zero"]) - { - return DTCSSListStyleTypeDecimalLeadingZero; - } - else if ([string isEqualToString:@"disc"]) - { - return DTCSSListStyleTypeDisc; - } - else if ([string isEqualToString:@"upper-alpha"]||[string isEqualToString:@"upper-latin"]) - { - return DTCSSListStyleTypeUpperAlpha; - } - else if ([string isEqualToString:@"lower-alpha"]||[string isEqualToString:@"lower-latin"]) - { - return DTCSSListStyleTypeLowerAlpha; - } - else if ([string isEqualToString:@"lower-roman"]) - { - return DTCSSListStyleTypeLowerRoman; - } - else if ([string isEqualToString:@"upper-roman"]) - { - return DTCSSListStyleTypeUpperRoman; - } - else if ([string isEqualToString:@"plus"]) - { - return DTCSSListStyleTypePlus; - } - else if ([string isEqualToString:@"underscore"]) - { - return DTCSSListStyleTypeUnderscore; - } - else - { - return DTCSSListStyleTypeNone; - } -} - -+ (DTCSSListStylePosition)listStylePositionFromString:(NSString *)string -{ - if (!string) - { - return DTCSSListStylePositionInvalid; - } - - // always compare lower case - string = [string lowercaseString]; - - if ([string isEqualToString:@"inherit"]) - { - return DTCSSListStylePositionInherit; - } - else if ([string isEqualToString:@"inside"]) - { - return DTCSSListStylePositionInside; - } - else if ([string isEqualToString:@"outside"]) - { - return DTCSSListStylePositionOutside; - } - else - { - return DTCSSListStylePositionInherit; - } -} - -// returns NO if not a valid type -- (BOOL)setTypeWithString:(NSString *)string -{ - DTCSSListStyleType type = [DTCSSListStyle listStyleTypeFromString:string]; - if (type == DTCSSListStyleTypeInvalid) - { - return NO; - } - - _type = type; - - return YES; -} - -// returns NO if not a valid type -- (BOOL)setPositionWithString:(NSString *)string -{ - DTCSSListStylePosition position = [DTCSSListStyle listStylePositionFromString:string]; - - if (position == DTCSSListStylePositionInvalid) - { - return NO; - } - - _position = position; - return YES; -} - -- (void)updateFromStyleDictionary:(NSDictionary *)styles -{ - NSString *shortHand = [[styles objectForKey:@"list-style"] lowercaseString]; - - if (shortHand) - { - if ([shortHand isEqualToString:@"inherit"]) - { - _inherit = YES; - return; - } - - NSArray *components = [shortHand componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; - - BOOL typeWasSet = NO; - BOOL positionWasSet = NO; - - - for (NSString *oneComponent in components) - { - if ([oneComponent hasPrefix:@"url"]) - { - // list-style-image - NSString *urlString; - NSScanner *scanner = [NSScanner scannerWithString:oneComponent]; - - if ([scanner scanCSSURL:&urlString]) - { - self.imageName = urlString; - continue; - } - } - - if (!typeWasSet && [self setTypeWithString:oneComponent]) - { - typeWasSet = YES; - continue; - } - - if (!positionWasSet && [self setPositionWithString:oneComponent]) - { - positionWasSet = YES; - continue; - } - } - - return; - } - - // not a short hand, set from individual types - - [self setTypeWithString:[styles objectForKey:@"list-style-type"]]; - [self setPositionWithString:[styles objectForKey:@"list-style-position"]]; - - NSObject *tmpValue = [styles objectForKey:@"list-style-image"]; - - if ([tmpValue isKindOfClass:NSString.class]) - { - // extract just the name - - NSString *urlString; - NSScanner *scanner = [NSScanner scannerWithString:(NSString *)tmpValue]; - - if ([scanner scanCSSURL:&urlString]) - { - self.imageName = urlString; - } - } -} - -#ifndef COVERAGE -// exclude methods from coverage testing - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@ %p type=%d position=%d>", NSStringFromClass([self class]), self, (int)_type, (int)_position]; -} - -- (NSUInteger)hash -{ - NSUInteger calcHash = 7; - - calcHash = calcHash*31 + [_imageName hash]; - calcHash = calcHash*31 + (NSUInteger)_type; - calcHash = calcHash*31 + (NSUInteger)_position; - calcHash = calcHash*31 + (NSUInteger)_startingItemNumber; - calcHash = calcHash*31 + (NSUInteger)_inherit; - - return calcHash; -} - -#endif - -/* - Note: this is not isEqual: because on iOS 7 -[NSMutableAttributedString initWithString:attributes:] calls this via -[NSArray isEqualToArray:]. There isEqual: needs to be returning NO, because otherwise there is some weird internal caching side effect where it reuses previous list arrays - */ -- (BOOL)isEqualToListStyle:(DTCSSListStyle *)otherListStyle -{ - if (!otherListStyle) - { - return NO; - } - - if (otherListStyle == self) - { - return YES; - } - - if (![otherListStyle isKindOfClass:[DTCSSListStyle class]]) - { - return NO; - } - - if (_inherit != otherListStyle->_inherit) - { - return NO; - } - - if (_type != otherListStyle->_type) - { - return NO; - } - - if (_position != otherListStyle->_position) - { - return NO; - } - - if (_startingItemNumber != otherListStyle->_startingItemNumber) - { - return NO; - } - - if (_imageName == otherListStyle->_imageName) - { - return YES; - } - - return ([_imageName isEqualToString:otherListStyle->_imageName]); -} - -#pragma mark Copying - -- (id)copyWithZone:(NSZone *)zone -{ - DTCSSListStyle *newStyle = [[DTCSSListStyle allocWithZone:zone] init]; - newStyle.type = self.type; - newStyle.position = self.position; - newStyle.imageName = self.imageName; - newStyle.startingItemNumber = self.startingItemNumber; - - return newStyle; -} - -#pragma mark Utilities - -- (NSString *)prefixWithCounter:(NSInteger)counter -{ - NSString *token = nil; - - DTCSSListStyleType listStyleType = _type; - - if (self.imageName) - { - listStyleType = DTCSSListStyleTypeImage; - } - - - switch (listStyleType) - { - case DTCSSListStyleTypeNone: - case DTCSSListStyleTypeInherit: // should never be called with inherit - case DTCSSListStyleTypeInvalid: - { - return nil; - } - case DTCSSListStyleTypeImage: - { - token = UNICODE_OBJECT_PLACEHOLDER; - break; - } - case DTCSSListStyleTypeCircle: - { - token = @"\u25e6"; - break; - } - case DTCSSListStyleTypeSquare: - { - token = @"\u25aa"; - break; - } - case DTCSSListStyleTypeDecimal: - { - token = [NSString stringWithFormat:@"%d.", (int)counter]; - break; - } - case DTCSSListStyleTypeDecimalLeadingZero: - { - token = [NSString stringWithFormat:@"%02d.", (int)counter]; - break; - } - case DTCSSListStyleTypeDisc: - { - token = @"\u2022"; - break; - } - case DTCSSListStyleTypeUpperAlpha: - case DTCSSListStyleTypeUpperLatin: - { - char letter = 'A' + (char)(counter - 1); - token = [NSString stringWithFormat:@"%c.", letter]; - break; - } - case DTCSSListStyleTypeLowerAlpha: - case DTCSSListStyleTypeLowerLatin: - { - char letter = 'a' + (char)(counter - 1); - token = [NSString stringWithFormat:@"%c.", letter]; - break; - } - case DTCSSListStyleTypePlus: - { - token = @"+"; - break; - } - case DTCSSListStyleTypeUnderscore: - { - token = @"_"; - break; - } - case DTCSSListStyleTypeUpperRoman: - { - token = [NSString stringWithFormat:@"%@.",[@(counter) romanNumeral]]; - break; - } - case DTCSSListStyleTypeLowerRoman: - { - token = [NSString stringWithFormat:@"%@.",[[@(counter) romanNumeral] lowercaseString]]; - break; - } - } - - if (_position == DTCSSListStylePositionInside) - { - // iOS needs second tab, Mac ignores position outside -#if TARGET_OS_IPHONE - return [NSString stringWithFormat:@"\x09\x09%@", token]; -#else - return [NSString stringWithFormat:@"\x09%@\x09", token]; -#endif - } - else - { - return [NSString stringWithFormat:@"\x09%@\x09", token]; - } -} - -- (BOOL)isOrdered -{ - switch (_type) - { - case DTCSSListStyleTypeDecimal: - case DTCSSListStyleTypeDecimalLeadingZero: - case DTCSSListStyleTypeUpperAlpha: - case DTCSSListStyleTypeUpperLatin: - case DTCSSListStyleTypeLowerAlpha: - case DTCSSListStyleTypeLowerLatin: - return YES; - - default: - return NO; - } -} - -#pragma mark Properties - -@synthesize inherit = _inherit; -@synthesize type = _type; -@synthesize position = _position; -@synthesize imageName = _imageName; -@synthesize startingItemNumber = _startingItemNumber; - -@end - -// TO DO: Implement image diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCSSStylesheet.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCSSStylesheet.h deleted file mode 100644 index 65fd7f0..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCSSStylesheet.h +++ /dev/null @@ -1,86 +0,0 @@ -// -// DTCSSStylesheet.h -// DTCoreText -// -// Created by Oliver Drobnik on 9/5/11. -// Copyright (c) 2011 Drobnik.com. All rights reserved. -// - -#import - -@class DTHTMLElement; - -/** - This class represents a CSS style sheet used for specifying formatting for certain CSS selectors. - - It supports matching styles by class, by id or by tag name. Hierarchy matching is not supported yet. - */ -@interface DTCSSStylesheet : NSObject - - -/** - @name Creating Stylesheets - */ - -/** - Creates the default stylesheet. - - This stylesheet is based on the standard styles that Webkit provides for these tags. This stylesheet is loaded from default.css. - */ -+ (DTCSSStylesheet *)defaultStyleSheet; - - -/** - Creates a stylesheet with a given style block - - @param css The CSS string for the style block - */ -- (id)initWithStyleBlock:(NSString *)css; - - -/** - @name Working with CSS Style Blocks - */ - - -/** - Parses a style block string and adds the found style rules to the receiver. - - @param css The CSS string for the style block -*/ -- (void)parseStyleBlock:(NSString *)css; - - -/** - Merges styles from given stylesheet into the receiver - - @param stylesheet the stylesheet to merge - */ -- (void)mergeStylesheet:(DTCSSStylesheet *)stylesheet; - - -/** - @name Accessing Style Information - */ - -/** - Returns a dictionary that contains the merged style for a given element and the applicable style rules from the receiver. - - @param element The HTML element. - @param matchedSelectors The CSS selectors that caused a match - @param ignoreInlineStyle If `YES` then the inline styles of the element will be ignored and only the receiver's styles used - @returns The merged style dictionary containing only styles which selector matches the element - */ -- (NSDictionary *)mergedStyleDictionaryForElement:(DTHTMLElement *)element matchedSelectors:(NSSet * __autoreleasing*)matchedSelectors ignoreInlineStyle:(BOOL)ignoreInlineStyle; - -/** - Returns a dictionary of the styles of the receiver - */ -- (NSDictionary *)styles; - -/** - Returns an ordered (by declaration) set of the selectors for all of the styles. - */ -- (NSArray *)orderedSelectors; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCSSStylesheet.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCSSStylesheet.m deleted file mode 100644 index 0f6b743..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCSSStylesheet.m +++ /dev/null @@ -1,976 +0,0 @@ -// -// DTCSSStylesheet.m -// DTCoreText -// -// Created by Oliver Drobnik on 9/5/11. -// Copyright (c) 2011 Drobnik.com. All rights reserved. -// - -#import "DTCSSStylesheet.h" -#import "DTCSSListStyle.h" - -#import "DTHTMLElement.h" -#import "NSScanner+HTML.h" -#import "NSString+CSS.h" -#import "NSString+HTML.h" - - - - -@implementation DTCSSStylesheet -{ - NSMutableDictionary *_styles; - NSMutableDictionary *_orderedSelectorWeights; - NSMutableArray *_orderedSelectors; -} - -#pragma mark Creating Stylesheets - -+ (DTCSSStylesheet *)defaultStyleSheet -{ - static DTCSSStylesheet *defaultDTCSSStylesheet = nil; - if (defaultDTCSSStylesheet) - { - return defaultDTCSSStylesheet; - } - - @synchronized(self) - { - if (!defaultDTCSSStylesheet) - { -#if SWIFT_PACKAGE - // get resource bundle via macro - NSString *path = [SWIFTPM_MODULE_BUNDLE pathForResource:@"default" ofType:@"css"]; -#else - NSBundle *bundle = [NSBundle bundleForClass:self]; - NSString *path = [[NSBundle bundleForClass:self] pathForResource:@"default" ofType:@"css"]; - - // Cocoapods uses a separate Resources bundle to include default.css - if (!path) - { - NSString *resourcesBundlePath = [bundle pathForResource:@"Resources" ofType:@"bundle"]; - NSBundle *resourcesBundle = [NSBundle bundleWithPath:resourcesBundlePath]; - path = [resourcesBundle pathForResource:@"default" ofType:@"css"]; - } -#endif - - NSAssert(path != nil, @"Missing default.css"); - - NSString *cssString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; - - defaultDTCSSStylesheet = [[DTCSSStylesheet alloc] initWithStyleBlock:cssString]; - } - } - return defaultDTCSSStylesheet; -} - -- (id)initWithStyleBlock:(NSString *)css -{ - self = [super init]; - - if (self) - { - _styles = [[NSMutableDictionary alloc] init]; - _orderedSelectorWeights = [[NSMutableDictionary alloc] init]; - _orderedSelectors = [[NSMutableArray alloc] init]; - - [self parseStyleBlock:css]; - } - - return self; -} - -- (id)initWithStylesheet:(DTCSSStylesheet *)stylesheet -{ - self = [super init]; - - if (self) - { - _styles = [[NSMutableDictionary alloc] init]; - _orderedSelectorWeights = [[NSMutableDictionary alloc] init]; - _orderedSelectors = [[NSMutableArray alloc] init]; - - [self mergeStylesheet:stylesheet]; - } - - return self; -} - -#ifndef COVERAGE - -- (NSString *)description -{ - return [_styles description]; - -} -#endif - -#pragma mark Working with Style Blocks - -- (void)_uncompressShorthands:(NSMutableDictionary *)styles -{ - // list-style shorthand - NSString *shortHand = [[styles objectForKey:@"list-style"] lowercaseString]; - - if (shortHand && [shortHand isKindOfClass:[NSString class]]) - { - [styles removeObjectForKey:@"list-style"]; - - if ([shortHand isEqualToString:@"inherit"]) - { - [styles setObject:@"inherit" forKey:@"list-style-type"]; - [styles setObject:@"inherit" forKey:@"list-style-position"]; - return; - } - - NSArray *components = [shortHand componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; - - BOOL typeWasSet = NO; - BOOL positionWasSet = NO; - - DTCSSListStyleType listStyleType = DTCSSListStyleTypeNone; - DTCSSListStylePosition listStylePosition = DTCSSListStylePositionInherit; - - for (NSString *oneComponent in components) - { - if ([oneComponent hasPrefix:@"url"]) - { - // list-style-image - NSScanner *scanner = [NSScanner scannerWithString:oneComponent]; - - if ([scanner scanCSSURL:NULL]) - { - [styles setObject:oneComponent forKey:@"list-style-image"]; - - continue; - } - } - - if (!typeWasSet) - { - // check if valid type - listStyleType = [DTCSSListStyle listStyleTypeFromString:oneComponent]; - - if (listStyleType != DTCSSListStyleTypeInvalid) - { - [styles setObject:oneComponent forKey:@"list-style-type"]; - - typeWasSet = YES; - continue; - } - } - - if (!positionWasSet) - { - // check if valid position - listStylePosition = [DTCSSListStyle listStylePositionFromString:oneComponent]; - - if (listStylePosition != DTCSSListStylePositionInvalid) - { - [styles setObject:oneComponent forKey:@"list-style-position"]; - - positionWasSet = YES; - continue; - } - } - } - } - - // font shorthand, see http://www.w3.org/TR/CSS21/fonts.html#font-shorthand - shortHand = [styles objectForKey:@"font"]; - - if (shortHand && [shortHand isKindOfClass:[NSString class]]) - { - NSString *fontStyle = @"normal"; - NSArray *validFontStyles = [NSArray arrayWithObjects:@"italic", @"oblique", nil]; - - NSString *fontVariant = @"normal"; - NSArray *validFontVariants = [NSArray arrayWithObjects:@"small-caps", nil]; - BOOL fontVariantSet = NO; - - NSString *fontWeight = @"normal"; - NSArray *validFontWeights = [NSArray arrayWithObjects:@"bold", @"bolder", @"lighter", @"100", @"200", @"300", @"400", @"500", @"600", @"700", @"800", @"900", nil]; - BOOL fontWeightSet = NO; - - NSString *fontSize = @"normal"; - NSArray *validFontSizes = [NSArray arrayWithObjects:@"xx-small", @"x-small", @"small", @"medium", @"large", @"x-large", @"xx-large", @"larger", @"smaller", nil]; - BOOL fontSizeSet = NO; - - NSArray *suffixesToIgnore = [NSArray arrayWithObjects:@"caption", @"icon", @"menu", @"message-box", @"small-caption", @"status-bar", @"inherit", nil]; - - NSString *lineHeight = @"normal"; - - NSMutableString *fontFamily = [NSMutableString string]; - - NSArray *components = [shortHand componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; - - for (NSString *oneComponent in components) - { - // try font size keywords - if ([validFontSizes containsObject:oneComponent]) - { - fontSize = oneComponent; - fontSizeSet = YES; - - continue; - } - - NSInteger slashIndex = [oneComponent rangeOfString:@"/"].location; - - if (slashIndex != NSNotFound) - { - // font-size / line-height - - fontSize = [oneComponent substringToIndex:slashIndex]; - fontSizeSet = YES; - - lineHeight = [oneComponent substringFromIndex:slashIndex+1]; - - continue; - } - else - { - // length - if ([oneComponent hasSuffix:@"%"] || [oneComponent hasSuffix:@"em"] || [oneComponent hasSuffix:@"px"] || [oneComponent hasSuffix:@"pt"]) - { - fontSize = oneComponent; - fontSizeSet = YES; - - continue; - } - } - - if (fontSizeSet) - { - if ([suffixesToIgnore containsObject:oneComponent]) - { - break; - } - - // assume that this is part of font family - if ([fontFamily length]) - { - [fontFamily appendString:@" "]; - } - - [fontFamily appendString:oneComponent]; - } - else - { - if (!fontWeightSet && [validFontStyles containsObject:oneComponent]) - { - fontStyle = oneComponent; - } - else if (!fontVariantSet && [validFontVariants containsObject:oneComponent]) - { - fontVariant = oneComponent; - fontVariantSet = YES; - } - else if (!fontWeightSet && [validFontWeights containsObject:oneComponent]) - { - fontWeight = oneComponent; - fontWeightSet = YES; - } - } - } - - [styles removeObjectForKey:@"font"]; - - // size and family are mandatory, without them this is invalid - if ([fontSize length] && [fontFamily length]) - { - [styles setObject:fontStyle forKey:@"font-style"]; - [styles setObject:fontWeight forKey:@"font-weight"]; - [styles setObject:fontVariant forKey:@"font-variant"]; - [styles setObject:fontSize forKey:@"font-size"]; - [styles setObject:lineHeight forKey:@"line-height"]; - [styles setObject:fontFamily forKey:@"font-family"]; - } - } - - shortHand = [styles objectForKey:@"margin"]; - - if (shortHand && [shortHand isKindOfClass:[NSString class]]) - { - NSArray *parts = [shortHand componentsSeparatedByString:@" "]; - - NSString *topMargin; - NSString *rightMargin; - NSString *bottomMargin; - NSString *leftMargin; - - if ([parts count] == 4) - { - topMargin = [parts objectAtIndex:0]; - rightMargin = [parts objectAtIndex:1]; - bottomMargin = [parts objectAtIndex:2]; - leftMargin = [parts objectAtIndex:3]; - } - else if ([parts count] == 3) - { - topMargin = [parts objectAtIndex:0]; - rightMargin = [parts objectAtIndex:1]; - bottomMargin = [parts objectAtIndex:2]; - leftMargin = [parts objectAtIndex:1]; - } - else if ([parts count] == 2) - { - topMargin = [parts objectAtIndex:0]; - rightMargin = [parts objectAtIndex:1]; - bottomMargin = [parts objectAtIndex:0]; - leftMargin = [parts objectAtIndex:1]; - } - else - { - NSString *onlyValue = [parts objectAtIndex:0]; - - topMargin = onlyValue; - rightMargin = onlyValue; - bottomMargin = onlyValue; - leftMargin = onlyValue; - } - - // only apply the ones where there is no previous direct setting - - if (![styles objectForKey:@"margin-top"]) - { - [styles setObject:topMargin forKey:@"margin-top"]; - } - - if (![styles objectForKey:@"margin-right"]) - { - [styles setObject:rightMargin forKey:@"margin-right"]; - } - - if (![styles objectForKey:@"margin-bottom"]) - { - [styles setObject:bottomMargin forKey:@"margin-bottom"]; - } - - if (![styles objectForKey:@"margin-left"]) - { - [styles setObject:leftMargin forKey:@"margin-left"]; - } - - // remove the shorthand - [styles removeObjectForKey:@"margin"]; - } - - shortHand = [styles objectForKey:@"padding"]; - - if (shortHand && [shortHand isKindOfClass:[NSString class]]) - { - NSArray *parts = [shortHand componentsSeparatedByString:@" "]; - - NSString *topPadding; - NSString *rightPadding; - NSString *bottomPadding; - NSString *leftPadding; - - if ([parts count] == 4) - { - topPadding = [parts objectAtIndex:0]; - rightPadding = [parts objectAtIndex:1]; - bottomPadding = [parts objectAtIndex:2]; - leftPadding = [parts objectAtIndex:3]; - } - else if ([parts count] == 3) - { - topPadding = [parts objectAtIndex:0]; - rightPadding = [parts objectAtIndex:1]; - bottomPadding = [parts objectAtIndex:2]; - leftPadding = [parts objectAtIndex:1]; - } - else if ([parts count] == 2) - { - topPadding = [parts objectAtIndex:0]; - rightPadding = [parts objectAtIndex:1]; - bottomPadding = [parts objectAtIndex:0]; - leftPadding = [parts objectAtIndex:1]; - } - else - { - NSString *onlyValue = [parts objectAtIndex:0]; - - topPadding = onlyValue; - rightPadding = onlyValue; - bottomPadding = onlyValue; - leftPadding = onlyValue; - } - - // only apply the ones where there is no previous direct setting - - if (![styles objectForKey:@"padding-top"]) - { - [styles setObject:topPadding forKey:@"padding-top"]; - } - - if (![styles objectForKey:@"padding-right"]) - { - [styles setObject:rightPadding forKey:@"padding-right"]; - } - - if (![styles objectForKey:@"padding-bottom"]) - { - [styles setObject:bottomPadding forKey:@"padding-bottom"]; - } - - if (![styles objectForKey:@"padding-left"]) - { - [styles setObject:leftPadding forKey:@"padding-left"]; - } - - // remove the shorthand - [styles removeObjectForKey:@"padding"]; - } - - shortHand = [styles objectForKey:@"background"]; - - if (shortHand && [shortHand isKindOfClass:[NSString class]]) - { - // ignore most tokens except background-color - - [styles removeObjectForKey:@"background"]; - - NSCharacterSet *tokenDelimiters = [NSCharacterSet whitespaceAndNewlineCharacterSet]; - NSString *trimmedString = [shortHand stringByTrimmingCharactersInSet:tokenDelimiters]; - NSScanner *scanner = [NSScanner scannerWithString:trimmedString]; - - while (![scanner isAtEnd]) - { - NSString *colorName; - if ([scanner scanHTMLColor:NULL HTMLName:&colorName]) - { - [styles setObject:colorName forKey:@"background-color"]; - break; - } - [scanner scanUpToCharactersFromSet:tokenDelimiters intoString:NULL]; - } - } -} - -- (void)_addStyleRule:(NSString *)rule withSelector:(NSString*)selectors -{ - NSArray *split = [selectors componentsSeparatedByString:@","]; - - for (NSString *selector in split) - { - NSString *cleanSelector = [selector stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - - NSMutableDictionary *ruleDictionary = [[rule dictionaryOfCSSStyles] mutableCopy]; - - // remove !important, we're ignoring these - for (NSString *oneKey in [ruleDictionary allKeys]) - { - id value = [ruleDictionary objectForKey:oneKey]; - if ([value isKindOfClass:[NSString class]]) - { - NSRange rangeOfImportant = [value rangeOfString:@"!important" options:NSCaseInsensitiveSearch]; - - if (rangeOfImportant.location != NSNotFound) - { - value = [value stringByReplacingCharactersInRange:rangeOfImportant withString:@""]; - value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - - [ruleDictionary setObject:value forKey:oneKey]; - } - - } else if ([value isKindOfClass:[NSArray class]]) - { - NSMutableArray *newVal; - - for (NSUInteger i = 0; i < [(NSArray*)value count]; ++i) - { - NSString *s = [value objectAtIndex:i]; - - NSRange rangeOfImportant = [s rangeOfString:@"!important" options:NSCaseInsensitiveSearch]; - - if (rangeOfImportant.location != NSNotFound) - { - s = [s stringByReplacingCharactersInRange:rangeOfImportant withString:@""]; - s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - - if (!newVal) - { - if ([value isKindOfClass:[NSMutableArray class]]) - { - newVal = value; - } else - { - newVal = [value mutableCopy]; - } - } - - // replace the value that had !important with a version without it - [newVal replaceObjectAtIndex:i withObject:s]; - } - } - - if (newVal) - { - [ruleDictionary setObject:newVal forKey:oneKey]; - } - } - } - - // need to uncompress because otherwise we might get shorthands and non-shorthands together - [self _uncompressShorthands:ruleDictionary]; - - // check if there is a pseudo selector - NSRange colonRange = [cleanSelector rangeOfString:@":"]; - NSString *pseudoSelector = nil; - - if (colonRange.length==1) - { - pseudoSelector = [cleanSelector substringFromIndex:colonRange.location+1]; - cleanSelector = [cleanSelector substringToIndex:colonRange.location]; - - // prefix all rules with the pseudo-selector - for (NSString *oneRuleKey in [ruleDictionary allKeys]) - { - id value = [ruleDictionary objectForKey:oneRuleKey]; - - // prefix key with the pseudo selector - NSString *prefixedKey = [NSString stringWithFormat:@"%@:%@", pseudoSelector, oneRuleKey]; - [ruleDictionary setObject:value forKey:prefixedKey]; - [ruleDictionary removeObjectForKey:oneRuleKey]; - } - } - - NSDictionary *existingRulesForSelector = [_styles objectForKey:cleanSelector]; - - if (existingRulesForSelector) - { - // substitute new rules over old ones - NSMutableDictionary *tmpDict = [existingRulesForSelector mutableCopy]; - - // append new rules - [tmpDict addEntriesFromDictionary:ruleDictionary]; - - // save it - [self _addStyles:tmpDict withSelector:cleanSelector]; - } - else - { - [self _addStyles:ruleDictionary withSelector:cleanSelector]; - } - } -} - - -- (void)parseStyleBlock:(NSString*)css -{ - NSUInteger braceMarker = 0; - - NSInteger braceLevel = 0; - - NSString* selector; - - NSUInteger length = [css length]; - - for (NSUInteger i = 0; i < length; i++) - { - unichar c = [css characterAtIndex:i]; - - if (c == '/') - { - i++; - - if (i < length) - { - c = [css characterAtIndex:i]; - - if (c == '*') - { - // skip comment until closing / - - for (; i < length; i++) - { - if ([css characterAtIndex:i] == '/') - { - break; - } - } - - if (i < length) - { - braceMarker = i+1; - continue; - } - else - { - // end of string - return; - } - } - else - { - // not a comment - i--; - } - } - } - - // An opening brace! It could be the start of a new rule, or it could be a nested brace. - if (c == '{') - { - // If we start a new rule... - - if (braceLevel == 0) - { - // Grab the selector and clean up extraneous spaces (we'll process it in a moment) - selector = [css substringWithRange:NSMakeRange(braceMarker, i-braceMarker)]; - NSArray *selectorParts = [selector componentsSeparatedByString:@" "]; - NSMutableArray *cleanSelectorParts = [NSMutableArray array]; - for (NSString *partialSelector in selectorParts) - { - if (partialSelector.length) - { - [cleanSelectorParts addObject:partialSelector]; - } - } - selector = [cleanSelectorParts componentsJoinedByString:@" "]; - - // And mark our position so we can grab the rule's CSS when it is closed - braceMarker = i + 1; - } - - // Increase the brace level. - braceLevel += 1; - } - - // A closing brace! - else if (c == '}') - { - // If we finished a rule... - if (braceLevel == 1) - { - NSString *rule = [css substringWithRange:NSMakeRange(braceMarker, i-braceMarker)]; - - [self _addStyleRule:rule withSelector: selector]; - - braceMarker = i + 1; - } - // Skip unpaired closing brace - else if (braceLevel < 1) { - braceMarker += 1; - } - - braceLevel = MAX(braceLevel-1, 0); - } - } -} - - -- (void)mergeStylesheet:(DTCSSStylesheet *)stylesheet -{ - NSArray *otherStylesheetStyleKeys = stylesheet.orderedSelectors; - - for (NSString *oneKey in otherStylesheetStyleKeys) - { - NSDictionary *existingStyles = [_styles objectForKey:oneKey]; - NSDictionary *stylesToMerge = [[stylesheet styles] objectForKey:oneKey]; - if (existingStyles) - { - NSMutableDictionary *mutableStyles = [existingStyles mutableCopy]; - - for (NSString *oneStyleKey in stylesToMerge) - { - NSString *mergingStyleString = [stylesToMerge objectForKey:oneStyleKey]; - - [mutableStyles setObject:mergingStyleString forKey:oneStyleKey]; - } - - [self _addStyles:mutableStyles withSelector:oneKey]; - } - else - { - // nothing to worry - [self _addStyles:stylesToMerge withSelector:oneKey]; - } - } -} - -- (void)_addStyles:(NSDictionary *)styles withSelector:(NSString *)selector { - [_styles setObject:styles forKey:selector]; - - if (![_orderedSelectors containsObject:selector]) - { - [_orderedSelectors addObject:selector]; - [_orderedSelectorWeights setObject:@([self _weightForSelector:selector]) forKey:selector]; - } -} - -#pragma mark Accessing Style Information - -- (NSDictionary *)mergedStyleDictionaryForElement:(DTHTMLElement *)element matchedSelectors:(NSSet * __autoreleasing*)matchedSelectors ignoreInlineStyle:(BOOL)ignoreInlineStyle -{ - // We are going to combine all the relevant styles for this tag. - // (Note that when styles are applied, the later styles take precedence, - // so the order in which we grab them matters!) - - NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary]; - - // Get based on element - NSDictionary *byTagName = [self.styles objectForKey:element.name]; - - if (byTagName) - { - [tmpDict addEntriesFromDictionary:byTagName]; - } - - // Get based on class(es) - NSString *classString = [element.attributes objectForKey:@"class"]; - NSArray *classes = [classString componentsSeparatedByString:@" "]; - - // Cascaded selectors with more than one part are sorted by specificity - NSMutableArray *matchingCascadingSelectors = [self matchingComplexCascadingSelectorsForElement:element]; - [matchingCascadingSelectors sortUsingComparator:^NSComparisonResult(NSString *selector1, NSString *selector2) - { - NSInteger weightForSelector1 = [[self->_orderedSelectorWeights objectForKey:selector1] integerValue]; - NSInteger weightForSelector2 = [[self->_orderedSelectorWeights objectForKey:selector2] integerValue]; - - if (weightForSelector1 == weightForSelector2) - { - weightForSelector1 += [self->_orderedSelectors indexOfObject:selector1]; - weightForSelector2 += [self->_orderedSelectors indexOfObject:selector2]; - } - - if (weightForSelector1 > weightForSelector2) - { - return (NSComparisonResult)NSOrderedDescending; - } - - if (weightForSelector1 < weightForSelector2) - { - return (NSComparisonResult)NSOrderedAscending; - } - - return (NSComparisonResult)NSOrderedSame; - }]; - - NSMutableSet *tmpMatchedSelectors; - - if (matchedSelectors) - { - tmpMatchedSelectors = [NSMutableSet set]; - } - - // Apply complex cascading selectors first, then apply most specific selectors - for (NSString *cascadingSelector in matchingCascadingSelectors) - { - NSDictionary *byCascadingSelector = [_styles objectForKey:cascadingSelector]; - [tmpDict addEntriesFromDictionary:byCascadingSelector]; - [tmpMatchedSelectors addObject:cascadingSelector]; - } - - // Applied the parameter element's classes last - for (NSString *class in classes) - { - NSString *classRule = [NSString stringWithFormat:@".%@", class]; - NSDictionary *byClass = [_styles objectForKey: classRule]; - - if (byClass) - { - [tmpDict addEntriesFromDictionary:byClass]; - [tmpMatchedSelectors addObject:class]; - } - - NSString *classAndTagRule = [NSString stringWithFormat:@"%@.%@", element.name, class]; - NSDictionary *byClassAndName = [_styles objectForKey:classAndTagRule]; - - if (byClassAndName) - { - [tmpDict addEntriesFromDictionary:byClassAndName]; - [tmpMatchedSelectors addObject:classAndTagRule]; - } - } - - // Get based on id - NSString *idRule = [NSString stringWithFormat:@"#%@", [element.attributes objectForKey:@"id"]]; - NSDictionary *byID = [_styles objectForKey:idRule]; - - if (byID) - { - [tmpDict addEntriesFromDictionary:byID]; - [tmpMatchedSelectors addObject:idRule]; - } - - if (!ignoreInlineStyle) - { - // Get tag's local style attribute - NSString *styleString = [element.attributes objectForKey:@"style"]; - - if ([styleString length]) - { - NSMutableDictionary *localStyles = [[styleString dictionaryOfCSSStyles] mutableCopy]; - - // need to uncompress because otherwise we might get shorthands and non-shorthands together - [self _uncompressShorthands:localStyles]; - - [tmpDict addEntriesFromDictionary:localStyles]; - } - } - - if ([tmpDict count]) - { - if (matchedSelectors && [tmpMatchedSelectors count]) - { - *matchedSelectors = [tmpMatchedSelectors copy]; - } - - return tmpDict; - } - else - { - return nil; - } -} - -- (NSDictionary *)styles -{ - return _styles; -} - -- (NSArray *)orderedSelectors -{ - return _orderedSelectors; -} - -// This looks for cascaded selectors with more than one part to them -- (NSMutableArray *)matchingComplexCascadingSelectorsForElement:(DTHTMLElement *)element -{ - __block NSMutableArray *matchedSelectors = [NSMutableArray array]; - - for (NSString *selector in _orderedSelectors) - { - // We only process the selector if our selector has more than 1 part to it (e.g. ".foo" would be skipped and ".foo .bar" would not) - if (![selector rangeOfString:@" "].length) { - continue; - } - - NSArray *selectorParts = [selector componentsSeparatedByString:@" "]; - - if (selectorParts.count < 2) - { - continue; - } - - DTHTMLElement *nextElement = element; - - // Walking up the hierarchy so start at the right side of the selector and work to the left - // Aside: Manual for loop here is faster than for in with reverseObjectEnumerator - for (NSUInteger j = selectorParts.count; j-- > 0;) - { - NSString *selectorPart = [selectorParts objectAtIndex:j]; - BOOL matched = NO; - - if (selectorPart.length) - { - while (nextElement != nil) - { - DTHTMLElement *currentElement = nextElement; - - //This must be set to advance here, above all of the breaks, so the loop properly advances. - nextElement = currentElement.parentElement; - - if ([selectorPart characterAtIndex:0] == '#') - { - // If we're at an id and it doesn't match the current element then the style doesn't apply - NSString *currentElementId = [currentElement.attributes objectForKey:@"id"]; - if (currentElementId && [[selectorPart substringFromIndex:1] isEqualToString:currentElementId]) - { - matched = YES; - break; - } - } else if ([selectorPart characterAtIndex:0] == '.') - { - NSString *currentElementClassesString = [currentElement.attributes objectForKey:@"class"]; - NSArray *currentElementClasses = [currentElementClassesString componentsSeparatedByString:@" "]; - for (NSString *currentElementClass in currentElementClasses) - { - if ([currentElementClass isEqualToString:[selectorPart substringFromIndex:1]]) - { - matched = YES; - break; - } - } - - if (matched) - { - break; - } - } else if ([selectorPart isEqualToString:currentElement.name] && (selectorParts.count > 1)) - { - // This condition depends on the "if (selectorParts.count < 2)" conditional above. If that's removed, we must make sure selectorParts - // contains > 1 item for this to be matched (we want the element name alone to be matched last). - matched = YES; - break; - } - - // break if the right most portion of the selector doesn't match the target element - if (!matched && ([currentElement isEqual:element])) { - break; - } - } - } - - if (!matched) - { - break; - } - - //Only match if we really are on the last part of the selector and all other parts have matched so far - if (j == 0) - { - if (matched && ![matchedSelectors containsObject:selector]) - { - [matchedSelectors addObject:selector]; - } - } - } - } - - return matchedSelectors; -} - -// This computes the specificity for a given selector -- (NSUInteger)_weightForSelector:(NSString *)selector { - if ((selector == nil) || (selector.length == 0)) - { - return 0; - } - - NSUInteger weight = 0; - - NSArray *selectorParts = [selector componentsSeparatedByString:@" "]; - for (NSString *selectorPart in selectorParts) - { - if (selectorPart.length == 0) { - continue; - } - - if ([selectorPart characterAtIndex:0] == '#') - { - weight += 100; - } else if ([selectorPart characterAtIndex:0] == '.') - { - weight += 10; - } else { - weight += 1; - } - } - - return weight; -} - -#pragma mark NSCopying - -- (id)copyWithZone:(NSZone *)zone -{ - DTCSSStylesheet *newStylesheet = [[DTCSSStylesheet allocWithZone:zone] initWithStylesheet:self]; - - return newStylesheet; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTColor+Compatibility.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTColor+Compatibility.h deleted file mode 100755 index 6fae0b6..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTColor+Compatibility.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// DTColor+Compatibility.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/9/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE - -#import - -/** - Implementations of methods on NSColor/UIColor which are missing on the other platform. - */ -@interface UIColor (HTML) - - -/** - A quick method to return the alpha component of this UIColor by using the CGColorGetAlpha method. - @returns The floating point alpha value of this UIColor. - */ -- (CGFloat)alphaComponent; - -@end - -#endif - -#if TARGET_OS_OSX -#import - -/** - Methods used to work with HTML representations of colors. - */ -@interface NSColor (HTML) - - -/** - Return a string hexadecimal representation of this NSColor. Splits the color into components with CGColor methods, re-maps them from percentages in the range 0-255, and returns the RGB color (alpha is stripped) in a six character string. - @returns A CSS hexadecimal NSString specifying this NSColor. - */ -//- (NSString *)htmlHexString; - -#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_7 -/** - Converts a CGColorRef into an NSColor by placing each component into an NSColor and pending on the component count to return a grayscale or rgb color. If there are not 2 (grayscale) or 4 (rgba) components the color is from an unsupported color space and nil is returned. - @param cgColor The CGColorRef to convert - @returns An NSColor of this CGColorRef - */ -+ (NSColor *)colorWithCGColor:(CGColorRef)cgColor; - -/** - Converts an NSColor into a CGColorRef. - @returns A CGColorRef of this NSColor -*/ -- (CGColorRef)CGColor DT_RETURNS_INNER_POINTER; -#endif - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTColor+Compatibility.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTColor+Compatibility.m deleted file mode 100644 index 9962d4e..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTColor+Compatibility.m +++ /dev/null @@ -1,122 +0,0 @@ -// -// DTColor+Compatibility.m -// DTCoreText -// -// Created by Oliver Drobnik on 1/9/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTColor+Compatibility.h" - -#if TARGET_OS_IPHONE - -#import "DTColorFunctions.h" - -@implementation UIColor (HTML) - -- (CGFloat)alphaComponent -{ - return CGColorGetAlpha(self.CGColor); -} - -@end - -#else - -#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_7 || MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_7 -#import "DTCoreTextMacros.h" -#import - -static void* DTCoreTextCGColorKey = &DTCoreTextCGColorKey; -#endif // MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_7 || MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_7 - - -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_7 -@interface NSColor (DTCoreText) -+ (NSColor *)DTCoreText_colorWithCGColor:(CGColorRef)cgColor; -- (CGColorRef)DTCoreText_CGColor DT_RETURNS_INNER_POINTER; -@end - -static void DTCoreTextAddMissingSelector(Class aClass, SEL aSelector, SEL implementationSelector) -{ - Method method = class_getInstanceMethod(aClass, aSelector); - if (method == NULL) { - method = class_getInstanceMethod(aClass, implementationSelector); - NSCAssert(method != NULL, @"missing implementation method"); - - IMP methodImplementation = method_getImplementation(method); - const char *methodTypeEncoding = method_getTypeEncoding(method); - -#if !defined(NS_BLOCK_ASSERTIONS) - BOOL rc = class_addMethod(aClass, aSelector, methodImplementation, methodTypeEncoding); - NSCAssert(rc, @"failed to add missing method"); -#else - (void) class_addMethod(aClass, aSelector, methodImplementation, methodTypeEncoding); -#endif - } -} - -__attribute__((constructor)) -static void DTCoreTextNSColorInitialization(void) -{ - Class NSColorClass = objc_getClass("NSColor"); - Class NSColorMetaClass = object_getClass(NSColorClass); - DTCoreTextAddMissingSelector(NSColorMetaClass, @selector(colorWithCGColor:), @selector(DTCoreText_colorWithCGColor:)); - DTCoreTextAddMissingSelector(NSColorClass, @selector(CGColor), @selector(DTCoreText_CGColor)); -} - -#define colorWithCGColor DTCoreText_colorWithCGColor -#define CGColor DTCoreText_CGColor -#define HTML DTCoreText -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_7 - -@implementation NSColor (HTML) - -#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_7 || MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_7 -+ (NSColor *)colorWithCGColor:(CGColorRef)cgColor -{ - size_t count = CGColorGetNumberOfComponents(cgColor); - const CGFloat *components = CGColorGetComponents(cgColor); - - // Grayscale - if (count == 2) - { - return [NSColor colorWithDeviceWhite:components[0] alpha:components[1]]; - } - - // RGB - else if (count == 4) - { - return [NSColor colorWithDeviceRed:components[0] green:components[1] blue:components[2] alpha:components[3]]; - } - - // neither grayscale nor rgba - return nil; -} - -// From https://gist.github.com/1593255 -- (CGColorRef)CGColor -{ - CGColorRef color = (__bridge CGColorRef)objc_getAssociatedObject(self, DTCoreTextCGColorKey); - if (color == NULL) - { - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - - NSColor *selfCopy = [self colorUsingColorSpaceName:NSDeviceRGBColorSpace]; - - CGFloat colorValues[4]; - [selfCopy getRed:&colorValues[0] green:&colorValues[1] blue:&colorValues[2] alpha:&colorValues[3]]; - - color = CGColorCreate(colorSpace, colorValues); - CGColorSpaceRelease(colorSpace); - - objc_setAssociatedObject(self, DTCoreTextCGColorKey, CFBridgingRelease(color), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - - return color; -} -#endif // MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_7 || MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_7 - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTColorFunctions.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTColorFunctions.h deleted file mode 100644 index c125e03..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTColorFunctions.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// DTColorFunctions.h -// DTCoreText -// -// Created by Oliver Drobnik on 9/9/13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -/** - Takes a CSS color string ('333', 'F9FFF9'), determines the RGB values used, and returns a UIColor object of that color. - For each part of the RGB color those numbers for that color are converted to a number using a category on NSString. Then that number is divided by the maximum value, 15 for 3 character strings and 255 for 6 character strings, making the color a percentage and within the range 0.0 and 1.0 that UIColor uses. - @param hexString A CSS hexadecimal color string of length 6 or 3. - @returns A UIColor object generated from the hexadecimal color string with alpha 1.0. - */ -DTColor *DTColorCreateWithHexString(NSString *hexString); - - -/** - Takes an English string representing a color and maps it to a numeric RGB value as declared by the HTML and CSS specifications (see http://www.w3schools.com/html/html_colornames.asp). Also accepts CSS `#` hexadecimal colors, `rgba`, and `rgb` and does the right thing returning a corresponding UIColor. - If a color begins with a `#` we know that it is a hexadecimal color and send it to colorWithHexString:. If the string is an `rgba()` color declaration the comma delimited r, g, b, and a values are made into percentages and then made into a UIColor which is returned. If the string is an `rgb()` color declaration the same process happens except with an alpha of 1.0. - The last case is that the color string is not a numeric declaration `#`, nor a `rgba` or `rgb` declaration so the CSS color value matching the English string is found in a lookup dictionary and then passed to colorWithHexString: which will make a UIColor out of the hexadecimal string. - @param name The CSS color string that we want to map from a name into an RGB color. - @returns A UIColor object representing the name parameter as numeric values declared by the HTML and CSS specifications, a `rgba()` color, or a `rgb()` color. - */ -DTColor *DTColorCreateWithHTMLName(NSString *name); - - -/** - Return a string hexadecimal representation of this UIColor. Splits the color into components with CGColor methods, re-maps them from percentages to the range 0-255, and depending on the number of components returns a grayscale (repeating string of two characters) or color RGB (alpha is stripped) six character string. In the event of a non-2 or non-4 component color nil is returned as it is from an unsupported color space. - @returns A CSS hexadecimal NSString specifying this UIColor. - */ -NSString *DTHexStringFromDTColor(DTColor *color); diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTColorFunctions.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTColorFunctions.m deleted file mode 100644 index c5eb951..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTColorFunctions.m +++ /dev/null @@ -1,305 +0,0 @@ -// -// DTColorFunctions.m -// DTCoreText -// -// Created by Oliver Drobnik on 9/9/13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" -#import "DTColorFunctions.h" - - -static NSDictionary *colorLookup = nil; - -#pragma mark - Private Functions - -NSUInteger _integerValueFromHexString(NSString *hexString); - -#pragma mark - Implementations - -NSUInteger _integerValueFromHexString(NSString *hexString) -{ - int result = 0; - sscanf([hexString UTF8String], "%x", &result); - return result; -} - -//- (BOOL)isNumeric -//{ -// const char *s = [self UTF8String]; -// -// for (size_t i=0;i'9') && (s[i] != '.')) -// { -// return NO; -// } -// } -// -// return YES; -//} - - -DTColor *DTColorCreateWithHexString(NSString *hexString) -{ - if ([hexString length]!=6 && [hexString length]!=3) - { - return nil; - } - - NSUInteger digits = [hexString length]/3; - CGFloat maxValue = (digits==1)?15.0:255.0; - - NSUInteger redValue = _integerValueFromHexString([hexString substringWithRange:NSMakeRange(0, digits)]); - NSUInteger greenValue = _integerValueFromHexString([hexString substringWithRange:NSMakeRange(digits, digits)]); - NSUInteger blueValue = _integerValueFromHexString([hexString substringWithRange:NSMakeRange(2*digits, digits)]); - - CGFloat red = redValue/maxValue; - CGFloat green = greenValue/maxValue; - CGFloat blue = blueValue/maxValue; - -#if TARGET_OS_IPHONE - return [DTColor colorWithRed:red green:green blue:blue alpha:1.0]; -#else - return (DTColor *)[NSColor colorWithDeviceRed:red green:green blue:blue alpha:1.0]; -#endif -} - -DTColor *DTColorCreateWithHTMLName(NSString *name) -{ - if ([name hasPrefix:@"#"]) - { - return DTColorCreateWithHexString([name substringFromIndex:1]); - } - - if ([name hasPrefix:@"rgba"]) - { - NSString *rgbaName = [name stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"rgba() "]]; - NSArray *rgba = [rgbaName componentsSeparatedByString:@","]; - - if ([rgba count] != 4) - { - // Incorrect syntax - return nil; - } - - CGFloat red = (CGFloat)[[rgba objectAtIndex:0] floatValue] / 255; - CGFloat green = [[rgba objectAtIndex:1] floatValue] / 255; - CGFloat blue = [[rgba objectAtIndex:2] floatValue] / 255; - CGFloat alpha = [[rgba objectAtIndex:3] floatValue]; - -#if TARGET_OS_IPHONE - return [DTColor colorWithRed:red green:green blue:blue alpha:alpha]; -#else - return (DTColor *)[NSColor colorWithDeviceRed:red green:green blue:blue alpha:alpha]; -#endif - } - - if([name hasPrefix:@"rgb"]) - { - NSString * rgbName = [name stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"rbg() "]]; - NSArray* rgb = [rgbName componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@","]]; - - if ([rgb count] != 3) - { - // Incorrect syntax - return nil; - } - - CGFloat red = [[rgb objectAtIndex:0] floatValue] / 255; - CGFloat green = [[rgb objectAtIndex:1] floatValue] / 255; - CGFloat blue = [[rgb objectAtIndex:2] floatValue] / 255; - CGFloat alpha = 1.0; - -#if TARGET_OS_IPHONE - return [DTColor colorWithRed:red green:green blue:blue alpha:alpha]; -#else - return (DTColor *)[NSColor colorWithDeviceRed:red green:green blue:blue alpha:alpha]; -#endif - } - - static dispatch_once_t predicate; - dispatch_once(&predicate, ^{ - colorLookup = [[NSDictionary alloc] initWithObjectsAndKeys: - @"F0F8FF", @"aliceblue", - @"FAEBD7", @"antiquewhite", - @"00FFFF", @"aqua", - @"7FFFD4", @"aquamarine", - @"F0FFFF", @"azure", - @"F5F5DC", @"beige", - @"FFE4C4", @"bisque", - @"000000", @"black", - @"FFEBCD", @"blanchedalmond", - @"0000FF", @"blue", - @"8A2BE2", @"blueviolet", - @"A52A2A", @"brown", - @"DEB887", @"burlywood", - @"5F9EA0", @"cadetblue", - @"7FFF00", @"chartreuse", - @"D2691E", @"chocolate", - @"FF7F50", @"coral", - @"6495ED", @"cornflowerblue", - @"FFF8DC", @"cornsilk", - @"DC143C", @"crimson", - @"00FFFF", @"cyan", - @"00008B", @"darkblue", - @"008B8B", @"darkcyan", - @"B8860B", @"darkgoldenrod", - @"A9A9A9", @"darkgray", - @"A9A9A9", @"darkgrey", - @"006400", @"darkgreen", - @"BDB76B", @"darkkhaki", - @"8B008B", @"darkmagenta", - @"556B2F", @"darkolivegreen", - @"FF8C00", @"darkorange", - @"9932CC", @"darkorchid", - @"8B0000", @"darkred", - @"E9967A", @"darksalmon", - @"8FBC8F", @"darkseagreen", - @"483D8B", @"darkslateblue", - @"2F4F4F", @"darkslategray", - @"2F4F4F", @"darkslategrey", - @"00CED1", @"darkturquoise", - @"9400D3", @"darkviolet", - @"FF1493", @"deeppink", - @"00BFFF", @"deepskyblue", - @"696969", @"dimgray", - @"696969", @"dimgrey", - @"1E90FF", @"dodgerblue", - @"B22222", @"firebrick", - @"FFFAF0", @"floralwhite", - @"228B22", @"forestgreen", - @"FF00FF", @"fuchsia", - @"DCDCDC", @"gainsboro", - @"F8F8FF", @"ghostwhite", - @"FFD700", @"gold", - @"DAA520", @"goldenrod", - @"808080", @"gray", - @"808080", @"grey", - @"008000", @"green", - @"ADFF2F", @"greenyellow", - @"F0FFF0", @"honeydew", - @"FF69B4", @"hotpink", - @"CD5C5C", @"indianred", - @"4B0082", @"indigo", - @"FFFFF0", @"ivory", - @"F0E68C", @"khaki", - @"E6E6FA", @"lavender", - @"FFF0F5", @"lavenderblush", - @"7CFC00", @"lawngreen", - @"FFFACD", @"lemonchiffon", - @"ADD8E6", @"lightblue", - @"F08080", @"lightcoral", - @"E0FFFF", @"lightcyan", - @"FAFAD2", @"lightgoldenrodyellow", - @"D3D3D3", @"lightgray", - @"D3D3D3", @"lightgrey", - @"90EE90", @"lightgreen", - @"FFB6C1", @"lightpink", - @"FFA07A", @"lightsalmon", - @"20B2AA", @"lightseagreen", - @"87CEFA", @"lightskyblue", - @"778899", @"lightslategray", - @"778899", @"lightslategrey", - @"B0C4DE", @"lightsteelblue", - @"FFFFE0", @"lightyellow", - @"00FF00", @"lime", - @"32CD32", @"limegreen", - @"FAF0E6", @"linen", - @"FF00FF", @"magenta", - @"800000", @"maroon", - @"66CDAA", @"mediumaquamarine", - @"0000CD", @"mediumblue", - @"BA55D3", @"mediumorchid", - @"9370D8", @"mediumpurple", - @"3CB371", @"mediumseagreen", - @"7B68EE", @"mediumslateblue", - @"00FA9A", @"mediumspringgreen", - @"48D1CC", @"mediumturquoise", - @"C71585", @"mediumvioletred", - @"191970", @"midnightblue", - @"F5FFFA", @"mintcream", - @"FFE4E1", @"mistyrose", - @"FFE4B5", @"moccasin", - @"FFDEAD", @"navajowhite", - @"000080", @"navy", - @"FDF5E6", @"oldlace", - @"808000", @"olive", - @"6B8E23", @"olivedrab", - @"FFA500", @"orange", - @"FF4500", @"orangered", - @"DA70D6", @"orchid", - @"EEE8AA", @"palegoldenrod", - @"98FB98", @"palegreen", - @"AFEEEE", @"paleturquoise", - @"D87093", @"palevioletred", - @"FFEFD5", @"papayawhip", - @"FFDAB9", @"peachpuff", - @"CD853F", @"peru", - @"FFC0CB", @"pink", - @"DDA0DD", @"plum", - @"B0E0E6", @"powderblue", - @"800080", @"purple", - @"FF0000", @"red", - @"BC8F8F", @"rosybrown", - @"4169E1", @"royalblue", - @"8B4513", @"saddlebrown", - @"FA8072", @"salmon", - @"F4A460", @"sandybrown", - @"2E8B57", @"seagreen", - @"FFF5EE", @"seashell", - @"A0522D", @"sienna", - @"C0C0C0", @"silver", - @"87CEEB", @"skyblue", - @"6A5ACD", @"slateblue", - @"708090", @"slategray", - @"708090", @"slategrey", - @"FFFAFA", @"snow", - @"00FF7F", @"springgreen", - @"4682B4", @"steelblue", - @"D2B48C", @"tan", - @"008080", @"teal", - @"D8BFD8", @"thistle", - @"FF6347", @"tomato", - @"40E0D0", @"turquoise", - @"EE82EE", @"violet", - @"F5DEB3", @"wheat", - @"FFFFFF", @"white", - @"F5F5F5", @"whitesmoke", - @"FFFF00", @"yellow", - @"9ACD32", @"yellowgreen", - nil]; - }); - - NSString *hexString = [colorLookup objectForKey:[name lowercaseString]]; - - return DTColorCreateWithHexString(hexString); -} - -NSString *DTHexStringFromDTColor(DTColor *color) -{ - CGColorRef cgColor = color.CGColor; - size_t count = CGColorGetNumberOfComponents(cgColor); - const CGFloat *components = CGColorGetComponents(cgColor); - - static NSString *stringFormat = @"%02x%02x%02x"; - - // Grayscale - if (count == 2) - { - NSUInteger white = (NSUInteger)(components[0] * (CGFloat)255); - return [NSString stringWithFormat:stringFormat, white, white, white]; - } - - // RGB - else if (count == 4) - { - return [NSString stringWithFormat:stringFormat, (NSUInteger)(components[0] * (CGFloat)255), - (NSUInteger)(components[1] * (CGFloat)255), (NSUInteger)(components[2] * (CGFloat)255)]; - } - - // Unsupported color space - return nil; -} - diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCompatibility.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCompatibility.h deleted file mode 100644 index c4c2a26..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCompatibility.h +++ /dev/null @@ -1,165 +0,0 @@ -// -// DTCompatibility.h -// DTCoreText -// -// Created by Oliver Letterer on 09.04.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// -#import -#import - -#import - -#pragma mark - iOS - -#if TARGET_OS_IPHONE - -#import - - // Compatibility Aliases - #define DTColor UIColor - #define DTImage UIImage - #define DTFont UIFont - - // Edge Insets - #define DTEdgeInsets UIEdgeInsets - #define DTEdgeInsetsMake(top, left, bottom, right) UIEdgeInsetsMake(top, left, bottom, right) - - // NS-style text attributes are possible with iOS SDK 6.0 or higher - #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_5_1 - #define DTCORETEXT_SUPPORT_NS_ATTRIBUTES 1 - #endif - - // NSParagraphStyle supports tabs as of iOS SDK 7.0 or higher - #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1 - #define DTCORETEXT_SUPPORT_NSPARAGRAPHSTYLE_TABS 1 - #endif - - // iOS before 5.0 has leak in CoreText replacing attributes - #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0 - #define DTCORETEXT_NEEDS_ATTRIBUTE_REPLACEMENT_LEAK_FIX 1 - #endif - - // iOS 7 bug (rdar://14684188) workaround, can be removed once this bug is fixed - #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1 - #define DTCORETEXT_FIX_14684188 1 - #endif - - // use NSURLSession if NSURLConnection is deprecated - #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0 - #define DTCORETEXT_USES_NSURLSESSION 1 - #endif - - // constant for checking for iOS 6 - #define DTNSFoundationVersionNumber_iOS_6_0 992.00 - - // constant for checking for iOS 7 - #define DTNSFoundationVersionNumber_iOS_7_0 1047.00 - - - // runtime-check if NS-style attributes are allowed - static inline BOOL DTCoreTextModernAttributesPossible(void); - static inline BOOL DTCoreTextModernAttributesPossible(void) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (floor(NSFoundationVersionNumber) >= DTNSFoundationVersionNumber_iOS_6_0) - { - return YES; - } -#endif - return NO; - } - - // runtime-check if CoreText draws underlines - static inline BOOL DTCoreTextDrawsUnderlinesWithGlyphs(void); - static inline BOOL DTCoreTextDrawsUnderlinesWithGlyphs(void) - { - if (floor(NSFoundationVersionNumber) >= DTNSFoundationVersionNumber_iOS_7_0) - { - return YES; - } - - return NO; - } - -#if TARGET_CPU_ARM64 || TARGET_CPU_X86_64 - #define DTNSNumberFromCGFloat(x) [NSNumber numberWithDouble:x] -#else - #define DTNSNumberFromCGFloat(x) [NSNumber numberWithFloat:x] -#endif - -#endif - - -#pragma mark - Mac - - -#if !TARGET_OS_IPHONE - - -#import - - // Compatibility Aliases - #define DTColor NSColor - #define DTImage NSImage - #define DTFont NSFont - - // Edge Insets - #define DTEdgeInsets NSEdgeInsets - #define DTEdgeInsetsMake(top, left, bottom, right) NSEdgeInsetsMake(top, left, bottom, right) - - // Mac supports NS-Style Text Attributes since 10.0 - #define DTCORETEXT_SUPPORT_NS_ATTRIBUTES 1 - #define DTCORETEXT_SUPPORT_NSPARAGRAPHSTYLE_TABS 1 - - // theoretically MacOS before 10.8 might have a leak in CoreText replacing attributes - #if __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7 - #define DTCORETEXT_NEEDS_ATTRIBUTE_REPLACEMENT_LEAK_FIX 1 - #endif - - // use NSURLSession if NSURLConnection is deprecated - #if __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_11 - #define DTCORETEXT_USES_NSURLSESSION 1 - #endif - - // NSValue has sizeValue on Mac, CGSizeValue on iOS - #define CGSizeValue sizeValue - - // String functions named differently on Mac - static inline NSString *NSStringFromCGRect(const CGRect rect); - static inline NSString *NSStringFromCGRect(const CGRect rect) - { - return NSStringFromRect(NSRectFromCGRect(rect)); - } - - static inline NSString *NSStringFromCGSize(const CGSize size); - static inline NSString *NSStringFromCGSize(const CGSize size) - { - return NSStringFromSize(NSSizeFromCGSize(size)); - } - - static inline NSString *NSStringFromCGPoint(const CGPoint point); - static inline NSString *NSStringFromCGPoint(const CGPoint point) - { - return NSStringFromPoint(NSPointFromCGPoint(point)); - } - - // runtime-check if NS-style attributes are allowed - static inline BOOL DTCoreTextModernAttributesPossible(); - static inline BOOL DTCoreTextModernAttributesPossible() - { - return YES; - } - - // runtime-check if CoreText draws underlines - static inline BOOL DTCoreTextDrawsUnderlinesWithGlyphs(); - static inline BOOL DTCoreTextDrawsUnderlinesWithGlyphs() - { - return NO; - } - - #define DTNSNumberFromCGFloat(x) [NSNumber numberWithDouble:x] -#endif - -// this enables generic ceil, floor, abs, round functions that work for 64 and 32 bit -#include diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreText.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreText.h deleted file mode 100644 index 3d6a839..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreText.h +++ /dev/null @@ -1,96 +0,0 @@ -#import -#import - -#if TARGET_OS_IPHONE -#import -#elif TARGET_OS_MAC -#import -#endif - -// global constants -#import "DTCoreTextMacros.h" -#import "DTCoreTextConstants.h" -#import "DTCompatibility.h" - -#import "DTColor+Compatibility.h" -#import "DTImage+HTML.h" - -// common utilities -#if TARGET_OS_IPHONE -#import "DTCoreTextFunctions.h" -#endif - -#import "DTColorFunctions.h" - -// common classes -#import "DTCSSListStyle.h" -#import "DTTextBlock.h" -#import "DTCSSStylesheet.h" -#import "DTCoreTextFontDescriptor.h" -#import "DTCoreTextParagraphStyle.h" -#import "DTHTMLAttributedStringBuilder.h" -#import "DTHTMLElement.h" -#import "DTAnchorHTMLElement.h" -#import "DTBreakHTMLElement.h" -#import "DTListItemHTMLElement.h" -#import "DTHorizontalRuleHTMLElement.h" -#import "DTStylesheetHTMLElement.h" -#import "DTTextAttachmentHTMLElement.h" -#import "DTTextHTMLElement.h" -#import "DTHTMLWriter.h" -#import "NSCharacterSet+HTML.h" -#import "NSCoder+DTCompatibility.h" -#import "NSDictionary+DTCoreText.h" -#import "NSAttributedString+HTML.h" -#import "NSAttributedString+SmallCaps.h" -#import "NSAttributedString+DTCoreText.h" -#import "NSMutableAttributedString+HTML.h" -#import "NSMutableString+HTML.h" -#import "NSScanner+HTML.h" -#import "NSString+CSS.h" -#import "NSString+HTML.h" -#import "NSString+Paragraphs.h" -#import "NSNumber+RomanNumerals.h" - -// parsing classes -#import "DTHTMLParserNode.h" -#import "DTHTMLParserTextNode.h" - -// text attachment cluster -#import "DTTextAttachment.h" -#import "DTDictationPlaceholderTextAttachment.h" -#import "DTIframeTextAttachment.h" -#import "DTImageTextAttachment.h" -#import "DTObjectTextAttachment.h" -#import "DTVideoTextAttachment.h" - -#import "NSAttributedStringRunDelegates.h" - -#import "DTCoreTextGlyphRun.h" -#import "DTCoreTextLayoutFrame.h" -#import "DTCoreTextLayoutFrame+Cursor.h" -#import "DTCoreTextLayoutLine.h" -#import "DTCoreTextLayouter.h" - -// TARGET_OS_IPHONE is both tvOS and iOS -#if TARGET_OS_IPHONE - -#import "DTLazyImageView.h" -#import "DTLinkButton.h" - -#import "DTAttributedLabel.h" -#import "DTAttributedTextCell.h" -#import "DTAttributedTextContentView.h" -#import "DTAttributedTextView.h" -#import "DTCoreTextFontCollection.h" - -#import "DTDictationPlaceholderView.h" - -#import "UIFont+DTCoreText.h" - -#import "DTAccessibilityElement.h" -#import "DTAccessibilityViewProxy.h" -#import "DTCoreTextLayoutFrameAccessibilityElementGenerator.h" - -#endif - diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextConstants.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextConstants.h deleted file mode 100644 index 15f5011..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextConstants.h +++ /dev/null @@ -1,203 +0,0 @@ -#import "DTCompatibility.h" - -// unicode characters - -#define UNICODE_OBJECT_PLACEHOLDER @"\ufffc" -#define UNICODE_LINE_FEED @"\u2028" - -// unicode spaces used in CharacterSet.ignorableWhitespaceCharacterSet - -#define UNICODE_NON_BREAKING_SPACE @"\u00a0" -#define UNICODE_OGHAM_SPACE_MARK @"\u1680" -#define UNICODE_MONGOLIAN_VOWEL_SEPARATOR @"\u180e" -#define UNICODE_EN_QUAD @"\u2000" -#define UNICODE_EM_QUAD @"\u2001" -#define UNICODE_EN_SPACE @"\u2002" -#define UNICODE_EM_SPACE @"\u2003" -#define UNICODE_THREE_PER_EM_SPACE @"\u2004" -#define UNICODE_FOUR_PER_EM_SPACE @"\u2005" -#define UNICODE_SIX_PER_EM_SPACE @"\u2006" -#define UNICODE_FIGURE_SPACE @"\u2007" -#define UNICODE_PUNCTUATION_SPACE @"\u2008" -#define UNICODE_THIN_SPACE @"\u2009" -#define UNICODE_HAIR_SPACE @"\u200a" -#define UNICODE_ZERO_WIDTH_SPACE @"\u200b" -#define UNICODE_NARROW_NO_BREAK_SPACE @"\u202f" -#define UNICODE_MEDIUM_MATHEMATICAL_SPACE @"\u205f" -#define UNICODE_IDEOGRAPHIC_SPACE @"\u3000" -#define UNICODE_ZERO_WIDTH_NO_BREAK_SPACE @"\ufeff" - -// standard options - -#if TARGET_OS_IPHONE -extern NSString * const NSBaseURLDocumentOption; -extern NSString * const NSTextEncodingNameDocumentOption; -extern NSString * const NSTextSizeMultiplierDocumentOption; - -#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_7_0 -extern NSString * const NSAttachmentAttributeName; -#endif - -#endif - -// custom options - -extern NSString * const DTMaxImageSize; -extern NSString * const DTDefaultFontFamily; -extern NSString * const DTDefaultFontName; -extern NSString * const DTDefaultFontSize; -extern NSString * const DTDefaultFontDescriptor; -extern NSString * const DTDefaultTextColor; -extern NSString * const DTDefaultLinkColor; -extern NSString * const DTDefaultLinkDecoration; -extern NSString * const DTDefaultLinkHighlightColor; -extern NSString * const DTDefaultTextAlignment; -extern NSString * const DTDefaultLineHeightMultiplier; -extern NSString * const DTDefaultLineHeightMultiplier; -extern NSString * const DTDefaultFirstLineHeadIndent; -extern NSString * const DTDefaultHeadIndent; -extern NSString * const DTDefaultStyleSheet; -extern NSString * const DTUseiOS6Attributes; -extern NSString * const DTWillFlushBlockCallBack; -extern NSString * const DTProcessCustomHTMLAttributes; -extern NSString * const DTIgnoreInlineStylesOption; -extern NSString * const DTDocumentPreserveTrailingSpaces; - - -// attributed string attribute constants - -extern NSString * const DTTextListsAttribute; -extern NSString * const DTAttachmentParagraphSpacingAttribute; -extern NSString * const DTLinkAttribute; -extern NSString * const DTLinkHighlightColorAttribute; -extern NSString * const DTAnchorAttribute; -extern NSString * const DTGUIDAttribute; -extern NSString * const DTHeaderLevelAttribute; -extern NSString * const DTStrikeOutAttribute; -extern NSString * const DTBackgroundColorAttribute; -extern NSString * const DTShadowsAttribute; -extern NSString * const DTHorizontalRuleStyleAttribute; -extern NSString * const DTTextBlocksAttribute; -extern NSString * const DTFieldAttribute; -extern NSString * const DTCustomAttributesAttribute; -extern NSString * const DTAscentMultiplierAttribute; -extern NSString * const DTBackgroundStrokeColorAttribute; -extern NSString * const DTBackgroundStrokeWidthAttribute; -extern NSString * const DTBackgroundCornerRadiusAttribute; -extern NSString * const DTArchivingAttribute; - -// field constants - -extern NSString * const DTListPrefixField; - -// iOS 6 compatibility -extern BOOL ___useiOS6Attributes; - -// exceptions -extern NSString * const DTCoreTextFontDescriptorException; - -// macros - -#define IS_WHITESPACE(_c) (_c == ' ' || _c == '\t' || _c == 0xA || _c == 0xB || _c == 0xC || _c == 0xD || _c == 0x85) - -// types - -/** - DTHTMLElement display style - */ -typedef NS_ENUM(NSUInteger, DTHTMLElementDisplayStyle) -{ - /** - The element is inline text - */ - DTHTMLElementDisplayStyleInline = 0, // default - - /** - The element is not displayed - */ - DTHTMLElementDisplayStyleNone, - - /** - The element is a block - */ - DTHTMLElementDisplayStyleBlock, - - /** - The element is an item in a list - */ - DTHTMLElementDisplayStyleListItem, - - /** - The element is a table - */ - DTHTMLElementDisplayStyleTable, -}; - -/** - DTHTMLElement floating style - */ -typedef NS_ENUM(NSUInteger, DTHTMLElementFloatStyle) -{ - /** - The element does not float - */ - DTHTMLElementFloatStyleNone = 0, - - - /** - The element should float left-aligned - */ - DTHTMLElementFloatStyleLeft, - - - /** - The element should float right-aligned - */ - DTHTMLElementFloatStyleRight -}; - -/** - DTHTMLElement font variants - */ -typedef NS_ENUM(NSUInteger, DTHTMLElementFontVariant) -{ - /** - The element inherits the font variant - */ - DTHTMLElementFontVariantInherit = 0, - - /** - The element uses the normal font variant - */ - DTHTMLElementFontVariantNormal, - - /** - The element should display in small caps - */ - DTHTMLElementFontVariantSmallCaps -}; - -/** - The algorithm that DTCoreTextLayoutFrame uses for positioning lines - */ -typedef NS_ENUM(NSUInteger, DTCoreTextLayoutFrameLinePositioningOptions) -{ - /** - The line positioning algorithm is similar to how Safari positions lines - */ - DTCoreTextLayoutFrameLinePositioningOptionAlgorithmWebKit = 1, - - /** - The line positioning algorithm is how it was before the implementation of DTCoreTextLayoutFrameLinePositioningOptionAlgorithmWebKit - */ - DTCoreTextLayoutFrameLinePositioningOptionAlgorithmLegacy = 2 -}; - -// layouting - -// the value to use if the width is unknown -#define CGFLOAT_WIDTH_UNKNOWN 16777215.0f - -// the value to use if the height is unknown -#define CGFLOAT_HEIGHT_UNKNOWN 16777215.0f - diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextConstants.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextConstants.m deleted file mode 100644 index 3138cc6..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextConstants.m +++ /dev/null @@ -1,71 +0,0 @@ -#import "DTCoreTextConstants.h" - -// standard options - -#if TARGET_OS_IPHONE -NSString * const NSBaseURLDocumentOption = @"NSBaseURLDocumentOption"; -NSString * const NSTextEncodingNameDocumentOption = @"NSTextEncodingNameDocumentOption"; -NSString * const NSTextSizeMultiplierDocumentOption = @"NSTextSizeMultiplierDocumentOption"; - -#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_7_0 -NSString * const NSAttachmentAttributeName = @"NSAttachmentAttributeName"; -#endif - -#endif - -// custom options - -NSString * const DTMaxImageSize = @"DTMaxImageSize"; -NSString * const DTDefaultFontFamily = @"DTDefaultFontFamily"; -NSString * const DTDefaultFontName = @"DTDefaultFontName"; -NSString * const DTDefaultFontSize = @"DTDefaultFontSize"; -NSString * const DTDefaultFontDescriptor = @"DTDefaultFontDescriptor"; -NSString * const DTDefaultTextColor = @"DTDefaultTextColor"; -NSString * const DTDefaultLinkColor = @"DTDefaultLinkColor"; -NSString * const DTDefaultLinkHighlightColor = @"DTDefaultLinkHighlightColor"; -NSString * const DTDefaultLinkDecoration = @"DTDefaultLinkDecoration"; -NSString * const DTDefaultTextAlignment = @"DTDefaultTextAlignment"; -NSString * const DTDefaultLineHeightMultiplier = @"DTDefaultLineHeightMultiplier"; -NSString * const DTDefaultFirstLineHeadIndent = @"DTDefaultFirstLineHeadIndent"; -NSString * const DTDefaultHeadIndent = @"DTDefaultHeadIndent"; -NSString * const DTDefaultStyleSheet = @"DTDefaultStyleSheet"; -NSString * const DTUseiOS6Attributes = @"DTUseiOS6Attributes"; -NSString * const DTWillFlushBlockCallBack = @"DTWillFlushBlockCallBack"; -NSString * const DTProcessCustomHTMLAttributes = @"DTProcessCustomHTMLAttributes"; -NSString * const DTIgnoreInlineStylesOption = @"DTIgnoreInlineStyles"; -NSString * const DTDocumentPreserveTrailingSpaces = @"DTDocumentPreserveTrailingSpaces"; - -// attributed string attribute constants - -NSString * const DTTextListsAttribute = @"DTTextLists"; -NSString * const DTAttachmentParagraphSpacingAttribute = @"DTAttachmentParagraphSpacing"; -NSString * const DTLinkAttribute = @"NSLink"; -NSString * const DTLinkHighlightColorAttribute = @"DTLinkHighlightColor"; -NSString * const DTAnchorAttribute = @"DTAnchor"; -NSString * const DTGUIDAttribute = @"DTGUID"; -NSString * const DTHeaderLevelAttribute = @"DTHeaderLevel"; -NSString * const DTStrikeOutAttribute = @"DTStrikethrough"; -NSString * const DTBackgroundColorAttribute = @"DTBackgroundColor"; -NSString * const DTShadowsAttribute = @"DTShadows"; -NSString * const DTHorizontalRuleStyleAttribute = @"DTHorizontalRuleStyle"; -NSString * const DTTextBlocksAttribute = @"DTTextBlocks"; -NSString * const DTFieldAttribute = @"DTField"; -NSString * const DTCustomAttributesAttribute = @"DTCustomAttributes"; -NSString * const DTAscentMultiplierAttribute = @"DTAscentMultiplierAttribute"; -NSString * const DTBackgroundStrokeColorAttribute = @"DTBackgroundStrokeColor"; -NSString * const DTBackgroundStrokeWidthAttribute = @"DTBackgroundStrokeWidth"; -NSString * const DTBackgroundCornerRadiusAttribute = @"DTBackgroundCornerRadius"; -NSString * const DTArchivingAttribute = @"DTArchivingAttribute"; - -// field constants -NSString * const DTListPrefixField = @"{listprefix}"; - -// iOS 6 compatibility - -BOOL ___useiOS6Attributes = NO; // this gets set globally by DTHTMLAttributedStringBuilder - - -// exceptions - -NSString * const DTCoreTextFontDescriptorException = @"DTCoreTextFontDescriptorException"; - diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFontCollection.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFontCollection.h deleted file mode 100644 index 25b169e..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFontCollection.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// DTCoreTextFontCollection.h -// DTCoreText -// -// Created by Oliver Drobnik on 5/23/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import - - -@class DTCoreTextFontDescriptor; - -/** - Class representing a collection of fonts - */ - -@interface DTCoreTextFontCollection : NSObject - -/** - @name Creating Font Collections - */ - -/** - Creates a font collection with all available fonts on the system - */ -+ (DTCoreTextFontCollection *)availableFontsCollection; - -/** - @name Getting Information about Font Collections - */ - -/** - The font family names that occur in the receiver's list of fonts - */ -- (NSArray *)fontFamilyNames; - -/** - The font descriptors describing all fonts in the receiver's font collection - */ -- (NSArray *)fontDescriptors; - -/** - @name Searching for Fonts - */ - -/** - The font descriptor describing a font in the receiver's collection that matches a given descriptor - @param descriptor The font descriptor to search for - @returns The first found font descriptor in the font collection - */ -- (DTCoreTextFontDescriptor *)matchingFontDescriptorForFontDescriptor:(DTCoreTextFontDescriptor *)descriptor; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFontCollection.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFontCollection.m deleted file mode 100644 index 2c339da..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFontCollection.m +++ /dev/null @@ -1,162 +0,0 @@ -// -// DTCoreTextFontCollection.m -// DTCoreText -// -// Created by Oliver Drobnik on 5/23/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" -#import "DTCoreTextFontCollection.h" -#import "DTCoreTextFontDescriptor.h" - -#if TARGET_OS_IPHONE -#import -#elif TARGET_OS_MAC -#import -#endif - -@interface DTCoreTextFontCollection () - -@property (nonatomic, strong) NSArray *fontDescriptors; -@property (nonatomic, strong) NSCache *fontMatchCache; - -- (id)initWithAvailableFonts; - -@end - -static DTCoreTextFontCollection *_availableFontsCollection = nil; - - -@implementation DTCoreTextFontCollection -{ - NSArray *_fontDescriptors; - NSCache *_fontMatchCache; -} - -+ (DTCoreTextFontCollection *)availableFontsCollection -{ - static dispatch_once_t predicate; - - dispatch_once(&predicate, ^{ - _availableFontsCollection = [[DTCoreTextFontCollection alloc] initWithAvailableFonts]; - }); - - return _availableFontsCollection; -} - -- (id)initWithAvailableFonts -{ - self = [super init]; - - if (self) - { - - } - - return self; -} - - -- (DTCoreTextFontDescriptor *)matchingFontDescriptorForFontDescriptor:(DTCoreTextFontDescriptor *)descriptor -{ - DTCoreTextFontDescriptor *firstMatch = nil; - NSString *cacheKey = [NSString stringWithFormat:@"fontFamily BEGINSWITH[cd] %@ and boldTrait == %d and italicTrait == %d", descriptor.fontFamily, descriptor.boldTrait, descriptor.italicTrait]; - - // try cache - firstMatch = [self.fontMatchCache objectForKey:cacheKey]; - - if (firstMatch) - { - DTCoreTextFontDescriptor *retMatch = [firstMatch copy]; - retMatch.pointSize = descriptor.pointSize; - return retMatch; - } - - // need to search - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"fontFamily BEGINSWITH[cd] %@ and boldTrait == %d and italicTrait == %d", descriptor.fontFamily, descriptor.boldTrait, descriptor.italicTrait]; - - NSArray *matchingDescriptors = [self.fontDescriptors filteredArrayUsingPredicate:predicate]; - - //NSLog(@"%@", matchingDescriptors); - - if ([matchingDescriptors count]) - { - firstMatch = [matchingDescriptors objectAtIndex:0]; - [self.fontMatchCache setObject:firstMatch forKey:cacheKey]; - - DTCoreTextFontDescriptor *retMatch = [firstMatch copy]; - - retMatch.pointSize = descriptor.pointSize; - return retMatch; - } - - return nil; -} - -#pragma mark Properties - -- (NSArray *)fontDescriptors -{ - if (!_fontDescriptors) - { - CTFontCollectionRef fonts = CTFontCollectionCreateFromAvailableFonts(NULL); - - CFArrayRef matchingFonts = CTFontCollectionCreateMatchingFontDescriptors(fonts); - - if (matchingFonts) - { - // convert all to our objects - NSMutableArray *tmpArray = [[NSMutableArray alloc] init]; - - for (NSInteger i=0; i -#import - - -/** - This class describes the attributes of a font. It is used to represent fonts throughout the parsing and when needed is able to generated matching `CTFont` instances. - */ -@interface DTCoreTextFontDescriptor : NSObject - -/** - @name Creating Font Descriptors - */ - -/** - Convenience method to create a font descriptor from a font attributes dictionary - @param attributes The dictionary of font attributes - @returns An initialized font descriptor - */ -+ (DTCoreTextFontDescriptor *)fontDescriptorWithFontAttributes:(NSDictionary *)attributes; - -/** - Convenience method for creates a font descriptor from a Core Text font - @param ctFont The Core Text font - @returns An initialized font descriptor - */ -+ (DTCoreTextFontDescriptor *)fontDescriptorForCTFont:(CTFontRef)ctFont; - -/** - Creates a font descriptor from a font attributes dictionary - @param attributes The dictionary of font attributes - @returns An initialized font descriptor - */ -- (id)initWithFontAttributes:(NSDictionary *)attributes; - -/** - Creates a font descriptor from a Core Text font descriptor - @param ctFontDescriptor The Core Text font descriptor - @returns An initialized font descriptor - */ -- (id)initWithCTFontDescriptor:(CTFontDescriptorRef)ctFontDescriptor; - -/** - Creates a font descriptor from a Core Text font - @param ctFont The Core Text font - @returns An initialized font descriptor - */ -- (id)initWithCTFont:(CTFontRef)ctFont; - - -/** - @name Creating Fonts from Font Descriptors - */ - -/** - Creates a `CTFont` matching the receiver's attribute - @returns a +1 owning reference of a Core Text font - */ -- (CTFontRef)newMatchingFont; - -/** - @name Specifying Font Attributes - */ - - -/** - Sets the font attributes from a dictionary - @param newAttributes The font attributes dictionary - */ -- (void)setFontAttributes:(NSDictionary *)newAttributes; - -/** - Retrieves a dictionary of font attributes - */ -- (NSDictionary *)fontAttributes; - - -/** - The font family name of the described font - */ -@property (nonatomic, copy) NSString *fontFamily; - -/** - The font name of the described font - */ -@property (nonatomic, copy) NSString *fontName; - -/** - The point size of the described font - */ -@property (nonatomic) CGFloat pointSize; - -/** - Whether the described font has the bold trait - */ -@property (nonatomic) BOOL boldTrait; - -/** - Whether the described font has the italic trait - */ -@property (nonatomic) BOOL italicTrait; - -/** - Whether the described font has the expanded trait - */ -@property (nonatomic) BOOL expandedTrait; - -/** - Whether the described font has the condensed trait - */ -@property (nonatomic) BOOL condensedTrait; - -/** - Whether the described font has the monospace trait - */ -@property (nonatomic) BOOL monospaceTrait; - -/** - Whether the described font has the vertical trait - */ -@property (nonatomic) BOOL verticalTrait; - -/** - Whether the described font is optimized for use in User Interfaces - */ -@property (nonatomic) BOOL UIoptimizedTrait; - -/** - The symbolic traits of the receiver - */ -@property (nonatomic) CTFontSymbolicTraits symbolicTraits; - -/** - The stylistic class of the receiver - */ -@property (nonatomic) CTFontStylisticClass stylisticClass; - -/** - `YES` if the small caps style is enabled, `NO` if not - */ -@property (nonatomic) BOOL smallCapsFeature; - -/** - Determining if the font described by the receiver has native small caps support - @returns `YES` if this font supports native small caps - */ -- (BOOL)supportsNativeSmallCaps; - -/** - Working with CSS - */ - -/** - The CSS style sheet representation of the receiver - @returns A CSS style string - */ -- (NSString *)cssStyleRepresentation; - - -/** - @name Global Font Overriding - */ - -/** - A call to the method is ideally placed into your app delegate. This loads all available system fonts into a look up table to allow DTCoreText to quickly find a specific combination of font-family and italic and bold attributes. Please refer to the [Programming Guide](../docs/Programming%20Guide.html) for information when you should be using this. - - Calling this does not replace entries already existing in the lookup table, for example loaded from the `DTCoreTextFontOverrides.plist` included in the app bundle. - */ -+ (void)asyncPreloadFontLookupTable; - -/** - Sets the font family to use if the font family in a font descriptor is invalid. - - The fallback font family cannot be `nil` and must be a valid font family. The default is **Times New Roman**. - @param fontFamily The font family - */ -+ (void)setFallbackFontFamily:(NSString *)fontFamily; - -/** - Returns the font family to use if the font family in a font descriptor is invalid. The default is **Times New Roman**. - @returns The font family - */ -+ (NSString *)fallbackFontFamily; - -/** - Sets the global font name override to use when encountering a font family with given bold and italic attributes. - @param fontName The font name to use - @param fontFamily The font family to use this for - @param bold The bold trait - @param italic The italic trait - */ -+ (void)setOverrideFontName:(NSString *)fontName forFontFamily:(NSString *)fontFamily bold:(BOOL)bold italic:(BOOL)italic; - -/** - Retrieves the global font name override for a given font family with bold and italic traits. - @param fontFamily The font family to retrieve the override for - @param bold The bold trait - @param italic The italic trait - @returns The font name to use for this combination of parameters - */ -+ (NSString *)overrideFontNameforFontFamily:(NSString *)fontFamily bold:(BOOL)bold italic:(BOOL)italic; - -/** - Sets the global font name override to use when encountering small caps text in a font family with given bold and italic attributes. - @param fontName The font name to use - @param fontFamily The font family to use this for - @param bold The bold trait - @param italic The italic trait - */ -+ (void)setSmallCapsFontName:(NSString *)fontName forFontFamily:(NSString *)fontFamily bold:(BOOL)bold italic:(BOOL)italic; - -/** - Retrieves the global font name override to use for small caps text for a given font family with bold and italic traits. - @param fontFamily The font family to retrieve the override for - @param bold The bold trait - @param italic The italic trait - @returns The font name to use for this combination of parameters - */ -+ (NSString *)smallCapsFontNameforFontFamily:(NSString *)fontFamily bold:(BOOL)bold italic:(BOOL)italic; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFontDescriptor.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFontDescriptor.m deleted file mode 100644 index b8464c2..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFontDescriptor.m +++ /dev/null @@ -1,1090 +0,0 @@ -// -// DTCoreTextFontDescriptor.m -// DTCoreText -// -// Created by Oliver Drobnik on 1/26/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" -#import "DTCoreTextFontDescriptor.h" -#import "DTCoreTextFontCollection.h" -#import "DTCoreTextConstants.h" - -static NSCache *_fontCache = nil; -static NSMutableDictionary *_fontOverrides = nil; - -// font family to use if no font can be found with the given font-family -static NSString *_fallbackFontFamily = @"Times New Roman"; - -// adds "STHeitiSC-Light" font for cascading fix on iOS 5 -static BOOL _needsChineseFontCascadeFix = NO; - -@interface DTCoreTextFontDescriptor () - -// gets descriptors of all available fonts from system -+ (void)_createDictionaryOfAllAvailableFontOverrideNamesWithCompletion:(void(^)(NSDictionary *dictionary))completion; - -@end - - -@implementation DTCoreTextFontDescriptor -{ - NSString *_fontFamily; - NSString *_fontName; - - CGFloat _pointSize; - - CTFontSymbolicTraits _stylisticTraits; - CTFontStylisticClass _stylisticClass; - - BOOL _smallCapsFeature; - - // internal values for size class and usage category, i.e.dynamic type - - long _sizeCategory; - NSString *_usageAttribute; -} - -+ (void)initialize -{ - // only this class (and not subclasses) do this - if (self != [DTCoreTextFontDescriptor class]) - { - return; - } - - _fontCache = [[NSCache alloc] init]; - - // init/load of overrides - _fontOverrides = [[NSMutableDictionary alloc] init]; - - // then - if it exists - we override from the plist - NSString *path = [[NSBundle bundleForClass:self] pathForResource:@"DTCoreTextFontOverrides" ofType:@"plist"]; - if (!path) { - // If built as a dynamic framework we might need to look in the main bundle - path = [[NSBundle mainBundle] pathForResource:@"DTCoreTextFontOverrides" ofType:@"plist"]; - } - NSArray *fileArray = [NSArray arrayWithContentsOfFile:path]; - - for (NSDictionary *oneOverride in fileArray) - { - NSString *fontFamily = [oneOverride objectForKey:@"FontFamily"]; - NSString *overrideFontName = [oneOverride objectForKey:@"OverrideFontName"]; - BOOL bold = [[oneOverride objectForKey:@"Bold"] boolValue]; - BOOL italic = [[oneOverride objectForKey:@"Italic"] boolValue]; - BOOL smallcaps = [[oneOverride objectForKey:@"SmallCaps"] boolValue]; - - if (smallcaps) - { - [DTCoreTextFontDescriptor setSmallCapsFontName:overrideFontName forFontFamily:fontFamily bold:bold italic:italic]; - } - else - { - [DTCoreTextFontDescriptor setOverrideFontName:overrideFontName forFontFamily:fontFamily bold:bold italic:italic]; - } - } - -#if TARGET_OS_IPHONE - // workaround for iOS 5.x bug: global font cascade table has incorrect bold font for Chinese characters in Chinese locale - if (NSFoundationVersionNumber < DTNSFoundationVersionNumber_iOS_6_0) - { - _needsChineseFontCascadeFix = YES; - } -#endif -} - -// preloads all available system fonts for faster font matching -+ (void)asyncPreloadFontLookupTable -{ - // asynchronously load all available fonts into override table - [self _createDictionaryOfAllAvailableFontOverrideNamesWithCompletion:^(NSDictionary *dictionary) { - - // now we're done and we can merge the new dictionary synchronized - - @synchronized(_fontOverrides) - { - [dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *overrideFontName, BOOL *stop) { - - // only add the overrides where there is no previous setting, either from plist of user setting it - if (![_fontOverrides objectForKey:key]) - { - [_fontOverrides setObject:overrideFontName forKey:key]; - } - }]; - } - }]; -} - -// get font names of all available fonts from system -+ (void)_createDictionaryOfAllAvailableFontOverrideNamesWithCompletion:(void(^)(NSDictionary *dictionary))completion -{ - NSParameterAssert(completion); - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ - - // get all font descriptors - DTCoreTextFontCollection *allFonts = [DTCoreTextFontCollection availableFontsCollection]; - - NSMutableDictionary *tmpDictionary = [NSMutableDictionary dictionaryWithCapacity:[allFonts.fontDescriptors count]]; - - // sort font descriptors by name so that shorter names are preferred - NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"fontFamily" ascending:YES]; - NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"fontName" ascending:YES]; - NSArray *sortedFonts = [[allFonts fontDescriptors] sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sort1, sort2, nil]]; - - - for (DTCoreTextFontDescriptor *oneFontDescriptor in sortedFonts) - { - NSString *key = [NSString stringWithFormat:@"%@-%d-%d-override", oneFontDescriptor.fontFamily, oneFontDescriptor.boldTrait, oneFontDescriptor.italicTrait]; - - NSString *existingOverride = [tmpDictionary objectForKey:key]; - - if (!existingOverride) - { - [tmpDictionary setObject:oneFontDescriptor.fontName forKey:key]; - } - else - { - // prefer fonts with shorter name, there are probably "more correct". e.g. Helvetica-Oblique instead of Helvetica-LightOblique - if ([existingOverride length]>[oneFontDescriptor.fontName length]) - { - [tmpDictionary setObject:oneFontDescriptor.fontName forKey:key]; - } - } - } - - completion([tmpDictionary copy]); - }); -} - -#pragma mark - Global Font Overriding - -+ (void)setFallbackFontFamily:(NSString *)fontFamily -{ - if (!fontFamily) - { - [NSException raise:DTCoreTextFontDescriptorException format:@"Fallback Font Family cannot be nil"]; - } - - // make sure that only valid font families can be registered - NSDictionary *attributes = [NSDictionary dictionaryWithObject:fontFamily forKey:(id)kCTFontFamilyNameAttribute]; - CTFontDescriptorRef fontDesc = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)(attributes)); - CTFontRef font = CTFontCreateWithFontDescriptor(fontDesc, 12, NULL); - - BOOL isValid = NO; - - if (font) - { - NSString *usedFontFamily = CFBridgingRelease(CTFontCopyFamilyName(font)); - - if ([usedFontFamily isEqualToString:fontFamily]) - { - isValid = YES; - } - - CFRelease(fontDesc); - CFRelease(font); - } - - if (!isValid) - { - [NSException raise:DTCoreTextFontDescriptorException format:@"Fallback Font Family '%@' not registered on the system", fontFamily]; - } - - _fallbackFontFamily = [fontFamily copy]; -} - -+ (NSString *)fallbackFontFamily -{ - return _fallbackFontFamily; -} - -+ (void)setSmallCapsFontName:(NSString *)fontName forFontFamily:(NSString *)fontFamily bold:(BOOL)bold italic:(BOOL)italic -{ - @synchronized(_fontOverrides) - { - NSString *key = [NSString stringWithFormat:@"%@-%d-%d-smallcaps", fontFamily, bold, italic]; - [_fontOverrides setObject:fontName forKey:key]; - } -} - -+ (NSString *)smallCapsFontNameforFontFamily:(NSString *)fontFamily bold:(BOOL)bold italic:(BOOL)italic -{ - @synchronized(_fontOverrides) - { - NSString *key = [NSString stringWithFormat:@"%@-%d-%d-smallcaps", fontFamily, bold, italic]; - return [_fontOverrides objectForKey:key]; - } -} - -+ (void)setOverrideFontName:(NSString *)fontName forFontFamily:(NSString *)fontFamily bold:(BOOL)bold italic:(BOOL)italic -{ - @synchronized(_fontOverrides) - { - NSString *key = [NSString stringWithFormat:@"%@-%d-%d-override", fontFamily, bold, italic]; - [_fontOverrides setObject:fontName forKey:key]; - }; -} - -+ (NSString *)overrideFontNameforFontFamily:(NSString *)fontFamily bold:(BOOL)bold italic:(BOOL)italic -{ - @synchronized(_fontOverrides) - { - NSString *key = [NSString stringWithFormat:@"%@-%d-%d-override", fontFamily, bold, italic]; - return [_fontOverrides objectForKey:key]; - } -} - -#pragma mark Initializing - -+ (DTCoreTextFontDescriptor *)fontDescriptorWithFontAttributes:(NSDictionary *)attributes -{ - return [[DTCoreTextFontDescriptor alloc] initWithFontAttributes:attributes]; -} - -+ (DTCoreTextFontDescriptor *)fontDescriptorForCTFont:(CTFontRef)ctFont -{ - return [[DTCoreTextFontDescriptor alloc] initWithCTFont:ctFont]; -} - -- (id)initWithFontAttributes:(NSDictionary *)attributes -{ - self = [super init]; - if (self) - { - [self setFontAttributes:attributes]; - } - - return self; -} - -- (id)initWithCTFontDescriptor:(CTFontDescriptorRef)ctFontDescriptor -{ - self = [super init]; - if (self) - { - CFDictionaryRef dict = CTFontDescriptorCopyAttributes(ctFontDescriptor); - - NSDictionary *dictionary = (__bridge NSDictionary *)dict; - _sizeCategory = [[dictionary objectForKey:@"NSCTFontSizeCategoryAttribute"] longValue]; - _usageAttribute = [dictionary objectForKey:@"NSCTFontUIUsageAttribute"]; - - CFDictionaryRef traitsDict = CTFontDescriptorCopyAttribute(ctFontDescriptor, kCTFontTraitsAttribute); - CTFontSymbolicTraits traitsValue = [[(__bridge NSDictionary *)traitsDict objectForKey:(id)kCTFontSymbolicTrait] unsignedIntValue]; - CFRelease(traitsDict); - - self.symbolicTraits = traitsValue; - - [self setFontAttributes:CFBridgingRelease(dict)]; - - // also get family name - - CFStringRef familyName = CTFontDescriptorCopyAttribute(ctFontDescriptor, kCTFontFamilyNameAttribute); - self.fontFamily = CFBridgingRelease(familyName); - } - - return self; -} - -- (id)initWithCTFont:(CTFontRef)ctFont -{ - NSParameterAssert(ctFont); - - self = [super init]; - if (self) - { - CTFontDescriptorRef fd = CTFontCopyFontDescriptor(ctFont); - CFDictionaryRef dict = CTFontDescriptorCopyAttributes(fd); - - CFDictionaryRef traitsDict = CTFontDescriptorCopyAttribute(fd, kCTFontTraitsAttribute); - CTFontSymbolicTraits traitsValue = [[(__bridge NSDictionary *)traitsDict objectForKey:(id)kCTFontSymbolicTrait] unsignedIntValue]; - CFRelease(traitsDict); - CFRelease(fd); - - self.symbolicTraits = traitsValue; - - [self setFontAttributes:CFBridgingRelease(dict)]; - - // also get the family while we're at it - CFStringRef cfStr = CTFontCopyFamilyName(ctFont); - - if (cfStr) - { - self.fontFamily = CFBridgingRelease(cfStr); - } - - // look if this has synthetic italics - CGAffineTransform transform = CTFontGetMatrix(ctFont); - - if (!CGAffineTransformIsIdentity(transform)) - { - self.italicTrait = YES; - } - } - - return self; -} - -#ifndef COVERAGE -// exclude method from coverage testing - -- (NSString *)description -{ - NSMutableString *string = [NSMutableString string]; - - [string appendFormat:@"<%@", [self class]]; - - - if (self.fontName) - { - [string appendFormat:@" name=\'%@\'", self.fontName]; - } - - if (_fontFamily) - { - [string appendFormat:@" family=\'%@\'", _fontFamily]; - } - - [string appendFormat:@" size:%.0f", _pointSize]; - - NSMutableArray *tmpTraits = [NSMutableArray array]; - - if (_stylisticTraits & kCTFontBoldTrait) - { - [tmpTraits addObject:@" bold"]; - } - - if (_stylisticTraits & kCTFontItalicTrait) - { - [tmpTraits addObject:@" italic"]; - } - - if (_stylisticTraits & kCTFontMonoSpaceTrait) - { - [tmpTraits addObject:@" monospace"]; - } - - if (_stylisticTraits & kCTFontCondensedTrait) - { - [tmpTraits addObject:@" condensed"]; - } - - if (_stylisticTraits & kCTFontExpandedTrait) - { - [tmpTraits addObject:@" expanded"]; - } - - if (_stylisticTraits & kCTFontVerticalTrait) - { - [tmpTraits addObject:@"vertical"]; - } - - if (_stylisticTraits & kCTFontUIOptimizedTrait) - { - [tmpTraits addObject:@" UI optimized"]; - } - - - if ([tmpTraits count]) - { - [string appendString:@" attributes="]; - [string appendString:[tmpTraits componentsJoinedByString:@", "]]; - } - - [string appendString:@">"]; - - return string; -} - -#endif - -- (NSDictionary *)fontAttributes -{ - NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary]; - - NSMutableDictionary *traitsDict = [NSMutableDictionary dictionary]; - - CTFontSymbolicTraits theSymbolicTraits = _stylisticTraits | _stylisticClass; - - if (theSymbolicTraits) - { - [traitsDict setObject:[NSNumber numberWithUnsignedInt:theSymbolicTraits] forKey:(id)kCTFontSymbolicTrait]; - } - - if ([traitsDict count]) - { - [tmpDict setObject:traitsDict forKey:(id)kCTFontTraitsAttribute]; - } - - if (_fontFamily) - { - [tmpDict setObject:_fontFamily forKey:(id)kCTFontFamilyNameAttribute]; - } - - if (_fontName) - { - [tmpDict setObject:_fontName forKey:(id)kCTFontNameAttribute]; - } - - // we need size because that's what makes a font unique, for searching it's ignored anyway - [tmpDict setObject:DTNSNumberFromCGFloat(_pointSize) forKey:(id)kCTFontSizeAttribute]; - - if (_smallCapsFeature) - { - NSNumber *typeNum = [NSNumber numberWithInteger:3]; - NSNumber *selNum = [NSNumber numberWithInteger:3]; - - NSDictionary *setting = [NSDictionary dictionaryWithObjectsAndKeys:selNum, (id)kCTFontFeatureSelectorIdentifierKey, - typeNum, (id)kCTFontFeatureTypeIdentifierKey, nil]; - - NSArray *featureSettings = [NSArray arrayWithObject:setting]; - - [tmpDict setObject:featureSettings forKey:(id)kCTFontFeatureSettingsAttribute]; - } - - if (_sizeCategory) - { - NSNumber *num = [NSNumber numberWithLong:_sizeCategory]; - [tmpDict setObject:num forKey:@"NSCTFontSizeCategoryAttribute"]; - } - - if (_usageAttribute) - { - [tmpDict setObject:_usageAttribute forKey:@"NSCTFontUIUsageAttribute"]; - } - - if (!self.boldTrait && _needsChineseFontCascadeFix) - { - CTFontDescriptorRef desc = CTFontDescriptorCreateWithNameAndSize(CFSTR("STHeitiSC-Light"), self.pointSize); - - [tmpDict setObject:[NSArray arrayWithObject:(__bridge_transfer id) desc] forKey:(id)kCTFontCascadeListAttribute]; - } - - //return [NSDictionary dictionaryWithDictionary:tmpDict]; - // converting to non-mutable costs 42% of entire method - return tmpDict; -} - -- (NSDictionary *)fontAttributesWithOverrideFontName:(NSString *)overrideFontName -{ - NSMutableDictionary *tmpAttributes = [[self fontAttributes] mutableCopy]; - - // remove family - [tmpAttributes removeObjectForKey:(id)kCTFontFamilyNameAttribute]; - - // replace font name - [tmpAttributes setObject:overrideFontName forKey:(id)kCTFontNameAttribute]; - - return tmpAttributes; -} - -- (BOOL)supportsNativeSmallCaps -{ - if ([DTCoreTextFontDescriptor smallCapsFontNameforFontFamily:_fontFamily bold:self.boldTrait italic:self.italicTrait]) - { - return YES; - } - - BOOL smallCapsSupported = NO; - - CTFontRef tmpFont = [self newMatchingFont]; - - if (tmpFont) - { - // check if this font supports small caps - CFArrayRef fontFeatures = CTFontCopyFeatures(tmpFont); - - if (fontFeatures) - { - for (NSDictionary *oneFeature in (__bridge NSArray *)fontFeatures) - { - NSInteger featureTypeIdentifier = [[oneFeature objectForKey:(id)kCTFontFeatureTypeIdentifierKey] integerValue]; - - if (featureTypeIdentifier == 3) // Letter Case - { - NSArray *featureSelectors = [oneFeature objectForKey:(id)kCTFontFeatureTypeSelectorsKey]; - - for (NSDictionary *oneFeatureSelector in featureSelectors) - { - NSInteger featureSelectorIdentifier = [[oneFeatureSelector objectForKey:(id)kCTFontFeatureSelectorIdentifierKey] integerValue]; - - if (featureSelectorIdentifier == 3) // Small Caps - { - // hooray, small caps supported! - smallCapsSupported = YES; - - break; - } - } - - break; - } - } - - CFRelease(fontFeatures); - } - - CFRelease(tmpFont); - } - - return smallCapsSupported; -} - -#pragma mark Finding Font - -- (BOOL)_fontIsOblique:(CTFontRef)font -{ - NSDictionary *traits = (__bridge_transfer NSDictionary *)CTFontCopyTraits(font); - - CGFloat slant = [[traits objectForKey:(id)kCTFontSlantTrait] floatValue]; - BOOL hasItalicTrait = ([[traits objectForKey:(id)kCTFontSymbolicTrait] unsignedIntValue] & kCTFontItalicTrait) ==kCTFontItalicTrait; - - if (!hasItalicTrait || slant<0.01) - { - return NO; - } - - // font HAS italic trait AND sufficient slant angle - return YES; - -} - -- (CTFontRef)_findOrMakeMatchingFont -{ - CTFontDescriptorRef searchingFontDescriptor = NULL; - CTFontDescriptorRef matchingFontDescriptor = NULL; - CFArrayRef matchingFontDescriptors = NULL; - CTFontRef matchingFont = NULL; - - // check the cache first - NSNumber *cacheKey = [NSNumber numberWithUnsignedInteger:[self hash]]; - - CTFontRef cachedFont = (__bridge_retained CTFontRef)[_fontCache objectForKey:cacheKey]; - - if (cachedFont) - { - return cachedFont; - } - - // check the override table that has all preinstalled fonts plus the ones the user registered - NSString *overrideName = nil; - - if (_fontFamily && !_fontName) // forced font name takes precedence - { - if (_smallCapsFeature) - { - overrideName = [DTCoreTextFontDescriptor smallCapsFontNameforFontFamily:_fontFamily bold:self.boldTrait italic:self.italicTrait]; - } - else - { - overrideName = [DTCoreTextFontDescriptor overrideFontNameforFontFamily:_fontFamily bold:self.boldTrait italic:self.italicTrait]; - } - } - - // if we use the chinese font cascade fix we cannot use fast method as it does not allow specifying the custom cascade list - BOOL useFastFontCreation = !(_needsChineseFontCascadeFix && !self.boldTrait); - - if (useFastFontCreation && ((_fontName && ![_fontName hasPrefix:@"."]) || overrideName)) - { - // we can create a font directly from the name - NSString *usedName = overrideName?overrideName:_fontName; - - matchingFont = CTFontCreateWithName((__bridge CFStringRef)usedName, _pointSize, NULL); - } - else - { - // we need to search for a suitable font - - NSDictionary *fontAttributes; - - if (overrideName) - { - fontAttributes = [self fontAttributesWithOverrideFontName:overrideName]; - } - else - { - fontAttributes = [self fontAttributes]; - } - - // the descriptor we are looking for - searchingFontDescriptor = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)fontAttributes); - - // the attributes that are mandatory - NSMutableSet *mandatoryAttributes = [NSMutableSet setWithObject:(id)kCTFontTraitsAttribute]; - - if (_fontFamily) - { - [mandatoryAttributes addObject:(id)kCTFontFamilyNameAttribute]; - } - - if (_smallCapsFeature) - { - [mandatoryAttributes addObject:(id)kCTFontFeaturesAttribute]; - } - - matchingFontDescriptors = CTFontDescriptorCreateMatchingFontDescriptors(searchingFontDescriptor, (__bridge CFSetRef)mandatoryAttributes); - - if (matchingFontDescriptors) { - CFIndex count = CFArrayGetCount(matchingFontDescriptors); - if (count == 1) { - matchingFontDescriptor = CTFontDescriptorCreateMatchingFontDescriptor(searchingFontDescriptor, (__bridge CFSetRef)mandatoryAttributes); - } else { - CFIndex i = 0; - for (i=0; i_pointSize) - { - return NO; - } - - if (_stylisticClass != otherFontDescriptor->_stylisticClass) - { - return NO; - } - - if (_stylisticTraits != otherFontDescriptor->_stylisticTraits) - { - return NO; - } - - if (_fontName != otherFontDescriptor->_fontName) - { - if (![_fontName isEqualToString:_fontName]) - { - return NO; - } - } - - if (_fontFamily != otherFontDescriptor->_fontFamily) - { - if (![_fontFamily isEqualToString:_fontFamily]) - { - return NO; - } - } - - return YES; -} - - -#pragma mark NSCoding - -- (void)encodeWithCoder:(NSCoder *)encoder -{ - [encoder encodeObject:self.fontName forKey:@"FontName"]; - [encoder encodeObject:self.fontFamily forKey:@"FontFamily"]; - [encoder encodeBool:self.boldTrait forKey:@"BoldTrait"]; - [encoder encodeBool:self.italicTrait forKey:@"ItalicTrait"]; -} - -- (id)initWithCoder:(NSCoder *)decoder -{ - self = [super init]; - - if (self) - { - self.fontName = [decoder decodeObjectForKey:@"FontName"]; - self.fontFamily = [decoder decodeObjectForKey:@"FontFamily"]; - self.boldTrait = [decoder decodeBoolForKey:@"BoldTrait"]; - self.italicTrait = [decoder decodeBoolForKey:@"ItalicTrait"]; - } - - return self; -} - - -#pragma mark Copying - -- (id)copyWithZone:(NSZone *)zone -{ - DTCoreTextFontDescriptor *newDesc = [[DTCoreTextFontDescriptor allocWithZone:zone] initWithFontAttributes:[self fontAttributes]]; - newDesc.pointSize = self.pointSize; - return newDesc; -} - - -#pragma mark Properties -- (void)setStylisticClass:(CTFontStylisticClass)newClass -{ - self.fontFamily = nil; - - _stylisticClass = newClass; -} - - -- (void)setFontAttributes:(NSDictionary *)attributes -{ - if (!attributes) - { - self.fontFamily = nil; - self.fontName = nil; - self.pointSize = 12; - - _stylisticTraits = 0; - _stylisticClass = 0; - } - - NSDictionary *traitsDict = [attributes objectForKey:(id)kCTFontTraitsAttribute]; - - if (traitsDict) - { - CTFontSymbolicTraits traitsValue = [[traitsDict objectForKey:(id)kCTFontSymbolicTrait ] unsignedIntValue]; - self.symbolicTraits = traitsValue; - } - - NSNumber *pointNum = [attributes objectForKey:(id)kCTFontSizeAttribute]; - if (pointNum) - { - _pointSize = [pointNum floatValue]; - } - - NSString *family = [attributes objectForKey:(id)kCTFontFamilyNameAttribute]; - - if (family) - { - self.fontFamily = family; - } - - NSString *name = [attributes objectForKey:(id)kCTFontNameAttribute]; - - if (name) - { - self.fontName = name; - } -} - -- (CTFontSymbolicTraits)symbolicTraits -{ - // symbolic traits include both stylistic traits as well as stylistic class - return _stylisticTraits | _stylisticClass; -} - -- (void)setSymbolicTraits:(CTFontSymbolicTraits)theSymbolicTraits -{ - // symbolic traits include both stylistic traits as well as stylistic class - _stylisticTraits = theSymbolicTraits & ~kCTFontClassMaskTrait; - _stylisticClass = theSymbolicTraits & kCTFontClassMaskTrait; -} - -// a representation of this font in CSS style -- (NSString *)cssStyleRepresentation -{ - NSMutableString *retString = [NSMutableString string]; - - if (_fontFamily) - { - [retString appendFormat:@"font-family:'%@';", _fontFamily]; - } - - [retString appendFormat:@"font-size:%.0fpx;", _pointSize]; - - if (self.italicTrait) - { - [retString appendString:@"font-style:italic;"]; - } - - if (self.boldTrait) - { - [retString appendString:@"font-weight:bold;"]; - } - - // return nil if no content - if ([retString length]) - { - return retString; - } - else - { - return nil; - } -} - -- (void)setBoldTrait:(BOOL)boldTrait -{ - if (boldTrait) - { - _stylisticTraits |= kCTFontBoldTrait; - } - else - { - _stylisticTraits &= ~kCTFontBoldTrait; - } -} - -- (BOOL)boldTrait -{ - return (_stylisticTraits & kCTFontBoldTrait)!=0; -} - -- (void)setItalicTrait:(BOOL)italicTrait -{ - if (italicTrait) - { - _stylisticTraits |= kCTFontItalicTrait; - } - else - { - _stylisticTraits &= ~kCTFontItalicTrait; - } -} - -- (BOOL)italicTrait -{ - return (_stylisticTraits & kCTFontItalicTrait)!=0; -} - -- (void)setExpandedTrait:(BOOL)expandedTrait -{ - if (expandedTrait) - { - _stylisticTraits |= kCTFontExpandedTrait; - } - else - { - _stylisticTraits &= ~kCTFontExpandedTrait; - } -} - -- (BOOL)expandedTrait -{ - return (_stylisticTraits & kCTFontExpandedTrait)!=0; -} - -- (void)setCondensedTrait:(BOOL)condensedTrait -{ - if (condensedTrait) - { - _stylisticTraits |= kCTFontCondensedTrait; - } - else - { - _stylisticTraits &= ~kCTFontCondensedTrait; - } -} - -- (BOOL)condensedTrait -{ - return (_stylisticTraits & kCTFontCondensedTrait)!=0; -} - -- (void)setMonospaceTrait:(BOOL)monospaceTrait -{ - if (monospaceTrait) - { - _stylisticTraits |= kCTFontMonoSpaceTrait; - } - else - { - _stylisticTraits &= ~kCTFontMonoSpaceTrait; - } -} - -- (BOOL)monospaceTrait -{ - return (_stylisticTraits & kCTFontMonoSpaceTrait)!=0; -} - -- (void)setVerticalTrait:(BOOL)verticalTrait -{ - if (verticalTrait) - { - _stylisticTraits |= kCTFontVerticalTrait; - } - else - { - _stylisticTraits &= ~kCTFontVerticalTrait; - } -} - -- (BOOL)verticalTrait -{ - return (_stylisticTraits & kCTFontVerticalTrait)!=0; -} - -- (void)setUIoptimizedTrait:(BOOL)UIoptimizedTrait -{ - if (UIoptimizedTrait) - { - _stylisticTraits |= kCTFontUIOptimizedTrait; - } - else - { - _stylisticTraits &= ~kCTFontUIOptimizedTrait; - } -} - -- (BOOL)UIoptimizedTrait -{ - return (_stylisticTraits & kCTFontUIOptimizedTrait)!=0; -} - -- (void)setPointSize:(CGFloat)pointSize -{ - _pointSize = round(pointSize); -} - -@synthesize fontFamily = _fontFamily; -@synthesize fontName = _fontName; -@synthesize pointSize = _pointSize; - -@dynamic symbolicTraits; - -@synthesize stylisticClass = _stylisticClass; -@synthesize smallCapsFeature = _smallCapsFeature; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFunctions.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFunctions.h deleted file mode 100644 index 2bea11d..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFunctions.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// DTCoreTextFunctions.h -// DTCoreText -// -// Created by Oliver Drobnik on 21.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// -#import - -#import "DTCompatibility.h" - -#if TARGET_OS_OSX -#import -#endif - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE - -#import - -/** - Creates a CTFont from a UIFont - @param font The `UIFont` - @returns The matching CTFont - */ -CTFontRef DTCTFontCreateWithUIFont(UIFont *font); -#endif - -/** - Converts an NSLineBreakMode into CoreText line truncation type - */ -CTLineTruncationType DTCTLineTruncationTypeFromNSLineBreakMode(NSLineBreakMode lineBreakMode); - -/** - Rounds the passed value according to the specified content scale. - - With contentScale 1 the results are identical to roundf, with Retina content scale 2 the results are multiples of 0.5. - */ -CGFloat DTRoundWithContentScale(CGFloat value, CGFloat contentScale); - -/** - Rounds up the passed value according to the specified content scale. - - With contentScale 1 the results are identical to roundf, with Retina content scale 2 the results are multiples of 0.5. - */ -CGFloat DTCeilWithContentScale(CGFloat value, CGFloat contentScale); - -/** - Rounds down the passed value according to the sspecifiedcontent scale. - - With contentScale 1 the results are identical to roundf, with Retina content scale 2 the results are multiples of 0.5. - */ -CGFloat DTFloorWithContentScale(CGFloat value, CGFloat contentScale); - -#pragma mark - Alignment Conversion - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES -/** - Converts from NSTextAlignment to CTTextAligment - */ -CTTextAlignment DTNSTextAlignmentToCTTextAlignment(NSTextAlignment nsTextAlignment); - -/** - Converts from CTTextAlignment to NSTextAligment - */ -NSTextAlignment DTNSTextAlignmentFromCTTextAlignment(CTTextAlignment ctTextAlignment); -#endif - diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFunctions.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFunctions.m deleted file mode 100644 index 3a08eb1..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextFunctions.m +++ /dev/null @@ -1,195 +0,0 @@ -// -// DTCoreTextFunctions.m -// DTCoreText -// -// Created by Oliver Drobnik on 21.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTCoreTextFunctions.h" - -#import - -#if TARGET_OS_IPHONE -CTFontRef DTCTFontCreateWithUIFont(UIFont *font) -{ - return CTFontCreateWithName((__bridge CFStringRef)font.fontName, font.pointSize, NULL); -} -#endif - -CTLineTruncationType DTCTLineTruncationTypeFromNSLineBreakMode(NSLineBreakMode lineBreakMode) -{ -#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 - switch (lineBreakMode) - { - case UILineBreakModeHeadTruncation: - return kCTLineTruncationStart; - - case UILineBreakModeMiddleTruncation: - return kCTLineTruncationMiddle; - - default: - return kCTLineTruncationEnd; - } -#else - switch (lineBreakMode) - { - case NSLineBreakByTruncatingHead: - return kCTLineTruncationStart; - - case NSLineBreakByTruncatingMiddle: - return kCTLineTruncationMiddle; - - default: - return kCTLineTruncationEnd; - } -#endif -} - -CGFloat DTRoundWithContentScale(CGFloat value, CGFloat contentScale) -{ - return round(value*contentScale)/contentScale; -} - -CGFloat DTCeilWithContentScale(CGFloat value, CGFloat contentScale) -{ - return ceil(value*contentScale)/contentScale; -} - -CGFloat DTFloorWithContentScale(CGFloat value, CGFloat contentScale) -{ - return floor(value*contentScale)/contentScale; -} - -#pragma mark - Alignment Functions - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - -CTTextAlignment DTNSTextAlignmentToCTTextAlignment(NSTextAlignment nsTextAlignment) -{ - switch (nsTextAlignment) - { -#if TARGET_OS_IPHONE - case NSTextAlignmentLeft: - { - return kCTTextAlignmentLeft; - } - - case NSTextAlignmentRight: - { - return kCTTextAlignmentRight; - } - - case NSTextAlignmentCenter: - { - return kCTTextAlignmentCenter; - } - - case NSTextAlignmentJustified: - { - return kCTTextAlignmentJustified; - } - - case NSTextAlignmentNatural: - { - return kCTTextAlignmentNatural; - } -#else - case NSLeftTextAlignment: - { - return kCTTextAlignmentLeft; - } - - case NSRightTextAlignment: - { - return kCTTextAlignmentRight; - } - - case NSCenterTextAlignment: - { - return kCTTextAlignmentCenter; - } - - case NSJustifiedTextAlignment: - { - return kCTTextAlignmentJustified; - } - - case NSNaturalTextAlignment: - { - return kCTTextAlignmentNatural; - } -#endif - - default: - { - DTLogError(@"Unknown alignment %d", (int)nsTextAlignment); - return 0; - } - } -} - -NSTextAlignment DTNSTextAlignmentFromCTTextAlignment(CTTextAlignment ctTextAlignment) -{ -#if TARGET_OS_IPHONE - switch (ctTextAlignment) - { - case kCTTextAlignmentLeft: - { - return NSTextAlignmentLeft; - } - - case kCTTextAlignmentRight: - { - return NSTextAlignmentRight; - } - - case kCTTextAlignmentCenter: - { - return NSTextAlignmentCenter; - } - - case kCTTextAlignmentJustified: - { - return NSTextAlignmentJustified; - } - - case kCTTextAlignmentNatural: - { - return NSTextAlignmentNatural; - } - } -#else - switch (ctTextAlignment) - { - case kCTTextAlignmentLeft: - { - return NSLeftTextAlignment; - } - - case kCTTextAlignmentRight: - { - return NSRightTextAlignment; - } - - case kCTTextAlignmentCenter: - { - return NSCenterTextAlignment; - } - - case kCTTextAlignmentJustified: - { - return NSJustifiedTextAlignment; - } - - case kCTTextAlignmentNatural: - { - return NSNaturalTextAlignment; - } - } -#endif -} - -#endif - - diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextGlyphRun.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextGlyphRun.h deleted file mode 100644 index ddd1c85..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextGlyphRun.h +++ /dev/null @@ -1,153 +0,0 @@ -// -// DTCoreTextGlyphRun.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/25/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE -#import -#elif TARGET_OS_MAC -#import -#endif - -@class DTCoreTextLayoutLine; -@class DTTextAttachment; - - -/** - This class is an Objective-C wrapper around `CTRun` and represents a glyph run. That is, a number of characters from the original `NSAttributedString` that share the same characteristics and attributes. - */ - -@interface DTCoreTextGlyphRun : NSObject -{ - NSRange _stringRange; -} - -/** - @name Creating Glyph Runs - */ - -/** - Creates a new glyph run from a `CTRun`, belonging to a given layout line and with a given offset from the left line origin. - @param run The Core Text glyph run to wrap - @param layoutLine The layout line that this glyph run belongs to - @param offset The offset from the left line origin to place the glyph run at - @returns An initialized DTCoreTextGlyphRun - */ -- (id)initWithRun:(CTRunRef)run layoutLine:(DTCoreTextLayoutLine *)layoutLine offset:(CGFloat)offset; - -/** - @name Drawing - */ - -/** - Draws the receiver into the given context with the position that it derives from the layout line it belongs to. - @see drawDecorationInContext: for drawing the receiver's decoration - @param context The graphics context to draw into - */ -- (void)drawInContext:(CGContextRef)context; - -/** - Draws the receiver's decoration into the given context with the position that it derives from the layout line it belongs to. Decoration is background highlighting, underline and strike-through. - @param context The graphics context to draw into - */ -- (void)drawDecorationInContext:(CGContextRef)context; - -/** - Creates a `CGPath` containing the shapes of all glyphs in the receiver - */ -- (CGPathRef)newPathWithGlyphs; - -/** - @name Getting Information - */ - -/** - Determines the frame of a specific glyph - @param index The index of the glyph - @return The frame of the glyph - */ -- (CGRect)frameOfGlyphAtIndex:(NSInteger)index; - -/** - The bounds of an image encompassing the entire run. - @param context The graphics context used for the measurement - @returns The rectangle containing the result - */ -- (CGRect)imageBoundsInContext:(CGContextRef)context; - -/** - The string range (of the attributed string) that is represented by the receiver - @returns The range - */ -- (NSRange)stringRange; - -/** - The string indices of the receiver - @returns An array of string indices - */ -- (NSArray *)stringIndices; - -/** - The frame rectangle of the glyph run, relative to the layout frame coordinate system - */ -@property (nonatomic, readonly) CGRect frame; - -/** - The number of glyphs that the receiver is made up of - */ -@property (nonatomic, readonly) NSInteger numberOfGlyphs; - -/** - The Core Text attributes that are shared by all glyphs of the receiver - */ -@property (nonatomic, readonly) NSDictionary *attributes; - -/** - Returns `YES` if the receiver is part of a hyperlink, `NO` otherwise - */ -@property (nonatomic, assign, readonly, getter=isHyperlink) BOOL hyperlink; - -/** - Returns `YES` if the receiver represents trailing whitespace in a line. - - This can be used to avoid drawing of background color, strikeout or underline for empty trailing white space glyph runs. - */ -- (BOOL)isTrailingWhitespace; - -/** - The ascent (height above the baseline) of the receiver - */ -@property (nonatomic, readonly) CGFloat ascent; - -/** - The descent (height below the baseline) of the receiver - */ -@property (nonatomic, readonly) CGFloat descent; - -/** - The leading (additional space above the ascent) of the receiver - */ -@property (nonatomic, readonly) CGFloat leading; - -/** - The width of the receiver - */ -@property (nonatomic, readonly) CGFloat width; - -/** - `YES` if the writing direction is Right-to-Left, otherwise `NO` - */ -@property (nonatomic, readonly) BOOL writingDirectionIsRightToLeft; - -/** - The text attachment of the receiver, or `nil` if there is none - */ -@property (nonatomic, readonly) DTTextAttachment *attachment; - - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextGlyphRun.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextGlyphRun.m deleted file mode 100644 index bb36f79..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextGlyphRun.m +++ /dev/null @@ -1,541 +0,0 @@ -// -// DTCoreTextGlyphRun.m -// DTCoreText -// -// Created by Oliver Drobnik on 1/25/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" -#import "DTCoreTextGlyphRun.h" -#import "DTCoreTextLayoutLine.h" -#import "DTTextAttachment.h" -#import "DTCoreTextConstants.h" -#import "DTCoreTextParagraphStyle.h" -#import "DTCoreTextFunctions.h" -#import "NSDictionary+DTCoreText.h" -#import - -#import - -@implementation DTCoreTextGlyphRun -{ - CTRunRef _run; - CGRect _frame; - - CGFloat _offset; // x distance from line origin - CGFloat _ascent; - CGFloat _descent; - CGFloat _leading; - CGFloat _width; - - BOOL _writingDirectionIsRightToLeft; - BOOL _isTrailingWhitespace; - - NSInteger _numberOfGlyphs; - - const CGPoint *_glyphPositionPoints; - - DT_WEAK_VARIABLE DTCoreTextLayoutLine *_line; // retain cycle, since these objects are retained by the _line - DT_WEAK_VARIABLE NSDictionary *_attributes; // weak because it is owned by _run IVAR - NSArray *_stringIndices; - - DTTextAttachment *_attachment; - BOOL _hyperlink; - - BOOL _didCheckForAttachmentInAttributes; - BOOL _didCheckForHyperlinkInAttributes; - BOOL _didCalculateMetrics; - BOOL _didDetermineTrailingWhitespace; -} - -- (id)initWithRun:(CTRunRef)run layoutLine:(DTCoreTextLayoutLine *)layoutLine offset:(CGFloat)offset -{ - self = [super init]; - - if (self) - { - _run = run; - CFRetain(_run); - - _offset = offset; - _line = layoutLine; - } - - return self; -} - -- (void)dealloc -{ - if (_run) - { - CFRelease(_run); - } -} - -#ifndef COVERAGE -// exclude method from coverage testing - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@ glyphs=%ld %@>", [self class], (long)[self numberOfGlyphs], NSStringFromCGRect(_frame)]; -} - -#endif - -#pragma mark - Drawing - -- (void)drawInContext:(CGContextRef)context -{ - if (!_run || !context) - { - return; - } - - CGAffineTransform textMatrix = CTRunGetTextMatrix(_run); - - if (CGAffineTransformIsIdentity(textMatrix)) - { - CTRunDraw(_run, context, CFRangeMake(0, 0)); - } - else - { - CGPoint pos = CGContextGetTextPosition(context); - - // set tx and ty to current text pos according to docs - textMatrix.tx = pos.x; - textMatrix.ty = pos.y; - - CGContextSetTextMatrix(context, textMatrix); - - CTRunDraw(_run, context, CFRangeMake(0, 0)); - - // restore identity - CGContextSetTextMatrix(context, CGAffineTransformIdentity); - } -} - -- (void)drawDecorationInContext:(CGContextRef)context -{ - // get the scaling factor of the current translation matrix - CGAffineTransform ctm = CGContextGetCTM(context); - CGFloat contentScale = MAX(ctm.a, -ctm.d); // needed for rounding operations - - if (contentScale<1 || contentScale>2) - { - contentScale = 2; - } - - CGFloat smallestPixelWidth = 1.0f/contentScale; - - DTColor *backgroundColor = [self.attributes backgroundColor]; - - // -------------- Line-Out, Underline, Background-Color - BOOL drawStrikeOut = [[_attributes objectForKey:DTStrikeOutAttribute] boolValue]; - BOOL drawUnderline = [[_attributes objectForKey:(id)kCTUnderlineStyleAttributeName] boolValue]; - - if (drawStrikeOut||drawUnderline||backgroundColor) - { - // calculate area covered by non-whitespace - CGRect lineFrame = _line.frame; - - // LTR line frames include trailing whitespace in width - // we need to subtract it so that we don't highlight/underline it - if (!_line.writingDirectionIsRightToLeft) - { - lineFrame.size.width -= _line.trailingWhitespaceWidth; - } - - // exclude trailing whitespace so that we don't underline too much - CGRect runStrokeBounds = CGRectIntersection(lineFrame, self.frame); - - NSInteger superscriptStyle = [[_attributes objectForKey:(id)kCTSuperscriptAttributeName] integerValue]; - - switch (superscriptStyle) - { - case 1: - { - runStrokeBounds.origin.y -= _ascent * 0.47f; - break; - } - case -1: - { - runStrokeBounds.origin.y += _ascent * 0.25f; - break; - } - default: - break; - } - - if (backgroundColor) - { - CGRect backgroundColorRect = CGRectIntegral(CGRectMake(runStrokeBounds.origin.x, lineFrame.origin.y, runStrokeBounds.size.width, lineFrame.size.height)); - - CGContextSetFillColorWithColor(context, backgroundColor.CGColor); - CGContextFillRect(context, backgroundColorRect); - } - - if (drawStrikeOut || drawUnderline) - { - BOOL didDrawSomething = NO; - - CGContextSaveGState(context); - - CTFontRef usedFont = (__bridge CTFontRef)([_attributes objectForKey:(id)kCTFontAttributeName]); - - CGFloat fontUnderlineThickness; - - if (usedFont) - { - fontUnderlineThickness = CTFontGetUnderlineThickness(usedFont) * smallestPixelWidth; - } - else - { - fontUnderlineThickness = smallestPixelWidth; - } - - CGFloat usedUnderlineThickness = DTCeilWithContentScale(fontUnderlineThickness, contentScale); - - CGContextSetLineWidth(context, usedUnderlineThickness); - - if (drawStrikeOut) - { - CGFloat y; - - if (usedFont) - { - CGFloat strokePosition = CTFontGetXHeight(usedFont)/(CGFloat)2.0; - y = DTRoundWithContentScale(runStrokeBounds.origin.y + _ascent - strokePosition, contentScale); - } - else - { - y = DTRoundWithContentScale((runStrokeBounds.origin.y + self.frame.size.height/2.0f + 1), contentScale); - } - - if ((int)(usedUnderlineThickness/smallestPixelWidth)%2) // odd line width - { - y += smallestPixelWidth/2.0f; // shift down half a pixel to avoid aliasing - } - - CGContextMoveToPoint(context, runStrokeBounds.origin.x, y); - CGContextAddLineToPoint(context, runStrokeBounds.origin.x + runStrokeBounds.size.width, y); - - didDrawSomething = YES; - } - - // only draw underlines if Core Text didn't draw them yet - if (drawUnderline && !DTCoreTextDrawsUnderlinesWithGlyphs()) - { - CGFloat y; - - // use lowest underline position of all glyph runs in same line - CGFloat underlinePosition = [_line underlineOffset]; - - y = DTRoundWithContentScale(_line.baselineOrigin.y + underlinePosition - fontUnderlineThickness/2.0f, contentScale); - - if ((int)(usedUnderlineThickness/smallestPixelWidth)%2) // odd line width - { - y += smallestPixelWidth/2.0f; // shift down half a pixel to avoid aliasing - } - - CGContextMoveToPoint(context, runStrokeBounds.origin.x, y); - CGContextAddLineToPoint(context, runStrokeBounds.origin.x + runStrokeBounds.size.width, y); - - didDrawSomething = YES; - } - - if (didDrawSomething) - { - CGContextStrokePath(context); - } - - CGContextRestoreGState(context); // restore antialiasing - } - } -} - -- (CGPathRef)newPathWithGlyphs -{ - CTFontRef font = (__bridge CTFontRef)[self.attributes objectForKey:(id)kCTFontAttributeName]; - - if (!font) - { - DTLogError(@"CTFont missing on %@", self); - return NULL; - } - - const CGGlyph *glyphs = CTRunGetGlyphsPtr(_run); - const CGPoint *positions = CTRunGetPositionsPtr(_run); - - CGMutablePathRef mutablePath = CGPathCreateMutable(); - - for (NSUInteger i = 0; i < CTRunGetGlyphCount(_run); i++) - { - CGGlyph glyph = glyphs[i]; - CGPoint position = positions[i]; - - CGAffineTransform glyphTransform = CTRunGetTextMatrix(_run); - - glyphTransform = CGAffineTransformScale(glyphTransform, 1, -1); - - - CGPathRef glyphPath = CTFontCreatePathForGlyph(font, glyph, &glyphTransform); - - CGAffineTransform posTransform = CGAffineTransformMakeTranslation(position.x, position.y); - CGPathAddPath(mutablePath, &posTransform, glyphPath); - - CGPathRelease(glyphPath); - } - - return mutablePath; -} - -#pragma mark - Calculations -- (void)calculateMetrics -{ - // calculate metrics - @synchronized(self) - { - if (!_didCalculateMetrics) - { - _width = (CGFloat)CTRunGetTypographicBounds((CTRunRef)_run, CFRangeMake(0, 0), &_ascent, &_descent, &_leading); - _didCalculateMetrics = YES; - } - } -} - -- (CGRect)frameOfGlyphAtIndex:(NSInteger)index -{ - if (!_didCalculateMetrics) - { - [self calculateMetrics]; - } - - if (!_glyphPositionPoints) - { - // this is a pointer to the points inside the run, thus no retain necessary - _glyphPositionPoints = CTRunGetPositionsPtr(_run); - } - - if (!_glyphPositionPoints || index >= self.numberOfGlyphs) - { - return CGRectNull; - } - - CGPoint glyphPosition = _glyphPositionPoints[index]; - - CGRect rect = CGRectMake(_line.baselineOrigin.x + glyphPosition.x, _line.baselineOrigin.y - _ascent, _offset + _width - glyphPosition.x, _ascent + _descent); - if (index < self.numberOfGlyphs-1) - { - rect.size.width = _glyphPositionPoints[index+1].x - glyphPosition.x; - } - - return rect; -} - -// TODO: fix indices if the stringRange is modified -- (NSArray *)stringIndices -{ - if (!_stringIndices) - { - const CFIndex *indices = CTRunGetStringIndicesPtr(_run); - NSInteger count = self.numberOfGlyphs; - NSMutableArray *array = [NSMutableArray arrayWithCapacity:count]; - NSInteger i; - for (i = 0; i < count; i++) - { - [array addObject:[NSNumber numberWithInteger:indices[i]]]; - } - _stringIndices = array; - } - return _stringIndices; -} - -// bounds of an image encompassing the entire run -- (CGRect)imageBoundsInContext:(CGContextRef)context -{ - return CTRunGetImageBounds(_run, context, CFRangeMake(0, 0)); -} - -// range of the characters from the original string -- (NSRange)stringRange -{ - if (!_stringRange.length) - { - CFRange range = CTRunGetStringRange(_run); - - _stringRange = NSMakeRange(range.location + _line.stringLocationOffset, range.length); - } - - return _stringRange; -} - -- (void)fixMetricsFromAttachment -{ - if (self.attachment) - { - if (!_didCalculateMetrics) - { - [self calculateMetrics]; - } - - _descent = 0; - _ascent = self.attachment.displaySize.height; - } -} - -- (BOOL)isTrailingWhitespace -{ - if (_didDetermineTrailingWhitespace) - { - return _isTrailingWhitespace; - } - - BOOL isTrailing; - - if (_line.writingDirectionIsRightToLeft) - { - isTrailing = (self == [[_line glyphRuns] objectAtIndex:0]); - } - else - { - isTrailing = (self == [[_line glyphRuns] lastObject]); - } - - if (isTrailing) - { - if (!_didCalculateMetrics) - { - [self calculateMetrics]; - } - - // this is trailing whitespace if it matches the lines's trailing whitespace - if (_line.trailingWhitespaceWidth >= _width) - { - _isTrailingWhitespace = YES; - } - } - - _didDetermineTrailingWhitespace = YES; - return _isTrailingWhitespace; -} - -#pragma mark Properites -- (NSInteger)numberOfGlyphs -{ - if (!_numberOfGlyphs) - { - _numberOfGlyphs = CTRunGetGlyphCount(_run); - } - - return _numberOfGlyphs; -} - -- (NSDictionary *)attributes -{ - if (!_attributes) - { - _attributes = (__bridge NSDictionary *)CTRunGetAttributes(_run); - } - - return _attributes; -} - -- (DTTextAttachment *)attachment -{ - if (!_attachment) - { - if (!_didCheckForAttachmentInAttributes) - { - _attachment = [self.attributes objectForKey:NSAttachmentAttributeName]; - - _didCheckForAttachmentInAttributes = YES; - } - } - - return _attachment; -} - -- (BOOL)isHyperlink -{ - if (!_hyperlink) - { - if (!_didCheckForHyperlinkInAttributes) - { - _hyperlink = [self.attributes objectForKey:DTLinkAttribute]!=nil; - - _didCheckForHyperlinkInAttributes = YES; - } - } - - return _hyperlink; -} - -- (CGRect)frame -{ - if (!_didCalculateMetrics) - { - [self calculateMetrics]; - } - - return CGRectMake(_line.baselineOrigin.x + _offset, _line.baselineOrigin.y - _ascent, _width, _ascent + _descent); -} - -- (CGFloat)width -{ - if (!_didCalculateMetrics) - { - [self calculateMetrics]; - } - - return _width; -} - -- (CGFloat)ascent -{ - if (!_didCalculateMetrics) - { - [self calculateMetrics]; - } - - return _ascent; -} - -- (CGFloat)descent -{ - if (!_didCalculateMetrics) - { - [self calculateMetrics]; - } - - return _descent; -} - -- (CGFloat)leading -{ - if (!_didCalculateMetrics) - { - [self calculateMetrics]; - } - - return _leading; -} - -- (BOOL)writingDirectionIsRightToLeft -{ - CTRunStatus status = CTRunGetStatus(_run); - - return (status & kCTRunStatusRightToLeft)!=0; -} - -@synthesize frame = _frame; -@synthesize numberOfGlyphs = _numberOfGlyphs; -@synthesize attributes = _attributes; - -@synthesize ascent = _ascent; -@synthesize descent = _descent; -@synthesize leading = _leading; -@synthesize attachment = _attachment; -@synthesize writingDirectionIsRightToLeft = _writingDirectionIsRightToLeft; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrame+Cursor.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrame+Cursor.h deleted file mode 100644 index 254a03c..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrame+Cursor.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// DTCoreTextLayoutFrame+Cursor.h -// DTCoreText -// -// Created by Oliver Drobnik on 10.07.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTCoreTextLayoutFrame.h" - -/** - The **Cursor** category extends DTCoreTextLayoutFrame for working with a caret and determine the string index of touch coordinates. - */ - -@interface DTCoreTextLayoutFrame (Cursor) - -/** - Determines the closest string index to a point in the receiver's frame. - - This can be used to find the cursor position to position an input caret at. - @param point The point - @returns The resulting string index - */ -- (NSInteger)closestCursorIndexToPoint:(CGPoint)point; - -/** - The rectangle to draw a caret for a given index - @param index The string index for which to determine a cursor frame - @returns The cursor rectangle - */ -- (CGRect)cursorRectAtIndex:(NSInteger)index; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrame+Cursor.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrame+Cursor.m deleted file mode 100644 index ae603fe..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrame+Cursor.m +++ /dev/null @@ -1,114 +0,0 @@ -// -// DTCoreTextLayoutFrame+Cursor.m -// DTCoreText -// -// Created by Oliver Drobnik on 10.07.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTCoreTextLayoutFrame+Cursor.h" -#import "DTCoreTextLayoutLine.h" - -@implementation DTCoreTextLayoutFrame (Cursor) - -- (NSInteger)closestCursorIndexToPoint:(CGPoint)point -{ - NSArray *lines = self.lines; - - if (![lines count]) - { - return NSNotFound; - } - - DTCoreTextLayoutLine *firstLine = [lines objectAtIndex:0]; - if (point.y < CGRectGetMinY(firstLine.frame)) - { - return 0; - } - - DTCoreTextLayoutLine *lastLine = [lines lastObject]; - if (point.y > CGRectGetMaxY(lastLine.frame)) - { - NSRange stringRange = [self visibleStringRange]; - - if (stringRange.length) - { - return NSMaxRange([self visibleStringRange])-1; - } - } - - // find closest line - DTCoreTextLayoutLine *closestLine = nil; - CGFloat closestDistance = CGFLOAT_MAX; - - for (DTCoreTextLayoutLine *oneLine in lines) - { - // line contains point - if (CGRectGetMinY(oneLine.frame) <= point.y && CGRectGetMaxY(oneLine.frame) >= point.y) - { - closestLine = oneLine; - break; - } - - CGFloat top = CGRectGetMinY(oneLine.frame); - CGFloat bottom = CGRectGetMaxY(oneLine.frame); - - CGFloat distance = CGFLOAT_MAX; - - if (top > point.y) - { - distance = top - point.y; - } - else if (bottom < point.y) - { - distance = point.y - bottom; - } - - if (distance < closestDistance) - { - closestLine = oneLine; - closestDistance = distance; - } - } - - if (!closestLine) - { - return NSNotFound; - } - - NSInteger closestIndex = [closestLine stringIndexForPosition:point]; - - NSInteger maxIndex = NSMaxRange([closestLine stringRange])-1; - - if (closestIndex > maxIndex) - { - closestIndex = maxIndex; - } - - if (closestIndex>=0) - { - return closestIndex; - } - - return NSNotFound; -} - -- (CGRect)cursorRectAtIndex:(NSInteger)index -{ - DTCoreTextLayoutLine *line = [self lineContainingIndex:index]; - - if (!line) - { - return CGRectZero; - } - - CGFloat offset = [line offsetForStringIndex:index]; - - CGRect rect = line.frame; - rect.size.width = 3.0; - rect.origin.x += offset; - - return rect; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrame.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrame.h deleted file mode 100644 index 0a4b5d3..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrame.h +++ /dev/null @@ -1,385 +0,0 @@ -// -// DTCoreTextLayoutFrame.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/24/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" -#import "DTCoreTextConstants.h" - - -#import - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH -#import -#endif - -#if TARGET_OS_OSX -#import -#import -#endif - -@class DTCoreTextLayoutLine; -@class DTTextBlock; - -/** - A handler block that is called whenever a text block attributed is encountered during text drawing - */ -typedef void (^DTCoreTextLayoutFrameTextBlockHandler)(DTTextBlock *textBlock, CGRect frame, CGContextRef context, BOOL *shouldDrawDefaultBackground); - -/** - The drawing options for DTCoreTextLayoutFrame - */ -typedef NS_ENUM(NSUInteger, DTCoreTextLayoutFrameDrawingOptions) -{ - /** - The default method for drawing draws links and attachments. Links are drawn non-highlighted - */ - DTCoreTextLayoutFrameDrawingDefault = 1<<0, - - /** - Links are not drawn, e.g. if they are displayed via custom buttons - */ - DTCoreTextLayoutFrameDrawingOmitLinks = 1<<1, - - /** - Text attachments are omitted from drawing, e.g. if they are displayed via custom views - */ - DTCoreTextLayoutFrameDrawingOmitAttachments = 1<<2, - - /** - If links are drawn they are displayed with the highlighted variant - */ - DTCoreTextLayoutFrameDrawingDrawLinksHighlighted = 1<<3 -} ; - - -@class DTCoreTextLayouter; - -/** - This class represents a single frame of text and basically wraps CTFrame. It provides an array of text lines that fit in the given rectangle. - - Both styles of layouting are supported: open ended (suitable for scroll views) and limited to a given rectangle. To use the open-ended style specify `CGFLOAT_HEIGHT_UNKNOWN` for the height when creating a layout frame. - - The array of lines is built lazily the first time it is accessed or - for open-ended frames - when the frame property is being queried. - */ -@interface DTCoreTextLayoutFrame : NSObject -{ - CGRect _frame; - - NSArray *_lines; - NSArray *_paragraphRanges; - - NSArray *_textAttachments; - NSAttributedString *_attributedStringFragment; -} - - -/** - @name Creating Layout Frames - */ - - -/** - Creates a Layout Frame with the given frame using the attributed string loaded into the layouter. - - @param frame The rectangle specifying origin and size of available for text. Specify `CGFLOAT_WIDTH_UNKNOWN` to not limit the width. Specify `CGFLOAT_HEIGHT_UNKNOWN` to not limit the height. - @param layouter A reference to the layouter for this text box. - */ -- (id)initWithFrame:(CGRect)frame layouter:(DTCoreTextLayouter *)layouter; - - -/** - Creates a Layout Frame with the given frame using the attributed string loaded into the layouter. - - @param frame The rectangle specifying origin and size of available for text. Specify `CGFLOAT_WIDTH_UNKNOWN` to not limit the width. Specify `CGFLOAT_HEIGHT_UNKNOWN` to not limit the height. - @param layouter A reference to the layouter for the receiver. Note: The layouter owns the attributed string. - @param range The range within the attributed string to layout into the receiver. - */ -- (id)initWithFrame:(CGRect)frame layouter:(DTCoreTextLayouter *)layouter range:(NSRange)range; - - -/** - @name Getting Information - */ - - -/** - The string range that is visible i.e. fits into the given rectangle. For open-ended frames this is typically the entire string. For frame-contrained layout frames it is the substring that fits. - */ -- (NSRange)visibleStringRange; - - -/** - This is a copy of the attributed string owned by the layouter of the receiver. -*/ -- (NSAttributedString *)attributedStringFragment; - - -/** - An array that maps glyphs with string indices. - */ -- (NSArray *)stringIndices; - - -/** - The frame rectangle for the layout frame. - */ - @property (nonatomic, assign, readonly) CGRect frame; - - -/** - Calculates the frame that is covered by the text content. - - The result is calculated by enumerating over all lines and creating a union over all their frames. This is different than the frame property since this gets calculated. - @returns The area that is covered by the text content. - @note The width depends on how many glyphs Core Text was able to fit into a line. A line that gets broken might not have glyphs all the way to the margin. The y origin is always adjusted to be the same as frame since the first line might have some leading. The height is the minimum height that fits all layout lines. - */ -- (CGRect)intrinsicContentFrame; - - -/** - @name Drawing - */ - - -/** - Draws the receiver into the given graphics context. - - @warning This method is deprecated, use -[DTCoreTextLayoutFrame drawInContext:options:] instead - @param context A graphics context to draw into - @param drawImages Whether images should be drawn together with the text. If you specify `NO` then space is left blank where images would go and you have to add your own views to display these images. - @param drawLinks Whether hyperlinks should be drawn together with the text. If you specify `NO` then space is left blank where links would go and you have to add your own views to display these images. - */ -- (void)drawInContext:(CGContextRef)context drawImages:(BOOL)drawImages drawLinks:(BOOL)drawLinks __attribute__((deprecated("use -[DTCoreTextLayoutFrame drawInContext:options:] instead"))); - - -/** - Draws the receiver into the given graphics context. - - @param context A graphics context to draw into - @param options The drawing options. See DTCoreTextLayoutFrameDrawingOptions for available options. - */ -- (void)drawInContext:(CGContextRef)context options:(DTCoreTextLayoutFrameDrawingOptions)options; - - -/** - Set a custom handler to be executed before text belonging to a text block is drawn. Of type . -*/ -@property (nonatomic, copy) DTCoreTextLayoutFrameTextBlockHandler textBlockHandler; - - -/** - @name Working with Glyphs - */ - - -/** - Retrieves the index of the text line that contains the given glyph index. - - @param index The index of the glyph - @returns The index of the line containing this glyph - */ -- (NSInteger)lineIndexForGlyphIndex:(NSInteger)index; - - -/** - Retrieves the frame of the glyph at the given glyph index. - - @param index The index of the glyph - @returns The frame of this glyph - */ -- (CGRect)frameOfGlyphAtIndex:(NSInteger)index; - - -/** - @name Working with Text Lines - */ - - -/** - The text lines that belong to the receiver. - */ -@property (nonatomic, strong, readonly) NSArray *lines; - - -/** - The text lines that are visible inside the given rectangle. Also incomplete lines are included. - - @param rect The rectangle - @returns An array, sorted from top to bottom, of lines at least partially visible - */ -- (NSArray *)linesVisibleInRect:(CGRect)rect; - - -/** - The text lines that are visible inside the given rectangle. Only fully visible lines are included. - - @param rect The rectangle - @returns An array, sorted from top to bottom, of lines fully visible - */ -- (NSArray *)linesContainedInRect:(CGRect)rect; - - -/** - The layout line that contains the given string index. - - @param index The string index - @returns The layout line that this index belongs to - */ -- (DTCoreTextLayoutLine *)lineContainingIndex:(NSUInteger)index; - - -/** - Determins if the given line is the first in a paragraph. - - This is needed for example to determine whether paragraphSpaceBefore needs to be applied before it. - @param line The Line - @returns `YES` if the given line is the first in a paragraph - */ -- (BOOL)isLineFirstInParagraph:(DTCoreTextLayoutLine *)line; - - -/** - Determins if the given line is the last in a paragraph. - - This is needed for example to determine whether paragraph spacing needs to be applied after it. - @param line The Line - @returns `YES` if the given line is the last in a paragraph - */ -- (BOOL)isLineLastInParagraph:(DTCoreTextLayoutLine *)line; - - -/** - Finds the appropriate baseline origin for a line to position it at the correct distance from a previous line. - - Support Layout options are: - - - DTCoreTextLayoutFrameLinePositioningAlgorithmWebKit, - - DTCoreTextLayoutFrameLinePositioningAlgorithmLegacy - - @param line The line - @param previousLine The line after which to position the line. - @param options The layout options to employ for positioning lines - @returns The correct baseline origin for the line. - */ -- (CGPoint)baselineOriginToPositionLine:(DTCoreTextLayoutLine *)line afterLine:(DTCoreTextLayoutLine *)previousLine options:(DTCoreTextLayoutFrameLinePositioningOptions)options; - -/** - Finds the appropriate baseline origin for a line to position it at the correct distance from a previous line using the DTCoreTextLayoutFrameLinePositioningOptionAlgorithmLegacy algorithm. - - @warning This method is deprecated, use -[baselineOriginToPositionLine:afterLine:algorithm:] instead - @param line The line - @param previousLine The line after which to position the line. - @returns The correct baseline origin for the line. - */ -- (CGPoint)baselineOriginToPositionLine:(DTCoreTextLayoutLine *)line afterLine:(DTCoreTextLayoutLine *)previousLine __attribute__((deprecated("use use -[baselineOriginToPositionLine:afterLine:algorithm:] instead")));; - -/** - The ratio to decide when to create a justified line - */ -@property (nonatomic, readwrite) CGFloat justifyRatio; - -/** - @name Text Attachments - */ - - -/** - The array of all instances that belong to the receiver. - @returns All text attachments of the receiver. - */ -- (NSArray *)textAttachments; - - -/** - The array of all DTTextAttachment instances that belong to the receiver which also match the specified predicate. - - @param predicate A predicate that uses properties of to reduce the returned array - @returns A filtered array of text attachments. - */ -- (NSArray *)textAttachmentsWithPredicate:(NSPredicate *)predicate; - - -/** - @name Getting Paragraph Info - */ - - -/** - Finding which paragraph a given string index belongs to. - - @param stringIndex The index in the string to look for - @returns The index of the paragraph, numbered from 0 - */ -- (NSUInteger)paragraphIndexContainingStringIndex:(NSUInteger)stringIndex; - - -/** - Determines the paragraph range (of paragraph indexes) that encompass the entire given string Range. - - @param stringRange The string range for which the paragraph range is sought for - @returns The range of paragraphs that fully enclose the string range - */ -- (NSRange)paragraphRangeContainingStringRange:(NSRange)stringRange; - - -/** - The text lines that belong to the specified paragraph. - - @param index The index of the paragraph - @returns An array, sorted from top to bottom, of lines in this paragraph - */ -- (NSArray *)linesInParagraphAtIndex:(NSUInteger)index; - - -/** - An array of `NSRange` values encapsulated in `NSValue` instances. Each range is the string range contained in the corresponding paragraph. -*/ -@property (nonatomic, strong, readonly) NSArray *paragraphRanges; - - -/** - @name Debugging - */ - - -/** - Switches on the debug drawing mode where individual glyph runs, baselines, et cetera get individually marked. - - @param debugFrames if the debug drawing should occur - */ -+ (void)setShouldDrawDebugFrames:(BOOL)debugFrames; - - -/** - @returns the current value of the debug frame drawing - */ -+ (BOOL)shouldDrawDebugFrames; - -/** - @name Truncation - */ - - -/** - Maximum number of lines to display before truncation. Default is 0 which indicates no limit. - */ -@property(nonatomic, assign) NSInteger numberOfLines; - - -/** - Line break mode used to indicate how truncation should occur - */ -@property(nonatomic, assign) NSLineBreakMode lineBreakMode; - - -/** - Optional attributed string to use as truncation indicator. If nil, will use "…" w/ attributes taken from text being truncated - */ -@property(nonatomic, strong)NSAttributedString *truncationString; - - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrame.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrame.m deleted file mode 100644 index 32755c2..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrame.m +++ /dev/null @@ -1,1969 +0,0 @@ -// -// DTCoreTextLayoutFrame.m -// DTCoreText -// -// Created by Oliver Drobnik on 1/24/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCoreTextConstants.h" -#import "DTCoreTextLayouter.h" -#import "DTCoreTextLayoutLine.h" -#import "DTCoreTextLayoutFrame.h" -#import "DTCoreTextParagraphStyle.h" -#import "NSDictionary+DTCoreText.h" -#import "DTTextBlock.h" -#import "DTCoreTextFunctions.h" -#import "DTTextAttachment.h" -#import "NSString+Paragraphs.h" -#import "CTLineUtils.h" - -#import - -// global flag that shows debug frames -static BOOL _DTCoreTextLayoutFramesShouldDrawDebugFrames = NO; - -@implementation DTCoreTextLayoutFrame -{ - CTFrameRef _textFrame; - CTFramesetterRef _framesetter; - - NSRange _requestedStringRange; - NSRange _stringRange; - - CGFloat _additionalPaddingAtBottom; // when last line in a text block with padding - - NSInteger _numberLinesFitInFrame; - DTCoreTextLayoutFrameTextBlockHandler _textBlockHandler; - - CGFloat _longestLayoutLineWidth; -} - -// makes a frame for a specific part of the attributed string of the layouter -- (id)initWithFrame:(CGRect)frame layouter:(DTCoreTextLayouter *)layouter range:(NSRange)range -{ - self = [super init]; - - if (self) - { - _frame = frame; - - _attributedStringFragment = [layouter.attributedString mutableCopy]; - - // determine correct target range - _requestedStringRange = range; - NSUInteger stringLength = [_attributedStringFragment length]; - - if (_requestedStringRange.location >= stringLength) - { - return nil; - } - - if (_requestedStringRange.length==0 || NSMaxRange(_requestedStringRange) > stringLength) - { - _requestedStringRange.length = stringLength - _requestedStringRange.location; - } - - CFRange cfRange = CFRangeMake(_requestedStringRange.location, _requestedStringRange.length); - _framesetter = layouter.framesetter; - - if (_framesetter) - { - CFRetain(_framesetter); - - CGMutablePathRef path = CGPathCreateMutable(); - CGPathAddRect(path, NULL, frame); - - _textFrame = CTFramesetterCreateFrame(_framesetter, cfRange, path, NULL); - - CGPathRelease(path); - } - else - { - // Strange, should have gotten a valid framesetter - return nil; - } - - _justifyRatio = 0.6f; - } - - return self; -} - -// makes a frame for the entire attributed string of the layouter -- (id)initWithFrame:(CGRect)frame layouter:(DTCoreTextLayouter *)layouter -{ - return [self initWithFrame:frame layouter:layouter range:NSMakeRange(0, 0)]; -} - -- (void)dealloc -{ - if (_textFrame) - { - CFRelease(_textFrame); - } - - if (_framesetter) - { - CFRelease(_framesetter); - } -} - -#ifndef COVERAGE -// exclude method from coverage testing - -- (NSString *)description -{ - return [self.lines description]; -} - -#endif - -#pragma mark - Positioning Lines - -- (CGPoint)_algorithmLegacy_BaselineOriginToPositionLine:(DTCoreTextLayoutLine *)line afterLine:(DTCoreTextLayoutLine *)previousLine -{ - CGPoint lineOrigin = previousLine.baselineOrigin; - - NSInteger lineStartIndex = line.stringRange.location; - - CTParagraphStyleRef lineParagraphStyle = (__bridge CTParagraphStyleRef)[_attributedStringFragment - attribute:(id)kCTParagraphStyleAttributeName - atIndex:lineStartIndex effectiveRange:NULL]; - - //Meet the first line in this frame - if (!previousLine) - { - // The first line may or may not be the start of paragraph. It depends on the the range passing to - // - (DTCoreTextLayoutFrame *)layoutFrameWithRect:(CGRect)frame range:(NSRange)range; - // So Check it in a safe way: - if ([self isLineFirstInParagraph:line]) - { - - CGFloat paraSpacingBefore = 0; - - if (CTParagraphStyleGetValueForSpecifier(lineParagraphStyle, kCTParagraphStyleSpecifierParagraphSpacingBefore, sizeof(paraSpacingBefore), ¶SpacingBefore)) - { - lineOrigin.y += paraSpacingBefore; - } - - // preserve own baseline x - lineOrigin.x = line.baselineOrigin.x; - - // origins are rounded - lineOrigin.y = ceil(lineOrigin.y); - - return lineOrigin; - - } - - } - - // get line height in px if it is specified for this line - CGFloat lineHeight = 0; - CGFloat minLineHeight = 0; - CGFloat maxLineHeight = 0; - BOOL usesForcedLineHeight = NO; - - CGFloat usedLeading = line.leading; - - if (usedLeading == 0.0f) - { - // font has no leading, so we fake one (e.g. Helvetica) - CGFloat tmpHeight = line.ascent + line.descent; - usedLeading = ceil(0.2f * tmpHeight); - - if (usedLeading>20) - { - // we have a large image increasing the ascender too much for this calc to work - usedLeading = 0; - } - } - else - { - // make sure that we don't have less than 10% of line height as leading - usedLeading = ceil(MAX((line.ascent + line.descent)*0.1f, usedLeading)); - } - - if (CTParagraphStyleGetValueForSpecifier(lineParagraphStyle, kCTParagraphStyleSpecifierMinimumLineHeight, sizeof(minLineHeight), &minLineHeight)) - { - usesForcedLineHeight = YES; - - if (lineHeight0.0f) - { - lineHeight *= lineHeightMultiplier; - } - } - - if (CTParagraphStyleGetValueForSpecifier(lineParagraphStyle, kCTParagraphStyleSpecifierMaximumLineHeight, sizeof(maxLineHeight), &maxLineHeight)) - { - if (maxLineHeight>0 && lineHeight>maxLineHeight) - { - lineHeight = maxLineHeight; - } - } - - lineOrigin.y += lineHeight; - - // preserve own baseline x - lineOrigin.x = line.baselineOrigin.x; - - // prevent overlap of a line with small font size with line before it - if (!usesForcedLineHeight) - { - // only if there IS a line before it AND the line height is not fixed - CGFloat previousLineBottom = CGRectGetMaxY(previousLine.frame); - - if (lineOrigin.y - line.ascent < previousLineBottom) - { - // move baseline origin down far enough - lineOrigin.y = previousLineBottom + line.ascent; - } - } - - // origins are rounded - lineOrigin.y = ceil(lineOrigin.y); - - return lineOrigin; -} - -// determines the "half leading" -- (CGFloat)_algorithmWebKit_halfLeadingOfLine:(DTCoreTextLayoutLine *)line -{ - CGFloat maxFontSize = [line lineHeight]; - - DTCoreTextParagraphStyle *paragraphStyle = [line paragraphStyle]; - - if (paragraphStyle.minimumLineHeight != 0 && paragraphStyle.minimumLineHeight > maxFontSize) - { - maxFontSize = paragraphStyle.minimumLineHeight; - } - - if (paragraphStyle.maximumLineHeight != 0 && paragraphStyle.maximumLineHeight < maxFontSize) - { - maxFontSize = paragraphStyle.maximumLineHeight; - } - - CGFloat leading; - - if (paragraphStyle.lineHeightMultiple > 0) - { - leading = maxFontSize * paragraphStyle.lineHeightMultiple; - } - else - { - // reasonable "normal" - leading = maxFontSize * 1.1f; - } - - // subtract inline box height - CGFloat inlineBoxHeight = line.ascent + line.descent; - - return (leading - inlineBoxHeight)/2.0f; -} - - -- (CGPoint)_algorithmWebKit_BaselineOriginToPositionLine:(DTCoreTextLayoutLine *)line afterLine:(DTCoreTextLayoutLine *)previousLine -{ - CGPoint baselineOrigin = previousLine.baselineOrigin; - - if (previousLine) - { - baselineOrigin.y = CGRectGetMaxY(previousLine.frame); - - CGFloat halfLeadingFromText = [self _algorithmWebKit_halfLeadingOfLine:previousLine]; - - if (previousLine.attachments) - { - // only add half leading if there are no attachments, this prevents line from being shifted up due to negative half leading - if (halfLeadingFromText>0) - { - baselineOrigin.y += halfLeadingFromText; - } - } - else - { - baselineOrigin.y += halfLeadingFromText; - } - - // add previous line's after paragraph spacing - if ([self isLineLastInParagraph:previousLine]) - { - DTCoreTextParagraphStyle *paragraphStyle = [previousLine paragraphStyle]; - baselineOrigin.y += paragraphStyle.paragraphSpacing; - } - } - else - { - // first line in frame - baselineOrigin = _frame.origin; - } - - baselineOrigin.y += line.ascent; - - CGFloat halfLeadingFromText = [self _algorithmWebKit_halfLeadingOfLine:line]; - - if (line.attachments) - { - // only add half leading if there are no attachments, this prevents line from being shifted up due to negative half leading - if (halfLeadingFromText>0) - { - baselineOrigin.y += halfLeadingFromText; - } - } - else - { - baselineOrigin.y += halfLeadingFromText; - } - - DTCoreTextParagraphStyle *paragraphStyle = [line paragraphStyle]; - - // add current line's before paragraph spacing - if ([self isLineFirstInParagraph:line]) - { - baselineOrigin.y += paragraphStyle.paragraphSpacingBefore; - } - - // add padding for closed text blocks - for (DTTextBlock *previousTextBlock in previousLine.textBlocks) - { - if (![line.textBlocks containsObject:previousTextBlock]) - { - baselineOrigin.y += previousTextBlock.padding.bottom; - } - } - - // add padding for newly opened text blocks - for (DTTextBlock *currentTextBlock in line.textBlocks) - { - if (![previousLine.textBlocks containsObject:currentTextBlock]) - { - baselineOrigin.y += currentTextBlock.padding.top; - } - } - - // origins are rounded - baselineOrigin.y = ceil(baselineOrigin.y); - - return baselineOrigin; -} - - -- (CGPoint)baselineOriginToPositionLine:(DTCoreTextLayoutLine *)line afterLine:(DTCoreTextLayoutLine *)previousLine options:(DTCoreTextLayoutFrameLinePositioningOptions)options -{ - if (options & DTCoreTextLayoutFrameLinePositioningOptionAlgorithmWebKit) - { - return [self _algorithmWebKit_BaselineOriginToPositionLine:line afterLine:previousLine]; - } - - if (options & DTCoreTextLayoutFrameLinePositioningOptionAlgorithmLegacy) - { - return [self _algorithmLegacy_BaselineOriginToPositionLine:line afterLine:previousLine]; - } - - return CGPointZero; -} - -// deprecated -- (CGPoint)baselineOriginToPositionLine:(DTCoreTextLayoutLine *)line afterLine:(DTCoreTextLayoutLine *)previousLine -{ - return [self baselineOriginToPositionLine:line afterLine:previousLine options:DTCoreTextLayoutFrameLinePositioningOptionAlgorithmWebKit]; -} - -#pragma mark - Building the Lines - -/* - Builds the array of lines with the internal typesetter of our framesetter. No need to correct line origins in this case because they are placed correctly in the first place. This version supports text boxes. - */ -- (void)_buildLinesWithTypesetter -{ - // framesetter keeps internal reference, no need to retain - CTTypesetterRef typesetter = CTFramesetterGetTypesetter(_framesetter); - - NSMutableArray *typesetLines = [NSMutableArray array]; - - DTCoreTextLayoutLine *previousLine = nil; - - // need the paragraph ranges to know if a line is at the beginning of paragraph - NSMutableArray *paragraphRanges = [[self paragraphRanges] mutableCopy]; - - NSRange currentParagraphRange = [[paragraphRanges objectAtIndex:0] rangeValue]; - - // we start out in the requested range, length will be set by the suggested line break function - NSRange lineRange = _requestedStringRange; - - // maximum values for abort of loop - CGFloat maxY = CGRectGetMaxY(_frame); - NSUInteger maxIndex = NSMaxRange(_requestedStringRange); - NSUInteger fittingLength = 0; - BOOL shouldTruncateLine = NO; - - do // for each line - { - while (lineRange.location >= (currentParagraphRange.location+currentParagraphRange.length)) - { - // we are outside of this paragraph, so we go to the next - [paragraphRanges removeObjectAtIndex:0]; - - currentParagraphRange = [[paragraphRanges objectAtIndex:0] rangeValue]; - } - - BOOL isAtBeginOfParagraph = (currentParagraphRange.location == lineRange.location); - - CGFloat headIndent = 0; - CGFloat tailIndent = 0; - - // get the paragraph style at this index - CTParagraphStyleRef paragraphStyle = (__bridge CTParagraphStyleRef)[_attributedStringFragment attribute:(id)kCTParagraphStyleAttributeName atIndex:lineRange.location effectiveRange:NULL]; - - if (isAtBeginOfParagraph) - { - CTParagraphStyleGetValueForSpecifier(paragraphStyle, kCTParagraphStyleSpecifierFirstLineHeadIndent, sizeof(headIndent), &headIndent); - } - else - { - CTParagraphStyleGetValueForSpecifier(paragraphStyle, kCTParagraphStyleSpecifierHeadIndent, sizeof(headIndent), &headIndent); - } - - CTParagraphStyleGetValueForSpecifier(paragraphStyle, kCTParagraphStyleSpecifierTailIndent, sizeof(tailIndent), &tailIndent); - - // add left padding to offset - CGFloat lineOriginX; - CGFloat availableSpace; - - NSArray *textBlocks = [_attributedStringFragment attribute:DTTextBlocksAttribute atIndex:lineRange.location effectiveRange:NULL]; - CGFloat totalLeftPadding = 0; - CGFloat totalRightPadding = 0; - - for (DTTextBlock *oneTextBlock in textBlocks) - { - totalLeftPadding += oneTextBlock.padding.left; - totalRightPadding += oneTextBlock.padding.right; - } - - if (tailIndent<=0) - { - // negative tail indent is measured from trailing margin (we assume LTR here) - availableSpace = _frame.size.width - headIndent - totalRightPadding + tailIndent - totalLeftPadding; - } - else - { - availableSpace = tailIndent - headIndent - totalLeftPadding - totalRightPadding; - } - - - CGFloat offset = totalLeftPadding; - - // if first character is a tab, then it is positioned without the indentation - if (![[[_attributedStringFragment string] substringWithRange:NSMakeRange(lineRange.location, 1)] isEqualToString:@"\t"]) - { - offset += headIndent; - } - - // find how many characters we get into this line - lineRange.length = CTTypesetterSuggestLineBreak(typesetter, lineRange.location, availableSpace); - - if (NSMaxRange(lineRange) > maxIndex) - { - // only layout as much as was requested - lineRange.length = maxIndex - lineRange.location; - } - - - // determine whether this is a normal line or if it should be truncated - shouldTruncateLine = ((self.numberOfLines>0 && [typesetLines count]+1==self.numberOfLines) || (_numberLinesFitInFrame>0 && _numberLinesFitInFrame==[typesetLines count]+1)); - - CTLineRef line; - BOOL isHyphenatedString = NO; - - if (!shouldTruncateLine) - { - static const unichar softHypen = 0x00AD; - NSString *lineString = [[_attributedStringFragment attributedSubstringFromRange:lineRange] string]; - unichar lastChar = [lineString characterAtIndex:[lineString length] - 1]; - if (softHypen == lastChar) - { - NSMutableAttributedString *hyphenatedString = [[_attributedStringFragment attributedSubstringFromRange:lineRange] mutableCopy]; - NSRange replaceRange = NSMakeRange(hyphenatedString.length - 1, 1); - [hyphenatedString replaceCharactersInRange:replaceRange withString:@"-"]; - line = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)hyphenatedString); - isHyphenatedString = YES; - } - else - { - // create a line to fit - line = CTTypesetterCreateLine(typesetter, CFRangeMake(lineRange.location, lineRange.length)); - } - } - else - { - // extend the line to the end of the current paragraph - // if we extend to the entire to the entire text range - // it is possible to pull lines up from paragraphs below us - NSRange oldLineRange = lineRange; - lineRange.length = maxIndex-lineRange.location; - CTLineRef baseLine = CTTypesetterCreateLine(typesetter, CFRangeMake(lineRange.location, lineRange.length)); - - // convert lineBreakMode to CoreText type - CTLineTruncationType truncationType = DTCTLineTruncationTypeFromNSLineBreakMode(self.lineBreakMode); - - // prepare truncation string - NSAttributedString * attribStr = self.truncationString; - if(attribStr == nil) - { - NSRange range; - NSInteger index = oldLineRange.location; - if (truncationType == kCTLineTruncationEnd) - { - index += (oldLineRange.length > 0 ? oldLineRange.length - 1 : 0); - } - else if (truncationType == kCTLineTruncationMiddle) - { - index += (oldLineRange.length > 1 ? (oldLineRange.length/2 - 1) : 0); - } - NSDictionary * attributes = [_attributedStringFragment attributesAtIndex:index effectiveRange:&range]; - attribStr = [[NSAttributedString alloc] initWithString:@"…" attributes:attributes]; - } - - CTLineRef elipsisLineRef = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)(attribStr)); - - // create the truncated line - line = CTLineCreateTruncatedLine(baseLine, availableSpace, truncationType, elipsisLineRef); - - // check if truncation occurred - BOOL truncationOccured = !areLinesEqual(baseLine, line); - // if yes check was it before the end of the current paragraph or after - NSUInteger endOfParagraphIndex = NSMaxRange(currentParagraphRange); - // this works only for truncation at the end - if (truncationType == kCTLineTruncationEnd) - { - if (truncationOccured) - { - CFIndex truncationIndex = getTruncationIndex(line, elipsisLineRef); - // if truncation occurred after the end of the paragraph - // move truncation token to the end of the paragraph - if (truncationIndex > endOfParagraphIndex) - { - NSAttributedString *subStr = [_attributedStringFragment attributedSubstringFromRange:NSMakeRange(lineRange.location, endOfParagraphIndex - lineRange.location - 1)]; - NSMutableAttributedString *attrMutStr = [subStr mutableCopy]; - [attrMutStr appendAttributedString:attribStr]; - CFRelease(line); - line = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)(attrMutStr)); - } - // otherwise, everything is OK - } - else - { - // if no truncation happened, force addition of - // the truncation token to the end of the paragraph - if (maxIndex != endOfParagraphIndex) - { - NSAttributedString *subStr = [_attributedStringFragment attributedSubstringFromRange:NSMakeRange(lineRange.location, endOfParagraphIndex - lineRange.location - 1)]; - NSMutableAttributedString *attrMutStr = [subStr mutableCopy]; - [attrMutStr appendAttributedString:attribStr]; - CFRelease(line); - line = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)(attrMutStr)); - } - } - } - - // clean up - CFRelease(baseLine); - CFRelease(elipsisLineRef); - } - - // we need all metrics so get the at once - CGFloat currentLineWidth = (CGFloat)CTLineGetTypographicBounds(line, NULL, NULL, NULL); - - // adjust lineOrigin based on paragraph text alignment - CTTextAlignment textAlignment; - - if (!CTParagraphStyleGetValueForSpecifier(paragraphStyle, kCTParagraphStyleSpecifierAlignment, sizeof(textAlignment), &textAlignment)) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - textAlignment = kCTTextAlignmentNatural; -#else - textAlignment = kCTNaturalTextAlignment; -#endif - } - - // determine writing direction - BOOL isRTL = NO; - CTWritingDirection baseWritingDirection; - - if (CTParagraphStyleGetValueForSpecifier(paragraphStyle, kCTParagraphStyleSpecifierBaseWritingDirection, sizeof(baseWritingDirection), &baseWritingDirection)) - { - isRTL = (baseWritingDirection == kCTWritingDirectionRightToLeft); - } - else - { - baseWritingDirection = kCTWritingDirectionNatural; - } - - switch (textAlignment) - { - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - case kCTTextAlignmentLeft: -#else - case kCTLeftTextAlignment: -#endif - { - lineOriginX = _frame.origin.x + offset; - // nothing to do - break; - } - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - case kCTTextAlignmentNatural: -#else - case kCTNaturalTextAlignment: -#endif - { - lineOriginX = _frame.origin.x + offset; - - if (baseWritingDirection != kCTWritingDirectionRightToLeft) - { - break; - } - - // right alignment falls through - } - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - case kCTTextAlignmentRight: -#else - case kCTRightTextAlignment: -#endif - { - lineOriginX = _frame.origin.x + offset + (CGFloat)CTLineGetPenOffsetForFlush(line, 1.0, availableSpace); - - break; - } - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - case kCTTextAlignmentCenter: -#else - case kCTCenterTextAlignment: -#endif - { - lineOriginX = _frame.origin.x + offset + (CGFloat)CTLineGetPenOffsetForFlush(line, 0.5, availableSpace); - - break; - } - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - case kCTTextAlignmentJustified: -#else - case kCTJustifiedTextAlignment: -#endif - { - BOOL isAtEndOfParagraph = (currentParagraphRange.location+currentParagraphRange.length <= lineRange.location+lineRange.length || - [[_attributedStringFragment string] characterAtIndex:lineRange.location+lineRange.length-1]==0x2028); - - // only justify if not last line, not
, and if the line width is longer than _justifyRatio of the frame - // avoids over-stretching - if( !isAtEndOfParagraph && (currentLineWidth > _justifyRatio * _frame.size.width) ) - { - // create a justified line and replace the current one with it - CTLineRef justifiedLine = CTLineCreateJustifiedLine(line, 1.0f, availableSpace); - - // CTLineCreateJustifiedLine sometimes fails if the line ends with 0x00AD (soft hyphen) and contains cyrillic chars - if (justifiedLine) - { - CFRelease(line); - line = justifiedLine; - } - } - - if (isRTL) - { - // align line with right margin - lineOriginX = _frame.origin.x + offset + (CGFloat)CTLineGetPenOffsetForFlush(line, 1.0, availableSpace); - } - else - { - // align line with left margin - lineOriginX = _frame.origin.x + offset; - } - - break; - } - } - - if (!line) - { - continue; - } - - // wrap it - DTCoreTextLayoutLine *newLine = [[DTCoreTextLayoutLine alloc] initWithLine:line - stringLocationOffset:isHyphenatedString ? lineRange.location : 0]; - newLine.writingDirectionIsRightToLeft = isRTL; - CFRelease(line); - - // determine position of line based on line before it - - CGPoint newLineBaselineOrigin = [self _algorithmWebKit_BaselineOriginToPositionLine:newLine afterLine:previousLine]; - newLineBaselineOrigin.x = lineOriginX; - newLine.baselineOrigin = newLineBaselineOrigin; - - // abort layout if we left the configured frame - CGFloat lineBottom = CGRectGetMaxY(newLine.frame); - - // screen bottom last line min padding - if (newLine.textBlocks.count > 0) { - DTTextBlock *lineTextBlock = newLine.textBlocks[0]; - lineBottom = lineBottom + lineTextBlock.padding.bottom; - } - - if (lineBottom>maxY) - { - if ([typesetLines count] && self.lineBreakMode) - { - _numberLinesFitInFrame = [typesetLines count]; - [self _buildLinesWithTypesetter]; - - return; - } - else - { - // doesn't fit any more - break; - } - } - - [typesetLines addObject:newLine]; - fittingLength += lineRange.length; - - lineRange.location += lineRange.length; - previousLine = newLine; - } - while (lineRange.location < maxIndex && !shouldTruncateLine); - - _lines = typesetLines; - - if (![_lines count]) - { - // no lines fit - _stringRange = NSMakeRange(0, 0); - - return; - } - - // now we know how many characters fit - _stringRange.location = _requestedStringRange.location; - _stringRange.length = fittingLength; - - // at this point we can correct the frame if it is open-ended - if (_frame.size.height == CGFLOAT_HEIGHT_UNKNOWN) - { - DTCoreTextLayoutLine *lastLine = [_lines lastObject]; - - CGFloat totalPadding = 0; - - for (DTTextBlock *oneTextBlock in lastLine.textBlocks) - { - totalPadding += oneTextBlock.padding.bottom; - } - - // need to add bottom padding if in text block - _additionalPaddingAtBottom = totalPadding; - } -} - -/** - DEPRECATED: this was the original way of getting the lines - */ - -- (void)_buildLinesWithStandardFramesetter -{ - // get lines (don't own it so no release) - CFArrayRef cflines = CTFrameGetLines(_textFrame); - - if (!cflines) - { - // probably no string set - return; - } - - CGPoint *origins = malloc(sizeof(CGPoint)*CFArrayGetCount(cflines)); - CTFrameGetLineOrigins(_textFrame, CFRangeMake(0, 0), origins); - - NSMutableArray *tmpLines = [[NSMutableArray alloc] initWithCapacity:CFArrayGetCount(cflines)]; - - NSInteger lineIndex = 0; - - for (id oneLine in (__bridge NSArray *)cflines) - { - CGPoint lineOrigin = origins[lineIndex]; - - lineOrigin.y = _frame.size.height - lineOrigin.y + _frame.origin.y; - lineOrigin.x += _frame.origin.x; - - DTCoreTextLayoutLine *newLine = [[DTCoreTextLayoutLine alloc] initWithLine:(__bridge CTLineRef)oneLine]; - newLine.baselineOrigin = lineOrigin; - - [tmpLines addObject:newLine]; - - lineIndex++; - } - free(origins); - - _lines = tmpLines; - - // need to get the visible range here - CFRange fittingRange = CTFrameGetStringRange(_textFrame); - _stringRange.location = fittingRange.location; - _stringRange.length = fittingRange.length; -} - -- (void)_buildLines -{ - // only build lines if frame is legal - if (_frame.size.width<=0) - { - return; - } - - // note: building line by line with typesetter - [self _buildLinesWithTypesetter]; - - //[self _buildLinesWithStandardFramesetter]; -} - -- (NSArray *)lines -{ - if (!_lines) - { - [self _buildLines]; - } - - return _lines; -} - -- (NSArray *)linesVisibleInRect:(CGRect)rect -{ - NSMutableArray *tmpArray = [NSMutableArray arrayWithCapacity:[self.lines count]]; - - CGFloat minY = CGRectGetMinY(rect); - CGFloat maxY = CGRectGetMaxY(rect); - - for (DTCoreTextLayoutLine *oneLine in self.lines) - { - CGRect lineFrame = oneLine.frame; - - // lines before the rect - if (CGRectGetMaxY(lineFrame) maxY) - { - break; - } - - // CGRectIntersectsRect returns false if the frame has 0 width, which - // lines that consist only of line-breaks have. Set the min-width - // to one to work-around. - lineFrame.size.width = lineFrame.size.width>1?lineFrame.size.width:1; - - if (CGRectIntersectsRect(rect, lineFrame)) - { - [tmpArray addObject:oneLine]; - } - } - - return tmpArray; -} - -- (NSArray *)linesContainedInRect:(CGRect)rect -{ - NSMutableArray *tmpArray = [NSMutableArray arrayWithCapacity:[self.lines count]]; - - CGFloat minY = CGRectGetMinY(rect); - CGFloat maxY = CGRectGetMaxY(rect); - - for (DTCoreTextLayoutLine *oneLine in self.lines) - { - CGRect lineFrame = oneLine.frame; - - // lines before the rect - if (CGRectGetMaxY(lineFrame) maxY) - { - break; - } - - if (CGRectContainsRect(rect, lineFrame)) - { - [tmpArray addObject:oneLine]; - } - } - - return tmpArray; -} - - -#pragma mark - Text Block Helpers - -// determines the frame to use for a text block with a given effect range at a specific block level -- (CGRect)_blockFrameForEffectiveRange:(NSRange)effectiveRange level:(NSUInteger)level -{ - CGRect blockFrame; - - DTCoreTextLayoutLine *screenLastLine = [self.lines lastObject]; - DTCoreTextLayoutLine *screenFirstLine = [self.lines firstObject]; - // judge the effectiveRange is out of screen - if (NSMaxRange(screenLastLine.stringRange) <= effectiveRange.location || screenFirstLine.stringRange.location >= NSMaxRange(effectiveRange)) - { - return CGRectZero; - } - - // we know extent of block, get frame - DTCoreTextLayoutLine *firstBlockLine = [self lineContainingIndex:effectiveRange.location]; - DTCoreTextLayoutLine *lastBlockLine = [self lineContainingIndex:NSMaxRange(effectiveRange)-1]; - - // start with frame spanned from these lines - blockFrame.origin = firstBlockLine.frame.origin; - blockFrame.origin.x = _frame.origin.x; - blockFrame.size.width = _frame.size.width; - - if (!firstBlockLine) - { - blockFrame.origin.y = _frame.origin.y; - } - - blockFrame.size.height = CGRectGetMaxY(lastBlockLine.frame) - blockFrame.origin.y; - - if (!lastBlockLine) - { - blockFrame.size.height = CGRectGetMaxY(_frame) - blockFrame.origin.y; - } - - // top paddings we get from first line - for (NSInteger i = [firstBlockLine.textBlocks count]-1; i>=level;i--) - { - if (i<0) - { - break; - } - - DTTextBlock *oneTextBlock = [firstBlockLine.textBlocks objectAtIndex:i]; - - blockFrame.origin.y -= oneTextBlock.padding.top; - blockFrame.size.height += oneTextBlock.padding.top; - } - - // top padding we get from last line - for (NSInteger i = [lastBlockLine.textBlocks count]-1; i>=level;i--) - { - if (i<0) - { - break; - } - - DTTextBlock *oneTextBlock = [lastBlockLine.textBlocks objectAtIndex:i]; - - blockFrame.size.height += oneTextBlock.padding.bottom; - } - - // adjust left and right margins with block stack padding - for (int i=0; i drawableAttachment = (id)attachment; - - // frame might be different due to image vertical alignment - CGFloat ascender = [attachment ascentForLayout]; - CGRect rect = CGRectMake(oneRun.frame.origin.x, oneLine.baselineOrigin.y - ascender, attachment.displaySize.width, attachment.displaySize.height); - - [drawableAttachment drawInRect:rect context:context]; - } - - if (!drawLinks && oneRun.isHyperlink) - { - continue; - } - - // don't draw decorations on images - if (attachment) - { - continue; - } - - // don't draw background, strikeout or underline for trailing white space - if ([oneRun isTrailingWhitespace]) - { - continue; - } - - [self _setForgroundColorInContext:context forGlyphRun:oneRun options:options]; - - [oneRun drawDecorationInContext:context]; - } - } - - // Flip the coordinate system - CGContextSetTextMatrix(context, CGAffineTransformIdentity); - CGContextScaleCTM(context, 1.0, -1.0); - CGContextTranslateCTM(context, 0, -self.frame.size.height); - - // instead of using the convenience method to draw the entire frame, we draw individual glyph runs - - for (DTCoreTextLayoutLine *oneLine in visibleLines) - { - for (DTCoreTextGlyphRun *oneRun in oneLine.glyphRuns) - { - if (!CGRectIntersectsRect(rect, oneRun.frame)) - { - continue; - } - - if (!drawLinks && oneRun.isHyperlink) - { - continue; - } - - CGPoint textPosition = CGPointMake(oneLine.frame.origin.x, self.frame.size.height - oneRun.frame.origin.y - oneRun.ascent); - - NSInteger superscriptStyle = [[oneRun.attributes objectForKey:(id)kCTSuperscriptAttributeName] integerValue]; - - NSNumber *ascentMultiplier = [oneRun.attributes objectForKey:(id)DTAscentMultiplierAttribute]; - - - switch (superscriptStyle) - { - case 1: - { - textPosition.y += oneRun.ascent * (ascentMultiplier ? [ascentMultiplier floatValue] : 0.47f); - break; - } - case -1: - { - textPosition.y -= oneRun.ascent * (ascentMultiplier ? [ascentMultiplier floatValue] : 0.25f); - break; - } - default: - break; - } - - if (DTCoreTextModernAttributesPossible()) - { - NSNumber *baselineOffset = oneRun.attributes[NSBaselineOffsetAttributeName]; - if (baselineOffset) - { - textPosition.y += [baselineOffset floatValue]; - } - } - - CGContextSetTextPosition(context, textPosition.x, textPosition.y); - - if (!oneRun.attachment) - { - NSArray *shadows = [oneRun.attributes objectForKey:DTShadowsAttribute]; - - if (shadows) - { - CGContextSaveGState(context); - - NSUInteger numShadows = [shadows count]; - - if (numShadows == 1) - { - // single shadow, we only draw the glyph run with the shadow, no clipping magic - NSDictionary *singleShadow = [shadows objectAtIndex:0]; - [self _setShadowInContext:context fromDictionary:singleShadow additionalOffset:CGSizeZero]; - - [oneRun drawInContext:context]; - } - else // multiple shadows, we shift the text away and then draw a single glyph run over it - { - // get the run bounds, Core Text has bottom left 0,0 so we flip it - CGRect runBoundsFlipped = oneRun.frame; - runBoundsFlipped.origin.y = self.frame.size.height - runBoundsFlipped.origin.y - runBoundsFlipped.size.height; - - // assume that shadows would never be more than 100 pixels away from glyph run frame or outside of frame - CGRect clipRect = CGRectIntersection(CGRectInset(runBoundsFlipped, -100, -100), self.frame); - - // clip to the rect - CGContextAddRect(context, clipRect); - CGContextClipToRect(context, clipRect); - - // Move the text outside of the clip rect so that only the shadow is visible - CGContextSetTextPosition(context, textPosition.x + clipRect.size.width, textPosition.y); - - // draw each shadow - [shadows enumerateObjectsUsingBlock:^(NSDictionary *shadowDict, NSUInteger idx, BOOL *stop) { - BOOL isLastShadow = (idx == (numShadows-1)); - - if (isLastShadow) - { - // last shadow draws the original text - [self _setShadowInContext:context fromDictionary:shadowDict additionalOffset:CGSizeZero]; - - // ... so we put text position back - CGContextSetTextPosition(context, textPosition.x, textPosition.y); - } - else - { - [self _setShadowInContext:context fromDictionary:shadowDict additionalOffset:CGSizeMake(-clipRect.size.width, 0)]; - } - - [oneRun drawInContext:context]; - }]; - } - - CGContextRestoreGState(context); - } - else // no shadows - { - [self _setForgroundColorInContext:context forGlyphRun:oneRun options:options]; - - [oneRun drawInContext:context]; - } - } - } - } - - if (_textFrame) - { - CFRelease(_textFrame); - } - -#if TARGET_OS_IPHONE - UIGraphicsPopContext(); -#elif TARGET_OS_MAC - [NSGraphicsContext restoreGraphicsState]; -#endif - - CGContextRestoreGState(context); -} - -#pragma mark - Text Attachments - -- (NSArray *)textAttachments -{ - if (!_textAttachments) - { - NSMutableArray *tmpAttachments = [NSMutableArray array]; - - for (DTCoreTextLayoutLine *oneLine in self.lines) - { - for (DTCoreTextGlyphRun *oneRun in oneLine.glyphRuns) - { - DTTextAttachment *attachment = [oneRun attachment]; - - if (attachment) - { - [tmpAttachments addObject:attachment]; - } - } - } - - _textAttachments = [[NSArray alloc] initWithArray:tmpAttachments]; - } - - - return _textAttachments; -} - -- (NSArray *)textAttachmentsWithPredicate:(NSPredicate *)predicate -{ - return [[self textAttachments] filteredArrayUsingPredicate:predicate]; -} - -#pragma mark - Calculations - -- (NSRange)visibleStringRange -{ - if (!_textFrame) - { - return NSMakeRange(0, 0); - } - - if (!_lines) - { - // need to build lines to know range - [self _buildLines]; - } - - return _stringRange; -} - -- (NSArray *)stringIndices -{ - NSMutableArray *array = [NSMutableArray arrayWithCapacity:[self.lines count]]; - - for (DTCoreTextLayoutLine *oneLine in self.lines) - { - [array addObjectsFromArray:[oneLine stringIndices]]; - } - - return array; -} - -- (NSInteger)lineIndexForGlyphIndex:(NSInteger)index -{ - NSInteger retIndex = 0; - for (DTCoreTextLayoutLine *oneLine in self.lines) - { - NSInteger count = [oneLine numberOfGlyphs]; - if (index >= count) - { - index -= count; - } - else - { - return retIndex; - } - - retIndex++; - } - - return retIndex; -} - -- (CGRect)frameOfGlyphAtIndex:(NSInteger)index -{ - for (DTCoreTextLayoutLine *oneLine in self.lines) - { - NSInteger count = [oneLine numberOfGlyphs]; - if (index >= count) - { - index -= count; - } - else - { - return [oneLine frameOfGlyphAtIndex:index]; - } - } - - return CGRectNull; -} - -- (CGRect)frame -{ - if (!_lines) - { - [self _buildLines]; - } - - if (![self.lines count]) - { - return CGRectZero; - } - - if (_frame.size.height == CGFLOAT_HEIGHT_UNKNOWN) - { - // actual frame is spanned between first and last lines - DTCoreTextLayoutLine *lastLine = [_lines lastObject]; - - _frame.size.height = ceil((CGRectGetMaxY(lastLine.frame) - _frame.origin.y + 1.5f + _additionalPaddingAtBottom)); - } - - if (_frame.size.width == CGFLOAT_WIDTH_UNKNOWN) - { - // actual frame width is maximum value of lines - CGFloat maxWidth = 0; - - for (DTCoreTextLayoutLine *oneLine in _lines) - { - CGFloat lineWidthFromFrameOrigin = CGRectGetMaxX(oneLine.frame) - _frame.origin.x; - maxWidth = MAX(maxWidth, lineWidthFromFrameOrigin); - } - - _frame.size.width = ceil(maxWidth); - } - - return _frame; -} - -- (CGRect)intrinsicContentFrame -{ - if (!_lines) - { - [self _buildLines]; - } - - if (![self.lines count]) - { - return CGRectZero; - } - - DTCoreTextLayoutLine *firstLine = [_lines objectAtIndex:0]; - - CGRect outerFrame = self.frame; - - CGRect frameOverAllLines = firstLine.frame; - - // move up to frame origin because first line usually does not go all the ways up - frameOverAllLines.origin.y = outerFrame.origin.y; - - for (DTCoreTextLayoutLine *oneLine in _lines) - { - // need to limit frame to outer frame, otherwise HR causes too long lines - CGRect frame = CGRectIntersection(oneLine.frame, outerFrame); - - frameOverAllLines = CGRectUnion(frame, frameOverAllLines); - } - - // extend height same method as frame - frameOverAllLines.size.height = ceil(frameOverAllLines.size.height + 1.5f + _additionalPaddingAtBottom); - - return CGRectIntegral(frameOverAllLines); -} - -- (DTCoreTextLayoutLine *)lineContainingIndex:(NSUInteger)index -{ - for (DTCoreTextLayoutLine *oneLine in self.lines) - { - if (NSLocationInRange(index, [oneLine stringRange])) - { - return oneLine; - } - } - - return nil; -} - -- (NSArray *)linesInParagraphAtIndex:(NSUInteger)index -{ - NSArray *paragraphRanges = self.paragraphRanges; - - NSAssert(index < [paragraphRanges count], @"index parameter out of range"); - - NSRange range = [[paragraphRanges objectAtIndex:index] rangeValue]; - - NSMutableArray *tmpArray = [NSMutableArray array]; - - // find lines that are in this range - - BOOL insideParagraph = NO; - - for (DTCoreTextLayoutLine *oneLine in self.lines) - { - if (NSLocationInRange([oneLine stringRange].location, range)) - { - insideParagraph = YES; - [tmpArray addObject:oneLine]; - } - else - { - if (insideParagraph) - { - // that means we left the range - - break; - } - } - } - - // return array only if there is something in it - if ([tmpArray count]) - { - return tmpArray; - } - else - { - return nil; - } -} - -// returns YES if the given line is the first in a paragraph -- (BOOL)isLineFirstInParagraph:(DTCoreTextLayoutLine *)line -{ - NSRange lineRange = line.stringRange; - - if (lineRange.location == 0) - { - return YES; - } - - NSInteger prevLineLastUnicharIndex =lineRange.location - 1; - unichar prevLineLastUnichar = [[_attributedStringFragment string] characterAtIndex:prevLineLastUnicharIndex]; - - return [[NSCharacterSet newlineCharacterSet] characterIsMember:prevLineLastUnichar]; -} - -// returns YES if the given line is the last in a paragraph -- (BOOL)isLineLastInParagraph:(DTCoreTextLayoutLine *)line -{ - NSString *lineString = [[_attributedStringFragment string] substringWithRange:line.stringRange]; - - if ([lineString hasSuffix:@"\n"]) - { - return YES; - } - - return NO; -} - -#pragma mark - Paragraphs -- (NSUInteger)paragraphIndexContainingStringIndex:(NSUInteger)stringIndex -{ - for (NSValue *oneValue in self.paragraphRanges) - { - NSRange range = [oneValue rangeValue]; - - if (NSLocationInRange(stringIndex, range)) - { - return [self.paragraphRanges indexOfObject:oneValue]; - } - } - - return NSNotFound; -} - -- (NSRange)paragraphRangeContainingStringRange:(NSRange)stringRange -{ - NSUInteger firstParagraphIndex = [self paragraphIndexContainingStringIndex:stringRange.location]; - NSUInteger lastParagraphIndex; - - if (stringRange.length) - { - lastParagraphIndex = [self paragraphIndexContainingStringIndex:NSMaxRange(stringRange)-1]; - } - else - { - // range is in a single position, i.e. last paragraph has to be same as first - lastParagraphIndex = firstParagraphIndex; - } - - return NSMakeRange(firstParagraphIndex, lastParagraphIndex - firstParagraphIndex + 1); -} - -#pragma mark - Debugging -+ (void)setShouldDrawDebugFrames:(BOOL)debugFrames -{ - _DTCoreTextLayoutFramesShouldDrawDebugFrames = debugFrames; -} - -+ (BOOL)shouldDrawDebugFrames -{ - return _DTCoreTextLayoutFramesShouldDrawDebugFrames; -} - -#pragma mark - Properties -- (NSAttributedString *)attributedStringFragment -{ - return _attributedStringFragment; -} - -// builds an array -- (NSArray *)paragraphRanges -{ - if (!_paragraphRanges) - { - NSString *plainString = [[self attributedStringFragment] string]; - NSUInteger length = [plainString length]; - - NSRange paragraphRange = [plainString rangeOfParagraphsContainingRange:NSMakeRange(0, 0) parBegIndex:NULL parEndIndex:NULL]; - - NSMutableArray *tmpArray = [NSMutableArray array]; - - while (paragraphRange.length) - { - NSValue *value = [NSValue valueWithRange:paragraphRange]; - [tmpArray addObject:value]; - - NSUInteger nextParagraphBegin = NSMaxRange(paragraphRange); - - if (nextParagraphBegin>=length) - { - break; - } - - // next paragraph - paragraphRange = [plainString rangeOfParagraphsContainingRange:NSMakeRange(nextParagraphBegin, 0) parBegIndex:NULL parEndIndex:NULL]; - } - - _paragraphRanges = tmpArray; // no copy for performance - } - - return _paragraphRanges; -} - -- (void)setNumberOfLines:(NSInteger)numberOfLines -{ - if( _numberOfLines != numberOfLines ) - { - _numberOfLines = numberOfLines; - // clear lines cache - _lines = nil; - _frame.size.height = CGFLOAT_HEIGHT_UNKNOWN; - } -} - -- (void)setLineBreakMode:(NSLineBreakMode)lineBreakMode -{ - if( _lineBreakMode != lineBreakMode ) - { - _lineBreakMode = lineBreakMode; - // clear lines cache - _lines = nil; - _frame.size.height = CGFLOAT_HEIGHT_UNKNOWN; - } -} - -- (void)setTruncationString:(NSAttributedString *)truncationString -{ - if( ![_truncationString isEqualToAttributedString:truncationString] ) - { - _truncationString = truncationString; - - if( self.numberOfLines > 0 ) - { - // clear lines cache - _lines = nil; - _frame.size.height = CGFLOAT_HEIGHT_UNKNOWN; - } - } -} - -- (void)setJustifyRatio:(CGFloat)justifyRatio -{ - if (_justifyRatio != justifyRatio) - { - _justifyRatio = justifyRatio; - - // clear lines cache - _lines = nil; - _frame.size.height = CGFLOAT_HEIGHT_UNKNOWN; - } -} - -@synthesize numberOfLines = _numberOfLines; -@synthesize lineBreakMode = _lineBreakMode; -@synthesize truncationString = _truncationString; -@synthesize frame = _frame; -@synthesize lines = _lines; -@synthesize paragraphRanges = _paragraphRanges; -@synthesize textBlockHandler = _textBlockHandler; -@synthesize justifyRatio = _justifyRatio; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.h deleted file mode 100644 index dd41994..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// DTCoreTextLayoutFrameAccessibilityElementGenerator.h -// DTCoreText -// -// Created by Austen Green on 3/13/13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import "DTAccessibilityElement.h" - -@class DTCoreTextLayoutFrame, DTTextAttachment; - -/** - A block that provides accessibility information for the passed text attachments - */ -typedef id(^DTAttachmentViewProvider)(DTTextAttachment *textAttachment); - -/** - Generates an array of objects conforming to the UIAccessibility informal protocol based on a . - */ -@interface DTCoreTextLayoutFrameAccessibilityElementGenerator : NSObject - -/** - The designated initializer. The DTAttachmentViewProvider block may be used to provide custom subviews in place of a static accessibility element. - @param frame The to generate accessibility elements for. - @param view The logical superview of the elements - the view that owns the local coordinate system for drawing the frame. - @param block A callback block which takes a object and returns an object that conforms to the UIAccessibility informal protocol. - @returns Returns an array of objects conforming to the UIAccessibility informal protocol, suitable for presentation for the VoiceOver system. - */ - -- (NSArray *)accessibilityElementsForLayoutFrame:(DTCoreTextLayoutFrame *)frame view:(UIView *)view attachmentViewProvider:(DTAttachmentViewProvider)block; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.m deleted file mode 100644 index a44e771..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.m +++ /dev/null @@ -1,124 +0,0 @@ -// -// DTCoreTextLayoutFrameAccessibilityElementGenerator.m -// DTCoreText -// -// Created by Austen Green on 3/13/13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTCoreTextLayoutFrameAccessibilityElementGenerator.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import "DTCoreTextLayoutFrame.h" -#import "DTCoreTextLayoutLine.h" -#import "DTCoreTextGlyphRun.h" -#import "DTAccessibilityElement.h" -#import "DTCoreTextConstants.h" -#import "DTTextAttachment.h" - -@implementation DTCoreTextLayoutFrameAccessibilityElementGenerator - -- (NSArray *)accessibilityElementsForLayoutFrame:(DTCoreTextLayoutFrame *)frame view:(UIView *)view attachmentViewProvider:(DTAttachmentViewProvider)block -{ - NSMutableArray *elements = [NSMutableArray array]; - - for (NSUInteger idx = 0; idx < frame.paragraphRanges.count; idx++) - { - NSArray *paragraphElements = [self accessibilityElementsInParagraphAtIndex:idx layoutFrame:frame view:view attachmentViewProvider:block]; - [elements addObjectsFromArray:paragraphElements]; - } - - return elements; -} - -- (NSArray *)accessibilityElementsInParagraphAtIndex:(NSUInteger)index layoutFrame:(DTCoreTextLayoutFrame *)frame view:(UIView *)view attachmentViewProvider:(DTAttachmentViewProvider)block -{ - NSMutableArray *elements = [NSMutableArray array]; - - [self enumerateAccessibleGroupsInFrame:frame forParagraphAtIndex:index usingBlock:^(NSDictionary *attrs, NSRange substringRange, BOOL *stop, NSArray *runs) { - id element = [self accessibilityElementForTextInAttributedString:frame.attributedStringFragment atRange:substringRange attributes:attrs run:runs view:view attachmentViewProvider:block]; - if (element) - [elements addObject:element]; - }]; - - return elements; -} - -- (void)enumerateAccessibleGroupsInFrame:(DTCoreTextLayoutFrame *)frame forParagraphAtIndex:(NSUInteger)index usingBlock:(void(^)(NSDictionary *attrs, NSRange substringRange, BOOL *stop, NSArray *runs))block -{ - NSValue *value = [frame.paragraphRanges objectAtIndex:index]; - NSRange paragraphRange = value.rangeValue; - NSArray *lines = [frame linesInParagraphAtIndex:index]; - - [frame.attributedStringFragment enumerateAttributesInRange:paragraphRange options:0 usingBlock:^(NSDictionary *attrs, NSRange range, BOOL *stop) { - NSMutableArray *runs = [NSMutableArray array]; - for (DTCoreTextLayoutLine *line in lines) - { - [runs addObjectsFromArray:[line glyphRunsWithRange:range]]; - } - - block(attrs, range, stop, runs); - }]; -} - -- (id)accessibilityElementForTextInAttributedString:(NSAttributedString *)attributedString atRange:(NSRange)range attributes:(NSDictionary *)attributes run:(NSArray *)runs view:(UIView *)view attachmentViewProvider:(DTAttachmentViewProvider)block -{ - DTTextAttachment *attachment = [attributes objectForKey:NSAttachmentAttributeName]; - - if (attachment != nil) - return [self viewForAttachment:attachment attachmentViewProvider:block]; - else - return [self accessibilityElementForTextInAttributedString:attributedString atRange:range attributes:attributes run:runs view:view]; -} - -- (DTAccessibilityElement *)accessibilityElementForTextInAttributedString:(NSAttributedString *)attributedString atRange:(NSRange)range attributes:(NSDictionary *)attributes run:(NSArray *)runs view:(UIView *)view -{ - NSString *text = [attributedString.string substringWithRange:range]; - - DTAccessibilityElement *element = [[DTAccessibilityElement alloc] initWithParentView:view]; - element.accessibilityLabel = text; - element.localCoordinateAccessibilityFrame = [self frameForRuns:runs]; - - // We're trying to keep the accessibility frame behavior consistent with web view, which seems to do a union of the rects for all the runs composing a single accessibility group, - // even if that spans across multiple lines. Set the local coordinate activation point to support multi-line links. A link that is at the end of one line and - // wraps to the beginning of the next would have a rect that's the size of both lines combined. The center of that rect would be outside the hit areas for either of the - // runs individually, so we set the accessibility activation point to be the origin of the first run. - if (runs.count > 1) - { - DTCoreTextGlyphRun *run = [runs objectAtIndex:0]; - element.localCoordinateAccessibilityActivationPoint = run.frame.origin; - } - - element.accessibilityTraits = UIAccessibilityTraitStaticText; - - if ([attributes objectForKey:DTLinkAttribute]) - element.accessibilityTraits |= UIAccessibilityTraitLink; - - return element; -} - -- (UIView *)viewForAttachment:(DTTextAttachment *)attachment attachmentViewProvider:(DTAttachmentViewProvider)block -{ - UIView *view = nil; - - if (block) - { - view = block(attachment); - } - - return view; -} - -- (CGRect)frameForRuns:(NSArray *)runs -{ - CGRect frame = CGRectNull; - for (DTCoreTextGlyphRun *run in runs) - frame = CGRectUnion(frame, run.frame); - - return frame; -} - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutLine.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutLine.h deleted file mode 100644 index 8d6e3ea..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutLine.h +++ /dev/null @@ -1,220 +0,0 @@ -// -// DTCoreTextLayoutLine.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/24/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE -#import -#elif TARGET_OS_MAC -#import -#endif - -@class DTCoreTextLayoutFrame; -@class DTCoreTextParagraphStyle; -@class DTTextBlock; - -/** - This class represents one layouted line and contains a number of glyph runs. - */ -@interface DTCoreTextLayoutLine : NSObject -{ - // IVAR required by DTRichTextEditor, used in category - NSInteger _stringLocationOffset; // offset to modify internal string location to get actual location -} - -/** - @name Creating Layout Lines - */ - -/** - Creates a layout line from a given `CTLine` - @param line The Core Text line to wrap - @returns A prepared layout line - */ -- (id)initWithLine:(CTLineRef)line; - -/** - Creates a layout line from a given `CTLine` - @param line The Core Text line to wrap - @param stringLocationOffset Offset to modify internal string location to get actual location - @returns A prepared layout line - */ - -- (id)initWithLine:(CTLineRef)line stringLocationOffset:(NSInteger)stringLocationOffset; - -/** - @name Drawing Layout Lines - */ - -/** - Draws the receiver in a given graphics context - @param context The graphics context to draw into - */ -- (void)drawInContext:(CGContextRef)context; - -/** - Creates a `CGPath` containing the shapes of all glyphs in the line - */ -- (CGPathRef)newPathWithGlyphs; - -/** - @name Getting Information about Layout Lines - */ - -/** - The range in the original string that is represented by the receiver - @returns The string strange - */ -- (NSRange)stringRange; - -/** - The number of glyphs the receiver consists of - @returns the number of glyphs - */ -- (NSInteger)numberOfGlyphs; - -/** - Determines the frame of a specific glyph - @param index The index of the glyph - @return The frame of the glyph - */ -- (CGRect)frameOfGlyphAtIndex:(NSInteger)index; - -/** - Retrieves the glyphRuns with a given range - @param range The range - @returns An array of glyph runs - */ -- (NSArray *)glyphRunsWithRange:(NSRange)range; - -/** - The frame of a number of glyphs with a given range - @param range The range - @returns The rectangle containing the result - */ -- (CGRect)frameOfGlyphsWithRange:(NSRange)range; - -/** - The bounds of an image encompassing the entire run. - @param context The graphics context used for the measurement - @returns The rectangle containing the result - */ -- (CGRect)imageBoundsInContext:(CGContextRef)context; - -/** - The string indices of the receiver - @returns An array of string indices - */ -- (NSArray *)stringIndices; - -/** - Determines the graphical offset for a given string index - @param index The string index - @returns The offset - */ -- (CGFloat)offsetForStringIndex:(NSInteger)index; - -/** - Determines the string index that is closest to a given point - @param position The position to determine the string index for - @returns The string index - */ -- (NSInteger)stringIndexForPosition:(CGPoint)position; - -/** - The frame of the receiver relative to the layout frame - */ -@property (nonatomic, assign) CGRect frame; - -/** - The glyph runs that the line contains. - */ -@property (nonatomic, readonly) NSArray *glyphRuns; - -/** - The ascent (height above the baseline) of the receiver - */ -@property (nonatomic, assign) CGFloat ascent; // needs to be modifiable - -/** - The descent (height below the baseline) of the receiver - */ -@property (nonatomic, readonly) CGFloat descent; - -/** - The leading (additional space above the ascent) of the receiver - */ -@property (nonatomic, readonly) CGFloat leading; - -/** - The width of the trailing whitespace of the receiver - */ -@property (nonatomic, readonly) CGFloat trailingWhitespaceWidth; - -/** - The offset for the underline in positive points measured from the baseline. This is the maximum underline value of the fonts of all glyph runs of the receiver. - */ -@property (nonatomic, readonly) CGFloat underlineOffset; - -/** - The line height of the line. This is determined by getting the maximum font size of all glyph runs of the receiver. - */ -@property (nonatomic, readonly) CGFloat lineHeight; - -/** - The paragraph style of the paragraph this line belongs to. All lines in a paragraph are supposed to have the same paragraph style, so this takes the paragraph style of the first glyph run - */ -@property (nonatomic, readonly) DTCoreTextParagraphStyle *paragraphStyle; - -/** - The text blocks that the receiver belongs to. - */ -@property (nonatomic, readonly) NSArray *textBlocks; - -/** - The text attachments occurring in glyph runs of the receiver. - */ -@property (nonatomic, readonly) NSArray *attachments; - -/** - The baseline origin of the receiver - */ -@property (nonatomic, assign) CGPoint baselineOrigin; - -/** - `YES` if the writing direction is Right-to-Left, otherwise `NO` - */ -@property (nonatomic, assign) BOOL writingDirectionIsRightToLeft; - -/** - The offset to modify internal string location to get actual location -*/ - -@property (nonatomic, readonly) NSInteger stringLocationOffset; - -/** - Method to efficiently determine if the receiver is a horizontal rule. - - Note: This is used to shortcut drawing of text lines and to allow a horizontal rule line have an "endlessly wide" width so that it gets picked up by [DTCoreTextLayoutFrame linesVisibleInRect:]. - */ -- (BOOL)isHorizontalRule; - - -/** - @name Creating Variants - */ - -/** - Creates a version of the receiver that is justified to the given width. - - @param justificationFactor Full or partial justification. When set to `1.0` or greater, full justification is performed. If this parameter is set to less than `1.0`, varying degrees of partial justification are performed. If it is set to `0` or less, no justification is performed. - @param justificationWidth The width to which the resultant line is justified. If justificationWidth is less than the actual width of the line, then negative justification is performed (that is, glyphs are squeezed together). - */ -- (DTCoreTextLayoutLine *)justifiedLineWithFactor:(CGFloat)justificationFactor justificationWidth:(CGFloat)justificationWidth; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutLine.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutLine.m deleted file mode 100644 index 98f066b..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayoutLine.m +++ /dev/null @@ -1,571 +0,0 @@ -// -// DTCoreTextLayoutLine.m -// DTCoreText -// -// Created by Oliver Drobnik on 1/24/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" -#import "DTCoreTextLayoutLine.h" -#import "DTCoreTextGlyphRun.h" -#import "DTCoreTextLayoutFrame.h" -#import "DTCoreTextLayouter.h" -#import "DTTextAttachment.h" -#import "NSDictionary+DTCoreText.h" -#import "DTTextBlock.h" -#import "DTCoreTextConstants.h" -#import "DTCoreTextFunctions.h" - -@interface DTCoreTextLayoutLine () - -@property (nonatomic, strong) NSArray *glyphRuns; - -@end - -@implementation DTCoreTextLayoutLine -{ - CGRect _frame; - CTLineRef _line; - - CGPoint _baselineOrigin; - - CGFloat _ascent; - CGFloat _descent; - CGFloat _leading; - CGFloat _width; - CGFloat _trailingWhitespaceWidth; - - CGFloat _underlineOffset; - CGFloat _lineHeight; - - NSArray *_glyphRuns; - - BOOL _didCalculateMetrics; - - BOOL _writingDirectionIsRightToLeft; - BOOL _needsToDetectWritingDirection; - - BOOL _hasScannedGlyphRunsForValues; -} - -- (id)initWithLine:(CTLineRef)line -{ - return [self initWithLine:line stringLocationOffset:0]; -} - -- (id)initWithLine:(CTLineRef)line stringLocationOffset:(NSInteger)stringLocationOffset -{ - if (!line) - { - return nil; - } - - if ((self = [super init])) - { - _line = line; - CFRetain(_line); - - // writing direction - _needsToDetectWritingDirection = YES; - - _stringLocationOffset = stringLocationOffset; - } - return self; -} - -- (void)dealloc -{ - CFRelease(_line); -} - -#ifndef COVERAGE -// exclude method from coverage testing - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@ origin=%@ frame=%@ range=%@", [self class], NSStringFromCGPoint(_baselineOrigin), NSStringFromCGRect(self.frame), NSStringFromRange([self stringRange])]; -} - -#endif - -- (NSRange)stringRange -{ - CFRange range = CTLineGetStringRange(_line); - - // add offset if there is one, i.e. from merged lines - range.location += _stringLocationOffset; - - return NSMakeRange(range.location, range.length); -} - -- (NSInteger)numberOfGlyphs -{ - NSInteger ret = 0; - for (DTCoreTextGlyphRun *oneRun in self.glyphRuns) - { - ret += [oneRun numberOfGlyphs]; - } - - return ret; -} - -#pragma mark - Drawing - -- (void)drawInContext:(CGContextRef)context -{ - CTLineDraw(_line, context); -} - -- (CGPathRef)newPathWithGlyphs -{ - // mutable path for the line - CGMutablePathRef mutablePath = CGPathCreateMutable(); - - for (DTCoreTextGlyphRun *oneRun in self.glyphRuns) - { - CGPathRef glyphPath = [oneRun newPathWithGlyphs]; - - CGAffineTransform posTransform = CGAffineTransformMakeTranslation(_baselineOrigin.x, _baselineOrigin.y); - CGPathAddPath(mutablePath, &posTransform, glyphPath); - - CGPathRelease(glyphPath); - } - - return mutablePath; -} - -#pragma mark - Creating Variants - -- (DTCoreTextLayoutLine *)justifiedLineWithFactor:(CGFloat)justificationFactor justificationWidth:(CGFloat)justificationWidth -{ - // make this line justified - CTLineRef justifiedLine = CTLineCreateJustifiedLine(_line, justificationFactor, justificationWidth); - - DTCoreTextLayoutLine *newLine = [[DTCoreTextLayoutLine alloc] initWithLine:justifiedLine]; - - CFRelease(justifiedLine); - - return newLine; -} - - -#pragma mark - Calculations -- (NSArray *)stringIndices -{ - NSMutableArray *array = [NSMutableArray array]; - for (DTCoreTextGlyphRun *oneRun in self.glyphRuns) - { - [array addObjectsFromArray:[oneRun stringIndices]]; - } - return array; -} - -- (CGRect)frameOfGlyphAtIndex:(NSInteger)index -{ - for (DTCoreTextGlyphRun *oneRun in self.glyphRuns) - { - NSInteger count = [oneRun numberOfGlyphs]; - if (index >= count) - { - index -= count; - } - else - { - return [oneRun frameOfGlyphAtIndex:index]; - } - } - - return CGRectZero; -} - -- (NSArray *)glyphRunsWithRange:(NSRange)range -{ - NSMutableArray *tmpArray = [NSMutableArray arrayWithCapacity:[self numberOfGlyphs]]; - - for (DTCoreTextGlyphRun *oneRun in self.glyphRuns) - { - NSRange runRange = [oneRun stringRange]; - - // intersect these ranges - NSRange intersectionRange = NSIntersectionRange(range, runRange); - - // if intersection is longer than zero length they intersect - if (intersectionRange.length) - { - [tmpArray addObject:oneRun]; - } - } - - return tmpArray; -} - -- (CGRect)frameOfGlyphsWithRange:(NSRange)range -{ - NSArray *glyphRuns = [self glyphRunsWithRange:range]; - - CGRect tmpRect = CGRectMake(CGFLOAT_MAX, CGFLOAT_MAX, 0, 0); - - for (DTCoreTextGlyphRun *oneRun in glyphRuns) - { - CGRect glyphFrame = oneRun.frame; - - if (glyphFrame.origin.x < tmpRect.origin.x) - { - tmpRect.origin.x = glyphFrame.origin.x; - } - - if (glyphFrame.origin.y < tmpRect.origin.y) - { - tmpRect.origin.y = glyphFrame.origin.y; - } - - if (glyphFrame.size.height > tmpRect.size.height) - { - tmpRect.size.height = glyphFrame.size.height; - } - - tmpRect.size.width = glyphFrame.origin.x + glyphFrame.size.width - tmpRect.origin.x; - } - - CGFloat maxX = CGRectGetMaxX(self.frame) - _trailingWhitespaceWidth; - if (CGRectGetMaxX(tmpRect) > maxX) - { - tmpRect.size.width = maxX - tmpRect.origin.x; - } - - return tmpRect; -} - -// bounds of an image encompassing the entire run -- (CGRect)imageBoundsInContext:(CGContextRef)context -{ - return CTLineGetImageBounds(_line, context); -} - -- (CGFloat)offsetForStringIndex:(NSInteger)index -{ - // subtract offset if there is one, i.e. from merged lines - index -= _stringLocationOffset; - - return CTLineGetOffsetForStringIndex(_line, index, NULL); -} - -- (NSInteger)stringIndexForPosition:(CGPoint)position -{ - // position is in same coordinate system as frame - CGPoint adjustedPosition = position; - CGRect frame = self.frame; - adjustedPosition.x -= frame.origin.x; - adjustedPosition.y -= frame.origin.y; - - NSInteger index = CTLineGetStringIndexForPosition(_line, adjustedPosition); - - // add offset if there is one, i.e. from merged lines - index += _stringLocationOffset; - - return index; -} - -- (void)_calculateMetrics -{ - @synchronized(self) - { - if (!_didCalculateMetrics) - { - _width = (CGFloat)CTLineGetTypographicBounds(_line, &_ascent, &_descent, &_leading); - _trailingWhitespaceWidth = (CGFloat)CTLineGetTrailingWhitespaceWidth(_line); - - _didCalculateMetrics = YES; - } - } -} - -- (BOOL)isHorizontalRule -{ - // HR is only a single \n - - if (self.stringRange.length>1) - { - return NO; - } - - NSArray *runs = self.glyphRuns; - - // thus only a single glyphRun - - if ([runs count]>1) - { - return NO; - } - - DTCoreTextGlyphRun *singleRun = [runs lastObject]; - - if ([singleRun.attributes objectForKey:DTHorizontalRuleStyleAttribute]) - { - return YES; - } - - return NO; -} - -#pragma mark Determining Values from the glyph runs - -- (void)_scanGlyphRunsForValues -{ - @synchronized(self) - { - CGFloat maxOffset = 0; - CGFloat maxFontSize = 0; - - for (DTCoreTextGlyphRun *oneRun in self.glyphRuns) - { - CTFontRef usedFont = (__bridge CTFontRef)([oneRun.attributes objectForKey:(id)kCTFontAttributeName]); - - if (usedFont) - { - maxOffset = MAX(maxOffset, fabs(CTFontGetUnderlinePosition(usedFont))); - - maxFontSize = MAX(maxFontSize, CTFontGetSize(usedFont)); - } - } - - _underlineOffset = maxOffset; - _lineHeight = maxFontSize; - - _hasScannedGlyphRunsForValues= YES; - } -} - - -#pragma mark - Properties -- (NSArray *)glyphRuns -{ - @synchronized(self) - { - if (!_glyphRuns) - { - // run array is owned by line - CFArrayRef runs = CTLineGetGlyphRuns(_line); - CFIndex runCount = CFArrayGetCount(runs); - - if (runCount) - { - NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithCapacity:runCount]; - - for (CFIndex i=0; i -#elif TARGET_OS_MAC -#import -#endif - -#import "DTCoreTextLayoutFrame.h" -#import "DTCoreTextLayoutLine.h" -#import "DTCoreTextGlyphRun.h" - -/** - This class owns an attributed string and is able to create layoutFrames for certain ranges in this string. Optionally it caches these layout frames. - */ -@interface DTCoreTextLayouter : NSObject - -/** - @name Creating a Layouter - */ - -/** - Designated Initializer. Creates a new Layouter with an attributed string - @param attributedString The `NSAttributedString` to layout for - @returns An initialized layouter - */ -- (id)initWithAttributedString:(NSAttributedString *)attributedString; - - -/** - @name Creating Layout Frames -*/ - -/** - Creates a layout frame with a given rectangle and string range. The layouter fills the layout frame with as many lines as fit. You can query [DTCoreTextLayoutFrame visibleStringRange] for the range the fits and create another layout frame that continues the text from there to create multiple pages, for example for an e-book. - @param frame The rectangle to fill with text - @param range The string range to fill, pass {0,0} for the entire string (as much as fits) - */ -- (DTCoreTextLayoutFrame *)layoutFrameWithRect:(CGRect)frame range:(NSRange)range; - -/** - If set to `YES` then the receiver will cache layout frames generated with layoutFrameWithRect:range: for a given rect - */ -@property (nonatomic, assign) BOOL shouldCacheLayoutFrames; - - -/** - @name Getting Information - */ - -/** - The attributed string that the layouter currently owns - */ -@property (nonatomic, strong) NSAttributedString *attributedString; - -/** - The internal framesetter of the receiver - */ -@property (nonatomic, readonly) CTFramesetterRef framesetter; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayouter.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayouter.m deleted file mode 100644 index 72c32d8..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextLayouter.m +++ /dev/null @@ -1,153 +0,0 @@ -// -// DTCoreTextLayouter.m -// DTCoreText -// -// Created by Oliver Drobnik on 1/24/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" -#import "DTCoreTextLayouter.h" - -@interface DTCoreTextLayouter () - -@property (nonatomic, strong) NSMutableArray *frames; - -- (void)_discardFramesetter; - -@end - - -@implementation DTCoreTextLayouter -{ - CTFramesetterRef _framesetter; - NSAttributedString *_attributedString; - BOOL _shouldCacheLayoutFrames; - NSCache *_layoutFrameCache; -} - -- (id)initWithAttributedString:(NSAttributedString *)attributedString -{ - if ((self = [super init])) - { - if (!attributedString) - { - return nil; - } - - self.attributedString = attributedString; - } - - return self; -} - -- (void)dealloc -{ - [self _discardFramesetter]; -} - -- (DTCoreTextLayoutFrame *)layoutFrameWithRect:(CGRect)frame range:(NSRange)range -{ - DTCoreTextLayoutFrame *newFrame = nil; - NSString *cacheKey = nil; - - // need to have a non zero - if (!(frame.size.width > 0 && frame.size.height > 0)) - { - return nil; - } - - if (_shouldCacheLayoutFrames) - { - cacheKey = [NSString stringWithFormat:@"%lud-%@-%@", (unsigned long)[_attributedString hash], NSStringFromCGRect(frame), NSStringFromRange(range)]; - - DTCoreTextLayoutFrame *cachedLayoutFrame = [_layoutFrameCache objectForKey:cacheKey]; - - if (cachedLayoutFrame) - { - return cachedLayoutFrame; - } - } - - @autoreleasepool - { - newFrame = [[DTCoreTextLayoutFrame alloc] initWithFrame:frame layouter:self range:range]; - }; - - if (newFrame && _shouldCacheLayoutFrames) - { - [_layoutFrameCache setObject:newFrame forKey:cacheKey]; - } - - return newFrame; -} - -- (void)_discardFramesetter -{ - // framesetter needs to go - if (_framesetter) - { - CFRelease(_framesetter); - _framesetter = NULL; - } -} - -#pragma mark Properties - -- (CTFramesetterRef)framesetter -{ - @synchronized(self) - { - if (!_framesetter) - { - _framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)self.attributedString); - } - - - return _framesetter; - } -} - -- (void)setAttributedString:(NSAttributedString *)attributedString -{ - @synchronized(self) - { - if (_attributedString != attributedString) - { - _attributedString = attributedString; - - [self _discardFramesetter]; - - // clear the cache - [_layoutFrameCache removeAllObjects]; - } - } -} - -- (NSAttributedString *)attributedString -{ - return _attributedString; -} - -- (void)setShouldCacheLayoutFrames:(BOOL)shouldCacheLayoutFrames -{ - if (_shouldCacheLayoutFrames != shouldCacheLayoutFrames) - { - _shouldCacheLayoutFrames = shouldCacheLayoutFrames; - - if (shouldCacheLayoutFrames) - { - _layoutFrameCache = [[NSCache alloc] init]; - } - else - { - _layoutFrameCache = nil; - } - } -} - -@synthesize attributedString = _attributedString; -@synthesize framesetter = _framesetter; -@synthesize shouldCacheLayoutFrames = _shouldCacheLayoutFrames; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextMacros.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextMacros.h deleted file mode 100644 index eb59786..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextMacros.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// DTCoreTextMacros.h -// DTCoreText -// -// Created by Jean-Charles BERTIN on 5/28/14. -// Copyright (c) 2014 Axinoe. All rights reserved. -// - -#import "DTCompatibility.h" - -#ifndef DT_RETURNS_INNER_POINTER -#if __has_attribute(objc_returns_inner_pointer) -#define DT_RETURNS_INNER_POINTER __attribute__((objc_returns_inner_pointer)) -#else -#define DT_RETURNS_INNER_POINTER -#endif -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextParagraphStyle.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextParagraphStyle.h deleted file mode 100644 index 1a5d30b..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextParagraphStyle.h +++ /dev/null @@ -1,212 +0,0 @@ -// -// DTCoreTextParagraphStyle.h -// DTCoreText -// -// Created by Oliver Drobnik on 4/14/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// -#import -#import - -/** - `DTCoreTextParagraphStyle` encapsulates the paragraph or ruler attributes used by the NSAttributedString classes on iOS. It is a replacement for `NSParagraphStyle` which is not implemented on iOS. - - Since `NSAttributedString` instances use CTParagraphStyle object there are methods to bridge from and to these. Because of this distinction there is no need for a mutable variant of this class. - */ -@interface DTCoreTextParagraphStyle : NSObject - -/** - @name Creating a DTCoreTextParagraphStyle - */ - -/** - Returns the default paragraph style. - */ -+ (DTCoreTextParagraphStyle *)defaultParagraphStyle; - - - -/** - @name Bridging to and from CTParagraphStyle - */ - -/** - Create a new paragraph style instance from a `CTParagraphStyle`. - - @param ctParagraphStyle the `CTParagraphStyle` from which to copy this new style's attributes. - */ -+ (DTCoreTextParagraphStyle *)paragraphStyleWithCTParagraphStyle:(CTParagraphStyleRef)ctParagraphStyle; - - -/** - Create a new paragraph style instance from a `CTParagraphStyle`. - - @param ctParagraphStyle the `CTParagraphStyle` from which to copy this new style's attributes. - */ -- (id)initWithCTParagraphStyle:(CTParagraphStyleRef)ctParagraphStyle; - -/** - Create a new `CTParagraphStyle` from the receiver for use as attribute in `NSAttributedString` - - @returns The `CTParagraphStyle` based on the receiver's attributes. - */ -- (CTParagraphStyleRef)createCTParagraphStyle; - -/** - @name Bridging to and from NSParagraphStyle - */ - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES -/** - Create a new paragraph style instance from an `NSParagraphStyle`. - - Note: on iOS no tab stops are supported. - @param paragraphStyle the `NSParagraphStyle` from which to copy this new style's attributes. - */ -+ (DTCoreTextParagraphStyle *)paragraphStyleWithNSParagraphStyle:(NSParagraphStyle *)paragraphStyle; - -/** - Create a new `NSParagraphStyle` from the receiver for use as attribute in `NSAttributedString`. - - Note: This method is requires iOS 6 or greater. This does not support tab stops. - - @returns The `NSParagraphStyle` based on the receiver's attributes. - */ -- (NSParagraphStyle *)NSParagraphStyle; -#endif - - -/**------------------------------------------------------------------------------------- - @name Accessing Style Information - --------------------------------------------------------------------------------------- - */ - -/** - The indentation of the first line of the receiver. - */ -@property (nonatomic, assign) CGFloat firstLineHeadIndent; - - -/** - The document-wide default tab interval. - - The default tab interval in points. Tabs after the last specified in tabStops are placed at integer multiples of this distance (if positive). Default return value is 0.0. - */ -@property (nonatomic, assign) CGFloat defaultTabInterval; - - -/** - The distance between the paragraph’s top and the beginning of its text content. - */ -@property (nonatomic, assign) CGFloat paragraphSpacingBefore; - - -/** - The space after the end of the paragraph. - */ -@property (nonatomic, assign) CGFloat paragraphSpacing; - - -/** - The line height multiple. - - Internally line height multiples get converted into minimum and maximum line height. - */ -@property (nonatomic, assign) CGFloat lineHeightMultiple; - - -/** - The minimum height in points that any line in the receiver will occupy, regardless of the font size or size of any attached graphic. This value is always nonnegative. - */ -@property (nonatomic, assign) CGFloat minimumLineHeight; - - -/** - The maximum height in points that any line in the receiver will occupy, regardless of the font size or size of any attached graphic. This value is always nonnegative. The default value is 0. - */ -@property (nonatomic, assign) CGFloat maximumLineHeight; - - -/** -The distance in points from the margin of a text container to the end of lines. - - @note This value is negative if it is to be measured from the trailing margin, positive if measured from the same margin as the headIndent. - */ -@property (nonatomic, assign) CGFloat tailIndent; - -/** - The distance in points from the leading margin of a text container to the beginning of lines other than the first. This value is always nonnegative. - */ -@property (nonatomic, assign) CGFloat headIndent; - -/** - The text alignment of the receiver. - - Natural text alignment is realized as left or right alignment depending on the line sweep direction of the first script contained in the paragraph. - */ -@property (nonatomic, assign) CTTextAlignment alignment; - - -/** - The base writing direction for the receiver. - -*/ -@property (nonatomic, assign) CTWritingDirection baseWritingDirection; - - -/**------------------------------------------------------------------------------------- - @name Setting Tab Stops - --------------------------------------------------------------------------------------- - */ - -/** - The CTTextTab objects, sorted by location, that define the tab stops for the paragraph style. - */ -@property (nonatomic, copy) NSArray *tabStops; - - -/** - Adds a tab stop to the receiver. - - @param position the tab stop position - @param alignment the tab alignment for this tab stop - */ -- (void)addTabStopAtPosition:(CGFloat)position alignment:(CTTextAlignment)alignment; - - -/**------------------------------------------------------------------------------------- - @name Interacting with CSS - --------------------------------------------------------------------------------------- - */ - -/** - Create a representation suitable for CSS. - - @returns A string with the receiver's style encoded as CSS. - */ -- (NSString *)cssStyleRepresentation; - - -/**------------------------------------------------------------------------------------- - @name Setting Text Lists - --------------------------------------------------------------------------------------- - */ - -/** - Text lists containing the paragraph, nested from outermost to innermost. Each text list is a DTCSSListStyle object. -*/ -@property (nonatomic, copy) NSArray *textLists; - - -/**------------------------------------------------------------------------------------- - @name Setting Text Blocks - --------------------------------------------------------------------------------------- - */ - -/** - Text blocks containing the paragraph, nested from outermost to innermost, to array. Each text block is a DTTextBlock object. - */ -@property (nonatomic, copy) NSArray *textBlocks; - - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextParagraphStyle.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextParagraphStyle.m deleted file mode 100644 index e2a9b57..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTCoreTextParagraphStyle.m +++ /dev/null @@ -1,664 +0,0 @@ -// -// DTCoreTextParagraphStyle.m -// DTCoreText -// -// Created by Oliver Drobnik on 4/14/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCoreTextParagraphStyle.h" -#import "DTTextBlock.h" -#import "DTCSSListStyle.h" -#import -#import "DTCoreTextFunctions.h" - -@implementation DTCoreTextParagraphStyle -{ - CGFloat _firstLineHeadIndent; - CGFloat _defaultTabInterval; - CGFloat _paragraphSpacingBefore; - CGFloat _paragraphSpacing; - CGFloat _headIndent; - CGFloat _tailIndent; - CGFloat _lineHeightMultiple; - CGFloat _minimumLineHeight; - CGFloat _maximumLineHeight; - - CTTextAlignment _alignment; - CTWritingDirection _baseWritingDirection; - - NSMutableArray *_tabStops; -} - -+ (DTCoreTextParagraphStyle *)defaultParagraphStyle -{ - return [[DTCoreTextParagraphStyle alloc] init]; -} - -+ (DTCoreTextParagraphStyle *)paragraphStyleWithCTParagraphStyle:(CTParagraphStyleRef)ctParagraphStyle -{ - return [[DTCoreTextParagraphStyle alloc] initWithCTParagraphStyle:ctParagraphStyle]; -} - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES -+ (DTCoreTextParagraphStyle *)paragraphStyleWithNSParagraphStyle:(NSParagraphStyle *)paragraphStyle -{ - if ( ! paragraphStyle) { - paragraphStyle = [NSParagraphStyle defaultParagraphStyle]; - } - - DTCoreTextParagraphStyle *retStyle = [[DTCoreTextParagraphStyle alloc] init]; - - retStyle.firstLineHeadIndent = paragraphStyle.firstLineHeadIndent; - retStyle.headIndent = paragraphStyle.headIndent; - - retStyle.paragraphSpacing = paragraphStyle.paragraphSpacing; - retStyle.paragraphSpacingBefore = paragraphStyle.paragraphSpacingBefore; - - retStyle.lineHeightMultiple = paragraphStyle.lineHeightMultiple; - retStyle.minimumLineHeight = paragraphStyle.minimumLineHeight; - retStyle.maximumLineHeight = paragraphStyle.maximumLineHeight; - - retStyle.alignment = DTNSTextAlignmentToCTTextAlignment(paragraphStyle.alignment); - - switch (paragraphStyle.baseWritingDirection) - { - case NSWritingDirectionNatural: - { - retStyle.baseWritingDirection = kCTWritingDirectionNatural; - break; - } - - case NSWritingDirectionLeftToRight: - { - retStyle.baseWritingDirection = kCTWritingDirectionLeftToRight; - break; - } - case NSWritingDirectionRightToLeft: - { - retStyle.baseWritingDirection = kCTWritingDirectionRightToLeft; - break; - } - } - -#if DTCORETEXT_SUPPORT_NSPARAGRAPHSTYLE_TABS - if (NSClassFromString(@"NSTextTab") && [NSParagraphStyle instancesRespondToSelector:@selector(tabStops)]) - { - NSArray *tabStops = [paragraphStyle valueForKey:@"tabStops"]; - - NSMutableArray *tmpArray = [NSMutableArray array]; - - for (NSTextTab *textTab in tabStops) - { - CTTextAlignment alignment = DTNSTextAlignmentToCTTextAlignment(textTab.alignment); - CGFloat location = textTab.location; - - CTTextTabRef tab = CTTextTabCreate(alignment, location, NULL); - - if (tab) - { - [tmpArray addObject:(__bridge id)(tab)]; - CFRelease(tab); - } - } - - if ([tmpArray count]) - { - retStyle.tabStops = tmpArray; - } - } - - retStyle.defaultTabInterval = paragraphStyle.defaultTabInterval; -#endif - - return retStyle; -} -#endif - -- (id)init -{ - if ((self = [super init])) - { - // defaults - _firstLineHeadIndent = 0.0; - _defaultTabInterval = 36.0; - _baseWritingDirection = kCTWritingDirectionNatural; -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - _alignment = kCTTextAlignmentNatural; -#else - _alignment = kCTNaturalTextAlignment; -#endif - _lineHeightMultiple = 0.0; - _minimumLineHeight = 0.0; - _maximumLineHeight = 0.0; - _paragraphSpacing = 0.0; - } - - return self; -} - - -- (id)initWithCTParagraphStyle:(CTParagraphStyleRef)ctParagraphStyle -{ - if ((self = [super init])) - { - // text alignment - CTParagraphStyleGetValueForSpecifier(ctParagraphStyle, kCTParagraphStyleSpecifierAlignment,sizeof(_alignment), &_alignment); - - // indents - CTParagraphStyleGetValueForSpecifier(ctParagraphStyle, kCTParagraphStyleSpecifierFirstLineHeadIndent, sizeof(_firstLineHeadIndent), &_firstLineHeadIndent); - CTParagraphStyleGetValueForSpecifier(ctParagraphStyle, kCTParagraphStyleSpecifierHeadIndent, sizeof(_headIndent), &_headIndent); - CTParagraphStyleGetValueForSpecifier(ctParagraphStyle, kCTParagraphStyleSpecifierTailIndent, sizeof(_tailIndent), &_tailIndent); - - // paragraph spacing - CTParagraphStyleGetValueForSpecifier(ctParagraphStyle, kCTParagraphStyleSpecifierParagraphSpacing, sizeof(_paragraphSpacing), &_paragraphSpacing); - CTParagraphStyleGetValueForSpecifier(ctParagraphStyle, kCTParagraphStyleSpecifierParagraphSpacingBefore,sizeof(_paragraphSpacingBefore), &_paragraphSpacingBefore); - - - // tab stops - CTParagraphStyleGetValueForSpecifier(ctParagraphStyle, kCTParagraphStyleSpecifierDefaultTabInterval, sizeof(_defaultTabInterval), &_defaultTabInterval); - - CFArrayRef stops; // Could use a CFArray too, leave as a reminder how to do this in the future - if (CTParagraphStyleGetValueForSpecifier(ctParagraphStyle, kCTParagraphStyleSpecifierTabStops, sizeof(stops), &stops)) - { - self.tabStops = (__bridge NSArray *) stops; - } - - - CTParagraphStyleGetValueForSpecifier(ctParagraphStyle, kCTParagraphStyleSpecifierBaseWritingDirection, sizeof(_baseWritingDirection), &_baseWritingDirection); - - // line height - CTParagraphStyleGetValueForSpecifier(ctParagraphStyle, kCTParagraphStyleSpecifierMinimumLineHeight, sizeof(_minimumLineHeight), &_minimumLineHeight); - CTParagraphStyleGetValueForSpecifier(ctParagraphStyle, kCTParagraphStyleSpecifierMaximumLineHeight, sizeof(_maximumLineHeight), &_maximumLineHeight); - - - CTParagraphStyleGetValueForSpecifier(ctParagraphStyle, kCTParagraphStyleSpecifierLineHeightMultiple, sizeof(_lineHeightMultiple), &_lineHeightMultiple); - } - - return self; -} - -- (CTParagraphStyleRef)createCTParagraphStyle -{ - // This just makes it that much easier to track down memory issues with tabstops - CFArrayRef stops = _tabStops ? CFArrayCreateCopy (NULL, (__bridge CFArrayRef)_tabStops) : NULL; - - CTParagraphStyleSetting settings[] = - { - {kCTParagraphStyleSpecifierAlignment, sizeof(_alignment), &_alignment}, - {kCTParagraphStyleSpecifierFirstLineHeadIndent, sizeof(_firstLineHeadIndent), &_firstLineHeadIndent}, - {kCTParagraphStyleSpecifierDefaultTabInterval, sizeof(_defaultTabInterval), &_defaultTabInterval}, - - {kCTParagraphStyleSpecifierTabStops, sizeof(stops), &stops}, - - {kCTParagraphStyleSpecifierParagraphSpacing, sizeof(_paragraphSpacing), &_paragraphSpacing}, - {kCTParagraphStyleSpecifierParagraphSpacingBefore, sizeof(_paragraphSpacingBefore), &_paragraphSpacingBefore}, - - {kCTParagraphStyleSpecifierHeadIndent, sizeof(_headIndent), &_headIndent}, - {kCTParagraphStyleSpecifierTailIndent, sizeof(_tailIndent), &_tailIndent}, - {kCTParagraphStyleSpecifierBaseWritingDirection, sizeof(_baseWritingDirection), &_baseWritingDirection}, - {kCTParagraphStyleSpecifierLineHeightMultiple, sizeof(_lineHeightMultiple), &_lineHeightMultiple}, - - {kCTParagraphStyleSpecifierMinimumLineHeight, sizeof(_minimumLineHeight), &_minimumLineHeight}, - {kCTParagraphStyleSpecifierMaximumLineHeight, sizeof(_maximumLineHeight), &_maximumLineHeight} - }; - - CTParagraphStyleRef ret = CTParagraphStyleCreate(settings, 12); - - if (stops) - { - CFRelease(stops); - } - - return ret; -} - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES -- (NSParagraphStyle *)NSParagraphStyle -{ - NSMutableParagraphStyle *mps = [[NSMutableParagraphStyle alloc] init]; - - [mps setFirstLineHeadIndent:_firstLineHeadIndent]; - - [mps setParagraphSpacing:_paragraphSpacing]; - [mps setParagraphSpacingBefore:_paragraphSpacingBefore]; - - [mps setHeadIndent:_headIndent]; - [mps setTailIndent:_tailIndent]; - - [mps setMinimumLineHeight:_minimumLineHeight]; - [mps setMaximumLineHeight:_maximumLineHeight]; - [mps setLineHeightMultiple:_lineHeightMultiple]; - - [mps setAlignment:DTNSTextAlignmentFromCTTextAlignment(_alignment)]; - - switch (_baseWritingDirection) - { - case kCTWritingDirectionNatural: - { - [mps setBaseWritingDirection:NSWritingDirectionNatural]; - break; - } - - case kCTWritingDirectionLeftToRight: - { - [mps setBaseWritingDirection:NSWritingDirectionLeftToRight]; - break; - } - - case kCTWritingDirectionRightToLeft: - { - [mps setBaseWritingDirection:NSWritingDirectionRightToLeft]; - break; - } - } - -#if DTCORETEXT_SUPPORT_NSPARAGRAPHSTYLE_TABS - if (NSClassFromString(@"NSTextTab") && [NSParagraphStyle instancesRespondToSelector:@selector(tabStops)]) - { - NSMutableArray *tabs = [NSMutableArray array]; - - for (id object in _tabStops) - { - CTTextTabRef tab = (__bridge CTTextTabRef)(object); - - CTTextAlignment alignment = CTTextTabGetAlignment(tab); - NSTextAlignment nsAlignment = DTNSTextAlignmentFromCTTextAlignment(alignment); - CGFloat location = (CGFloat)CTTextTabGetLocation(tab); - - NSTextTab *textTab = [[NSTextTab alloc] initWithTextAlignment:nsAlignment location:location options:[NSDictionary dictionary]]; - - if (!textTab) - { - break; - } - - [tabs addObject:textTab]; - } - - if ([tabs count]) - { - [mps setValue:tabs forKey:@"tabStops"]; - } - - mps.defaultTabInterval = _defaultTabInterval; - } -#endif - - return (NSParagraphStyle *)mps; -} -#endif - -- (void)addTabStopAtPosition:(CGFloat)position alignment:(CTTextAlignment)alignment -{ - CTTextTabRef tab = CTTextTabCreate(alignment, position, NULL); - if(tab) - { - if (!_tabStops) - { - _tabStops = [[NSMutableArray alloc] init]; - } - [_tabStops addObject:CFBridgingRelease(tab)]; - } -} - -#pragma mark HTML Encoding - -// representation of this paragraph style in css (as far as possible) -- (NSString *)cssStyleRepresentation -{ - NSMutableString *retString = [NSMutableString string]; - - switch (_alignment) - { - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - case kCTTextAlignmentLeft: -#else - case kCTLeftTextAlignment: -#endif - [retString appendString:@"text-align:left;"]; - break; - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - case kCTTextAlignmentRight: -#else - case kCTRightTextAlignment: -#endif - [retString appendString:@"text-align:right;"]; - break; - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - case kCTTextAlignmentCenter: -#else - case kCTCenterTextAlignment: -#endif - [retString appendString:@"text-align:center;"]; - break; - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - case kCTTextAlignmentJustified: -#else - case kCTJustifiedTextAlignment: -#endif - [retString appendString:@"text-align:justify;"]; - break; - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - case kCTTextAlignmentNatural: -#else - case kCTNaturalTextAlignment: -#endif - // no output, this is default - break; - } - - if (_lineHeightMultiple!=0 && _lineHeightMultiple!=1.0f) - { - NSNumber *number = DTNSNumberFromCGFloat(_lineHeightMultiple); - [retString appendFormat:@"line-height:%@em;", number]; - } - - switch (_baseWritingDirection) - { - case kCTWritingDirectionRightToLeft: - [retString appendString:@"direction:rtl;"]; - break; - case kCTWritingDirectionLeftToRight: - [retString appendString:@"direction:ltr;"]; - break; - case kCTWritingDirectionNatural: - // no output, this is default - break; - } - - // Spacing at the bottom - if (_paragraphSpacing!=0.0f) - { - NSNumber *number = DTNSNumberFromCGFloat(_paragraphSpacing); - [retString appendFormat:@"margin-bottom:%@px;", number]; - } - - // Spacing at the top - if (_paragraphSpacingBefore!=0.0f) - { - NSNumber *number = DTNSNumberFromCGFloat(_paragraphSpacingBefore); - [retString appendFormat:@"margin-top:%@px;", number]; - } - - // Spacing at the left - if (_headIndent!=0.0f) - { - NSNumber *number = DTNSNumberFromCGFloat(_headIndent); - [retString appendFormat:@"margin-left:%@px;", number]; - } - - // Spacing at the right - if (_tailIndent!=0.0f) - { - // tail indent is negative if from trailing margin - NSNumber *number = DTNSNumberFromCGFloat(-_tailIndent); - [retString appendFormat:@"margin-right:%@px;", number]; - } - - // return nil if no content - if ([retString length]) - { - return retString; - } - else - { - return nil; - } -} - -#pragma mark Copying - -- (id)copyWithZone:(NSZone *)zone -{ - DTCoreTextParagraphStyle *newObject = [[DTCoreTextParagraphStyle allocWithZone:zone] init]; - - newObject.firstLineHeadIndent = self.firstLineHeadIndent; - newObject.tailIndent = self.tailIndent; - newObject.defaultTabInterval = self.defaultTabInterval; - newObject.paragraphSpacing = self.paragraphSpacing; - newObject.paragraphSpacingBefore = self.paragraphSpacingBefore; - newObject.lineHeightMultiple = self.lineHeightMultiple; - newObject.minimumLineHeight = self.minimumLineHeight; - newObject.maximumLineHeight = self.maximumLineHeight; - newObject.headIndent = self.headIndent; - newObject.alignment = self.alignment; - newObject.baseWritingDirection = self.baseWritingDirection; - newObject.tabStops = self.tabStops; // copy - newObject.textLists = self.textLists; //copy - newObject.textBlocks = self.textBlocks; //copy - - return newObject; -} - -#pragma mark - Comparing - -- (BOOL)isEqual:(id)object -{ - if (object == self) - { - return YES; - } - - if (!object) - { - return NO; - } - - if (![object isKindOfClass:[DTCoreTextParagraphStyle class]]) - { - return NO; - } - - DTCoreTextParagraphStyle *otherStyle = object; - - - if (_firstLineHeadIndent != otherStyle->_firstLineHeadIndent) - { - return NO; - } - - if (_headIndent != otherStyle->_headIndent) - { - return NO; - } - - if (_tailIndent != otherStyle->_tailIndent) - { - return NO; - } - - if (_defaultTabInterval != otherStyle->_defaultTabInterval) - { - return NO; - } - - if (_paragraphSpacing != otherStyle->_paragraphSpacing) - { - return NO; - } - - if (_paragraphSpacingBefore != otherStyle->_paragraphSpacingBefore) - { - return NO; - } - - if (_lineHeightMultiple != otherStyle->_lineHeightMultiple) - { - return NO; - } - - if (_minimumLineHeight != otherStyle->_minimumLineHeight) - { - return NO; - } - - if (_maximumLineHeight != otherStyle->_maximumLineHeight) - { - return NO; - } - - if (_alignment != otherStyle->_alignment) - { - return NO; - } - - if (_baseWritingDirection != otherStyle->_baseWritingDirection) - { - return NO; - } - - if (_textLists && ![_textLists isEqualToArray:otherStyle->_textLists]) - { - return NO; - } - - if (_textBlocks && ![_textBlocks isEqualToArray:otherStyle->_textBlocks]) - { - return NO; - } - - if (_tabStops && ![_tabStops isEqualToArray:otherStyle->_tabStops]) - { - return NO; - } - - return YES; -} - -#pragma mark Properties - -- (void)setTabStops:(NSArray *)tabStops -{ - if (tabStops != _tabStops) - { - _tabStops = [tabStops mutableCopy]; // keep mutability - } -} - -- (void)setFirstLineHeadIndent:(CGFloat)firstLineHeadIndent -{ - if (_firstLineHeadIndent != firstLineHeadIndent) - { - _firstLineHeadIndent = firstLineHeadIndent; - } -} - -- (void)setDefaultTabInterval:(CGFloat)defaultTabInterval -{ - if (_defaultTabInterval != defaultTabInterval) - { - _defaultTabInterval = defaultTabInterval; - } -} - -- (void)setParagraphSpacingBefore:(CGFloat)paragraphSpacingBefore -{ - if (_paragraphSpacingBefore != paragraphSpacingBefore) - { - _paragraphSpacingBefore = paragraphSpacingBefore; - } -} - -- (void)setParagraphSpacing:(CGFloat)paragraphSpacing -{ - if (_paragraphSpacing != paragraphSpacing) - { - _paragraphSpacing = paragraphSpacing; - } -} - -- (void)setLineHeightMultiple:(CGFloat)lineHeightMultiple -{ - if (_lineHeightMultiple != lineHeightMultiple) - { - _lineHeightMultiple = lineHeightMultiple; - } -} - -- (void)setMinimumLineHeight:(CGFloat)minimumLineHeight -{ - if (_minimumLineHeight != minimumLineHeight) - { - _minimumLineHeight = minimumLineHeight; - } -} - -- (void)setMaximumLineHeight:(CGFloat)maximumLineHeight -{ - if (_maximumLineHeight != maximumLineHeight) - { - _maximumLineHeight = maximumLineHeight; - } -} - -- (void)setHeadIndent:(CGFloat)headIndent -{ - if (_headIndent != headIndent) - { - _headIndent = headIndent; - } -} - -- (void)setTailIndent:(CGFloat)tailIndent -{ - if (_tailIndent != tailIndent) - { - _tailIndent = tailIndent; - } -} - -- (void)setAlignment:(CTTextAlignment)alignment -{ - if (_alignment != alignment) - { - _alignment = alignment; - } -} - -- (void)setTextLists:(NSArray *)textLists -{ - if (_textLists != textLists) - { - _textLists = [textLists copy]; - } -} - -- (void)setTextBlocks:(NSArray *)textBlocks -{ - if (_textBlocks != textBlocks) - { - _textBlocks = [textBlocks copy]; - } -} - -- (void)setBaseWritingDirection:(CTWritingDirection)baseWritingDirection -{ - if (_baseWritingDirection != baseWritingDirection) - { - _baseWritingDirection = baseWritingDirection; - } -} - -@synthesize firstLineHeadIndent = _firstLineHeadIndent; -@synthesize defaultTabInterval = _defaultTabInterval; -@synthesize paragraphSpacingBefore = _paragraphSpacingBefore; -@synthesize paragraphSpacing = _paragraphSpacing; - -@synthesize lineHeightMultiple = _lineHeightMultiple; -@synthesize minimumLineHeight = _minimumLineHeight; -@synthesize maximumLineHeight = _maximumLineHeight; -@synthesize headIndent = _headIndent; -@synthesize tailIndent = _tailIndent; -@synthesize alignment = _alignment; -@synthesize textLists = _textLists; -@synthesize textBlocks = _textBlocks; -@synthesize baseWritingDirection = _baseWritingDirection; -@synthesize tabStops = _tabStops; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTDictationPlaceholderTextAttachment.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTDictationPlaceholderTextAttachment.h deleted file mode 100644 index 4f2f2ad..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTDictationPlaceholderTextAttachment.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// DTDictationPlaceholderTextAttachment.h -// DTCoreText -// -// Created by Oliver Drobnik on 06.02.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTTextAttachment.h" - -/** - This is a special subclass of DTTextAttachment used to represent the dictation placeholder. - - When encountering such an element DTAttributedTextContentView does not call the delegate to provide a subclass but automatically creates and adds a DTDictationPlaceholderView. - */ - -@interface DTDictationPlaceholderTextAttachment : DTTextAttachment - -/** - The string that inserting the dictation placeholder replaced, used for Undoing - */ -@property (nonatomic, retain) NSAttributedString *replacedAttributedString; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTDictationPlaceholderTextAttachment.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTDictationPlaceholderTextAttachment.m deleted file mode 100644 index 825ca36..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTDictationPlaceholderTextAttachment.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// DTDictationPlaceholderTextAttachment.m -// DTCoreText -// -// Created by Oliver Drobnik on 06.02.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTDictationPlaceholderTextAttachment.h" - -@implementation DTDictationPlaceholderTextAttachment -{ - NSAttributedString *_replacedAttributedString; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [super initWithCoder:aDecoder]; - if (self) { - _replacedAttributedString = [aDecoder decodeObjectForKey:@"replacedAttributedString"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [super encodeWithCoder:aCoder]; - [aCoder encodeObject:_replacedAttributedString forKey:@"replacedAttributedString"]; -} - -// if you change any of these then also make sure to adjust the sizes in DTDictationPlaceholderTextAttachment -#define DOT_WIDTH 10.0f -#define DOT_DISTANCE 2.5f -#define DOT_OUTSIDE_MARGIN 3.0f - -// several hard-coded items -- (CGSize)displaySize -{ - return CGSizeMake(DOT_OUTSIDE_MARGIN*2.0f + DOT_WIDTH*3.0f + DOT_DISTANCE*2.0f, DOT_OUTSIDE_MARGIN*2.0f + DOT_WIDTH); -} - -- (CGSize)originalSize -{ - return [self displaySize]; -} - -- (CGFloat)ascentForLayout -{ - return self.displaySize.height; -} - -- (CGFloat)descentForLayout -{ - return 0.0f; -} - -#pragma mark - Properties - -@synthesize replacedAttributedString = _replacedAttributedString; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTDictationPlaceholderView.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTDictationPlaceholderView.h deleted file mode 100644 index d60e836..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTDictationPlaceholderView.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// DTDictationPlaceholderView.h -// DTRichTextEditor -// -// Created by Oliver Drobnik on 05.02.13. -// Copyright (c) 2013 Cocoanetics. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -/** - A dictation placeholder to display in editors between the time the recording is complete until a recognized response is received. - */ - -@interface DTDictationPlaceholderView : UIView - -/** - Creates an appropriately sized DTDictationPlaceholderView with 3 animated purple dots - */ -+ (DTDictationPlaceholderView *)placeholderView; - -/** - The context of the receiver. This can be any object, for example the selection range to replace with the dictation result text - */ -@property (nonatomic, strong) id context; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTDictationPlaceholderView.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTDictationPlaceholderView.m deleted file mode 100644 index e40666c..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTDictationPlaceholderView.m +++ /dev/null @@ -1,123 +0,0 @@ -// -// DTDictationPlaceholderView.m -// DTRichTextEditor -// -// Created by Oliver Drobnik on 05.02.13. -// Copyright (c) 2013 Cocoanetics. All rights reserved. -// - -#import "DTDictationPlaceholderView.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -// if you change any of these then also make sure to adjust the sizes in DTDictationPlaceholderTextAttachment -#define DOT_WIDTH 10.0f -#define DOT_DISTANCE 2.5f -#define DOT_OUTSIDE_MARGIN 3.0f - -@implementation DTDictationPlaceholderView -{ - NSUInteger _phase; - NSTimer *_phaseTimer; -} - -+ (DTDictationPlaceholderView *)placeholderView; -{ - return [[DTDictationPlaceholderView alloc] initWithFrame:CGRectZero]; -} - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) - { - self.backgroundColor = [UIColor clearColor]; - - [self sizeToFit]; - } - return self; -} - -- (CGSize)sizeThatFits:(CGSize)size -{ - return CGSizeMake(DOT_OUTSIDE_MARGIN*2.0f + DOT_WIDTH*3.0f + DOT_DISTANCE*2.0f, DOT_OUTSIDE_MARGIN*2.0f + DOT_WIDTH); -} - -- (UIColor *)_lightDotColor -{ - return [UIColor colorWithRed:(CGFloat)(238.0/255.0) green:(CGFloat)(128.0/255.0) blue:(CGFloat)(238.0/255.0) alpha:1.0]; -} - -- (UIColor *)_darkDotColor -{ - return [UIColor colorWithRed:(CGFloat)(191.0/255.0) green:(CGFloat)(51.0/255.0) blue:(CGFloat)(191.0/255.0) alpha:1.0]; -} - -- (void)willMoveToSuperview:(UIView *)newSuperview -{ - [super willMoveToSuperview:newSuperview]; - - [_phaseTimer invalidate]; - _phaseTimer = nil; - - if (newSuperview) - { - _phaseTimer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(_phaseTimerTick:) userInfo:nil repeats:YES]; - } -} - - -- (void)drawRect:(CGRect)rect -{ - CGContextRef ctx = UIGraphicsGetCurrentContext(); - - CGRect dotRect = CGRectMake(DOT_OUTSIDE_MARGIN, 4, DOT_WIDTH, DOT_WIDTH); - - if (_phase==0) - { - CGContextSetFillColorWithColor(ctx, [self _darkDotColor].CGColor); - } - else - { - CGContextSetFillColorWithColor(ctx, [self _lightDotColor].CGColor); - } - - CGContextFillEllipseInRect(ctx, dotRect); - - dotRect.origin.x = DOT_DISTANCE + CGRectGetMaxX(dotRect); - - if (_phase==1) - { - CGContextSetFillColorWithColor(ctx, [self _darkDotColor].CGColor); - } - else - { - CGContextSetFillColorWithColor(ctx, [self _lightDotColor].CGColor); - } - - CGContextFillEllipseInRect(ctx, dotRect); - - dotRect.origin.x = DOT_DISTANCE + CGRectGetMaxX(dotRect); - - if (_phase==2) - { - CGContextSetFillColorWithColor(ctx, [self _darkDotColor].CGColor); - } - else - { - CGContextSetFillColorWithColor(ctx, [self _lightDotColor].CGColor); - } - - CGContextFillEllipseInRect(ctx, dotRect); -} - -- (void)_phaseTimerTick:(id)sender -{ - _phase = (_phase+1)%3; - [self setNeedsDisplay]; -} - - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLAttributedStringBuilder.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLAttributedStringBuilder.h deleted file mode 100644 index b36e1d7..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLAttributedStringBuilder.h +++ /dev/null @@ -1,95 +0,0 @@ -// -// DTHTMLAttributedStringBuilder.h -// DTCoreText -// -// Created by Oliver Drobnik on 21.01.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import - -@class DTHTMLElement; - -/** - The block that gets executed whenever an element is flushed to the output string - */ -typedef void(^DTHTMLAttributedStringBuilderWillFlushCallback)(DTHTMLElement *); - -/** - The block that gets executed whenever html tag parsing error - */ -typedef void(^DTHTMLAttributedStringBuilderParseErrorCallback)(NSAttributedString *attr, NSError *); - - -/** - Class for building an `NSAttributedString` from an HTML document. - */ -@interface DTHTMLAttributedStringBuilder : NSObject - -/** - @name Creating an Attributed String Builder - */ - -/** - Initializes and returns a new `NSAttributedString` object from the HTML contained in the given object and base URL. - - Options can be: - - - DTMaxImageSize: the maximum CGSize that a text attachment can fill - - DTDefaultFontFamily: the default font family to use instead of Times New Roman - - DTDefaultFontName: the default font face to use instead of Times New Roman - - DTDefaultFontSize: the default font size to use instead of 12 - - DTDefaultFontDescriptor: the default font descriptor. This supercedes font family/name - - DTDefaultTextColor: the default text color - - DTDefaultLinkColor: the default color for hyperlink text - - DTDefaultLinkDecoration: the default decoration for hyperlinks - - DTDefaultLinkHighlightColor: the color to show while the hyperlink is highlighted - - DTDefaultTextAlignment: the default text alignment for paragraphs - - DTDefaultLineHeightMultiplier: The multiplier for line heights - - DTDefaultFirstLineHeadIndent: The default indent for left margin on first line - - DTDefaultHeadIndent: The default indent for left margin except first line - - DTDefaultListIndent: The amount by which lists are indented - - DTDefaultStyleSheet: The default style sheet to use - - DTUseiOS6Attributes: use iOS 6 attributes for building (UITextView compatible) - - DTWillFlushBlockCallBack: a block to be executed whenever content is flushed to the output string - - DTIgnoreInlineStylesOption: All inline style information is being ignored and only style blocks used - - @param data The data in HTML format from which to create the attributed string. - @param options Specifies how the document should be loaded. Contains values described in NSAttributedString(HTML). - @param docAttributes Currently not in use. - @returns Returns an initialized object, or `nil` if the data can’t be decoded. - */ -- (id)initWithHTML:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary * __autoreleasing*)docAttributes; - - -/** - @name Generating Attributed Strings - */ - -/** - Creates the attributed string when called the first time. - @returns An `NSAttributedString` representing the HTML document passed in the initializer. - */ -- (NSAttributedString *)generatedAttributedString; - - -/** - This block is called before the element is written to the output attributed string - */ -@property (nonatomic, copy) DTHTMLAttributedStringBuilderWillFlushCallback willFlushCallback; -/** - The block that gets executed whenever html tag parsing error - */ -@property (nonatomic, copy) DTHTMLAttributedStringBuilderParseErrorCallback parseErrorCallback; - -/** - Setting this property to `YES` causes the tree of parse nodes to be preserved until the end of the generation process. This allows to output the HTML structure of the document for debugging. - */ -@property (nonatomic, assign) BOOL shouldKeepDocumentNodeTree; - -/** - This func can abort AttributedString building. - */ -- (void)abortParsing; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLAttributedStringBuilder.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLAttributedStringBuilder.m deleted file mode 100644 index 2ea16c6..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLAttributedStringBuilder.m +++ /dev/null @@ -1,1044 +0,0 @@ -// -// DTHTMLAttributedStringBuilder.m -// DTCoreText -// -// Created by Oliver Drobnik on 21.01.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import -#import -#import - -#import "DTHTMLAttributedStringBuilder.h" - -#import "DTTextHTMLElement.h" -#import "DTBreakHTMLElement.h" -#import "DTStylesheetHTMLElement.h" -#import "DTCSSStylesheet.h" -#import "DTCoreTextFontDescriptor.h" -#import "DTHTMLParserTextNode.h" - -#import "DTTextAttachmentHTMLElement.h" -#import "DTColorFunctions.h" -#import "DTCoreTextParagraphStyle.h" -#import "DTObjectTextAttachment.h" -#import "DTVideoTextAttachment.h" - -#import "NSString+HTML.h" -#import "NSCharacterSet+HTML.h" -#import "NSMutableAttributedString+HTML.h" - -#if DEBUG_LOG_METRICS -#import "NSString+DTFormatNumbers.h" -#endif - -@interface DTHTMLAttributedStringBuilder () - -- (void)_registerTagStartHandlers; -- (void)_registerTagEndHandlers; - -@end - - -@implementation DTHTMLAttributedStringBuilder -{ - NSData *_data; - NSDictionary *_options; - BOOL _shouldKeepDocumentNodeTree; - - // settings for parsing - CGFloat _textScale; - DTColor *_defaultLinkColor; - DTCSSStylesheet *_globalStyleSheet; - NSURL *_baseURL; - DTCoreTextFontDescriptor *_defaultFontDescriptor; - DTCoreTextParagraphStyle *_defaultParagraphStyle; - - // root node inherits these defaults - DTHTMLElement *_defaultTag; - - // parsing state, accessed from inside blocks - NSMutableAttributedString *_tmpString; - - // GCD - dispatch_queue_t _stringAssemblyQueue; - dispatch_group_t _stringAssemblyGroup; - dispatch_queue_t _dataParsingQueue; - dispatch_group_t _dataParsingGroup; - dispatch_queue_t _treeBuildingQueue; - dispatch_group_t _treeBuildingGroup; - - // lookup table for blocks that deal with begin and end tags - NSMutableDictionary *_tagStartHandlers; - NSMutableDictionary *_tagEndHandlers; - - DTHTMLAttributedStringBuilderWillFlushCallback _willFlushCallback; - DTHTMLAttributedStringBuilderParseErrorCallback _parseErrorCallback; - - BOOL _shouldProcessCustomHTMLAttributes; - - // new parsing - DTHTMLElement *_rootNode; - DTHTMLElement *_bodyElement; - DTHTMLElement *_currentTag; - BOOL _ignoreParseEvents; // ignores events from parser after first HTML tag was finished - BOOL _ignoreInlineStyles; // ignores style blocks attached on elements - BOOL _preserverDocumentTrailingSpaces; // don't remove spaces at end of document - - DTHTMLParser *_parser; -} - -- (id)initWithHTML:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary * __autoreleasing*)docAttributes -{ - self = [super init]; - if (self) - { - _data = data; - _options = options; - - // documentAttributes ignored for now - // Specify the appropriate text encoding for the passed data, default is UTF8 - NSString *textEncodingName = [_options objectForKey:NSTextEncodingNameDocumentOption]; - NSStringEncoding encoding = NSUTF8StringEncoding; // default - - if (textEncodingName) - { - CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding((__bridge CFStringRef)textEncodingName); - encoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding); - } - _parser = [[DTHTMLParser alloc] initWithData:_data encoding:encoding]; - _parser.delegate = (id)self; - - // GCD setup - _stringAssemblyQueue = dispatch_queue_create("DTHTMLAttributedStringBuilder", 0); - _stringAssemblyGroup = dispatch_group_create(); - _dataParsingQueue = dispatch_queue_create("DTHTMLAttributedStringBuilderParser", 0); - _dataParsingGroup = dispatch_group_create(); - _treeBuildingQueue = dispatch_queue_create("DTHTMLAttributedStringBuilderParser Tree Queue", 0); - _treeBuildingGroup = dispatch_group_create(); - } - - return self; -} - -- (void)dealloc -{ -#if !OS_OBJECT_USE_OBJC - dispatch_release(_stringAssemblyQueue); - dispatch_release(_stringAssemblyGroup); - dispatch_release(_dataParsingQueue); - dispatch_release(_dataParsingGroup); - dispatch_release(_treeBuildingQueue); - dispatch_release(_treeBuildingGroup); -#endif -} - -- (BOOL)_buildString -{ -#if DEBUG_LOG_METRICS - // metrics: get start time - CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent(); -#endif - - // only with valid data - if (![_data length]) - { - return NO; - } - - // register default handlers - [self _registerTagStartHandlers]; - [self _registerTagEndHandlers]; - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - - // custom option to use iOS 6 attributes if running on iOS 6 - if ([[_options objectForKey:DTUseiOS6Attributes] boolValue]) - { -#if TARGET_OS_IPHONE - // NS-attributes only supported running on iOS 6.0 or greater - if (floor(NSFoundationVersionNumber) >= DTNSFoundationVersionNumber_iOS_6_0) - { - ___useiOS6Attributes = YES; - } - else - { - ___useiOS6Attributes = NO; - } -#else - // Mac generally supports it - ___useiOS6Attributes = YES; -#endif - } - -#endif - - - // custom option to scale text - _textScale = [[_options objectForKey:NSTextSizeMultiplierDocumentOption] floatValue]; - if (_textScale==0) - { - _textScale = 1.0f; - } - - // use baseURL from options if present - _baseURL = [_options objectForKey:NSBaseURLDocumentOption]; - - // the combined style sheet for entire document - _globalStyleSheet = [[DTCSSStylesheet defaultStyleSheet] copy]; - - // do we have a default style sheet passed as option? - DTCSSStylesheet *defaultStylesheet = [_options objectForKey:DTDefaultStyleSheet]; - if (defaultStylesheet) - { - // merge the default styles to the combined style sheet - [_globalStyleSheet mergeStylesheet:defaultStylesheet]; - } - - // for performance reasons we will return this mutable string - _tmpString = [[NSMutableAttributedString alloc] init]; - - // base tag with font defaults - - // set the default font size - CGFloat defaultFontSize = 12.0f; - - CTFontDescriptorRef defaultFontDescriptor = (__bridge CTFontDescriptorRef)[_options objectForKey:DTDefaultFontDescriptor]; - - if (defaultFontDescriptor) - { - _defaultFontDescriptor = [[DTCoreTextFontDescriptor alloc] initWithCTFontDescriptor:defaultFontDescriptor]; - } - else - { - _defaultFontDescriptor = [[DTCoreTextFontDescriptor alloc] initWithFontAttributes:nil]; - - NSNumber *defaultFontSizeNumber = [_options objectForKey:DTDefaultFontSize]; - - if (defaultFontSizeNumber) - { - defaultFontSize = [defaultFontSizeNumber floatValue]; - } - - _defaultFontDescriptor.pointSize = defaultFontSize * _textScale; - - NSString *defaultFontFamily = [_options objectForKey:DTDefaultFontFamily]; - - if (defaultFontFamily) - { - _defaultFontDescriptor.fontFamily = defaultFontFamily; - } - else - { - _defaultFontDescriptor.fontFamily = @"Times New Roman"; - } - - NSString *defaultFontName = [_options objectForKey:DTDefaultFontName]; - - if (defaultFontName) { - _defaultFontDescriptor.fontName = defaultFontName; - } - } - - _defaultLinkColor = [_options objectForKey:DTDefaultLinkColor]; - - if (_defaultLinkColor) - { - if ([_defaultLinkColor isKindOfClass:[NSString class]]) - { - // convert from string to color - _defaultLinkColor = DTColorCreateWithHTMLName((NSString *)_defaultLinkColor); - } - - // get hex code for the passed color - NSString *colorHex = DTHexStringFromDTColor(_defaultLinkColor); - - // overwrite the style - NSString *styleBlock = [NSString stringWithFormat:@"a {color:#%@;}", colorHex]; - [_globalStyleSheet parseStyleBlock:styleBlock]; - } - - // default is to have A underlined - NSNumber *linkDecorationDefault = [_options objectForKey:DTDefaultLinkDecoration]; - - if (linkDecorationDefault) - { - if (![linkDecorationDefault boolValue]) - { - // remove default decoration - [_globalStyleSheet parseStyleBlock:@"a {text-decoration:none;}"]; - } - } - - DTColor *defaultLinkHighlightColor = [_options objectForKey:DTDefaultLinkHighlightColor]; - - if (defaultLinkHighlightColor) - { - if ([defaultLinkHighlightColor isKindOfClass:[NSString class]]) - { - // convert from string to color - defaultLinkHighlightColor = DTColorCreateWithHTMLName((NSString *)defaultLinkHighlightColor); - } - - // get hex code for the passed color - NSString *colorHex = DTHexStringFromDTColor(defaultLinkHighlightColor); - - // overwrite the style - NSString *styleBlock = [NSString stringWithFormat:@"a:active {color:#%@;}", colorHex]; - [_globalStyleSheet parseStyleBlock:styleBlock]; - } - - // default paragraph style - _defaultParagraphStyle = [DTCoreTextParagraphStyle defaultParagraphStyle]; - - NSNumber *defaultLineHeightMultiplierNum = [_options objectForKey:DTDefaultLineHeightMultiplier]; - - if (defaultLineHeightMultiplierNum) - { - CGFloat defaultLineHeightMultiplier = [defaultLineHeightMultiplierNum floatValue]; - _defaultParagraphStyle.lineHeightMultiple = defaultLineHeightMultiplier; - } - - NSNumber *defaultTextAlignmentNum = [_options objectForKey:DTDefaultTextAlignment]; - - if (defaultTextAlignmentNum) - { - _defaultParagraphStyle.alignment = (CTTextAlignment)[defaultTextAlignmentNum integerValue]; - } - - NSNumber *defaultFirstLineHeadIndent = [_options objectForKey:DTDefaultFirstLineHeadIndent]; - if (defaultFirstLineHeadIndent) - { - _defaultParagraphStyle.firstLineHeadIndent = [defaultFirstLineHeadIndent integerValue]; - } - - NSNumber *defaultHeadIndent = [_options objectForKey:DTDefaultHeadIndent]; - if (defaultHeadIndent) - { - _defaultParagraphStyle.headIndent = [defaultHeadIndent integerValue]; - } - - _defaultTag = [[DTHTMLElement alloc] init]; - _defaultTag.fontDescriptor = _defaultFontDescriptor; - _defaultTag.paragraphStyle = _defaultParagraphStyle; - _defaultTag.textScale = _textScale; - _defaultTag.currentTextSize = _defaultFontDescriptor.pointSize; - -#if DTCORETEXT_FIX_14684188 - // workaround, only necessary while rdar://14684188 is not fixed - _defaultTag.textColor = [UIColor blackColor]; -#endif - _defaultTag.underlineColor = [UIColor blackColor]; - - id defaultColor = [_options objectForKey:DTDefaultTextColor]; - if (defaultColor) - { - if ([defaultColor isKindOfClass:[DTColor class]]) - { - // already a DTColor - _defaultTag.textColor = defaultColor; - } - else - { - // need to convert first - _defaultTag.textColor = DTColorCreateWithHTMLName(defaultColor); - } - } - - _shouldProcessCustomHTMLAttributes = [[_options objectForKey:DTProcessCustomHTMLAttributes] boolValue]; - - // ignore inline styles if option is passed - _ignoreInlineStyles = [[_options objectForKey:DTIgnoreInlineStylesOption] boolValue]; - - // don't remove spaces at end of document - _preserverDocumentTrailingSpaces = [[_options objectForKey:DTDocumentPreserveTrailingSpaces] boolValue]; - - DT_WEAK_VARIABLE typeof(self) weakSelf = self; - __block BOOL result; - dispatch_group_async(_dataParsingGroup, _dataParsingQueue, ^{ result = [weakSelf.self->_parser parse]; }); - - // wait until all string assembly is complete - dispatch_group_wait(_dataParsingGroup, DISPATCH_TIME_FOREVER); - dispatch_group_wait(_treeBuildingGroup, DISPATCH_TIME_FOREVER); - dispatch_group_wait(_stringAssemblyGroup, DISPATCH_TIME_FOREVER); - - // clean up handlers because they retained self - _tagStartHandlers = nil; - _tagEndHandlers = nil; - -#if DEBUG_LOG_METRICS - // metrics: get end time - CFAbsoluteTime endTime = CFAbsoluteTimeGetCurrent(); - - // output metrics - DTLogInfo((@"DTCoreText created string from %@ HTML in %.2f sec", [NSString stringByFormattingBytes:[_data length]], endTime-startTime); -#endif - - return result; -} - -- (NSAttributedString *)generatedAttributedString -{ - if (!_tmpString) - { - [self _buildString]; - } - - return _tmpString; -} - -#pragma mark GCD - -- (void)_registerTagStartHandlers -{ - if (_tagStartHandlers) - { - return; - } - - _tagStartHandlers = [[NSMutableDictionary alloc] init]; - - void (^blockquoteBlock)(void) = ^ - { - self->_currentTag.paragraphStyle.headIndent += (CGFloat)25.0 * self->_textScale; - self->_currentTag.paragraphStyle.firstLineHeadIndent = self->_currentTag.paragraphStyle.headIndent; - self->_currentTag.paragraphStyle.paragraphSpacing = self->_defaultFontDescriptor.pointSize; - }; - - [_tagStartHandlers setObject:[blockquoteBlock copy] forKey:@"blockquote"]; - - - void (^aBlock)(void) = ^ - { - if (self->_currentTag.isColorInherited || !self->_currentTag.textColor) - { - self->_currentTag.textColor = self->_defaultLinkColor; - self->_currentTag.isColorInherited = NO; - } - - // the name attribute of A becomes an anchor - self->_currentTag.anchorName = [self->_currentTag attributeForKey:@"name"]; - - // remove line breaks and whitespace in links - NSString *cleanString = [[self->_currentTag attributeForKey:@"href"] stringByReplacingOccurrencesOfString:@"\n" withString:@""]; - cleanString = [cleanString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; - - if (![cleanString length]) - { - // no valid href - return; - } - - NSURL *link = [NSURL URLWithString:cleanString]; - - if (link == nil) - { - cleanString = [cleanString stringByEncodingNonASCIICharacters]; - link = [NSURL URLWithString:cleanString]; - } - - // deal with relative URL - if (![link scheme]) - { - if ([cleanString length]) - { - link = [NSURL URLWithString:cleanString relativeToURL:self->_baseURL]; - - if (!link) - { - // NSURL did not like the link, so let's encode it - cleanString = [cleanString stringByAddingHTMLEntities]; - - link = [NSURL URLWithString:cleanString relativeToURL:self->_baseURL]; - } - } - else - { - link = self->_baseURL; - } - } - - self->_currentTag.link = link; - }; - - [_tagStartHandlers setObject:[aBlock copy] forKey:@"a"]; - - void (^listBlock)(void) = ^ - { - self->_currentTag.paragraphStyle.firstLineHeadIndent = self->_currentTag.paragraphStyle.headIndent; - - // create the appropriate list style from CSS - DTCSSListStyle *newListStyle = [self->_currentTag listStyle]; - - // append this list style to the current paragraph style text lists - NSMutableArray *textLists = [self->_currentTag.paragraphStyle.textLists mutableCopy]; - - if (!textLists) - { - textLists = [NSMutableArray array]; - } - - [textLists addObject:newListStyle]; - - self->_currentTag.paragraphStyle.textLists = textLists; - }; - - [_tagStartHandlers setObject:[listBlock copy] forKey:@"ul"]; - [_tagStartHandlers setObject:[listBlock copy] forKey:@"ol"]; - - void (^h1Block)(void) = ^ - { - self->_currentTag.headerLevel = 1; - }; - [_tagStartHandlers setObject:[h1Block copy] forKey:@"h1"]; - - void (^h2Block)(void) = ^ - { - self->_currentTag.headerLevel = 2; - }; - [_tagStartHandlers setObject:[h2Block copy] forKey:@"h2"]; - - - void (^h3Block)(void) = ^ - { - self->_currentTag.headerLevel = 3; - }; - [_tagStartHandlers setObject:[h3Block copy] forKey:@"h3"]; - - - void (^h4Block)(void) = ^ - { - self->_currentTag.headerLevel = 4; - }; - [_tagStartHandlers setObject:[h4Block copy] forKey:@"h4"]; - - - void (^h5Block)(void) = ^ - { - self->_currentTag.headerLevel = 5; - }; - [_tagStartHandlers setObject:[h5Block copy] forKey:@"h5"]; - - - void (^h6Block)(void) = ^ - { - self->_currentTag.headerLevel = 6; - }; - [_tagStartHandlers setObject:[h6Block copy] forKey:@"h6"]; - - - void (^fontBlock)(void) = ^ - { - CGFloat pointSize; - - NSString *sizeAttribute = [self->_currentTag attributeForKey:@"size"]; - - if (sizeAttribute) - { - NSInteger sizeValue = [sizeAttribute intValue]; - - switch (sizeValue) - { - case 1: - pointSize = self->_textScale * 10.0f; - break; - case 2: - pointSize = self->_textScale * 13.0f; - break; - case 3: - pointSize = self->_textScale * 16.0f; - break; - case 4: - pointSize = self->_textScale * 18.0f; - break; - case 5: - pointSize = self->_textScale * 24.0f; - break; - case 6: - pointSize = self->_textScale * 32.0f; - break; - case 7: - pointSize = self->_textScale * 48.0f; - break; - default: - pointSize = self->_defaultFontDescriptor.pointSize; - break; - } - } - else - { - // size is inherited - pointSize = self->_currentTag.fontDescriptor.pointSize; - } - - NSString *face = [self->_currentTag attributeForKey:@"face"]; - - if (face) - { - // create a temp font with this face - CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)face, pointSize, NULL); - - self->_currentTag.fontDescriptor = [DTCoreTextFontDescriptor fontDescriptorForCTFont:font]; - - CFRelease(font); - } - else - { - // modify inherited descriptor - self->_currentTag.fontDescriptor.pointSize = pointSize; - } - - NSString *color = [self->_currentTag attributeForKey:@"color"]; - - if (color) - { - self->_currentTag.textColor = DTColorCreateWithHTMLName(color); - } - }; - - [_tagStartHandlers setObject:[fontBlock copy] forKey:@"font"]; - - - void (^pBlock)(void) = ^ - { - // if have the custom headIndent - if (self->_defaultParagraphStyle.firstLineHeadIndent > 0) - { - self->_currentTag.paragraphStyle.firstLineHeadIndent = self->_currentTag.paragraphStyle.headIndent + - self->_defaultParagraphStyle.firstLineHeadIndent; - } - else - { - self->_currentTag.paragraphStyle.firstLineHeadIndent = self->_currentTag.paragraphStyle.headIndent + self->_currentTag.pTextIndent; - } - }; - - [_tagStartHandlers setObject:[pBlock copy] forKey:@"p"]; -} - -- (void)_registerTagEndHandlers -{ - if (_tagEndHandlers) - { - return; - } - - _tagEndHandlers = [[NSMutableDictionary alloc] init]; - - void (^objectBlock)(void) = ^ - { - if ([self->_currentTag isKindOfClass:[DTTextAttachmentHTMLElement class]]) - { - if ([self->_currentTag.textAttachment isKindOfClass:[DTObjectTextAttachment class]]) - { - DTObjectTextAttachment *objectAttachment = (DTObjectTextAttachment *)self->_currentTag.textAttachment; - - // transfer the child nodes to the attachment - objectAttachment.childNodes = [self->_currentTag.childNodes copy]; - } - } - }; - - [_tagEndHandlers setObject:[objectBlock copy] forKey:@"object"]; - - void (^videoBlock)(void) = ^ - { - if ([self->_currentTag isKindOfClass:[DTTextAttachmentHTMLElement class]]) - { - DTTextAttachmentHTMLElement *attachmentElement = (DTTextAttachmentHTMLElement *)self->_currentTag; - - if ([attachmentElement.textAttachment isKindOfClass:[DTVideoTextAttachment class]]) - { - DTVideoTextAttachment *videoAttachment = (DTVideoTextAttachment *)attachmentElement.textAttachment; - - // find first child that has a source - if (!videoAttachment.contentURL) - { - for (DTHTMLElement *child in attachmentElement.childNodes) - { - if ([child.name isEqualToString:@"source"]) - { - NSString *src = [child attributeForKey:@"src"]; - - // content URL - videoAttachment.contentURL = [NSURL URLWithString:src relativeToURL:self->_baseURL]; - - break; - } - } - } - } - } - }; - - [_tagEndHandlers setObject:[videoBlock copy] forKey:@"video"]; - - void (^styleBlock)(void) = ^ - { - DTCSSStylesheet *localSheet = [(DTStylesheetHTMLElement *)self->_currentTag stylesheet]; - [self->_globalStyleSheet mergeStylesheet:localSheet]; - }; - - [_tagEndHandlers setObject:[styleBlock copy] forKey:@"style"]; - - - void (^linkBlock)(void) = ^ - { - NSString *href = [self->_currentTag attributeForKey:@"href"]; - NSString *type = [[self->_currentTag attributeForKey:@"type"] lowercaseString]; - - if ([type isEqualToString:@"text/css"]) - { - NSURL *stylesheetURL = [NSURL URLWithString:href relativeToURL:self->_baseURL]; - if ([stylesheetURL isFileURL]) - { - NSString *stylesheetContent = [NSString stringWithContentsOfURL:stylesheetURL encoding:NSUTF8StringEncoding error:nil]; - if (stylesheetContent) - { - DTCSSStylesheet *localSheet = [[DTCSSStylesheet alloc] initWithStyleBlock:stylesheetContent]; - [self->_globalStyleSheet mergeStylesheet:localSheet]; - } - } - else - { - DTLogWarning(@"CSS link referencing a non-local target, ignored"); - } - } - }; - - [ _tagEndHandlers setObject:[linkBlock copy] forKey:@"link"]; -} - -#pragma mark DTHTMLParser Delegate - -- (void)parser:(DTHTMLParser *)parser didStartElement:(NSString *)elementName attributes:(NSDictionary *)attributeDict -{ - DT_WEAK_VARIABLE typeof(self) weakSelf = self; - dispatch_group_async(_treeBuildingGroup, _treeBuildingQueue, ^{ - DTHTMLAttributedStringBuilder *strongSelf = weakSelf; - - if (strongSelf->_ignoreParseEvents) - { - return; - } - - DTHTMLElement *newNode = [DTHTMLElement elementWithName:elementName attributes:attributeDict options:strongSelf->_options]; - DTHTMLElement *previousLastChild = nil; - - if (strongSelf->_currentTag) - { - // inherit stuff - [newNode inheritAttributesFromElement:strongSelf->_currentTag]; - [newNode interpretAttributes]; - - previousLastChild = [strongSelf->_currentTag.childNodes lastObject]; - - // add as new child of current node - [strongSelf->_currentTag addChildNode:newNode]; - - // remember body node - if (!strongSelf->_bodyElement && [newNode.name isEqualToString:@"body"]) - { - strongSelf->_bodyElement = newNode; - } - - if (strongSelf->_shouldProcessCustomHTMLAttributes) - { - newNode.shouldProcessCustomHTMLAttributes = strongSelf->_shouldProcessCustomHTMLAttributes; - } - } - else - { - NSAssert(!strongSelf->_rootNode, @"Something went wrong, second root node found in document and not ignored."); - - // might be first node ever - if (!strongSelf->_rootNode) - { - strongSelf->_rootNode = newNode; - - [strongSelf->_rootNode inheritAttributesFromElement:strongSelf->_defaultTag]; - [strongSelf->_rootNode interpretAttributes]; - } - } - - // apply style from merged style sheet - NSSet *matchedSelectors; - NSDictionary *mergedStyles = [strongSelf->_globalStyleSheet mergedStyleDictionaryForElement:newNode matchedSelectors:&matchedSelectors ignoreInlineStyle:strongSelf->_ignoreInlineStyles]; - - if (mergedStyles) - { - [newNode applyStyleDictionary:mergedStyles]; - - // do not add the matched class names to 'class' custom attribute - if (matchedSelectors) - { - NSMutableSet *classNamesToIgnoreForCustomAttributes = [NSMutableSet set]; - - for (NSString *oneSelector in matchedSelectors) - { - // class selectors have a period - NSRange periodRange = [oneSelector rangeOfString:@"."]; - - if (periodRange.location != NSNotFound) - { - NSString *className = [oneSelector substringFromIndex:periodRange.location+1]; - - // add this to ignored classes - [classNamesToIgnoreForCustomAttributes addObject:className]; - } - } - - if ([classNamesToIgnoreForCustomAttributes count]) - { - newNode.CSSClassNamesToIgnoreForCustomAttributes = classNamesToIgnoreForCustomAttributes; - } - } - } - - // adding a block element eliminates previous trailing white space text node - // because a new block starts on a new line - if (previousLastChild && newNode.displayStyle != DTHTMLElementDisplayStyleInline) - { - if ([previousLastChild isKindOfClass:[DTTextHTMLElement class]]) - { - DTTextHTMLElement *textElement = (DTTextHTMLElement *)previousLastChild; - - if ([[textElement text] isIgnorableWhitespace]) - { - [strongSelf->_currentTag removeChildNode:textElement]; - } - } - } - - strongSelf->_currentTag = newNode; - - // find block to execute for this tag if any - void (^tagBlock)(void) = [strongSelf->_tagStartHandlers objectForKey:elementName]; - - if (tagBlock) - { - tagBlock(); - } - }); -} - -- (void)parser:(DTHTMLParser *)parser didEndElement:(NSString *)elementName -{ - - DT_WEAK_VARIABLE typeof(self) weakSelf = self; - dispatch_group_async(_treeBuildingGroup, _treeBuildingQueue, ^{ - @autoreleasepool { - DTHTMLAttributedStringBuilder *strongSelf = weakSelf; - if (strongSelf->_ignoreParseEvents) - { - return; - } - - // output the element if it is direct descendant of body tag, or close of body in case there are direct text nodes - - // find block to execute for this tag if any - void (^tagBlock)(void) = [strongSelf->_tagEndHandlers objectForKey:elementName]; - - if (tagBlock) - { - tagBlock(); - } - - if (strongSelf->_currentTag.displayStyle != DTHTMLElementDisplayStyleNone) - { - if (strongSelf->_currentTag == strongSelf->_bodyElement || strongSelf->_currentTag.parentElement == strongSelf->_bodyElement) - { - DTHTMLElement *theTag = strongSelf->_currentTag; - - dispatch_group_async(strongSelf->_stringAssemblyGroup, strongSelf->_stringAssemblyQueue, ^{ - // has children that have not been output yet - if ([theTag needsOutput]) - { - // caller gets opportunity to modify tag before it is written - if (strongSelf->_willFlushCallback) - { - strongSelf->_willFlushCallback(theTag); - } - - NSAttributedString *nodeString = [theTag attributedString]; - - if (nodeString) - { - // if this is a block element then we need a paragraph break before it - if (theTag.displayStyle != DTHTMLElementDisplayStyleInline) - { - if ([strongSelf->_tmpString length] && ![[strongSelf->_tmpString string] hasSuffix:@"\n"]) - { - // trim off whitespace - while ([[strongSelf->_tmpString string] hasSuffixCharacterFromSet:[NSCharacterSet ignorableWhitespaceCharacterSet]]) - { - [strongSelf->_tmpString deleteCharactersInRange:NSMakeRange([strongSelf->_tmpString length]-1, 1)]; - } - - [strongSelf->_tmpString appendString:@"\n"]; - } - } - - [strongSelf->_tmpString appendAttributedString:nodeString]; - theTag.didOutput = YES; - - if (!strongSelf->_shouldKeepDocumentNodeTree) - { - // we don't need the children any more - [theTag removeAllChildNodes]; - } - } - - } - }); - } - - } - - while (![strongSelf->_currentTag.name isEqualToString:elementName]) - { - // missing end of element, attempt to recover - strongSelf->_currentTag = [strongSelf->_currentTag parentElement]; - } - - // closing the root node, ignore everything afterwards - if (strongSelf->_currentTag == strongSelf->_rootNode) - { - strongSelf->_ignoreParseEvents = YES; - } - - // go back up a level - strongSelf->_currentTag = [strongSelf->_currentTag parentElement]; - } - }); -} - -- (void)parser:(DTHTMLParser *)parser foundCharacters:(NSString *)string -{ - DT_WEAK_VARIABLE typeof(self) weakSelf = self; - dispatch_group_async(_treeBuildingGroup, _treeBuildingQueue, ^{ - DTHTMLAttributedStringBuilder *strongSelf = weakSelf; - if (strongSelf->_ignoreParseEvents) - { - return; - } - - NSAssert(strongSelf->_currentTag, @"Cannot add text node without a current node"); - - if (!strongSelf->_currentTag.preserveNewlines && [string isIgnorableWhitespace]) - { - // ignore whitespace as first element of block element - if (strongSelf->_currentTag.displayStyle!=DTHTMLElementDisplayStyleInline && ![strongSelf->_currentTag.childNodes count]) - { - return; - } - - // ignore whitespace following a block element - DTHTMLElement *previousTag = [strongSelf->_currentTag.childNodes lastObject]; - - if (previousTag.displayStyle != DTHTMLElementDisplayStyleInline) - { - return; - } - - // ignore whitespace following a BR - if ([previousTag isKindOfClass:[DTBreakHTMLElement class]]) - { - return; - } - } - - // adds a text node to the current node - DTTextHTMLElement *textNode = [[DTTextHTMLElement alloc] init]; - textNode.text = string; - - [textNode inheritAttributesFromElement:strongSelf->_currentTag]; - [textNode interpretAttributes]; - - // save it for later output - [strongSelf->_currentTag addChildNode:textNode]; - - DTHTMLElement *theTag = strongSelf->_currentTag; - - // text directly contained in body needs to be output right away - if (theTag == strongSelf->_bodyElement) - { - dispatch_group_async(strongSelf->_stringAssemblyGroup, strongSelf->_stringAssemblyQueue, ^{ - [strongSelf->_tmpString appendAttributedString:[textNode attributedString]]; - theTag.didOutput = YES; - }); - - // only add it to current tag if we need it - if (strongSelf->_shouldKeepDocumentNodeTree) - { - [theTag addChildNode:textNode]; - } - - return; - } - - }); -} - -- (void)parser:(DTHTMLParser *)parser foundCDATA:(NSData *)CDATABlock -{ - DT_WEAK_VARIABLE typeof(self) weakSelf = self; - dispatch_group_async(_treeBuildingGroup, _treeBuildingQueue, ^{ - DTHTMLAttributedStringBuilder *strongSelf = weakSelf; - - if (strongSelf->_ignoreParseEvents) - { - return; - } - - NSAssert(strongSelf->_currentTag, @"Cannot add text node without a current node"); - - NSString *styleBlock = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding]; - - // adds a text node to the current node - DTHTMLParserTextNode *textNode = [[DTHTMLParserTextNode alloc] initWithCharacters:styleBlock]; - - [strongSelf->_currentTag addChildNode:textNode]; - }); -} - -- (void)parserDidEndDocument:(DTHTMLParser *)parser -{ - DT_WEAK_VARIABLE typeof(self) weakSelf = self; - dispatch_group_async(_treeBuildingGroup, _treeBuildingQueue, ^{ - DTHTMLAttributedStringBuilder *strongSelf = weakSelf; - - NSAssert(!strongSelf->_currentTag, @"Something went wrong, at end of document there is still an open node"); - - if (!strongSelf->_preserverDocumentTrailingSpaces) { - dispatch_group_async(strongSelf->_stringAssemblyGroup, strongSelf->_stringAssemblyQueue, ^{ - // trim off white space at end - while ([[strongSelf->_tmpString string] hasSuffixCharacterFromSet:[NSCharacterSet whitespaceCharacterSet]]) - { - [strongSelf->_tmpString deleteCharactersInRange:NSMakeRange([strongSelf->_tmpString length]-1, 1)]; - } - }); - } - }); -} - -- (void)parser:(DTHTMLParser *)parser parseErrorOccurred:(NSError *)parseError; -{ - if(_parseErrorCallback) - { - _parseErrorCallback(_tmpString,parseError); - } -} - -- (void)abortParsing -{ - [_parser abortParsing]; -} -#pragma mark Properties - -@synthesize willFlushCallback = _willFlushCallback; -@synthesize shouldKeepDocumentNodeTree = _shouldKeepDocumentNodeTree; -@synthesize parseErrorCallback = _parseErrorCallback; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLElement.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLElement.h deleted file mode 100644 index 9f390ae..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLElement.h +++ /dev/null @@ -1,350 +0,0 @@ -// -// DTHTMLElement.h -// DTCoreText -// -// Created by Oliver Drobnik on 4/14/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -@class DTCoreTextParagraphStyle; -@class DTCoreTextFontDescriptor; -@class DTTextAttachment; -@class DTCSSListStyle; - -#import "DTCompatibility.h" -#import "DTCoreTextConstants.h" -#import "DTHTMLParserNode.h" -#import "DTTextAttachment.h" - -@class DTBreakHTMLElement; - -/** - Class to represent a element (aka "tag") in a HTML document. Structure information - like parent or children - is inherited from its superclass . - */ -@interface DTHTMLElement : DTHTMLParserNode -{ - DTCoreTextFontDescriptor *_fontDescriptor; - DTCoreTextParagraphStyle *_paragraphStyle; - DTTextAttachment *_textAttachment; - DTTextAttachmentVerticalAlignment _textAttachmentAlignment; - NSURL *_link; - NSString *_anchorName; - - DTColor *_textColor; - DTColor *_backgroundColor; - - DTColor *_backgroundStrokeColor; - CGFloat _backgroundStrokeWidth; - CGFloat _backgroundCornerRadius; - - CTUnderlineStyle _underlineStyle; - DTColor *_underlineColor; - - NSString *_beforeContent; - - NSString *_linkGUID; - - BOOL _strikeOut; - NSInteger _superscriptStyle; - - NSInteger _headerLevel; - - NSArray *_shadows; - - DTHTMLElementDisplayStyle _displayStyle; - DTHTMLElementFloatStyle _floatStyle; - - BOOL _isColorInherited; - - BOOL _preserveNewlines; - BOOL _containsAppleConvertedSpace; - - DTHTMLElementFontVariant _fontVariant; - - CGFloat _textScale; - CGSize _size; - - NSMutableArray *_children; - - NSDictionary *_styles; - - BOOL _didOutput; - - // margins/padding - DTEdgeInsets _margins; - DTEdgeInsets _padding; - - // indent of lists - CGFloat _listIndent; - - // indent of tag

- CGFloat _pTextIndent; - - BOOL _shouldProcessCustomHTMLAttributes; -} - -/** - @name Creating HTML Elements - */ - -/** - Designed initializer, creates the appropriate element sub type - @param name The element name - @param attributes The attributes dictionary of the tag - @param options The parsing options dictionary - @returns the initialized element - */ -+ (DTHTMLElement *)elementWithName:(NSString *)name attributes:(NSDictionary *)attributes options:(NSDictionary *)options; - - -/** - @name Creating Attributed Strings - */ - -/** - Creates an `NSAttributedString` that represents the receiver including all its children. This method is typically overwritten in subclasses of that represent specific HTML elements. - @returns An attributed string that also contains the children - */ -- (NSAttributedString *)attributedString; - -/** - The dictionary of Core Text attributes for creating an `NSAttributedString` representation for the receiver - @returns The dictionary of attributes - */ -- (NSDictionary *)attributesForAttributedStringRepresentation; - -/** - Creates a to match the CSS styles - */ -- (DTCSSListStyle *)listStyle; - - -/** - @name Getting Element Information - */ - -/** - Font Descriptor describing the font state of the receiver - */ -@property (nonatomic, copy) DTCoreTextFontDescriptor *fontDescriptor; - -/** - Paragraph Style describing the paragraph state of the receiver - */ -@property (nonatomic, copy) DTCoreTextParagraphStyle *paragraphStyle; - -/** - Text Attachment of the receiver, or `nil` if there is no attachment - */ -@property (nonatomic, strong) DTTextAttachment *textAttachment; - -/** - Hyperlink URL of the receiver, or `nil` if there is no hyperlink - */ -@property (nonatomic, copy) NSURL *link; - -/** - Anchor name, used by hyperlinks, of the receiver that can be used to scroll to. - */ -@property (nonatomic, copy) NSString *anchorName; - -/** - Foreground text color of the receiver - */ -@property (nonatomic, strong) DTColor *textColor; - -/** - Background color of text in the receiver - */ -@property (nonatomic, strong) DTColor *backgroundColor; - -/** - Background stroke color in the receiver - */ -@property (nonatomic, strong) DTColor *backgroundStrokeColor; - -/** - Background stroke width in the receiver - */ -@property (nonatomic, assign) CGFloat backgroundStrokeWidth; - -/** - Background stroke width in the receiver - */ -@property (nonatomic, assign) CGFloat backgroundCornerRadius; - -/** - Tag

text indent - */ -@property (nonatomic, assign) CGFloat pTextIndent; - -/** - The custom letter spacing of the receiver, default is 0px - */ -@property (nonatomic, assign) CGFloat letterSpacing; - -/** - Additional text to be inserted before the text content of the receiver - */ -@property (nonatomic, copy) NSString *beforeContent; - -/** - Array of shadows attached to the text contents of the receiver - */ -@property (nonatomic, copy) NSArray *shadows; - -/** - The underline style of the receiver, at present only none or single line are supported - */ -@property (nonatomic, assign) CTUnderlineStyle underlineStyle; - -/** - The underline color of the receiver - */ -@property (nonatomic, strong) DTColor *underlineColor; - -/** - The strike-out style of the receiver - */ -@property (nonatomic, assign) BOOL strikeOut; - -/** - The superscript style of the receiver or 0 if it does not have superscript text. - */ -@property (nonatomic, assign) NSInteger superscriptStyle; - -/** - The header level of the receiver, or 0 if it is not a header - */ -@property (nonatomic, assign) NSInteger headerLevel; - -/** - The display style of the receiver. - */ -@property (nonatomic, assign) DTHTMLElementDisplayStyle displayStyle; - -/** - Whether the receiver is marked as float. While floating is not currently supported this can be used to add additional paragraph breaks. - */ -@property (nonatomic, readonly) DTHTMLElementFloatStyle floatStyle; - -/** - Specifies that the textColor was inherited. Assigning textColor sets this flag to `NO` - */ -@property (nonatomic, assign) BOOL isColorInherited; - -/** - Specifies that whitespace and new lines should be preserved. Default is to compress white space. - */ -@property (nonatomic, assign) BOOL preserveNewlines; - -/** - The current font variant of the receiver, normal or small caps. - */ - -@property (nonatomic, assign) DTHTMLElementFontVariant fontVariant; - -/** - The current unscaled font size (used when inheriting font size). You're probably looking for fontDescriptor.pointSize. - */ -@property (nonatomic, assign) CGFloat currentTextSize; - -/** - The scale by which all fonts are scaled - */ -@property (nonatomic, assign) CGFloat textScale; - -/** - The size of the receiver, either from width/height attributes or width/hight styles. - */ -@property (nonatomic, assign) CGSize size; - -/** - The value of the CSS margins. Margin support is incomplete. - */ -@property (nonatomic, assign) DTEdgeInsets margins; - -/** The value of the CSS padding. Padding are added to DTTextBlock instances for block-level elements. - */ -@property (nonatomic, assign) DTEdgeInsets padding; - -/** - Specifies that whitespace contained in the receiver's text has been converted with Apple's algorithm. - */ -@property (nonatomic, assign) BOOL containsAppleConvertedSpace; - -/** - Prevents adding custom HTML attributes to output - */ -@property (nonatomic, assign) BOOL shouldProcessCustomHTMLAttributes; - -/** - @name Working with HTML Attributes - */ - -/** - Retrieves an attribute with a given key - @param key The attribute name to retrieve - @returns the attribute string - */ -- (NSString *)attributeForKey:(NSString *)key; - -/** - Copies and inherits relevant attributes from the given parent element - @param element The element to inherit attributes from - */ -- (void)inheritAttributesFromElement:(DTHTMLElement *)element; - -/** - Interprets the tag attributes for e.g. writing direction. Usually you would call this after inheritAttributesFromElement:. - */ -- (void)interpretAttributes; - -/** - The HTML attributes that should be attached to the generated attributed string. Typically all attributes that were processed by -interpretAttributes are in this list. All other attributes get added to the generated attributed string with the DTCustomAttributesAttribute key. - */ -+ (NSSet *)attributesToIgnoreForCustomAttributesAttribute; - -/** - The CSS class names that are not to be added to the "class" custom attribute in the DTCustomAttributesAttribute key. Those are usually the class names - */ -@property(nonatomic, strong) NSSet *CSSClassNamesToIgnoreForCustomAttributes; - -/** - @name Working with CSS Styles - */ - -/** - Applies the style information contained in a styles dictionary to the receiver - @param styles A style dictionary - */ -- (void)applyStyleDictionary:(NSDictionary *)styles; - - -/** - @name HTML Node Hierarchy - */ - -/** - Returns the parent element. That's the same as the parent node but with adjusted type for convenience. - */ -- (DTHTMLElement *)parentElement; - - -/** - @name Output State (Internal) - */ - -/** - Internal state during string building to mark the receiver as having been flushed - */ -@property (nonatomic, assign) BOOL didOutput; - -/** - Internal method that determines if this element still requires output, based on its own didOutput - state and the didOutput state of its children - @returns `YES` if it still requires output - */ -- (BOOL)needsOutput; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLElement.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLElement.m deleted file mode 100644 index 93933c4..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLElement.m +++ /dev/null @@ -1,1805 +0,0 @@ -// -// DTHTMLElement.m -// CoreTextExtensions -// -// Created by Oliver Drobnik on 4/14/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTHTMLElement.h" -#import "DTAnchorHTMLElement.h" -#import "DTTextAttachmentHTMLElement.h" -#import "DTBreakHTMLElement.h" -#import "DTHorizontalRuleHTMLElement.h" -#import "DTListItemHTMLElement.h" -#import "DTStylesheetHTMLElement.h" -#import "DTTextHTMLElement.h" -#import "DTTextBlock.h" -#import "DTCSSListStyle.h" -#import "NSString+HTML.h" -#import "NSString+CSS.h" -#import "NSString+Paragraphs.h" -#import "DTColorFunctions.h" -#import "DTCoreTextParagraphStyle.h" -#import "DTCoreTextFontDescriptor.h" -#import "NSAttributedStringRunDelegates.h" - -#import "NSMutableAttributedString+HTML.h" -#import "NSCharacterSet+HTML.h" - -#import -#import - -#import - -#if TARGET_OS_IPHONE -#import "UIFont+DTCoreText.h" -#endif - -@interface DTHTMLElement () - -@property (nonatomic, strong) NSString *linkGUID; - -// internal initializer -- (id)initWithName:(NSString *)name attributes:(NSDictionary *)attributes options:(NSDictionary *)options; - -@end - -// global variables -BOOL ___shouldUseiOS6Attributes = NO; -NSDictionary *_classesForNames = nil; - - -@implementation DTHTMLElement -{ - NSSet *_CSSClassNamesToIgnoreForCustomAttributes; -} - -+ (void)initialize -{ - // prevent calling from children - if (self != [DTHTMLElement class]) - { - return; - } - - // lookup table so that we quickly get the correct class to instantiate for special tags - NSMutableDictionary *tmpDict = [[NSMutableDictionary alloc] init]; - - [tmpDict setObject:[DTAnchorHTMLElement class] forKey:@"a"]; - [tmpDict setObject:[DTBreakHTMLElement class] forKey:@"br"]; - [tmpDict setObject:[DTHorizontalRuleHTMLElement class] forKey:@"hr"]; - [tmpDict setObject:[DTListItemHTMLElement class] forKey:@"li"]; - [tmpDict setObject:[DTStylesheetHTMLElement class] forKey:@"style"]; - [tmpDict setObject:[DTTextAttachmentHTMLElement class] forKey:@"img"]; - [tmpDict setObject:[DTTextAttachmentHTMLElement class] forKey:@"object"]; - [tmpDict setObject:[DTTextAttachmentHTMLElement class] forKey:@"video"]; - [tmpDict setObject:[DTTextAttachmentHTMLElement class] forKey:@"iframe"]; - - _classesForNames = [tmpDict copy]; -} - -+ (instancetype)elementWithName:(NSString *)name attributes:(NSDictionary *)attributes options:(NSDictionary *)options -{ - // look for specialized class - Class class = [_classesForNames objectForKey:name]; - - if (!class) - { - // see if this is a custom attachment class - Class attachmentClass = [DTTextAttachment registeredClassForTagName:name]; - - if (attachmentClass) - { - class = [DTTextAttachmentHTMLElement class]; - } - else - { - // use generic of none found - class = [DTHTMLElement class]; - } - } - - DTHTMLElement *element = [[class alloc] initWithName:name attributes:attributes options:options]; - - return element; -} - -- (instancetype)initWithName:(NSString *)name attributes:(NSDictionary *)attributes options:(NSDictionary *)options -{ - // node does not need the options, but it needs the name and attributes - self = [super initWithName:name attributes:attributes]; - if (self) - { - } - - return self; -} - -#pragma mark - Creating Attributed Strings - -- (NSDictionary *)attributesForAttributedStringRepresentation -{ - NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary]; - - // add text attachment - if (_textAttachment) - { -#if TARGET_OS_IPHONE - // need run delegate for sizing (only supported on iOS) - CTRunDelegateRef embeddedObjectRunDelegate = createEmbeddedObjectRunDelegate(_textAttachment); - [tmpDict setObject:CFBridgingRelease(embeddedObjectRunDelegate) forKey:(id)kCTRunDelegateAttributeName]; -#endif - - // add attachment - [tmpDict setObject:_textAttachment forKey:NSAttachmentAttributeName]; - - // remember original paragraphSpacing - [tmpDict setObject:DTNSNumberFromCGFloat(self.paragraphStyle.paragraphSpacing) forKey:DTAttachmentParagraphSpacingAttribute]; - } - - CTFontRef font = [_fontDescriptor newMatchingFont]; - - if (font) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES && __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_5_1 - if (___useiOS6Attributes) - { - UIFont *uiFont = [UIFont fontWithCTFont:font]; - [tmpDict setObject:uiFont forKey:NSFontAttributeName]; - } - else -#endif - { - // __bridge since its already retained elsewhere - [tmpDict setObject:(__bridge id)(font) forKey:(id)kCTFontAttributeName]; - } - - - // use this font to adjust the values needed for the run delegate during layout time - [_textAttachment adjustVerticalAlignmentForFont:font]; - - CFRelease(font); - } - - // add hyperlink - if (_link) - { - [tmpDict setObject:_link forKey:DTLinkAttribute]; - - // add a GUID to group multiple glyph runs belonging to same link - [tmpDict setObject:_linkGUID forKey:DTGUIDAttribute]; - } - - // add anchor - if (_anchorName) - { - [tmpDict setObject:_anchorName forKey:DTAnchorAttribute]; - } - - // add strikeout if applicable - if (_strikeOut) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - [tmpDict setObject:[NSNumber numberWithInteger:NSUnderlineStyleSingle] forKey:NSStrikethroughStyleAttributeName]; - } - else -#endif - { - [tmpDict setObject:[NSNumber numberWithBool:YES] forKey:DTStrikeOutAttribute]; - } - } - - // set underline style - if (_underlineStyle) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - [tmpDict setObject:[NSNumber numberWithInteger:NSUnderlineStyleSingle] forKey:NSUnderlineStyleAttributeName]; - } - else -#endif - { - [tmpDict setObject:[NSNumber numberWithInteger:_underlineStyle] forKey:(id)kCTUnderlineStyleAttributeName]; - } - - // we could set an underline color as well if we wanted, but not supported by HTML - // [attributes setObject:(id)[DTImage redColor].CGColor forKey:(id)kCTUnderlineColorAttributeName]; - } - - // set underline color - if (_underlineColor) - { - #if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - [tmpDict setObject:_underlineColor forKey:NSUnderlineColorAttributeName]; - } - else - #endif - { - [tmpDict setObject:_underlineColor.CGColor forKey:(id)kCTUnderlineColorAttributeName]; - } - } - - if (_textColor) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - [tmpDict setObject:_textColor forKey:NSForegroundColorAttributeName]; - } - else -#endif - { - [tmpDict setObject:(id)[_textColor CGColor] forKey:(id)kCTForegroundColorAttributeName]; - } - } - - if (_backgroundColor) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - [tmpDict setObject:_backgroundColor forKey:NSBackgroundColorAttributeName]; - } - else -#endif - { - [tmpDict setObject:(id)[_backgroundColor CGColor] forKey:DTBackgroundColorAttribute]; - } - } - - if (_superscriptStyle) - { - [tmpDict setObject:(id)[NSNumber numberWithInteger:_superscriptStyle] forKey:(id)kCTSuperscriptAttributeName]; - } - - // add paragraph style - if (_paragraphStyle) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - NSParagraphStyle *style = [self.paragraphStyle NSParagraphStyle]; - [tmpDict setObject:style forKey:NSParagraphStyleAttributeName]; - } - else -#endif - { - CTParagraphStyleRef newParagraphStyle = [self.paragraphStyle createCTParagraphStyle]; - [tmpDict setObject:CFBridgingRelease(newParagraphStyle) forKey:(id)kCTParagraphStyleAttributeName]; - } - } - - // add shadow array if applicable - if (_shadows) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - // only a single shadow supported - NSDictionary *firstShadow = [_shadows objectAtIndex:0]; - - NSShadow *shadow = [[NSShadow alloc] init]; - shadow.shadowOffset = [[firstShadow objectForKey:@"Offset"] CGSizeValue]; - shadow.shadowColor = [firstShadow objectForKey:@"Color"]; - shadow.shadowBlurRadius = [[firstShadow objectForKey:@"Blur"] floatValue]; - [tmpDict setObject:shadow forKey:NSShadowAttributeName]; - } - else -#endif - { - [tmpDict setObject:_shadows forKey:DTShadowsAttribute]; - } - } - - if (_letterSpacing != 0) - { - NSNumber *letterSpacingNum = DTNSNumberFromCGFloat(_letterSpacing); - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - [tmpDict setObject:letterSpacingNum forKey:NSKernAttributeName]; - } - else -#endif - { - [tmpDict setObject:letterSpacingNum forKey:(id)kCTKernAttributeName]; - } - } - - if (_headerLevel) - { - [tmpDict setObject:[NSNumber numberWithInteger:_headerLevel] forKey:DTHeaderLevelAttribute]; - } - - if (_paragraphStyle.textLists) - { - [tmpDict setObject:_paragraphStyle.textLists forKey:DTTextListsAttribute]; - } - - if (_paragraphStyle.textBlocks) - { - [tmpDict setObject:_paragraphStyle.textBlocks forKey:DTTextBlocksAttribute]; - } - - if (_backgroundStrokeColor) - { - [tmpDict setObject:(id)[_backgroundStrokeColor CGColor] forKey:DTBackgroundStrokeColorAttribute]; - } - - if (_backgroundStrokeWidth != 0) - { - [tmpDict setObject:DTNSNumberFromCGFloat(_backgroundStrokeWidth) forKey:DTBackgroundStrokeWidthAttribute]; - } - - if (_backgroundCornerRadius != 0) - { - [tmpDict setObject:DTNSNumberFromCGFloat(_backgroundCornerRadius) forKey:DTBackgroundCornerRadiusAttribute]; - } - - return tmpDict; -} - -- (BOOL)needsOutput -{ - @synchronized(self) - { - if ([self.childNodes count]) - { - for (DTHTMLElement *oneChild in self.childNodes) - { - // ignore children that have display:none - if (oneChild.displayStyle == DTHTMLElementDisplayStyleNone) - { - continue; - } - - if (!oneChild.didOutput) - { - return YES; - } - } - - return NO; - } - - return YES; - } -} - -- (BOOL)_isNotChildOfList -{ - DTHTMLElement *parent = self.parentElement; - - if (parent.displayStyle == DTHTMLElementDisplayStyleListItem) - { - return NO; - } - - if (parent.displayStyle == DTHTMLElementDisplayStyleBlock) - { - if ([parent.name isEqualToString:@"ol"] || [parent.name isEqualToString:@"ul"]) - { - return NO; - } - } - - return YES; -} - -// adds the attributes that have not been "dealt with" to the DTCustomAttributesAttribute -- (void)_addCustomHTMLAttributesToAttributedString:(NSMutableAttributedString *)attributedString -{ - NSSet *attributesToIgnore = [[self class] attributesToIgnoreForCustomAttributesAttribute]; - NSRange entireString = NSMakeRange(0, [attributedString length]); - - [_attributes enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) { - - // Ignore attributes on global ignore list - if ([attributesToIgnore containsObject:key]) return; - // Ignore Apple-converted-space helper CSS class - if ([@"class" isEqualToString:key] && [@"Apple-converted-space" isEqualToString:value]) return; - - if (self.CSSClassNamesToIgnoreForCustomAttributes && [key isEqualToString:@"class"]) - { - NSMutableArray *classNamesToKeep = [NSMutableArray array]; - - NSArray *components = nil; - - if ([value isKindOfClass:[NSString class]]) - { - // split the class string - components = [value componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - } - else if ([value isKindOfClass:[NSArray class]]) - { - // already an array - components = value; - } - - for (NSString *oneClassName in components) - { - if (![self.CSSClassNamesToIgnoreForCustomAttributes containsObject:oneClassName]) - { - [classNamesToKeep addObject:oneClassName]; - } - } - - if ([classNamesToKeep count]) - { - value = [classNamesToKeep componentsJoinedByString:@" "]; - } - else - { - return; // continue enumeration, class attribute would be empty - } - } - - // we preserve existing because they are from children - [attributedString addHTMLAttribute:key value:value range:entireString replaceExisting:NO]; - }]; -} - -- (NSAttributedString *)attributedString -{ - @synchronized(self) - { - if (_displayStyle == DTHTMLElementDisplayStyleNone || self.didOutput) - { - return nil; - } - - NSDictionary *attributes = [self attributesForAttributedStringRepresentation]; - - NSMutableAttributedString *tmpString; - - if (_textAttachment) - { - // ignore text, use unicode object placeholder - tmpString = [[NSMutableAttributedString alloc] initWithString:UNICODE_OBJECT_PLACEHOLDER attributes:attributes]; - } - else - { - // walk through children - tmpString = [[NSMutableAttributedString alloc] init]; - - DTHTMLElement *previousChild = nil; - - for (DTHTMLElement *oneChild in self.childNodes) - { - if (oneChild.displayStyle == DTHTMLElementDisplayStyleNone) - { - continue; - } - - // if previous node was inline and this child is block then we need a newline - if (previousChild && previousChild.displayStyle == DTHTMLElementDisplayStyleInline) - { - if (oneChild.displayStyle == DTHTMLElementDisplayStyleBlock) - { - // trim off whitespace suffix - while ([[tmpString string] hasSuffixCharacterFromSet:[NSCharacterSet ignorableWhitespaceCharacterSet]]) - { - [tmpString deleteCharactersInRange:NSMakeRange([tmpString length]-1, 1)]; - } - - // paragraph break - [tmpString appendString:@"\n"]; - } - } - - NSAttributedString *nodeString = [oneChild attributedString]; - - if (nodeString) - { - if (!oneChild.containsAppleConvertedSpace) - { - // we already have a white space in the string so far - if ([[tmpString string] hasSuffixCharacterFromSet:[NSCharacterSet ignorableWhitespaceCharacterSet]]) - { - // following e.g. a BR we don't want a space or NL - NSCharacterSet *charactersToIgnore = [NSCharacterSet characterSetWithCharactersInString:@" \n\t"]; - - while ([[nodeString string] hasPrefixCharacterFromSet:charactersToIgnore]) - { - NSString *field = [nodeString attribute:DTFieldAttribute atIndex:0 effectiveRange:NULL]; - - // do not trim off field - if ([field isEqualToString:DTListPrefixField]) - { - break; - } - - // do not trim off HR character - BOOL isHR = [[nodeString attribute:DTHorizontalRuleStyleAttribute atIndex:0 effectiveRange:NULL] boolValue]; - - if (isHR) - { - break; - } - - nodeString = [nodeString attributedSubstringFromRange:NSMakeRange(1, [nodeString length]-1)]; - } - } - } - - [tmpString appendAttributedString:nodeString]; - } - - previousChild = oneChild; - } - } - - // block-level elements get space trimmed and a newline - if (_displayStyle != DTHTMLElementDisplayStyleInline) - { - // trim off whitespace prefix - while ([[tmpString string] hasPrefix:@" "]) - { - [tmpString deleteCharactersInRange:NSMakeRange(0, 1)]; - } - - // trim off whitespace suffix - while ([[tmpString string] hasSuffix:@" "]) - { - [tmpString deleteCharactersInRange:NSMakeRange([tmpString length]-1, 1)]; - } - - if (![self.name isEqualToString:@"html"] && ![self.name isEqualToString:@"body"]) - { - if (![[tmpString string] hasSuffix:@"\n"]) - { - if ([tmpString length]) - { - // extend font and paragraph style with the \n - [tmpString appendEndOfParagraph]; - } - else - { - // string is empty, need a new attributed string so that we have the attributes - attributes = [self attributesForAttributedStringRepresentation]; - NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:@"\n" attributes:attributes]; - [tmpString appendAttributedString:attributedString]; - } - } - } - } - - // make sure the last sub-paragraph of this has no less than the specified paragraph spacing of this element - // e.g. last LI needs to inherit the margin-after of the UL - if (self.displayStyle == DTHTMLElementDisplayStyleBlock && [tmpString length]>0) - { - - // if this is latest - if ([self _isNotChildOfList]) - { - NSRange paragraphRange = [[tmpString string] rangeOfParagraphAtIndex:[tmpString length]-1]; - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - NSParagraphStyle *paraStyle = [tmpString attribute:NSParagraphStyleAttributeName atIndex:paragraphRange.location effectiveRange:NULL]; - - DTCoreTextParagraphStyle *paragraphStyle = [DTCoreTextParagraphStyle paragraphStyleWithNSParagraphStyle:paraStyle]; - - if (paragraphStyle.paragraphSpacing < self.paragraphStyle.paragraphSpacing) - { - paragraphStyle.paragraphSpacing = self.paragraphStyle.paragraphSpacing; - - // make new paragraph style - NSParagraphStyle *newParaStyle = [paragraphStyle NSParagraphStyle]; - -#if DTCORETEXT_NEEDS_ATTRIBUTE_REPLACEMENT_LEAK_FIX - if (NSFoundationVersionNumber <= NSFoundationVersionNumber10_6_8) // less than OS X 10.7 and less than iOS 5 - { - // remove old (works around iOS 4.3 leak) - [tmpString removeAttribute:NSParagraphStyleAttributeName range:paragraphRange]; - } -#endif - - // set new - [tmpString addAttribute:NSParagraphStyleAttributeName value:newParaStyle range:paragraphRange]; - } - } - else -#endif - { - CTParagraphStyleRef paraStyle = (__bridge CTParagraphStyleRef)[tmpString attribute:(id)kCTParagraphStyleAttributeName atIndex:paragraphRange.location effectiveRange:NULL]; - - DTCoreTextParagraphStyle *paragraphStyle = [DTCoreTextParagraphStyle paragraphStyleWithCTParagraphStyle:paraStyle]; - - if (paragraphStyle.paragraphSpacing < self.paragraphStyle.paragraphSpacing) - { - paragraphStyle.paragraphSpacing = self.paragraphStyle.paragraphSpacing; - - // make new paragraph style - CTParagraphStyleRef newParaStyle = [paragraphStyle createCTParagraphStyle]; - -#if DTCORETEXT_NEEDS_ATTRIBUTE_REPLACEMENT_LEAK_FIX - if (NSFoundationVersionNumber <= NSFoundationVersionNumber10_6_8) // less than OS X 10.7 and less than iOS 5 - { - // remove old (works around iOS 4.3 leak) - [tmpString removeAttribute:(id)kCTParagraphStyleAttributeName range:paragraphRange]; - } -#endif - - // set new - [tmpString addAttribute:(id)kCTParagraphStyleAttributeName value:(__bridge_transfer id)newParaStyle range:paragraphRange]; - } - } - } - } - - // add the custom attributes - if (_shouldProcessCustomHTMLAttributes) - { - [self _addCustomHTMLAttributesToAttributedString:tmpString]; - } - - return tmpString; - } -} - -#pragma mark - Working with CSS Styles - -// decodes the edgeInsets for padding or margin -- (BOOL)_parseEdgeInsetsFromStyleDictionary:(NSDictionary *)styles forAttributesWithPrefix:(NSString *)prefix writingDirection:(CTWritingDirection)writingDirection intoEdgeInsets:(DTEdgeInsets *)intoEdgeInsets -{ - DTEdgeInsets edgeInsets = {0,0,0,0}; - - // preserve previous values in insets - if (intoEdgeInsets) - { - edgeInsets = *intoEdgeInsets; - } - - BOOL didModify = NO; - - if (![styles count]) - { - return didModify; - } - - BOOL isWebKitAttribute = NO; - - if ([prefix hasPrefix:@"-webkit"]) - { - isWebKitAttribute = YES; - } - - NSString *leftKey = @"-left"; - - if (isWebKitAttribute) - { - if (writingDirection==kCTWritingDirectionRightToLeft) - { - // RTL - leftKey = @"-end"; - } - else - { - // LTR - leftKey = @"-start"; - } - } - - NSString *rightKey = @"-right"; - - if (isWebKitAttribute) - { - if (writingDirection==kCTWritingDirectionRightToLeft) - { - // RTL - rightKey = @"-start"; - } - else - { - // LTR - rightKey = @"-end"; - } - } - - NSString *topKey = isWebKitAttribute?@"-before":@"-top"; - NSString *bottomKey = isWebKitAttribute?@"-after":@"-bottom"; - - for (NSString *oneKey in styles) - { - if (![oneKey hasPrefix:prefix]) - { - continue; - } - - NSString *attributeValue = [styles objectForKey:oneKey]; - - NSRange dashRange = [oneKey rangeOfString:@"-"]; - - if (dashRange.length) - { - if ([oneKey hasSuffix:leftKey]) - { - edgeInsets.left = [attributeValue pixelSizeOfCSSMeasureRelativeToCurrentTextSize:self.fontDescriptor.pointSize textScale:_textScale]; - didModify = YES; - } - else if ([oneKey hasSuffix:bottomKey]) - { - edgeInsets.bottom = [attributeValue pixelSizeOfCSSMeasureRelativeToCurrentTextSize:self.fontDescriptor.pointSize textScale:_textScale]; - didModify = YES; - } - else if ([oneKey hasSuffix:rightKey]) - { - edgeInsets.right = [attributeValue pixelSizeOfCSSMeasureRelativeToCurrentTextSize:self.fontDescriptor.pointSize textScale:_textScale]; - didModify = YES; - } - else if ([oneKey hasSuffix:topKey]) - { - edgeInsets.top = [attributeValue pixelSizeOfCSSMeasureRelativeToCurrentTextSize:self.fontDescriptor.pointSize textScale:_textScale]; - didModify = YES; - } - } - else - { - // shortcut with multiple values - edgeInsets = [attributeValue DTEdgeInsetsRelativeToCurrentTextSize:self.fontDescriptor.pointSize textScale:_textScale]; - didModify = YES; - } - } - - if (didModify && intoEdgeInsets) - { - *intoEdgeInsets = edgeInsets; - } - - return didModify; -} - -- (void)applyStyleDictionary:(NSDictionary *)styles -{ - if (![styles count]) - { - return; - } - - // keep that for later lookup - _styles = styles; - - // writing direction - NSString *directionStr = [_styles objectForKey:@"direction"]; - - if (directionStr && [directionStr isKindOfClass:[NSString class]]) - { - if ([directionStr isEqualToString:@"rtl"]) - { - _paragraphStyle.baseWritingDirection = kCTWritingDirectionRightToLeft; - } - else if ([directionStr isEqualToString:@"ltr"]) - { - _paragraphStyle.baseWritingDirection = kCTWritingDirectionLeftToRight; - } - else if ([directionStr isEqualToString:@"auto"]) - { - _paragraphStyle.baseWritingDirection = kCTWritingDirectionNatural; // that's also default - } - else - { - // other values are invalid and will be ignored - } - } - - // register pseudo-selector contents - self.beforeContent = [[_styles objectForKey:@"before:content"] stringByDecodingCSSContentAttribute]; - - id fontSizeObj = [styles objectForKey:@"font-size"]; - NSString *fontSize = nil; - if (fontSizeObj) - { - if ([fontSizeObj isKindOfClass:[NSString class]]) - { - fontSize = fontSizeObj; - } - else if ([fontSizeObj isKindOfClass:[NSArray class]]) - { - id fontSizeLastObj = ((NSArray *)fontSizeObj).lastObject; - if ([fontSizeLastObj isKindOfClass:[NSString class]]) - { - fontSize = fontSizeLastObj; - } - } - } - if (fontSize && [fontSize isKindOfClass:[NSString class]]) - { - // absolute sizes based on 12.0 CoreText default size, Safari has 16.0 - - if ([fontSize isEqualToString:@"smaller"]) - { - _fontDescriptor.pointSize /= 1.2f; - } - else if ([fontSize isEqualToString:@"larger"]) - { - _fontDescriptor.pointSize *= 1.2f; - } - else if ([fontSize isEqualToString:@"xx-small"]) - { - _fontDescriptor.pointSize = 9.0f * _textScale; - } - else if ([fontSize isEqualToString:@"x-small"]) - { - _fontDescriptor.pointSize = 10.0f * _textScale; - } - else if ([fontSize isEqualToString:@"small"]) - { - _fontDescriptor.pointSize = 13.0f * _textScale; - } - else if ([fontSize isEqualToString:@"medium"]) - { - _fontDescriptor.pointSize = 16.0f * _textScale; - } - else if ([fontSize isEqualToString:@"large"]) - { - _fontDescriptor.pointSize = 18.0f * _textScale; - } - else if ([fontSize isEqualToString:@"x-large"]) - { - _fontDescriptor.pointSize = 24.0f * _textScale; - } - else if ([fontSize isEqualToString:@"xx-large"]) - { - _fontDescriptor.pointSize = 32.0f * _textScale; - } - else if ([fontSize isEqualToString:@"-webkit-xxx-large"]) - { - _fontDescriptor.pointSize = 48.0f * _textScale; - } - else if ([fontSize isEqualToString:@"inherit"]) - { - _fontDescriptor.pointSize = self.parentElement.fontDescriptor.pointSize; - } - else if ([fontSize isCSSLengthValue]) - { - _fontDescriptor.pointSize = [fontSize pixelSizeOfCSSMeasureRelativeToCurrentTextSize:_currentTextSize textScale:_textScale]; - } - } - - NSString *color = [styles objectForKey:@"color"]; - if (color && [color isKindOfClass:[NSString class]]) - { - self.textColor = DTColorCreateWithHTMLName(color); - } - - NSString *bgColor = [styles objectForKey:@"background-color"]; - if (bgColor && [bgColor isKindOfClass:[NSString class]]) - { - self.backgroundColor = DTColorCreateWithHTMLName(bgColor); - } - - NSString *floatString = [styles objectForKey:@"float"]; - - if (floatString && [floatString isKindOfClass:[NSString class]]) - { - if ([floatString isEqualToString:@"left"]) - { - _floatStyle = DTHTMLElementFloatStyleLeft; - } - else if ([floatString isEqualToString:@"right"]) - { - _floatStyle = DTHTMLElementFloatStyleRight; - } - else if ([floatString isEqualToString:@"none"]) - { - _floatStyle = DTHTMLElementFloatStyleNone; - } - } - - id fontFamilyStyle = [styles objectForKey:@"font-family"]; - - if (fontFamilyStyle) - { - NSArray *fontFamilies; - - if ([fontFamilyStyle isKindOfClass:[NSString class]]) - { - fontFamilies = [NSArray arrayWithObject:fontFamilyStyle]; - } - else if ([fontFamilyStyle isKindOfClass:[NSArray class]]) - { - fontFamilies = fontFamilyStyle; - } - - BOOL foundFontFamily = NO; - - for (NSString *fontFamily in fontFamilies) - { - if (![fontFamily isKindOfClass:[NSString class]]) { - continue; - } - - _fontDescriptor.fontFamily = fontFamily; - - // check if this is a known font family - CTFontRef font = [_fontDescriptor newMatchingFont]; - - if (font) - { - NSString *foundFamily = CFBridgingRelease(CTFontCopyFamilyName(font)); - CFRelease(font); - - if ([foundFamily isEqualToString:fontFamily]) - { - foundFontFamily = YES; - break; - } - - NSString *lowercaseFontFamily = [fontFamily lowercaseString]; - NSString *lowercaseFontFamilyWithoutWhiteSpaces = [lowercaseFontFamily stringByReplacingOccurrencesOfString:@"\\s" - withString:@"" - options:NSRegularExpressionSearch - range:NSMakeRange(0, [lowercaseFontFamily length])]; - NSArray *lowercaseFontFamilyWithoutWhiteSpacesArray = [lowercaseFontFamilyWithoutWhiteSpaces componentsSeparatedByString: @","]; - - if ([lowercaseFontFamilyWithoutWhiteSpacesArray indexOfObject:@"geneva"] != NSNotFound) - { - _fontDescriptor.fontFamily = @"Helvetica"; - foundFontFamily = YES; - } - else if ([lowercaseFontFamilyWithoutWhiteSpacesArray indexOfObject:@"cursive"] != NSNotFound) - { - _fontDescriptor.stylisticClass = kCTFontScriptsClass; - _fontDescriptor.fontFamily = nil; - foundFontFamily = YES; - } - else if ([lowercaseFontFamilyWithoutWhiteSpacesArray indexOfObject:@"sans-serif"] != NSNotFound) - { - // too many matches (24) - // fontDescriptor.stylisticClass = kCTFontSansSerifClass; - _fontDescriptor.fontFamily = @"Helvetica"; - foundFontFamily = YES; - } - else if ([lowercaseFontFamilyWithoutWhiteSpacesArray indexOfObject:@"serif"] != NSNotFound) - { - // kCTFontTransitionalSerifsClass = Baskerville - // kCTFontClarendonSerifsClass = American Typewriter - // kCTFontSlabSerifsClass = Courier New - // - // strangely none of the classes yields Times - _fontDescriptor.fontFamily = @"Times New Roman"; - foundFontFamily = YES; - } - else if ([lowercaseFontFamilyWithoutWhiteSpacesArray indexOfObject:@"fantasy"] != NSNotFound) - { - _fontDescriptor.fontFamily = @"Papyrus"; // only available on iPad - foundFontFamily = YES; - } - else if ([lowercaseFontFamilyWithoutWhiteSpacesArray indexOfObject:@"monospace"] != NSNotFound) - { - _fontDescriptor.monospaceTrait = YES; - _fontDescriptor.fontFamily = @"Courier"; - foundFontFamily = YES; - } - else if ([lowercaseFontFamilyWithoutWhiteSpacesArray indexOfObject:@"times"] != NSNotFound) - { - _fontDescriptor.fontFamily = @"Times New Roman"; - foundFontFamily = YES; - } - else if ([lowercaseFontFamily isEqualToString:@"inherit"]) - { - _fontDescriptor.fontFamily = self.parentElement.fontDescriptor.fontFamily; - foundFontFamily = YES; - } - - } - - if (foundFontFamily) - { - break; - } - } - - if (!foundFontFamily) - { - // probably custom font registered in info.plist - _fontDescriptor.fontFamily = [fontFamilies objectAtIndex:0]; - } - } - - NSString *fontStyleObject = [styles objectForKey:@"font-style"]; - if (fontStyleObject && [fontStyleObject isKindOfClass:[NSString class]]) - { - NSString *fontStyle = [fontSizeObj lowercaseString]; - // remove font name since this would cause font creation to ignore the trait - _fontDescriptor.fontName = nil; - - if ([fontStyle isEqualToString:@"normal"]) - { - _fontDescriptor.italicTrait = NO; - } - else if ([fontStyle isEqualToString:@"italic"] || [fontStyle isEqualToString:@"oblique"]) - { - _fontDescriptor.italicTrait = YES; - } - else if ([fontStyle isEqualToString:@"inherit"]) - { - // nothing to do - } - } - - NSString *fontWeightObject = [styles objectForKey:@"font-weight"]; - if (fontWeightObject && [fontWeightObject isKindOfClass:[NSString class]]) - { - NSString *fontWeight = [fontWeightObject lowercaseString]; - // remove font name since this would cause font creation to ignore the trait - _fontDescriptor.fontName = nil; - - if ([fontWeight isEqualToString:@"normal"]) - { - _fontDescriptor.boldTrait = NO; - } - else if ([fontWeight isEqualToString:@"bold"]) - { - _fontDescriptor.boldTrait = YES; - } - else if ([fontWeight isEqualToString:@"bolder"]) - { - _fontDescriptor.boldTrait = YES; - } - else if ([fontWeight isEqualToString:@"lighter"]) - { - _fontDescriptor.boldTrait = NO; - } - else - { - // can be 100 - 900 - - NSInteger value = [fontWeight intValue]; - - if (value<=600) - { - _fontDescriptor.boldTrait = NO; - } - else - { - _fontDescriptor.boldTrait = YES; - } - } - } - - NSString *decorationObject = [styles objectForKey:@"text-decoration"]; - if (decorationObject && [decorationObject isKindOfClass:[NSString class]]) - { - NSString *decoration = [decorationObject lowercaseString]; - - if ([decoration isEqualToString:@"underline"]) - { - self.underlineStyle = kCTUnderlineStyleSingle; - } - else if ([decoration isEqualToString:@"line-through"]) - { - self.strikeOut = YES; - } - else if ([decoration isEqualToString:@"none"]) - { - // remove all - self.underlineStyle = kCTUnderlineStyleNone; - self.strikeOut = NO; - } - else if ([decoration isEqualToString:@"overline"]) - { - DTLogInfo(@"Note: 'overline' text decoration not supported"); - } - else if ([decoration isEqualToString:@"blink"]) - { - DTLogInfo(@"Note: 'blink' text decoration not supported"); - } - else if ([decoration isEqualToString:@"inherit"]) - { - // nothing to do - } - } - - NSString *decorationColorObject = [styles objectForKey:@"text-decoration-color"]; - if (decorationColorObject && [decorationColorObject isKindOfClass:[NSString class]]) - { - self.underlineColor = DTColorCreateWithHTMLName([decorationColorObject lowercaseString]); - } - - NSString *alignmentObject = [styles objectForKey:@"text-align"]; - if (alignmentObject && [alignmentObject isKindOfClass:[NSString class]]) - { - NSString *alignment = [alignmentObject lowercaseString]; - - if ([alignment isEqualToString:@"left"]) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - self.paragraphStyle.alignment = kCTTextAlignmentLeft; -#else - self.paragraphStyle.alignment = kCTLeftTextAlignment; -#endif - } - else if ([alignment isEqualToString:@"right"]) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - self.paragraphStyle.alignment = kCTTextAlignmentRight; -#else - self.paragraphStyle.alignment = kCTRightTextAlignment; -#endif - } - else if ([alignment isEqualToString:@"center"]) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - self.paragraphStyle.alignment = kCTTextAlignmentCenter; -#else - self.paragraphStyle.alignment = kCTCenterTextAlignment; -#endif - } - else if ([alignment isEqualToString:@"justify"]) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - self.paragraphStyle.alignment = kCTTextAlignmentJustified; -#else - self.paragraphStyle.alignment = kCTJustifiedTextAlignment; -#endif - } - else if ([alignment isEqualToString:@"inherit"]) - { - // nothing to do - } - } - - NSString *verticalAlignmentObject = [styles objectForKey:@"vertical-align"]; - if (verticalAlignmentObject && [verticalAlignmentObject isKindOfClass:[NSString class]]) - { - NSString *verticalAlignment = [verticalAlignmentObject lowercaseString]; - - if ([verticalAlignment isEqualToString:@"sub"]) - { - self.superscriptStyle = -1; - } - else if ([verticalAlignment isEqualToString:@"super"]) - { - self.superscriptStyle = +1; - } - else if ([verticalAlignment isEqualToString:@"baseline"]) - { - self.superscriptStyle = 0; - } - else if ([verticalAlignment isEqualToString:@"inherit"]) - { - // nothing to do - } - else if ([verticalAlignment isEqualToString:@"text-top"]) - { - _textAttachmentAlignment = DTTextAttachmentVerticalAlignmentTop; - } - else if ([verticalAlignment isEqualToString:@"middle"]) - { - _textAttachmentAlignment = DTTextAttachmentVerticalAlignmentCenter; - } - else if ([verticalAlignment isEqualToString:@"text-bottom"]) - { - _textAttachmentAlignment = DTTextAttachmentVerticalAlignmentBottom; - } - else if ([verticalAlignment isEqualToString:@"baseline"]) - { - _textAttachmentAlignment = DTTextAttachmentVerticalAlignmentBaseline; - } - } - - NSString *letterSpacingObject = [styles objectForKey:@"letter-spacing"]; - if (letterSpacingObject && [letterSpacingObject isKindOfClass:[NSString class]]) - { - NSString *letterSpacing = [letterSpacingObject lowercaseString]; - - if ([letterSpacing isEqualToString:@"normal"]) - { - _letterSpacing = 0; - } - else if ([letterSpacing isEqualToString:@"inherit"]) - { - // no op, we already inherited it - } - else // interpret as length - { - _letterSpacing = [letterSpacing pixelSizeOfCSSMeasureRelativeToCurrentTextSize:self.fontDescriptor.pointSize textScale:_textScale]; - } - } - - // if there is a text attachment we transfer the alignment we got - _textAttachment.verticalAlignment = _textAttachmentAlignment; - - id shadow = [styles objectForKey:@"text-shadow"]; - if (shadow) - { - - self.shadows = [shadow arrayOfCSSShadowsWithCurrentTextSize:_fontDescriptor.pointSize currentColor:_textColor]; - } - - NSString *lineHeightObject = [styles objectForKey:@"line-height"]; - if (lineHeightObject && [lineHeightObject isKindOfClass:[NSString class]]) - { - NSString *lineHeight = [lineHeightObject lowercaseString]; - - if ([lineHeight isEqualToString:@"normal"]) - { - self.paragraphStyle.lineHeightMultiple = 0.0; // default - self.paragraphStyle.minimumLineHeight = 0.0; // default - self.paragraphStyle.maximumLineHeight = 0.0; // default - } - else if ([lineHeight isEqualToString:@"inherit"]) - { - // no op, we already inherited it - } - else if ([lineHeight dt_isNumeric]) - { - self.paragraphStyle.lineHeightMultiple = [lineHeight floatValue]; - } - else // interpret as length - { - CGFloat lineHeightValue = [lineHeight pixelSizeOfCSSMeasureRelativeToCurrentTextSize:self.fontDescriptor.pointSize textScale:_textScale]; - self.paragraphStyle.minimumLineHeight = lineHeightValue; - self.paragraphStyle.maximumLineHeight = lineHeightValue; - } - } - - // Specializations on line-height: - - NSString *minimumLineHeightObject = [styles objectForKey:@"minimum-line-height"]; - if (minimumLineHeightObject && [minimumLineHeightObject isKindOfClass:[NSString class]]) - { - NSString *minimumLineHeight = [minimumLineHeightObject lowercaseString]; - - if ([minimumLineHeight isEqualToString:@"normal"]) - { - // no op, that was already done above - } - else if ([minimumLineHeight isEqualToString:@"inherit"]) - { - // no op, we already inherited it - } - else if ([minimumLineHeight dt_isNumeric]) - { - self.paragraphStyle.minimumLineHeight = [minimumLineHeight floatValue]; - } - else // interpret as length - { - CGFloat minimumLineHeightValue = [minimumLineHeight pixelSizeOfCSSMeasureRelativeToCurrentTextSize:self.fontDescriptor.pointSize textScale:_textScale]; - self.paragraphStyle.minimumLineHeight = minimumLineHeightValue; - } - } - - NSString *maximumLineHeightObject = [styles objectForKey:@"maximum-line-height"]; - if (maximumLineHeightObject && [maximumLineHeightObject isKindOfClass:[NSString class]]) - { - NSString *maximumLineHeight = [maximumLineHeightObject lowercaseString]; - - if ([maximumLineHeight isEqualToString:@"normal"]) - { - // no op, that was already done above - } - else if ([maximumLineHeight isEqualToString:@"inherit"]) - { - // no op, we already inherited it - } - else if ([maximumLineHeight dt_isNumeric]) - { - self.paragraphStyle.minimumLineHeight = [maximumLineHeight floatValue]; - } - else // interpret as length - { - CGFloat maximumLineHeightValue = [maximumLineHeight pixelSizeOfCSSMeasureRelativeToCurrentTextSize:self.fontDescriptor.pointSize textScale:_textScale]; - self.paragraphStyle.maximumLineHeight = maximumLineHeightValue; - } - } - - - // End Specializations on line-height - - NSString *fontVariantStringObject = [styles objectForKey:@"font-variant"]; - if (fontVariantStringObject && [fontVariantStringObject isKindOfClass:[NSString class]]) - { - NSString *fontVariantStr = [fontVariantStringObject lowercaseString]; - - if ([fontVariantStr isEqualToString:@"small-caps"]) - { - _fontVariant = DTHTMLElementFontVariantSmallCaps; - } - else if ([fontVariantStr isEqualToString:@"inherit"]) - { - _fontVariant = DTHTMLElementFontVariantInherit; - } - else - { - _fontVariant = DTHTMLElementFontVariantNormal; - } - } - - NSString *widthString = [styles objectForKey:@"width"]; - if (widthString && [widthString isKindOfClass:[NSString class]] && ![widthString isEqualToString:@"auto"]) - { - _size.width = [widthString pixelSizeOfCSSMeasureRelativeToCurrentTextSize:self.fontDescriptor.pointSize textScale:_textScale]; - } - - NSString *heightString = [styles objectForKey:@"height"]; - if (heightString && [heightString isKindOfClass:[NSString class]] && ![heightString isEqualToString:@"auto"]) - { - _size.height = [heightString pixelSizeOfCSSMeasureRelativeToCurrentTextSize:self.fontDescriptor.pointSize textScale:_textScale]; - } - - NSString *whitespaceString = [styles objectForKey:@"white-space"]; - if ([whitespaceString isKindOfClass:[NSString class]] && [whitespaceString hasPrefix:@"pre"]) - { - _preserveNewlines = YES; - } - else - { - _preserveNewlines = NO; - } - - NSString *displayString = [styles objectForKey:@"display"]; - if (displayString && [displayString isKindOfClass:[NSString class]]) - { - if ([displayString isEqualToString:@"none"]) - { - _displayStyle = DTHTMLElementDisplayStyleNone; - } - else if ([displayString isEqualToString:@"block"]) - { - _displayStyle = DTHTMLElementDisplayStyleBlock; - } - else if ([displayString isEqualToString:@"inline"]) - { - _displayStyle = DTHTMLElementDisplayStyleInline; - } - else if ([displayString isEqualToString:@"list-item"]) - { - _displayStyle = DTHTMLElementDisplayStyleListItem; - } - else if ([displayString isEqualToString:@"table"]) - { - _displayStyle = DTHTMLElementDisplayStyleTable; - } - else if ([verticalAlignmentObject isEqualToString:@"inherit"]) - { - // nothing to do - } - } - - NSString *borderColor = [styles objectForKey:@"border-color"]; - if (borderColor && [borderColor isKindOfClass:[NSString class]]) - { - self.backgroundStrokeColor = DTColorCreateWithHTMLName(borderColor); - } - NSString *borderWidthObject = [styles objectForKey:@"border-width"]; - if (borderWidthObject && [borderWidthObject isKindOfClass:[NSString class]]) - { - _backgroundStrokeWidth = [[borderWidthObject lowercaseString] floatValue]; - } - else { - _backgroundStrokeWidth = 0.0f; - } - NSString *cornerRadiusObject = [styles objectForKey:@"border-radius"]; - if (cornerRadiusObject && [cornerRadiusObject isKindOfClass:[NSString class]]) - { - _backgroundCornerRadius = [[cornerRadiusObject lowercaseString] floatValue]; - } - else { - _backgroundCornerRadius = 0.0f; - } - - NSString *textIndentStr = [styles objectForKey:@"text-indent"]; - if (textIndentStr && [textIndentStr isKindOfClass:[NSString class]] && [textIndentStr isCSSLengthValue]) - { - _pTextIndent = [textIndentStr pixelSizeOfCSSMeasureRelativeToCurrentTextSize:_currentTextSize textScale:_textScale]; - } - - BOOL needsTextBlock = (_backgroundColor!=nil || _backgroundStrokeColor!=nil || _backgroundCornerRadius > 0 || _backgroundStrokeWidth > 0); - - BOOL hasMargins = NO; - - NSString *allKeys = [[styles allKeys] componentsJoinedByString:@";"]; - - // there can only be padding if the word "margin" occurs in the styles keys - if ([allKeys rangeOfString:@"-webkit-margin"].length) - { - hasMargins = ([self _parseEdgeInsetsFromStyleDictionary:styles forAttributesWithPrefix:@"-webkit-margin" writingDirection:self.paragraphStyle.baseWritingDirection intoEdgeInsets:&_margins] || hasMargins); - } - - if ([allKeys rangeOfString:@"margin"].length) - { - hasMargins = ([self _parseEdgeInsetsFromStyleDictionary:styles forAttributesWithPrefix:@"margin" writingDirection:self.paragraphStyle.baseWritingDirection intoEdgeInsets:&_margins] || hasMargins); - } - - BOOL hasPadding = NO; - - // there can only be padding if the word "padding" occurs in the styles keys - if ([allKeys rangeOfString:@"-webkit-padding"].length) - { - hasPadding = ([self _parseEdgeInsetsFromStyleDictionary:styles forAttributesWithPrefix:@"-webkit-padding" writingDirection:self.paragraphStyle.baseWritingDirection intoEdgeInsets:&_padding] || hasPadding); - } - - if ([allKeys rangeOfString:@"padding"].length) - { - - hasPadding = ([self _parseEdgeInsetsFromStyleDictionary:styles forAttributesWithPrefix:@"padding" writingDirection:self.paragraphStyle.baseWritingDirection intoEdgeInsets:&_padding] || hasPadding); - } - - if (hasPadding) - { - if ([self.name isEqualToString:@"ul"] || [self.name isEqualToString:@"ol"]) - { - _listIndent = _padding.left; - _padding.left = 0; - } - - // if we still have padding we need a block - if (_padding.left>0 || _padding.right>0 || _padding.top>0 || _padding.bottom>0) - { - needsTextBlock = YES; - } - } - - if (_displayStyle == DTHTMLElementDisplayStyleBlock) - { - // we only care for margins of block level elements - if (hasMargins) - { - self.paragraphStyle.paragraphSpacing = _margins.bottom; - self.paragraphStyle.paragraphSpacingBefore = _margins.top; - // we increase the inherited values for the time being - self.paragraphStyle.headIndent += _margins.left; - self.paragraphStyle.firstLineHeadIndent = self.paragraphStyle.headIndent; - - // tailIndent from right side is negative - self.paragraphStyle.tailIndent -= _margins.right; - } - - if (needsTextBlock) - { - // need a block - DTTextBlock *newBlock = [[DTTextBlock alloc] init]; - - newBlock.padding = _padding; - - // transfer background color to block - newBlock.backgroundColor = _backgroundColor; - _backgroundColor = nil; - - if (self.paragraphStyle.textBlocks) - { - // make mutable version - NSMutableArray *mutableBlocks = [self.paragraphStyle.textBlocks mutableCopy]; - - // add new block to the array - [mutableBlocks addObject:newBlock]; - - // set non-mutable version - self.paragraphStyle.textBlocks = [mutableBlocks copy]; - } - else - { - // didn't have any blocks before, start new array - NSArray *blocks = [NSArray arrayWithObject:newBlock]; - self.paragraphStyle.textBlocks = blocks; - } - } - } - else if (_displayStyle == DTHTMLElementDisplayStyleListItem) - { - self.paragraphStyle.paragraphSpacing = _margins.bottom; - } - - NSString *coretextFontString = [styles objectForKey:@"-coretext-fontname"]; - if (coretextFontString && [coretextFontString isKindOfClass:[NSString class]]) - { - _fontDescriptor.fontName = [styles objectForKey:@"-coretext-fontname"]; - } -} - -- (DTCSSListStyle *)listStyle -{ - DTCSSListStyle *style = [[DTCSSListStyle alloc] initWithStyles:_styles]; - - NSString *startingIndex = [_attributes objectForKey:@"start"]; - - // set the starting index if there is one specified - if (startingIndex) - { - style.startingItemNumber = [startingIndex integerValue]; - } - - return style; -} - -#pragma mark - Calulcating Properties - -- (id)valueForKeyPathWithInheritance:(NSString *)keyPath -{ - id value = [self valueForKeyPath:keyPath]; - - // if property is not set we also go to parent - if (!value && self.parentElement) - { - return [self.parentElement valueForKeyPathWithInheritance:keyPath]; - } - - // enum properties have 0 for inherit - if ([value isKindOfClass:[NSNumber class]]) - { - NSNumber *number = value; - - if (([number integerValue]==0) && self.parentElement) - { - return [self.parentElement valueForKeyPathWithInheritance:keyPath]; - } - } - - // string properties have 'inherit' for inheriting - if ([value isKindOfClass:[NSString class]]) - { - NSString *string = value; - - if ([string isEqualToString:@"inherit"] && self.parentElement) - { - return [self.parentElement valueForKeyPathWithInheritance:keyPath]; - } - } - - // obviously not inherited - return value; -} - -#pragma mark - Working with HTML Attributes - -+ (NSSet *)attributesToIgnoreForCustomAttributesAttribute -{ - return [NSSet setWithObjects:@"style", @"dir", @"align", @"src", @"href", @"color", @"face", @"size", @"name", @"height", @"width", nil]; -} - -- (NSString *)attributeForKey:(NSString *)key -{ - NSString *attribute = [_attributes objectForKey:key]; - return [attribute isKindOfClass:[NSString class]] ? attribute : nil; -} - -- (void)inheritAttributesFromElement:(DTHTMLElement *)element -{ - _fontDescriptor = [element.fontDescriptor copy]; - _paragraphStyle = [element.paragraphStyle copy]; - - _headerLevel = element.headerLevel; - - _fontVariant = element.fontVariant; - _underlineStyle = element.underlineStyle; - _underlineColor = element.underlineColor; - - _strikeOut = element.strikeOut; - _superscriptStyle = element.superscriptStyle; - _letterSpacing = element.letterSpacing; - - _shadows = [element.shadows copy]; - - _link = [element.link copy]; - _anchorName = [element.anchorName copy]; - _linkGUID = element.linkGUID; - - _textColor = element.textColor; - _isColorInherited = YES; - - _preserveNewlines = element.preserveNewlines; - - _currentTextSize = element.currentTextSize; - _textScale = element.textScale; - - _backgroundColor = element.backgroundColor; - _backgroundStrokeColor = element.backgroundStrokeColor; - _backgroundStrokeWidth = element.backgroundStrokeWidth; - _backgroundCornerRadius = element.backgroundCornerRadius; - - // only inherit background-color from inline elements - if (element.displayStyle == DTHTMLElementDisplayStyleInline || element.displayStyle == DTHTMLElementDisplayStyleListItem) - { - self.backgroundColor = element.backgroundColor; - } - - _containsAppleConvertedSpace = element.containsAppleConvertedSpace; - - // we copy the link because we might need for it making the custom view - _textAttachment.hyperLinkURL = element.link; -} - -- (void)interpretAttributes -{ - if (!_attributes) - { - // nothing to interpret - return; - } - - // transfer Apple Converted Space tag - if ([[self attributeForKey:@"class"] isEqualToString:@"Apple-converted-space"]) - { - _containsAppleConvertedSpace = YES; - } - - // detect writing direction if set - NSString *directionStr = [self attributeForKey:@"dir"]; - - if (directionStr) - { - NSAssert(_paragraphStyle, @"Found dir attribute, but missing paragraph style on element"); - - if ([directionStr isEqualToString:@"rtl"]) - { - _paragraphStyle.baseWritingDirection = kCTWritingDirectionRightToLeft; - } - else if ([directionStr isEqualToString:@"ltr"]) - { - _paragraphStyle.baseWritingDirection = kCTWritingDirectionLeftToRight; - } - else if ([directionStr isEqualToString:@"auto"]) - { - _paragraphStyle.baseWritingDirection = kCTWritingDirectionNatural; // that's also default - } - else - { - // other values are invalid and will be ignored - } - } - - // handles align="justify" - NSString *align = [self attributeForKey:@"align"]; - - if (align) - { - if ([align isEqualToString: @"justify"]) - { - _paragraphStyle.alignment = kCTTextAlignmentJustified; - } - else if ([align isEqualToString: @"left"]) - { - _paragraphStyle.alignment = kCTTextAlignmentLeft; - } - else if ([align isEqualToString: @"center"]) - { - _paragraphStyle.alignment = kCTTextAlignmentCenter; - } - else if ([align isEqualToString: @"right"]) - { - _paragraphStyle.alignment = kCTTextAlignmentRight; - } - } -} - -#pragma mark - Properties - -- (void)setTextColor:(DTColor *)textColor -{ - if (_textColor != textColor) - { - - _textColor = textColor; - _isColorInherited = NO; - } -} - -- (DTHTMLElementFontVariant)fontVariant -{ - if (_fontVariant == DTHTMLElementFontVariantInherit) - { - if (self.parentElement) - { - return self.parentElement.fontVariant; - } - - return DTHTMLElementFontVariantNormal; - } - - return _fontVariant; -} - -- (void)setAttributes:(NSDictionary *)attributes -{ - [super setAttributes:[attributes copy]]; - - // decode size contained in attributes, might be overridden later by CSS size - _size = CGSizeMake([[self attributeForKey:@"width"] floatValue], [[self attributeForKey:@"height"] floatValue]); -} - -- (void)setTextAttachment:(DTTextAttachment *)textAttachment -{ - textAttachment.verticalAlignment = _textAttachmentAlignment; - _textAttachment = textAttachment; - - // transfer link GUID - _textAttachment.hyperLinkGUID = _linkGUID; - - // transfer size - _textAttachment.displaySize = _size; -} - -- (void)setLink:(NSURL *)link -{ - _linkGUID = [NSString stringWithUUID]; - _link = [link copy]; - - if (_textAttachment) - { - _textAttachment.hyperLinkGUID = _linkGUID; - } -} - -- (void)setDidOutput:(BOOL)didOutput -{ - @synchronized(self) - { - _didOutput = didOutput; - } -} - -- (BOOL)didOutput -{ - @synchronized(self) - { - return _didOutput; - } -} - -- (void)setCurrentTextSize:(CGFloat)currentTextSize { - _currentTextSize = currentTextSize; -} - -- (CGFloat)currentTextSize { - CGFloat textSize = _currentTextSize; - - if ((_currentTextSize == 0) && self.parentElement) { - textSize = self.parentElement.currentTextSize; - } - - return textSize; -} - -- (DTHTMLElement *)parentElement -{ - return (DTHTMLElement *)self.parentNode; -} - -@synthesize fontDescriptor = _fontDescriptor; -@synthesize paragraphStyle = _paragraphStyle; -@synthesize textColor = _textColor; -@synthesize backgroundColor = _backgroundColor; -@synthesize beforeContent = _beforeContent; -@synthesize link = _link; -@synthesize anchorName = _anchorName; -@synthesize underlineStyle = _underlineStyle; -@synthesize underlineColor = _underlineColor; -@synthesize textAttachment = _textAttachment; -@synthesize strikeOut = _strikeOut; -@synthesize superscriptStyle = _superscriptStyle; -@synthesize headerLevel = _headerLevel; -@synthesize shadows = _shadows; -@synthesize floatStyle = _floatStyle; -@synthesize isColorInherited = _isColorInherited; -@synthesize preserveNewlines = _preserveNewlines; -@synthesize displayStyle = _displayStyle; -@synthesize fontVariant = _fontVariant; -@synthesize currentTextSize = _currentTextSize; -@synthesize textScale = _textScale; -@synthesize size = _size; -@synthesize margins = _margins; -@synthesize padding = _padding; -@synthesize linkGUID = _linkGUID; -@synthesize containsAppleConvertedSpace = _containsAppleConvertedSpace; -@synthesize CSSClassNamesToIgnoreForCustomAttributes = _CSSClassNamesToIgnoreForCustomAttributes; -@synthesize shouldProcessCustomHTMLAttributes = _shouldProcessCustomHTMLAttributes; -@synthesize backgroundStrokeColor = _backgroundStrokeColor; -@synthesize backgroundStrokeWidth = _backgroundStrokeWidth; -@synthesize backgroundCornerRadius = _backgroundCornerRadius; -@synthesize letterSpacing = _letterSpacing; -@synthesize pTextIndent = _pTextIndent; - -@end - - diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLParserNode.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLParserNode.h deleted file mode 100644 index 4da42a6..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLParserNode.h +++ /dev/null @@ -1,78 +0,0 @@ -// -// DTHTMLParserNode.h -// DTCoreText -// -// Created by Oliver Drobnik on 26.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import - -#import - -@class DTHTMLParserTextNode; - -/** - This class represents one node in an HTML DOM tree. - */ -@interface DTHTMLParserNode : NSObject -{ - NSDictionary *_attributes; -} - -/** - Designated initializer - @param name The element name - @param attributes The attributes dictionary - @returns An initialized parser node. - */ -- (id)initWithName:(NSString *)name attributes:(NSDictionary *)attributes; - -/** - The name of the receiver - */ -@property (nonatomic, copy) NSString *name; - -/** - The attributes of the receiver. - */ -@property (nonatomic, copy) NSDictionary *attributes; - -/** - A weak link to the parent node of the receiver - */ -@property (nonatomic, DT_WEAK_PROPERTY) DTHTMLParserNode *parentNode; - -/** - The child nodes of the receiver - */ -@property (nonatomic, readonly) NSArray *childNodes; - -/** - Adds a child node to the receiver. - @param childNode The child node to be appended to the list of children - */ -- (void)addChildNode:(DTHTMLParserNode *)childNode; - -/** - Removes a child node from the receiver - @param childNode The child node to remove - */ -- (void)removeChildNode:(DTHTMLParserNode *)childNode; - -/** - Removes all child nodes from the receiver -*/ -- (void)removeAllChildNodes; - -/** - Hierarchy representation of the receiver including all attributes and children - */ -- (NSString *)debugDescription; - -/** - Concatenated contents of all text nodes - */ -- (NSString *)text; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLParserNode.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLParserNode.m deleted file mode 100644 index cffb73c..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLParserNode.m +++ /dev/null @@ -1,167 +0,0 @@ -// -// DTHTMLParserNode.m -// DTCoreText -// -// Created by Oliver Drobnik on 26.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTHTMLParserNode.h" -#import "DTHTMLParserTextNode.h" -#import - -@implementation DTHTMLParserNode -{ - NSString *_name; - DT_WEAK_VARIABLE DTHTMLParserNode *_parentNode; - NSMutableArray *_childNodes; -} - - -- (id)initWithName:(NSString *)name attributes:(NSDictionary *)attributes -{ - self = [super init]; - - if (self) - { - _name = [name copy]; - [self setAttributes:attributes]; // property to allow overriding - } - - return self; -} - -- (void)addChildNode:(DTHTMLParserNode *)childNode -{ - @synchronized(self) - { - // first child creates array - if (!_childNodes) - { - _childNodes = [[NSMutableArray alloc] init]; - } - - childNode.parentNode = self; - [_childNodes addObject:childNode]; - } -} - -- (void)removeChildNode:(DTHTMLParserNode *)childNode -{ - @synchronized(self) - { - [_childNodes removeObject:childNode]; - } -} - -- (void)removeAllChildNodes -{ - @synchronized(self) - { - [_childNodes removeAllObjects]; - } -} - -#ifndef COVERAGE -// exclude methods from coverage testing - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@ name='%@'>", NSStringFromClass([self class]), _name]; -} - -#endif - -- (void)_appendHTMLToString:(NSMutableString *)string indentLevel:(NSUInteger)indentLevel -{ - @synchronized(self) - { - // indent to the level - for (NSUInteger i=0; i\n"]; - return; - } - - [string appendFormat:@">\n"]; - - // output attributes - for (DTHTMLParserNode *childNode in _childNodes) - { - [childNode _appendHTMLToString:string indentLevel:indentLevel+1]; - } - - // indent to the level - for (NSUInteger i=0; i\n", _name]; - } -} - -- (NSString *)debugDescription -{ - @synchronized(self) - { - NSMutableString *tmpString = [NSMutableString string]; - - [self _appendHTMLToString:tmpString indentLevel:0]; - - return tmpString; - } -} - -- (NSString *)text -{ - @synchronized(self) - { - NSMutableString *text = [NSMutableString string]; - - for (DTHTMLParserTextNode *oneChild in self.childNodes) - { - if ([oneChild isKindOfClass:[DTHTMLParserTextNode class]]) - { - [text appendString:[oneChild characters]]; - } - } - - return text; - } -} - -#pragma mark - Properties - -- (NSArray *)childNodes -{ - @synchronized(self) - { - return _childNodes; - } -} - -@synthesize name = _name; -@synthesize attributes = _attributes; -@synthesize parentNode = _parentNode; -@synthesize childNodes = _childNodes; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLParserTextNode.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLParserTextNode.h deleted file mode 100644 index 73a055d..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLParserTextNode.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// DTHTMLParserTextNode.h -// DTCoreText -// -// Created by Oliver Drobnik on 26.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import - -#import "DTHTMLParserNode.h" - -/** - Specialized sub class of that represents text inside a node - */ -@interface DTHTMLParserTextNode : DTHTMLParserNode - -/** - Designated initializer with the characters that make up the text. - @param characters The characters of the string - @returns The initialized text node - */ -- (id)initWithCharacters:(NSString *)characters; - -/** - Returns the receivers character contents - */ -@property (nonatomic, readonly) NSString *characters; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLParserTextNode.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLParserTextNode.m deleted file mode 100644 index 7b4a352..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLParserTextNode.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// DTHTMLParserTextNode.m -// DTCoreText -// -// Created by Oliver Drobnik on 26.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTHTMLParserTextNode.h" -#import "NSString+HTML.h" - -@implementation DTHTMLParserTextNode -{ - NSString *_characters; -} - -- (id)initWithCharacters:(NSString *)characters -{ - self = [super init]; - - if (self) - { - self.name = @"#TEXT#"; - - _characters = characters; - - } - return self; -} - -#ifndef COVERAGE -// exclude methods from coverage testing - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@ content='%@'>", NSStringFromClass([self class]), _characters]; -} - -- (void)_appendHTMLToString:(NSMutableString *)string indentLevel:(NSUInteger)indentLevel -{ - // indent to the level - for (NSUInteger i=0; i -#import - -/** - Class to generate HTML from `NSAttributedString` instances. - */ -@interface DTHTMLWriter : NSObject - -/** - @name Creating an HTML Writer - */ - -/** - Creates a writer with a given `NSAttributedString` as input - @param attributedString An attributed string - */ -- (id)initWithAttributedString:(NSAttributedString *)attributedString; - -/** - @name Generating HTML - */ - -/** - Generates a HTML representation of the attributed string - @returns The generated string - */ -- (NSString *)HTMLString; - - -/** - Generates a HTML fragment representation of the attributed string including inlined styles and no html or head elements - @returns The generated string - */ -- (NSString *)HTMLFragment; - -/** - @name Properties - */ - -/** - If specified then all absolute font sizes (px) will be divided by this value. This is useful if you specified a text size multiplier when converting HTML to the attributed string you are processing. - */ -@property (nonatomic, assign) CGFloat textScale; - -/** - If YES, preserve whitespaces in HTML by using "Apple-converted-space". Default YES. - */ -@property (nonatomic, assign) BOOL useAppleConvertedSpace; - -/** - The attributed string that the writer is processing. - */ -@property (nonatomic, readonly) NSAttributedString *attributedString; - - -/** - The HTML element tag name to use for paragraphs. Defaults to @"p". - */ -@property (nonatomic, strong) NSString *paragraphTagName; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLWriter.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLWriter.m deleted file mode 100644 index 777bae8..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHTMLWriter.m +++ /dev/null @@ -1,1038 +0,0 @@ -// -// DTHTMLWriter.m -// DTCoreText -// -// Created by Oliver Drobnik on 23.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTHTMLWriter.h" -#import "NSDictionary+DTCoreText.h" -#import "DTCSSListStyle.h" -#import "DTCoreTextConstants.h" -#import "DTCoreTextFontDescriptor.h" -#import "DTCoreTextParagraphStyle.h" -#import "NSAttributedString+DTCoreText.h" -#import "NSAttributedString+HTML.h" -#import "DTTextAttachment.h" -#import "NSString+HTML.h" -#import "DTColorFunctions.h" - -#import - - -@implementation DTHTMLWriter -{ - NSAttributedString *_attributedString; - NSString *_HTMLString; - CGFloat _textScale; - BOOL _useAppleConvertedSpace; - NSMutableDictionary *_styleLookup; -} - -- (id)initWithAttributedString:(NSAttributedString *)attributedString -{ - self = [super init]; - - if (self) - { - _attributedString = attributedString; - - _useAppleConvertedSpace = YES; - - // default is to leave px sizes as is - _textScale = 1.0f; - - _paragraphTagName = @"p"; - } - - return self; -} - -#pragma mark - Generating HTML - -- (NSMutableArray *)_styleArrayForElement:(NSString *)elementName -{ - // get array of styles for element - NSMutableArray *_styleArray = [_styleLookup objectForKey:elementName]; - - if (!_styleArray) - { - // first time we see this element - _styleArray = [[NSMutableArray alloc] init]; - [_styleLookup setObject:_styleArray forKey:elementName]; - } - - return _styleArray; -} - -// checks the style against previous styles and returns the style class for this -- (NSString *)_styleClassForElement:(NSString *)elementName style:(NSString *)style -{ - // get array of styles for element - NSMutableArray *_styleArray = [self _styleArrayForElement:elementName]; - - NSInteger index = [_styleArray indexOfObject:style]; - - if (index==NSNotFound) - { - // need to add this style - [_styleArray addObject:style]; - index = [_styleArray count]; - } - else - { - index++; - } - - return [NSString stringWithFormat:@"%@%d", [elementName substringToIndex:1],(int)index]; -} - -- (NSString *)_tagRepresentationForListStyle:(DTCSSListStyle *)listStyle closingTag:(BOOL)closingTag listPadding:(CGFloat)listPadding inlineStyles:(BOOL)inlineStyles -{ - BOOL isOrdered = NO; - - NSString *typeString = nil; - - switch (listStyle.type) - { - case DTCSSListStyleTypeInherit: - case DTCSSListStyleTypeDisc: - { - typeString = @"disc"; - isOrdered = NO; - break; - } - - case DTCSSListStyleTypeCircle: - { - typeString = @"circle"; - isOrdered = NO; - break; - } - - case DTCSSListStyleTypeSquare: - { - typeString = @"square"; - isOrdered = NO; - break; - } - - case DTCSSListStyleTypePlus: - { - typeString = @"plus"; - isOrdered = NO; - break; - } - - case DTCSSListStyleTypeUnderscore: - { - typeString = @"underscore"; - isOrdered = NO; - break; - } - - case DTCSSListStyleTypeImage: - { - typeString = @"image"; - isOrdered = NO; - break; - } - - case DTCSSListStyleTypeDecimal: - { - typeString = @"decimal"; - isOrdered = YES; - break; - } - - case DTCSSListStyleTypeDecimalLeadingZero: - { - typeString = @"decimal-leading-zero"; - isOrdered = YES; - break; - } - - case DTCSSListStyleTypeUpperAlpha: - { - typeString = @"upper-alpha"; - isOrdered = YES; - break; - } - - case DTCSSListStyleTypeUpperLatin: - { - typeString = @"upper-latin"; - isOrdered = YES; - break; - } - - case DTCSSListStyleTypeUpperRoman: - { - typeString = @"upper-roman"; - isOrdered = YES; - break; - } - - case DTCSSListStyleTypeLowerAlpha: - { - typeString = @"lower-alpha"; - isOrdered = YES; - break; - } - - case DTCSSListStyleTypeLowerLatin: - { - typeString = @"lower-latin"; - isOrdered = YES; - break; - } - - case DTCSSListStyleTypeLowerRoman: - { - typeString = @"lower-roman"; - isOrdered = YES; - break; - } - - case DTCSSListStyleTypeNone: - { - typeString = @"none"; - - break; - } - - case DTCSSListStyleTypeInvalid: - { - break; - } - } - - if (closingTag) - { - if (isOrdered) - { - return @""; - } - else - { - return @""; - } - } - else - { - if (listStyle.position == DTCSSListStylePositionInside) - { - typeString = [typeString stringByAppendingString:@" inside"]; - } - else if (listStyle.position == DTCSSListStylePositionOutside) - { - typeString = [typeString stringByAppendingString:@" outside"]; - } - - NSString *blockElement; - if (isOrdered) - { - blockElement = @"ol"; - } - else - { - blockElement = @"ul"; - } - - NSString *listStyleString = [NSString stringWithFormat:@"list-style:'%@';", typeString]; - - if (listPadding>0) - { - listStyleString = [listStyleString stringByAppendingFormat:@"-webkit-padding-start:%.0fpx;padding-left:%.0fpx;", listPadding, listPadding]; - } - - NSString *className = [self _styleClassForElement:blockElement style:listStyleString]; - - if (inlineStyles) - { - return [NSString stringWithFormat:@"<%@ style=\"%@\">", blockElement, listStyleString]; - } - else - { - return [NSString stringWithFormat:@"<%@ class=\"%@\">", blockElement, className]; - } - } -} - -- (void)_buildOutput -{ - [self _buildOutputAsHTMLFragment:NO]; -} - -- (void)_buildOutputAsHTMLFragment:(BOOL)fragment -{ - // reusable styles - _styleLookup = [[NSMutableDictionary alloc] init]; - - NSString *plainString = [_attributedString string]; - - // divide the string into it's blocks (we assume that these are the P) - NSArray *paragraphs = [plainString componentsSeparatedByString:@"\n"]; - - NSMutableString *retString = [NSMutableString string]; - - NSInteger location = 0; - - NSArray *previousListStyles = nil; - - for (NSUInteger i=0; i<[paragraphs count]; i++) - { - NSString *oneParagraph = [paragraphs objectAtIndex:i]; - NSRange paragraphRange = NSMakeRange(location, [oneParagraph length]); - - // skip empty paragraph at the end - if (i==[paragraphs count]-1) - { - if (!paragraphRange.length) - { - continue; - } - } - - __block BOOL needsToRemovePrefix = NO; - - BOOL fontIsBlockLevel = NO; - - // check if font is same in the entire paragraph - NSRange fontEffectiveRange; - CTFontRef paragraphFont = (__bridge CTFontRef)[_attributedString attribute:(id)kCTFontAttributeName atIndex:paragraphRange.location longestEffectiveRange:&fontEffectiveRange inRange:paragraphRange]; - - if (NSEqualRanges(paragraphRange, fontEffectiveRange)) - { - fontIsBlockLevel = YES; - } - - // next paragraph start - location = location + paragraphRange.length + 1; - - NSDictionary *paraAttributes = [_attributedString attributesAtIndex:paragraphRange.location effectiveRange:NULL]; - - // lets see if we have a list style - NSArray *currentListStyles = [paraAttributes objectForKey:DTTextListsAttribute]; - - DTCSSListStyle *effectiveListStyle = [currentListStyles lastObject]; - - // retrieve the paragraph style - DTCoreTextParagraphStyle *paragraphStyle = [paraAttributes paragraphStyle]; - NSString *paraStyleString = nil; - - if (paragraphStyle && !effectiveListStyle) - { - if (_textScale!=1.0f) - { - paragraphStyle.minimumLineHeight = round(paragraphStyle.minimumLineHeight / _textScale); - paragraphStyle.maximumLineHeight = round(paragraphStyle.maximumLineHeight / _textScale); - - paragraphStyle.paragraphSpacing = round(paragraphStyle.paragraphSpacing/ _textScale); - paragraphStyle.paragraphSpacingBefore = round(paragraphStyle.paragraphSpacingBefore / _textScale); - - paragraphStyle.firstLineHeadIndent = round(paragraphStyle.firstLineHeadIndent / _textScale); - paragraphStyle.headIndent = round(paragraphStyle.headIndent / _textScale); - paragraphStyle.tailIndent = round(paragraphStyle.tailIndent / _textScale); - } - - paraStyleString = [paragraphStyle cssStyleRepresentation]; - } - - if (!paraStyleString) - { - paraStyleString = @""; - } - - if (fontIsBlockLevel) - { - if (paragraphFont) - { - DTCoreTextFontDescriptor *desc = [DTCoreTextFontDescriptor fontDescriptorForCTFont:paragraphFont]; - - if (_textScale!=1.0f) - { - desc.pointSize /= _textScale; - } - - NSString *paraFontStyle = [desc cssStyleRepresentation]; - - if (paraFontStyle) - { - paraStyleString = [paraStyleString stringByAppendingString:paraFontStyle]; - } - } - } - - NSString *blockElement; - - // close until we are at current or nil - if ([previousListStyles count]>[currentListStyles count]) - { - NSMutableArray *closingStyles = [previousListStyles mutableCopy]; - - do - { - DTCSSListStyle *closingStyle = [closingStyles lastObject]; - - if (closingStyle == effectiveListStyle) - { - break; - } - - // end of a list block - [retString appendString:[self _tagRepresentationForListStyle:closingStyle closingTag:YES listPadding:0 inlineStyles:fragment]]; - [retString appendString:@"\n"]; - - [closingStyles removeLastObject]; - - previousListStyles = closingStyles; - } - while ([closingStyles count]); - } - - if (effectiveListStyle) - { - // next text needs to have list prefix removed - needsToRemovePrefix = YES; - - - // get lists that need to be opened here - NSArray *listsToOpen = nil; - - if (!previousListStyles) - { - listsToOpen = currentListStyles; - } - else - { - NSMutableArray *tmpArray = [NSMutableArray array]; - - for (DTCSSListStyle *oneList in currentListStyles) - { - NSRange listRange = [_attributedString rangeOfTextList:oneList atIndex:paragraphRange.location]; - - if (listRange.location == paragraphRange.location) - { - // lists starts here - [tmpArray addObject:oneList]; - } - } - - if ([tmpArray count]) - { - listsToOpen = [tmpArray copy]; - } - } - - [listsToOpen enumerateObjectsUsingBlock:^(DTCSSListStyle *oneList, NSUInteger idx, BOOL *stop) { - - // only padding can be reconstructed so far - CGFloat listPadding = (paragraphStyle.headIndent - paragraphStyle.firstLineHeadIndent) / self.textScale; - - // beginning of a list block - [retString appendString:[self _tagRepresentationForListStyle:oneList closingTag:NO listPadding:listPadding inlineStyles:fragment]]; - [retString appendString:@"\n"]; - - // all but the effective list need an extra LI - if (oneList != effectiveListStyle) - { - [retString appendString:@"

  • "]; - } - }]; - - blockElement = @"li"; - } - else - { - blockElement = _paragraphTagName; - } - - NSNumber *headerLevel = [paraAttributes objectForKey:DTHeaderLevelAttribute]; - - if (headerLevel) - { - blockElement = [NSString stringWithFormat:@"h%d", (int)[headerLevel integerValue]]; - } - - if ([paragraphs lastObject] == oneParagraph) - { - // last paragraph in string - - if (![plainString hasSuffix:@"\n"]) - { - // not a whole paragraph, so we don't put it in P - blockElement = @"span"; - } - } - - // find which custom attributes are for the entire paragraph - NSDictionary *HTMLAttributes = [_attributedString HTMLAttributesAtIndex:paragraphRange.location]; - NSMutableDictionary *paragraphLevelHTMLAttributes = [NSMutableDictionary dictionary]; - - [HTMLAttributes enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) { - - // check if range is longer than current paragraph - NSRange attributeEffectiveRange = [self.attributedString rangeOfHTMLAttribute:key atIndex:paragraphRange.location]; - - if (NSIntersectionRange(attributeEffectiveRange, paragraphRange).length == paragraphRange.length) - { - [paragraphLevelHTMLAttributes setObject:value forKey:key]; - } - }]; - - // Add dir="auto" if the writing direction is unknown - if (paragraphStyle) - { - switch (paragraphStyle.baseWritingDirection) - { - case kCTWritingDirectionNatural: - { - [paragraphLevelHTMLAttributes setObject:@"auto" forKey:@"dir"]; - break; - } - - case kCTWritingDirectionRightToLeft: - { - [paragraphLevelHTMLAttributes setObject:@"rtl" forKey:@"dir"]; - break; - } - - case kCTWritingDirectionLeftToRight: - { - // this is default, so we omit it - break; - } - } - } - - - // start paragraph start tag - [retString appendFormat:@"<%@", blockElement]; - - // do we have style info? - if ([paraStyleString length]) - { - if (fragment) - { - // stays style for fragment mode - [paragraphLevelHTMLAttributes setObject:paraStyleString forKey:@"style"]; - } - else - { - // compress style for document mode - NSString *className = [self _styleClassForElement:blockElement style:paraStyleString]; - - NSString *existingClasses = [paragraphLevelHTMLAttributes objectForKey:@"class"]; - - if (existingClasses) - { - NSMutableArray *individualClasses = [[existingClasses componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] mutableCopy]; - - // insert compressed class at index 0 - [individualClasses insertObject:className atIndex:0]; - - // rejoin - className = [individualClasses componentsJoinedByString:@" "]; - } - - [paragraphLevelHTMLAttributes setObject:className forKey:@"class"]; - } - } - - // add paragraph level attributes - [paragraphLevelHTMLAttributes enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) { - [retString appendFormat:@" %@=\"%@\"", key, value]; - }]; - - // end paragraph start tag - [retString appendString:@">"]; - - // add the attributed string ranges in this paragraph to the paragraph container - - __block NSRange currentLinkRange = {NSNotFound, 0}; - - __block NSMutableDictionary *linkLevelHTMLAttributes = nil; - - // ----- SPAN enumeration - - [_attributedString enumerateAttributesInRange:paragraphRange options:0 usingBlock:^(NSDictionary *attributes, NSRange spanRange, BOOL *stopEnumerateAttributes) { - - NSURL *spanURL = [attributes objectForKey:DTLinkAttribute]; - NSString *spanAnchorName = [attributes objectForKey:DTAnchorAttribute]; - - BOOL isFirstPartOfHyperlink = NO; - BOOL isLastPartOfHyperlink = NO; - - if ((spanURL || spanAnchorName) && (currentLinkRange.location == NSNotFound)) - { - if (spanURL) - { - currentLinkRange = [self.attributedString rangeOfLinkAtIndex:spanRange.location URL:NULL]; - } - else if (spanAnchorName) - { - currentLinkRange = [self.attributedString rangeOfAnchorNamed:spanAnchorName]; - } - - isFirstPartOfHyperlink = YES; - - // build the attributes for the A tag - linkLevelHTMLAttributes = [NSMutableDictionary dictionary]; - - if (spanURL) - { - [linkLevelHTMLAttributes setObject:[spanURL relativeString] forKey:@"href"]; - } - - // add anchor name if present - if (spanAnchorName) - { - [linkLevelHTMLAttributes setObject:spanAnchorName forKey:@"name"]; - } - - // find which custom attributes are for the link - NSDictionary *localHTMLAttributes = [self.attributedString HTMLAttributesAtIndex:currentLinkRange.location]; - - [localHTMLAttributes enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stopEnumerateKeysAndObjects) { - - // check if range is longer than current paragraph - NSRange attributeEffectiveRange = [self.attributedString rangeOfHTMLAttribute:key atIndex:currentLinkRange.location]; - - if (NSEqualRanges(attributeEffectiveRange, currentLinkRange)) - { - [linkLevelHTMLAttributes setObject:value forKey:key]; - } - }]; - } - - // check if the current link tag needs to be closed - if (currentLinkRange.location != NSNotFound && (NSMaxRange(spanRange) >= MIN(NSMaxRange(currentLinkRange), NSMaxRange(paragraphRange)))) - { - isLastPartOfHyperlink = YES; - } - - NSString *plainSubString =[plainString substringWithRange:spanRange]; - - if (effectiveListStyle && needsToRemovePrefix) - { - NSRange prefixRange = [self.attributedString rangeOfFieldAtIndex:spanRange.location]; - - if (prefixRange.location != NSNotFound) - { - if (NSMaxRange(prefixRange) persistableAttachment = (id)attachment; - - NSString *HTMLString = [persistableAttachment stringByEncodingAsHTML]; - - if (HTMLString) - { - [retString appendString:HTMLString]; - } - } - - if (isLastPartOfHyperlink) - { - currentLinkRange = NSMakeRange(NSNotFound, 0); - } - - return; - } - - NSString *fontStyle = nil; - if (!fontIsBlockLevel) - { - DTCoreTextFontDescriptor *fontDescriptor = [attributes fontDescriptor]; - - if (fontDescriptor) - { - if (self.textScale!=1.0f) - { - fontDescriptor.pointSize /= self.textScale; - } - - fontStyle = [fontDescriptor cssStyleRepresentation]; - } - } - - if (!fontStyle) - { - fontStyle = @""; - } - - CGFloat kerning = [attributes kerning] / self.textScale; - - if (kerning != 0) - { - fontStyle = [fontStyle stringByAppendingFormat:@"letter-spacing:%.0fpx;", kerning]; - } - - DTColor *textColor = [attributes foregroundColor]; - - if (textColor) - { - fontStyle = [fontStyle stringByAppendingFormat:@"color:#%@;", DTHexStringFromDTColor(textColor)]; - } - - DTColor *backgroundColor = [attributes backgroundColor]; - - if (backgroundColor) - { - fontStyle = [fontStyle stringByAppendingFormat:@"background-color:#%@;", DTHexStringFromDTColor(backgroundColor)]; - } - - NSNumber *underline = [attributes objectForKey:(id)kCTUnderlineStyleAttributeName]; - if (underline) - { - fontStyle = [fontStyle stringByAppendingString:@"text-decoration:underline;"]; - } - else - { - // there can be no underline and strike-through at the same time - NSNumber *strikout = [attributes objectForKey:DTStrikeOutAttribute]; - if ([strikout boolValue]) - { - fontStyle = [fontStyle stringByAppendingString:@"text-decoration:line-through;"]; - } - } - - NSNumber *superscript = [attributes objectForKey:(id)kCTSuperscriptAttributeName]; - if (superscript) - { - NSInteger style = [superscript integerValue]; - - switch (style) - { - case 1: - { - fontStyle = [fontStyle stringByAppendingString:@"vertical-align:super;"]; - break; - } - - case -1: - { - fontStyle = [fontStyle stringByAppendingString:@"vertical-align:sub;"]; - break; - } - - default: - { - // all other are baseline because we don't support anything else for text - fontStyle = [fontStyle stringByAppendingString:@"vertical-align:baseline;"]; - - break; - } - } - } - - NSString *spanTagName = @"span"; - - __block BOOL needsSpanTag = NO; - - // find which custom attributes are only for this span - NSDictionary *localHTMLAttributes = [attributes objectForKey:DTCustomAttributesAttribute]; - NSMutableDictionary *spanLevelHTMLAttributes = [NSMutableDictionary dictionary]; - - [localHTMLAttributes enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) { - - // check if there is already an identical paragraph attribute - id valueForParagraph = [paragraphLevelHTMLAttributes objectForKey:key]; - - if (valueForParagraph) - { - if (fragment) - { - if ([valueForParagraph isEqual:value]) - { - return; - } - } - else - { - // need to check components - NSArray *paragraphClassComponents = [valueForParagraph componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - - if ([paragraphClassComponents containsObject:value]) - { - return; - } - } - } - - NSRange attributeEffectiveRange = [self.attributedString rangeOfHTMLAttribute:key atIndex:spanRange.location]; - - if (currentLinkRange.location==NSNotFound || !NSEqualRanges(attributeEffectiveRange, currentLinkRange)) - { - [spanLevelHTMLAttributes setObject:value forKey:key]; - needsSpanTag = YES; - } - }]; - - if ([fontStyle length]) - { - needsSpanTag = YES; - - if (fragment) - { - // stays style for fragment mode - [spanLevelHTMLAttributes setObject:fontStyle forKey:@"style"]; - } - else - { - // compress style for document mode - NSString *className = [self _styleClassForElement:spanTagName style:fontStyle]; - - NSString *existingClasses = [spanLevelHTMLAttributes objectForKey:@"class"]; - - if (existingClasses) - { - NSMutableArray *individualClasses = [[existingClasses componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] mutableCopy]; - - // insert compressed class at index 0 - [individualClasses insertObject:className atIndex:0]; - - // rejoin - className = [individualClasses componentsJoinedByString:@" "]; - } - - [spanLevelHTMLAttributes setObject:className forKey:@"class"]; - } - } - - if (isFirstPartOfHyperlink) - { - // start link start tag - [retString appendString:@""]; - } - - - if (needsSpanTag) - { - // start span start tag - [retString appendFormat:@"<%@", spanTagName]; - - // add span level attributes - [spanLevelHTMLAttributes enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) { - [retString appendFormat:@" %@=\"%@\"", key, value]; - }]; - - // end span start tag - [retString appendString:@">"]; - } - - // add string in span - [retString appendString:subString]; - - if (needsSpanTag) - { - // span end tag - [retString appendFormat:@"", spanTagName]; - } - - if (isLastPartOfHyperlink) - { - [retString appendFormat:@""]; - currentLinkRange = NSMakeRange(NSNotFound, 0); - } - }]; // end of SPAN loop - - - if ([blockElement isEqualToString:@"li"]) - { - BOOL shouldCloseLI = YES; - - NSUInteger nextParagraphStart = NSMaxRange([plainString paragraphRangeForRange:paragraphRange]); - - if (nextParagraphStart < [plainString length]) - { - NSArray *nextListStyles = [_attributedString attribute:DTTextListsAttribute atIndex:nextParagraphStart effectiveRange:NULL]; - - // LI are only closed if there is not a deeper list level following - if (nextListStyles && ([nextListStyles indexOfObjectIdenticalTo:effectiveListStyle]!=NSNotFound) && [nextListStyles count] > [currentListStyles count]) - { - // deeper list following - shouldCloseLI = NO; - } - } - - if (shouldCloseLI) - { - [retString appendString:@"
  • "]; - } - } - else - { - // other blocks are always closed - [retString appendFormat:@"\n", blockElement]; - } - - previousListStyles = [currentListStyles copy]; - } // end of P loop - - - // close list if still open - if ([previousListStyles count]) - { - NSMutableArray *closingStyles = [previousListStyles mutableCopy]; - - do - { - DTCSSListStyle *closingStyle = [closingStyles lastObject]; - - // end of a list block - [retString appendString:[self _tagRepresentationForListStyle:closingStyle closingTag:YES listPadding:0 inlineStyles:fragment]]; - [retString appendString:@"\n"]; - - if ([closingStyles count]>1) - { - [retString appendString:@""]; - } - - [closingStyles removeLastObject]; - } - while ([closingStyles count]); - } - - NSMutableString *output = [NSMutableString string]; - - BOOL hasTab = ([retString rangeOfString:@"\t"].location != NSNotFound); - - if (!fragment) - { - // append style block before text - NSMutableString *styleBlock = [NSMutableString string]; - - NSArray *keys = [[_styleLookup allKeys] sortedArrayUsingSelector:@selector(compare:)]; - - for (NSString *oneKey in keys) - { - NSArray *styleArray = [_styleLookup objectForKey:oneKey]; - - [styleArray enumerateObjectsUsingBlock:^(NSString *style, NSUInteger idx, BOOL *stop) { - NSString *className = [NSString stringWithFormat:@"%@%d", [oneKey substringToIndex:1], (int)idx+1]; - [styleBlock appendFormat:@"%@.%@ {%@}\n", oneKey, className, style]; - }]; - } - - if (hasTab) - { - [styleBlock appendString:@"span.Apple-tab-span {white-space:pre;}"]; - } - - [output appendFormat:@"\n\n\n\n\n\n\n\n\n", styleBlock]; - } - - if (hasTab) - { - NSRange range = NSMakeRange(0, [retString length]); - - if (fragment) - { - [retString replaceOccurrencesOfString:@"\t" withString:@"\t" options:0 range:range]; - } - else - { - [retString replaceOccurrencesOfString:@"\t" withString:@"\t" options:0 range:range]; - } - } - - if (_useAppleConvertedSpace) - { - NSString *convertedSpaces = [retString stringByAddingAppleConvertedSpace]; - - [output appendString:convertedSpaces]; - } - else - { - [output appendString:retString]; - } - - if (!fragment) - { - [output appendString:@"\n\n"]; - } - - _HTMLString = output; -} - -#pragma mark - Public - -- (NSString *)HTMLString -{ - if (!_HTMLString) - { - [self _buildOutput]; - } - - return _HTMLString; -} - -- (NSString *)HTMLFragment -{ - if (!_HTMLString) - { - [self _buildOutputAsHTMLFragment:true]; - } - - return _HTMLString; -} - -#pragma mark - Properties - -@synthesize attributedString = _attributedString; -@synthesize textScale = _textScale; -@synthesize useAppleConvertedSpace = _useAppleConvertedSpace; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHorizontalRuleHTMLElement.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHorizontalRuleHTMLElement.h deleted file mode 100644 index adb8545..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHorizontalRuleHTMLElement.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// DTHTMLElementHR.h -// DTCoreText -// -// Created by Oliver Drobnik on 26.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTHTMLElement.h" - -/** - Specialized subclass of that deals with list items. - */ - -@interface DTHorizontalRuleHTMLElement : DTHTMLElement - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHorizontalRuleHTMLElement.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHorizontalRuleHTMLElement.m deleted file mode 100644 index f63e73b..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTHorizontalRuleHTMLElement.m +++ /dev/null @@ -1,30 +0,0 @@ -// -// DTHTMLElementHR.m -// DTCoreText -// -// Created by Oliver Drobnik on 26.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTHorizontalRuleHTMLElement.h" - -@implementation DTHorizontalRuleHTMLElement - -- (NSDictionary *)attributesForAttributedStringRepresentation -{ - NSMutableDictionary *dict = [[super attributesForAttributedStringRepresentation] mutableCopy]; - [dict setObject:[NSNumber numberWithBool:YES] forKey:DTHorizontalRuleStyleAttribute]; - - return dict; -} - -- (NSAttributedString *)attributedString -{ - @synchronized(self) - { - NSDictionary *attributes = [self attributesForAttributedStringRepresentation]; - return [[NSAttributedString alloc] initWithString:@"\n" attributes:attributes]; - } -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTIframeTextAttachment.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTIframeTextAttachment.h deleted file mode 100644 index 7972a74..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTIframeTextAttachment.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// DTTextAttachmentIframe.h -// DTCoreText -// -// Created by Oliver Drobnik on 22.04.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTTextAttachment.h" - -/** - A specialized subclass in the DTTextAttachment class cluster to represent an IFRAME - */ - -@interface DTIframeTextAttachment : DTTextAttachment - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTIframeTextAttachment.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTIframeTextAttachment.m deleted file mode 100644 index d182765..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTIframeTextAttachment.m +++ /dev/null @@ -1,115 +0,0 @@ -// -// DTTextAttachmentIframe.m -// DTCoreText -// -// Created by Oliver Drobnik on 22.04.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTIframeTextAttachment.h" -#import "DTCoreTextConstants.h" -#import "DTHTMLElement.h" -#import "NSString+HTML.h" - -@implementation DTIframeTextAttachment - -- (id)initWithElement:(DTHTMLElement *)element options:(NSDictionary *)options -{ - self = [super initWithElement:element options:options]; - - if (self) - { - // get base URL - NSURL *baseURL = [options objectForKey:NSBaseURLDocumentOption]; - NSString *src = [element.attributes objectForKey:@"src"]; - - // prepend http: if URL string starts with // (seems to do with youtube iframes as standard) - if ([src hasPrefix:@"//"]) { - src = [@"http:" stringByAppendingString:src]; - } - - // content URL - _contentURL = [NSURL URLWithString:src relativeToURL:baseURL]; - } - - return self; -} - -#pragma mark - DTTextAttachmentHTMLEncoding - -- (NSString *)stringByEncodingAsHTML -{ - NSMutableString *retString = [NSMutableString string]; - - [retString appendString:@"0) - { - [styleString appendFormat:@"width:%.0fpx;", _originalSize.width]; - } - - if (_originalSize.height>0) - { - [styleString appendFormat:@"height:%.0fpx;", _originalSize.height]; - } - - // add local style for size, since sizes might vary quite a bit - if ([styleString length]) - { - [retString appendFormat:@" style=\"%@\"", styleString]; - } - - // attach the attributes dictionary - NSMutableDictionary *tmpAttributes = [_attributes mutableCopy]; - - // remove src,style, width and height we already have these - [tmpAttributes removeObjectForKey:@"src"]; - [tmpAttributes removeObjectForKey:@"style"]; - [tmpAttributes removeObjectForKey:@"width"]; - [tmpAttributes removeObjectForKey:@"height"]; - - for (__strong NSString *oneKey in [tmpAttributes allKeys]) - { - oneKey = [oneKey stringByAddingHTMLEntities]; - NSString *value = [[tmpAttributes objectForKey:oneKey] stringByAddingHTMLEntities]; - [retString appendFormat:@" %@=\"%@\"", oneKey, value]; - } - - [retString appendString:@" />"]; - - return retString; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTImage+HTML.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTImage+HTML.h deleted file mode 100644 index 022e409..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTImage+HTML.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// DTImage+HTML.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/9/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE - -#import - -/** - Category used to have the same method available for unit testing on Mac on iOS. - */ -@interface UIImage (HTML) - -/** - Retrieve the NSData representation of a UIImage. Used to encode UIImages in DTTextAttachments. - - @returns The NSData representation of the UIImage instance receiving this message. Convenience method for UIImagePNGRepresentation(). - */ -- (NSData *)dataForPNGRepresentation; - -@end - -#endif - -#if TARGET_OS_OSX -#import - -/** - Category used to have the same method available for unit testing on Mac on iOS. - */ -@interface NSImage (HTML) - - -/** - Retrieve the NSData representation of a NSImage. - - @returns The NSData representation of the NSImage instance receiving this message. - */ -- (NSData *)dataForPNGRepresentation; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTImage+HTML.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTImage+HTML.m deleted file mode 100644 index 6b99011..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTImage+HTML.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// DTImage+HTML.m -// DTCoreText -// -// Created by Oliver Drobnik on 31.01.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTImage+HTML.h" - -#if TARGET_OS_IPHONE - -@implementation UIImage (HTML) - -- (NSData *)dataForPNGRepresentation -{ - return UIImagePNGRepresentation(self); -} - -@end - -#endif - -#if TARGET_OS_OSX - -@implementation NSImage (HTML) - -- (NSData *)dataForPNGRepresentation -{ - [self lockFocus]; - NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, self.size.width, self.size.height)]; - [self unlockFocus]; - - return [bitmapRep representationUsingType:NSPNGFileType properties:[NSDictionary new]]; -} - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTImageTextAttachment.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTImageTextAttachment.h deleted file mode 100644 index 4d41041..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTImageTextAttachment.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// DTTextAttachmentImage.h -// DTCoreText -// -// Created by Oliver Drobnik on 22.04.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" -#import "DTTextAttachment.h" - -@class DTImage; - -/** - A specialized subclass in the DTTextAttachment class cluster to represent an embedded image - */ - -@interface DTImageTextAttachment : DTTextAttachment - -/** - The designated initializer which will be called by [DTTextAttachment textAttachmentWithElement:options:] for image attachments. - @param element A DTHTMLElement that must have a valid tag name and should have a size. Any element attributes are copied to the text attachment's elements. - @param options An NSDictionary of options. Used to specify the max image size with the key DTMaxImageSize. - */ -- (id)initWithElement:(DTHTMLElement *)element options:(NSDictionary *)options; - -/** - @name Alternate Representations - */ - -/** - Retrieves a string which is in the format "data:image/png;base64,%@" with this DTTextAttachment's content's data representation encoded in Base64 string encoding. For image contents only. - @returns A Base64 encoded string of the png data representation of this text attachment's image contents. - */ -- (NSString *)dataURLRepresentation; - -/** - The image represented by the receiver - */ -@property (nonatomic, strong) DTImage *image; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTImageTextAttachment.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTImageTextAttachment.m deleted file mode 100644 index 26c3738..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTImageTextAttachment.m +++ /dev/null @@ -1,501 +0,0 @@ -// -// DTImageTextAttachment.m -// DTCoreText -// -// Created by Oliver Drobnik on 22.04.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTImageTextAttachment.h" - -#import "DTCoreTextConstants.h" -#import "DTHTMLElement.h" -#import "NSString+CSS.h" -#import "NSString+HTML.h" -#import "DTImage+HTML.h" - -#if TARGET_OS_IPHONE - #import -#endif - -#import - -static NSCache *imageCache = nil; - -@interface DTImageTextAttachment () // private stuff - -+ (NSCache *)sharedImageCache; - -@end - - -@implementation DTImageTextAttachment -{ - DTImage *_image; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [super initWithCoder:aDecoder]; - if (self) { - _image = [aDecoder decodeObjectForKey:@"image"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [super encodeWithCoder:aCoder]; - [aCoder encodeObject:_image forKey:@"image"]; -} - -- (id)initWithElement:(DTHTMLElement *)element options:(NSDictionary *)options -{ - self = [super initWithElement:element options:options]; - - if (self) - { - [self _decodeImageFromElement:element options:options]; - } - - return self; -} - -- (id)initWithImage:(DTImage *)image -{ - self = [super init]; - - if (self) - { - self.image = image; - } - - return self; -} - - -- (void)_decodeImageFromElement:(DTHTMLElement *)element options:(NSDictionary *)options -{ - // get base URL - NSURL *baseURL = [options objectForKey:NSBaseURLDocumentOption]; - NSString *src = [element.attributes objectForKey:@"src"]; - - NSURL *contentURL = nil; - - // decode content URL - if ([src length]) // guard against img with no src - { - if ([src hasPrefix:@"data:"]) - { - NSString *cleanStr = [[src componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] componentsJoinedByString:@""]; - - NSURL *dataURL = [NSURL URLWithString:cleanStr]; - - // try native decoding first - NSData *decodedData = [NSData dataWithContentsOfURL:dataURL]; - - // try own base64 decoding - if (!decodedData) - { - NSRange range = [cleanStr rangeOfString:@"base64,"]; - - if (range.length) - { - NSString *encodedData = [cleanStr substringFromIndex:range.location + range.length]; - - decodedData = [DTBase64Coding dataByDecodingString:encodedData]; - } - } - - // if we have image data, get the default display size - if (decodedData) - { - DTImage *decodedImage = [[DTImage alloc] initWithData:decodedData]; - - // we don't know the content scale from such images, need to infer it from size in style - NSString *styles = [element.attributes objectForKey:@"style"]; - - // that only works if there is a style dictionary - if (styles) - { - NSDictionary *attributes = [styles dictionaryOfCSSStyles]; - - NSString *widthStr = attributes[@"width"]; - NSString *heightStr = attributes[@"height"]; - - if ([widthStr hasSuffix:@"px"] && [heightStr hasSuffix:@"px"]) - { - CGSize sizeAccordingToStyle; - - // those style size values are the original image size - sizeAccordingToStyle.width = [widthStr pixelSizeOfCSSMeasureRelativeToCurrentTextSize:0 textScale:1]; - sizeAccordingToStyle.height = [heightStr pixelSizeOfCSSMeasureRelativeToCurrentTextSize:0 textScale:1]; - - // if _orgiginal width and height are a fraction of decode image size, it must be a scaled image - if (sizeAccordingToStyle.width != 0 && sizeAccordingToStyle.width < decodedImage.size.width && - sizeAccordingToStyle.height != 0 && sizeAccordingToStyle.height < decodedImage.size.height) - { - // determine image scale - CGFloat scale = round(decodedImage.size.width/sizeAccordingToStyle.width); - - // sanity check, accept from @2x - @5x - if (scale>=2.0 && scale<=5.0) - { -#if TARGET_OS_IPHONE - // on iOS change the scale by making a new image with same pixels - decodedImage = [DTImage imageWithCGImage:decodedImage.CGImage scale:scale orientation:decodedImage.imageOrientation]; -#else - // on OS X we can set the size - [decodedImage setSize:sizeAccordingToStyle]; -#endif - } - } - } - } - - self.image = decodedImage; - - // prevent remote loading of image - _contentURL = nil; - } - } - else // normal URL - { - contentURL = [NSURL URLWithString:src]; - - if (!contentURL) - { - src = [src stringByAddingHTMLEntities]; - contentURL = [NSURL URLWithString:src relativeToURL:baseURL]; - } - - if (!contentURL) - { - src = [src stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; - contentURL = [NSURL URLWithString:src]; - } - - if (![contentURL scheme]) - { - // possibly a relative url - if (baseURL) - { - contentURL = [NSURL URLWithString:src relativeToURL:baseURL]; - } - else - { - // file in app bundle - NSBundle *bundle = [NSBundle bundleForClass:[self class]]; - NSString *path = [bundle pathForResource:src ofType:nil]; - - if (path) - { - // Prevent a crash if path turns up nil. - contentURL = [NSURL fileURLWithPath:path]; - } - else - { - // might also be in a different bundle, e.g. when unit testing - bundle = [NSBundle bundleForClass:[DTTextAttachment class]]; - - path = [bundle pathForResource:src ofType:nil]; - if (path) - { - // Prevent a crash if path turns up nil. - contentURL = [NSURL fileURLWithPath:path]; - } - } - } - } - } - } - - // if it's a local file we need to inspect it to get it's dimensions - if (_displaySize.width==0 || _displaySize.height==0) - { - DTImage *image = _image; - - // let's check if we have a cached image already then we can inspect that - if (!_image) - { - image = [[DTImageTextAttachment sharedImageCache] objectForKey:[contentURL absoluteString]]; - } - - if (!image) - { - // only local files we can directly load without punishment - if ([contentURL isFileURL]) - { -#if TARGET_OS_IPHONE - NSString *ext = [[[contentURL lastPathComponent] pathExtension] lowercaseString]; - - if ([ext isEqualToString:@"gif"]) - { - image = DTAnimatedGIFFromFile([contentURL path]); - } - else -#endif - { - image = [[DTImage alloc] initWithContentsOfFile:[contentURL path]]; - } - } - - // cache that for later - if (image) - { - [[DTImageTextAttachment sharedImageCache] setObject:image forKey:[contentURL absoluteString]]; - } - } - - // we have an image, so we can set the original size and default display size - if (image) - { - _contentURL = nil; - [self _updateSizesFromImage:image]; - } - } - - // only remote images should have a URL - _contentURL = contentURL; -} - -- (void)_updateSizesFromImage:(DTImage *)image -{ - // set original size if there is none set yet - if (CGSizeEqualToSize(_originalSize, CGSizeZero)) - { - _originalSize = image.size; - } - else - { - // get the other dimension if one is missing - - if (_originalSize.width==0 && _originalSize.height!=0) - { - CGFloat factor = _originalSize.height/image.size.height; - _originalSize.width = image.size.width * factor; - } - else if (_originalSize.width!=0 && _originalSize.height==0) - { - CGFloat factor = _originalSize.width/image.size.width; - _originalSize.height = image.size.height * factor; - } - } - - // initial display size matches original - if (CGSizeEqualToSize(CGSizeZero, _displaySize)) - { - [self setDisplaySize:_originalSize withMaxDisplaySize:_maxImageSize]; - } - else - { - // get the other dimension if one is missing - - if (_displaySize.width==0 && _displaySize.height!=0) - { - CGSize newDisplaySize = _displaySize; - - CGFloat factor = _displaySize.height/_originalSize.height; - newDisplaySize.width = _originalSize.width * factor; - - [self setDisplaySize:newDisplaySize withMaxDisplaySize:_maxImageSize]; - } - else if (_displaySize.width!=0 && _displaySize.height==0) - { - CGSize newDisplaySize = _displaySize; - - CGFloat factor = _displaySize.width/_originalSize.width; - newDisplaySize.height = _originalSize.height * factor; - - [self setDisplaySize:newDisplaySize withMaxDisplaySize:_maxImageSize]; - } - } -} - -+ (NSCache *)sharedImageCache { - if (imageCache) return imageCache; - - static dispatch_once_t onceToken; // lock - dispatch_once(&onceToken, ^{ // this block run only once - imageCache = [[NSCache alloc] init]; - }); - return imageCache; -} - -#pragma mark - Alternative Representations - -// makes a data URL of the image -- (NSString *)dataURLRepresentation -{ - DTImage *image = self.image; - - if (!image) - { - return nil; - } - - NSData *data = [image dataForPNGRepresentation]; - NSString *encoded = [DTBase64Coding stringByEncodingData:data]; - - return [@"data:image/png;base64," stringByAppendingString:encoded]; -} - -#pragma mark - DTTextAttachmentDrawing - -- (void)drawInRect:(CGRect)rect context:(CGContextRef)context -{ - [self.image drawInRect:rect]; -} - -#pragma mark - DTTextAttachmentHTMLEncoding - -- (NSString *)stringByEncodingAsHTML -{ - NSMutableString *retString = [NSMutableString string]; - NSString *urlString; - - if (_contentURL) - { - - if ([_contentURL isFileURL]) - { - NSString *path = [_contentURL path]; - - NSRange range = [path rangeOfString:@".app/"]; - - if (range.length) - { - urlString = [path substringFromIndex:NSMaxRange(range)]; - } - else - { - urlString = [_contentURL absoluteString]; - } - } - else - { - urlString = [_contentURL relativeString]; - } - } - else - { - urlString = [self dataURLRepresentation]; - } - - // output tag start - [retString appendString:@"0) - { - [styleString appendFormat:@"width:%.0fpx;", _originalSize.width]; - } - - if (_originalSize.height>0) - { - [styleString appendFormat:@"height:%.0fpx;", _originalSize.height]; - } - - // add local style for size, since sizes might vary quite a bit - if ([styleString length]) - { - [retString appendFormat:@" style=\"%@\"", styleString]; - } - - [retString appendFormat:@" src=\"%@\"", urlString]; - - // attach the attributes dictionary - NSMutableDictionary *tmpAttributes = [_attributes mutableCopy]; - - // remove src,style, width and height we already have these - [tmpAttributes removeObjectForKey:@"src"]; - [tmpAttributes removeObjectForKey:@"style"]; - [tmpAttributes removeObjectForKey:@"width"]; - [tmpAttributes removeObjectForKey:@"height"]; - - for (__strong NSString *oneKey in [tmpAttributes allKeys]) - { - oneKey = [oneKey stringByAddingHTMLEntities]; - NSString *value = [[tmpAttributes objectForKey:oneKey] stringByAddingHTMLEntities]; - [retString appendFormat:@" %@=\"%@\"", oneKey, value]; - } - - // end - [retString appendString:@" />"]; - - return retString; -} - -#pragma mark - Properties - -/** - Accessor for the contents instance variable. If the content type is DTTextAttachmentTypeImage this returns a DTImage instance of the contents. - @returns Contents. If it is an image, a DTImage instance is returned. Otherwise it is returned as is. - */ -- (DTImage *)image -{ - if (!_image) - { - if (_contentURL) - { - DTImage *image = [[DTImageTextAttachment sharedImageCache] objectForKey:[_contentURL absoluteString]]; - - // only local files can be loaded into cache - if (!image && [_contentURL isFileURL]) - { - image = [[DTImage alloc] initWithContentsOfFile:[_contentURL path]]; - - // cache it - if (image) - { - [[DTImageTextAttachment sharedImageCache] setObject:image forKey:[_contentURL absoluteString]]; - } - } - - return image; - } - } - - return _image; -} - -- (void)setImage:(DTImage *)image -{ - if (_image != image) - { - _image = image; - - [self _updateSizesFromImage:_image]; - } -} - -- (void)setDisplaySize:(CGSize)displaySize -{ - _displaySize = displaySize; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTLazyImageView.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTLazyImageView.h deleted file mode 100644 index a725539..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTLazyImageView.h +++ /dev/null @@ -1,87 +0,0 @@ -// -// DTLazyImageView.h -// DTCoreText -// -// Created by Oliver Drobnik on 5/20/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import -#import "DTAttributedTextContentView.h" - -@class DTLazyImageView; - -// Notifications -extern NSString * const DTLazyImageViewWillStartDownloadNotification; -extern NSString * const DTLazyImageViewDidFinishDownloadNotification; - -/** - Protocol for delegates of to inform them about the downloaded image dimensions. - */ -@protocol DTLazyImageViewDelegate -@optional - -/** - Method that informs the delegate about the image size so that it can re-layout text. - @param lazyImageView The image view - @param size The image size that is now known - */ -- (void)lazyImageView:(DTLazyImageView *)lazyImageView didChangeImageSize:(CGSize)size; -@end - -/** - This `UIImageView` subclass lazily loads an image from a URL and informs a delegate once the size of the image is known. - */ - -@interface DTLazyImageView : UIImageView - -/** - @name Providing Content - */ - -/** - The URL of the remote image - */ -@property (nonatomic, strong) NSURL *url; - -/** - The URL Request that is to be used for downloading the image. If this is left `nil` the a new URL Request will be created - */ -@property (nonatomic, strong) NSMutableURLRequest *urlRequest; - -/** - The DTAttributedTextContentView used to display remote images with DTAttributedTextCell - */ -@property (nonatomic, DT_WEAK_PROPERTY) DTAttributedTextContentView *contentView; - -/** - @name Getting Information - */ - -/** - Set to `YES` to support progressive display of progressive downloads - */ -@property (nonatomic, assign) BOOL shouldShowProgressiveDownload; - -/** - The delegate, conforming to , to inform when the image dimensions were determined - */ -@property (nonatomic, DT_WEAK_PROPERTY) id delegate; - - -/** - @name Cancelling Download -*/ - -/** - Cancels the image downloading - */ -- (void)cancelLoading; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTLazyImageView.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTLazyImageView.m deleted file mode 100644 index d63af81..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTLazyImageView.m +++ /dev/null @@ -1,420 +0,0 @@ -// -// DTLazyImageView.m -// DTCoreText -// -// Created by Oliver Drobnik on 5/20/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTLazyImageView.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -#import - -static NSCache *_imageCache = nil; - -NSString * const DTLazyImageViewWillStartDownloadNotification = @"DTLazyImageViewWillStartDownloadNotification"; -NSString * const DTLazyImageViewDidFinishDownloadNotification = @"DTLazyImageViewDidFinishDownloadNotification"; - -@interface DTLazyImageView () -#if DTCORETEXT_USES_NSURLSESSION - -#else - -#endif - -- (void)_notifyDelegate; - -@end - -@implementation DTLazyImageView -{ - NSURL *_url; - NSMutableURLRequest *_urlRequest; - - -#if DTCORETEXT_USES_NSURLSESSION - NSURLSessionDataTask *_dataTask; - NSURLSession *_session; -#else - NSURLConnection *_connection; -#endif - - NSMutableData *_receivedData; - - /* For progressive download */ - CGImageSourceRef _imageSource; - CGFloat _fullHeight; - CGFloat _fullWidth; - NSUInteger _expectedSize; - - BOOL shouldShowProgressiveDownload; - - DT_WEAK_VARIABLE id _delegate; -} - -- (void)dealloc -{ - _delegate = nil; // to avoid late notification - -#if DTCORETEXT_USES_NSURLSESSION - [_dataTask cancel]; -#else - [_connection cancel]; -#endif - - if (_imageSource) CFRelease(_imageSource); -} - -- (void)loadImageAtURL:(NSURL *)url -{ - // local files we don't need to get asynchronously - if ([url isFileURL] || [url.scheme isEqualToString:@"data"]) - { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - NSData *data = [NSData dataWithContentsOfURL:url]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self completeDownloadWithData:data]; - }); - }); - - return; - } - - @autoreleasepool - { - if (!_urlRequest) - { - _urlRequest = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0]; - } - else - { - [_urlRequest setCachePolicy:NSURLRequestReturnCacheDataElseLoad]; - [_urlRequest setTimeoutInterval:10.0]; - } - - [[NSNotificationCenter defaultCenter] postNotificationName:DTLazyImageViewWillStartDownloadNotification object:self]; - -#if DTCORETEXT_USES_NSURLSESSION - - if (!_session) - { - _session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil]; - } - - _dataTask = [_session dataTaskWithRequest:_urlRequest]; - [_dataTask resume]; -#else - _connection = [[NSURLConnection alloc] initWithRequest:_urlRequest delegate:self startImmediately:NO]; - [_connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; - [_connection start]; -#endif - } -} - -- (void)didMoveToSuperview -{ - [super didMoveToSuperview]; - - if (!self.image && (_url || _urlRequest) && -#if DTCORETEXT_USES_NSURLSESSION - !_dataTask -#else - !_connection -#endif - && self.superview) - { - UIImage *image = [_imageCache objectForKey:_url]; - - if (image) - { - self.image = image; - _fullWidth = image.size.width; - _fullHeight = image.size.height; - - // this has to be synchronous - [self _notifyDelegate]; - - return; - } - - [self loadImageAtURL:_url]; - } -} - -- (void)cancelLoading -{ -#if DTCORETEXT_USES_NSURLSESSION - [_dataTask cancel]; - _dataTask = nil; -#else - [_connection cancel]; - _connection = nil; -#endif - - _receivedData = nil; -} - -#pragma mark Progressive Image --(CGImageRef)newTransitoryImage:(CGImageRef)partialImg -{ - const size_t height = CGImageGetHeight(partialImg); - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - size_t lFullWidth = (size_t)ceil(_fullWidth); - size_t lFullHeight = (size_t)ceil(_fullHeight); - CGContextRef bmContext = CGBitmapContextCreate(NULL, lFullWidth, lFullHeight, 8, lFullWidth * 4, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst); - CGColorSpaceRelease(colorSpace); - if (!bmContext) - { - // fail creating context - return NULL; - } - CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = _fullWidth, .size.height = height}, partialImg); - CGImageRef goodImageRef = CGBitmapContextCreateImage(bmContext); - CGContextRelease(bmContext); - return goodImageRef; -} - -- (void)createAndShowProgressiveImage -{ - if (!_imageSource) - { - return; - } - - /* For progressive download */ - const NSUInteger totalSize = [_receivedData length]; - CGImageSourceUpdateData(_imageSource, (__bridge CFDataRef)_receivedData, (totalSize == _expectedSize) ? true : false); - - if (_fullHeight > 0 && _fullWidth > 0) - { - CGImageRef image = CGImageSourceCreateImageAtIndex(_imageSource, 0, NULL); - if (image) - { - CGImageRef imgTmp = [self newTransitoryImage:image]; // iOS fix to correctly handle JPG see : http://www.cocoabyss.com/mac-os-x/progressive-image-download-imageio/ - if (imgTmp) - { - UIImage *uimage = [[UIImage alloc] initWithCGImage:imgTmp]; - CGImageRelease(imgTmp); - - dispatch_async(dispatch_get_main_queue(), ^{ self.image = uimage; } ); - } - CGImageRelease(image); - } - } - else - { - CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(_imageSource, 0, NULL); - if (properties) - { - CFTypeRef val = CFDictionaryGetValue(properties, kCGImagePropertyPixelHeight); - if (val) - CFNumberGetValue(val, kCFNumberFloatType, &_fullHeight); - val = CFDictionaryGetValue(properties, kCGImagePropertyPixelWidth); - if (val) - CFNumberGetValue(val, kCFNumberFloatType, &_fullWidth); - CFRelease(properties); - } - } -} - -#pragma mark NSURL Loading - -- (void)_notifyDelegate -{ - if ([self.delegate respondsToSelector:@selector(lazyImageView:didChangeImageSize:)]) { - [self.delegate lazyImageView:self didChangeImageSize:CGSizeMake(_fullWidth, _fullHeight)]; - } -} - -- (void)completeDownloadWithData:(NSData *)data -{ - UIImage *image = [[UIImage alloc] initWithData:data]; - - self.image = image; - _fullWidth = image.size.width; - _fullHeight = image.size.height; - - [self _notifyDelegate]; - - static dispatch_once_t predicate; - - dispatch_once(&predicate, ^{ - _imageCache = [[NSCache alloc] init]; - }); - - if (_url) - { - if (image) - { - // cache image - [_imageCache setObject:image forKey:_url]; - } - else - { - DTLogWarning(@"Warning, %@ did not get an image for %@", NSStringFromClass([self class]), [_url absoluteString]); - } - } -} - -#if DTCORETEXT_USES_NSURLSESSION -- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask -didReceiveResponse:(NSURLResponse *)response - completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler -#else -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response -#endif -{ - // every time we get an response it might be a forward, so we discard what data we have - _receivedData = nil; - - // does not fire for local file URLs - if ([response isKindOfClass:[NSHTTPURLResponse class]]) - { - NSHTTPURLResponse *httpResponse = (id)response; - - if (![[httpResponse MIMEType] hasPrefix:@"image"]) - { -#if DTCORETEXT_USES_NSURLSESSION - completionHandler(NSURLSessionResponseCancel); -#else - [self cancelLoading]; -#endif - return; - } - -#if DTCORETEXT_USES_NSURLSESSION - completionHandler(NSURLSessionResponseAllow); -#endif - } - - /* For progressive download */ - _fullWidth = _fullHeight = -1.0f; - _expectedSize = (NSUInteger)[response expectedContentLength]; - - _receivedData = [[NSMutableData alloc] init]; -} - -#if DTCORETEXT_USES_NSURLSESSION -- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask - didReceiveData:(NSData *)data -#else --(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data -#endif -{ - [_receivedData appendData:data]; - - if (!&CGImageSourceCreateIncremental || !shouldShowProgressiveDownload) - { - // don't show progressive - return; - } - - if (!_imageSource) - { - _imageSource = CGImageSourceCreateIncremental(NULL); - } - - [self createAndShowProgressiveImage]; -} - - -- (void)removeFromSuperview -{ - [super removeFromSuperview]; - -#if DTCORETEXT_USES_NSURLSESSION - [_dataTask cancel]; - [_session invalidateAndCancel]; -#else - [_connection cancel]; -#endif -} - -#if DTCORETEXT_USES_NSURLSESSION -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task -didCompleteWithError:(nullable NSError *)error -#else -- (void)connectionDidFinishLoading:(NSURLConnection *)connection -#endif -{ -#if DTCORETEXT_USES_NSURLSESSION - if (error) - { - [self connection:nil didFailWithError:error]; - return; - } -#endif - - if (_receivedData) - { - [self performSelectorOnMainThread:@selector(completeDownloadWithData:) withObject:_receivedData waitUntilDone:YES]; - - _receivedData = nil; - } - -#if DTCORETEXT_USES_NSURLSESSION - [_session finishTasksAndInvalidate]; - _dataTask = nil; -#else - _connection = nil; -#endif - - /* For progressive download */ - if (_imageSource) - { - CFRelease(_imageSource); - _imageSource = NULL; - } - - CFRunLoopStop(CFRunLoopGetCurrent()); - - // success = no userInfo - [[NSNotificationCenter defaultCenter] postNotificationName:DTLazyImageViewDidFinishDownloadNotification object:self]; -} - -- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error -{ -#if DTCORETEXT_USES_NSURLSESSION - [_session invalidateAndCancel]; - _dataTask = nil; -#else - _connection = nil; -#endif - - _receivedData = nil; - - /* For progressive download */ - if (_imageSource) - { - CFRelease(_imageSource); - _imageSource = NULL; - } - - CFRunLoopStop(CFRunLoopGetCurrent()); - - // send completion notification, pack in error as well - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:error forKey:@"Error"]; - [[NSNotificationCenter defaultCenter] postNotificationName:DTLazyImageViewDidFinishDownloadNotification object:self userInfo:userInfo]; -} - -#pragma mark Properties - -- (void) setUrlRequest:(NSMutableURLRequest *)request -{ - _urlRequest = request; - self.url = [_urlRequest URL]; -} - -@synthesize delegate=_delegate; -@synthesize shouldShowProgressiveDownload; -@synthesize url = _url; -@synthesize urlRequest = _urlRequest; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTLinkButton.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTLinkButton.h deleted file mode 100644 index ec61db7..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTLinkButton.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// DTLinkButton.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/16/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH -#import - -/** - Constant for highlighting notification - */ -extern NSString *DTLinkButtonDidHighlightNotification; - -/** - A button that corresponds to a hyperlink. - - Multiple parts of the same hyperlink synchronize their looks through the guid. You can show link text in a different color for normal and highlighted mode by setting the button images for these states. - */ -@interface DTLinkButton : UIButton - - -/** - The URL that this button corresponds to. - */ -@property (nonatomic, copy) NSURL *URL; - - -/** - The unique identifier (GUID) that all parts of the same hyperlink have in common. - */ -@property (nonatomic, copy) NSString *GUID; - - -/** - The minimum size that the receiver should respond on hits with. Adjusts the bounds if they are smaller than the passed size. - */ -@property (nonatomic, assign) CGSize minimumHitSize; - - -/** - A Boolean value that determines whether tapping the button causes it to show a gray rounded rectangle. Default is YES. - */ -@property(nonatomic) BOOL showsTouchWhenHighlighted; - - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTLinkButton.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTLinkButton.m deleted file mode 100644 index c5a2c49..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTLinkButton.m +++ /dev/null @@ -1,185 +0,0 @@ -// -// DTLinkButton.m -// DTCoreText -// -// Created by Oliver Drobnik on 1/16/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTLinkButton.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import "DTCoreText.h" - -// constant for notification -NSString *DTLinkButtonDidHighlightNotification = @"DTLinkButtonDidHighlightNotification"; - - -@interface DTLinkButton () - -- (void)highlightNotification:(NSNotification *)notification; - -@end - - -@implementation DTLinkButton -{ - NSURL *_URL; - NSString *_GUID; - - CGSize _minimumHitSize; - BOOL _showsTouchWhenHighlighted; -} - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) - { - self.userInteractionEnabled = YES; - self.enabled = YES; - self.opaque = NO; - - _showsTouchWhenHighlighted = YES; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(highlightNotification:) name:DTLinkButtonDidHighlightNotification object:nil]; - } - - - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark Drawing the Run - -- (void)drawRect:(CGRect)rect -{ - CGContextRef ctx = UIGraphicsGetCurrentContext(); - - if (self.highlighted) - { - if (_showsTouchWhenHighlighted) - { - CGRect imageRect = [self contentRectForBounds:self.bounds]; - - UIBezierPath *roundedPath = [UIBezierPath bezierPathWithRoundedRect:imageRect cornerRadius:3.0f]; - CGContextSetGrayFillColor(ctx, 0.73f, 0.4f); - [roundedPath fill]; - } - } -} - -#pragma mark Utilitiy - -- (void)_adjustBoundsIfNecessary -{ - CGRect bounds = self.bounds; - CGFloat widthExtend = 0; - CGFloat heightExtend = 0; - - if (bounds.size.width < _minimumHitSize.width) - { - widthExtend = _minimumHitSize.width - bounds.size.width; - } - - if (bounds.size.height < _minimumHitSize.height) - { - heightExtend = _minimumHitSize.height - bounds.size.height; - } - - if (widthExtend>0 || heightExtend>0) - { - UIEdgeInsets edgeInsets = UIEdgeInsetsMake(ceil(heightExtend/2.0f), ceil(widthExtend/2.0f), ceil(heightExtend/2.0f), ceil(widthExtend/2.0f)); - - // extend bounds by the calculated necessary edge insets - bounds.size.width += edgeInsets.left + edgeInsets.right; - bounds.size.height += edgeInsets.top + edgeInsets.bottom; - - // apply bounds and insets - self.bounds = bounds; - self.contentEdgeInsets = edgeInsets; - } - else - { - self.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0); - } -} - -#pragma mark Notifications -- (void)highlightNotification:(NSNotification *)notification -{ - if ([notification object] == self) - { - // that was me - return; - } - - NSDictionary *userInfo = [notification userInfo]; - - NSString *guid = [userInfo objectForKey:@"GUID"]; - - if ([guid isEqualToString:_GUID]) - { - BOOL highlighted = [[userInfo objectForKey:@"Highlighted"] boolValue]; - [super setHighlighted:highlighted]; - [self setNeedsDisplay]; - } -} - - - -#pragma mark Properties - -- (void)setHighlighted:(BOOL)highlighted -{ - [super setHighlighted:highlighted]; - [self setNeedsDisplay]; - - // notify other parts of the same link - if (_GUID) - { - NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:highlighted], @"Highlighted", _GUID, @"GUID", nil]; - - [[NSNotificationCenter defaultCenter] postNotificationName:DTLinkButtonDidHighlightNotification object:self userInfo:userInfo]; - } -} - -- (void)setFrame:(CGRect)frame -{ - [super setFrame:frame]; - - if (CGRectIsEmpty(frame)) - { - return; - } - - [self _adjustBoundsIfNecessary]; -} - - -- (void)setMinimumHitSize:(CGSize)minimumHitSize -{ - if (CGSizeEqualToSize(_minimumHitSize, minimumHitSize)) - { - return; - } - - _minimumHitSize = minimumHitSize; - - [self _adjustBoundsIfNecessary]; -} - -@synthesize URL = _URL; -@synthesize GUID = _GUID; - -@synthesize minimumHitSize = _minimumHitSize; -@synthesize showsTouchWhenHighlighted = _showsTouchWhenHighlighted; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTListItemHTMLElement.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTListItemHTMLElement.h deleted file mode 100644 index 17590c7..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTListItemHTMLElement.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DTHTMLElementLI.h -// DTCoreText -// -// Created by Oliver Drobnik on 27.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTHTMLElement.h" - -/** - Specialized subclass of that deals with list items. - */ -@interface DTListItemHTMLElement : DTHTMLElement - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTListItemHTMLElement.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTListItemHTMLElement.m deleted file mode 100644 index 254ab5d..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTListItemHTMLElement.m +++ /dev/null @@ -1,339 +0,0 @@ -// -// DTHTMLElementLI.m -// DTCoreText -// -// Created by Oliver Drobnik on 27.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTListItemHTMLElement.h" - -#import "DTCompatibility.h" -#import "DTCoreTextParagraphStyle.h" -#import "DTCoreTextFontDescriptor.h" -#import "NSDictionary+DTCoreText.h" -#import "DTCSSListStyle.h" -#import "NSString+CSS.h" -#import "DTImageTextAttachment.h" -#import "NSMutableAttributedString+HTML.h" -#import "NSAttributedStringRunDelegates.h" - -#if TARGET_OS_IPHONE -#import "UIFont+DTCoreText.h" -#endif - -@implementation DTListItemHTMLElement - -- (NSUInteger)_indexOfListItemInListRoot:(DTHTMLElement *)listRoot -{ - @synchronized(self) - { - NSInteger index = -1; - - NSArray *childNodes = [listRoot.childNodes copy]; - for (DTHTMLElement *oneElement in childNodes) - { - if ([oneElement isKindOfClass:[DTListItemHTMLElement class]]) - { - index++; - } - - if (oneElement == self) - { - break; - } - } - - return index; - } -} - -// calculates the accumulated list indent -- (CGFloat)_sumOfListIndents -{ - CGFloat indent = 0; - - DTHTMLElement *element = self.parentElement; - - while (element) - { - if ([element.name isEqualToString:@"ul"] || [element.name isEqualToString:@"ol"]) - { - indent += element->_listIndent; - } - else if (element.displayStyle == DTHTMLElementDisplayStyleListItem) - { - // we accept these - indent += element.padding.left; - } - else - { - break; - } - - element = element.parentElement; - } - - return indent; -} - -- (void)applyStyleDictionary:(NSDictionary *)styles -{ - [super applyStyleDictionary:styles]; - - CGFloat parentPadding = self.parentElement->_listIndent; - CGFloat listIndents = [self _sumOfListIndents]; - - self.paragraphStyle.headIndent = listIndents + _padding.left + _margins.left; - self.paragraphStyle.firstLineHeadIndent = self.paragraphStyle.headIndent; - - _margins.left += parentPadding; -} - -// creates an attributed list prefix -- (NSAttributedString *)_listPrefix -{ - DTCoreTextParagraphStyle *paragraphStyle = [[self attributesForAttributedStringRepresentation] paragraphStyle]; - NSParameterAssert(paragraphStyle); - - DTCoreTextFontDescriptor *fontDescriptor = [[self attributesForAttributedStringRepresentation] fontDescriptor]; - NSParameterAssert(fontDescriptor); - - DTCSSListStyle *effectiveList = [self.paragraphStyle.textLists lastObject]; - DTHTMLElement *listRoot = self.parentElement; - NSUInteger listCounter = [self _indexOfListItemInListRoot:listRoot]+effectiveList.startingItemNumber; - - // make a temporary version of self that has same font attributes as list root - DTListItemHTMLElement *tmpCopy = [[DTListItemHTMLElement alloc] init]; - [tmpCopy inheritAttributesFromElement:self]; - - // take the parents text color - tmpCopy.textColor = listRoot.textColor; - - // check for list-style:none modifier - NSDictionary *styles = [[self attributeForKey:@"style"] dictionaryOfCSSStyles]; - - if (styles) - { - // make a temp copy - effectiveList = [effectiveList copy]; - - // update from styles - [effectiveList updateFromStyleDictionary:styles]; - } - - NSDictionary *attributes = [tmpCopy attributesForAttributedStringRepresentation]; - - // modify paragraph style - paragraphStyle.firstLineHeadIndent = self.paragraphStyle.headIndent - _margins.left - _padding.left;; // first line has prefix and starts at list indent; - paragraphStyle.defaultTabInterval = 100; - - // resets tabs - paragraphStyle.tabStops = nil; - - // set tab stops - if (effectiveList.type != DTCSSListStyleTypeNone) - { - if (_margins.left<=0) - { - return nil; - } - - // first tab is to right-align bullet, numbering against - CGFloat tabOffset = paragraphStyle.headIndent - (CGFloat)5.0; // TODO: change with font size - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - [paragraphStyle addTabStopAtPosition:tabOffset alignment:kCTTextAlignmentRight]; -#else - [paragraphStyle addTabStopAtPosition:tabOffset alignment:kCTRightTextAlignment]; -#endif - } - - // second tab is for the beginning of first line after bullet -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - [paragraphStyle addTabStopAtPosition:paragraphStyle.headIndent alignment:kCTTextAlignmentLeft]; -#else - [paragraphStyle addTabStopAtPosition:paragraphStyle.headIndent alignment:kCTLeftTextAlignment]; -#endif - - NSMutableDictionary *newAttributes = [NSMutableDictionary dictionary]; - - // make a font without italic or bold - fontDescriptor.boldTrait = NO; - fontDescriptor.italicTrait = NO; - - CTFontRef font = [fontDescriptor newMatchingFont]; - - if (font) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES && __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_5_1 - if (___useiOS6Attributes) - { - UIFont *uiFont = [UIFont fontWithCTFont:font]; - [newAttributes setObject:uiFont forKey:NSFontAttributeName]; - - CFRelease(font); - } - else -#endif - { - [newAttributes setObject:CFBridgingRelease(font) forKey:(id)kCTFontAttributeName]; - } - } - - CGColorRef textColor = (__bridge CGColorRef)[attributes objectForKey:(id)kCTForegroundColorAttributeName]; - - if (textColor) - { - [newAttributes setObject:(__bridge id)textColor forKey:(id)kCTForegroundColorAttributeName]; - } -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - else if (___useiOS6Attributes) - { - DTColor *uiColor = [attributes foregroundColor]; - - if (uiColor) - { - [newAttributes setObject:uiColor forKey:NSForegroundColorAttributeName]; - } - } -#endif - - // add paragraph style (this has the tabs) - if (paragraphStyle) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - NSParagraphStyle *style = [paragraphStyle NSParagraphStyle]; - [newAttributes setObject:style forKey:NSParagraphStyleAttributeName]; - } - else -#endif - { - CTParagraphStyleRef newParagraphStyle = [paragraphStyle createCTParagraphStyle]; - [newAttributes setObject:CFBridgingRelease(newParagraphStyle) forKey:(id)kCTParagraphStyleAttributeName]; - } - } - - // add textBlock if there's one (this has padding and background color) - NSArray *textBlocks = [attributes objectForKey:DTTextBlocksAttribute]; - if (textBlocks) - { - [newAttributes setObject:textBlocks forKey:DTTextBlocksAttribute]; - } - - // transfer all lists so that - NSArray *lists = [attributes objectForKey:DTTextListsAttribute]; - if (lists) - { - [newAttributes setObject:lists forKey:DTTextListsAttribute]; - } - - // add a marker so that we know that this is a field/prefix - [newAttributes setObject:DTListPrefixField forKey:DTFieldAttribute]; - - NSString *prefix = [effectiveList prefixWithCounter:listCounter]; - - if (!prefix) - { - return nil; - } - - DTImage *image = nil; - - if (effectiveList.imageName) - { - image = [DTImage imageNamed:effectiveList.imageName]; - - if (!image) - { - // image invalid - effectiveList.imageName = nil; - - prefix = [effectiveList prefixWithCounter:listCounter]; - } - } - - if (!prefix) - { - return nil; - } - - NSMutableAttributedString *tmpStr = [[NSMutableAttributedString alloc] initWithString:prefix attributes:newAttributes]; - - if (image) - { - // make an attachment for the image - DTImageTextAttachment *attachment = [[DTImageTextAttachment alloc] init]; - attachment.image = image; - attachment.displaySize = image.size; - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES && TARGET_OS_IPHONE - // need run delegate for sizing - CTRunDelegateRef embeddedObjectRunDelegate = createEmbeddedObjectRunDelegate(attachment); - [newAttributes setObject:CFBridgingRelease(embeddedObjectRunDelegate) forKey:(id)kCTRunDelegateAttributeName]; -#endif - - // add attachment - [newAttributes setObject:attachment forKey:NSAttachmentAttributeName]; - - if (effectiveList.position == DTCSSListStylePositionInside) - { - [tmpStr setAttributes:newAttributes range:NSMakeRange(2, 1)]; - } - else - { - [tmpStr setAttributes:newAttributes range:NSMakeRange(1, 1)]; - } - } - - // estimate width of the prefix - NSString *trimmedPrefix = [prefix stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; - NSAttributedString *tmpAttributedString = [[NSAttributedString alloc] initWithString:trimmedPrefix attributes:newAttributes]; - - CTLineRef tmpLine = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)(tmpAttributedString)); - double width = CTLineGetTypographicBounds(tmpLine, NULL, NULL, NULL); - CFRelease(tmpLine); - - // if the non-whitespace characters are too wide then we omit the prefix - if ((width+5.0)>_margins.left) - { - return nil; - } - - return tmpStr; -} - -- (NSAttributedString *)attributedString -{ - NSMutableAttributedString *tmpString = [[NSMutableAttributedString alloc] init]; - - // append child elements - NSAttributedString *childrenString = [super attributedString]; - - // append list prefix - NSAttributedString *listPrefix = [self _listPrefix]; - - if (listPrefix) - { - [tmpString appendAttributedString:listPrefix]; - - // add NL if there is immediately another list prefix following - NSString *field = [childrenString attribute:DTFieldAttribute atIndex:0 effectiveRange:NULL]; - - if ([field isEqualToString:DTListPrefixField]) - { - [tmpString appendEndOfParagraph]; - } - } - - if (childrenString) - { - [tmpString appendAttributedString:childrenString]; - } - - return tmpString; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTObjectTextAttachment.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTObjectTextAttachment.h deleted file mode 100644 index fdb584f..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTObjectTextAttachment.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// DTObjectTextAttachment.h -// DTCoreText -// -// Created by Oliver Drobnik on 22.04.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTTextAttachment.h" - -/** - A specialized subclass in the DTTextAttachment class cluster to represent an generic object - */ - -@interface DTObjectTextAttachment : DTTextAttachment - -/** - The DTHTMLElement child nodes of the receiver. This array is only used for object tags at the moment. - */ -@property (nonatomic, strong) NSArray *childNodes; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTObjectTextAttachment.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTObjectTextAttachment.m deleted file mode 100644 index 57fdd46..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTObjectTextAttachment.m +++ /dev/null @@ -1,142 +0,0 @@ -// -// DTObjectTextAttachment.m -// DTCoreText -// -// Created by Oliver Drobnik on 22.04.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTObjectTextAttachment.h" -#import "DTCoreTextConstants.h" -#import "DTHTMLElement.h" -#import "NSString+HTML.h" - -@implementation DTObjectTextAttachment - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [super initWithCoder:aDecoder]; - if (self) { - _childNodes = [aDecoder decodeObjectForKey:@"childNodes"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [super encodeWithCoder:aCoder]; - [aCoder encodeObject:_childNodes forKey:@"childNodes"]; -} - -- (id)initWithElement:(DTHTMLElement *)element options:(NSDictionary *)options -{ - self = [super initWithElement:element options:options]; - - if (self) - { - // get base URL - NSURL *baseURL = [options objectForKey:NSBaseURLDocumentOption]; - NSString *src = [element.attributes objectForKey:@"src"]; - - // content URL - _contentURL = [NSURL URLWithString:src relativeToURL:baseURL]; - } - - return self; -} - -#pragma mark - DTTextAttachmentHTMLEncoding - -- (NSString *)stringByEncodingAsHTML -{ - NSMutableString *retString = [NSMutableString string]; - - [retString appendString:@"0) - { - [styleString appendFormat:@"width:%.0fpx;", _originalSize.width]; - } - - if (_originalSize.height>0) - { - [styleString appendFormat:@"height:%.0fpx;", _originalSize.height]; - } - - // add local style for size, since sizes might vary quite a bit - if ([styleString length]) - { - [retString appendFormat:@" style=\"%@\"", styleString]; - } - - // attach the attributes dictionary - NSMutableDictionary *tmpAttributes = [_attributes mutableCopy]; - - // remove src,style, width and height we already have these - [tmpAttributes removeObjectForKey:@"src"]; - [tmpAttributes removeObjectForKey:@"style"]; - [tmpAttributes removeObjectForKey:@"width"]; - [tmpAttributes removeObjectForKey:@"height"]; - - for (__strong NSString *oneKey in [tmpAttributes allKeys]) - { - oneKey = [oneKey stringByAddingHTMLEntities]; - NSString *value = [[tmpAttributes objectForKey:oneKey] stringByAddingHTMLEntities]; - [retString appendFormat:@" %@=\"%@\"", oneKey, value]; - } - - if (_childNodes) - { - [retString appendString:@">"]; - - for (DTHTMLElement *oneChild in _childNodes) - { - [retString appendString:[oneChild debugDescription]]; - } - - [retString appendString:@""]; - } - else - { - [retString appendString:@" />"]; - } - - - return retString; -} - -#pragma mark - Properties - -@synthesize childNodes = _childNodes; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTStylesheetHTMLElement.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTStylesheetHTMLElement.h deleted file mode 100644 index b7d0469..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTStylesheetHTMLElement.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// DTHTMLElementStylesheet.h -// DTCoreText -// -// Created by Oliver Drobnik on 29.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTHTMLElement.h" - -@class DTCSSStylesheet; - -/** - This is a specialized subclass of representing a style block. - */ -@interface DTStylesheetHTMLElement : DTHTMLElement - -/** - Parses the text children and assembles the resulting stylesheet. - */ -- (DTCSSStylesheet *)stylesheet; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTStylesheetHTMLElement.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTStylesheetHTMLElement.m deleted file mode 100644 index 3263ebf..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTStylesheetHTMLElement.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// DTHTMLElementStylesheet.m -// DTCoreText -// -// Created by Oliver Drobnik on 29.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTStylesheetHTMLElement.h" -#import "DTCSSStylesheet.h" - -@implementation DTStylesheetHTMLElement - -- (NSAttributedString *)attributedString -{ - return nil; -} - -- (DTCSSStylesheet *)stylesheet -{ - NSString *text = [self text]; - - return [[DTCSSStylesheet alloc] initWithStyleBlock:text]; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextAttachment.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextAttachment.h deleted file mode 100644 index fb4520d..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextAttachment.h +++ /dev/null @@ -1,199 +0,0 @@ -// -// DTTextAttachment.h -// DTCoreText -// -// Created by Oliver on 14.01.11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE -#elif TARGET_OS_MAC -#import -#endif - -#import - -@class DTHTMLElement; - -/** - Text Attachment vertical alignment - */ -typedef NS_ENUM(NSUInteger, DTTextAttachmentVerticalAlignment) -{ - /** - Baseline alignment (default) - */ - DTTextAttachmentVerticalAlignmentBaseline = 0, - - /** - Align with top edge - */ - DTTextAttachmentVerticalAlignmentTop, - - /** - Align with center - */ - DTTextAttachmentVerticalAlignmentCenter, - - /** - Align with bottom edge - */ - DTTextAttachmentVerticalAlignmentBottom -}; - -/** - Methods to implement for attachments to support inline drawing. - */ -@protocol DTTextAttachmentDrawing - -/** - Draws the contents of the receiver into a graphics context - @param rect The rectangle to draw the receiver into - @param context The graphics context - */ -- (void)drawInRect:(CGRect)rect context:(CGContextRef)context; - -@end - - -/** - Methods to implement for attachments to support output to HTML. - */ -@protocol DTTextAttachmentHTMLPersistence - -/** - Creates a HTML representation of the receiver - @returns A HTML string with the receiver encoded as HTML - */ -- (NSString *)stringByEncodingAsHTML; - -@end - - -/** - An object to represent an attachment in an HTML/rich text view. - */ -@interface DTTextAttachment : NSTextAttachment -{ - CGSize _displaySize; // the display dimensions of the attachment - CGSize _originalSize; // the original dimensions of the attachment - CGSize _maxImageSize; // the maximum dimensions to size to - NSURL *_contentURL; - NSDictionary *_attributes; // attributes transferred from HTML element - DTTextAttachmentVerticalAlignment _verticalAlignment; // alignment in relation to the baseline -} - -/** - @name Creating Text Attachments - */ - -/** - Initialize and return a DTTextAttachment with the specified DTHTMLElement and options. Convenience initializer. - The element must have a valid tagName. The size of the returned text attachment is determined by the element, constrained by the option's key for DTMaxImageSize. Any valid image resource included in the element (denoted by the method attributeForKey: "src") is loaded and determines the text attachment size if it was not known before. If a size is too large the image is downsampled with sizeThatFitsKeepingAspectRatio() which preserves the aspect ratio. - @param element A DTHTMLElement that must have a valid tag name and should have a size. Any element attributes are copied to the text attachment's elements. - @param options An NSDictionary of options. Used to specify the max image size with the key DTMaxImageSize. - @returns Returns the appropriate subclass of the class cluster - */ -+ (DTTextAttachment *)textAttachmentWithElement:(DTHTMLElement *)element options:(NSDictionary *)options; - -/** - The designated initializer for members of the DTTextAttachment class cluster. If you need additional setup for custom subclasses then you should override this initializer. - @param element A DTHTMLElement that must have a valid tag name and should have a size. Any element attributes are copied to the text attachment's elements. - @param options An NSDictionary of options. Used to specify the max image size with the key DTMaxImageSize. - @returns Returns an initialized DTTextAttachment built using the element and options parameters. */ -- (id)initWithElement:(DTHTMLElement *)element options:(NSDictionary *)options; - -/** - @name Vertical Alignment - */ - -/** - Inspects the given font and records the font's ascent, descent and leading. These values are then used during layout to properly respond with ascentForLayout, descentForLayout for the receiver's verticalAlignment. - @param font The font to inspect - */ -- (void)adjustVerticalAlignmentForFont:(CTFontRef)font; - -/** - The ascent to use during layout so that the receiver can be display at its verticalAlignment. - */ -- (CGFloat)ascentForLayout; - -/** - The descent to use during layout so that the receiver can be display at its verticalAlignment. - */ -- (CGFloat)descentForLayout; - -/** - The vertical alignment of the receiver - */ -@property (nonatomic, assign) DTTextAttachmentVerticalAlignment verticalAlignment; - - -/** - @name Retrieving Information about Attachments - */ - -/** - The size of the receiver according to width/height HTML attribute or CSS style attribute - */ -@property (nonatomic, assign) CGSize originalSize; - -/** - The size to use for displaying/laying out the receiver - */ -@property (nonatomic, assign) CGSize displaySize; - -/** - Updates the display size optionally passing a maximum size that it should not exceed. - - This method in contrast to using the displaySize property will use the originalSize and max display size to calculate missing dimensions. - @param displaySize The new size to display the content with - @param maxDisplaySize the maximum size that the content should be scaled to fit - */ -- (void)setDisplaySize:(CGSize)displaySize withMaxDisplaySize:(CGSize)maxDisplaySize; - -/** - The URL representing the content - */ -@property (nonatomic, strong) NSURL *contentURL; - -/** - The hyperlink URL of the receiver. - */ -@property (nonatomic, strong) NSURL *hyperLinkURL; - -/** - The GUID of the hyperlink that this is a part of. All parts of a hyperlink have the same GUID so that they can highlight together. - */ -@property (nonatomic, strong) NSString *hyperLinkGUID; - -/** - The attributes dictionary of the attachment. - - If initialized from HTML, the values of this dictionary are transferred from the give HTML element. If you wish to add custom attribute values to be written to and read from HTML, be aware that the attribute name will be lowercased in compliance with W3C recommendations. Therefore, you may set a camel-case name and persist to HTML, but you will receive a lowercase name when the HTML is transformed into an attributed string. - */ -@property (nonatomic, strong) NSDictionary *attributes; - -/** - @name Customizing Attachments - */ - -/** - Registers your own class for use when encountering a specific tag Name. If you register a class for a previously registered class (or one of the predefined ones (img, iframe, object, video) then this replaces this with the newer registration. - - These registrations are permanent during the run time of your app. Custom attachment classes must implement the initWithElement:options: initializer and can implement the DTTextAttachmentDrawing and/or DTTextAttachmentHTMLPersistence protocols. - @param theClass The class to instantiate in textAttachmentWithElement:options: when encountering a tag with this name - @param tagName The tag name to use this class for - */ -+ (void)registerClass:(Class)theClass forTagName:(NSString *)tagName; - -/** - The class to use for a tag name - @param tagName The tag name - @returns The class to use for attachments with with tag name, or `nil` if this should not be an attachment - */ -+ (Class)registeredClassForTagName:(NSString *)tagName; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextAttachment.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextAttachment.m deleted file mode 100644 index 6cdffb2..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextAttachment.m +++ /dev/null @@ -1,263 +0,0 @@ -// -// DTTextAttachment.m -// DTCoreText -// -// Created by Oliver on 14.01.11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTTextAttachment.h" - -#import "DTHTMLElement.h" -#import "DTDictationPlaceholderTextAttachment.h" -#import "DTIframeTextAttachment.h" -#import "DTImageTextAttachment.h" -#import "DTObjectTextAttachment.h" -#import "DTVideoTextAttachment.h" -#import "NSCoder+DTCompatibility.h" - -#import -#import - - -static NSMutableDictionary *_classForTagNameLookup = nil; - -@interface DTTextAttachment () - -@end - -@implementation DTTextAttachment -{ - NSURL *_hyperLinkURL; - NSString *_hyperLinkGUID; - - CGFloat _fontLeading; - CGFloat _fontAscent; - CGFloat _fontDescent; -} - -+ (void)initialize -{ - // this gets called from each subclass - // prevent calling from children - if (self != [DTTextAttachment class]) - { - return; - } - - _classForTagNameLookup = [[NSMutableDictionary alloc] init]; - - // register standard tags - [DTTextAttachment registerClass:[DTImageTextAttachment class] forTagName:@"img"]; - [DTTextAttachment registerClass:[DTVideoTextAttachment class] forTagName:@"video"]; - [DTTextAttachment registerClass:[DTIframeTextAttachment class] forTagName:@"iframe"]; - [DTTextAttachment registerClass:[DTObjectTextAttachment class] forTagName:@"object"]; -} - -+ (DTTextAttachment *)textAttachmentWithElement:(DTHTMLElement *)element options:(NSDictionary *)options -{ - Class class = [DTTextAttachment registeredClassForTagName:element.name]; - - if (!class) - { - return nil; - } - - DTTextAttachment *attachment = [class alloc]; - - return [attachment initWithElement:element options:options]; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [super init]; - if (self) { - _displaySize = [aDecoder decodeCGSizeForKey:@"displaySize"]; - _originalSize = [aDecoder decodeCGSizeForKey:@"originalSize"]; - _maxImageSize = [aDecoder decodeCGSizeForKey:@"maxImageSize"]; - _contentURL = [aDecoder decodeObjectForKey:@"contentURL"]; - _attributes = [aDecoder decodeObjectForKey:@"attributes"]; - _verticalAlignment = [aDecoder decodeIntegerForKey:@"verticalAlignment"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeCGSize:_displaySize forKey:@"displaySize"]; - [aCoder encodeCGSize:_originalSize forKey:@"originalSize"]; - [aCoder encodeCGSize:_maxImageSize forKey:@"maxImageSize"]; - [aCoder encodeObject:_contentURL forKey:@"contentURL"]; - [aCoder encodeObject:_attributes forKey:@"attributes"]; - [aCoder encodeInteger:_verticalAlignment forKey:@"verticalAlignment"]; -} - -- (id)initWithElement:(DTHTMLElement *)element options:(NSDictionary *)options -{ - self = [super init]; - - if (self) - { - // width, height from tag - _originalSize = element.size; // initially not known - - // determine if there is a display size restriction - _maxImageSize = CGSizeZero; - - NSValue *maxImageSizeValue =[options objectForKey:DTMaxImageSize]; - if (maxImageSizeValue) - { -#if TARGET_OS_IPHONE - _maxImageSize = [maxImageSizeValue CGSizeValue]; -#else - _maxImageSize = [maxImageSizeValue sizeValue]; -#endif - } - - // set the display size from the original size, restricted to the max size - [self setDisplaySize:_originalSize withMaxDisplaySize:_maxImageSize]; - - _attributes = element.attributes; - } - - return self; -} - -- (void)adjustVerticalAlignmentForFont:(CTFontRef)font -{ - _fontLeading = CTFontGetLeading(font); - _fontAscent = CTFontGetAscent(font); - _fontDescent = CTFontGetDescent(font); -} - -- (CGFloat)ascentForLayout -{ - switch (_verticalAlignment) - { - case DTTextAttachmentVerticalAlignmentBaseline: - { - return _displaySize.height; - } - case DTTextAttachmentVerticalAlignmentTop: - { - return _fontAscent; - } - case DTTextAttachmentVerticalAlignmentCenter: - { - CGFloat halfHeight = (_fontAscent + _fontDescent) / 2.0f; - - return halfHeight - _fontDescent + _displaySize.height/2.0f; - } - case DTTextAttachmentVerticalAlignmentBottom: - { - return _displaySize.height - _fontDescent; - } - } -} - -- (CGFloat)descentForLayout -{ - switch (_verticalAlignment) - { - case DTTextAttachmentVerticalAlignmentBaseline: - { - return 0; - } - case DTTextAttachmentVerticalAlignmentTop: - { - return _displaySize.height - _fontAscent; - } - case DTTextAttachmentVerticalAlignmentCenter: - { - CGFloat halfHeight = (_fontAscent + _fontDescent) / 2.0f; - - return halfHeight - _fontAscent + _displaySize.height/2.0f; - } - case DTTextAttachmentVerticalAlignmentBottom: - { - return _fontDescent; - } - } -} - -#pragma mark - Subclass Customization - -+ (void)registerClass:(Class)class forTagName:(NSString *)tagName -{ - Class previousClass = [DTTextAttachment registeredClassForTagName:tagName]; - - if (previousClass) - { - DTLogDebug(@"Replacing previously registered class '%@' for tag name '%@' with '%@'", NSStringFromClass(previousClass), tagName, NSStringFromClass(class)); - } - - [_classForTagNameLookup setObject:class forKey:tagName]; -} - -+ (Class)registeredClassForTagName:(NSString *)tagName -{ - return [_classForTagNameLookup objectForKey:tagName]; -} - -#pragma mark Properties -/** Mutator for originalSize. Sets displaySize to the same value as originalSize. - @param originalSize The CGSize to store in originalSize. */ -- (void)setOriginalSize:(CGSize)originalSize -{ - if (!CGSizeEqualToSize(originalSize, _originalSize)) - { - _originalSize = originalSize; - - if (_displaySize.width==0 || _displaySize.height==0) - { - [self setDisplaySize:_originalSize withMaxDisplaySize:_maxImageSize]; - } - } -} - -- (void)setDisplaySize:(CGSize)displaySize withMaxDisplaySize:(CGSize)maxDisplaySize -{ - if (_originalSize.width!=0 && _originalSize.height!=0) - { - // width and/or height missing - if (displaySize.width==0 && displaySize.height==0) - { - displaySize = _originalSize; - } - else if (displaySize.width==0 && displaySize.height!=0) - { - // width missing, calculate it - CGFloat factor = _originalSize.height / displaySize.height; - displaySize.width = round(_originalSize.width / factor); - } - else if (displaySize.width!=0 && displaySize.height==0) - { - // height missing, calculate it - CGFloat factor = _originalSize.width / displaySize.width; - displaySize.height = round(_originalSize.height / factor); - } - } - - if (maxDisplaySize.width>0 && maxDisplaySize.height>0) - { - if (maxDisplaySize.width < displaySize.width || maxDisplaySize.height < displaySize.height) - { - displaySize = DTCGSizeThatFitsKeepingAspectRatio(displaySize, maxDisplaySize); - } - } - - _displaySize = displaySize; -} - -- (void)setDisplaySize:(CGSize)displaySize -{ - _displaySize = displaySize; -} - -@synthesize originalSize = _originalSize; -@synthesize displaySize = _displaySize; -@synthesize contentURL = _contentURL; -@synthesize hyperLinkURL = _hyperLinkURL; -@synthesize attributes = _attributes; -@synthesize verticalAlignment = _verticalAlignment; -@synthesize hyperLinkGUID = hyperLinkGUID; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextAttachmentHTMLElement.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextAttachmentHTMLElement.h deleted file mode 100644 index 264387a..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextAttachmentHTMLElement.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// DTHTMLElementAttachment.h -// DTCoreText -// -// Created by Oliver Drobnik on 26.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTHTMLElement.h" - -/** - Specialized subclass of for dealing with instances, e.g. images. - */ - -@interface DTTextAttachmentHTMLElement : DTHTMLElement - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextAttachmentHTMLElement.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextAttachmentHTMLElement.m deleted file mode 100644 index 82b33a1..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextAttachmentHTMLElement.m +++ /dev/null @@ -1,123 +0,0 @@ -// -// DTHTMLElementAttachment.m -// DTCoreText -// -// Created by Oliver Drobnik on 26.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTTextAttachmentHTMLElement.h" - -#import "DTHTMLElement.h" -#import "DTTextAttachment.h" -#import "DTCoreTextParagraphStyle.h" -#import "NSMutableAttributedString+HTML.h" - -@implementation DTTextAttachmentHTMLElement -{ - CGSize _maxDisplaySize; -} - -- (id)initWithName:(NSString *)name attributes:(NSDictionary *)attributes options:(NSDictionary *)options -{ - self = [super initWithName:name attributes:attributes]; - - if (self) - { - // make appropriate attachment - DTTextAttachment *attachment = [DTTextAttachment textAttachmentWithElement:self options:options]; - - // add it to tag - _textAttachment = attachment; - - // to avoid much too much space before the image - if (nil == _paragraphStyle) - _paragraphStyle = [[DTCoreTextParagraphStyle alloc] init]; - - _paragraphStyle.lineHeightMultiple = 1; - - // specifying line height interferes with correct positioning - _paragraphStyle.minimumLineHeight = 0; - _paragraphStyle.maximumLineHeight = 0; - - // remember the maximum display size - _maxDisplaySize = CGSizeZero; - - NSValue *maxImageSizeValue =[options objectForKey:DTMaxImageSize]; - if (maxImageSizeValue) - { -#if TARGET_OS_IPHONE - _maxDisplaySize = [maxImageSizeValue CGSizeValue]; -#else - _maxDisplaySize = [maxImageSizeValue sizeValue]; -#endif - } - } - - return self; -} - -- (NSAttributedString *)attributedString -{ - @synchronized(self) - { - NSDictionary *attributes = [self attributesForAttributedStringRepresentation]; - - // ignore text, use unicode object placeholder - NSMutableAttributedString *tmpString = [[NSMutableAttributedString alloc] initWithString:UNICODE_OBJECT_PLACEHOLDER attributes:attributes]; - - // block-level elements get space trimmed and a newline - if (self.displayStyle != DTHTMLElementDisplayStyleInline) - { - [tmpString appendString:@"\n"]; - } - - return tmpString; - } -} - -// workaround, because we don't support float yet. float causes the image to be its own block -- (DTHTMLElementDisplayStyle)displayStyle -{ - if ([super floatStyle]==DTHTMLElementFloatStyleNone) - { - return [super displayStyle]; - } - - return DTHTMLElementDisplayStyleBlock; -} - -- (void)applyStyleDictionary:(NSDictionary *)styles -{ - // element size is determined in super (tag attribute and style) - [super applyStyleDictionary:styles]; - - // at this point we have the size from width/height attribute or style in _size - - // set original size if it was previously unknown - if (CGSizeEqualToSize(CGSizeZero, _textAttachment.originalSize)) - { - _textAttachment.originalSize = _size; - } - - NSString *widthString = [styles objectForKey:@"width"]; - NSString *heightString = [styles objectForKey:@"height"]; - - if (widthString.length > 1 && [widthString hasSuffix:@"%"]) - { - CGFloat scale = (CGFloat)([[widthString substringToIndex:widthString.length - 1] floatValue] / 100.0); - - _size.width = _maxDisplaySize.width * scale; - } - - if (heightString.length > 1 && [heightString hasSuffix:@"%"]) - { - CGFloat scale = (CGFloat)([[heightString substringToIndex:heightString.length - 1] floatValue] / 100.0); - - _size.height = _maxDisplaySize.height * scale; - } - // update the display size - [_textAttachment setDisplaySize:_size withMaxDisplaySize:_maxDisplaySize]; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextBlock.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextBlock.h deleted file mode 100644 index f22808e..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextBlock.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// DTTextBlock.h -// DTCoreText -// -// Created by Oliver Drobnik on 04.03.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -/** - Class that represents a block of text with attributes like padding or a background color. - */ -@interface DTTextBlock : NSObject - -/** - The space to be applied between the layouted text and the edges of the receiver - */ -@property (nonatomic, assign) DTEdgeInsets padding; - - -/** - The background color to paint behind the text in the receiver - */ -@property (nonatomic, strong) DTColor *backgroundColor; - - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextBlock.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextBlock.m deleted file mode 100644 index 81088e8..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextBlock.m +++ /dev/null @@ -1,85 +0,0 @@ -// -// DTTextBlock.m -// DTCoreText -// -// Created by Oliver Drobnik on 04.03.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTTextBlock.h" -#import "NSCoder+DTCompatibility.h" - -@implementation DTTextBlock -{ - DTEdgeInsets _padding; - DTColor *_backgroundColor; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [super init]; - if (self) { - _padding = [aDecoder decodeDTEdgeInsetsForKey:@"padding"]; - _backgroundColor = [aDecoder decodeObjectForKey:@"backgroundColor"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeDTEdgeInsets:_padding forKey:@"padding"]; - [aCoder encodeObject:_backgroundColor forKey:@"backgroundColor"]; -} - -- (NSUInteger)hash -{ - NSUInteger calcHash = 7; - - calcHash = calcHash*31 + [_backgroundColor hash]; - calcHash = calcHash*31 + (NSUInteger)_padding.left; - calcHash = calcHash*31 + (NSUInteger)_padding.top; - calcHash = calcHash*31 + (NSUInteger)_padding.right; - calcHash = calcHash*31 + (NSUInteger)_padding.bottom; - - return calcHash; -} - -- (BOOL)isEqual:(id)object -{ - if (!object) - { - return NO; - } - - if (object == self) - { - return YES; - } - - if (![object isKindOfClass:[DTTextBlock class]]) - { - return NO; - } - - DTTextBlock *other = object; - - if (_padding.left != other->_padding.left || - _padding.top != other->_padding.top || - _padding.right != other->_padding.right || - _padding.bottom != other->_padding.bottom) - { - return NO; - } - - if (other->_backgroundColor == _backgroundColor) - { - return YES; - } - - return [other->_backgroundColor isEqual:_backgroundColor]; -} - -#pragma mark Properties - -@synthesize padding = _padding; -@synthesize backgroundColor = _backgroundColor; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextHTMLElement.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextHTMLElement.h deleted file mode 100644 index ddf2a59..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextHTMLElement.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// DTHTMLElementText.h -// DTCoreText -// -// Created by Oliver Drobnik on 26.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTHTMLElement.h" - -/** - Specialized subclass of that deals with text. It represents a text node. The text inside a DTHTMLElement can consist of any number of such text nodes. - */ - -@interface DTTextHTMLElement : DTHTMLElement - -/** - The text content of the element. - */ -@property (nonatomic, strong) NSString *text; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextHTMLElement.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextHTMLElement.m deleted file mode 100644 index 15b8a8f..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTTextHTMLElement.m +++ /dev/null @@ -1,121 +0,0 @@ -// -// DTHTMLElementText.m -// DTCoreText -// -// Created by Oliver Drobnik on 26.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#import "DTTextHTMLElement.h" -#import "NSString+HTML.h" -#import "DTCoreTextFontDescriptor.h" -#import "NSAttributedString+SmallCaps.h" - -#if TARGET_OS_IPHONE -#import "UIFont+DTCoreText.h" -#endif - -@implementation DTTextHTMLElement -{ - NSString *_text; -} - -- (void)_appendHTMLToString:(NSMutableString *)string indentLevel:(NSUInteger)indentLevel -{ - // indent to the level - for (NSUInteger i=0; i - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTVideoTextAttachment.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTVideoTextAttachment.m deleted file mode 100644 index 11ee7a0..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTVideoTextAttachment.m +++ /dev/null @@ -1,110 +0,0 @@ -// -// DTTextAttachmentVideo.m -// DTCoreText -// -// Created by Oliver Drobnik on 22.04.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "DTVideoTextAttachment.h" -#import "DTCoreTextConstants.h" -#import "DTHTMLElement.h" -#import "NSString+HTML.h" - -@implementation DTVideoTextAttachment - -- (id)initWithElement:(DTHTMLElement *)element options:(NSDictionary *)options -{ - self = [super initWithElement:element options:options]; - - if (self) - { - // get base URL - NSURL *baseURL = [options objectForKey:NSBaseURLDocumentOption]; - NSString *src = [element.attributes objectForKey:@"src"]; - - // content URL - _contentURL = [NSURL URLWithString:src relativeToURL:baseURL]; - } - - return self; -} - -#pragma mark - DTTextAttachmentHTMLEncoding - -- (NSString *)stringByEncodingAsHTML -{ - NSMutableString *retString = [NSMutableString string]; - - [retString appendString:@"0) - { - [styleString appendFormat:@"width:%.0fpx;", _originalSize.width]; - } - - if (_originalSize.height>0) - { - [styleString appendFormat:@"height:%.0fpx;", _originalSize.height]; - } - - // add local style for size, since sizes might vary quite a bit - if ([styleString length]) - { - [retString appendFormat:@" style=\"%@\"", styleString]; - } - - // attach the attributes dictionary - NSMutableDictionary *tmpAttributes = [_attributes mutableCopy]; - - // remove src,style, width and height we already have these - [tmpAttributes removeObjectForKey:@"src"]; - [tmpAttributes removeObjectForKey:@"style"]; - [tmpAttributes removeObjectForKey:@"width"]; - [tmpAttributes removeObjectForKey:@"height"]; - - for (__strong NSString *oneKey in [tmpAttributes allKeys]) - { - oneKey = [oneKey stringByAddingHTMLEntities]; - NSString *value = [[tmpAttributes objectForKey:oneKey] stringByAddingHTMLEntities]; - [retString appendFormat:@" %@=\"%@\"", oneKey, value]; - } - - [retString appendString:@" />"]; - - return retString; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTWeakSupport.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/DTWeakSupport.h deleted file mode 100644 index da662b1..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/DTWeakSupport.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// DTWeakSupport.h -// DTFoundation -// -// Created by Oliver Drobnik on 6/3/13. -// Copyright (c) 2013 Cocoanetics. All rights reserved. -// - -/** - Useful defines for building code the compiles with zeroing weak references if the deployment target allows it. This is possible from minimum supported iOS 5.0 and OS X 10.7 and above. Note that on OS X 10.7 some AppKit classes do not support having a weak ref, e.g. NSWindowController or NSViewController. -*/ - -#import - -#if __has_feature(objc_arc_weak) - - // zeroing weak refs are supported for ivars and properties - #define DT_WEAK_VARIABLE __weak - #define DT_WEAK_PROPERTY weak - -#elif __has_feature(objc_arc) - - /// zeroing weak refs not supported, fall back to unsafe unretained and assigning - #define DT_WEAK_VARIABLE __unsafe_unretained - #define DT_WEAK_PROPERTY assign - -#else - - // define something, as this header might be included in a non-ARC project for using compiled code from an ARC static lib - #define DT_WEAK_VARIABLE - #define DT_WEAK_PROPERTY assign - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+DTCoreText.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+DTCoreText.h deleted file mode 100644 index 4a4a833..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+DTCoreText.h +++ /dev/null @@ -1,141 +0,0 @@ -// -// NSAttributedString+DTCoreText.h -// DTCoreText -// -// Created by Oliver Drobnik on 2/1/12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -@class DTCSSListStyle; -@class DTTextBlock; - -/** - Convenience Methods that mimics similar methods available on Mac - */ -@interface NSAttributedString (DTCoreText) - -/** - @name Working with Text Attachments - */ - -/** - Retrieves the DTTextAttachment objects that match the given predicate. - - With this method you can for example find all images that have a certain URL. - - @param predicate The predicate to apply for filtering or `nil` to not filter by attachment - @param theClass The class that attachments need to have, or `nil` for all attachments regardless of class - @returns The filtered array of attachments - */ -- (NSArray *)textAttachmentsWithPredicate:(NSPredicate *)predicate class:(Class)theClass; - -/** - @name Calculating Ranges - */ - - -/** - Returns the index of the item at the given location within the list. - - @param list The text list. - @param location The location of the item. - @returns Returns the index within the list. -*/ -- (NSInteger)itemNumberInTextList:(DTCSSListStyle *)list atIndex:(NSUInteger)location; - - -/** - Returns the range of the given text list that contains the given location. - - @param list The text list. - @param location The location in the text. - @returns The range of the given text list containing the location. - */ -- (NSRange)rangeOfTextList:(DTCSSListStyle *)list atIndex:(NSUInteger)location; - -/** - Returns the range of the given text block that contains the given location. - - @param textBlock The text block. - @param location The location in the text. - @returns The range of the given text block containing the location. - */ -- (NSRange)rangeOfTextBlock:(DTTextBlock *)textBlock atIndex:(NSUInteger)location; - -/** - Returns the range of the given href anchor. - - @param anchorName The name of the anchor. - @returns The range of the given anchor. - */ -- (NSRange)rangeOfAnchorNamed:(NSString *)anchorName; - -/** - Returns the range of the hyperlink at the given index. - - @param location The location to query - @param URL The URL that is found at this location or `NULL` if this is not needed - @returns The range of the given hyperlink. - */ -- (NSRange)rangeOfLinkAtIndex:(NSUInteger)location URL:(NSURL * __autoreleasing*)URL; - -/** - Returns the range of a field at the given index. - - @param location The location of the field - @returns The range of the field. If there is no field at this location it returns {NSNotFound, 0}. - */ -- (NSRange)rangeOfFieldAtIndex:(NSUInteger)location; - -#ifndef COVERAGE -// exclude method from coverage testing, those are just convenience methods - -/** - @name Converting to Other Representations - */ - -/** - Encodes the receiver into a generic HTML representation. - - @returns An HTML string. - */ -- (NSString *)htmlString; - - -/** - Encodes the receiver into a generic HTML fragment representation. Styles are inlined and no html or head tags are included. - - @returns An HTML string. - */ -- (NSString *)htmlFragment; - -/** - Converts the receiver into plain text. - - This is different from the `string` method of `NSAttributedString` by also erasing placeholders for text attachments. - - @returns The receiver converted to plain text. - */ -- (NSString *)plainTextString; - -#endif - -/** - @name Creating Special Attributed Strings - */ - - -/** - Create a prefix for a paragraph in a list - - @param listCounter The value for the list item. - @param listStyle The list style - @param listIndent The amount in px to indent the list - @param attributes The attribute dictionary for the text to be prefixed - @returns An attributed string with the list prefix - */ -+ (NSAttributedString *)prefixForListItemWithCounter:(NSUInteger)listCounter listStyle:(DTCSSListStyle *)listStyle listIndent:(CGFloat)listIndent attributes:(NSDictionary *)attributes; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+DTCoreText.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+DTCoreText.m deleted file mode 100644 index 5ae559e..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+DTCoreText.m +++ /dev/null @@ -1,532 +0,0 @@ -// -// NSAttributedString+DTCoreText.m -// DTCoreText -// -// Created by Oliver Drobnik on 2/1/12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "NSAttributedString+DTCoreText.h" -#import "DTHTMLWriter.h" -#import "DTCoreTextConstants.h" -#import "DTCoreTextFontDescriptor.h" -#import "DTCoreTextParagraphStyle.h" -#import "DTCSSListStyle.h" -#import "DTImageTextAttachment.h" -#import "NSString+Paragraphs.h" -#import "NSDictionary+DTCoreText.h" -#import "NSAttributedStringRunDelegates.h" - -#import - -#if TARGET_OS_IPHONE -#import "UIFont+DTCoreText.h" -#endif - -@implementation NSAttributedString (DTCoreText) - -#pragma mark Text Attachments -- (NSArray *)textAttachmentsWithPredicate:(NSPredicate *)predicate class:(Class)class -{ - if (![self length]) - { - return nil; - } - - NSMutableArray *foundAttachments = [NSMutableArray array]; - - NSRange entireRange = NSMakeRange(0, [self length]); - [self enumerateAttribute:NSAttachmentAttributeName inRange:entireRange options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:^(DTTextAttachment *attachment, NSRange range, BOOL *stop) { - - if (attachment == nil) - { - // no attachment value - return; - } - - if (predicate && ![predicate evaluateWithObject:attachment]) - { - // doesn't fit predicate, next - return; - } - - if (class && ![attachment isKindOfClass:class]) - { - // doesn't fit class, next - return; - } - - [foundAttachments addObject:attachment]; - }]; - - if ([foundAttachments count]) - { - return foundAttachments; - } - - return nil; -} - - -#pragma mark Calculating Ranges - -- (NSInteger)itemNumberInTextList:(DTCSSListStyle *)list atIndex:(NSUInteger)location -{ - NSRange effectiveRange; - NSArray *textListsAtIndex = [self attribute:DTTextListsAttribute atIndex:location effectiveRange:&effectiveRange]; - - if (!textListsAtIndex) - { - return 0; - } - - // get outermost list - DTCSSListStyle *outermostList = [textListsAtIndex objectAtIndex:0]; - - // get the range of all lists - NSRange totalRange = [self rangeOfTextList:outermostList atIndex:location]; - - // get naked NSString - NSString *string = [[self string] substringWithRange:totalRange]; - - // entire string - NSRange range = NSMakeRange(0, [string length]); - - NSMutableDictionary *countersPerList = [NSMutableDictionary dictionary]; - - // enumerating through the paragraphs in the plain text string - [string enumerateSubstringsInRange:range options:NSStringEnumerationByParagraphs usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) - { - NSRange paragraphListRange; - NSArray *textLists = [self attribute:DTTextListsAttribute atIndex:substringRange.location + totalRange.location effectiveRange:¶graphListRange]; - - DTCSSListStyle *currentEffectiveList = [textLists lastObject]; - - NSNumber *key = [NSNumber numberWithInteger:(NSInteger)currentEffectiveList]; // list address is identifier - NSNumber *currentCounterNum = [countersPerList objectForKey:key]; - - NSInteger currentCounter=0; - - if (!currentCounterNum) - { - currentCounter = currentEffectiveList.startingItemNumber; - } - else - { - currentCounter = [currentCounterNum integerValue]+1; - } - - currentCounterNum = [NSNumber numberWithInteger:currentCounter]; - [countersPerList setObject:currentCounterNum forKey:key]; - - // calculate the actual range - NSRange actualRange = enclosingRange; // includes a potential \n - actualRange.location += totalRange.location; - - if (NSLocationInRange(location, actualRange)) - { - *stop = YES; - } - } - ]; - - NSNumber *key = [NSNumber numberWithInteger:(NSInteger)list]; // list address is identifier - NSNumber *currentCounterNum = [countersPerList objectForKey:key]; - - return [currentCounterNum integerValue]; -} - -- (NSRange)_rangeOfObject:(id)object inArrayBehindAttribute:(NSString *)attribute atIndex:(NSUInteger)location -{ - @synchronized(self) - { - NSUInteger stringLength = [self length]; - NSUInteger searchIndex = location; - - NSArray *arrayAtIndex; - - NSRange totalRange = NSMakeRange(NSNotFound, 0); - - BOOL foundList = NO; - - do - { - NSRange effectiveRange; - arrayAtIndex = [self attribute:attribute atIndex:searchIndex effectiveRange:&effectiveRange]; - - if (!arrayAtIndex || [arrayAtIndex indexOfObjectIdenticalTo:object] == NSNotFound) - { - break; - } - - searchIndex = effectiveRange.location; - foundList = YES; - - // enhance found range - if (totalRange.location == NSNotFound) - { - totalRange = effectiveRange; - } - else - { - totalRange = NSUnionRange(totalRange, effectiveRange); - } - - if (searchIndex == 0) - { - // reached beginning of string - break; - } - - searchIndex--; - } - while (foundList); - - // if we didn't find the list at all, return - if (!foundList) - { - return NSMakeRange(NSNotFound, 0); - } - - // now search forward - - searchIndex = NSMaxRange(totalRange); - - while (searchIndex < stringLength) - { - NSRange effectiveRange; - arrayAtIndex = [self attribute:attribute atIndex:searchIndex effectiveRange:&effectiveRange]; - - if (!arrayAtIndex || [arrayAtIndex indexOfObjectIdenticalTo:object] == NSNotFound) - { - break; - } - - searchIndex = NSMaxRange(effectiveRange); - - // enhance found range - totalRange = NSUnionRange(totalRange, effectiveRange); - } - - return totalRange; - } -} - -- (NSRange)rangeOfTextList:(DTCSSListStyle *)list atIndex:(NSUInteger)location -{ - NSParameterAssert(list); - - NSRange listRange = [self _rangeOfObject:list inArrayBehindAttribute:DTTextListsAttribute atIndex:location]; - - if (listRange.location == NSNotFound) - { - // list was not found - return listRange; - } - - // extend list range to full paragraphs to be safe - listRange = [self.string rangeOfParagraphsContainingRange:listRange parBegIndex:NULL parEndIndex:NULL]; - - return listRange; -} - -- (NSRange)rangeOfTextBlock:(DTTextBlock *)textBlock atIndex:(NSUInteger)location -{ - NSParameterAssert(textBlock); - - return [self _rangeOfObject:textBlock inArrayBehindAttribute:DTTextBlocksAttribute atIndex:location]; -} - -- (NSRange)rangeOfAnchorNamed:(NSString *)anchorName -{ - __block NSRange foundRange = NSMakeRange(NSNotFound, 0); - - [self enumerateAttribute:DTAnchorAttribute inRange:NSMakeRange(0, [self length]) options:0 usingBlock:^(NSString *value, NSRange range, BOOL *stop) { - if ([value isEqualToString:anchorName]) - { - *stop = YES; - foundRange = range; - } - }]; - - return foundRange; -} - -- (NSRange)rangeOfLinkAtIndex:(NSUInteger)location URL:(NSURL * __autoreleasing*)URL -{ - NSRange rangeSoFar; - - NSURL *foundURL = [self attribute:DTLinkAttribute atIndex:location effectiveRange:&rangeSoFar]; - - if (!foundURL) - { - return NSMakeRange(NSNotFound, 0); - } - - // search towards beginning - while (rangeSoFar.location>0) - { - NSRange extendedRange; - NSURL *extendedURL = [self attribute:DTLinkAttribute atIndex:rangeSoFar.location-1 effectiveRange:&extendedRange]; - - // abort search if key not found or value not identical - if (!extendedURL || ![extendedURL isEqualToURL:foundURL]) - { - break; - } - - rangeSoFar = NSUnionRange(rangeSoFar, extendedRange); - } - - NSUInteger length = [self length]; - - // search towards end - while (NSMaxRange(rangeSoFar) __IPHONE_5_1 - if (___useiOS6Attributes) - { - UIFont *uiFont = [UIFont fontWithCTFont:font]; - [newAttributes setObject:uiFont forKey:NSFontAttributeName]; - - CFRelease(font); - } - else -#endif - { - [newAttributes setObject:CFBridgingRelease(font) forKey:(id)kCTFontAttributeName]; - } - } - } - - CGColorRef textColor = (__bridge CGColorRef)[attributes objectForKey:(id)kCTForegroundColorAttributeName]; - - if (textColor) - { - [newAttributes setObject:(__bridge id)textColor forKey:(id)kCTForegroundColorAttributeName]; - } -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - else if (___useiOS6Attributes) - { - DTColor *uiColor = [attributes foregroundColor]; - - if (uiColor) - { - [newAttributes setObject:uiColor forKey:NSForegroundColorAttributeName]; - } - } -#endif - - // add paragraph style (this has the tabs) - if (paragraphStyle) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - NSParagraphStyle *style = [paragraphStyle NSParagraphStyle]; - [newAttributes setObject:style forKey:NSParagraphStyleAttributeName]; - } - else -#endif - { - CTParagraphStyleRef newParagraphStyle = [paragraphStyle createCTParagraphStyle]; - [newAttributes setObject:CFBridgingRelease(newParagraphStyle) forKey:(id)kCTParagraphStyleAttributeName]; - } - } - - // add textBlock if there's one (this has padding and background color) - NSArray *textBlocks = [attributes objectForKey:DTTextBlocksAttribute]; - if (textBlocks) - { - [newAttributes setObject:textBlocks forKey:DTTextBlocksAttribute]; - } - - // transfer all lists so that - NSArray *lists = [attributes objectForKey:DTTextListsAttribute]; - if (lists) - { - [newAttributes setObject:lists forKey:DTTextListsAttribute]; - } - - // add a marker so that we know that this is a field/prefix - [newAttributes setObject:DTListPrefixField forKey:DTFieldAttribute]; - - NSString *prefix = [listStyle prefixWithCounter:listCounter]; - - if (prefix) - { - DTImage *image = nil; - - if (listStyle.imageName) - { - image = [DTImage imageNamed:listStyle.imageName]; - - if (!image) - { - // image invalid - listStyle.imageName = nil; - - prefix = [listStyle prefixWithCounter:listCounter]; - } - } - - NSMutableAttributedString *tmpStr = [[NSMutableAttributedString alloc] initWithString:prefix attributes:newAttributes]; - - if (image) - { - // make an attachment for the image - DTImageTextAttachment *attachment = [[DTImageTextAttachment alloc] init]; - attachment.image = image; - attachment.displaySize = image.size; - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES && TARGET_OS_IPHONE - // need run delegate for sizing - CTRunDelegateRef embeddedObjectRunDelegate = createEmbeddedObjectRunDelegate(attachment); - [newAttributes setObject:CFBridgingRelease(embeddedObjectRunDelegate) forKey:(id)kCTRunDelegateAttributeName]; -#endif - - // add attachment - [newAttributes setObject:attachment forKey:NSAttachmentAttributeName]; - - if (listStyle.position == DTCSSListStylePositionInside) - { - [tmpStr setAttributes:newAttributes range:NSMakeRange(2, 1)]; - } - else - { - [tmpStr setAttributes:newAttributes range:NSMakeRange(1, 1)]; - } - } - - return tmpStr; - } - - return nil; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+DTDebug.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+DTDebug.h deleted file mode 100644 index fc75f86..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+DTDebug.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// NSAttributedString+DTDebug.h -// DTCoreText -// -// Created by Oliver Drobnik on 29.04.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import - -/** - The *DTDebug* category contains methods for debugging and dumping attributed strings - */ -@interface NSAttributedString (DTDebug) - -- (void)dumpRangesOfAttribute:(id)attribute; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+DTDebug.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+DTDebug.m deleted file mode 100644 index 650486a..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+DTDebug.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// NSAttributedString+DTDebug.m -// DTCoreText -// -// Created by Oliver Drobnik on 29.04.13. -// Copyright (c) 2013 Drobnik.com. All rights reserved. -// - -#import "NSAttributedString+DTDebug.h" - - -@implementation NSAttributedString (DTDebug) - -- (void)dumpRangesOfAttribute:(id)attribute -{ - NSMutableString *tmpString = [NSMutableString string]; - - NSRange entireRange = NSMakeRange(0, [self length]); - [self enumerateAttribute:attribute inRange:entireRange options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { - NSString *rangeString = [[self string] substringWithRange:range]; - NSString *valueString; - - if ([value isKindOfClass:[NSArray class]]) - { - valueString = [(NSArray *)value componentsJoinedByString:@", "]; - } - else - { - valueString = [value debugDescription]; - } - - [tmpString appendFormat:@"%@ %@ '%@'\n", NSStringFromRange(range), valueString, [rangeString stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"]]; - }]; - - printf("%s", [tmpString UTF8String]); -} - - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+HTML.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+HTML.h deleted file mode 100644 index 215a964..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+HTML.h +++ /dev/null @@ -1,96 +0,0 @@ -// -// NSAttributedString+HTML.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/9/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -@class NSAttributedString; - -/** - Methods for generating an `NSAttributedString` from HTML data. Those methods exist on Mac but have not been ported (publicly) to iOS. This project aims to remedy this. - - For a list of available options to pass to any of these methods please refer to [DTHTMLAttributedStringBuilder initWithHTML:options:documentAttributes:]. - */ - -@interface NSAttributedString (HTML) - -/** - @name Creating an NSAttributedString - */ - -/** - Initializes and returns a new `NSAttributedString` object from the HTML contained in the given object and base URL. - @param data The data in HTML format from which to create the attributed string. - @param docAttributes Currently not in used. - @returns Returns an initialized object, or `nil` if the data can’t be decoded. - @see [DTHTMLAttributedStringBuilder initWithHTML:options:documentAttributes:] for a list of available options - */ -- (id)initWithHTMLData:(NSData *)data documentAttributes:(NSDictionary * __autoreleasing*)docAttributes; - -/** - Initializes and returns a new `NSAttributedString` object from the HTML contained in the given object and base URL. - @param data The data in HTML format from which to create the attributed string. - @param baseURL An `NSURL` that represents the base URL for all links within the HTML. - @param docAttributes Currently not in used. - @returns Returns an initialized object, or `nil` if the data can’t be decoded. - @see [DTHTMLAttributedStringBuilder initWithHTML:options:documentAttributes:] for a list of available options - */ -- (id)initWithHTMLData:(NSData *)data baseURL:(NSURL *)baseURL documentAttributes:(NSDictionary * __autoreleasing*)docAttributes; - -/** - Initializes and returns a new `NSAttributedString` object from the HTML contained in the given object and base URL. - - @param data The data in HTML format from which to create the attributed string. - @param options Specifies how the document should be loaded. - @param docAttributes Currently not in used. - @returns Returns an initialized object, or `nil` if the data can’t be decoded. - @see [DTHTMLAttributedStringBuilder initWithHTML:options:documentAttributes:] for a list of available options - */ -- (id)initWithHTMLData:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary * __autoreleasing*)docAttributes; - - -/** - @name Working with Custom HTML Attributes - */ - -/** - Retrieves the dictionary of custom HTML attributes active at the given string index - @param index The string index to query - @returns The custom HTML attributes dictionary or `nil` if there aren't any at this index - */ -- (NSDictionary *)HTMLAttributesAtIndex:(NSUInteger)index; - -/** - Retrieves the range that an attribute with a given name is active for, beginning with the passed index - - Since a custom HTML attribute can occur in multiple individual attribute dictionaries this extends the range from the passed index outwards until the full range of the custom HTML attribute has been found. Those range extensions have to have an identical value, as established by comparing them to the value of the custom attribute at the index with isEqual: - @param name The name of the custom attribute to remove - @param index The string index to query - @returns The custom HTML attributes dictionary or `nil` if there aren't any at this index - */ -- (NSRange)rangeOfHTMLAttribute:(NSString *)name atIndex:(NSUInteger)index; - -/** - Retrieves the NSAttributedString with NSData - - Currently only supports iOS by `___useiOS6Attributes`, if error occur return nil. - - @param data The data must generate by `convertToData` function - @return NSAttributedString from unarchiveObjectWithData, the data must generate by `convertToData` function - */ -+ (NSAttributedString *)attributedStringWithData:(NSData *)data; - -/** - Retrieves NSData with self - - Currently only supports iOS by `___useiOS6Attributes`, if error occur return nil. - - @return NSData from NSAttributedString execute archivedDataWithRootObject: - */ -- (NSData *)convertToData; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+HTML.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+HTML.m deleted file mode 100644 index fed7728..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedString+HTML.m +++ /dev/null @@ -1,277 +0,0 @@ -// -// NSAttributedString+HTML.m -// DTCoreText -// -// Created by Oliver Drobnik on 1/9/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "NSAttributedString+HTML.h" - -#if TARGET_OS_IPHONE -#elif TARGET_OS_MAC -#import -#endif - -#import "DTHTMLElement.h" -#import "DTCoreTextConstants.h" -#import "DTHTMLAttributedStringBuilder.h" -#import "DTTextAttachment.h" - -#if TARGET_OS_IPHONE -#import "NSAttributedStringRunDelegates.h" -#endif - -@implementation NSAttributedString (HTML) - -- (id)initWithHTMLData:(NSData *)data documentAttributes:(NSDictionary * __autoreleasing*)docAttributes -{ - return [self initWithHTMLData:data options:nil documentAttributes:docAttributes]; -} - -- (id)initWithHTMLData:(NSData *)data baseURL:(NSURL *)base documentAttributes:(NSDictionary * __autoreleasing*)docAttributes -{ - NSDictionary *optionsDict = nil; - - if (base) - { - optionsDict = [NSDictionary dictionaryWithObject:base forKey:NSBaseURLDocumentOption]; - } - - return [self initWithHTMLData:data options:optionsDict documentAttributes:docAttributes]; -} - -- (id)initWithHTMLData:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary * __autoreleasing*)docAttributes -{ - // only with valid data - if (![data length]) - { - return nil; - } - - DTHTMLAttributedStringBuilder *stringBuilder = [[DTHTMLAttributedStringBuilder alloc] initWithHTML:data options:options documentAttributes:docAttributes]; - - void (^callBackBlock)(DTHTMLElement *element) = [options objectForKey:DTWillFlushBlockCallBack]; - - if (callBackBlock) - { - [stringBuilder setWillFlushCallback:callBackBlock]; - } - - // This needs to be on a separate line so that ARC can handle releasing the object properly - // return [stringBuilder generatedAttributedString]; shows leak in instruments - id string = [stringBuilder generatedAttributedString]; - - return string; -} - -#pragma mark - NSAttributedString Archiving -+ (NSMutableDictionary *)getArchivingDictionaryWith:(NSDictionary *)attrs -{ - - NSDictionary *archiveDict = attrs[DTArchivingAttribute]; - NSMutableDictionary *dict = nil; - - if (![archiveDict isKindOfClass:[NSDictionary class]]) - { - dict = [NSMutableDictionary dictionary]; - } - else - { - dict = [archiveDict mutableCopy]; - } - - - return dict; -} - -- (NSData *)convertToData -{ - NSMutableAttributedString *appendString = [self mutableCopy]; -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES && TARGET_OS_IPHONE - NSUInteger length = [self length]; - if (length) - { - [self enumerateAttributesInRange:NSMakeRange(0, length-1) options:0 usingBlock:^(NSDictionary * _Nonnull attrs, NSRange range, BOOL * _Nonnull stop) { - - NSMutableDictionary *dict = [[self class] getArchivingDictionaryWith:attrs]; - - if (attrs[NSAttachmentAttributeName]) - { - DTTextAttachment *attatchment = attrs[NSAttachmentAttributeName]; - - NSString *imgPath = nil; - - if ([[attatchment.contentURL scheme] isEqualToString:@"file"]) - { - imgPath = [attatchment.contentURL path]; - NSUInteger homeDirLength = [NSHomeDirectory() length]; - - if ([imgPath hasPrefix:NSHomeDirectory()] && [imgPath length] > homeDirLength) - { - imgPath = [imgPath substringFromIndex:homeDirLength]; - } - } - else - { - imgPath = [attatchment.contentURL absoluteString]; - } - - if (imgPath) - { - [dict setObject:imgPath forKey:NSAttachmentAttributeName]; - [appendString addAttribute:DTArchivingAttribute value:dict range:range]; - } - - [appendString removeAttribute:(id)kCTRunDelegateAttributeName range:range]; - } - // if there will others attribute to archiving , implement like this. - if (attrs[DTBackgroundStrokeColorAttribute]) - { - CGColorRef strokeColor = (__bridge CGColorRef)(attrs[DTBackgroundStrokeColorAttribute]); - - UIColor *stoke = [[UIColor alloc] initWithCGColor:strokeColor]; - [dict setObject:stoke forKey:DTBackgroundStrokeColorAttribute]; - - [appendString addAttribute:DTArchivingAttribute value:dict range:range]; - [appendString removeAttribute:(id)DTBackgroundStrokeColorAttribute range:range]; - } - - }]; - } -#endif - - NSData *data = nil; - @try - { - data = [NSKeyedArchiver archivedDataWithRootObject:appendString]; - } - @catch (NSException *exception) - { - data = nil; - } - - return data; -} - -+ (NSAttributedString *)attributedStringWithData:(NSData *)data -{ - NSMutableAttributedString *appendString = nil; - @try - { - appendString = (NSMutableAttributedString *)[NSKeyedUnarchiver unarchiveObjectWithData:data]; - } - @catch (NSException *exception) - { - appendString = nil; - } - - NSUInteger length = [appendString length]; - if (length) - { - [appendString enumerateAttributesInRange:NSMakeRange(0, length-1) options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:^(NSDictionary * _Nonnull attrs, NSRange range, BOOL * _Nonnull stop) { - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES && TARGET_OS_IPHONE - - if (attrs[NSAttachmentAttributeName]) - { - DTTextAttachment *attatchment = attrs[NSAttachmentAttributeName]; - - if ([[attatchment.contentURL scheme] isEqualToString:@"file"]) - { - NSMutableDictionary *dict = [[self class] getArchivingDictionaryWith:attrs]; - - NSString *imgPath = dict[NSAttachmentAttributeName]; - if (imgPath) - { - if (![imgPath hasPrefix:NSHomeDirectory()]) - { - imgPath = [NSHomeDirectory() stringByAppendingPathComponent:imgPath]; - } - attatchment.contentURL = [NSURL fileURLWithPath:imgPath]; - } - } - - CTRunDelegateRef embeddedObjectRunDelegate = createEmbeddedObjectRunDelegate(attatchment); - - [appendString addAttribute:(id)kCTRunDelegateAttributeName value:CFBridgingRelease(embeddedObjectRunDelegate) range:range]; - } - // if there will others attribute to archiving , implement like this. - if (attrs[DTBackgroundStrokeColorAttribute]) - { - NSMutableDictionary *dict = [self getArchivingDictionaryWith:attrs]; - UIColor *stroke = dict[DTBackgroundStrokeColorAttribute]; - CGColorRef strokeColor = stroke.CGColor; - - [appendString addAttribute:DTBackgroundStrokeColorAttribute value:(__bridge id)strokeColor range:range]; - } -#endif - - }]; - } - return [appendString copy]; -} - -#pragma mark - Working with Custom HTML Attributes - -- (NSDictionary *)HTMLAttributesAtIndex:(NSUInteger)index -{ - return [self attribute:DTCustomAttributesAttribute atIndex:index effectiveRange:NULL]; -} - -- (NSRange)rangeOfHTMLAttribute:(NSString *)name atIndex:(NSUInteger)index -{ - NSRange rangeSoFar; - - NSDictionary *attributes = [self attribute:DTCustomAttributesAttribute atIndex:index effectiveRange:&rangeSoFar]; - - NSAssert(attributes, @"No custom attribute '%@' at index %d", name, (int)index); - - // check if there is a value for this custom attribute name - id value = [attributes objectForKey:name]; - - if (!attributes || !value) - { - return NSMakeRange(NSNotFound, 0); - } - - // search towards beginning - while (rangeSoFar.location>0) - { - NSRange extendedRange; - attributes = [self attribute:DTCustomAttributesAttribute atIndex:rangeSoFar.location-1 effectiveRange:&extendedRange]; - - id extendedValue = [attributes objectForKey:name]; - - // abort search if key not found or value not identical - if (!extendedValue || ![extendedValue isEqual:value]) - { - break; - } - - rangeSoFar = NSUnionRange(rangeSoFar, extendedRange); - } - - NSUInteger length = [self length]; - - // search towards end - while (NSMaxRange(rangeSoFar) - -#if TARGET_OS_IPHONE -#import -#elif TARGET_OS_MAC -#import -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void embeddedObjectDeallocCallback(void *_Nullable context); -CGFloat embeddedObjectGetAscentCallback(void *_Nullable context); -CGFloat embeddedObjectGetDescentCallback(void *_Nullable context); -CGFloat embeddedObjectGetWidthCallback(void *_Nullable context); -CTRunDelegateRef _Nullable createEmbeddedObjectRunDelegate(id _Nullable obj); - -#ifdef __cplusplus -} -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedStringRunDelegates.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedStringRunDelegates.m deleted file mode 100644 index b91334e..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSAttributedStringRunDelegates.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// NSAttributedStringRunDelegates.m -// DTCoreText -// -// Created by Oliver on 14.01.11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "NSAttributedStringRunDelegates.h" -#import "DTTextAttachment.h" - - -void embeddedObjectDeallocCallback(void *_Nullable context) -{ -} - -CGFloat embeddedObjectGetAscentCallback(void *_Nullable context) -{ - if ([(__bridge id)context isKindOfClass:[DTTextAttachment class]]) - { - return [(__bridge DTTextAttachment *)context ascentForLayout]; - } - return 0; -} -CGFloat embeddedObjectGetDescentCallback(void *_Nullable context) -{ - if ([(__bridge id)context isKindOfClass:[DTTextAttachment class]]) - { - return [(__bridge DTTextAttachment *)context descentForLayout]; - } - return 0; -} - -CGFloat embeddedObjectGetWidthCallback(void *_Nullable context) -{ - if ([(__bridge id)context isKindOfClass:[DTTextAttachment class]]) - { - return [(__bridge DTTextAttachment *)context displaySize].width; - } - return 35; -} - -CTRunDelegateRef _Nullable createEmbeddedObjectRunDelegate(id _Nullable obj) -{ - CTRunDelegateCallbacks callbacks; - callbacks.version = kCTRunDelegateCurrentVersion; - callbacks.dealloc = embeddedObjectDeallocCallback; - callbacks.getAscent = embeddedObjectGetAscentCallback; - callbacks.getDescent = embeddedObjectGetDescentCallback; - callbacks.getWidth = embeddedObjectGetWidthCallback; - return CTRunDelegateCreate(&callbacks, (__bridge void *)obj); -} diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSCharacterSet+HTML.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSCharacterSet+HTML.h deleted file mode 100644 index 17a354e..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSCharacterSet+HTML.h +++ /dev/null @@ -1,86 +0,0 @@ -// -// NSCharacterSet+HTML.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/15/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import - -/** - Category on NSCharacterSet to create character sets frequently used and relevant to HTML and CSS string manipulations. Each character set is only initialized once. - */ -@interface NSCharacterSet (HTML) - -/** - @name HTML Character Sets - */ - - -/** - Creates an alpha-numeric character set, appropriate for tag names. - @returns An NSCharacterSet with alpha-numeric characters. a-Z, 0-9. - */ -+ (NSCharacterSet *)tagNameCharacterSet; - - -/** - Creates an alpha-numeric character set just as tagNameCharacterSet does but also with colon, dash, and underscore characters, appropriate for tag attribute names. - @returns An NSCharacterSet with alpha-numeric characters and colon :, dash -, and underscore _'. - */ -+ (NSCharacterSet *)tagAttributeNameCharacterSet; - - -/** - Creates a characterset of all whitespace and newline characters that can be ignored between HTML tags - @returns An NSCharacterSet of ignorable characters - */ -+ (NSCharacterSet *)ignorableWhitespaceCharacterSet; - -/** - Creates a character set with the apostrophe character ' (used as single quote agnostic of direction) and double quote character " (agnostic of direction). - @returns An NSCharacterSet with the single quote and double quote characters: ', ". - */ -+ (NSCharacterSet *)quoteCharacterSet; - - -/** - Creates a character set with the characters forward slash / and closing angle bracket aka greater than sign >, then forms the union of this character set with the [whitespace character set](https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCharacterSet_Class/Reference/Reference.html) which includes space, tab, newline, and nextline characters. Useful to find the end of an attribute. - @returns An NSCharacterSet with the forward slash, closing angle bracket characters, tab, space, newline, and nextline characters. - */ -+ (NSCharacterSet *)nonQuotedAttributeEndCharacterSet; - - -/** - @name CSS Character Sets - */ - -/** - Creates an alpha-numeric character set just as tagNameCharacterSet does but also with the dash and underscore characters. Does not contain the colon character because it will mess up parsing of CSS style attributes. Useful for CSS attribute names. - @returns An NSCharacterSet with alpha-numeric characters, dash, and underscore characters. - */ -+ (NSCharacterSet *)cssStyleAttributeNameCharacterSet; - - -/** - Characterset of characters that make up units in CSS values - @returns An NSCharacterSet - */ -+ (NSCharacterSet *)cssLengthValueCharacterSet; - - -/** - Characterset of characters that make up units in CSS lengths - @returns An NSCharacterSet - */ -+ (NSCharacterSet *)cssLengthUnitCharacterSet; - -/** -Characterset of ASCII Characters -@returns An NSCharacterSet -*/ - -+ (NSCharacterSet *)ASCIICharacterSet; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSCharacterSet+HTML.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSCharacterSet+HTML.m deleted file mode 100644 index a3f5d14..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSCharacterSet+HTML.m +++ /dev/null @@ -1,152 +0,0 @@ -// -// NSCharacterSet+HTML.m -// DTCoreText -// -// Created by Oliver Drobnik on 1/15/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "NSCharacterSet+HTML.h" -#import "DTCoreTextConstants.h" - -static NSCharacterSet *_tagNameCharacterSet = nil; -static NSCharacterSet *_ignorableWhitespaceCharacterSet = nil; -static NSCharacterSet *_tagAttributeNameCharacterSet = nil; -static NSCharacterSet *_quoteCharacterSet = nil; -static NSCharacterSet *_nonQuotedAttributeEndCharacterSet = nil; -static NSCharacterSet *_cssStyleAttributeNameCharacterSet = nil; -static NSCharacterSet *_cssLengthValueCharacterSet = nil; -static NSCharacterSet *_cssLengthUnitCharacterSet = nil; -static NSCharacterSet *_asciiCharacterSet = nil; - - -@implementation NSCharacterSet (HTML) - -+ (NSCharacterSet *)tagNameCharacterSet -{ - static dispatch_once_t predicate; - - dispatch_once(&predicate, ^{ - _tagNameCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"]; - }); - - return _tagNameCharacterSet; -} - -+ (NSCharacterSet *)tagAttributeNameCharacterSet -{ - static dispatch_once_t predicate; - - dispatch_once(&predicate, ^{ - _tagAttributeNameCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"-_:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"]; - }); - - return _tagAttributeNameCharacterSet; -} - -+ (NSCharacterSet *)ignorableWhitespaceCharacterSet -{ - static dispatch_once_t predicate; - - dispatch_once(&predicate, ^{ - NSMutableCharacterSet *tmpSet = [NSMutableCharacterSet whitespaceAndNewlineCharacterSet]; - - // remove all special unicode space characters - [tmpSet removeCharactersInString:UNICODE_NON_BREAKING_SPACE]; - [tmpSet removeCharactersInString:UNICODE_OGHAM_SPACE_MARK]; - [tmpSet removeCharactersInString:UNICODE_MONGOLIAN_VOWEL_SEPARATOR]; - [tmpSet removeCharactersInString:UNICODE_EN_QUAD]; - [tmpSet removeCharactersInString:UNICODE_EM_QUAD]; - [tmpSet removeCharactersInString:UNICODE_EN_SPACE]; - [tmpSet removeCharactersInString:UNICODE_EM_SPACE]; - [tmpSet removeCharactersInString:UNICODE_THREE_PER_EM_SPACE]; - [tmpSet removeCharactersInString:UNICODE_FOUR_PER_EM_SPACE]; - [tmpSet removeCharactersInString:UNICODE_SIX_PER_EM_SPACE]; - [tmpSet removeCharactersInString:UNICODE_FIGURE_SPACE]; - [tmpSet removeCharactersInString:UNICODE_PUNCTUATION_SPACE]; - [tmpSet removeCharactersInString:UNICODE_THIN_SPACE]; - [tmpSet removeCharactersInString:UNICODE_HAIR_SPACE]; - [tmpSet removeCharactersInString:UNICODE_ZERO_WIDTH_SPACE]; - [tmpSet removeCharactersInString:UNICODE_NARROW_NO_BREAK_SPACE]; - [tmpSet removeCharactersInString:UNICODE_MEDIUM_MATHEMATICAL_SPACE]; - [tmpSet removeCharactersInString:UNICODE_IDEOGRAPHIC_SPACE]; - [tmpSet removeCharactersInString:UNICODE_ZERO_WIDTH_NO_BREAK_SPACE]; - - _ignorableWhitespaceCharacterSet = [tmpSet copy]; - }); - - return _ignorableWhitespaceCharacterSet; -} - - -+ (NSCharacterSet *)quoteCharacterSet -{ - static dispatch_once_t predicate; - - dispatch_once(&predicate, ^{ - _quoteCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"'\""]; - }); - - return _quoteCharacterSet; -} - -+ (NSCharacterSet *)nonQuotedAttributeEndCharacterSet -{ - static dispatch_once_t predicate; - - dispatch_once(&predicate, ^{ - NSMutableCharacterSet *tmpCharacterSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"/>"]; - [tmpCharacterSet formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - - _nonQuotedAttributeEndCharacterSet = [tmpCharacterSet copy]; - }); - - return _nonQuotedAttributeEndCharacterSet; -} - -// NOTE: cannot contain : because otherwise this messes up parsing of CSS style attributes -+ (NSCharacterSet *)cssStyleAttributeNameCharacterSet -{ - static dispatch_once_t predicate; - - dispatch_once(&predicate, ^{ - _cssStyleAttributeNameCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"]; - }); - return _cssStyleAttributeNameCharacterSet; -} - - -+ (NSCharacterSet *)cssLengthValueCharacterSet -{ - static dispatch_once_t predicate; - - dispatch_once(&predicate, ^{ - _cssLengthValueCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@".0123456789"]; - }); - return _cssLengthValueCharacterSet; -} - -+ (NSCharacterSet *)cssLengthUnitCharacterSet -{ - static dispatch_once_t predicate; - - dispatch_once(&predicate, ^{ - _cssLengthUnitCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"pxtem"]; - }); - return _cssLengthUnitCharacterSet; -} - -+ (NSCharacterSet *)ASCIICharacterSet -{ - static dispatch_once_t predicate; - - dispatch_once(&predicate, ^{ - NSMutableCharacterSet *tmpSet = [NSMutableCharacterSet new]; - [tmpSet addCharactersInRange:NSMakeRange(32, 96)]; - _asciiCharacterSet = [tmpSet copy]; - }); - - return _asciiCharacterSet; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSCoder+DTCompatibility.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSCoder+DTCompatibility.h deleted file mode 100644 index 7f3ed46..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSCoder+DTCompatibility.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// NSCoder+DTCompatibility.h -// DTCoreText -// -// Created by Ryan Johnson on 14/02/19. -// Copyright (c) 2014 Drobnik.com. All rights reserved. -// - - -#import - -#import "DTCompatibility.h" - -@interface NSCoder (DTCompatibility) - -#if !TARGET_OS_IPHONE -- (void)encodeCGSize:(CGSize)size forKey:(NSString *)key; -- (CGSize)decodeCGSizeForKey:(NSString *)key; -#endif - -- (void)encodeDTEdgeInsets:(DTEdgeInsets)insets forKey:(NSString *)key; -- (DTEdgeInsets)decodeDTEdgeInsetsForKey:(NSString *)key; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSCoder+DTCompatibility.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSCoder+DTCompatibility.m deleted file mode 100644 index 924a066..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSCoder+DTCompatibility.m +++ /dev/null @@ -1,68 +0,0 @@ -// -// NSCoder+DTCompatibility.m -// DTCoreText -// -// Created by Ryan Johnson on 14/02/19. -// Copyright (c) 2014 Drobnik.com. All rights reserved. -// - -#import "NSCoder+DTCompatibility.h" - -#if !TARGET_OS_IPHONE -NSString* NSStringFromNSEdgeInsets(NSEdgeInsets insets); -NSEdgeInsets NSEdgeInsetsFromString(NSString *string); -#endif - -@implementation NSCoder (DTCompatibility) - -#if !TARGET_OS_IPHONE -- (void)encodeCGSize:(CGSize)size forKey:(NSString *)key { - [self encodeObject:NSStringFromCGSize(size) forKey:key]; -} - -- (CGSize)decodeCGSizeForKey:(NSString *)key { - return NSSizeToCGSize(NSSizeFromString([self decodeObjectForKey:key])); -} -#endif - -- (void)encodeDTEdgeInsets:(DTEdgeInsets)insets forKey:(NSString *)key { -#if TARGET_OS_IPHONE - [self encodeUIEdgeInsets:insets forKey:key]; -#else - [self encodeObject:NSStringFromNSEdgeInsets(insets) forKey:key]; -#endif -} - -- (DTEdgeInsets)decodeDTEdgeInsetsForKey:(NSString *)key { -#if TARGET_OS_IPHONE - return [self decodeUIEdgeInsetsForKey:key]; -#else - return NSEdgeInsetsFromString([self decodeObjectForKey:key]); -#endif -} - - -@end - -#if !TARGET_OS_IPHONE -NSString* NSStringFromNSEdgeInsets(NSEdgeInsets insets) { - return [NSString stringWithFormat:@"{%f,%f,%f,%f}", insets.top, insets.left, insets.bottom, insets.right]; -} - -NSEdgeInsets NSEdgeInsetsFromString(NSString *string) { - // Cut off curly brackets - string = [string substringWithRange:NSMakeRange(1, string.length - 2)]; - - NSArray *floatStrings = [string componentsSeparatedByString:@","]; - if (floatStrings.count != 4) { - return NSEdgeInsetsMake(0, 0, 0, 0); - } - CGFloat top = [floatStrings[0] floatValue]; - CGFloat left = [floatStrings[1] floatValue]; - CGFloat bottom = [floatStrings[2] floatValue]; - CGFloat right = [floatStrings[3] floatValue]; - - return NSEdgeInsetsMake(top, left, bottom, right); -} - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSDictionary+DTCoreText.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSDictionary+DTCoreText.h deleted file mode 100644 index 18ed30a..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSDictionary+DTCoreText.h +++ /dev/null @@ -1,95 +0,0 @@ -// -// NSDictionary+DTRichText.h -// DTCoreText -// -// Created by Oliver Drobnik on 7/21/11. -// Copyright 2011 Cocoanetics. All rights reserved. -// - -#import - -#import "DTCompatibility.h" - -@class DTCoreTextParagraphStyle; -@class DTCoreTextFontDescriptor; - -/** - Convenience methods for editors dealing with Core Text attribute dictionaries. - */ -@interface NSDictionary (DTCoreText) - -/** - @name Getting State information - */ - -/** - Whether the font in the receiver's attributes is bold. - @returns `YES` if the text has a bold trait - */ -- (BOOL)isBold; - -/** - Whether the font in the receiver's attributes is italic. - @returns `YES` if the text has an italic trait - */ -- (BOOL)isItalic; - -/** - Whether the receiver's attributes contains underlining. - @returns `YES` if the text is underlined - */ -- (BOOL)isUnderline; - -/** - Whether the receiver's attributes contains strike-through. - @returns `YES` if the text is strike-through - */ -- (BOOL)isStrikethrough; - -/** - Whether the receiver's attributes contain a DTTextAttachment - @returns `YES` if there is an attachment - */ -- (BOOL)hasAttachment; - -/** - The header level of the receiver - @returns The header level (1-6) or 0 if no header level is set - */ -- (NSUInteger)headerLevel; - -/** - @name Getting Style Information - */ - -/** - Retrieves the DTCoreTextParagraphStyle from the receiver's attributes. This supports both `CTParagraphStyle` as well as `NSParagraphStyle` as a possible representation of the text's paragraph style. - @returns The paragraph style - */ -- (DTCoreTextParagraphStyle *)paragraphStyle; - -/** - Retrieves the DTCoreTextFontDescriptor from the receiver's attributes. This supports both `CTFont` as well as `UIFont` as a possible representation of the text's font. - @returns The font descriptor - */ -- (DTCoreTextFontDescriptor *)fontDescriptor; - -/** - Retrieves the foreground color. On iOS as UIColor, on Mac as NSColor. This supports both the CT as well as the NS/UIKit method of specifying the color. If no foreground color is defined in the receiver then black is assumed. - @returns The platform-specific color defined for the foreground - */ -- (DTColor *)foregroundColor; - -/** - Retrieves the background color. On iOS as UIColor, on Mac as NSColor. This supports both the DT as well as the NS/UIKit method of specifying the color. If no background color is defined in the receiver then `nil` is returned - @returns The platform-specific color defined for the background, or `nil` if none is defined - */ -- (DTColor *)backgroundColor; - -/** - The text kerning value - @returns the kerning value - */ -- (CGFloat)kerning; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSDictionary+DTCoreText.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSDictionary+DTCoreText.m deleted file mode 100644 index b9eccef..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSDictionary+DTCoreText.m +++ /dev/null @@ -1,266 +0,0 @@ -// -// NSDictionary+DTCoreText.m -// DTCoreText -// -// Created by Oliver Drobnik on 7/21/11. -// Copyright 2011 Cocoanetics. All rights reserved. -// - - -#import - -#import "NSDictionary+DTCoreText.h" -#import "DTCoreTextFontDescriptor.h" -#import "DTCoreTextConstants.h" -#import "DTCoreTextFunctions.h" -#import "DTCoreTextParagraphStyle.h" - -@implementation NSDictionary (DTCoreText) - -- (BOOL)isBold -{ - DTCoreTextFontDescriptor *desc = [self fontDescriptor]; - - return desc.boldTrait; -} - -- (BOOL)isItalic -{ - DTCoreTextFontDescriptor *desc = [self fontDescriptor]; - - return desc.italicTrait; -} - -- (BOOL)isUnderline -{ - NSNumber *underlineStyle = [self objectForKey:(id)kCTUnderlineStyleAttributeName]; - - if (underlineStyle) - { - return [underlineStyle integerValue] != kCTUnderlineStyleNone; - } - - if (DTCoreTextModernAttributesPossible()) - { - underlineStyle = [self objectForKey:NSUnderlineStyleAttributeName]; - - if (underlineStyle) - { - return [underlineStyle integerValue] != NSUnderlineStyleNone; - } - } - - return NO; -} - -- (BOOL)isStrikethrough -{ - NSNumber *strikethroughStyle = [self objectForKey:DTStrikeOutAttribute]; - - if (strikethroughStyle) - { - return [strikethroughStyle boolValue]; - } - - if (DTCoreTextModernAttributesPossible()) - { - strikethroughStyle = [self objectForKey:NSStrikethroughStyleAttributeName]; - - if (strikethroughStyle) - { - return [strikethroughStyle boolValue]; - } - } - - return NO; -} - -- (NSUInteger)headerLevel -{ - NSNumber *headerLevelNum = [self objectForKey:DTHeaderLevelAttribute]; - - return [headerLevelNum integerValue]; -} - -- (BOOL)hasAttachment -{ - id attachment = [self objectForKey:NSAttachmentAttributeName]; - - if (!attachment) - { - // could also be modern NS-style attachment - attachment = [self objectForKey:@"NSAttachment"]; - } - - return attachment!=nil; -} - -- (DTCoreTextParagraphStyle *)paragraphStyle -{ - if (DTCoreTextModernAttributesPossible()) - { - NSParagraphStyle *nsParagraphStyle = [self objectForKey:NSParagraphStyleAttributeName]; - - if (nsParagraphStyle && [nsParagraphStyle isKindOfClass:[NSParagraphStyle class]]) - { - return [DTCoreTextParagraphStyle paragraphStyleWithNSParagraphStyle:nsParagraphStyle]; - } - } - - CTParagraphStyleRef ctParagraphStyle = (__bridge CTParagraphStyleRef)[self objectForKey:(id)kCTParagraphStyleAttributeName]; - - if (ctParagraphStyle) - { - return [DTCoreTextParagraphStyle paragraphStyleWithCTParagraphStyle:ctParagraphStyle]; - } - - return nil; -} - -- (DTCoreTextFontDescriptor *)fontDescriptor -{ - CTFontRef ctFont = (__bridge CTFontRef)[self objectForKey:(id)kCTFontAttributeName]; - - // on Mac NSFont and CTFont are toll-free bridged, so this works there as well - - if (ctFont) - { - return [DTCoreTextFontDescriptor fontDescriptorForCTFont:ctFont]; - } - - if (DTCoreTextModernAttributesPossible()) - { -#if TARGET_OS_IPHONE - UIFont *uiFont = [self objectForKey:NSFontAttributeName]; - - if (!uiFont) - { - return nil; - } - - // convert font - ctFont = DTCTFontCreateWithUIFont(uiFont); - - if (ctFont) - { - DTCoreTextFontDescriptor *fontDescriptor = [DTCoreTextFontDescriptor fontDescriptorForCTFont:ctFont]; - - CFRelease(ctFont); - - return fontDescriptor; - } -#endif - } - - return nil; -} - -- (DTColor *)foregroundColor -{ - if (DTCoreTextModernAttributesPossible()) - { - DTColor *color = [self objectForKey:NSForegroundColorAttributeName]; - - if (color) - { - return color; - } - } - - CGColorRef cgColor = (__bridge CGColorRef)[self objectForKey:(id)kCTForegroundColorAttributeName]; - - if (cgColor) - { -#if DTCORETEXT_FIX_14684188 - // test if this a valid color, workaround for iOS 7 bug - size_t componentCount = CGColorGetNumberOfComponents(cgColor); - - if (componentCount>0 && componentCount<=4) - { - return [DTColor colorWithCGColor:cgColor]; - } -#else - return [DTColor colorWithCGColor:cgColor]; -#endif - } - - // default foreground is black - return [DTColor blackColor]; -} - -- (DTColor *)backgroundColor -{ - CGColorRef cgColor = (__bridge CGColorRef)[self objectForKey:DTBackgroundColorAttribute]; - - if (cgColor) - { - return [DTColor colorWithCGColor:cgColor]; - } - - if (DTCoreTextModernAttributesPossible()) - { - DTColor *color = [self objectForKey:NSBackgroundColorAttributeName]; - - if (color) - { - return color; - } - } - - // default background is nil - return nil; -} - -- (CGFloat)kerning -{ - if (DTCoreTextModernAttributesPossible()) - { - NSNumber *kerningNum = [self objectForKey:NSKernAttributeName]; - - if (kerningNum) - { - return [kerningNum floatValue]; - } - } - - NSNumber *kerningNum = [self objectForKey:(id)kCTKernAttributeName]; - - return [kerningNum floatValue]; -} - -- (DTColor *)backgroundStrokeColor -{ - CGColorRef cgColor = (__bridge CGColorRef)[self objectForKey:DTBackgroundStrokeColorAttribute]; - - if (cgColor) - { - return [DTColor colorWithCGColor:cgColor]; - } - return nil; -} - -- (CGFloat)backgroundStrokeWidth -{ - NSNumber *num = [self objectForKey:DTBackgroundStrokeWidthAttribute]; - - if (num) - { - return [num floatValue]; - } - - return 0.0f; -} - -- (CGFloat)backgroundCornerRadius -{ - NSNumber *num = [self objectForKey:DTBackgroundCornerRadiusAttribute]; - - if (num) - { - return [num floatValue]; - } - - return 0.0f; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSMutableAttributedString+HTML.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSMutableAttributedString+HTML.h deleted file mode 100644 index 03fd051..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSMutableAttributedString+HTML.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// NSMutableAttributedString+HTML.h -// DTCoreText -// -// Created by Oliver Drobnik on 4/14/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#import "DTCoreTextConstants.h" - -@class DTCoreTextParagraphStyle, DTCoreTextFontDescriptor; - -/** - Methods for appending `NSString` instances to mutable attributed strings - */ -@interface NSMutableAttributedString (HTML) - -/** - Appends a string with the same attributes as this string to this string. - - If the last character of the receiver contains a placeholder for a it is removed from the appended string. Also fields (e.g. list prefixes) are not extended - @param string The string to be appended to this string. */ -- (void)appendString:(NSString *)string; - -/** - Appends a string with a given paragraph style and font to this string. - @param string The string to be appended to this string. - @param paragraphStyle Paragraph style to be attributed to the appended string. - @param fontDescriptor Font descriptor to be attributed to the appended string. */ -- (void)appendString:(NSString *)string withParagraphStyle:(DTCoreTextParagraphStyle *)paragraphStyle fontDescriptor:(DTCoreTextFontDescriptor *)fontDescriptor; - -/** - Adds the paragraph terminator `\n` and makes sure that the previous font and paragraph styles extend to include it - */ -- (void)appendEndOfParagraph; - -/** - @name Working with Custom HTML Attributes - */ - -/** - Adds the custom HTML attributes with the given value on the given range, optionally replacing occurrences of an attribute with the same name. - @param name The name of the custom HTML attribute - @param value The value to set for the custom attribute - @param range The range to add the custom attribute for - @param replaceExisting `YES` if ranges that have an attribute with the same name should be replaced. With `NO` the attribute is only added for ranges where there is no attribute with the given name - */ -- (void)addHTMLAttribute:(NSString *)name value:(id)value range:(NSRange)range replaceExisting:(BOOL)replaceExisting; - -/** - Adds the custom HTML attributes with the given value from the given range. - @param name The name of the custom HTML attribute - @param range The range to add the custom attribute for - */ -- (void)removeHTMLAttribute:(NSString *)name range:(NSRange)range; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSMutableAttributedString+HTML.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSMutableAttributedString+HTML.m deleted file mode 100644 index 812fc88..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSMutableAttributedString+HTML.m +++ /dev/null @@ -1,313 +0,0 @@ -// -// NSMutableAttributedString+HTML.m -// DTCoreText -// -// Created by Oliver Drobnik on 4/14/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "NSMutableAttributedString+HTML.h" - -#import "DTCoreTextFontDescriptor.h" -#import "DTCoreTextParagraphStyle.h" -#import "NSDictionary+DTCoreText.h" - -#if TARGET_OS_IPHONE -#import "UIFont+DTCoreText.h" -#endif - - -@implementation NSMutableAttributedString (HTML) - - -// appends a plain string extending the attributes at this position -- (void)appendString:(NSString *)string -{ - NSParameterAssert(string); - - NSUInteger length = [self length]; - NSAttributedString *appendString = nil; - - if (length) - { - // get attributes at end of self - NSMutableDictionary *attributes = [[self attributesAtIndex:length-1 effectiveRange:NULL] mutableCopy]; - - // we need to remove the image placeholder (if any) to prevent duplication - [attributes removeObjectForKey:NSAttachmentAttributeName]; - [attributes removeObjectForKey:(id)kCTRunDelegateAttributeName]; - - // we also remove field attribute, because appending plain strings should never extend an field - [attributes removeObjectForKey:DTFieldAttribute]; - - // create a temp attributed string from the appended part - appendString = [[NSAttributedString alloc] initWithString:string attributes:attributes]; - } - else - { - // no attributes to extend - appendString = [[NSAttributedString alloc] initWithString:string]; - } - - [self appendAttributedString:appendString]; -} - -- (void)appendString:(NSString *)string withParagraphStyle:(DTCoreTextParagraphStyle *)paragraphStyle fontDescriptor:(DTCoreTextFontDescriptor *)fontDescriptor -{ - NSUInteger selfLengthBefore = [self length]; - - [self.mutableString appendString:string]; - - NSRange appendedStringRange = NSMakeRange(selfLengthBefore, [string length]); - - if (paragraphStyle || fontDescriptor) - { - NSMutableDictionary *attributes = [NSMutableDictionary dictionary]; - - if (paragraphStyle) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - NSParagraphStyle *style = [paragraphStyle NSParagraphStyle]; - [attributes setObject:style forKey:NSParagraphStyleAttributeName]; - } - else -#endif - { - CTParagraphStyleRef newParagraphStyle = [paragraphStyle createCTParagraphStyle]; - [attributes setObject:CFBridgingRelease(newParagraphStyle) forKey:(id)kCTParagraphStyleAttributeName]; - } - } - - if (fontDescriptor) - { - CTFontRef newFont = [fontDescriptor newMatchingFont]; - - if (newFont) - { -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES && TARGET_OS_IPHONE - if (___useiOS6Attributes) - { - // convert to UIFont - UIFont *uiFont = [UIFont fontWithCTFont:newFont]; - [attributes setObject:uiFont forKey:NSFontAttributeName]; - - CFRelease(newFont); - } - else -#endif - { - [attributes setObject:CFBridgingRelease(newFont) forKey:(id)kCTFontAttributeName]; - } - } - } - - // Replace attributes - [self setAttributes:attributes range:appendedStringRange]; - } - else - { - // Remove attributes - [self setAttributes:[NSDictionary dictionary] range:appendedStringRange]; - } -} - -- (void)appendEndOfParagraph -{ - NSUInteger length = [self length]; - - NSAssert(length, @"Cannot append end of paragraph to empty string"); - - NSRange effectiveRange; - NSDictionary *attributes = [self attributesAtIndex:length-1 effectiveRange:&effectiveRange]; - - - NSMutableDictionary *appendAttributes = [NSMutableDictionary dictionary]; - - -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - id font = [attributes objectForKey:NSFontAttributeName]; - - if (font) - { - [appendAttributes setObject:font forKey:NSFontAttributeName]; - } - - id paragraphStyle = [attributes objectForKey:NSParagraphStyleAttributeName]; - - if (paragraphStyle) - { - [appendAttributes setObject:paragraphStyle forKey:NSParagraphStyleAttributeName]; - } - - } - else -#endif - { - CTFontRef font = (__bridge CTFontRef)[attributes objectForKey:(id)kCTFontAttributeName]; - - if (font) - { - [appendAttributes setObject:(__bridge id)(font) forKey:(id)kCTFontAttributeName]; - } - - CTParagraphStyleRef paragraphStyle = (__bridge CTParagraphStyleRef)[attributes objectForKey:(id)kCTParagraphStyleAttributeName]; - - if (paragraphStyle) - { - [appendAttributes setObject:(__bridge id)(paragraphStyle) forKey:(id)kCTParagraphStyleAttributeName]; - } - } - - // transfer blocks - NSArray *blocks = [attributes objectForKey:DTTextBlocksAttribute]; - - if (blocks) - { - [appendAttributes setObject:blocks forKey:DTTextBlocksAttribute]; - } - - // transfer lists - NSArray *lists = [attributes objectForKey:DTTextListsAttribute]; - - if (lists) - { - [appendAttributes setObject:lists forKey:DTTextListsAttribute]; - } - - // transfer foreground color -#if DTCORETEXT_SUPPORT_NS_ATTRIBUTES - if (___useiOS6Attributes) - { - id foregroundColor = [attributes objectForKey:NSForegroundColorAttributeName]; - - if (foregroundColor) - { - [appendAttributes setObject:foregroundColor forKey:NSForegroundColorAttributeName]; - } - } - else -#endif - { - id foregroundColor = [attributes objectForKey:(id)kCTForegroundColorAttributeName]; - - if (foregroundColor) - { -#if TARGET_OS_IPHONE - if ([foregroundColor isKindOfClass:[UIColor class]]) - { - [appendAttributes setObject:(id)[foregroundColor CGColor] forKey:(id)kCTForegroundColorAttributeName]; - } - else -#endif - { - [appendAttributes setObject:foregroundColor forKey:(id)kCTForegroundColorAttributeName]; - } - } - } - - NSAttributedString *newlineString = [[NSAttributedString alloc] initWithString:@"\n" attributes:appendAttributes]; - [self appendAttributedString:newlineString]; -} - - -#pragma mark - Working with Custom HTML Attributes - -- (void)addHTMLAttribute:(NSString *)name value:(id)value range:(NSRange)range replaceExisting:(BOOL)replaceExisting -{ - NSRange safeRange = NSIntersectionRange(range, NSMakeRange(0, [self length])); - - [self beginEditing]; - - NSMutableIndexSet *indexesToSetThis = [NSMutableIndexSet indexSetWithIndexesInRange:range]; - - [self enumerateAttribute:DTCustomAttributesAttribute inRange:safeRange options:0 usingBlock:^(NSDictionary *dictionary, NSRange effectiveRange, BOOL *stop) { - - id existingValue = [dictionary objectForKey:name]; - - if (existingValue && !replaceExisting) - { - // exempt this range - [indexesToSetThis removeIndexesInRange:effectiveRange]; - } - }]; - - // now our mutable index set should contain the ranges where we want to set this - - [indexesToSetThis enumerateRangesInRange:safeRange options:0 usingBlock:^(NSRange indexRange, BOOL *stopEnumerateRanges) { - - // for each such range, we need to add this to the attribute - [self enumerateAttribute:DTCustomAttributesAttribute inRange:indexRange options:0 usingBlock:^(NSDictionary *dictionary, NSRange effectiveRange, BOOL *stopEnumerateAttribute) { - - if (dictionary) - { - // need to make it mutable and add the value - NSMutableDictionary *mutableDictionary = [dictionary mutableCopy]; - [mutableDictionary setObject:value forKey:name]; - - // substitute attribute -#if DTCORETEXT_NEEDS_ATTRIBUTE_REPLACEMENT_LEAK_FIX - if (NSFoundationVersionNumber <= NSFoundationVersionNumber10_6_8) // less than OS X 10.7 and less than iOS 5 - { - // remove old (works around iOS 4.3 leak) - [self removeAttribute:DTCustomAttributesAttribute range:effectiveRange]; - } -#endif - - [self addAttribute:DTCustomAttributesAttribute value:[mutableDictionary copy] range:effectiveRange]; - } - else - { - // create new dictionary with the value - dictionary = [NSDictionary dictionaryWithObject:value forKey:name]; - [self addAttribute:DTCustomAttributesAttribute value:dictionary range:effectiveRange]; - } - }]; - }]; - - [self endEditing]; -} - -- (void)removeHTMLAttribute:(NSString *)name range:(NSRange)range -{ - NSRange safeRange = NSIntersectionRange(range, NSMakeRange(0, [self length])); - - [self beginEditing]; - - [self enumerateAttribute:DTCustomAttributesAttribute inRange:safeRange options:0 usingBlock:^(NSDictionary *dictionary, NSRange effectiveRange, BOOL *stop) { - - id existingValue = [dictionary objectForKey:name]; - - if (existingValue) - { - // need to make it mutable and remove the value - NSMutableDictionary *mutableDictionary = [dictionary mutableCopy]; - [mutableDictionary removeObjectForKey:name]; - - // substitute attribute - - // only re-add modified dictionary if it is not empty - if ([mutableDictionary count]) - { - if (NSFoundationVersionNumber <= NSFoundationVersionNumber10_6_8) // less than OS X 10.7 and less than iOS 5 - { - // remove old (works around iOS 4.3 leak) - [self removeAttribute:DTCustomAttributesAttribute range:effectiveRange]; - } - - [self addAttribute:DTCustomAttributesAttribute value:[mutableDictionary copy] range:effectiveRange]; - } - else - { - [self removeAttribute:DTCustomAttributesAttribute range:effectiveRange]; - } - } - }]; - - [self endEditing]; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSMutableString+HTML.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSMutableString+HTML.h deleted file mode 100644 index f10a4a8..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSMutableString+HTML.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// NSMutableString+HTML.h -// DTCoreText -// -// Created by Oliver Drobnik on 01.02.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import - -/** - Categories needed for modifying mutable strings, as needed for DTCoreText. - */ -@interface NSMutableString (HTML) - -/** - Removes the trailing whitespace from the receiver. - */ -- (void)removeTrailingWhitespace; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSMutableString+HTML.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSMutableString+HTML.m deleted file mode 100644 index 461cbc4..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSMutableString+HTML.m +++ /dev/null @@ -1,37 +0,0 @@ -// -// NSMutableString+HTML.m -// DTCoreText -// -// Created by Oliver Drobnik on 01.02.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "NSMutableString+HTML.h" - - -#define IS_WHITESPACE(_c) (_c == ' ' || _c == '\t' || _c == 0xA || _c == 0xB || _c == 0xC || _c == 0xD || _c == 0x85) - -@implementation NSMutableString (HTML) - -- (void)removeTrailingWhitespace -{ - NSUInteger length = self.length; - - NSInteger lastIndex = length-1; - NSInteger index = lastIndex; - NSInteger whitespaceLength = 0; - - while (index>=0 && IS_WHITESPACE([self characterAtIndex:index])) - { - index--; - whitespaceLength++; - } - - // do the removal once for all whitespace characters - if (whitespaceLength) - { - [self deleteCharactersInRange:NSMakeRange(index+1, whitespaceLength)]; - } -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSNumber+RomanNumerals.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSNumber+RomanNumerals.h deleted file mode 100644 index 1a576a3..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSNumber+RomanNumerals.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// NSNumber+RomanNumerals.h -// DTCoreText -// -// Created by Kai Maschke on 26.07.16. -// Copyright © 2016 Drobnik.com. All rights reserved. -// - -#import - -@interface NSNumber (RomanNumerals) - -- (NSString *)romanNumeral; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSNumber+RomanNumerals.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSNumber+RomanNumerals.m deleted file mode 100644 index d072fec..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSNumber+RomanNumerals.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// NSNumber+RomanNumerals.m -// DTCoreText -// -// Created by Kai Maschke on 26.07.16. -// Copyright © 2016 Drobnik.com. All rights reserved. -// - -#import "NSNumber+RomanNumerals.h" - -@implementation NSNumber (RomanNumerals) - -static NSArray *romanNumerals; -static NSUInteger const romanValues[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; -static NSInteger const romanValueCount = 13; - -- (NSString *)romanNumeral -{ - if (!romanNumerals) { - romanNumerals = @[@"M", @"CM", @"D", @"CD", @"C", @"XC", @"L", @"XL", @"X", @"IX", @"V", @"IV", @"I"]; - } - - NSInteger n = [self integerValue]; - - NSMutableString *numeralString = [NSMutableString string]; - - for (NSUInteger i = 0; i < romanValueCount; i++) - { - while (n >= romanValues[i]) - { - n -= romanValues[i]; - [numeralString appendString:[romanNumerals objectAtIndex:i]]; - } - } - - return numeralString; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSScanner+HTML.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSScanner+HTML.h deleted file mode 100644 index f274952..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSScanner+HTML.h +++ /dev/null @@ -1,55 +0,0 @@ -// -// NSScanner+HTML.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/12/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import - -#import "DTCompatibility.h" - -/** - Extensions for NSScanner to deal with HTML-specific parsing, primarily CSS-related things - */ -@interface NSScanner (HTML) - -/** - @name Working with CSS - */ - -/** - Scans for a CSS attribute used in CSS style sheets - @param name An optional output parameter that will contain the name of the scanned attribute if successful - @param value An optional output parameter that will contain the value of the scanned attribute if successful. This value may be a string or an array. - @returns `YES` if an URL String could be scanned - */ -- (BOOL)scanCSSAttribute:(NSString * __autoreleasing*)name value:(id __autoreleasing*)value; - - -/** - Scans for URLs used in CSS style sheets - @param urlString An optional output parameter that will contain the scanned URL string if successful - @returns `YES` if an URL String could be scanned - */ -- (BOOL)scanCSSURL:(NSString * __autoreleasing*)urlString; - - -/** - Scans for a typical HTML color, typically either #FFFFFF, rgb(255,255,255) or a HTML color name. - @param color An optional output parameter that will contain the scanned color if successful - @returns `YES` if a color could be scanned - */ -- (BOOL)scanHTMLColor:(DTColor * __autoreleasing*)color; - -/** - Scans for a typical HTML color, typically either #FFFFFF, rgb(255,255,255) or a HTML color name. - @param color An optional output parameter that will contain the scanned color if successful - @param name An optional output parameter that will contain the HTML color string - @returns `YES` if a color could be scanned - */ -- (BOOL)scanHTMLColor:(DTColor * __autoreleasing*)color HTMLName:(NSString * __autoreleasing*)name; - -@end - diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSScanner+HTML.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSScanner+HTML.m deleted file mode 100644 index 79f9ab7..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSScanner+HTML.m +++ /dev/null @@ -1,306 +0,0 @@ -// -// NSScanner+HTML.m -// DTCoreText -// -// Created by Oliver Drobnik on 1/12/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "NSScanner+HTML.h" -#import "NSCharacterSet+HTML.h" -#import "DTColorFunctions.h" -#import "NSString+HTML.h" - -@implementation NSScanner (HTML) - -#pragma mark CSS - -// scan a single element from a style list -- (BOOL)scanCSSAttribute:(NSString * __autoreleasing*)name value:(id __autoreleasing*)value -{ - NSString *attrName = nil; - - NSInteger initialScanLocation = [self scanLocation]; - - NSCharacterSet *whiteCharacterSet = [NSCharacterSet whitespaceAndNewlineCharacterSet]; - - NSMutableCharacterSet *nonWhiteCharacterSet = [[NSCharacterSet whitespaceAndNewlineCharacterSet] mutableCopy]; - [nonWhiteCharacterSet formUnionWithCharacterSet:[NSCharacterSet characterSetWithCharactersInString:@";"]]; - [nonWhiteCharacterSet invert]; - - NSMutableCharacterSet *nonWhiteCommaCharacterSet = [[NSCharacterSet whitespaceAndNewlineCharacterSet] mutableCopy]; - [nonWhiteCommaCharacterSet formUnionWithCharacterSet:[NSCharacterSet characterSetWithCharactersInString:@";,"]]; - [nonWhiteCommaCharacterSet invert]; - - - // alphanumeric plus - - NSCharacterSet *cssStyleAttributeNameCharacterSet = [NSCharacterSet cssStyleAttributeNameCharacterSet]; - - if (![self scanCharactersFromSet:cssStyleAttributeNameCharacterSet intoString:&attrName]) - { - return NO; - } - - // skip whitespace - [self scanCharactersFromSet:whiteCharacterSet intoString:NULL]; - - // expect : - if (![self scanString:@":" intoString:NULL]) - { - [self setScanLocation:initialScanLocation]; - return NO; - } - - // skip whitespace - [self scanCharactersFromSet:whiteCharacterSet intoString:NULL]; - - NSMutableArray *results = [NSMutableArray array]; - BOOL nextIterationAddsNewEntry = YES; - - while (![self isAtEnd] && ![self scanString:@";" intoString:NULL] && ![self scanString:@"'';" intoString:NULL] && ![self scanString:@"\"\";" intoString:NULL]) - { - // skip whitespace - [self scanCharactersFromSet:whiteCharacterSet intoString:NULL]; - - NSString *quote = nil; - if ([self scanCharactersFromSet:[NSCharacterSet quoteCharacterSet] intoString:"e]) - { - NSString *quotedValue = nil; - - // attribute is quoted - if (![self scanUpToString:quote intoString:"edValue]) - { - [self setScanLocation:initialScanLocation]; - return NO; - } - else - { - if (nextIterationAddsNewEntry) - { - [results addObject:quotedValue]; - nextIterationAddsNewEntry = NO; - } - else - { - quotedValue = [NSString stringWithFormat:@"%@ %@%@%@", [results lastObject], quote, quotedValue, quote]; - [results removeLastObject]; - [results addObject:quotedValue]; - } - } - - // skip ending quote - [self scanString:quote intoString:NULL]; - - //TODO: decode unicode sequences like "\2022" - } - else - { - // attribute is not quoted, we append elements until we find a ; or the string is at the end - NSString *valueString = nil; - - if ([self scanString:@"rgb(" intoString:&valueString]) - { - if ([valueString isEqualToString:@"rgb("]) - { - [self scanUpToString:@";" intoString:&valueString]; - NSString * formattedRGBString = [NSString stringWithFormat:@"rgb(%@", valueString]; - - if (nextIterationAddsNewEntry) - { - [results addObject:formattedRGBString]; - nextIterationAddsNewEntry = NO; - } - else - { - valueString = [NSString stringWithFormat:@"%@ %@", [results lastObject], formattedRGBString]; - [results removeLastObject]; - [results addObject:valueString]; - } - } - } - else if ([self scanString:@"," intoString:&valueString]) - { - BOOL isStringOnlyCSSProperty = NO; - - if (![valueString isEqualToString:@","]) - { - [results addObject:valueString]; - } - else if ([attrName isEqualToString:@"font"] || - ([attrName rangeOfString:@"color"].location != NSNotFound) || - ([attrName rangeOfString:@"shadow"].location != NSNotFound) || - ([attrName rangeOfString:@"background"].location != NSNotFound)) - { - valueString = [NSString stringWithFormat:@"%@%@", [results lastObject], valueString]; - [results removeLastObject]; - [results addObject:valueString]; - - isStringOnlyCSSProperty = YES; - } - - if ([valueString isEqualToString:@","] && !isStringOnlyCSSProperty) - { - nextIterationAddsNewEntry = YES; - } - } - else if ([self scanCharactersFromSet:nonWhiteCommaCharacterSet intoString:&valueString]) - { - if ([valueString length] && ![valueString isEqualToString:@","]) - { - if (nextIterationAddsNewEntry) { - [results addObject:valueString]; - nextIterationAddsNewEntry = NO; - } else { - valueString = [NSString stringWithFormat:@"%@ %@", [results lastObject], valueString]; - [results removeLastObject]; - [results addObject:valueString]; - } - } - } - } - - // skip whitespace - [self scanCharactersFromSet:whiteCharacterSet intoString:NULL]; - } - - // Success - if (name) - { - *name = attrName; - } - - if (value) - { - if (results.count == 0) { - *value = @""; - } else if (results.count == 1) { - *value = [results objectAtIndex:0]; - } else { - *value = results; - } - } - - return YES; -} - -/* - - Source: http://www.w3.org/TR/CSS1/#url - - The format of a URL value is 'url(' followed by optional white space followed by an optional single quote (') or double quote (") character followed by the URL itself (as defined in [11]) followed by an optional single quote (') or double quote (") character followed by optional whitespace followed by ')'. Quote characters that are not part of the URL itself must be balanced. - - Parentheses, commas, whitespace characters, single quotes (') and double quotes (") appearing in a URL must be escaped with a backslash: '\(', '\)', '\,'. - - Partial URLs are interpreted relative to the source of the style sheet, not relative to the document: -*/ - -// NOTE: Simplified, we assume that there are no quotes in the URL - -- (BOOL)scanCSSURL:(NSString * __autoreleasing*)urlString -{ - if (![self scanString:@"url(" intoString:NULL]) - { - return NO; - } - - - NSCharacterSet *quoteCharacterSet = [NSCharacterSet quoteCharacterSet]; - NSString *quote; - NSString *attrValue; - - if ([self scanCharactersFromSet:quoteCharacterSet intoString:"e]) - { - if ([quote length]==1) - { - [self scanUpToString:quote intoString:&attrValue]; - [self scanString:quote intoString:NULL]; - } - else - { - // most likely e.g. href="" - attrValue = @""; - } - - // decode HTML entities - attrValue = [attrValue stringByReplacingHTMLEntities]; - } - else - { - // non-quoted attribute, ends at ) - if ([self scanUpToString:@")" intoString:&attrValue]) - { - // decode HTML entities - attrValue = [attrValue stringByReplacingHTMLEntities]; - } - } - - if (urlString) - { - *urlString = attrValue; - } - - return YES; -} - -- (BOOL)scanHTMLColor:(DTColor * __autoreleasing*)color -{ - return [self scanHTMLColor:color HTMLName:NULL]; -} - -- (BOOL)scanHTMLColor:(DTColor * __autoreleasing*)color HTMLName:(NSString * __autoreleasing*)name -{ - NSUInteger indexBefore = [self scanLocation]; - - NSString *colorName = nil; - - NSMutableCharacterSet *tokenEndSet = [[NSCharacterSet whitespaceAndNewlineCharacterSet] mutableCopy]; - [tokenEndSet addCharactersInString:@","]; - - if ([self scanString:@"#" intoString:NULL]) - { - self.scanLocation = indexBefore; - - [self scanUpToCharactersFromSet:tokenEndSet intoString:&colorName]; - } - else if ([self scanString:@"rgb" intoString:NULL]) - { - if ([self scanUpToString:@")" intoString:NULL]) - { - self.scanLocation++; - colorName = [[self string] substringWithRange:NSMakeRange(indexBefore, self.scanLocation - indexBefore)]; - - colorName = [colorName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - } - } - else - { - // could be a plain html color name - [self scanCharactersFromSet:[NSCharacterSet alphanumericCharacterSet] intoString:&colorName]; - } - - DTColor *foundColor = nil; - - if (colorName) - { - foundColor = DTColorCreateWithHTMLName(colorName); - } - - if (!foundColor) - { - self.scanLocation = indexBefore; - return NO; - } - - if (color) - { - *color = foundColor; - } - - if (name) { - *name = colorName; - } - - return YES; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+CSS.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+CSS.h deleted file mode 100755 index 0a8f191..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+CSS.h +++ /dev/null @@ -1,57 +0,0 @@ -// -// NSString+CSS.h -// DTCoreText -// -// Created by Oliver Drobnik on 31.01.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -/** - Methods to make dealing with CSS strings easier. Extract shadows from this string, extract CSS styles found in this string, extract the pixel size of a CSS measurement relative to the current text size, and extract the CSS pixel measurement of this string. - */ -@interface NSString (CSS) - -/** - Examine a string for all CSS styles that are applied to it and return a dictionary of those styles. Implemented using scanCSSAttribute: which is defined in NSScanner+HTML.h. - @returns A dictionary of strings containing the CSS styles which are applied to this string. - */ -- (NSDictionary *)dictionaryOfCSSStyles; - -/** - Determines if the receiver contains a CSS length value, that is a number with optional period and unit (em, pt, px). - @returns `YES` if this is a CSS length value - */ -- (BOOL)isCSSLengthValue; - -/** - Calculates a pixel-based length from the receiver based on the current text size in pixels. Used in DTHTMLElement. - @param textSize The current size which the CSS size is relative to. - @param textScale The factor by which absolute sizes are scaled. Set to 1.0f to keep the original value. - @returns A float that is the textSize - */ -- (CGFloat)pixelSizeOfCSSMeasureRelativeToCurrentTextSize:(CGFloat)textSize textScale:(CGFloat)textScale; - -/** - Decodes edge inset values from the CSS attribute string. This is used for margin and padding which might have varying number of elements. - @param textSize The current size which the CSS size is relative to. - @param textScale The factor by which absolute sizes are scaled. Set to 1.0f to keep the original value. - @returns The edge insets that this describes - */ -- (DTEdgeInsets)DTEdgeInsetsRelativeToCurrentTextSize:(CGFloat)textSize textScale:(CGFloat)textScale; - -/** - Parse CSS shadow styles, consisting of color, blur, and offset, out of this string. The input string must be comma delimited in the format: ? ? where the third length and the color are not required per CSS shadows. To calculate the sizes of the blur and offset pixelSizeOfCSSMeasureRelativeToCurrentTextSize is used. Used in DTHTMLElement. - @param textSize In order to determine the shadow offset we need what text size it will be displayed at. - @param color Used if no shadow attribute color is found. - @returns An array of dictionaries, each of which is a shadow consisting of color, blur, and offset keys value pairs. - */ -- (NSArray *)arrayOfCSSShadowsWithCurrentTextSize:(CGFloat)textSize currentColor:(DTColor *)color; - -/** - Decodes a content attribute which might contained unicode sequences. - */ -- (NSString *)stringByDecodingCSSContentAttribute; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+CSS.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+CSS.m deleted file mode 100644 index e70f85a..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+CSS.m +++ /dev/null @@ -1,431 +0,0 @@ -// -// NSString+CSS.m -// DTCoreText -// -// Created by Oliver Drobnik on 31.01.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" -#import "NSString+CSS.h" -#import "NSScanner+HTML.h" -#import "NSCharacterSet+HTML.h" -#import "DTCoreTextConstants.h" - -@implementation NSString (CSS) - -#pragma mark CSS - -- (NSDictionary *)dictionaryOfCSSStyles -{ - // font-size:14px; - NSScanner *scanner = [NSScanner scannerWithString:self]; - - NSString *name = nil; - NSString *value = nil; - - NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary]; - - @autoreleasepool - { - while ([scanner scanCSSAttribute:&name value:&value]) - { - [tmpDict setObject:value forKey:name]; - } - } - - // converting to non-mutable costs 37.5% of method - // return [NSDictionary dictionaryWithDictionary:tmpDict]; - return tmpDict; -} - -- (BOOL)isCSSLengthValue -{ - NSScanner *scanner = [NSScanner scannerWithString:self]; - - NSString *numberStr; - - if (![scanner scanCharactersFromSet:[NSCharacterSet cssLengthValueCharacterSet] intoString:&numberStr]) - { - return NO; - } - - NSString *numberUnitStr; - if (![scanner scanCharactersFromSet:[NSCharacterSet cssLengthUnitCharacterSet] intoString:&numberUnitStr]) - { - return YES; - } - - if ([numberUnitStr isEqualToString:@"em"] | [numberUnitStr isEqualToString:@"px"] | [numberUnitStr isEqualToString:@"pt"]) - { - return YES; - } - - return NO; -} - -- (CGFloat)pixelSizeOfCSSMeasureRelativeToCurrentTextSize:(CGFloat)textSize textScale:(CGFloat)textScale -{ - NSUInteger stringLength = [self length]; - unichar *_characters = calloc(stringLength, sizeof(unichar)); - [self getCharacters:_characters range:NSMakeRange(0, stringLength)]; - - CGFloat value = 0; - - BOOL commaSeen = NO; - BOOL negative = NO; - NSUInteger digitsPastComma = 0; - - NSUInteger i=0; - - for (; i='0' && ch<='9') - { - float digit = (float)(ch-'0'); - value *= 10.0f; - value += digit; - - if (commaSeen) - { - digitsPastComma++; - } - } - else if (ch=='.') - { - commaSeen = YES; - } - else if (ch=='-') - { - negative = YES; - } - else - { - // non-numeric character - break; - } - } - - if (commaSeen) - { - value /= powf(10.0f, digitsPastComma); - } - - // skip whitespace - while (i ? - - if ([scanner scanUpToCharactersFromSet:tokenEndSet intoString:&offsetXString]) - { - if ([scanner scanUpToCharactersFromSet:tokenEndSet intoString:&offsetYString]) - { - // blur is optional - [scanner scanUpToCharactersFromSet:tokenEndSet intoString:&blurString]; - - - CGFloat offset_x = [offsetXString pixelSizeOfCSSMeasureRelativeToCurrentTextSize:textSize textScale:1.0f]; - CGFloat offset_y = [offsetYString pixelSizeOfCSSMeasureRelativeToCurrentTextSize:textSize textScale:1.0f]; - CGSize offset = CGSizeMake(offset_x, offset_y); - CGFloat blur = [blurString pixelSizeOfCSSMeasureRelativeToCurrentTextSize:textSize textScale:1.0f]; - - NSValue *offsetValue; -#if TARGET_OS_IPHONE - offsetValue = [NSValue valueWithCGSize:offset]; -#else - offsetValue = [NSValue valueWithSize:offset]; -#endif - - NSDictionary *shadowDict = [NSDictionary dictionaryWithObjectsAndKeys:offsetValue, @"Offset", - DTNSNumberFromCGFloat(blur), @"Blur", - shadowColor, @"Color", nil]; - - [tmpArray addObject:shadowDict]; - } - } - } - else - { - // format: ? ? - - if ([scanner scanUpToCharactersFromSet:tokenEndSet intoString:&offsetXString]) - { - if ([scanner scanUpToCharactersFromSet:tokenEndSet intoString:&offsetYString]) - { - // blur is optional - if (![scanner scanHTMLColor:&shadowColor]) - { - if ([scanner scanUpToCharactersFromSet:tokenEndSet intoString:&blurString]) - { - if (![scanner scanHTMLColor:&shadowColor]) - { - // invalid color, we ignore this color - } - } - } - - if (!shadowColor) - { - // color is same as color attribute of style - shadowColor = color; - } - - CGFloat offset_x = [offsetXString pixelSizeOfCSSMeasureRelativeToCurrentTextSize:textSize textScale:1.0f]; - CGFloat offset_y = [offsetYString pixelSizeOfCSSMeasureRelativeToCurrentTextSize:textSize textScale:1.0f]; - CGSize offset = CGSizeMake(offset_x, offset_y); - CGFloat blur = [blurString pixelSizeOfCSSMeasureRelativeToCurrentTextSize:textSize textScale:1.0f]; - - NSValue *offsetValue; -#if TARGET_OS_IPHONE - offsetValue = [NSValue valueWithCGSize:offset]; -#else - offsetValue = [NSValue valueWithSize:offset]; -#endif - - NSDictionary *shadowDict = [NSDictionary dictionaryWithObjectsAndKeys:offsetValue, @"Offset", - DTNSNumberFromCGFloat(blur), @"Blur", - shadowColor, @"Color", nil]; - - [tmpArray addObject:shadowDict]; - } - } - } - - // now there should be a comma - if (![scanner scanString:@"," intoString:NULL]) - { - break; - } - } - - // only return array if not empty - if ([tmpArray count]) - { - return tmpArray; - } - - return nil; -} - -- (NSString *)stringByDecodingCSSContentAttribute -{ - NSUInteger length = [self length]; - - unichar *characters = calloc(length, sizeof(unichar)); - unichar *final = calloc(length, sizeof(unichar)); - - [self getCharacters:characters range:NSMakeRange(0, length)]; - - NSUInteger outChars = 0; - - BOOL inEscapedSequence = NO; - unichar decodedChar = 0; - NSUInteger escapedCharacterCount = 0; - - for (NSUInteger idx=0; idx='0' && character<='9') || (character>='A' && character<='F') || (character>='a' && character<='f')) - { - // hex digit - decodedChar *= 16; - - if (character>='0' && character<='9') - { - decodedChar += (character - '0'); - } - else if (character>='A' && character<='F') - { - decodedChar += (character - 'A' + 10); - } - else if (character>='a' && character<='f') - { - decodedChar += (character - 'a' + 10); - } - - escapedCharacterCount++; - } - else - { - // illegal character following slash - final[outChars++] = '\\'; - final[outChars++] = character; - - inEscapedSequence = NO; - } - } - else - { - if (inEscapedSequence) - { - // output what we have decoded so far - final[outChars++] = decodedChar; - } - - if (character == '\\') - { - // begin of escape sequence - decodedChar = 0; - escapedCharacterCount = 0; - inEscapedSequence = YES; - } - else - { - inEscapedSequence = NO; - - // just copy - final[outChars++] = character; - } - } - } - - // if string ended in escaped sequence we still need to output - if (inEscapedSequence) - { - // output what we have decoded so far - final[outChars++] = decodedChar; - } - - free(characters); - NSString *clean = [[NSString alloc] initWithCharacters:final length:outChars]; - free(final); - - return clean; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+HTML.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+HTML.h deleted file mode 100644 index 5b3cba3..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+HTML.h +++ /dev/null @@ -1,89 +0,0 @@ -// -// NSString+HTML.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/9/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import - -/** - Methods for making HTML strings easier and quicker to handle. - */ -@interface NSString (HTML) - -/** - Extract the numbers from this string and return them as an NSUInteger. - @returns An NSUInteger of the number characters in this string. - */ -- (NSUInteger)integerValueFromHex; - - -/** - Test whether or not this string is numeric only. - @returns If this string consists only of numeric characters 0-9. - */ -- (BOOL)dt_isNumeric; - -/** - Test whether the entire receiver consists of only whitespace characters. - @returns `YES` if the receiver only has whitespace and newline characters - */ -- (BOOL)isIgnorableWhitespace; - -/** - Read through this string and store the numbers included, then divide them by 100 giving a percentage. - @returns The numbers contained in this string, as a percentage. - */ -- (float)percentValue; - - -/** - Return a copy of this string with all whitespace characters replaced by space characters. - @returns A copy of this string with only space characters for whitespace. - */ -- (NSString *)stringByNormalizingWhitespace; - - -/** - Determines if the first character of this string is in the parameter characterSet. - @param characterSet The character set to compare the first character of this string against. - @returns If the first character of this string is in character set. - */ -- (BOOL)hasPrefixCharacterFromSet:(NSCharacterSet *)characterSet; - - -/** - Determines if the last character of this string is in the parameter characterSet. - @param characterSet The character set to compare the last character of this string against. - @returns If the last character of this string is in the character set. - */ -- (BOOL)hasSuffixCharacterFromSet:(NSCharacterSet *)characterSet; - - -/** - Convert a string into a proper HTML string by converting special characters into HTML entities. For example: an ellipsis `…` is represented by the entity `…` in order to display it correctly across text encodings. - @returns A string containing HTML that now uses proper HTML entities. - */ -- (NSString *)stringByAddingHTMLEntities; - - -/** - Convert a string from HTML entities into correct character representations using UTF8 encoding. For example: an ellipsis entity represented by `…` is converted into `…`. - @returns A string without HTML entities, instead having the actual characters formerly represented by HTML entities. - */ -- (NSString *)stringByReplacingHTMLEntities; - - -/** - Replaces occurrences of more two or more spaces with a range of alternating non-breaking space and regular space. It also encloses these parts with a span of class 'Apple-converted-space' - */ -- (NSString *)stringByAddingAppleConvertedSpace; - -/** -Percent-encodes all characters outside the normal ASCII range -*/ -- (NSString *)stringByEncodingNonASCIICharacters; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+HTML.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+HTML.m deleted file mode 100644 index f528f12..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+HTML.m +++ /dev/null @@ -1,811 +0,0 @@ -// -// NSString+HTML.m -// DTCoreText -// -// Created by Oliver Drobnik on 1/9/11. -// Copyright 2011 Drobnik.com. All rights reserved. -// - -#import "NSString+HTML.h" -#import "NSCharacterSet+HTML.h" -#import "DTCoreTextConstants.h" -#import - -static NSDictionary *entityLookup = nil; -static NSDictionary *entityReverseLookup = nil; - -@implementation NSString (HTML) - -- (NSUInteger)integerValueFromHex -{ - unsigned long result = 0; - sscanf([self UTF8String], "%lx", &result); - return (NSUInteger)result; -} - -- (BOOL)dt_isNumeric -{ - const char *s = [self UTF8String]; - - for (size_t i=0;i'9') && (s[i] != '.')) - { - return NO; - } - } - - return YES; -} - -- (BOOL)isIgnorableWhitespace -{ - NSCharacterSet *whitespaceCharacterSet = [NSCharacterSet ignorableWhitespaceCharacterSet]; - - NSString *tmpStr = [self stringByTrimmingCharactersInSet:whitespaceCharacterSet]; - - return [tmpStr length]==0; -} - -- (float)percentValue -{ - float result = 1; - sscanf([self UTF8String], "%f", &result); - - return result/100.0f; -} - -- (NSString *)stringByNormalizingWhitespace -{ - NSInteger stringLength = [self length]; - - // reserve buffer, same size as input - unichar *_characters = calloc(stringLength, sizeof(unichar)); - [self getCharacters:_characters range:NSMakeRange(0, stringLength)]; - - NSInteger outputLength = 0; - BOOL inWhite = NO; - - - // we output to the same buffer as the input was - for (NSInteger i = 0; i", [NSNumber numberWithInteger:0x2028], - nil]; - - }); - - NSMutableString *tmpString = [NSMutableString string]; - - for (NSUInteger i = 0; i<[self length]; i++) - { - unichar oneChar = [self characterAtIndex:i]; - - NSNumber *subKey = [NSNumber numberWithInteger:oneChar]; - NSString *entity = [entityReverseLookup objectForKey:subKey]; - - if (entity) - { - [tmpString appendString:entity]; - } - else - { - if (oneChar<=255) - { - // output as is - [tmpString appendFormat:@"%C", oneChar]; - } - else if (CFStringIsSurrogateHighCharacter(oneChar) && i < [self length]-1) - { - i++; - unichar surrogateLowChar = [self characterAtIndex:i]; - UTF32Char u32code = CFStringGetLongCharacterForSurrogatePair(oneChar, surrogateLowChar); - [tmpString appendFormat:@"&#%lu;", (unsigned long)u32code]; - } - else - { - // output encoded - [tmpString appendFormat:@"&#%d;", oneChar]; - } - } - } - - return tmpString; -} - -- (NSString *)stringByReplacingHTMLEntities -{ - static dispatch_once_t predicate; - dispatch_once(&predicate, ^{ - entityLookup = [[NSDictionary alloc] initWithObjectsAndKeys:@"\x22", @"quot", - @"\x26", @"amp", - @"\x27", @"apos", - @"\x3c", @"lt", - @"\x3e", @"gt", - @"\u00a0", @"nbsp", - @"\u00a1", @"iexcl", - @"\u00a2", @"cent", - @"\u00a3", @"pound", - @"\u00a4", @"curren", - @"\u00a5", @"yen", - @"\u00a6", @"brvbar", - @"\u00a7", @"sect", - @"\u00a8", @"uml", - @"\u00a9", @"copy", - @"\u00aa", @"ordf", - @"\u00ab", @"laquo", - @"\u00ac", @"not", - @"\u00ae", @"reg", - @"\u00af", @"macr", - @"\u00b0", @"deg", - @"\u00b1", @"plusmn", - @"\u00b2", @"sup2", - @"\u00b3", @"sup3", - @"\u00b4", @"acute", - @"\u00b5", @"micro", - @"\u00b6", @"para", - @"\u00b7", @"middot", - @"\u00b8", @"cedil", - @"\u00b9", @"sup1", - @"\u00ba", @"ordm", - @"\u00bb", @"raquo", - @"\u00bc", @"frac14", - @"\u00bd", @"frac12", - @"\u00be", @"frac34", - @"\u00bf", @"iquest", - @"\u00c0", @"Agrave", - @"\u00c1", @"Aacute", - @"\u00c2", @"Acirc", - @"\u00c3", @"Atilde", - @"\u00c4", @"Auml", - @"\u00c5", @"Aring", - @"\u00c6", @"AElig", - @"\u00c7", @"Ccedil", - @"\u00c8", @"Egrave", - @"\u00c9", @"Eacute", - @"\u00ca", @"Ecirc", - @"\u00cb", @"Euml", - @"\u00cc", @"Igrave", - @"\u00cd", @"Iacute", - @"\u00ce", @"Icirc", - @"\u00cf", @"Iuml", - @"\u00d0", @"ETH", - @"\u00d1", @"Ntilde", - @"\u00d2", @"Ograve", - @"\u00d3", @"Oacute", - @"\u00d4", @"Ocirc", - @"\u00d5", @"Otilde", - @"\u00d6", @"Ouml", - @"\u00d7", @"times", - @"\u00d8", @"Oslash", - @"\u00d9", @"Ugrave", - @"\u00da", @"Uacute", - @"\u00db", @"Ucirc", - @"\u00dc", @"Uuml", - @"\u00dd", @"Yacute", - @"\u00de", @"THORN", - @"\u00df", @"szlig", - @"\u00e0", @"agrave", - @"\u00e1", @"aacute", - @"\u00e2", @"acirc", - @"\u00e3", @"atilde", - @"\u00e4", @"auml", - @"\u00e5", @"aring", - @"\u00e6", @"aelig", - @"\u00e7", @"ccedil", - @"\u00e8", @"egrave", - @"\u00e9", @"eacute", - @"\u00ea", @"ecirc", - @"\u00eb", @"euml", - @"\u00ec", @"igrave", - @"\u00ed", @"iacute", - @"\u00ee", @"icirc", - @"\u00ef", @"iuml", - @"\u00f0", @"eth", - @"\u00f1", @"ntilde", - @"\u00f2", @"ograve", - @"\u00f3", @"oacute", - @"\u00f4", @"ocirc", - @"\u00f5", @"otilde", - @"\u00f6", @"ouml", - @"\u00f7", @"divide", - @"\u00f8", @"oslash", - @"\u00f9", @"ugrave", - @"\u00fa", @"uacute", - @"\u00fb", @"ucirc", - @"\u00fc", @"uuml", - @"\u00fd", @"yacute", - @"\u00fe", @"thorn", - @"\u00ff", @"yuml", - @"\u0152", @"OElig", - @"\u0153", @"oelig", - @"\u0160", @"Scaron", - @"\u0161", @"scaron", - @"\u0178", @"Yuml", - @"\u0192", @"fnof", - @"\u02c6", @"circ", - @"\u02dc", @"tilde", - @"\u0393", @"Gamma", - @"\u0394", @"Delta", - @"\u0398", @"Theta", - @"\u039b", @"Lambda", - @"\u039e", @"Xi", - @"\u03a3", @"Sigma", - @"\u03a5", @"Upsilon", - @"\u03a6", @"Phi", - @"\u03a8", @"Psi", - @"\u03a9", @"Omega", - @"\u03b1", @"alpha", - @"\u0391", @"Alpha", - @"\u03b2", @"beta", - @"\u0392", @"Beta", - @"\u03b3", @"gamma", - @"\u03b4", @"delta", - @"\u03b5", @"epsilon", - @"\u0395", @"Epsilon", - @"\u03b6", @"zeta", - @"\u0396", @"Zeta", - @"\u03b7", @"eta", - @"\u0397", @"Eta", - @"\u03b8", @"theta", - @"\u03b9", @"iota", - @"\u0399", @"Iota", - @"\u03ba", @"kappa", - @"\u039a", @"Kappa", - @"\u03bb", @"lambda", - @"\u03bc", @"mu", - @"\u039c", @"Mu", - @"\u03bd", @"nu", - @"\u039d", @"Nu", - @"\u03be", @"xi", - @"\u03bf", @"omicron", - @"\u039f", @"Omicron", - @"\u03c0", @"pi", - @"\u03a0", @"Pi", - @"\u03c1", @"rho", - @"\u03a1", @"Rho", - @"\u03c2", @"sigmaf", - @"\u03c3", @"sigma", - @"\u03c4", @"tau", - @"\u03a4", @"Tau", - @"\u03c5", @"upsilon", - @"\u03c6", @"phi", - @"\u03c7", @"chi", - @"\u03a7", @"Chi", - @"\u03c8", @"psi", - @"\u03c9", @"omega", - @"\u03d1", @"thetasym", - @"\u03d2", @"upsih", - @"\u03d6", @"piv", - @"\u2002", @"ensp", - @"\u2003", @"emsp", - @"\u2009", @"thinsp", - @"\u2013", @"ndash", - @"\u2014", @"mdash", - @"\u2018", @"lsquo", - @"\u2019", @"rsquo", - @"\u201a", @"sbquo", - @"\u201a", @"bsquo", - @"\u201c", @"ldquo", - @"\u201d", @"rdquo", - @"\u201e", @"bdquo", - @"\u2020", @"dagger", - @"\u2021", @"Dagger", - @"\u2022", @"bull", - @"\u2026", @"hellip", - @"\u2030", @"permil", - @"\u2032", @"prime", - @"\u2033", @"Prime", - @"\u2039", @"lsaquo", - @"\u203a", @"rsaquo", - @"\u203e", @"oline", - @"\u2044", @"frasl", - @"\u20ac", @"euro", - @"\u2111", @"image", - @"\u2118", @"weierp", - @"\u211c", @"real", - @"\u2122", @"trade", - @"\u2135", @"alefsym", - @"\u2190", @"larr", - @"\u2191", @"uarr", - @"\u2192", @"rarr", - @"\u2193", @"darr", - @"\u2194", @"harr", - @"\u21b5", @"crarr", - @"\u21d0", @"lArr", - @"\u21d1", @"uArr", - @"\u21d2", @"rArr", - @"\u21d3", @"dArr", - @"\u21d4", @"hArr", - @"\u2200", @"forall", - @"\u2202", @"part", - @"\u2203", @"exist", - @"\u2205", @"empty", - @"\u2207", @"nabla", - @"\u2208", @"isin", - @"\u2209", @"notin", - @"\u220b", @"ni", - @"\u220f", @"prod", - @"\u2211", @"sum", - @"\u2212", @"minus", - @"\u2217", @"lowast", - @"\u221a", @"radic", - @"\u221d", @"prop", - @"\u221e", @"infin", - @"\u2220", @"ang", - @"\u2227", @"and", - @"\u2228", @"or", - @"\u2229", @"cap", - @"\u222a", @"cup", - @"\u222b", @"int", - @"\u2234", @"there4", - @"\u223c", @"sim", - @"\u2245", @"cong", - @"\u2248", @"asymp", - @"\u2260", @"ne", - @"\u2261", @"equiv", - @"\u2264", @"le", - @"\u2265", @"ge", - @"\u2282", @"sub", - @"\u2283", @"sup", - @"\u2284", @"nsub", - @"\u2286", @"sube", - @"\u2287", @"supe", - @"\u2295", @"oplus", - @"\u2297", @"otimes", - @"\u22a5", @"perp", - @"\u22c5", @"sdot", - @"\u2308", @"lceil", - @"\u2309", @"rceil", - @"\u230a", @"lfloor", - @"\u230b", @"rfloor", - @"\u27e8", @"lang", - @"\u27e9", @"rang", - @"\u25ca", @"loz", - @"\u2660", @"spades", - @"\u2663", @"clubs", - @"\u2665", @"hearts", - @"\u2666", @"diams", - nil]; - - }); - - NSScanner *scanner = [NSScanner scannerWithString:self]; - [scanner setCharactersToBeSkipped:nil]; - - NSMutableString *output = [NSMutableString string]; - - - while (![scanner isAtEnd]) - { - NSString *scanned = nil; - - if ([scanner scanUpToString:@"&" intoString:&scanned]) - { - [output appendString:scanned]; - } - - if ([scanner scanString:@"&" intoString:NULL]) - { - NSUInteger originalLocation = scanner.scanLocation; - BOOL matched = NO; - NSString *afterAmpersand = nil; - - if ([scanner scanString:@"#x" intoString:NULL]) - { - unsigned long long scannedLongLong; - - if ([scanner scanHexLongLong:&scannedLongLong] && scannedLongLong <= UINT32_MAX && [scanner scanString:@";" intoString:NULL]) - { - UTF32Char inputChar = (UTF32Char)CFSwapInt32HostToLittle((UTF32Char)scannedLongLong); - NSString *string = [[NSString alloc] initWithBytes:&inputChar length:4 encoding:NSUTF32LittleEndianStringEncoding]; - [output appendString:string]; - matched = YES; - } - } - else if ([scanner scanString:@"#" intoString:NULL]) - { - unsigned long long scannedLongLong; - - if ([scanner scanUnsignedLongLong:&scannedLongLong] && scannedLongLong <= UINT32_MAX && [scanner scanString:@";" intoString:NULL]) - { - UTF32Char inputChar = (UTF32Char)CFSwapInt32HostToLittle((UTF32Char)scannedLongLong); - NSString *string = [[NSString alloc] initWithBytes:&inputChar length:4 encoding:NSUTF32LittleEndianStringEncoding]; - [output appendString:string]; - matched = YES; - } - } - else if ([scanner scanUpToString:@";" intoString:&afterAmpersand] && [scanner scanString:@";" intoString:NULL]) - { - NSString *converted = [entityLookup objectForKey:afterAmpersand]; - - if (converted) - { - [output appendString:converted]; - matched = YES; - } - } - - if (!matched) - { - [output appendString:@"&"]; - scanner.scanLocation = originalLocation; - } - } - } - - - return [NSString stringWithString:output]; -} - -- (NSString *)stringByAddingAppleConvertedSpace -{ - NSMutableString *output = [NSMutableString string]; - - NSScanner *scanner = [NSScanner scannerWithString:self]; - scanner.charactersToBeSkipped = nil; - - NSCharacterSet *spaceSet = [NSCharacterSet characterSetWithCharactersInString:@" "]; - - while (![scanner isAtEnd]) - { - NSString *part; - if ([scanner scanUpToString:@" " intoString:&part]) - { - [output appendString:part]; - } - - NSString *spaces; - if ([scanner scanCharactersFromSet:spaceSet intoString:&spaces]) - { - // first space always output as is - [output appendString:@" "]; - - NSUInteger numSpaces = [spaces length]-1; - - if (numSpaces > 0) - { - [output appendString:@""]; - - // alternate nbsp; and normal space - for (NSUInteger i=0; i"]; - } - } - } - - return output; -} - -- (NSString *)stringByEncodingNonASCIICharacters -{ -#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_7_0 - return [self stringByURLEncoding]; -#else - return [self stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet ASCIICharacterSet]]; -#endif -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+Paragraphs.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+Paragraphs.h deleted file mode 100644 index 1ee3168..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+Paragraphs.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// NSString+Paragraphs.h -// DTRichTextEditor -// -// Created by Oliver Drobnik on 11/11/11. -// Copyright (c) 2011 Cocoanetics. All rights reserved. -// - -#import - -/** - Methods simplifying dealing with text that is in paragraphs. - - The character used to separate paragraphs from each other is '\n'. - */ -@interface NSString (Paragraphs) - -/** - Extends the given range such that it contains only full paragraphs. - - @param range The string range - @param parBegIndex An optional output parameter that is filled with the beginning index of the extended range - @param parEndIndex An optional output parameter that is filled with the ending index of the extended range - @returns The extended string range - */ -- (NSRange)rangeOfParagraphsContainingRange:(NSRange)range parBegIndex:(NSUInteger *)parBegIndex parEndIndex:(NSUInteger *)parEndIndex; - - -/** - Determines if the given index is the first character of a new paragraph. - - This is done by examining the string, index 0 or characters following a newline are considered to be a first character of a new paragraph. - @param index The index to examine - @returns `YES` if the given index is the first character of a new paragraph, `NO` otherwise - */ -- (BOOL)indexIsAtBeginningOfParagraph:(NSUInteger)index; - -/** - Returns the string range of the paragraph with the given index. - - @param index The paragraph index to inspect - @returns The string range of the paragraph - */ -- (NSRange)rangeOfParagraphAtIndex:(NSUInteger)index; - - -/** - Counts the number of paragraphs in the receiver - @returns The number of paragraph characters (\n) in the receiver - */ -- (NSUInteger)numberOfParagraphs; - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+Paragraphs.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+Paragraphs.m deleted file mode 100644 index 5cdb27c..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/NSString+Paragraphs.m +++ /dev/null @@ -1,74 +0,0 @@ -// -// NSString+Paragraphs.m -// DTRichTextEditor -// -// Created by Oliver Drobnik on 11/11/11. -// Copyright (c) 2011 Cocoanetics. All rights reserved. -// - -#import "NSString+Paragraphs.h" - -@implementation NSString (Paragraphs) - -- (NSRange)rangeOfParagraphsContainingRange:(NSRange)range parBegIndex:(NSUInteger *)parBegIndex parEndIndex:(NSUInteger *)parEndIndex -{ - // get beginning and end of paragraph containing the replaced range - CFIndex beginIndex; - CFIndex endIndex; - - CFStringGetParagraphBounds((__bridge CFStringRef)self, CFRangeMake(range.location, range.length), &beginIndex, &endIndex, NULL); - - if (parBegIndex) - { - *parBegIndex = beginIndex; - } - - if (parEndIndex) - { - *parEndIndex = endIndex; - } - - // endIndex is the first character of the following paragraph, so we don't need to add 1 - - return NSMakeRange(beginIndex, endIndex - beginIndex); -} - -- (BOOL)indexIsAtBeginningOfParagraph:(NSUInteger)index -{ - // index zero is beginning of first paragraph - if (!index) - { - return YES; - } - - // beginning of any other paragraph is after NL - if ([self characterAtIndex:index-1] == '\n') - { - return YES; - } - - // no beginning - return NO; -} - -- (NSRange)rangeOfParagraphAtIndex:(NSUInteger)index -{ - return [self rangeOfParagraphsContainingRange:NSMakeRange(index, 1) parBegIndex:NULL parEndIndex:NULL]; -} - -- (NSUInteger)numberOfParagraphs -{ - NSUInteger retValue = 0; - - for (NSUInteger i=0; i<[self length]; i++) - { - if ([self characterAtIndex:i] == '\n') - { - retValue++; - } - } - - return retValue; -} - -@end diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/UIFont+DTCoreText.h b/ReadViewDemo/Pods/DTCoreText/Core/Source/UIFont+DTCoreText.h deleted file mode 100644 index 8867a56..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/UIFont+DTCoreText.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// UIFont+DTCoreText.h -// DTCoreText -// -// Created by Oliver Drobnik on 11.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "DTCompatibility.h" - -#if TARGET_OS_IPHONE - -#import - -/** - Methods to translate from `CTFont` to `UIFont` - */ - -@interface UIFont (DTCoreText) - -/** - Creates a UIFont that matches the provided CTFont. - @param ctFont a `CTFontRef` - @returns The matching UIFont - */ -+ (UIFont *)fontWithCTFont:(CTFontRef)ctFont; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/UIFont+DTCoreText.m b/ReadViewDemo/Pods/DTCoreText/Core/Source/UIFont+DTCoreText.m deleted file mode 100644 index 9caa8cf..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/UIFont+DTCoreText.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// UIFont+DTCoreText.m -// DTCoreText -// -// Created by Oliver Drobnik on 11.12.12. -// Copyright (c) 2012 Drobnik.com. All rights reserved. -// - -#import "UIFont+DTCoreText.h" - -#if TARGET_OS_IPHONE - -@implementation UIFont (DTCoreText) - -+ (UIFont *)fontWithCTFont:(CTFontRef)ctFont -{ - NSString *fontName = (__bridge_transfer NSString *)CTFontCopyName(ctFont, kCTFontPostScriptNameKey); - - CGFloat fontSize = CTFontGetSize(ctFont); - UIFont *font = [UIFont fontWithName:fontName size:fontSize]; - - // fix for missing HelveticaNeue-Italic font in iOS 7.0.x - if (!font && [fontName isEqualToString:@"HelveticaNeue-Italic"]) - { - font = [UIFont fontWithName:@"HelveticaNeue-LightItalic" size:fontSize]; - } - - return font; -} - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTCoreText/Core/Source/default.css b/ReadViewDemo/Pods/DTCoreText/Core/Source/default.css deleted file mode 100644 index 88cbe25..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Core/Source/default.css +++ /dev/null @@ -1,267 +0,0 @@ -/* these styles come from Safari */ - -/* note that comments are only permitted before selectors and before the styles */ - -/* DO NOT fiddle with this file if you want to have your own styles, - pass your own stylesheet via the option parameter to override these defaults */ - -html -{ - /* bla */ - display:block; -} - -head -{ - display:none; -} - -title -{ - display:none; -} - -style -{ - display:none; -} - -body -{ - /* safari has a 8 px margin here */ - display:block; -} - -article,aside,footer,header,hgroup,nav,section -{ - display:block; -} - -p -{ - display:block; - -webkit-margin-after:1em; - -webkit-margin-start:0; - -webkit-margin-end:0; -} - -ul,menu,dir -{ - display:block; - list-style-type:disc; - -webkit-margin-before:1em; - -webkit-margin-after:1em; - -webkit-margin-start:0; - -webkit-margin-end:0; - -webkit-padding-start:27px; -} - -li -{ - display:list-item; -} - -ol -{ - display:block; - list-style-type:decimal; - -webkit-margin-before:1em; - -webkit-margin-after:1em; - -webkit-margin-start:0; - -webkit-margin-end:0; - -webkit-padding-start:27px; -} - -ul ul, ol ul -{ - list-style-type: circle; -} - -ol ol ul, ol ul ul, ul ol ul, ul ul ul -{ - list-style-type: square; -} - -code -{ - font-family:Courier; -} - -pre, xmp, plaintext, listing -{ - display: block; - font-family: monospace; - white-space: pre; - margin: 1em 0px; -} - -/* color:-webkit-link */ -a -{ - color:#0000EE; - text-decoration:underline; -} - -a:active {color:#FF0000;} /* link while finger down */ - -center -{ - text-align:center; - display:block; -} - -strong,b -{ - font-weight:bolder; -} - -i,em -{ - font-style:italic; -} - -u -{ - text-decoration:underline; -} - -big -{ - font-size:bigger; -} - -small -{ - font-size:smaller; -} - -sub -{ - font-size:smaller; - vertical-align:sub; -} - -sup -{ - font-size:smaller; - vertical-align:super; -} - -s,strike,del -{ - text-decoration:line-through; -} - -tt,code,kbd,samp -{ - font-family:monospace; -} - -pre,xmp,plaintext,listing -{ - display:block; - font-family:monospace; - white-space:pre; - margin-top:1em; - margin-right:0; - margin-bottom:1em; - margin-left:0; -} - -h1 -{ - display:block; - font-size:2em; - -webkit-margin-before:.67em; - -webkit-margin-after:.67em; - -webkit-margin-start:0; - -webkit-margin-end:0; - font-weight:bold; -} - -h2 -{ - display:block; - font-size:1.5em; - -webkit-margin-before:.83em; - -webkit-margin-after:.83em; - -webkit-margin-start:0; - -webkit-margin-end:0; - font-weight:bold; -} - -h3 -{ - display:block; - font-size:1.17em; - -webkit-margin-before:1em; - -webkit-margin-after:1em; - -webkit-margin-start:0; - -webkit-margin-end:0; - font-weight:bold; -} - -h4 -{ - display:block; - -webkit-margin-before:1.33em; - -webkit-margin-after:1.33em; - -webkit-margin-start:0; - -webkit-margin-end:0; - font-weight:bold; -} - -h5 -{ - display:block; - font-size:.83em; - -webkit-margin-before:1.67em; - -webkit-margin-after:1.67em; - -webkit-margin-start:0; - -webkit-margin-end:0; - font-weight:bold; -} - -h6 -{ - display:block; - font-size:.67em; - -webkit-margin-before:2.33em; - -webkit-margin-after:2.33em; - -webkit-margin-start:0; - -webkit-margin-end:0; - font-weight:bold; -} - -div { - display: block; -} - -link { - display: none; -} - -meta { - display: none; -} - -script { - display: none; -} - -hr { - display: block; - -webkit-margin-before: 0.5em; - -webkit-margin-after: 0.5em; - -webkit-margin-start: auto; - -webkit-margin-end: auto; - border-style: inset; - border-width: 1px; -} - -table { - display: table; - border-collapse: separate; - border-spacing: 2px; - border-color: gray; -} diff --git a/ReadViewDemo/Pods/DTCoreText/LICENSE b/ReadViewDemo/Pods/DTCoreText/LICENSE deleted file mode 100644 index b773399..0000000 --- a/ReadViewDemo/Pods/DTCoreText/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011, Oliver Drobnik All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/ReadViewDemo/Pods/DTCoreText/Readme.markdown b/ReadViewDemo/Pods/DTCoreText/Readme.markdown deleted file mode 100644 index 94b4101..0000000 --- a/ReadViewDemo/Pods/DTCoreText/Readme.markdown +++ /dev/null @@ -1,33 +0,0 @@ -DTCoreText -========== - -This project aims to duplicate the methods present on Mac OSX which allow creation of `NSAttributedString` from HTML code on iOS. - -The project covers two broad areas: - -1. **Layouting** - Interfacing with CoreText, generating attributed strings from HTML code -2. **User Interface** - UI-related classes render these objects, specifically `DTAttributedTextView`, `DTAttributedLabel` and `DTAttributedTextCell`. - -This is useful for drawing simple rich text like any HTML document without having to use a web view. For text selection and highlighting (as you might need for an Editor or Reader) there is the commercial **DTRichTextEditor** component which can be purchased in the [Cocoanetics Parts Store](http://www.cocoanetics.com/parts/dtrichtexteditor/). - -Documentation -------------- - -Documentation can be [browsed online](https://docs.cocoanetics.com/DTCoreText) or installed in your Xcode Organizer via the [Atom Feed URL](https://docs.cocoanetics.com/DTCoreText/DTCoreText.atom). - -A [Q&A](http://www.cocoanetics.com/2011/08/nsattributedstringhtml-qa/) answers some frequently asked questions. - -Changelog: [GitHub Releases](https://github.com/Cocoanetics/DTCoreText/releases) - -There is also a [Programming Guide](Documentation/Programming%20Guide-template.markdown) with a set of solutions to common problems. - -Follow [@cocoanetics](http://twitter.com/cocoanetics) on Twitter or subscribe to the [Cocoanetics Blog](http://www.cocoanetics.com) for news and updates. - -License -------- - -It is open source and covered by a standard 2-clause BSD license. That means you have to mention *Cocoanetics* as the original author of this code and reproduce the LICENSE text inside your app. - -You can purchase a [Non-Attribution-License](https://www.cocoanetics.com/order/?product_id=DTCoreText) for 75 Euros for not having to include the LICENSE text. - -We also accept sponsorship for specific enhancements which you might need. Please [contact us via email](mailto:oliver@cocoanetics.com?subject=DTCoreText) for inquiries. diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTBase64Coding.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTBase64Coding.h deleted file mode 100644 index 4cc0a87..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTBase64Coding.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// DTBase64Coding.h -// DTFoundation -// -// Created by Oliver Drobnik on 04.03.13. -// Copyright (c) 2013 Cocoanetics. All rights reserved. -// - -#import - -/** - Utility class for encoding and decoding data in base64 format. - - This was formerly a category on `NSData` but since Matt Gallagher's category has become so enormously popular people where reporting more and more conflicts. Thus we decided to move it into a properly named class. - - Since all methods are class methods you never need to actually initialize it, doing so will raises a `DTAbstractClassException`. - */ - -@interface DTBase64Coding : NSObject - -/** - Encoding and Decoding - */ - -/** - Encodes data as base64 string. - @param data The data to encode - @returns The encoded string - */ -+ (NSString *)stringByEncodingData:(NSData *)data; - -/** - Encodes data as base64 string. - @param string The string with data encoded in base64 format - @returns data The decoded data - */ -+ (NSData *)dataByDecodingString:(NSString *)string; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTBase64Coding.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTBase64Coding.m deleted file mode 100644 index e242e57..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTBase64Coding.m +++ /dev/null @@ -1,296 +0,0 @@ -// -// DTBase64Coding.m -// DTFoundation -// -// Original code from NSData+Base64.m -// -// Created by Matt Gallagher on 2009/06/03. -// Copyright 2009 Matt Gallagher. All rights reserved. -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. Permission is granted to anyone to -// use this software for any purpose, including commercial applications, and to -// alter it and redistribute it freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source -// distribution. - - -#import "DTBase64Coding.h" - - -// Function Prototypes -void *DT__NewBase64Decode(const char *inputBuffer, size_t length, size_t *outputLength); -char *DT__NewBase64Encode(const void *buffer, size_t length, bool separateLines, size_t *outputLength); - -// -// Mapping from 6 bit pattern to ASCII character. -// -static unsigned char base64EncodeLookup[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - -// -// Definition for "masked-out" areas of the base64DecodeLookup mapping -// -#define xx 65 - -// -// Mapping from ASCII character to 6 bit pattern. -// -static unsigned char base64DecodeLookup[256] = -{ - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 62, xx, xx, xx, 63, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, xx, xx, xx, xx, xx, xx, - xx, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, xx, xx, xx, xx, xx, - xx, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, xx, xx, xx, xx, xx, - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, -}; - -// -// Fundamental sizes of the binary and base64 encode/decode units in bytes -// -#define BINARY_UNIT_SIZE 3 -#define BASE64_UNIT_SIZE 4 - -// -// NewBase64Decode -// -// Decodes the base64 ASCII string in the inputBuffer to a newly malloced -// output buffer. -// -// inputBuffer - the source ASCII string for the decode -// length - the length of the string or -1 (to specify strlen should be used) -// outputLength - if not-NULL, on output will contain the decoded length -// -// returns the decoded buffer. Must be free'd by caller. Length is given by -// outputLength. -// -void *DT__NewBase64Decode ( const char *inputBuffer, size_t length, size_t *outputLength) -{ - if ((long)length == -1) - { - length = strlen(inputBuffer); - } - - size_t outputBufferSize = - ((length+BASE64_UNIT_SIZE-1) / BASE64_UNIT_SIZE) * BINARY_UNIT_SIZE; - unsigned char *outputBuffer = (unsigned char *)malloc(outputBufferSize); - - size_t i = 0; - size_t j = 0; - while (i < length) - { - // - // Accumulate 4 valid characters (ignore everything else) - // - unsigned char accumulated[BASE64_UNIT_SIZE]; - size_t accumulateIndex = 0; - while (i < length) - { - unsigned char decode = base64DecodeLookup[(int) inputBuffer[i++]]; - if (decode != xx) - { - accumulated[accumulateIndex] = decode; - accumulateIndex++; - - if (accumulateIndex == BASE64_UNIT_SIZE) - { - break; - } - } - } - - // - // Store the 6 bits from each of the 4 characters as 3 bytes - // - // (Uses improved bounds checking suggested by Alexandre Colucci) - // - if(accumulateIndex >= 2) - outputBuffer[j] = (unsigned char)((accumulated[0] << 2) | (accumulated[1] >> 4)); - if(accumulateIndex >= 3) - outputBuffer[j + 1] = (unsigned char)((accumulated[1] << 4) | (accumulated[2] >> 2)); - if(accumulateIndex >= 4) - outputBuffer[j + 2] = (unsigned char)((accumulated[2] << 6) | accumulated[3]); - j += accumulateIndex - 1; - } - - if (outputLength) - { - *outputLength = j; - } - return outputBuffer; -} - -// -// NewBase64Encode -// -// Encodes the arbitrary data in the inputBuffer as base64 into a newly malloced -// output buffer. -// -// inputBuffer - the source data for the encode -// length - the length of the input in bytes -// separateLines - if zero, no CR/LF characters will be added. Otherwise -// a CR/LF pair will be added every 64 encoded chars. -// outputLength - if not-NULL, on output will contain the encoded length -// (not including terminating 0 char) -// -// returns the encoded buffer. Must be free'd by caller. Length is given by -// outputLength. -// -char *DT__NewBase64Encode(const void *buffer, size_t length, bool separateLines, size_t *outputLength) -{ - const unsigned char *inputBuffer = (const unsigned char *)buffer; - -#define MAX_NUM_PADDING_CHARS 2 -#define OUTPUT_LINE_LENGTH 64 -#define INPUT_LINE_LENGTH ((OUTPUT_LINE_LENGTH / BASE64_UNIT_SIZE) * BINARY_UNIT_SIZE) -#define CR_LF_SIZE 2 - - // - // Byte accurate calculation of final buffer size - // - size_t outputBufferSize = - ((length / BINARY_UNIT_SIZE) - + ((length % BINARY_UNIT_SIZE) ? 1 : 0)) - * BASE64_UNIT_SIZE; - if (separateLines) - { - outputBufferSize += - (outputBufferSize / OUTPUT_LINE_LENGTH) * CR_LF_SIZE; - } - - // - // Include space for a terminating zero - // - outputBufferSize += 1; - - // - // Allocate the output buffer - // - char *outputBuffer = (char *)malloc(outputBufferSize); - if (!outputBuffer) - { - return NULL; - } - - size_t index = 0; - size_t index2 = 0; - const size_t lineLength = separateLines ? INPUT_LINE_LENGTH : length; - size_t lineEnd = lineLength; - - while (true) - { - if (lineEnd > length) - { - lineEnd = length; - } - - for (; index + BINARY_UNIT_SIZE - 1 < lineEnd; index += BINARY_UNIT_SIZE) - { - // - // Inner loop: turn 48 bytes into 64 base64 characters - // - outputBuffer[index2++] = base64EncodeLookup[(inputBuffer[index] & 0xFC) >> 2]; - outputBuffer[index2++] = base64EncodeLookup[((inputBuffer[index] & 0x03) << 4) - | ((inputBuffer[index + 1] & 0xF0) >> 4)]; - outputBuffer[index2++] = base64EncodeLookup[((inputBuffer[index + 1] & 0x0F) << 2) - | ((inputBuffer[index + 2] & 0xC0) >> 6)]; - outputBuffer[index2++] = base64EncodeLookup[inputBuffer[index + 2] & 0x3F]; - } - - if (lineEnd == length) - { - break; - } - - // - // Add the newline - // - outputBuffer[index2++] = '\r'; - outputBuffer[index2++] = '\n'; - lineEnd += lineLength; - } - - if (index + 1 < length) - { - // - // Handle the single '=' case - // - outputBuffer[index2++] = base64EncodeLookup[(inputBuffer[index] & 0xFC) >> 2]; - outputBuffer[index2++] = base64EncodeLookup[((inputBuffer[index] & 0x03) << 4) - | ((inputBuffer[index + 1] & 0xF0) >> 4)]; - outputBuffer[index2++] = base64EncodeLookup[(inputBuffer[index + 1] & 0x0F) << 2]; - outputBuffer[index2++] = '='; - } - else if (index < length) - { - // - // Handle the double '=' case - // - outputBuffer[index2++] = base64EncodeLookup[(inputBuffer[index] & 0xFC) >> 2]; - outputBuffer[index2++] = base64EncodeLookup[(inputBuffer[index] & 0x03) << 4]; - outputBuffer[index2++] = '='; - outputBuffer[index2++] = '='; - } - outputBuffer[index2] = 0; - - // - // Set the output length and return the buffer - // - if (outputLength) - { - *outputLength = index2; - } - return outputBuffer; -} - -@implementation DTBase64Coding - -// this is abstract and not meant to be actually used -- (id)init -{ - [NSException raise:@"DTAbstractClassException" format:@"You tried to call %@ on an abstract class %@", NSStringFromSelector(_cmd), NSStringFromClass([self class])]; - - return nil; -} - -#pragma mark - Encoding and Decoding - -+ (NSString *)stringByEncodingData:(NSData *)data -{ - size_t outputLength = 0; - char *outputBuffer = DT__NewBase64Encode([data bytes], [data length], true, &outputLength); - - NSString *result = [[NSString alloc] initWithBytes:outputBuffer length:outputLength encoding:NSASCIIStringEncoding]; - free(outputBuffer); - return result; -} - -+ (NSData *)dataByDecodingString:(NSString *)string -{ - NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding]; - size_t outputLength; - void *outputBuffer = DT__NewBase64Decode([data bytes], [data length], &outputLength); - NSData *result = [NSData dataWithBytes:outputBuffer length:outputLength]; - free(outputBuffer); - return result; -} - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTBlockFunctions.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTBlockFunctions.h deleted file mode 100644 index 2912936..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTBlockFunctions.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// DTBlockFunctions.h -// DTFoundation -// -// Created by Oliver Drobnik on 02.10.13. -// Copyright (c) 2013 Cocoanetics. All rights reserved. -// - -#import - -/** - Block Utility Methods - */ - -/** - Performs a block synchronous if execution is currently on the main thread or dispatches it asynchronously if not - @param block The block to execute - */ -void DTBlockPerformSyncIfOnMainThreadElseAsync(void (^block)(void)); - -/** - Performs a block synchronous on the main thread regardless of the current thread - @param block The block to execute - */ -void DTBlockPerformSyncOnMainThread(void (^block)(void)); - - diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTBlockFunctions.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTBlockFunctions.m deleted file mode 100644 index 6117325..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTBlockFunctions.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// DTBlockFunctions.m -// DTFoundation -// -// Created by Oliver Drobnik on 02.10.13. -// Copyright (c) 2013 Cocoanetics. All rights reserved. -// - -#import "DTBlockFunctions.h" - -void DTBlockPerformSyncIfOnMainThreadElseAsync(void (^block)(void)) -{ - if ([NSThread isMainThread]) - { - // can perform synchronous on main thread - block(); - } - else - { - // need to perform asynchronous - dispatch_async(dispatch_get_main_queue(), block); - } -} - -void DTBlockPerformSyncOnMainThread(void (^block)(void)) -{ - if ([NSThread isMainThread]) - { - block(); - } - else - { - dispatch_sync(dispatch_get_main_queue(), block); - } -} \ No newline at end of file diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTCompatibility.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTCompatibility.h deleted file mode 100644 index 85f0e00..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTCompatibility.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DTCompatibility.h -// DTFoundation -// -// Created by Rene Pirringer on 30.07.15. -// Copyright (c) 2015 Cocoanetics. All rights reserved. -// - -#import - -#if __IPHONE_OS_VERSION_MAX_ALLOWED > 80400 -#define DT_SUPPORTED_INTERFACE_ORIENTATIONS_RETURN_TYPE UIInterfaceOrientationMask -#else -#define DT_SUPPORTED_INTERFACE_ORIENTATIONS_RETURN_TYPE NSUInteger -#endif - diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTCoreGraphicsUtils.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTCoreGraphicsUtils.h deleted file mode 100644 index d595d0e..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTCoreGraphicsUtils.h +++ /dev/null @@ -1,66 +0,0 @@ -// -// DTCoreGraphicsUtils.h -// DTFoundation -// -// Created by Oliver Drobnik on 7/18/10. -// Copyright 2010 Cocoanetics. All rights reserved. -// - -#import - -#import - -/** - Various CoreGraphics-related utility functions - */ - -/** - Promotes value to CGFloat type. - */ -#define CGFloat_(__x) ((CGFloat) (__x)) - -/** - Calculates a size that fits an original size into a different size preserving the aspect ratio. - */ -CGSize DTCGSizeThatFitsKeepingAspectRatio(CGSize originalSize, CGSize sizeToFit); - -/** - Calculates a size that fits an original size into a different size preserving the aspect ratio and filling the target size. - */ -CGSize DTCGSizeThatFillsKeepingAspectRatio(CGSize originalSize, CGSize sizeToFit); - -/** - Replacement for buggy CGSizeMakeWithDictionaryRepresentation - @param dict The dictionary containing an encoded `CGSize` - @param size The `CGSize` to decode from the dictionary - @see http://www.cocoanetics.com/2012/09/radar-cgrectmakewithdictionaryrepresentation/ - */ -BOOL DTCGSizeMakeWithDictionaryRepresentation(NSDictionary *dict, CGSize *size); - -/** - Replacement for buggy CGSizeCreateDictionaryRepresentation - @param size The `CGSize` to encode in the returned dictionary - @see http://www.cocoanetics.com/2012/09/radar-cgrectmakewithdictionaryrepresentation/ - */ -NSDictionary *DTCGSizeCreateDictionaryRepresentation(CGSize size); - -/** - Replacement for buggy CGRectMakeWithDictionaryRepresentation - @param dict The dictionary containing an encoded `CGRect` - @param rect The `CGRect` to decode from the dictionary - @see http://www.cocoanetics.com/2012/09/radar-cgrectmakewithdictionaryrepresentation/ - */ -BOOL DTCGRectMakeWithDictionaryRepresentation(NSDictionary *dict, CGRect *rect); - -/** - Replacement for buggy CGRectCreateDictionaryRepresentation - @param rect The `CGRect` to encode in the returned dictionary - @see http://www.cocoanetics.com/2012/09/radar-cgrectmakewithdictionaryrepresentation/ - */ -NSDictionary *DTCGRectCreateDictionaryRepresentation(CGRect rect); - -/** - Convenience method to find the center of a CGRect. Uses CGRectGetMidX and CGRectGetMidY. - @returns The point which is the center of rect. - */ -CGPoint DTCGRectCenter(CGRect rect); diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTCoreGraphicsUtils.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTCoreGraphicsUtils.m deleted file mode 100644 index 8710a1a..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTCoreGraphicsUtils.m +++ /dev/null @@ -1,125 +0,0 @@ -// -// DTCoreGraphicsUtils.m -// DTFoundation -// -// Created by Oliver Drobnik on 7/18/10. -// Copyright 2010 Cocoanetics. All rights reserved. -// - -#import - -#import "DTCoreGraphicsUtils.h" - -CGSize DTCGSizeThatFitsKeepingAspectRatio(CGSize originalSize, CGSize sizeToFit) -{ - CGFloat necessaryZoomWidth = sizeToFit.width / originalSize.width; - CGFloat necessaryZoomHeight = sizeToFit.height / originalSize.height; - - CGFloat smallerZoom = MIN(necessaryZoomWidth, necessaryZoomHeight); - - return CGSizeMake(round(originalSize.width*smallerZoom), round(originalSize.height*smallerZoom)); -} - -CGSize DTCGSizeThatFillsKeepingAspectRatio(CGSize originalSize, CGSize sizeToFit) -{ - CGFloat necessaryZoomWidth = sizeToFit.width / originalSize.width; - CGFloat necessaryZoomHeight = sizeToFit.height / originalSize.height; - - CGFloat largerZoom = MAX(necessaryZoomWidth, necessaryZoomHeight); - - return CGSizeMake(round(originalSize.width*largerZoom), round(originalSize.height*largerZoom)); -} - -BOOL DTCGSizeMakeWithDictionaryRepresentation(NSDictionary *dict, CGSize *size) -{ - NSNumber *widthNumber = dict[@"Width"]; - NSNumber *heightNumber = dict[@"Height"]; - - if (!widthNumber || !heightNumber) - { - return NO; - } - - if (size) - { -#if CGFLOAT_IS_DOUBLE - size->width = [widthNumber doubleValue]; - size->height = [heightNumber doubleValue]; -#else - size->width = [widthNumber floatValue]; - size->height = [heightNumber floatValue]; -#endif - } - - return YES; -} - -NSDictionary *DTCGSizeCreateDictionaryRepresentation(CGSize size) -{ -#if CGFLOAT_IS_DOUBLE - NSNumber *widthNumber = [NSNumber numberWithDouble:size.width]; - NSNumber *heightNumber = [NSNumber numberWithDouble:size.height]; -#else - NSNumber *widthNumber = [NSNumber numberWithFloat:size.width]; - NSNumber *heightNumber = [NSNumber numberWithFloat:size.height]; -#endif - - return @{@"Width": widthNumber, - @"Height": heightNumber}; -} - - -BOOL DTCGRectMakeWithDictionaryRepresentation(NSDictionary *dict, CGRect *rect) -{ - NSNumber *widthNumber = dict[@"Width"]; - NSNumber *heightNumber = dict[@"Height"]; - NSNumber *xNumber = dict[@"X"]; - NSNumber *yNumber = dict[@"Y"]; - - if (!widthNumber || !heightNumber || !xNumber || !yNumber) - { - return NO; - } - - if (rect) - { -#if CGFLOAT_IS_DOUBLE - rect->origin.x = [xNumber doubleValue]; - rect->origin.y = [yNumber doubleValue]; - rect->size.width = [widthNumber doubleValue]; - rect->size.height = [heightNumber doubleValue]; -#else - rect->origin.x = [xNumber floatValue]; - rect->origin.y = [yNumber floatValue]; - rect->size.width = [widthNumber floatValue]; - rect->size.height = [heightNumber floatValue]; -#endif - } - - return YES; -} - -NSDictionary *DTCGRectCreateDictionaryRepresentation(CGRect rect) -{ -#if CGFLOAT_IS_DOUBLE - NSNumber *widthNumber = [NSNumber numberWithDouble:rect.size.width]; - NSNumber *heightNumber = [NSNumber numberWithDouble:rect.size.height]; - NSNumber *xNumber = [NSNumber numberWithDouble:rect.origin.x]; - NSNumber *yNumber = [NSNumber numberWithDouble:rect.origin.y]; -#else - NSNumber *widthNumber = [NSNumber numberWithFloat:rect.size.width]; - NSNumber *heightNumber = [NSNumber numberWithFloat:rect.size.height]; - NSNumber *xNumber = [NSNumber numberWithFloat:rect.origin.x]; - NSNumber *yNumber = [NSNumber numberWithFloat:rect.origin.y]; -#endif - - return @{@"Width": widthNumber, - @"Height": heightNumber, - @"X": xNumber, - @"Y": yNumber}; -} - -CGPoint DTCGRectCenter(CGRect rect) -{ - return (CGPoint){CGRectGetMidX(rect), CGRectGetMidY(rect)}; -} diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTExtendedFileAttributes.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTExtendedFileAttributes.h deleted file mode 100644 index 5ce806b..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTExtendedFileAttributes.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// DTExtendedFileAttributes.h -// DTFoundation -// -// Created by Oliver Drobnik on 3/6/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import - -/** - This class provides read/write access to extended file attributes of a file or folder. It wraps the standard xattr Posix functions to do that. - - Because the file system does not keep track of the data types saved in extended attributes this API so far reads and writes strings. -*/ -@interface DTExtendedFileAttributes : NSObject - - -/** - @name Creating an Extended File Attribute Manager - */ - - -/** - Creates an Extended File Attribute Manager. - - @param path The file path - */ -- (id)initWithPath:(NSString *)path; - - -/** - @name Reading/Writing Extended Attributes - */ - -/** - Removes an extended file attribute from the receiver. - - @param attribute The name of the attribute. - @returns `YES` if successful. - */ -- (BOOL)removeAttribute:(NSString *)attribute; - - -/** - Sets the value of an extended file attribute for the receiver. - - If the value is `nil` then this is the same as calling . - - @param value The string to save for this attribute. - @param attribute The name of the attribute. - @returns `YES` if successful. - */ -- (BOOL)setValue:(NSString *)value forAttribute:(NSString *)attribute; - - -/** - Gets the value of an extended file attribute from the receiver. - - @param attribute The name of the attribute. - @returns The string for the value or `nil` if the value is not set. - */ -- (NSString *)valueForAttribute:(NSString *)attribute; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTExtendedFileAttributes.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTExtendedFileAttributes.m deleted file mode 100644 index 67ae047..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTExtendedFileAttributes.m +++ /dev/null @@ -1,100 +0,0 @@ -// -// DTExtendedFileAttributes.m -// DTFoundation -// -// Created by Oliver Drobnik on 3/6/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "DTExtendedFileAttributes.h" - -#import - -@implementation DTExtendedFileAttributes -{ - NSString *_path; -} - -- (id)initWithPath:(NSString *)path -{ - self = [super init]; - if (self) - { - if (![path length]) - { - return nil; - } - - _path = path; - } - - return self; -} - -- (BOOL)removeAttribute:(NSString *)attribute -{ - const char *attrName = [attribute UTF8String]; - const char *filePath = [_path fileSystemRepresentation]; - - int result = removexattr(filePath, attrName, 0); - - return (result==0); -} - -- (BOOL)setValue:(NSString *)value forAttribute:(NSString *)attribute -{ - if (![attribute length]) - { - return NO; - } - - if (!value) - { - // remove it instead - return [self removeAttribute:attribute]; - } - - const char *attrName = [attribute UTF8String]; - const char *filePath = [_path fileSystemRepresentation]; - - const char *val = [value UTF8String]; - - int result = setxattr(filePath, attrName, val, strlen(val), 0, 0); - - return (result==0); -} - -- (NSString *)valueForAttribute:(NSString *)attribute -{ - if (![attribute length]) - { - return nil; - } - - const char *attrName = [attribute UTF8String]; - const char *filePath = [_path fileSystemRepresentation]; - - // get size of needed buffer - ssize_t bufferLength = getxattr(filePath, attrName, NULL, 0, 0, 0); - - if (bufferLength<=0) - { - return nil; - } - - // make a buffer of sufficient length - char *buffer = malloc(bufferLength); - - // now actually get the attribute string - getxattr(filePath, attrName, buffer, bufferLength, 0, 0); - - // convert to NSString - NSString *retString = [[NSString alloc] initWithBytes:buffer length:bufferLength encoding:NSUTF8StringEncoding]; - - // release buffer - free(buffer); - - return retString; -} - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTFolderMonitor.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTFolderMonitor.h deleted file mode 100644 index e010917..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTFolderMonitor.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// DTFolderMonitor.h -// DTFoundation -// -// Created by Oliver Drobnik on 05.08.13. -// Copyright (c) 2013 Cocoanetics. All rights reserved. -// - -#import - -// The block to execute if a monitored folder changes -typedef void (^DTFolderMonitorBlock) (void); - -/** - Class for monitoring changes on a folder. This can be used to monitor the application documents folder for changes in the files there if the user adds or removes files via iTunes file sharing. - */ - -@interface DTFolderMonitor : NSObject - -/** - @name Creating a Folder Monitor - */ - -/** - Creates a new DTFolderMonitor to watch the folder at the given URL. Whenever there is a change on this folder the block is executed. - - The URL must be a file URL. Both the URL and the block parameter are mandatory. The block is being dispatched on a background queue. - - @param URL The monitored folder URL - @param block The block to execute if the folder is being modified - @returns The instantiated monitor in suspended mode. Call -startMonitoring to start monitoring. - */ -+ (DTFolderMonitor * _Nonnull)folderMonitorForURL:(NSURL * _Nonnull)URL block: (DTFolderMonitorBlock _Nullable)block; - - -/** - @name Starting/Stopping Monitoring - */ - -/** - Start monitoring the folder. A monitor can be started and stopped multiple times. - */ -- (void)startMonitoring; - -/** - Stop monitoring the folder. A monitor can be started and stopped multiple times. - */ -- (void)stopMonitoring; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTFolderMonitor.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTFolderMonitor.m deleted file mode 100644 index ece84bc..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTFolderMonitor.m +++ /dev/null @@ -1,103 +0,0 @@ -// -// DTFolderMonitor.m -// DTFoundation -// -// Created by Oliver Drobnik on 05.08.13. -// Copyright (c) 2013 Cocoanetics. All rights reserved. -// - -#import "DTFolderMonitor.h" - -@implementation DTFolderMonitor -{ - NSURL *_URL; - DTFolderMonitorBlock _block; - - int _fileDescriptor; - dispatch_queue_t _queue; - dispatch_source_t _source; -} - -+ (DTFolderMonitor *)folderMonitorForURL:(NSURL *)URL block:(DTFolderMonitorBlock)block -{ - return [[DTFolderMonitor alloc] initWithURL:URL block:block]; -} - -- (instancetype)initWithURL:(NSURL *)URL block:(DTFolderMonitorBlock)block -{ - NSParameterAssert(URL); - NSParameterAssert(block); - NSAssert([URL isFileURL], @"URL Parameter must be a folder URL"); - - self = [super init]; - - if (self) - { - _URL = URL; - _block = [block copy]; - _queue = dispatch_queue_create("DTFolderMonitor Queue", 0); - } - - return self; -} - -- (void)dealloc -{ - [self stopMonitoring]; - -#if !OS_OBJECT_USE_OBJC - dispatch_release(_queue); -#endif -} - -- (void)startMonitoring -{ - @synchronized(self) - { - if (_source) - { - return; - } - - _fileDescriptor = open([_URL.path fileSystemRepresentation], O_EVTONLY); - - if (!_fileDescriptor) { - return; - } - - // watch the file descriptor for writes - _source = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE, _fileDescriptor, DISPATCH_VNODE_WRITE, _queue); - - // call the passed block if the source is modified - dispatch_source_set_event_handler(_source, _block); - - // close the file descriptor when the dispatch source is cancelled - dispatch_source_set_cancel_handler(_source, ^{ - - close(self->_fileDescriptor); - }); - - // at this point the dispatch source is paused, so start watching - dispatch_resume(_source); - } -} - -- (void)stopMonitoring -{ - @synchronized(self) - { - if (!_source) - { - return; - } - - dispatch_source_cancel(_source); - -#if !OS_OBJECT_USE_OBJC - dispatch_release(_source); -#endif - _source = nil; - } -} - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTFoundationConstants.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTFoundationConstants.h deleted file mode 100644 index ad96cd0..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTFoundationConstants.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// DTFoundationConstants.h -// DTFoundation -// -// Created by Stefan Gugarel on 10/18/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import - - -// string constant for NSError domain -extern NSString * const DTFoundationErrorDomain; diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTFoundationConstants.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTFoundationConstants.m deleted file mode 100644 index e4cbe87..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTFoundationConstants.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// DTFoundationConstants.m -// DTFoundation -// -// Created by Stefan Gugarel on 10/18/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "DTFoundationConstants.h" - -NSString * const DTFoundationErrorDomain = @"DTFoundation"; \ No newline at end of file diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTHTMLParser/DTHTMLParser.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTHTMLParser/DTHTMLParser.h deleted file mode 100644 index 0ac3028..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTHTMLParser/DTHTMLParser.h +++ /dev/null @@ -1,182 +0,0 @@ -// -// DTHTMLParser.h -// DTCoreText -// -// Created by Oliver Drobnik on 1/18/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import - -#import - -@class DTHTMLParser; -/** The DTHTMLParserDelegate protocol defines the optional methods implemented by delegates of DTHTMLParser objects. - - Dependencies: libxml2.dylib - */ -@protocol DTHTMLParserDelegate - -@optional - -/** - Sent by the parser object to the delegate when it begins parsing a document. - - @param parser A parser object. - */ -- (void)parserDidStartDocument:(DTHTMLParser *)parser; - -/** - Sent by the parser object to the delegate when it has successfully completed parsing - - @param parser A parser object. - */ -- (void)parserDidEndDocument:(DTHTMLParser *)parser; - -/** - Sent by a parser object to its delegate when it encounters a start tag for a given element. - - @param parser A parser object. - @param elementName A string that is the name of an element (in its start tag). - @param attributeDict A dictionary that contains any attributes associated with the element. Keys are the names of attributes, and values are attribute values. - */ -- (void)parser:(DTHTMLParser *)parser didStartElement:(NSString *)elementName attributes:(NSDictionary *)attributeDict; - -/** - Sent by a parser object to its delegate when it encounters an end tag for a specific element. - - @param parser A parser object. - @param elementName A string that is the name of an element (in its end tag). - */ -- (void)parser:(DTHTMLParser *)parser didEndElement:(NSString *)elementName; - -/** - Sent by a parser object to provide its delegate with a string representing all or part of the characters of the current element. - - The parser object may send the delegate several parser:foundCharacters: messages to report the characters of an element. Because string may be only part of the total character content for the current element, you should append it to the current accumulation of characters until the element changes. - - @param parser A parser object. - @param string A string representing the complete or partial textual content of the current element. - */ -- (void)parser:(DTHTMLParser *)parser foundCharacters:(NSString *)string; - -/** - Sent by a parser object to its delegate when it encounters a comment in the HTML. - - @param parser A DTHTMLParser object parsing HTML. - @param comment A string that is a the content of a comment in the XML. - */ -- (void)parser:(DTHTMLParser *)parser foundComment:(NSString *)comment; - -/** - Sent by a parser object to its delegate when it encounters a CDATA block. - - Through this method the parser object passes the contents of the block to its delegate in an NSData object. The CDATA block is character data that is ignored by the parser. The encoding of the character data is UTF-8. To convert the data object to a string object, use the NSString method initWithData:encoding:. Note: CSS style blocks are returned as CDATA. - - @param parser A DTHTMLParser object parsing HTML. - @param CDATABlock A data object containing a block of CDATA. - */ -- (void)parser:(DTHTMLParser *)parser foundCDATA:(NSData *)CDATABlock; - -/** - Sent by a parser object to its delegate when it encounters a processing instruction. - - @param parser A DTHTMLParser object parsing HTML. - @param target A string representing the target of a processing instruction. - @param data A string representing the data for a processing instruction. - */ -- (void)parser:(DTHTMLParser *)parser foundProcessingInstructionWithTarget:(NSString *)target data:(NSString *)data; - -/** - Sent by a parser object to its delegate when it encounters a fatal error. - - When this method is invoked, parsing is stopped. For further information about the error, you can query parseError or you can send the parser a parserError message. You can also send the parser lineNumber and columnNumber messages to further isolate where the error occurred. Typically you implement this method to display information about the error to the user. - - @param parser A parser object. - @param parseError An `NSError` object describing the parsing error that occurred. - */ -- (void)parser:(DTHTMLParser *)parser parseErrorOccurred:(NSError *)parseError; - -@end - -/** Instances of this class parse HTML documents (including DTD declarations) in an event-driven manner. A DTHTMLParser notifies its delegate about the items (elements, attributes, CDATA blocks, comments, and so on) that it encounters as it processes an HTML document. It does not itself do anything with those parsed items except report them. It also reports parsing errors. For convenience, an DTHTMLParser object in the following descriptions is sometimes referred to as a parser object. - */ -@interface DTHTMLParser : NSObject - -/**------------------------------------------------------------------------------------- - @name Initializing a Parser Object - --------------------------------------------------------------------------------------- - */ - -/** - Initializes the receiver with the HTML contents encapsulated in a given data object. - - @param data An `NSData` object containing XML markup. - @param encoding The encoding used for encoding the HTML data - @returns An initialized `DTHTMLParser` object or nil if an error occurs. - */ -- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding; - -/**------------------------------------------------------------------------------------- - @name Parsing - --------------------------------------------------------------------------------------- - */ - -/** - Starts the event-driven parsing operation. - - If you invoke this method, the delegate, if it implements parser:parseErrorOccurred:, is informed of the cancelled parsing operation. - - @returns `YES` if parsing is successful and `NO` in there is an error or if the parsing operation is aborted. - */ -- (BOOL)parse; - -/** - Stops the parser object. - - @see parse - @see parserError - */ -- (void)abortParsing; - -/** - The receiver’s delegate. It is not retained. The delegate must conform to the DTHTMLParserDelegate Protocol protocol. - */ -@property (nonatomic, DT_WEAK_PROPERTY) id delegate; - -/** - Returns the column number of the XML document being processed by the receiver. - - The column refers to the nesting level of the HTML elements in the document. You may invoke this method once a parsing operation has begun or after an error occurs. - */ -@property (nonatomic, readonly) NSInteger columnNumber; - -/** - Returns the line number of the HTML document being processed by the receiver. - - You may invoke this method once a parsing operation has begun or after an error occurs. - */ -@property (nonatomic, readonly) NSInteger lineNumber; - -/** - Returns an `NSError` object from which you can obtain information about a parsing error. - - You may invoke this method after a parsing operation abnormally terminates to determine the cause of error. - */ -@property (nonatomic, readonly, strong) NSError *parserError; - -/** - Returns the public identifier of the external entity referenced in the HTML document. - - You may invoke this method once a parsing operation has begun or after an error occurs. - */ -@property (nonatomic, readonly) NSString *publicID; - -/** - Returns the system identifier of the external entity referenced in the HTML document. - - You may invoke this method once a parsing operation has begun or after an error occurs. - */ -@property (nonatomic, readonly) NSString *systemID; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTHTMLParser/DTHTMLParser.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTHTMLParser/DTHTMLParser.m deleted file mode 100644 index 47089b4..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTHTMLParser/DTHTMLParser.m +++ /dev/null @@ -1,484 +0,0 @@ -// -// DTHTMLParser.m -// DTFoundation -// -// Created by Oliver Drobnik on 1/18/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "DTHTMLParser.h" -#import - - -@interface DTHTMLParser() - -@property (nonatomic, strong) NSError *parserError; -@property (nonatomic, assign) NSStringEncoding encoding; - -- (void)_resetAccumulateBufferAndReportCharacters; -- (void)_accumulateCharacters:(const xmlChar *)characters length:(int)length; - -@end - - -#pragma mark Event function prototypes - -void _startDocument(void *context); -void _endDocument(void *context); -void _startElement(void *context, const xmlChar *name,const xmlChar **atts); -void _startElement_no_delegate(void *context, const xmlChar *name, const xmlChar **atts); -void _endElement(void *context, const xmlChar *name); -void _endElement_no_delegate(void *context, const xmlChar *chars); -void _characters(void *context, const xmlChar *ch, int len); -void _comment(void *context, const xmlChar *value); -void _dterror(void *context, const char *msg, ...); -void _cdataBlock(void *context, const xmlChar *value, int len); -void _processingInstruction (void *context, const xmlChar *target, const xmlChar *data); - -#pragma mark Event functions -void _startDocument(void *context) -{ - DTHTMLParser *myself = (__bridge DTHTMLParser *)context; - - [myself.delegate parserDidStartDocument:myself]; -} - -void _endDocument(void *context) -{ - DTHTMLParser *myself = (__bridge DTHTMLParser *)context; - - [myself.delegate parserDidEndDocument:myself]; -} - -void _startElement(void *context, const xmlChar *name, const xmlChar **atts) -{ - DTHTMLParser *myself = (__bridge DTHTMLParser *)context; - - [myself _resetAccumulateBufferAndReportCharacters]; - - NSString *nameStr = [NSString stringWithUTF8String:(char *)name]; - - NSMutableDictionary *attributes = nil; - - if (atts) - { - NSString *key = nil; - NSString *value = nil; - - attributes = [[NSMutableDictionary alloc] init]; - - int i = 0; - while (1) - { - char *att = (char *)atts[i++]; - - if (!key) - { - if (!att) - { - // we're done - break; - } - - key = [NSString stringWithUTF8String:att]; - } - else - { - if (att) - { - value = [NSString stringWithUTF8String:att]; - } - else - { - // solo attribute - value = key; - } - - [attributes setObject:value forKey:key]; - - value = nil; - key = nil; - } - } - } - - [myself.delegate parser:myself didStartElement:nameStr attributes:attributes]; -} - -void _startElement_no_delegate(void *context, const xmlChar *name, const xmlChar **atts) -{ - DTHTMLParser *myself = (__bridge DTHTMLParser *)context; - - [myself _resetAccumulateBufferAndReportCharacters]; -} - -void _endElement(void *context, const xmlChar *chars) -{ - DTHTMLParser *myself = (__bridge DTHTMLParser *)context; - - [myself _resetAccumulateBufferAndReportCharacters]; - - NSString *nameStr = [NSString stringWithUTF8String:(char *)chars]; - - [myself.delegate parser:myself didEndElement:nameStr]; -} - -void _endElement_no_delegate(void *context, const xmlChar *chars) -{ - DTHTMLParser *myself = (__bridge DTHTMLParser *)context; - - [myself _resetAccumulateBufferAndReportCharacters]; -} - -// libxml reports characters in batches of at most 1000 at a time -// in addition, entities are reported separately -void _characters(void *context, const xmlChar *chars, int len) -{ - DTHTMLParser *myself = (__bridge DTHTMLParser *)context; - - [myself _accumulateCharacters:chars length:len]; -} - -void _comment(void *context, const xmlChar *chars) -{ - DTHTMLParser *myself = (__bridge DTHTMLParser *)context; - - NSString *string = [NSString stringWithCString:(const char *)chars encoding:myself.encoding]; - - [myself.delegate parser:myself foundComment:string]; -} - -void _dterror(void *context, const char *msg, ...) -{ - DTHTMLParser *myself = (__bridge DTHTMLParser *)context; - - char string[256]; - va_list arg_ptr; - - va_start(arg_ptr, msg); - vsnprintf(string, 256, msg, arg_ptr); - va_end(arg_ptr); - - NSString *errorMsg = [NSString stringWithUTF8String:string]; - - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:errorMsg forKey:NSLocalizedDescriptionKey]; - myself.parserError = [NSError errorWithDomain:@"DTHTMLParser" code:1 userInfo:userInfo]; - - [myself.delegate parser:myself parseErrorOccurred:myself.parserError]; -} - -void _cdataBlock(void *context, const xmlChar *value, int len) -{ - DTHTMLParser *myself = (__bridge DTHTMLParser *)context; - - NSData *data = [NSData dataWithBytes:(const void *)value length:len]; - - [myself.delegate parser:myself foundCDATA:data]; -} - -void _processingInstruction (void *context, const xmlChar *target, const xmlChar *data) -{ - DTHTMLParser *myself = (__bridge DTHTMLParser *)context; - - NSStringEncoding encoding = myself.encoding; - - NSString *targetStr = [NSString stringWithCString:(const char *)target encoding:encoding]; - NSString *dataStr = [NSString stringWithCString:(const char *)data encoding:encoding]; - - [myself.delegate parser:myself foundProcessingInstructionWithTarget:targetStr data:dataStr]; -} - -@implementation DTHTMLParser -{ - htmlSAXHandler _handler; - - NSData *_data; - NSStringEncoding _encoding; - - DT_WEAK_VARIABLE id _delegate; - htmlParserCtxtPtr _parserContext; - - NSMutableString *_accumulateBuffer; - - BOOL _isAborting; -} - - -- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding -{ - if (!data) - { - return nil; - } - - self = [super init]; - if (self) - { - _data = data; - _encoding = encoding; - - xmlSAX2InitHtmlDefaultSAXHandler(&_handler); - - // set default handlers as we would crash otherwise - self.delegate = nil; - } - - return self; -} - -- (void)dealloc -{ - if (_parserContext) - { - htmlFreeParserCtxt(_parserContext); - } -} - -- (void)_resetAccumulateBufferAndReportCharacters -{ - if (!_accumulateBuffer.length) - { - // nothing in the buffer - return; - } - - [self.delegate parser:self foundCharacters:_accumulateBuffer]; - - // reset buffer - _accumulateBuffer = nil; -} - -- (void)_accumulateCharacters:(const xmlChar *)characters length:(int)length -{ - if (!_accumulateBuffer) - { - _accumulateBuffer = [[NSMutableString alloc] initWithBytes:characters length:length encoding:NSUTF8StringEncoding]; - } - else - { - // we don't need to use the copy version since _accumulateBuffer will copy characters immediately - [_accumulateBuffer appendString:[[NSString alloc] initWithBytesNoCopy:(void *)characters length:length encoding:NSUTF8StringEncoding freeWhenDone:NO]]; - } -} - -- (BOOL)parse -{ - void *dataBytes = (char *)[_data bytes]; - unsigned long dataSize = [_data length]; - - // detect encoding if necessary - xmlCharEncoding charEnc = XML_CHAR_ENCODING_NONE; - - if (!_encoding) - { - charEnc = xmlDetectCharEncoding(dataBytes, (int)dataSize); - } - else - { - // convert the encoding - CFStringEncoding cfenc = CFStringConvertNSStringEncodingToEncoding(_encoding); - - if (cfenc != kCFStringEncodingInvalidId) - { - CFStringRef cfencstr = CFStringConvertEncodingToIANACharSetName(cfenc); - - if (cfencstr) - { - NSString *NS_VALID_UNTIL_END_OF_SCOPE encstr = [NSString stringWithString:(__bridge NSString*)cfencstr]; - const char *enc = [encstr UTF8String]; - - charEnc = xmlParseCharEncoding(enc); - } - } - } - - // create a parse context - _parserContext = htmlCreatePushParserCtxt(&_handler, (__bridge void *)self, dataBytes, (int)dataSize, NULL, charEnc); - - // set some options - htmlCtxtUseOptions(_parserContext, HTML_PARSE_RECOVER | HTML_PARSE_NONET | HTML_PARSE_COMPACT | HTML_PARSE_NOBLANKS); - - // parse! - int result = htmlParseDocument(_parserContext); - - return (result==0 && !_isAborting); -} - -- (void)abortParsing -{ - if (_parserContext) - { - // apparently this frees it too - xmlStopParser(_parserContext); - _parserContext = NULL; - } - - _isAborting = YES; - - // prevent future callbacks - _handler.startDocument = NULL; - _handler.endDocument = NULL; - _handler.startElement = NULL; - _handler.endElement = NULL; - _handler.characters = NULL; - _handler.comment = NULL; - _handler.error = NULL; - _handler.processingInstruction = NULL; - - // inform delegate - __strong __typeof__(_delegate) delegate = _delegate; - if ([delegate respondsToSelector:@selector(parser:parseErrorOccurred:)]) - { - [delegate parser:self parseErrorOccurred:self.parserError]; - } -} - -#pragma mark Properties - -- (id )delegate -{ - return _delegate; -} - -- (void)setDelegate:(id )delegate -{ - _delegate = delegate; - - if ([delegate respondsToSelector:@selector(parserDidStartDocument:)]) - { - _handler.startDocument = _startDocument; - } - else - { - _handler.startDocument = NULL; - } - - if ([delegate respondsToSelector:@selector(parserDidEndDocument:)]) - { - _handler.endDocument = _endDocument; - } - else - { - _handler.endDocument = NULL; - } - - if ([delegate respondsToSelector:@selector(parser:foundCharacters:)]) - { - _handler.characters = _characters; - } - else - { - _handler.characters = NULL; - } - - if ([delegate respondsToSelector:@selector(parser:didStartElement:attributes:)]) - { - _handler.startElement = _startElement; - } - else - { - // if there is a character handler we need to still report start of elements for accumulation - if (_handler.characters) - { - _handler.startElement = _startElement_no_delegate; - } - else - { - _handler.startElement = NULL; - } - } - - if ([delegate respondsToSelector:@selector(parser:didEndElement:)]) - { - _handler.endElement = _endElement; - } - else - { - // if there is a character handler we need to still report start of elements for accumulation - if (_handler.characters) - { - _handler.endElement = _endElement_no_delegate; - } - else - { - _handler.endElement = NULL; - } - } - - if ([delegate respondsToSelector:@selector(parser:foundComment:)]) - { - _handler.comment = _comment; - } - else - { - _handler.comment = NULL; - } - - if ([delegate respondsToSelector:@selector(parser:parseErrorOccurred:)]) - { - _handler.error = _dterror; - } - else - { - _handler.error = NULL; - } - - if ([delegate respondsToSelector:@selector(parser:foundCDATA:)]) - { - _handler.cdataBlock = _cdataBlock; - } - else - { - _handler.cdataBlock = NULL; - } - - if ([delegate respondsToSelector:@selector(parser:foundProcessingInstructionWithTarget:data:)]) - { - _handler.processingInstruction = _processingInstruction; - } - else - { - _handler.processingInstruction = NULL; - } -} - -- (NSInteger)lineNumber -{ - return xmlSAX2GetLineNumber(_parserContext); -} - -- (NSInteger)columnNumber -{ - return xmlSAX2GetColumnNumber(_parserContext); -} - -- (NSString *)systemID -{ - char *systemID = (char *)xmlSAX2GetSystemId(_parserContext); - - if (!systemID) - { - return nil; - } - - return [NSString stringWithUTF8String:systemID]; -} - -- (NSString *)publicID -{ - char *publicID = (char *)xmlSAX2GetPublicId(_parserContext); - - if (!publicID) - { - return nil; - } - - return [NSString stringWithUTF8String:publicID]; -} - - -@synthesize parserError = _parserError; -@synthesize encoding = _encoding; - - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTLog.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTLog.h deleted file mode 100644 index 2b0e81e..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTLog.h +++ /dev/null @@ -1,158 +0,0 @@ -// -// DTLog.h -// DTFoundation -// -// Created by Oliver Drobnik on 06.08.13. -// Copyright (c) 2013 Cocoanetics. All rights reserved. -// - -#import - -/** - Replacement for `NSLog` which can be configured to output certain log levels at run time. - */ - -// block signature called for each log statement -typedef void (^DTLogBlock)(NSUInteger logLevel, NSString *fileName, NSUInteger lineNumber, NSString *methodName, NSString *format, ...); - - -// internal variables needed by macros -extern DTLogBlock DTLogHandler; -extern NSUInteger DTCurrentLogLevel; - -/** - There is a macro for each ASL log level: - - - DTLogEmergency (0) - - DTLogAlert (1) - - DTLogCritical (2) - - DTLogError (3) - - DTLogWarning (4) - - DTLogNotice (5) - - DTLogInfo (6) - - DTLogDebug (7) - */ - -/** - Constants for log levels used by DTLog - */ -typedef NS_ENUM(NSUInteger, DTLogLevel) -{ - /** - Log level for *emergency* messages - */ - DTLogLevelEmergency = 0, - - /** - Log level for *alert* messages - */ - DTLogLevelAlert = 1, - - /** - Log level for *critical* messages - */ - DTLogLevelCritical = 2, - - /** - Log level for *error* messages - */ - DTLogLevelError = 3, - - /** - Log level for *warning* messages - */ - DTLogLevelWarning = 4, - - /** - Log level for *notice* messages - */ - DTLogLevelNotice = 5, - - /** - Log level for *info* messages. This is the default log level for DTLog. - */ - DTLogLevelInfo = 6, - - /** - Log level for *debug* messages - */ - DTLogLevelDebug = 7 -}; - -/** - @name Logging Functions - */ - -/** - Sets the block to be executed for messages with a log level less or equal the currently set log level - @param handler The block to handle log output - */ -void DTLogSetLoggerBlock(DTLogBlock handler); - -/** - Modifies the current log level - @param logLevel The ASL log level (0-7) to set, lower numbers being more important - */ -void DTLogSetLogLevel(NSUInteger logLevel); - -/** - Variant of DTLogMessage that takes a va_list. - @param logLevel The DTLogLevel for the message - @param format The log message format - @param args The va_list of arguments -*/ -void DTLogMessagev(DTLogLevel logLevel, NSString *format, va_list args); - -/** - Same as `NSLog` but allows for setting a message log level - @param logLevel The DTLogLevel for the message - @param format The log message format and optional variables - */ -void DTLogMessage(DTLogLevel logLevel, NSString *format, ...); - -/** - Retrieves the log messages currently available for the running app - @returns an `NSArray` of `NSDictionary` entries - */ -NSArray *DTLogGetMessages(void); - -/** - @name Macros - */ - -// log macro for error level (0) -#define DTLogEmergency(format, ...) DTLogCallHandlerIfLevel(DTLogLevelEmergency, format, ##__VA_ARGS__) - -// log macro for error level (1) -#define DTLogAlert(format, ...) DTLogCallHandlerIfLevel(DTLogLevelAlert, format, ##__VA_ARGS__) - -// log macro for error level (2) -#define DTLogCritical(format, ...) DTLogCallHandlerIfLevel(DTLogLevelCritical, format, ##__VA_ARGS__) - -// log macro for error level (3) -#define DTLogError(format, ...) DTLogCallHandlerIfLevel(DTLogLevelError, format, ##__VA_ARGS__) - -// log macro for error level (4) -#define DTLogWarning(format, ...) DTLogCallHandlerIfLevel(DTLogLevelWarning, format, ##__VA_ARGS__) - -// log macro for error level (5) -#define DTLogNotice(format, ...) DTLogCallHandlerIfLevel(DTLogLevelNotice, format, ##__VA_ARGS__) - -// log macro for info level (6) -#define DTLogInfo(format, ...) DTLogCallHandlerIfLevel(DTLogLevelInfo, format, ##__VA_ARGS__) - -// log macro for debug level (7) -#define DTLogDebug(format, ...) DTLogCallHandlerIfLevel(DTLogLevelDebug, format, ##__VA_ARGS__) - -// macro that gets called by individual level macros -#define DTLogCallHandlerIfLevel(logLevel, format, ...) \ -if (DTLogHandler && DTCurrentLogLevel>=logLevel) DTLogHandler(logLevel, DTLogSourceFileName, DTLogSourceLineNumber, DTLogSourceMethodName, format, ##__VA_ARGS__) - -// helper to get the current source file name as NSString -#define DTLogSourceFileName [[NSString stringWithUTF8String:__FILE__] lastPathComponent] - -// helper to get current method name -#define DTLogSourceMethodName [NSString stringWithUTF8String:__PRETTY_FUNCTION__] - -// helper to get current line number -#define DTLogSourceLineNumber __LINE__ diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTLog.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTLog.m deleted file mode 100644 index b08edf9..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTLog.m +++ /dev/null @@ -1,136 +0,0 @@ -// -// DTLog.m -// DTFoundation -// -// Created by Oliver Drobnik on 06.08.13. -// Copyright (c) 2013 Cocoanetics. All rights reserved. -// - -#import "DTLog.h" -#import -#import - -DTLogLevel DTCurrentLogLevel = DTLogLevelInfo; - -#if TARGET_OS_IPHONE -#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_6_1 && __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1 -#define DTLOG_USE_NEW_ASL_METHODS 1 -#endif -#else -#if __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_9 -#define DTLOG_USE_NEW_ASL_METHODS 1 -#endif -#endif - -#if DEBUG - -// set default handler for debug mode -DTLogBlock DTLogHandler = ^(NSUInteger logLevel, NSString *fileName, NSUInteger lineNumber, NSString *methodName, NSString *format, ...) -{ - va_list args; - va_start(args, format); - - DTLogMessagev(logLevel, format, args); - - va_end(args); -}; - -#else - -// set no default handler for non-DEBUG mode -DTLogBlock DTLogHandler = NULL; - -#endif - -#pragma mark - Logging Functions - -void DTLogSetLoggerBlock(DTLogBlock handler) -{ - DTLogHandler = [handler copy]; -} - -void DTLogSetLogLevel(DTLogLevel logLevel) -{ - DTCurrentLogLevel = logLevel; -} - -void DTLogMessagev(DTLogLevel logLevel, NSString *format, va_list args) -{ - NSString *facility = [[NSBundle mainBundle] bundleIdentifier]; - aslclient client = asl_open(NULL, [facility UTF8String], ASL_OPT_STDERR); // also log to stderr - - aslmsg msg = asl_new(ASL_TYPE_MSG); - asl_set(msg, ASL_KEY_READ_UID, "-1"); // without this the message cannot be found by asl_search - - // convert to via NSString, since printf does not know %@ - NSString *message = [[NSString alloc] initWithFormat:format arguments:args]; - - asl_log(client, msg, (int)logLevel, "%s", [message UTF8String]); - - asl_free(msg); - - va_end(args); -} - -void DTLogMessage(DTLogLevel logLevel, NSString *format, ...) -{ - va_list args; - va_start(args, format); - - DTLogMessagev(logLevel, format, args); - - va_end(args); -} - -NSArray *DTLogGetMessages(void) -{ - aslmsg query, message; - int index; - const char *key, *val; - - NSString *facility = [[NSBundle mainBundle] bundleIdentifier]; - - query = asl_new(ASL_TYPE_QUERY); - - // search only for current app messages - asl_set_query(query, ASL_KEY_FACILITY, [facility UTF8String], ASL_QUERY_OP_EQUAL); - - aslresponse response = asl_search(NULL, query); - - NSMutableArray *tmpArray = [NSMutableArray array]; - -#if DTLOG_USE_NEW_ASL_METHODS - while ((message = asl_next(response))) -#else - while ((message = aslresponse_next(response))) -#endif - { - NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary]; - - for (index = 0; ((key = asl_key(message, index))); index++) - { - NSString *keyString = [NSString stringWithUTF8String:(char *)key]; - - val = asl_get(message, key); - - NSString *string = val?[NSString stringWithUTF8String:val]:@""; - tmpDict[keyString] = string; - } - - [tmpArray addObject:tmpDict]; - } - - asl_free(query); -#if DTLOG_USE_NEW_ASL_METHODS - asl_release(response); -#else - aslresponse_free(response); -#endif - - if ([tmpArray count]) - { - return [tmpArray copy]; - } - - return nil; -} diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTVersion.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTVersion.h deleted file mode 100644 index 7b506f2..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTVersion.h +++ /dev/null @@ -1,160 +0,0 @@ -// -// DTVersion.h -// DTFoundation -// -// Created by Oliver Drobnik on 11/25/11. -// Copyright (c) 2012 Cocoanetics. All rights reserved. - -#import - -/** - Class that represents a version number comprised of major, minor and maintenance number separated by dots. For example "1.2.2". - This encapsulation simplifies comparing versions against each other. Sub-numbers that are omitted on creating a `DTVersion` are assumed to be 0. - */ -@interface DTVersion : NSObject -{ - NSUInteger _major; - NSUInteger _minor; - NSUInteger _maintenance; - NSUInteger _build; -} - -/**------------------------------------------------------------------------------------- - @name Properties - --------------------------------------------------------------------------------------- - */ - -/** - The major version number - */ -@property (nonatomic, readonly) NSUInteger major; - -/** - The minor version number - */ -@property (nonatomic, readonly) NSUInteger minor; - - -/** - The maintenance/hotfix version number - */ -@property (nonatomic, readonly) NSUInteger maintenance; - -/** - The build number - */ -@property (nonatomic, readonly) NSUInteger build; - -/**------------------------------------------------------------------------------------- - @name Creating Versions - --------------------------------------------------------------------------------------- - */ - -/** - Initializes the receiver with major, minor and maintenance version. - @param major The major version number - @param minor The minor version number - @param maintenance The maintainance/hotfix version number - @returns The initialized `DTVersion` - */ -- (DTVersion *)initWithMajor:(NSUInteger)major minor:(NSUInteger)minor maintenance:(NSUInteger)maintenance; - -/** - Initializes the receiver with major, minor and maintenance version. - @param major The major version number - @param minor The minor version number - @param maintenance The maintainance/hotfix version number - @param build The build number - @returns The initialized `DTVersion` - */ -- (DTVersion *)initWithMajor:(NSUInteger)major minor:(NSUInteger)minor maintenance:(NSUInteger)maintenance build:(NSUInteger)build; - -/** - creates and returns a DTVersion object initialized using the provided string - @param versionString The `NSString` to create a `DTVersion` from - @returns A DTVersion object or nil if the string is not a valid version number - */ -+ (DTVersion *)versionWithString:(NSString *)versionString; - -/** - creates and retuns a DTVersion object initialized with the version information of the current application - @returns A DTVersion object or nil if the string of the current application is not a valid version number - */ -+ (DTVersion *)appBundleVersion; - -/** - creates and retuns a DTVersion object initialized with the version information of the operating system - @returns A DTVersion object or nil if the string of the current application is not a valid version number - */ -+ (DTVersion *)osVersion; - -/**------------------------------------------------------------------------------------- - @name Comparing Versions - --------------------------------------------------------------------------------------- - */ - -/** - @param versionString The OS version as `NSString` to compare the receiver to - @returns true if the given version string is valid and less then the osVersion -*/ -+ (BOOL)osVersionIsLessThen:(NSString *)versionString; - -/** - @param versionString The OS version as `NSString` to compare the receiver to - @returns true if the given version string is valid and greater then the osVersion -*/ -+ (BOOL)osVersionIsGreaterThen:(NSString *)versionString; - -/** - @param version The `DTVersion` to compare the receiver to - @returns true if the give version is less then this version -*/ -- (BOOL)isLessThenVersion:(DTVersion *)version; - -/** - @param version The `DTVersion` to compare the receiver to - @returns true if the give version is greater then this version -*/ -- (BOOL)isGreaterThenVersion:(DTVersion *)version; - -/** - @param versionString The version as `NSString` to compare the receiver to - @returns true if the give version is less then this version string -*/ -- (BOOL)isLessThenVersionString:(NSString *)versionString; - -/** - @param versionString The version as `NSString` to compare the receiver to -* @returns true if the give version is greater then version string -*/ -- (BOOL)isGreaterThenVersionString:(NSString *)versionString; - -/** - Compares the receiver against a passed `DTVersion` instance - @param version The `DTVersion` to compare the receiver to - @returns `YES` is the versions are equal - */ -- (BOOL)isEqualToVersion:(DTVersion *)version; - -/** - Compares the receiver against a passed version as `NSString` - @param versionString The version as `NSString` to compare the receiver to - @returns `YES` is the versions are equal - */ -- (BOOL)isEqualToString:(NSString *)versionString; - -/** - Compares the receiver against a passed object - @param object An object of either `NSString` or `DTVersion` - @returns `YES` is the versions are equal - */ -- (BOOL)isEqual:(id)object; - -/** - Compares the receiver against a passed `DTVersion` instance - @param version The `DTVersion` to compare the receiver to - @returns The comparison result - */ -- (NSComparisonResult)compare:(DTVersion *)version; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTVersion.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTVersion.m deleted file mode 100644 index 59dc5de..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTVersion.m +++ /dev/null @@ -1,273 +0,0 @@ -// -// DTVersion.m -// DTFoundation -// -// Created by Oliver Drobnik -// Copyright 2012 Cocoanetics. All rights reserved. -// - -#import "DTVersion.h" - -#if TARGET_OS_IPHONE -#import -#endif - -@implementation DTVersion - -#pragma mark Creating Versions - -- (DTVersion *)initWithMajor:(NSUInteger)major minor:(NSUInteger)minor maintenance:(NSUInteger)maintenance build:(NSUInteger)build -{ - self = [super init]; - if (self) { - _major = major; - _minor = minor; - _maintenance = maintenance; - _build = build; - } - return self; -} - -- (DTVersion *)initWithMajor:(NSUInteger)major minor:(NSUInteger)minor maintenance:(NSUInteger)maintenance -{ - return [self initWithMajor:major minor:minor maintenance:maintenance build:0]; -} - -+ (DTVersion *)versionWithString:(NSString*)versionString -{ - if (!versionString) - { - return nil; - } - - NSInteger major = 0; - NSInteger minor = 0; - NSInteger maintenance = 0; - NSInteger build = 0; - - NSError *error; - NSString *pattern = @"^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:\\.(\\d+))?(?:$|\\s)"; - - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern - options:NSRegularExpressionCaseInsensitive - error:&error]; - - NSTextCheckingResult *match = [regex firstMatchInString:versionString - options:0 - range:NSMakeRange(0, [versionString length])]; - - if (!match) - { - return nil; - } - for (NSUInteger i = 1; i < match.numberOfRanges; i++) - { - NSRange range = [match rangeAtIndex:i]; - if (range.location == NSNotFound) - { - break; - } - NSUInteger value = [[versionString substringWithRange:range] integerValue]; - - switch (i) - { - case 1: - major = value; - break; - case 2: - minor = value; - break; - case 3: - maintenance = value; - break; - case 4: - build = value; - break; - default: - break; - } - } - - if (major >= 0 && - minor >= 0 && - maintenance >= 0 && - build >= 0) - { - return [[DTVersion alloc] initWithMajor:major minor:minor maintenance:maintenance build:build]; - } - - return nil; -} - -+ (DTVersion*)appBundleVersion -{ - NSDictionary *info = [[NSBundle mainBundle] infoDictionary]; - NSString *version = info[@"CFBundleVersion"]; - - return [DTVersion versionWithString:version]; -} - -+ (DTVersion *)osVersion -{ - static dispatch_once_t onceToken; - static DTVersion *version = nil; - - dispatch_once(&onceToken, ^{ -#if TARGET_OS_IPHONE && !TARGET_OS_TV && !TARGET_OS_WATCH - NSString *versionStr = [[UIDevice currentDevice] systemVersion]; - version = [DTVersion versionWithString:versionStr]; -#else - NSString *versionStr = [[NSProcessInfo processInfo] operatingSystemVersionString]; - versionStr = [versionStr stringByReplacingOccurrencesOfString:@"Version" withString:@""]; - versionStr = [versionStr stringByReplacingOccurrencesOfString:@"Build" withString:@""]; - versionStr = [versionStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - version = [DTVersion versionWithString:versionStr]; -#endif - }); - - return version; -} - -#pragma mark Comparing Versions - -+ (BOOL)osVersionIsLessThen:(NSString *)versionString -{ - return [[DTVersion osVersion] isLessThenVersionString:versionString]; -} - -+ (BOOL)osVersionIsGreaterThen:(NSString *)versionString -{ - return [[DTVersion osVersion] isGreaterThenVersionString:versionString]; -} - - -- (BOOL)isLessThenVersion:(DTVersion *)version -{ - int result = [self compare:version] == NSOrderedAscending; - //DDLogVerbose(@"%@ < %@? %d = %@", self, version, result, result ? @"YES" : @"NO"); - return result; -} - -- (BOOL)isGreaterThenVersion:(DTVersion *)version -{ - return [self compare:version] == NSOrderedDescending; -} - -- (BOOL)isLessThenVersionString:(NSString *)versionString -{ - return [self isLessThenVersion:[DTVersion versionWithString:versionString]]; -} - -- (BOOL)isGreaterThenVersionString:(NSString *)versionString -{ - return [self isGreaterThenVersion:[DTVersion versionWithString:versionString]]; -} - - - -- (BOOL)isEqualToVersion:(DTVersion *)version -{ - return (self.major == version.major) && (self.minor == version.minor) && (self.maintenance == version.maintenance); -} - -- (BOOL)isEqualToString:(NSString *)versionString -{ - DTVersion *versionToTest = [DTVersion versionWithString:versionString]; - return [self isEqualToVersion:versionToTest]; -} - -- (NSUInteger)hash -{ - NSUInteger hash = self.major; - hash = hash * 31u + self.minor; - hash = hash * 31u + self.maintenance; - hash = hash * 31u + self.build; - return hash; -} - -- (BOOL)isEqual:(id)object -{ - if ([object isKindOfClass:[DTVersion class]]) - { - return [self isEqualToVersion:(DTVersion*)object]; - } - if ([object isKindOfClass:[NSString class]]) - { - return [self isEqualToString:(NSString*)object]; - } - return NO; -} - -- (NSComparisonResult)compare:(DTVersion *)version -{ - if (version == nil) - { - return NSOrderedDescending; - } - - if (self.major < version.major) - { - return NSOrderedAscending; - } - if (self.major > version.major) - { - return NSOrderedDescending; - } - if (self.minor < version.minor) - { - return NSOrderedAscending; - } - if (self.minor > version.minor) - { - return NSOrderedDescending; - } - if (self.maintenance < version.maintenance) - { - return NSOrderedAscending; - } - if (self.maintenance > version.maintenance) - { - return NSOrderedDescending; - } - if (self.build < version.build) - { - return NSOrderedAscending; - } - if (self.build > version.build) - { - return NSOrderedDescending; - } - - - return NSOrderedSame; -} - - -- (NSString *)description -{ - if (_build > 0) - { - return [NSString stringWithFormat:@"%d.%d.%d.%d", (int)_major, (int)_minor, (int)_maintenance, (int)_build]; - } - if (_maintenance > 0) - { - return [NSString stringWithFormat:@"%d.%d.%d", (int)_major, (int)_minor, (int)_maintenance]; - } - return [NSString stringWithFormat:@"%d.%d", (int)_major, (int)_minor]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone -{ - return [[DTVersion allocWithZone:zone] initWithMajor:_major minor:_minor maintenance:_maintenance build:_build]; -} - -#pragma mark - Properties - -@synthesize major = _major; -@synthesize minor = _minor; -@synthesize maintenance = _maintenance; -@synthesize build = _build; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTWeakSupport.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/DTWeakSupport.h deleted file mode 100644 index b3631d2..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/DTWeakSupport.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// DTWeakSupport.h -// DTFoundation -// -// Created by Oliver Drobnik on 6/3/13. -// Copyright (c) 2013 Cocoanetics. All rights reserved. -// - -/** - Useful defines for building code the compiles with zeroing weak references if the deployment target allows it. This is possible from minimum supported iOS 5.0 and OS X 10.7 and above. Note that on OS X 10.7 some AppKit classes do not support having a weak ref, e.g. NSWindowController or NSViewController. -*/ - -#import - -#if __has_feature(objc_arc_weak) - - // zeroing weak refs are supported for ivars and properties - #define DT_WEAK_VARIABLE __weak - #define DT_WEAK_PROPERTY weak - -#elif __has_feature(objc_arc) - - /// zeroing weak refs not supported, fall back to unsafe unretained and assigning - #define DT_WEAK_VARIABLE __unsafe_unretained - #define DT_WEAK_PROPERTY assign - -#else - - // define something, as this header might be included in a non-ARC project for using compiled code from an ARC static lib - #define DT_WEAK_VARIABLE - #define DT_WEAK_PROPERTY assign - -#endif \ No newline at end of file diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSArray+DTError.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSArray+DTError.h deleted file mode 100644 index 838ca9e..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSArray+DTError.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// NSArray+error.h -// DTFoundation -// -// Created by Oliver Drobnik on 6/15/10. -// Copyright 2010 Drobnik.com. All rights reserved. -// - -#import - -/** - A collection of useful additions for `NSArray` to deal with Property Lists and also to get error handling for malformed data. - */ - -@interface NSArray (DTError) - - -/**------------------------------------------------------------------------------------- - @name Property List Error Handling - --------------------------------------------------------------------------------------- - */ - -/** - Creates and returns an array found in a file specified by a given URL. - - @param URL An `NSURL`. The file identified by URL must contain a string representation of a property list whose root object is an array. - @param error If an error occurs, upon returns contains an NSError object that describes the problem. If you are not interested in possible errors, pass in `NULL`. - @return A new array that contains the array at path, or `nil` if there is a file error or if the contents of the file are an invalid representation of a array. - */ -+ (NSArray *)arrayWithContentsOfURL:(NSURL *)URL error:(NSError **)error; - - -/** - Creates and returns an array found in a file specified by a given path. - - @param path A full or relative pathname. The file identified by path must contain a string representation of a property list whose root object is a dictionary. - @param error If an error occurs, upon returns contains an NSError object that describes the problem. If you are not interested in possible errors, pass in `NULL`. - @return A new dictionary that contains the dictionary at path, or `nil` if there is a file error or if the contents of the file are an invalid representation of a dictionary. - */ -+ (NSArray *)arrayWithContentsOfFile:(NSString *)path error:(NSError **)error; - - -/** - Creates and returns an array encoded in the given blob of data. - - @param data The data object identified by data must contain a string representation of a property list whose root object is an array. - @param error If an error occurs, upon returns contains an NSError object that describes the problem. If you are not interested in possible errors, pass in `NULL`. - @return A new array that contains the decoded array, or `nil` if there is an error or if the contents of the file are an invalid representation of an array. - */ -+ (NSArray *)arrayWithContentsOfData:(NSData *)data error:(NSError **)error; -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSArray+DTError.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSArray+DTError.m deleted file mode 100644 index ea86189..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSArray+DTError.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// NSArray+DTError.m -// DTFoundation -// -// Created by Oliver Drobnik on 6/15/10. -// Copyright 2010 Drobnik.com. All rights reserved. -// - -#import "NSArray+DTError.h" -#import "DTFoundationConstants.h" - -@implementation NSArray (DTError) - -+ (NSArray *)arrayWithContentsOfURL:(NSURL *)URL error:(NSError **)error -{ - NSData *readData = [NSData dataWithContentsOfURL:URL options:0 error:error]; - - if (!readData) - { - return nil; - } - - return [NSArray arrayWithContentsOfData:readData error:error]; -} - -+ (NSArray *)arrayWithContentsOfFile:(NSString *)path error:(NSError **)error -{ - NSURL *url = [NSURL fileURLWithPath:path]; - return [NSArray arrayWithContentsOfURL:url error:error]; -} - -+ (NSArray *)arrayWithContentsOfData:(NSData *)data error:(NSError **)error -{ - CFErrorRef parseError = NULL; - NSArray *array = (__bridge_transfer NSArray *)CFPropertyListCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef)data, kCFPropertyListImmutable, NULL, (CFErrorRef *)&parseError); - - if ([array isKindOfClass:[NSArray class]]) - { - return array; - } - - if (parseError) - { - if (error) - { - *error = (__bridge NSError *)(parseError); - } - - CFRelease(parseError); - } - - return nil; -} - - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSData+DTCrypto.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSData+DTCrypto.h deleted file mode 100644 index 8a35a55..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSData+DTCrypto.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// NSData+DTCrypto.h -// DTFoundation -// -// Created by Stefan Gugarel on 10/3/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import - -/** - Useful cryptography methods. - */ - -@interface NSData (DTCrypto) - -/**------------------------------------------------------------------------------------- - @name Generating HMAC Hashes - --------------------------------------------------------------------------------------- - */ - -/** - Generates a HMAC from the receiver using the SHA1 algorithm - @param key The encryption key - @returns The encrypted hash - */ -- (NSData *)encryptedDataUsingSHA1WithKey:(NSData *)key; - - -/**------------------------------------------------------------------------------------- - @name Digest Hashes - --------------------------------------------------------------------------------------- - */ - -/** - Generate an MD5 checksum from the receiver - @returns An `NSData` containing the md5 digest. - */ --(NSData *)dataWithMD5Hash; - -/** - Generate an SHA1 checksum from the receiver - @returns An `NSData` containing the SHA digest. - */ -- (NSData *)dataWithSHA1Hash; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSData+DTCrypto.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSData+DTCrypto.m deleted file mode 100644 index 29dbd43..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSData+DTCrypto.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// NSData+DTCrypto.m -// DTFoundation -// -// Created by Stefan Gugarel on 10/3/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "NSData+DTCrypto.h" -#include -#import - -/** - Common cryptography methods - */ -@implementation NSData (DTCrypto) - - -- (NSData *)encryptedDataUsingSHA1WithKey:(NSData *)key -{ - unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH]; - - CCHmac(kCCHmacAlgSHA1, [key bytes], [key length], [self bytes], [self length], cHMAC); - - return [NSData dataWithBytes:&cHMAC length:CC_SHA1_DIGEST_LENGTH]; -} - -- (NSData *)dataWithMD5Hash -{ - const char *cStr = [self bytes]; - uint8_t digest[CC_MD5_DIGEST_LENGTH]; - CC_MD5(cStr, (CC_LONG)[self length], digest); - - return [NSData dataWithBytes:digest length:CC_MD5_DIGEST_LENGTH]; -} - -- (NSData *)dataWithSHA1Hash -{ - const char *cStr = [self bytes]; - uint8_t digest[CC_SHA1_DIGEST_LENGTH]; - CC_SHA1( cStr, (CC_LONG)[self length], digest ); - - return [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; -} - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSDictionary+DTError.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSDictionary+DTError.h deleted file mode 100644 index a3ea807..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSDictionary+DTError.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// NSDictionary+DTError.h -// DTFoundation -// -// Created by Oliver Drobnik on 4/16/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import - -/** - A collection of useful additions for `NSDictionary` to deal with Property Lists and also to get error handling for malformed data. - */ - -@interface NSDictionary (DTError) - -/**------------------------------------------------------------------------------------- - @name Property List Error Handling - --------------------------------------------------------------------------------------- - */ - -/** - Creates and returns a dictionary using the keys and values found in a file specified by a given URL. - - @param URL An URL. The file identified by URL must contain a string representation of a property list whose root object is a dictionary. - @param error If an error occurs, upon returns contains an NSError object that describes the problem. If you are not interested in possible errors, pass in `NULL`. - @return A new dictionary that contains the dictionary at path, or `nil` if there is a file error or if the contents of the file are an invalid representation of a dictionary. - */ -+ (NSDictionary *)dictionaryWithContentsOfURL:(NSURL *)URL error:(NSError **)error; - -/** - Creates and returns a dictionary using the keys and values found in a file specified by a given path. - - @param path A full or relative pathname. The file identified by path must contain a string representation of a property list whose root object is a dictionary. - @param error If an error occurs, upon returns contains an NSError object that describes the problem. If you are not interested in possible errors, pass in `NULL`. - @return A new dictionary that contains the dictionary at path, or `nil` if there is a file error or if the contents of the file are an invalid representation of a dictionary. - */ -+ (NSDictionary *)dictionaryWithContentsOfFile:(NSString *)path error:(NSError **)error; - -/** - Creates and returns a dictionary using the keys and values found in the given data. - - @param data The data object identified by data must contain a string representation of a property list whose root object is a dictionary. - @param error If an error occurs, upon returns contains an NSError object that describes the problem. If you are not interested in possible errors, pass in `NULL`. - @return A new dictionary that contains the dictionary at path, or `nil` if there is a file error or if the contents of the file are an invalid representation of a dictionary. - */ -+ (NSDictionary *)dictionaryWithContentsOfData:(NSData *)data error:(NSError **)error; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSDictionary+DTError.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSDictionary+DTError.m deleted file mode 100644 index 73917f8..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSDictionary+DTError.m +++ /dev/null @@ -1,58 +0,0 @@ -// -// NSDictionary+DTError.m -// DTFoundation -// -// Created by Oliver Drobnik on 4/16/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "NSDictionary+DTError.h" -#import "DTFoundationConstants.h" - -@implementation NSDictionary (DTError) - -+ (NSDictionary *)dictionaryWithContentsOfURL:(NSURL *)URL error:(NSError **)error -{ - NSData *readData = [NSData dataWithContentsOfURL:URL options:0 error:error]; - - if (!readData) - { - return nil; - } - - return [NSDictionary dictionaryWithContentsOfData:readData error:error]; -} - -+ (NSDictionary *)dictionaryWithContentsOfFile:(NSString *)path error:(NSError **)error -{ - NSURL *url = [NSURL fileURLWithPath:path]; - return [NSDictionary dictionaryWithContentsOfURL:url error:error]; -} - -+ (NSDictionary *)dictionaryWithContentsOfData:(NSData *)data error:(NSError **)error -{ - CFErrorRef parseError = NULL; - NSDictionary *dictionary = (__bridge_transfer NSDictionary *)CFPropertyListCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef)data, kCFPropertyListImmutable, NULL, (CFErrorRef *)&parseError); - - // we check if it is the correct type and only return it if it is - if ([dictionary isKindOfClass:[NSDictionary class]]) - { - return dictionary; - } - else - { - if (parseError) - { - if (error) - { - *error = (__bridge NSError *)parseError; - } - - CFRelease(parseError); - } - - return nil; - } -} - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSFileWrapper+DTCopying.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSFileWrapper+DTCopying.h deleted file mode 100644 index 5d79dd3..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSFileWrapper+DTCopying.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// NSFileWrapper+DTCopying.h -// DTFoundation -// -// Created by Oliver Drobnik on 10/19/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import - -/** - Methods for copying file wrappers. - */ -@interface NSFileWrapper (DTCopying) - -/** - Creates a copy of the receiver by deep copying all contained sub filewrappers. - */ -- (NSFileWrapper *)fileWrapperByDeepCopying; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSFileWrapper+DTCopying.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSFileWrapper+DTCopying.m deleted file mode 100644 index c492d86..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSFileWrapper+DTCopying.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// NSFileWrapper+DTCopying.m -// DTFoundation -// -// Created by Oliver Drobnik on 10/19/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "NSFileWrapper+DTCopying.h" - -@implementation NSFileWrapper (DTCopying) - -- (NSFileWrapper *)fileWrapperByDeepCopying -{ - if ([self isDirectory]) - { - NSMutableDictionary *subFileWrappers = [NSMutableDictionary dictionary]; - - [self.fileWrappers enumerateKeysAndObjectsUsingBlock:^(NSString *fileName, NSFileWrapper *fileWrapper, BOOL *stop) { - NSFileWrapper *copyWrapper = [fileWrapper fileWrapperByDeepCopying]; - subFileWrappers[fileName] = copyWrapper; - }]; - - NSFileWrapper *fileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:subFileWrappers]; - - return fileWrapper; - } - - NSFileWrapper *fileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents:self.regularFileContents]; - return fileWrapper; -} - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSMutableArray+DTMoving.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSMutableArray+DTMoving.h deleted file mode 100644 index d138c3b..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSMutableArray+DTMoving.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// NSMutableArray+DTMoving.h -// DTFoundation -// -// Created by Oliver Drobnik on 9/27/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import - -/** - Methods that add convenient moving methods to `NSMutableArray`. - */ - -@interface NSMutableArray (DTMoving) - -/** - Moves the object at the specified indexes to the new location. - - @param indexes The indexes of the objects to move. - @param idx The index in the mutable array at which to insert the objects. - */ -- (void)moveObjectsAtIndexes:(NSIndexSet *)indexes toIndex:(NSUInteger)idx; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSMutableArray+DTMoving.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSMutableArray+DTMoving.m deleted file mode 100644 index e64ec21..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSMutableArray+DTMoving.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// NSMutableArray+DTMoving.m -// DTFoundation -// -// Created by Oliver Drobnik on 9/27/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "NSMutableArray+DTMoving.h" - -@implementation NSMutableArray (DTMoving) - -// credit: http://www.cocoabuilder.com/archive/cocoa/189484-nsarray-move-items-at-indexes.html - -- (void)moveObjectsAtIndexes:(NSIndexSet *)indexes toIndex:(NSUInteger)idx -{ - NSArray *objectsToMove = [self objectsAtIndexes:indexes]; - - // If any of the removed objects come before the index, we want to decrement the index appropriately - idx -= [indexes countOfIndexesInRange:(NSRange){0, idx}]; - - [self removeObjectsAtIndexes:indexes]; - [self replaceObjectsInRange:(NSRange){idx,0} withObjectsFromArray:objectsToMove]; -} - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTFormatNumbers.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTFormatNumbers.h deleted file mode 100644 index 567018b..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTFormatNumbers.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// NSString+DTFormatNumbers.h -// DTFoundation -// -// Created by Oliver Drobnik on 11/25/11. -// Copyright (c) 2011 Cocoanetics. All rights reserved. -// - -#import - -/** - A collection of category extensions for `NSString` dealing with the formatting of numbers in special contexts. - */ - -@interface NSString (DTFormatNumbers) - -/**------------------------------------------------------------------------------------- - @name Formatting File Sizes - --------------------------------------------------------------------------------------- - */ - - -/** Formats the passed number as a byte value in a form that is pleasing to the user when displayed next to a progress bar. - - Output numbers are rounded to one decimal place. Bytes are not abbreviated because most users might not be used to B for that. Higher units are kB, MB, GB and TB. - - @param bytes The value of the bytes to be formatted - @return Returns the formatted string. - - */ -+ (NSString *)stringByFormattingBytes:(long long)bytes; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTFormatNumbers.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTFormatNumbers.m deleted file mode 100644 index 5d3d36a..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTFormatNumbers.m +++ /dev/null @@ -1,32 +0,0 @@ -// -// NSString+DTFormatNumbers.m -// DTFoundation -// -// Created by Oliver Drobnik on 11/25/11. -// Copyright (c) 2011 Cocoanetics. All rights reserved. -// - -#import "NSString+DTFormatNumbers.h" - -@implementation NSString (DTFormatNumbers) - -+ (NSString *)stringByFormattingBytes:(long long)bytes -{ - NSArray *units = @[@"%1.0f Bytes", @"%1.1f KB", @"%1.1f MB", @"%1.1f GB", @"%1.1f TB"]; - - long long value = bytes * 10; - for (NSUInteger i=0; i<[units count]; i++) - { - if (i > 0) - { - value = value/1024; - } - if (value < 10000) - { - return [NSString stringWithFormat:units[i], value/10.0]; - } - } - - return [NSString stringWithFormat:units[[units count]-1], value/10.0]; -} -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTPaths.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTPaths.h deleted file mode 100644 index e686573..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTPaths.h +++ /dev/null @@ -1,87 +0,0 @@ -// -// NSString+DTPaths.h -// DTFoundation -// -// Created by Oliver Drobnik on 2/15/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import - -/** - A collection of useful additions for `NSString` to deal with paths. - */ - -@interface NSString (DTPaths) - -/**------------------------------------------------------------------------------------- - @name Getting Standard Paths - --------------------------------------------------------------------------------------- - */ - -/** Determines the path to the Library/Caches folder in the current application's sandbox. - - The return value is cached on the first call. - - @return The path to the app's Caches folder. - */ -+ (NSString * _Nonnull)cachesPath; - - -/** Determines the path to the Documents folder in the current application's sandbox. - - The return value is cached on the first call. - - @return The path to the app's Documents folder. - */ -+ (NSString * _Nonnull)documentsPath; - -/**------------------------------------------------------------------------------------- - @name Getting Temporary Paths - --------------------------------------------------------------------------------------- - */ - -/** Determines the path for temporary files in the current application's sandbox. - - The return value is cached on the first call. This value is different in Simulator than on the actual device. In Simulator you get a reference to /tmp wheras on iOS devices it is a special folder inside the application folder. - - @return The path to the app's folder for temporary files. - */ -+ (NSString * _Nonnull)temporaryPath; - - -/** Creates a unique filename that can be used for one temporary file or folder. - - The returned string is different on every call. It is created by combining the result from temporaryPath with a unique UUID. - - @return The generated temporary path. - */ -+ (NSString * _Nonnull)pathForTemporaryFile; - - -/**------------------------------------------------------------------------------------- - @name Working with Paths - --------------------------------------------------------------------------------------- - */ - -/** Appends or Increments a sequence number in brackets - - If the receiver already has a number suffix then it is incremented. If not then (1) is added. - - @return The incremented path -*/ -- (NSString * _Nonnull)pathByIncrementingSequenceNumber; - - -/** Removes a sequence number in brackets - - If the receiver number suffix then it is removed. If not the receiver is returned. - - @return The modified path - */ -- (NSString * _Nonnull)pathByDeletingSequenceNumber; - - - - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTPaths.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTPaths.m deleted file mode 100644 index 1f1f590..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTPaths.m +++ /dev/null @@ -1,115 +0,0 @@ -// -// NSString+DTPaths.m -// DTFoundation -// -// Created by Oliver Drobnik on 2/15/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "NSString+DTPaths.h" - -@implementation NSString (DTPaths) - -#pragma mark Standard Paths - -+ (NSString *)cachesPath -{ - static dispatch_once_t onceToken; - static NSString *cachedPath; - - dispatch_once(&onceToken, ^{ - cachedPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; - }); - - return cachedPath; -} - -+ (NSString *)documentsPath -{ - static dispatch_once_t onceToken; - static NSString *cachedPath; - - dispatch_once(&onceToken, ^{ - cachedPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; - }); - - return cachedPath; -} - -#pragma mark Temporary Paths - -+ (NSString *)temporaryPath -{ - static dispatch_once_t onceToken; - static NSString *cachedPath; - - dispatch_once(&onceToken, ^{ - cachedPath = NSTemporaryDirectory(); - }); - - return cachedPath; -} - -+ (NSString *)pathForTemporaryFile -{ - CFUUIDRef newUniqueId = CFUUIDCreate(kCFAllocatorDefault); - CFStringRef newUniqueIdString = CFUUIDCreateString(kCFAllocatorDefault, newUniqueId); - NSString *tmpPath = [[NSString temporaryPath] stringByAppendingPathComponent:(__bridge NSString *)newUniqueIdString]; - CFRelease(newUniqueId); - CFRelease(newUniqueIdString); - - return tmpPath; -} - -#pragma mark Working with Paths - -- (NSString *)pathByIncrementingSequenceNumber -{ - NSString *baseName = [self stringByDeletingPathExtension]; - NSString *extension = [self pathExtension]; - - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\(([0-9]+)\\)$" options:0 error:NULL]; - __block NSInteger sequenceNumber = 0; - - [regex enumerateMatchesInString:baseName options:0 range:NSMakeRange(0, [baseName length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){ - - NSRange range = [match rangeAtIndex:1]; // first capture group - NSString *substring= [self substringWithRange:range]; - - sequenceNumber = [substring integerValue]; - *stop = YES; - }]; - - NSString *nakedName = [baseName pathByDeletingSequenceNumber]; - - if ([extension isEqualToString:@""]) - { - return [nakedName stringByAppendingFormat:@"(%d)", (int)sequenceNumber+1]; - } - - return [[nakedName stringByAppendingFormat:@"(%d)", (int)sequenceNumber+1] stringByAppendingPathExtension:extension]; -} - -- (NSString *)pathByDeletingSequenceNumber -{ - NSString *baseName = [self stringByDeletingPathExtension]; - - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\([0-9]+\\)$" options:0 error:NULL]; - __block NSRange range = NSMakeRange(NSNotFound, 0); - - [regex enumerateMatchesInString:baseName options:0 range:NSMakeRange(0, [baseName length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop) { - - range = [match range]; - - *stop = YES; - }]; - - if (range.location != NSNotFound) - { - return [self stringByReplacingCharactersInRange:range withString:@""]; - } - - return self; -} - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTURLEncoding.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTURLEncoding.h deleted file mode 100644 index f83b9a8..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTURLEncoding.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// NSString+DTURLEncoding.h -// DTFoundation -// -// Created by Oliver Drobnik on 4/16/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import - -/** - A collection of useful additions for `NSString` to deal with URL encoding. - */ - -@interface NSString (DTURLEncoding) - -/**------------------------------------------------------------------------------------- - @name Encoding Strings for URLs - --------------------------------------------------------------------------------------- - */ - - -/** Encoding suitable for use in URLs. - - stringByAddingPercentEscapes does not replace serveral characters which are problematics in URLs. - - @return The encoded version of the receiver. - */ -- (NSString *)stringByURLEncoding; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTURLEncoding.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTURLEncoding.m deleted file mode 100644 index f3d2b2f..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTURLEncoding.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// NSString+DTURLEncoding.m -// DTFoundation -// -// Created by Oliver Drobnik on 4/16/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "NSString+DTURLEncoding.h" - -@implementation NSString (DTURLEncoding) - -- (NSString *)stringByURLEncoding -{ -#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_9_0 - return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef)self, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8); -#else - - static NSCharacterSet *allowedCharacters = nil; - static dispatch_once_t onceToken; - - dispatch_once(&onceToken, ^{ - NSMutableCharacterSet *tmpSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy]; - - // add some characters that might have special meaning - [tmpSet removeCharactersInString: @"!*'();:@&=+$,/?%#[]"]; - allowedCharacters = [tmpSet copy]; - }); - - return [self stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters]; -#endif -} - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTUtilities.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTUtilities.h deleted file mode 100644 index 14ddf40..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTUtilities.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// NSString+DTUtilities.h -// DTFoundation -// -// Created by Oliver Drobnik on 4/16/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import - -/** - A collection of utility additions for `NSString`. - */ - -@interface NSString (DTUtilities) - -/**------------------------------------------------------------------------------------- - @name Working with Identifiers - --------------------------------------------------------------------------------------- - */ - -/** Creates a new string that contains a generated UUID. - - @return The path to the app's Caches folder. - */ -+ (NSString *)stringWithUUID; - - -/**------------------------------------------------------------------------------------- - @name Working with Checksums - --------------------------------------------------------------------------------------- - */ - -/** creates an MD5 checksum - - @return returns an MD5 hash for the receiver. - */ -- (NSString *)md5Checksum; - - - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTUtilities.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTUtilities.m deleted file mode 100644 index d266609..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSString+DTUtilities.m +++ /dev/null @@ -1,44 +0,0 @@ -// -// NSString+DTUtilities.m -// DTFoundation -// -// Created by Oliver Drobnik on 4/16/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "NSString+DTUtilities.h" - -#import - -@implementation NSString (DTUtilities) - -+ (NSString *)stringWithUUID -{ - CFUUIDRef uuidObj = CFUUIDCreate(nil);//create a new UUID - - //get the string representation of the UUID - NSString *uuidString = (__bridge_transfer NSString *)CFUUIDCreateString(nil, uuidObj); - - CFRelease(uuidObj); - return uuidString; -} - -- (NSString *)md5Checksum -{ - const char *cStr = [self UTF8String]; - unsigned char result [CC_MD5_DIGEST_LENGTH]; - CC_MD5( cStr, (CC_LONG)strlen(cStr), result ); - - return [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", - result[0], result[1], - result[2], result[3], - result[4], result[5], - result[6], result[7], - result[8], result[9], - result[10], result[11], - result[12], result[13], - result[14], result[15] - ]; -} - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSURL+DTComparing.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSURL+DTComparing.h deleted file mode 100644 index 87e1f6c..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSURL+DTComparing.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// NSURL+DTComparing.h -// DTFoundation -// -// Created by Oliver Drobnik on 13.11.12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import - -/** - Category for comparing URLs. - - Contrary to what you might think isEqual: does not work properly in many cases. - */ - -@interface NSURL (DTComparing) - -/** - Compares the receiver with another URL - @param URL another URL - @returns `YES` if the receiver is equivalent with the passed URL - */ -- (BOOL)isEqualToURL:(NSURL *)URL; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSURL+DTComparing.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSURL+DTComparing.m deleted file mode 100644 index 61f55c9..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSURL+DTComparing.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// NSURL+DTComparing.m -// DTFoundation -// -// Created by Oliver Drobnik on 13.11.12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "NSURL+DTComparing.h" - -@implementation NSURL (DTComparing) - -- (BOOL)isEqualToURL:(NSURL *)URL -{ - // scheme must be same - if (![[self scheme] isEqualToString:[URL scheme]]) - { - return NO; - } - - // host must be same - if (![[self host] isEqualToString:[URL host]]) - { - return NO; - } - - // path must be same - if (![[self path] isEqualToString:[URL path]]) - { - return NO; - } - - return YES; -} - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSURL+DTUnshorten.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSURL+DTUnshorten.h deleted file mode 100644 index 0abebf5..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSURL+DTUnshorten.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// NSURL+DTUnshorten.h -// DTFoundation -// -// Created by Oliver Drobnik on 6/2/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import - -/** Method for getting the full length URL for a shortened one. - -For example: - - NSURL *url = [NSURL URLWithString:@"buff.ly/L4uGoza"]; - - [url unshortenWithCompletion:^(NSURL *url) { - NSLog(@"Unshortened: %@", url); - }]; - - */ - -typedef void (^NSURLUnshortenCompletionHandler)(NSURL *); - -@interface NSURL (DTUnshorten) - -/** - Unshortens the receiver and returns the long URL via the completion handler. - - Results are cached and therefore a subsequent call for the same receiver will return instantly if the result is still present in the cache. - @param completion The completion handler - */ -- (void)unshortenWithCompletion:(NSURLUnshortenCompletionHandler)completion; - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSURL+DTUnshorten.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/NSURL+DTUnshorten.m deleted file mode 100644 index e1ba04a..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/NSURL+DTUnshorten.m +++ /dev/null @@ -1,74 +0,0 @@ -// -// NSURL+DTUnshorten.m -// DTFoundation -// -// Created by Oliver Drobnik on 6/2/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "NSURL+DTUnshorten.h" - -@implementation NSURL (DTUnshorten) - -- (void)unshortenWithCompletion:(NSURLUnshortenCompletionHandler)completion -{ - static NSCache *unshortenCache = nil; - static dispatch_queue_t shortenQueue = NULL; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - unshortenCache = [[NSCache alloc] init]; - shortenQueue = dispatch_queue_create("DTUnshortenQueue", 0); - }); - - NSURL *shortURL = self; - - // assume HTTP if scheme is missing - if (![self scheme]) - { - NSString *str = [@"http://" stringByAppendingString:[self absoluteString]]; - shortURL = [NSURL URLWithString:str]; - } - - dispatch_async(shortenQueue, ^{ - // look into cache first - NSURL *longURL = [unshortenCache objectForKey:shortURL]; - - // nothing cached, load it - if (!longURL) - { - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:shortURL]; - request.HTTPMethod = @"HEAD"; - - void (^networkCompletion)(NSURL *responseURL) = ^void(NSURL *responseURL) { - // cache result - - if (responseURL) - { - [unshortenCache setObject:responseURL forKey:shortURL]; - } - - if (completion) - { - completion(responseURL); - } - }; - -#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_9_0 - NSError *error = nil; - NSHTTPURLResponse *response = nil; - [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; - networkCompletion([response URL]); -#else - [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * data, NSURLResponse * response, NSError * error) { - networkCompletion([response URL]); - }] resume]; -#endif - } else if (completion) { - - completion(longURL); - } - }); -} - -@end diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTActivityTitleView.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTActivityTitleView.h deleted file mode 100644 index 8c02043..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTActivityTitleView.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// DTActivityTitleView.h -// DTFoundation -// -// Created by Rene Pirringer on 12.09.12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import -#import - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -/** - Alternative view for showing titles with a configurable activity indicator - instead of default title view in navigationItem. - */ -@interface DTActivityTitleView : UIView - -/** - Title that is shown - */ -@property (nonatomic, copy) NSString *title; - -/** - When busy is set to YES the activity indicator starts spinning - When set to NO the activity indicator stops spinning - */ -@property (nonatomic, assign) BOOL busy; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTActivityTitleView.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTActivityTitleView.m deleted file mode 100644 index 571a586..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTActivityTitleView.m +++ /dev/null @@ -1,129 +0,0 @@ -// -// DTActivityTitleView.m -// DTFoundation -// -// Created by Rene Pirringer on 12.09.12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "DTActivityTitleView.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -@interface DTActivityTitleView () - -@property (nonatomic, strong) UIActivityIndicatorView *activityIndicator; -@property (nonatomic, strong) UILabel *titleLabel; - -@end - - -@implementation DTActivityTitleView - -- (id)init -{ - self = [super init]; - - if (self) - { - self.titleLabel = [[UILabel alloc] init]; - self.titleLabel.backgroundColor = [UIColor clearColor]; - - self.activityIndicator.hidesWhenStopped = YES; - - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) - { - if (@available(iOS 13, tvOS 13, *)) { - self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleMedium]; - } - else - { - #if TARGET_OS_TV - self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; - #else - self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; - #endif - } - - self.titleLabel.textColor = [UIColor colorWithRed:113.0/255.0 green:120.0/255.0 blue:128.0/255.0 alpha:1.0]; - self.titleLabel.shadowOffset = CGSizeMake(0, 1); - self.titleLabel.shadowColor = [UIColor whiteColor]; - } - else - { - self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; - self.titleLabel.textColor = [UIColor whiteColor]; - self.titleLabel.shadowOffset = CGSizeMake(0, -1); - self.titleLabel.shadowColor = [UIColor blackColor]; - } - - self.titleLabel.font = [UIFont boldSystemFontOfSize:20]; - [self addSubview:self.titleLabel]; - [self addSubview:self.activityIndicator]; - } - return self; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; -} - -#pragma mark - Properties - -- (void)setBusy:(BOOL)busy -{ - if (busy) - { - [self.activityIndicator startAnimating]; - } - else - { - [self.activityIndicator stopAnimating]; - } - - [self setNeedsLayout]; -} - -- (BOOL)busy -{ - return self.activityIndicator.isAnimating; -} - -- (void)setTitle:(NSString *)title -{ - self.titleLabel.text = title; - CGFloat gap = 5.0; - CGFloat height = self.activityIndicator.frame.size.height; - -#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_6_1 - // issue 60: sizeWithFont: is deprecated with deployment target >= iOS 7 - NSDictionary *attribs = @{NSFontAttributeName:self.titleLabel.font}; - CGSize neededSize = [self.titleLabel.text sizeWithAttributes:attribs]; -#else - CGSize neededSize = [self.titleLabel.text sizeWithFont:self.titleLabel.font]; -#endif - - if (height < neededSize.height) - { - height = neededSize.height; - } - - CGRect titleRect = CGRectMake(self.activityIndicator.frame.size.width+gap, 0, neededSize.width, height); - self.titleLabel.frame = titleRect; - self.bounds = CGRectMake(0, 0, self.activityIndicator.frame.size.width+neededSize.width+gap, height); - [self setNeedsLayout]; -} - -- (NSString *)title -{ - return self.titleLabel.text; -} - -@synthesize activityIndicator = _activityIndicator; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.h deleted file mode 100644 index 578d8ea..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// DTAnimatedGIF.h -// DTFoundation -// -// Created by Oliver Drobnik on 7/2/14. -// Copyright (c) 2014 Cocoanetics. All rights reserved. -// - -#import -#import - -#if TARGET_OS_IPHONE - -#import - - -/** - Loads an animated GIF from file, compatible with UIImageView - */ -UIImage *DTAnimatedGIFFromFile(NSString *path); - -/** - Loads an animated GIF from data, compatible with UIImageView - */ -UIImage *DTAnimatedGIFFromData(NSData *data); - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.m deleted file mode 100644 index e63f605..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.m +++ /dev/null @@ -1,145 +0,0 @@ -// -// DTAnimatedGIF.m -// DTFoundation -// -// Created by Oliver Drobnik on 7/2/14. -// Copyright (c) 2014 Cocoanetics. All rights reserved. -// - -#import "DTAnimatedGIF.h" - -#if TARGET_OS_IPHONE - -#import - -// returns the frame duration for a given image in 1/100th seconds -// source: http://stackoverflow.com/questions/16964366/delaytime-or-unclampeddelaytime-for-gifs -static NSUInteger DTAnimatedGIFFrameDurationForImageAtIndex(CGImageSourceRef source, NSUInteger index) -{ - NSUInteger frameDuration = 10; - - NSDictionary *frameProperties = CFBridgingRelease(CGImageSourceCopyPropertiesAtIndex(source,index,nil)); - NSDictionary *gifProperties = frameProperties[(NSString *)kCGImagePropertyGIFDictionary]; - - NSNumber *delayTimeUnclampedProp = gifProperties[(NSString *)kCGImagePropertyGIFUnclampedDelayTime]; - - if(delayTimeUnclampedProp) - { - frameDuration = [delayTimeUnclampedProp floatValue]*100; - } - else - { - NSNumber *delayTimeProp = gifProperties[(NSString *)kCGImagePropertyGIFDelayTime]; - - if(delayTimeProp) - { - frameDuration = [delayTimeProp floatValue]*100; - } - } - - // Many annoying ads specify a 0 duration to make an image flash as quickly as possible. - // We follow Firefox's behavior and use a duration of 100 ms for any frames that specify - // a duration of <= 10 ms. See and - // for more information. - - if (frameDuration < 1) - { - frameDuration = 10; - } - - return frameDuration; -} - -// returns the great common factor of two numbers -static NSUInteger DTAnimatedGIFGreatestCommonFactor(NSUInteger num1, NSUInteger num2) -{ - NSUInteger t, remainder; - - if (num1 < num2) - { - t = num1; - num1 = num2; - num2 = t; - } - - remainder = num1 % num2; - - if (!remainder) - { - return num2; - } - else - { - return DTAnimatedGIFGreatestCommonFactor(num2, remainder); - } -} - -static UIImage *DTAnimatedGIFFromImageSource(CGImageSourceRef source) -{ - size_t const numImages = CGImageSourceGetCount(source); - - NSMutableArray *frames = [NSMutableArray arrayWithCapacity:numImages]; - - // determine gretest common factor of all image durations - NSUInteger greatestCommonFactor = DTAnimatedGIFFrameDurationForImageAtIndex(source, 0); - - for (NSUInteger i=1; i -#import - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -/** - Constant used by DTCustomColoredAccessory to specify the type of accessory. - */ -typedef NS_ENUM(NSUInteger, DTCustomColoredAccessoryType) -{ - /** - An accessoring pointing to the right side - */ - DTCustomColoredAccessoryTypeRight = 0, - - /** - An accessoring pointing to the left side - */ - DTCustomColoredAccessoryTypeLeft, - - /** - An accessoring pointing upwards - */ - DTCustomColoredAccessoryTypeUp, - - /** - An accessoring pointing downwards - */ - DTCustomColoredAccessoryTypeDown, - - /** - A front square drawn on top of a back square with the back square offset up and to the right - */ - DTCustomColoredAccessoryTypeSquare - -}; - -/** - An accessory control that can be used instead of the standard disclosure indicator in a `UITableView`. See the DTCustomColoredAccessoryType for supported styles. - */ - -@interface DTCustomColoredAccessory : UIControl - -/**------------------------------------------------------------------------------------- - @name Creating A Custom-Colored Accessory - --------------------------------------------------------------------------------------- - */ - -/** - Creates a custom-colored right disclosure indicator accessory with a given color - @param color The color to use - */ -+ (DTCustomColoredAccessory *)accessoryWithColor:(UIColor *)color; - -/** - Creates a custom-colored accessory with a given color and type - @param color The color to use - @param type The DTCustomColoredAccessoryType to use - */ -+ (DTCustomColoredAccessory *)accessoryWithColor:(UIColor *)color type:(DTCustomColoredAccessoryType)type; - -/** - Creates a custom-colored square on top of a square with offset - @param color The color to use - @param backgroundColor The backgroundColor to use - */ -+ (DTCustomColoredAccessory *)squareAccessoryWithColor:(UIColor *)color backgroundColor:(UIColor *)backgroundColor; - -/**------------------------------------------------------------------------------------- - @name Properties - --------------------------------------------------------------------------------------- - */ - -/** - The color to draw the accessory in - */ -@property (nonatomic, retain) UIColor *accessoryColor; - -/** - The color to draw the accessory in while highlighted - */ -@property (nonatomic, retain) UIColor *highlightedColor; -/** - The color to draw the front square of the square accessory in while not highlighted - */ -@property (nonatomic, retain) UIColor *frontSquareAccessoryColor; -/** - The color to draw the back square of the square accessory in while not highlighted - */ -@property (nonatomic, retain) UIColor *backSquareAccessoryColor; - -/** - The DTCustomColoredAccessoryType of the accessory. - */ -@property (nonatomic, assign) DTCustomColoredAccessoryType type; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTCustomColoredAccessory.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTCustomColoredAccessory.m deleted file mode 100644 index 91d3712..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTCustomColoredAccessory.m +++ /dev/null @@ -1,242 +0,0 @@ -// -// DTCustomColoredAccessory.m -// DTFoundation -// -// Created by Oliver Drobnik on 2/10/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "DTCustomColoredAccessory.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -@implementation DTCustomColoredAccessory -{ - UIColor *_accessoryColor; - UIColor *_highlightedColor; - - DTCustomColoredAccessoryType _type; -} - -#pragma mark - Creating A Custom-Colored Accessory - -+ (DTCustomColoredAccessory *)accessoryWithColor:(UIColor *)color -{ - return [self accessoryWithColor:color type:DTCustomColoredAccessoryTypeRight]; -} - -+ (DTCustomColoredAccessory *)accessoryWithColor:(UIColor *)color type:(DTCustomColoredAccessoryType)type -{ - DTCustomColoredAccessory *ret = [[DTCustomColoredAccessory alloc] initWithFrame:CGRectMake(0, 0, 15.0, 15.0)]; - ret.accessoryColor = color; - ret.frontSquareAccessoryColor = color; - ret.type = type; - ret.backSquareAccessoryColor = color == [UIColor blackColor] ? [UIColor whiteColor] : [UIColor blackColor]; - - return ret; -} - -+ (DTCustomColoredAccessory *)squareAccessoryWithColor:(UIColor *)color backgroundColor:(UIColor *)backgroundColor -{ - DTCustomColoredAccessory *ret = [[DTCustomColoredAccessory alloc] initWithFrame:CGRectMake(0, 0, 15.0, 15.0)]; - ret.accessoryColor = color; - ret.frontSquareAccessoryColor = color; - ret.type = DTCustomColoredAccessoryTypeSquare; - ret.backSquareAccessoryColor = backgroundColor; - - return ret; -} - -#pragma mark - Internal Methods - -- (id)initWithFrame:(CGRect)frame -{ - if ((self = [super initWithFrame:frame])) - { - self.backgroundColor = [UIColor clearColor]; - } - return self; -} - -- (void)drawRect:(CGRect)rect -{ - CGContextRef ctxt = UIGraphicsGetCurrentContext(); - - const CGFloat R = 4.5; - - BOOL doFinal = true; - - switch (_type) - { - case DTCustomColoredAccessoryTypeRight: - { - // (x,y) is the tip of the arrow - CGFloat x = CGRectGetMaxX(self.bounds)-3.0;; - CGFloat y = CGRectGetMidY(self.bounds); - - CGContextMoveToPoint(ctxt, x-R, y-R); - CGContextAddLineToPoint(ctxt, x, y); - CGContextAddLineToPoint(ctxt, x-R, y+R); - - break; - } - - case DTCustomColoredAccessoryTypeLeft: - { - // (x,y) is the tip of the arrow - CGFloat x = CGRectGetMaxX(self.bounds)-10.0;; - CGFloat y = CGRectGetMidY(self.bounds); - - CGContextMoveToPoint(ctxt, x+R, y+R); - CGContextAddLineToPoint(ctxt, x, y); - CGContextAddLineToPoint(ctxt, x+R, y-R); - break; - } - - case DTCustomColoredAccessoryTypeUp: - { - // (x,y) is the tip of the arrow - CGFloat x = CGRectGetMaxX(self.bounds)-7.0;; - CGFloat y = CGRectGetMinY(self.bounds)+5.0; - - CGContextMoveToPoint(ctxt, x-R, y+R); - CGContextAddLineToPoint(ctxt, x, y); - CGContextAddLineToPoint(ctxt, x+R, y+R); - - break; - } - - case DTCustomColoredAccessoryTypeDown: - { - // (x,y) is the tip of the arrow - CGFloat x = CGRectGetMaxX(self.bounds)-7.0;; - CGFloat y = CGRectGetMaxY(self.bounds)-5.0; - - CGContextMoveToPoint(ctxt, x-R, y-R); - CGContextAddLineToPoint(ctxt, x, y); - CGContextAddLineToPoint(ctxt, x+R, y-R); - - break; - } - - case DTCustomColoredAccessoryTypeSquare: - { - doFinal = false; - - // (x,y) is the tip of the arrow - CGFloat x = CGRectGetMinX(self.bounds)+5.0; - CGFloat y = CGRectGetMinY(self.bounds)+1.0; - - CGFloat s = 9.0; - - CGContextMoveToPoint(ctxt, x, y); - CGContextAddLineToPoint(ctxt, x+s, y); - CGContextAddLineToPoint(ctxt, x+s, y+s); - CGContextAddLineToPoint(ctxt, x, y+s); - CGContextClosePath(ctxt); - - CGContextSetLineCap(ctxt, kCGLineCapSquare); - CGContextSetLineJoin(ctxt, kCGLineJoinMiter); - CGContextSetLineWidth(ctxt, 3); - - if (self.highlighted) - { - [self.highlightedColor setStroke]; - } - else - { - _accessoryColor = self.backSquareAccessoryColor; - [self.accessoryColor setStroke]; - } - - CGContextStrokePath(ctxt); - - x = CGRectGetMinX(self.bounds)+3.0; - y = CGRectGetMinY(self.bounds)+3.0; - - CGContextMoveToPoint(ctxt, x, y); - CGContextAddLineToPoint(ctxt, x+s, y); - CGContextAddLineToPoint(ctxt, x+s, y+s); - CGContextAddLineToPoint(ctxt, x, y+s); - CGContextClosePath(ctxt); - - CGContextSetLineCap(ctxt, kCGLineCapSquare); - CGContextSetLineJoin(ctxt, kCGLineJoinMiter); - CGContextSetLineWidth(ctxt, 3); - - if (self.highlighted) - { - [self.highlightedColor setStroke]; - } - else - { - _accessoryColor = self.frontSquareAccessoryColor; - [self.accessoryColor setStroke]; - } - - CGContextStrokePath(ctxt); - - break; - } - - default: - break; - } - - if (doFinal) - { - CGContextSetLineCap(ctxt, kCGLineCapSquare); - CGContextSetLineJoin(ctxt, kCGLineJoinMiter); - CGContextSetLineWidth(ctxt, 3); - - if (self.highlighted) - { - [self.highlightedColor setStroke]; - } - else - { - [self.accessoryColor setStroke]; - } - - CGContextStrokePath(ctxt); - } -} - -#pragma mark - Properties - -- (void)setHighlighted:(BOOL)highlighted -{ - [super setHighlighted:highlighted]; - - [self setNeedsDisplay]; -} - -- (UIColor *)accessoryColor -{ - if (!_accessoryColor) - { - return [UIColor blackColor]; - } - - return _accessoryColor; -} - -- (UIColor *)highlightedColor -{ - if (!_highlightedColor) - { - return [UIColor whiteColor]; - } - - return _highlightedColor; -} - -@synthesize accessoryColor = _accessoryColor; -@synthesize highlightedColor = _highlightedColor; -@synthesize type = _type; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTPieProgressIndicator.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTPieProgressIndicator.h deleted file mode 100644 index d4238de..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTPieProgressIndicator.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// DTPieProgressIndicator.h -// DTFoundation -// -// Created by Oliver Drobnik on 16.05.12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import -#import - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -/** - A Progress indicator shaped like a pie chart. If you don't specify a color then the current tintColor is used. This is useful when using it as a subview of a UIVisualEffectsView with vibrancy effect. Then all subviews using tintColor have the vibrancy applied. - */ - -@interface DTPieProgressIndicator : UIView - -/** - The progress in percent - */ -@property (nonatomic, assign) float progressPercent; - -/** - The color of the pie - */ -@property (nonatomic, strong) UIColor *color; - -/** - Creates a pie progress indicator of the correct size - */ -+ (DTPieProgressIndicator *)pieProgressIndicator; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTPieProgressIndicator.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTPieProgressIndicator.m deleted file mode 100644 index 74e35bb..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTPieProgressIndicator.m +++ /dev/null @@ -1,118 +0,0 @@ -// -// DTPieProgressIndicator.m -// DTFoundation -// -// Created by Oliver Drobnik on 16.05.12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "DTPieProgressIndicator.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -#import "DTCoreGraphicsUtils.h" - -#define PIE_SIZE CGFloat_(34) - -@implementation DTPieProgressIndicator -{ - float _progressPercent; - UIColor *_color; -} - -+ (DTPieProgressIndicator *)pieProgressIndicator -{ - return [[DTPieProgressIndicator alloc] initWithFrame:CGRectMake(0, 0, PIE_SIZE, PIE_SIZE)]; -} - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) - { - self.contentMode = UIViewContentModeRedraw; - self.backgroundColor = [UIColor clearColor]; - } - return self; -} - -- (void)awakeFromNib -{ - [super awakeFromNib]; - - self.contentMode = UIViewContentModeRedraw; - self.backgroundColor = [UIColor clearColor]; -} - -- (void)drawRect:(CGRect)rect -{ - // Drawing code - CGContextRef ctx = UIGraphicsGetCurrentContext(); - - if (_color) - { - [_color set]; - } - else - { - [self.tintColor set]; - } - - CGContextBeginTransparencyLayer(ctx, NULL); - - CGFloat smallerDimension = MIN(self.bounds.size.width-CGFloat_(6), self.bounds.size.height-CGFloat_(6)); - CGRect drawRect = CGRectMake(round(CGRectGetMidX(self.bounds)-smallerDimension/CGFloat_(2)), round(CGRectGetMidY(self.bounds)-smallerDimension/CGFloat_(2)), smallerDimension, smallerDimension); - - CGContextSetLineWidth(ctx, CGFloat_(3)); - CGContextStrokeEllipseInRect(ctx, drawRect); - - // enough percent to draw - if (_progressPercent > 0.1f) - { - CGPoint center = CGPointMake(CGRectGetMidX(drawRect), CGRectGetMidY(drawRect)); - CGFloat radius = center.x - drawRect.origin.x; - CGFloat angle = CGFloat_(_progressPercent) * CGFloat_(2.0 * M_PI); - - CGContextMoveToPoint(ctx, center.x, center.y); - CGContextAddArc(ctx, center.x, center.y, radius, CGFloat_(-M_PI_2), angle-CGFloat_(M_PI_2), 0); - CGContextAddLineToPoint(ctx, center.x, center.y); - - CGContextFillPath(ctx); - } - - CGContextEndTransparencyLayer(ctx); -} - -- (void)tintColorDidChange -{ - [super tintColorDidChange]; - [self setNeedsDisplay]; -} - -#pragma mark Properties - -- (void)setProgressPercent:(float)progressPercent -{ - if (_progressPercent != progressPercent) - { - _progressPercent = progressPercent; - - [self setNeedsDisplay]; - } -} - -- (void)setColor:(UIColor *)color -{ - if (_color != color) - { - _color = color; - - [self setNeedsDisplay]; - } -} - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTSmartPagingScrollView.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTSmartPagingScrollView.h deleted file mode 100644 index b75571e..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTSmartPagingScrollView.h +++ /dev/null @@ -1,93 +0,0 @@ -// -// DTSmartPagingScrollView.h -// DTSmartPhotoView -// -// Created by Stefan Gugarel on 5/11/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import -#import - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -#import - -@class DTSmartPagingScrollView; - - -/** - Protocol for providing pages to - */ -@protocol DTSmartPagingScrollViewDatasource - -/** - The number of pages for the - @param smartPagingScrollView The scroll view asking - @returns The number of pages - */ -- (NSUInteger)numberOfPagesInSmartPagingScrollView:(DTSmartPagingScrollView *)smartPagingScrollView; - -/** - Method to provide UIViews to be used for the pages - - The frame of the passed view will be adjusted to the page size of the scroll view - @param smartPagingScrollView The scroll view asking - @param index The index of the page to provide - @returns The view to use for the given page index. - */ -- (UIView *)smartPagingScrollView:(DTSmartPagingScrollView *)smartPagingScrollView viewForPageAtIndex:(NSUInteger)index; - -@optional -/** - The number of pages for the - @param smartPagingScrollView The scroll view asking - @param index The index of the page - */ -- (void)smartPagingScrollView:(DTSmartPagingScrollView *)smartPagingScrollView didScrollToPageAtIndex:(NSUInteger)index; - -@end - -/** - A scroll view that automatically manages a set of pages - */ -@interface DTSmartPagingScrollView : UIScrollView - -/** - The page data source for the receiver - */ -@property (nonatomic, DT_WEAK_PROPERTY) IBOutlet id pageDatasource; - -/** - The current page index visible on the receiver - */ -@property (nonatomic, assign) NSUInteger currentPageIndex; - -/** - Reloads the pages from the datasource - */ -- (void)reloadData; - -/** - The range of indexes of the currently visible pages - */ -- (NSRange)rangeOfVisiblePages; - -/** - Scroll the receiver to the given page index - @param page The index of the page to move to - @param animated Whether the move should be animated - */ -- (void)scrollToPage:(NSInteger)page animated:(BOOL)animated; - -/** - Get a view for a specified index - @param index The index of the view to retrieve - */ -- (UIView *)viewForIndex:(NSUInteger)index; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTSmartPagingScrollView.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTSmartPagingScrollView.m deleted file mode 100644 index 75bbfd5..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTSmartPagingScrollView.m +++ /dev/null @@ -1,280 +0,0 @@ -// -// DTSmartPagingScrollView.m -// DTSmartPhotoView -// -// Created by Stefan Gugarel on 5/11/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "DTSmartPagingScrollView.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -#import "DTCoreGraphicsUtils.h" - -@interface DTSmartPagingScrollView () - -- (void)_setupVisiblePageViews; -- (CGRect)frameForPageViewAtIndex:(NSUInteger)index; -- (void)_updateCurrentPage; -- (void)_commonInit; - -@end - - -@implementation DTSmartPagingScrollView -{ - DT_WEAK_VARIABLE id _pageDatasource; - - NSUInteger _numberOfPages; - NSMutableDictionary *_viewsByPage; - - NSMutableSet *_visiblePageViews; - - NSUInteger _currentPageIndex; - - BOOL _firstLayoutDone; -} - -- (instancetype)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) - { - [self _commonInit]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder -{ - self = [super initWithCoder:aDecoder]; - if (self) - { - [self _commonInit]; - } - return self; -} - -- (void)_commonInit -{ -#if !TARGET_OS_TV - self.pagingEnabled = YES; -#endif - // no indicators because zooming subview has there - self.showsVerticalScrollIndicator = NO; - self.showsHorizontalScrollIndicator = NO; - - _viewsByPage = [[NSMutableDictionary alloc] init]; - _visiblePageViews = [[NSMutableSet alloc] init]; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - if (!_numberOfPages) - { - return; - } - - if (self.dragging) - { - // perform update right away - [self _updateCurrentPage]; - } - - // Note: first content size plus page so that the visible view is properly shown - CGSize neededContentSize = CGSizeMake(self.bounds.size.width * _numberOfPages, self.bounds.size.height); - - if (!CGSizeEqualToSize(neededContentSize, self.contentSize)) - { - // frame changed - self.contentSize = neededContentSize; - - [self scrollToPage:_currentPageIndex animated:NO]; - } - - [self _setupVisiblePageViews]; -} - -- (void)_updateCurrentPage -{ - NSUInteger newPageIndex = round(self.contentOffset.x / self.frame.size.width); - - if (_currentPageIndex != newPageIndex) - { - [self willChangeValueForKey:@"currentPageIndex"]; - _currentPageIndex = newPageIndex; - - if ([_pageDatasource respondsToSelector:@selector(smartPagingScrollView:didScrollToPageAtIndex:)]) - { - [_pageDatasource smartPagingScrollView:self didScrollToPageAtIndex:_currentPageIndex]; - } - - [self didChangeValueForKey:@"currentPageIndex"]; - } -} - -- (NSRange)rangeOfVisiblePages -{ - CGFloat position = self.contentOffset.x / self.bounds.size.width; - - NSInteger firstVisibleIndex = MAX(CGFloat_(0), floor(position)); - NSInteger lastVisibleIndex = MIN(ceil(position), CGFloat_(_numberOfPages-1)); - - // check if right page is really visible - CGRect rightFrame = [self frameForPageViewAtIndex:lastVisibleIndex]; - - if (!CGRectIntersectsRect(rightFrame, self.bounds)) - { - lastVisibleIndex--; - } - - // check if left page is really visible - CGRect leftFrame = [self frameForPageViewAtIndex:firstVisibleIndex]; - - if (!CGRectIntersectsRect(leftFrame, self.bounds)) - { - firstVisibleIndex++; - } - - return NSMakeRange(firstVisibleIndex, lastVisibleIndex - firstVisibleIndex + 1); -} - -- (UIView *)viewForIndex:(NSUInteger)index -{ - NSNumber *cacheKey = [NSNumber numberWithUnsignedInteger:index]; - - UIView *view = [_viewsByPage objectForKey:cacheKey]; - - if (view) - { - // got cached view - return view; - } - - // get view from datasource - view = [_pageDatasource smartPagingScrollView:self viewForPageAtIndex:index]; - - // cache it - [_viewsByPage setObject:view forKey:cacheKey]; - - return view; -} - -- (void)_setupVisiblePageViews -{ - NSRange visibleRange = [self rangeOfVisiblePages]; - - [CATransaction begin]; - [CATransaction setDisableActions:NO]; - - NSMutableSet *newVisiblePageViews = [NSMutableSet set]; - - for (NSInteger idx = visibleRange.location; idx)pageDatasource -{ - if (_pageDatasource != pageDatasource) - { - _pageDatasource = pageDatasource; - - // refresh parameters - [self reloadData]; - } -} - -- (void)setCurrentPageIndex:(NSUInteger)currentPageIndex -{ - if (_currentPageIndex != currentPageIndex) - { - _currentPageIndex = currentPageIndex; - - [self scrollToPage:_currentPageIndex animated:NO]; - } -} - -@synthesize pageDatasource = _pageDatasource; -@synthesize currentPageIndex = _currentPageIndex; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTTiledLayerWithoutFade.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTTiledLayerWithoutFade.h deleted file mode 100644 index 66a5739..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTTiledLayerWithoutFade.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// DTTiledLayerWithoutFade.h -// DTRichTextEditor -// -// Created by Oliver Drobnik on 8/24/11. -// Copyright 2011 Cocoanetics. All rights reserved. -// - -#import -#import - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -/** - Simple subclass of `CATiledLayer` that does not fade in drawn tiles. - */ - -@interface DTTiledLayerWithoutFade : CATiledLayer - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTTiledLayerWithoutFade.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTTiledLayerWithoutFade.m deleted file mode 100644 index c133114..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/DTTiledLayerWithoutFade.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// DTTiledLayerWithoutFade.m -// DTRichTextEditor -// -// Created by Oliver Drobnik on 8/24/11. -// Copyright 2011 Cocoanetics. All rights reserved. -// - -#import "DTTiledLayerWithoutFade.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -@implementation DTTiledLayerWithoutFade - -+ (CFTimeInterval)fadeDuration -{ - return 0; -} - -+ (BOOL)shouldDrawOnMainThread -{ - return YES; -} - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/NSURL+DTAppLinks.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/NSURL+DTAppLinks.h deleted file mode 100644 index 662e45e..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/NSURL+DTAppLinks.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// NSURL+DTAppLinks.h -// DTFoundation -// -// Created by Oliver Drobnik on 11/25/11. -// Copyright (c) 2011 Cocoanetics. All rights reserved. -// - -#import -#import - -#if TARGET_OS_IPHONE - -#import - - -/** A collection of category extensions for `NSURL` that provide direct access to built-in app capabilities. - - For example: Open the app store on the page for the app - - NSURL *appURL = [NSURL appStoreURLforApplicationIdentifier:@"463623298"]; - [[UIApplication sharedApplication] openURL:appURL]; - */ - -@interface NSURL (DTAppLinks) - -/**------------------------------------------------------------------------------------- - @name Mobile App Store Pages - --------------------------------------------------------------------------------------- - */ - -/** Returns the URL to open the mobile app store on the app's page. - - URL construction as described in [QA1629](https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html). Test and found to be opening the app store app directly even without the itms: or itms-apps: scheme. This kind of URL can also be used to forward a link to the app to non-iOS devices. - - @param identifier The application identifier that gets assigned to a new app when you add it to iTunes Connect. - @return Returns the URL to the direct app store link - */ -+ (NSURL *)appStoreURLforApplicationIdentifier:(NSString *)identifier; - - -/** Returns the URL to open the mobile app store on the app's review page. - - The reviews page is a sub-page of the normal app landing page you get with appStoreURLforApplicationIdentifier: - - @param identifier The application identifier that gets assigned to a new app when you add it to iTunes Connect. - @return Returns the URL to the direct app store link - */ -+ (NSURL *)appStoreReviewURLForApplicationIdentifier:(NSString *)identifier; - -@end - -#endif - diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/NSURL+DTAppLinks.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/NSURL+DTAppLinks.m deleted file mode 100644 index 3cb2de9..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/NSURL+DTAppLinks.m +++ /dev/null @@ -1,32 +0,0 @@ -// -// NSURL+DTAppLinks.m -// DTFoundation -// -// Created by Oliver Drobnik on 11/25/11. -// Copyright (c) 2011 Cocoanetics. All rights reserved. -// - -#import "NSURL+DTAppLinks.h" - -#if TARGET_OS_IPHONE - -#import - -@implementation NSURL (DTAppLinks) - -+ (NSURL *)appStoreURLforApplicationIdentifier:(NSString *)identifier -{ - NSString *link = [NSString stringWithFormat:@"http://itunes.apple.com/us/app/id%@?mt=8", identifier]; - - return [NSURL URLWithString:link]; -} - -+ (NSURL *)appStoreReviewURLForApplicationIdentifier:(NSString *)identifier -{ - NSString *link = [NSString stringWithFormat:@"itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=%@", identifier]; - return [NSURL URLWithString:link]; -} - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIApplication+DTNetworkActivity.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIApplication+DTNetworkActivity.h deleted file mode 100644 index daae42d..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIApplication+DTNetworkActivity.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// UIApplication+DTNetworkActivity.h -// DTFoundation -// -// Created by Oliver Drobnik on 5/21/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import -#import - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -/** - Enhancement for `UIApplication` to properly count active network sessions and show the network activity indicator whenever there are more than 0 active sessions. - */ -@interface UIApplication (DTNetworkActivity) - -/** - Increments the number of active network operations - */ -- (void)pushActiveNetworkOperation; - -/** - Decrements the number of active network operations - */ -- (void)popActiveNetworkOperation; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIApplication+DTNetworkActivity.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIApplication+DTNetworkActivity.m deleted file mode 100644 index 2ed7d4e..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIApplication+DTNetworkActivity.m +++ /dev/null @@ -1,61 +0,0 @@ -// -// UIApplication+DTNetworkActivity.m -// DTFoundation -// -// Created by Oliver Drobnik on 5/21/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "UIApplication+DTNetworkActivity.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -static NSUInteger __internalOperationCount = 0; - -@implementation UIApplication (DTNetworkActivity) - -- (void)pushActiveNetworkOperation -{ - @synchronized(self) - { - __internalOperationCount++; - -#if !TARGET_OS_TV - dispatch_async(dispatch_get_main_queue(), ^{ - - if (!self.isNetworkActivityIndicatorVisible && __internalOperationCount) - { - self.networkActivityIndicatorVisible = YES; - } - }); -#endif - } -} - -- (void)popActiveNetworkOperation -{ - @synchronized(self) - { - if (__internalOperationCount==0) - { - // nothing to do - return; - } - - __internalOperationCount--; -#if !TARGET_OS_TV - dispatch_async(dispatch_get_main_queue(), ^{ - if (self.isNetworkActivityIndicatorVisible && !__internalOperationCount) - { - self.networkActivityIndicatorVisible = NO; - } - }); -#endif - } -} - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIImage+DTFoundation.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIImage+DTFoundation.h deleted file mode 100644 index 6e48f3c..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIImage+DTFoundation.h +++ /dev/null @@ -1,115 +0,0 @@ -// -// UIImage+DTFoundation.h -// DTFoundation -// -// Created by Oliver Drobnik on 3/8/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import -#import - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -/** - Methods to help with working with images. - */ -@interface UIImage (DTFoundation) - -/** - @name Generating Images - */ - -/** - Creates an image filled with a solid color - @param color The solid color that fills the image - @param size The size of the image - @returns The image filled with given color and given size - */ -+ (UIImage *)imageWithSolidColor:(UIColor *)color size:(CGSize)size; - - -/** - Creates an image filled with a tint color using the receiver as image mask. The resulting image ignores the receiver's color values and instead uses the alpha values combined with the passed color. - @param color The color to use for tinting - @returns A new image - */ -- (UIImage *)imageMaskedAndTintedWithColor:(UIColor *)color; - -/** - @name Loading from RemoteURLs - */ - - -/** - Creates and returns an image object synchronously by loading the image data from the specified URL and optionally caching it. - - Useful values for cachePolicy are: - - - NSURLRequestUseProtocolCachePolicy (default) - - NSURLRequestReloadIgnoringLocalCacheData - - NSURLRequestReturnCacheDataElseLoad - - NSURLRequestReturnCacheDataDontLoad - - @param URL The URL to load the image from - @param cachePolicy The cache policy to apply. - @param error An optional output parameter to return an error if the loading fails - @returns The image object for the specified URL, or nil if the method could not load the specified image. - */ -+ (UIImage *)imageWithContentsOfURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy error:(NSError **)error; - - - /** - @name Drawing - */ - -/** - Mimicks the way images are drawn differently by UIImageView based on the set content mode. - @param rect The rectangle to drawn in - @param contentMode The content mode. Note that UIViewContentModeRedraw is treated the same as UIViewContentModeScaleToFill. - */ -- (void)drawInRect:(CGRect)rect withContentMode:(UIViewContentMode)contentMode; - -/** - @name Working with Tiles - */ - -/** - Cuts out a tile at the given row and column - - @param column The index of the column - @param columns The total number of columns - @param row The index of the row - @param rows The total number of rows - @returns The resulting image - */ -- (UIImage *)tileImageAtColumn:(NSUInteger)column ofColumns:(NSUInteger)columns row:(NSUInteger)row ofRows:(NSUInteger)rows; - -/** - Cuts out a tile at the given clip rect relative to the bounds - - @param clipRect The clipping rect to extract - @param bounds The bounds to which the clipRect is relative to - @param scale The image scale - @returns The resulting image - */ -- (UIImage *)tileImageInClipRect:(CGRect)clipRect inBounds:(CGRect)bounds scale:(CGFloat)scale; - - -/** - @name Modifying Images - */ - -/** - Resizes the receiver to the given size. - - @param newSize The target image size - @returns The resulting image - */ -- (UIImage *)imageScaledToSize:(CGSize)newSize; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIImage+DTFoundation.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIImage+DTFoundation.m deleted file mode 100644 index 8f64ca7..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIImage+DTFoundation.m +++ /dev/null @@ -1,358 +0,0 @@ -// -// UIImage+DTFoundation.m -// DTFoundation -// -// Created by Oliver Drobnik on 3/8/12. -// Copyright (c) 2012 Cocoanetics. All rights reserved. -// - -#import "UIImage+DTFoundation.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -#import "DTCoreGraphicsUtils.h" -#import "DTLog.h" - -@implementation UIImage (DTFoundation) - -#pragma mark - Generating Images - -+ (UIImage *)imageWithSolidColor:(UIColor *)color size:(CGSize)size -{ - NSParameterAssert(color); - NSAssert(!CGSizeEqualToSize(size, CGSizeZero), @"Size cannot be CGSizeZero"); - - CGRect rect = CGRectMake(0, 0, size.width, size.height); - - // Create a context depending on given size - UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0); - - // Fill it with your color - [color setFill]; - UIRectFill(rect); - - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return image; -} - -- (UIImage *)imageMaskedAndTintedWithColor:(UIColor *)color -{ - NSParameterAssert(color); - - UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale); - CGContextRef ctx = UIGraphicsGetCurrentContext(); - - CGRect bounds = (CGRect){CGPointZero, self.size}; - - // do a vertical flip so that image is correct - CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, bounds.size.height); - CGContextConcatCTM(ctx, flipVertical); - - // create mask of image - CGContextClipToMask(ctx, bounds, self.CGImage); - - // fill with given color - [color setFill]; - CGContextFillRect(ctx, bounds); - - // get back new image - UIImage *retImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return retImage; -} - -#pragma mark - Loading - -+ (UIImage *)imageWithContentsOfURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy error:(NSError **)error -{ - NSURLRequest *request = [NSURLRequest requestWithURL:URL cachePolicy:cachePolicy timeoutInterval:10.0]; - - NSCachedURLResponse *cacheResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request]; - - __block NSData *data; - __block NSError *internalError; - - if (cacheResponse) - { - DTLogDebug(@"cache hit for %@", [URL absoluteString]); - } - else - { - DTLogDebug(@"cache fail for %@", [URL absoluteString]); - } - -#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_9_0 - - NSURLResponse *response; - data = [NSURLConnection sendSynchronousRequest:request - returningResponse:&response - error:error]; -#else - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - - [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *responseData, NSURLResponse *response, NSError *responseError) { - - data = responseData; - internalError = responseError; - dispatch_semaphore_signal(semaphore); - }] resume]; - - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); -#endif - - if (!data) - { - DTLogError(@"Error loading image at %@", URL); - return nil; - } - - if (error) - { - *error = internalError; - } - - UIImage *image = [UIImage imageWithData:data]; - return image; -} - - -#pragma mark Drawing - -- (void)drawInRect:(CGRect)rect withContentMode:(UIViewContentMode)contentMode -{ - CGRect drawRect; - CGSize size = self.size; - - switch (contentMode) - { - case UIViewContentModeRedraw: - case UIViewContentModeScaleToFill: - { - // nothing to do - [self drawInRect:rect]; - return; - } - - case UIViewContentModeScaleAspectFit: - { - CGFloat factor; - - if (size.width -#import - -#if TARGET_OS_IPHONE && !TARGET_OS_TV && !TARGET_OS_WATCH - -#import - -@interface UIScreen (DTFoundation) - -- (UIInterfaceOrientation)orientation; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIScreen+DTFoundation.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIScreen+DTFoundation.m deleted file mode 100644 index b26a24e..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIScreen+DTFoundation.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// UIScreen+DTFoundation.m -// DTFoundation -// -// Created by Johannes Marbach on 16.10.17. -// Copyright © 2017 Cocoanetics. All rights reserved. -// - -#import "UIScreen+DTFoundation.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_TV && !TARGET_OS_WATCH - -#import - -@implementation UIScreen (DTFoundation) - -- (UIInterfaceOrientation)orientation { - CGPoint point = [self.coordinateSpace convertPoint:CGPointZero toCoordinateSpace:self.fixedCoordinateSpace]; - if (point.x == 0 && point.y == 0) { - return UIInterfaceOrientationPortrait; - } else if (point.x != 0 && point.y != 0) { - return UIInterfaceOrientationPortraitUpsideDown; - } else if (point.x == 0 && point.y != 0) { - return UIInterfaceOrientationLandscapeLeft; - } else if (point.x != 0 && point.y == 0) { - return UIInterfaceOrientationLandscapeRight; - } else { - return UIInterfaceOrientationUnknown; - } -} - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIView+DTFoundation.h b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIView+DTFoundation.h deleted file mode 100644 index 8fb7f44..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIView+DTFoundation.h +++ /dev/null @@ -1,78 +0,0 @@ -// -// UIView+DTFoundation.h -// DTFoundation -// -// Created by Oliver Drobnik on 12/23/11. -// Copyright (c) 2011 Cocoanetics. All rights reserved. -// - -/** DTFoundation enhancements for `UIView` */ - -#import -#import - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -@interface UIView (DTFoundation) - -/**--------------------------------------------------------------------------------------- - * @name Getting Snapshot Images - * --------------------------------------------------------------------------------------- - */ - -/** Creates a snapshot of the receiver. - - @return Returns a bitmap image with the same contents and dimensions as the receiver. - */ -- (UIImage * _Nonnull)snapshotImage; - - -/**--------------------------------------------------------------------------------------- - * @name Rounded Corners - * --------------------------------------------------------------------------------------- - */ - -/** Sets the corner attributes of the receiver's layer. - - The advantage of using this method is that you do not need to import the QuartzCore headers just for setting the corners. - @param radius The corner radius. - @param width The width of the border line. - @param color The color to be used for the border line. Can be `nil` to leave it unchanged. - */ -- (void)setRoundedCornersWithRadius:(CGFloat)radius width:(CGFloat)width color:(UIColor * _Nullable)color; - - -/**--------------------------------------------------------------------------------------- - * @name Shadows - * --------------------------------------------------------------------------------------- - */ - -/** Adds a layer-based shadow to the receiver. - - The advantage of using this method is that you do not need to import the QuartzCore headers just for adding the shadow. - Layer-based shadows are properly combined for views that are on the same superview. This does not add a shadow path, - you should call updateShadowPathToBounds whenever the receiver's bounds change and also after setting the initial frame. - @warn Disables clipping to bounds because this would also clip off the shadow. - @param color The shadow color. Can be `nil` for default black. - @param alpha The alpha value of the shadow. - @param radius The amount that the shadow is blurred. - @param offset The offset of the shadow - @see updateShadowPathToBounds:withDuration: - */ -- (void)addShadowWithColor:(UIColor * _Nullable)color alpha:(CGFloat)alpha radius:(CGFloat)radius offset:(CGSize)offset; - - -/** sets the shadow path to fit the receiver's bounds. - - This should be called whenever the receiver's bounds change, or else the shadow detaches. - @warn Since this a CALayer property it needs to be explicitly animated, for example in the willRotate ... method of a `UIViewController`. - @param bounds The new bounds of the shadow path - @param duration The animation duration. Specify a duration of 0 to not do an animation -*/ -- (void)updateShadowPathToBounds:(CGRect)bounds withDuration:(NSTimeInterval)duration; - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIView+DTFoundation.m b/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIView+DTFoundation.m deleted file mode 100644 index b5a3301..0000000 --- a/ReadViewDemo/Pods/DTFoundation/Core/Source/iOS/UIView+DTFoundation.m +++ /dev/null @@ -1,80 +0,0 @@ -// -// UIView+DTFoundation.m -// DTFoundation -// -// Created by Oliver Drobnik on 12/23/11. -// Copyright (c) 2011 Cocoanetics. All rights reserved. -// - -#import "UIView+DTFoundation.h" - -#if TARGET_OS_IPHONE && !TARGET_OS_WATCH - -#import - -NSString *shadowContext = @"Shadow"; - -@implementation UIView (DTFoundation) - -- (UIImage *)snapshotImage -{ - NSAssert(self.bounds.size.height > 0 && self.bounds.size.width > 0, @"Trying to create a snapshot from a zero size view"); - - UIGraphicsBeginImageContext(self.bounds.size); - [self.layer renderInContext:UIGraphicsGetCurrentContext()]; - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return image; -} - -- (void)setRoundedCornersWithRadius:(CGFloat)radius width:(CGFloat)width color:(UIColor * _Nullable)color -{ - self.clipsToBounds = YES; - self.layer.cornerRadius = radius; - self.layer.borderWidth = width; - - if (color) - { - self.layer.borderColor = color.CGColor; - } -} - -- (void)addShadowWithColor:(UIColor * _Nullable)color alpha:(CGFloat)alpha radius:(CGFloat)radius offset:(CGSize)offset -{ - self.layer.shadowOpacity = alpha; - self.layer.shadowRadius = radius; - self.layer.shadowOffset = offset; - - if (color) - { - self.layer.shadowColor = [color CGColor]; - } - - // cannot have masking - self.layer.masksToBounds = NO; -} - -- (void)updateShadowPathToBounds:(CGRect)bounds withDuration:(NSTimeInterval)duration -{ - CGPathRef oldPath = self.layer.shadowPath; - CGPathRef newPath = CGPathCreateWithRect(bounds, NULL); - - if (oldPath && duration>0) - { - CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:@"shadowPath"]; - theAnimation.duration = duration; - theAnimation.fromValue = (__bridge id)oldPath; - theAnimation.toValue = (__bridge id)newPath; - theAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; - [self.layer addAnimation:theAnimation forKey:@"shadowPath"]; - } - - self.layer.shadowPath = newPath; - - CGPathRelease(newPath); -} - -@end - -#endif diff --git a/ReadViewDemo/Pods/DTFoundation/LICENSE b/ReadViewDemo/Pods/DTFoundation/LICENSE deleted file mode 100644 index b773399..0000000 --- a/ReadViewDemo/Pods/DTFoundation/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011, Oliver Drobnik All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/ReadViewDemo/Pods/DTFoundation/readme.markdown b/ReadViewDemo/Pods/DTFoundation/readme.markdown deleted file mode 100644 index e9e6917..0000000 --- a/ReadViewDemo/Pods/DTFoundation/readme.markdown +++ /dev/null @@ -1,33 +0,0 @@ -About DTFoundation -================== - -[![Build Status](https://travis-ci.org/Cocoanetics/DTFoundation.png?branch=develop)](https://travis-ci.org/Cocoanetics/DTFoundation) - -DTFoundation is a collection of utility methods and category extensions that *Cocoanetics* is standardizing on. This should evolve into a toolset of well-documented and -tested code to accelerate future development. - -Documentation can be [browsed online](https://docs.cocoanetics.com/DTFoundation) or installed in your Xcode Organizer via the [Atom Feed URL](https://docs.cocoanetics.com/DTFoundation/DTFoundation.atom). - -Methods, categories and functions are grouped into Subspecs. The grouping determined by the required dependencies. Please refer the programming guides linked from the documentation site for their contents. - -- **Core:** Enhancements for Apple frameworks and classes which are usable on Mac and iOS. -- **UIKit:** Enhancements for UIKit -- **UIKit Blocks Additions:** Adding blocks-support to UIKit -- **AppKit:** Enhancements for AppKit -- **DTAWS:** Talking to Amazon Web Services -- **DTASN1:** Event-based parser for ASN.1 data -- **DTHTMLParser:** Event-based HTML parser based on libxml2 -- **DTReachability:** Block-based Reachability -- **DTSidePanel:** Side-Panel view controller -- **DTSQLite:** Objective-C wrapper for SQLite -- **DTUTI:** UTI methods -- **DTZipArchive:** Handing of Pkzip and GZip files -- **DTProgressHUD:** Displaying informations or progress (in the middle of the screen) - -License -------- - -It is open source and covered by a standard 2-clause BSD license. That means you have to mention *Cocoanetics* as the original author of this code and reproduce the LICENSE text inside your app. - -You can purchase a [Non-Attribution-License](http://www.cocoanetics.com/order/?product=DTFoundation%20Non-Attribution%20License) for 75 Euros for not having to include the LICENSE text. - -We also accept sponsorship for specific enhancements which you might need. Please [contact us via email](mailto:oliver@cocoanetics.com?subject=DTFoundation) for inquiries. diff --git a/ReadViewDemo/Pods/Local Podspecs/RDAIReaderView.podspec.json b/ReadViewDemo/Pods/Local Podspecs/RDAIReaderView.podspec.json deleted file mode 100644 index 6a1a140..0000000 --- a/ReadViewDemo/Pods/Local Podspecs/RDAIReaderView.podspec.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "RDAIReaderView", - "module_name": "RDAIReaderView", - "version": "0.1.0", - "summary": "Local-first AI indexing and retrieval primitives for ReadViewSDK readers", - "platforms": { - "ios": "15.0" - }, - "swift_versions": [ - "5.10" - ], - "homepage": "https://example.invalid/RDAIReaderView", - "authors": { - "readoor": "ios@touchread.com" - }, - "source": { - "path": "." - }, - "license": "MIT", - "requires_arc": true, - "subspecs": [ - { - "name": "Core", - "source_files": "Core/**/*.swift", - "frameworks": "CryptoKit", - "libraries": "sqlite3" - }, - { - "name": "NaturalLanguage", - "source_files": "NaturalLanguage/**/*.swift", - "dependencies": { - "RDAIReaderView/Core": [ - "~> 0.1" - ] - }, - "frameworks": "NaturalLanguage" - }, - { - "name": "FoundationModels", - "source_files": "FoundationModels/**/*.swift", - "dependencies": { - "RDAIReaderView/Core": [ - "~> 0.1" - ] - }, - "weak_frameworks": "FoundationModels" - }, - { - "name": "UI", - "source_files": "UI/**/*.swift", - "dependencies": { - "RDAIReaderView/Core": [ - "~> 0.1" - ] - }, - "frameworks": "UIKit" - } - ], - "swift_version": "5.10" -} diff --git a/ReadViewDemo/Pods/Local Podspecs/RDEpubReaderView.podspec.json b/ReadViewDemo/Pods/Local Podspecs/RDEpubReaderView.podspec.json deleted file mode 100644 index 1df4e44..0000000 --- a/ReadViewDemo/Pods/Local Podspecs/RDEpubReaderView.podspec.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "RDEpubReaderView", - "module_name": "RDEpubReaderView", - "version": "0.0.2", - "summary": "A reader view for EPUB, TXT, MOBI, and CBZ books", - "platforms": { - "ios": "15.0" - }, - "swift_versions": [ - "5.10" - ], - "homepage": "http://192.168.21.200:8418/4v5u09Z5a4Yuc/ReadViewSDK.git", - "authors": { - "shenlei": "shenlei@touchread.com" - }, - "source": { - "git": "http://192.168.21.200:8418/4v5u09Z5a4Yuc/ReadViewSDK.git", - "tag": "0.0.2" - }, - "license": "MIT", - "source_files": "{DocumentFormats,EPUBCore,EPUBTextRendering,EPUBUI,ReaderView}/**/*.swift", - "resource_bundles": { - "RDEpubReaderViewAssets": [ - "EPUBCore/Resources/**/*" - ] - }, - "dependencies": { - "ZIPFoundation": [ - "~> 0.9" - ], - "DTCoreText": [ - "~> 1.6" - ], - "SnapKit": [ - "~> 5.7" - ] - }, - "requires_arc": true, - "subspecs": [ - { - "name": "Speech", - "source_files": "Speech/**/*.swift", - "dependencies": { - "RDSpeechReaderView": [ - "~> 0.1" - ] - } - }, - { - "name": "AI", - "source_files": "AI/**/*.swift", - "dependencies": { - "RDAIReaderView/NaturalLanguage": [ - "~> 0.1" - ], - "RDAIReaderView/UI": [ - "~> 0.1" - ] - } - } - ], - "swift_version": "5.10" -} diff --git a/ReadViewDemo/Pods/Local Podspecs/RDPDFReaderView.podspec.json b/ReadViewDemo/Pods/Local Podspecs/RDPDFReaderView.podspec.json deleted file mode 100644 index 4e75463..0000000 --- a/ReadViewDemo/Pods/Local Podspecs/RDPDFReaderView.podspec.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "RDPDFReaderView", - "module_name": "RDPDFReaderView", - "version": "0.0.1", - "summary": "UIKit PDF reader supporting host images and direct PDFKit parsing", - "platforms": { - "ios": "15.0" - }, - "swift_versions": [ - "5.10" - ], - "homepage": "https://example.invalid/RDPDFReaderView", - "authors": { - "readoor": "ios@touchread.com" - }, - "source": { - "path": "." - }, - "license": "MIT", - "source_files": "{Sources,ReaderView}/**/*.swift", - "dependencies": { - "SnapKit": [ - "~> 5.7" - ] - }, - "frameworks": [ - "Vision", - "CoreImage", - "PDFKit" - ], - "requires_arc": true, - "subspecs": [ - { - "name": "Speech", - "source_files": "Speech/**/*.swift", - "dependencies": { - "RDSpeechReaderView": [ - "~> 0.1" - ] - } - }, - { - "name": "AI", - "source_files": "AI/**/*.swift", - "dependencies": { - "RDAIReaderView/NaturalLanguage": [ - "~> 0.1" - ], - "RDAIReaderView/UI": [ - "~> 0.1" - ] - } - } - ], - "swift_version": "5.10" -} diff --git a/ReadViewDemo/Pods/Local Podspecs/RDSpeechReaderView.podspec.json b/ReadViewDemo/Pods/Local Podspecs/RDSpeechReaderView.podspec.json deleted file mode 100644 index fe9c8ee..0000000 --- a/ReadViewDemo/Pods/Local Podspecs/RDSpeechReaderView.podspec.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "RDSpeechReaderView", - "module_name": "RDSpeechReaderView", - "version": "0.1.0", - "summary": "Text-to-speech playback primitives for ReadViewSDK readers", - "platforms": { - "ios": "15.0" - }, - "swift_versions": [ - "5.10" - ], - "homepage": "https://example.invalid/RDSpeechReaderView", - "authors": { - "readoor": "ios@touchread.com" - }, - "source": { - "path": "." - }, - "license": "MIT", - "source_files": "Sources/*.swift", - "frameworks": [ - "AVFAudio", - "NaturalLanguage", - "MediaPlayer" - ], - "requires_arc": true, - "subspecs": [ - { - "name": "AI", - "source_files": "AIBridge/**/*.swift", - "dependencies": { - "RDAIReaderView/Core": [ - "~> 0.1" - ] - } - } - ], - "swift_version": "5.10" -} diff --git a/ReadViewDemo/Pods/Manifest.lock b/ReadViewDemo/Pods/Manifest.lock deleted file mode 100644 index 0fc59b1..0000000 --- a/ReadViewDemo/Pods/Manifest.lock +++ /dev/null @@ -1,102 +0,0 @@ -PODS: - - DTCoreText (1.6.28): - - DTCoreText/Core (= 1.6.28) - - DTFoundation/Core (~> 1.7.19) - - DTFoundation/DTAnimatedGIF (~> 1.7.19) - - DTFoundation/DTHTMLParser (~> 1.7.19) - - DTFoundation/UIKit (~> 1.7.19) - - DTCoreText/Core (1.6.28): - - DTFoundation/Core (~> 1.7.19) - - DTFoundation/DTAnimatedGIF (~> 1.7.19) - - DTFoundation/DTHTMLParser (~> 1.7.19) - - DTFoundation/UIKit (~> 1.7.19) - - DTFoundation/Core (1.7.19) - - DTFoundation/DTAnimatedGIF (1.7.19) - - DTFoundation/DTHTMLParser (1.7.19): - - DTFoundation/Core - - DTFoundation/UIKit (1.7.19): - - DTFoundation/Core - - RDAIReaderView/Core (0.1.0) - - RDAIReaderView/FoundationModels (0.1.0): - - RDAIReaderView/Core (~> 0.1) - - RDAIReaderView/NaturalLanguage (0.1.0): - - RDAIReaderView/Core (~> 0.1) - - RDAIReaderView/UI (0.1.0): - - RDAIReaderView/Core (~> 0.1) - - RDEpubReaderView (0.0.2): - - DTCoreText (~> 1.6) - - RDEpubReaderView/AI (= 0.0.2) - - RDEpubReaderView/Speech (= 0.0.2) - - SnapKit (~> 5.7) - - ZIPFoundation (~> 0.9) - - RDEpubReaderView/AI (0.0.2): - - DTCoreText (~> 1.6) - - RDAIReaderView/NaturalLanguage (~> 0.1) - - RDAIReaderView/UI (~> 0.1) - - SnapKit (~> 5.7) - - ZIPFoundation (~> 0.9) - - RDEpubReaderView/Speech (0.0.2): - - DTCoreText (~> 1.6) - - RDSpeechReaderView (~> 0.1) - - SnapKit (~> 5.7) - - ZIPFoundation (~> 0.9) - - RDPDFReaderView (0.0.1): - - RDPDFReaderView/AI (= 0.0.1) - - RDPDFReaderView/Speech (= 0.0.1) - - SnapKit (~> 5.7) - - RDPDFReaderView/AI (0.0.1): - - RDAIReaderView/NaturalLanguage (~> 0.1) - - RDAIReaderView/UI (~> 0.1) - - SnapKit (~> 5.7) - - RDPDFReaderView/Speech (0.0.1): - - RDSpeechReaderView (~> 0.1) - - SnapKit (~> 5.7) - - RDSpeechReaderView (0.1.0): - - RDSpeechReaderView/AI (= 0.1.0) - - RDSpeechReaderView/AI (0.1.0): - - RDAIReaderView/Core (~> 0.1) - - SnapKit (5.7.1) - - ZIPFoundation (0.9.20) - -DEPENDENCIES: - - RDAIReaderView/FoundationModels (from `../Sources/RDAIReaderView`) - - RDAIReaderView/NaturalLanguage (from `../Sources/RDAIReaderView`) - - RDAIReaderView/UI (from `../Sources/RDAIReaderView`) - - RDEpubReaderView (from `../Sources/RDEpubReaderView`) - - RDEpubReaderView/AI (from `../Sources/RDEpubReaderView`) - - RDEpubReaderView/Speech (from `../Sources/RDEpubReaderView`) - - RDPDFReaderView (from `../Sources/RDPDFReaderView`) - - RDPDFReaderView/AI (from `../Sources/RDPDFReaderView`) - - RDPDFReaderView/Speech (from `../Sources/RDPDFReaderView`) - - RDSpeechReaderView/AI (from `../Sources/RDSpeechReaderView`) - -SPEC REPOS: - trunk: - - DTCoreText - - DTFoundation - - SnapKit - - ZIPFoundation - -EXTERNAL SOURCES: - RDAIReaderView: - :path: "../Sources/RDAIReaderView" - RDEpubReaderView: - :path: "../Sources/RDEpubReaderView" - RDPDFReaderView: - :path: "../Sources/RDPDFReaderView" - RDSpeechReaderView: - :path: "../Sources/RDSpeechReaderView" - -SPEC CHECKSUMS: - DTCoreText: 11b7fe2104f476f82e75a4e3dbdde74d7186cecb - DTFoundation: 76b624967cf5bcaae6bb057d622c536c36ef36d0 - RDAIReaderView: 01a156e412fb7a52a6963c097ffbe2f1792021fd - RDEpubReaderView: 180444055ba2da2c52797cc08b307232f103a6d9 - RDPDFReaderView: 885be07e2b81cd0a8dc8a937b75faf9017ce045c - RDSpeechReaderView: 25fff9437d2692965ba326f37b108baf3e2ae7ef - SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a - ZIPFoundation: dfd3d681c4053ff7e2f7350bc4e53b5dba3f5351 - -PODFILE CHECKSUM: 72bd92309c87ce13a247b8134a321f6b325af731 - -COCOAPODS: 1.16.2 diff --git a/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj b/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index 03590f0..0000000 --- a/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,4958 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXBuildFile section */ - 002685407B9C4D548571DA24AFD6E8F1 /* NSString+Paragraphs.m in Sources */ = {isa = PBXBuildFile; fileRef = 39F01D07F324B206706E9809D44643C1 /* NSString+Paragraphs.m */; }; - 0030FDF2E834088639D9C73A89669CC1 /* RDPDFReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 507D9D8B9C2FF474F3C6BE68C6EF6C50 /* RDPDFReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 014449AE560FFF3C628FAE639D043004 /* DTAnchorHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = CDDC623AB1701601A907DA67C2F8F283 /* DTAnchorHTMLElement.m */; }; - 02A25882938831E94E43CA8A7CB729B9 /* UIScreen+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E4731BA187C02CDA816054F1F2BE70D /* UIScreen+DTFoundation.m */; }; - 0335F9FB12F2E7B0CDA69B9DB048C1B5 /* RDSpeechReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A6C3FFDC5714D18BE0534AF20F6C07CA /* RDSpeechReaderView-dummy.m */; }; - 03D90C831397E8636A33CE557024A136 /* NSMutableAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA140AF73738B23155578D0AA734FE3 /* NSMutableAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0561DF6793C8516F469D9813F5CE3211 /* DTCoreTextLayouter.m in Sources */ = {isa = PBXBuildFile; fileRef = F0D5A0F7E62D88B94912634DC9AD339D /* DTCoreTextLayouter.m */; }; - 063A88FB321E454069155A625FAC1A29 /* RDEpubReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DD2B675FAAF78038DF681753B63E78F6 /* RDEpubReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 066408F6DF6744FCE21A0844EB8B972E /* RDEPUBSpeechSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F04F9EA650B7E82A6BD7560C308C1F9 /* RDEPUBSpeechSession.swift */; }; - 085826A323C90FB16A9380AD88E1E394 /* RDPDFReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FC1DCF56B5AEFDF71CEC0334776D7A /* RDPDFReaderPageChildViewController.swift */; }; - 094D63A7B2DC786E383C4145EBFF6146 /* RDEPUBNoteResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2212BCD78FFC35A46929B1C86B16DBC /* RDEPUBNoteResolver.swift */; }; - 09BAC6DCE171C42332F021EF1315F15F /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D0CB14225ACB0ECDF2CAD95CDA30DD2 /* MediaPlayer.framework */; }; - 0A1404655C6339B0D10F01ECC970E852 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F38B3CAD708AE9333A29A9AB921FA4 /* LayoutConstraint.swift */; }; - 0A27A469DC24F223905DCC8182E2CA52 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C91A1E88D3B946A1FA082A6EB05C9A /* Constraint.swift */; }; - 0A9D1BAF9EE83FDBA8B4976EEA453EFA /* RDPDFReaderPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54F2C8B38BF0106D946BEE9F7E854D08 /* RDPDFReaderPageView.swift */; }; - 0AAA5BB1DBF584102B15CF8738F1815E /* NSScanner+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = BA83941397AFE127903C2DA0EE626295 /* NSScanner+HTML.m */; }; - 0ABC4D62588EABAA636441FD9A82C940 /* CTLineUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = B72E60DFC15F208F1BA00518E64F79B5 /* CTLineUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0AC9DDCE140E39ECDD8DDA62D0D724DD /* RDAINaturalLanguageAnalyzer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D908F35D94E51D89507601431AC05B9 /* RDAINaturalLanguageAnalyzer.swift */; }; - 0B6FA1F22150D7F8B1865F41FF70C922 /* DTImage+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 551D98EE6C1653939AE1E3BCBC4ACC2E /* DTImage+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0CA21E82B6B347BD2370DD2FEFDE44C1 /* DTExtendedFileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = D362CCA87B017930E7481AFE2E73FB74 /* DTExtendedFileAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0CD64766E04A6801A55DFEFC5A9A379B /* DTBlockFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F66F7B56F490F71666C3CC51B50EDB /* DTBlockFunctions.m */; }; - 0D9DBD85739EA6FA524BC4AEF817361B /* RDSpeechReaderControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21F9B093162E445308F49662C7C35DA6 /* RDSpeechReaderControlView.swift */; }; - 0DA047CE0938660F1AC82BB461F607B4 /* RDEPUBCFIMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498E8B4F4F6A151C181647CACD6F76DA /* RDEPUBCFIMarkerInjector.swift */; }; - 0E68D8160E5C813DB3839865A2B61A7F /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B3047509587D803762D3B0A21B9F773 /* UILayoutSupport+Extensions.swift */; }; - 0E6CC1B4E893EB6D9D76FCCDD125F3CD /* RDPDFReaderContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = F01A20D999E550EFA3C472C3A20E6A90 /* RDPDFReaderContracts.swift */; }; - 0EC04427BB9F77932E19591E8D37492F /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB434D5D2C4FC39DB37D676ABB6B7C68 /* ConstraintMaker.swift */; }; - 0F5377BB4CD47877A1A4FF9056244D6C /* RDEPUBReaderSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86EDE1B29348DC15D6122E9FCF98DC42 /* RDEPUBReaderSettingsViewController.swift */; }; - 0FCBC8C64D8862F2A0E8794EDADDECBD /* UIFont+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = D4A82B2715640986D3701AF889DBD599 /* UIFont+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 100BFFBD24F234C095EDB001B8088DB1 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 74B2884E9214B5B38193587D773554BA /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */; }; - 1023882FD50FC476405F3AA2D63A631E /* RDEPUBTextIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BA1F24F4DFCDDB93645FFE37C0C68A8 /* RDEPUBTextIndexTable.swift */; }; - 1029F6A1D00934BA1729926279757FEE /* RDEPUBChapterLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66388B03A7B6CCC521677D01D37D85F9 /* RDEPUBChapterLoader.swift */; }; - 10734A1CB54C48CAE3AFAFBE80CB2725 /* RDEPUBTextPaginationInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3784C10C038F42C7074D9B20A81291A4 /* RDEPUBTextPaginationInterfaces.swift */; }; - 108336F1A5BBF5C4C8D4468287C8BC8C /* RDEPUBNotePopupCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F43D341014C0A3261943902F0C6D7A47 /* RDEPUBNotePopupCoordinator.swift */; }; - 109458F9D48FD4F381F0E40E2DB3D91C /* DTLazyImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 773601B72FDE742724A1FE66115AC185 /* DTLazyImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1105B3FC3E36AEB697E983A289F12E38 /* RDEPUBTextContentInteractionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DE91417CF554D42F4493D636FF1F69C /* RDEPUBTextContentInteractionCoordinator.swift */; }; - 11A9957CEC14EA2676686062B57AE434 /* Date+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = E209D74CEC1626A09885E55370AEFA53 /* Date+ZIP.swift */; }; - 11AB1902A68385851FB81E870991F9A0 /* DTImageTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F97367EBFF425820B717CAC4FAF59F2 /* DTImageTextAttachment.m */; }; - 11C1917887762E50D1E02382C46D9977 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B730A14FDA23EC9BB3ED876FBD5BA4 /* ConstraintView+Extensions.swift */; }; - 122ADCB2F0FDD7FC639648DAEBCB31F8 /* RDEPUBAIContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44EB3CBD2C1D167AE3BD1AD5A9FE063D /* RDEPUBAIContentProvider.swift */; }; - 12B4A35B8E40C112E18A7C5511F023E9 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FB8D88DF51900F42796061036A2BC93 /* CoreText.framework */; }; - 130C3A85D9F9F445222C2E31EC245B0A /* NSScanner+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BE6B072BF746163179BDF80F8CDBE1D /* NSScanner+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1359FECFF2E8215E574C69F0099D11F5 /* wxread-replace-latin.css in Resources */ = {isa = PBXBuildFile; fileRef = FEEC0D985E61911DD98BBA2737107E1C /* wxread-replace-latin.css */; }; - 13B7F5C2B8676959CDB2E290466E3BB6 /* RDEPUBStyleCompatibilityModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D945C6720DC6601B9B8FA83EE37E965 /* RDEPUBStyleCompatibilityModels.swift */; }; - 146BDE9063EF5A1F0481FCEBD97046A2 /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D071D3F1AC2022BBB40C82D2DC2DFE3 /* ConstraintMakerRelatable.swift */; }; - 14BDD9FB7A7AC5C8ABFF8D24C381F3DA /* NSAttributedString+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = F610362838046514D87BF38DAC3B7829 /* NSAttributedString+DTCoreText.m */; }; - 154B7E4D9B281D3F49B8430DC2F730E0 /* RDEPUBDTCoreTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04D65A018B525BEE5FB0F21896B5A27F /* RDEPUBDTCoreTextRenderer.swift */; }; - 157BD809FC0CAEDFB4316A537C74FA00 /* RDAIReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 299AED4539FF5F16ACFC414AF2BDFCF3 /* RDAIReaderView-dummy.m */; }; - 15A7ED15DA03DD3B9F26A017D270D1C2 /* DTCSSListStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = CAED9812FF45FFA82A7B68F7B2B656D4 /* DTCSSListStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 173C5A26C576DE62DD9DEE0835D9A85F /* RDAINaturalLanguageSemanticScorer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62F3A858FD7165A3AEBBCA78E105DB73 /* RDAINaturalLanguageSemanticScorer.swift */; }; - 182A511334D40CCC49EE48A1BCF23853 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B73DC0FE59A501CF1EBF64C6ABA20417 /* ImageIO.framework */; }; - 18FCC6EB5E321A7758064DC0220B8441 /* RDEPUBSpeechContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10C60005AD8F659D0476A2D8DCDF0AB7 /* RDEPUBSpeechContentProvider.swift */; }; - 191824B2B1E1B0A7DD3B6298100B4B8A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E198715507CC19E698253E47DA96954 /* CoreGraphics.framework */; }; - 19276546DD5AF3B0E64AC610951F24FE /* RDEPUBReaderSearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3EF41BC74CB0A807D226BA1B6AAE225 /* RDEPUBReaderSearchBarView.swift */; }; - 19649ED312D92A6F5D2D6AF4E540CE75 /* DTHorizontalRuleHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 4113E34E3BD2181F4202CECBB3A0DDBA /* DTHorizontalRuleHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1B56723E39283A17E2A689DBDD09C313 /* DTHTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 65806394BC872987207CCB0FB587E3B1 /* DTHTMLParser.m */; }; - 1C01105DE2BEF1F1049F8F0B270F8AFA /* NSData+DTCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = D97A43F1E6018B92E85B58BB6549F7CB /* NSData+DTCrypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C64391C561D8C8C71B8BA9A8C9D8F6E /* RDEPUBReaderController+RuntimeBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = A04214421115EF7A542C3F3216A318B0 /* RDEPUBReaderController+RuntimeBridge.swift */; }; - 1D394585BF38C3050B6C81E80A905312 /* RDEPUBChapterDataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = C02B75657834185F5471197156446395 /* RDEPUBChapterDataCache.swift */; }; - 1D460603DCA4A4E5ECFE8FF1F1CACC10 /* DTColorFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = D92D7AF796DC45709FBBF4BBCBF47095 /* DTColorFunctions.m */; }; - 1DC412848A5F645120BE5C544F117E40 /* RDEPUBTextContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9245153495464B8CBAFED3ED68018040 /* RDEPUBTextContentView.swift */; }; - 1E5A1370975CB23A3109708965000BEB /* RDEPUBReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F606B8AFFB6486EF76BF7118C0D2BBEF /* RDEPUBReaderController.swift */; }; - 2153FA3BF80801DEF871E1F058B4BC28 /* RDEPUBCFIUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B846342956B3700F458ACA24E534E17 /* RDEPUBCFIUtilities.swift */; }; - 21AED133680D1E64446239B0F6C436E8 /* RDEPUBWebView+FixedLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 240F52CEA8D1F72985804D9FF38A9DDD /* RDEPUBWebView+FixedLayout.swift */; }; - 2203356EEA94A9172BC7902923E43CBE /* DTCoreTextFontCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 380BFE2729ACC77B6F3E846E9C456848 /* DTCoreTextFontCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2272682D201A6AB03AC748D5EE1B4C9C /* RDPDFReaderKitView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBED33030719998F00A5173D3C466BD8 /* RDPDFReaderKitView.swift */; }; - 22796A7363B805A1A3CFE22E9FEF53DA /* Pods-ReadViewDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AA0811310099A4BCB3D52683B70DB3D1 /* Pods-ReadViewDemo-dummy.m */; }; - 2387E55634D5FB72111ACF2EEEBD6139 /* wxread-replace.css in Resources */ = {isa = PBXBuildFile; fileRef = 23711E614B27F6F6EE187EDBFEFAAE38 /* wxread-replace.css */; }; - 241EA2AA99E27D96E4468289A8B02F42 /* RDPDFReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFCC148B58604D0C5A3C240C51B45FD /* RDPDFReaderView-dummy.m */; }; - 24395BEB3C360D9DA5180BFB955B04A0 /* DTAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = F8F398A3D1144707216F9A20BEDF911E /* DTAttributedLabel.m */; }; - 2445709667CB3820E51CD4AA915E6943 /* DTHTMLParserTextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 034BC384E1BA330755046E5212201E4D /* DTHTMLParserTextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 24BD40AD5A9BADE65425D9D05A349CDB /* RDEPUBPaginator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BEA1735DC206814580D0CBDDC031E24 /* RDEPUBPaginator.swift */; }; - 24C5B52FD2AA9C49731DC6859ABA7CDE /* NSDictionary+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EDBB29D0A60FEB56FCC489DC10F37BB /* NSDictionary+DTCoreText.m */; }; - 24C6A5A67DF71CA76B6F3AF29F193AE4 /* DTFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D211ACA62A5B241A668A682054310DE /* DTFoundation-dummy.m */; }; - 262BF4A73925D6C0DAA45DE8041FDF48 /* UIApplication+DTNetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 309D2521D7B9A10F86DA3F6BE7FB37B1 /* UIApplication+DTNetworkActivity.m */; }; - 270C5C10028F0BC5A62548326CCB379B /* DTColor+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DCFEFDD6D693AD5967568E86920AB08 /* DTColor+Compatibility.m */; }; - 27942A1175523D2BD5E9E7E7F6AAFCBF /* RDEPUBReadingSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ED5D1D93987D1ECA1C9ACBDDBA99968 /* RDEPUBReadingSession.swift */; }; - 2895AAFE16A7927C9CC5B0F75D32139A /* RDEPUBAttachmentNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F74C359E556A8876EF09A01201FB0403 /* RDEPUBAttachmentNormalizer.swift */; }; - 289E098417EDE9D3518B1C1A01FF4C56 /* RDEPUBTextPerformanceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 344A53B9D93EDE7EB41DEC7D27C8AAF7 /* RDEPUBTextPerformanceSampler.swift */; }; - 29D9B32DFFC59A157EDEF005DB92A5AC /* DTCoreTextLayoutLine.m in Sources */ = {isa = PBXBuildFile; fileRef = 172C1329A4A6171B18EC5A192815941B /* DTCoreTextLayoutLine.m */; }; - 29DA059FFB3372A3405B1F483D9F9DDF /* RDAIReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B094ABE0685E65E249C93BF2B135A9 /* RDAIReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2AAF9361720FC2D8FFCA93B5FAE42019 /* NSMutableString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 0769148555F482C8DF7EA21F6935B7F4 /* NSMutableString+HTML.m */; }; - 2AE79C560C0E3BF0E8F280F86AAB8CA4 /* Archive+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4822B5E091C79BBDF0CEC9C27FAD11ED /* Archive+ZIP64.swift */; }; - 2B258179860AC499B50883A6410CEE22 /* DTSmartPagingScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = BAC3BCDBDD88D30A3F51094944FB70FC /* DTSmartPagingScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B95E139A981A6A49099B4ECFB90AE9D /* RDEPUBBuildDiagnosticsReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36209CE685AAEF60A5410D7D5EB08EA9 /* RDEPUBBuildDiagnosticsReporter.swift */; }; - 2C0B4E9293C8B24B2E5086202EC8BA77 /* NSDictionary+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = AF41F6780E56AB0F76C46A75363DA697 /* NSDictionary+DTError.m */; }; - 2C5919C12ABE1A22BB98F7ED2AA8E5CD /* RDEPUBReaderController+DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A79F4CCFBC9953DB7A8CD52315A738 /* RDEPUBReaderController+DataSource.swift */; }; - 2CA2B5A8BC35D7493E7F8A26C082789E /* RDEPUBReaderAssemblyCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16EA564A15FAF13156B1B63CA898E824 /* RDEPUBReaderAssemblyCoordinator.swift */; }; - 2CB4BF91A9035EF091737601094DE286 /* RDEPUBReaderEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A3E297145AF1816CA5C623327CC59B8 /* RDEPUBReaderEnvironment.swift */; }; - 2D5D90B31C27ABFE9A71AA0829B70447 /* NSURL+DTAppLinks.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DA7955406639DE39E1FD953D882301E /* NSURL+DTAppLinks.m */; }; - 2D9F451FCE658C36FBD90A4B9FB6E807 /* RDSpeechReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D94A0293C1A11AB0BF793F0804AF01BA /* RDSpeechReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2DAB2050BC06A4C6A8903E9B3DD06777 /* RDEPUBPresentationRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6314FB72D26D4408191CE8E9D1E318B1 /* RDEPUBPresentationRuntime.swift */; }; - 2DEE061E843862292F7E1DD86A7D217D /* RDEPUBPaginationCacheCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE50EC81EDB03616225DAB735C90CFAD /* RDEPUBPaginationCacheCoordinator.swift */; }; - 2E86C5D5A6A8ECE76FC710F5A7839A4B /* DTAnimatedGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A319B0AD0B5F014BB090153D3020DBA5 /* DTAnimatedGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2EB84DBB152379A800758656C572218C /* RDPDFSpeechContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE673C095E86DC64BE73E53BA8C59702 /* RDPDFSpeechContentProvider.swift */; }; - 2EEEF833B213486F044A3AABF1BC1A99 /* RDEPUBPageLayoutSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = E28619FF1699FE5E9E9981D4B9C26E55 /* RDEPUBPageLayoutSnapshot.swift */; }; - 2EF74777E4F0C408BE00A974639979CD /* RDEpubReaderPreloadController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A367786E9C55FFE1AA25D87507414354 /* RDEpubReaderPreloadController.swift */; }; - 2F4AB3D711200DAB6B8B0E6D5E3E9774 /* RDPDFAIContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81313A5C1BC97CDA5BE30763C8F014F9 /* RDPDFAIContentProvider.swift */; }; - 2FC2EC825BFB520C931A20AD3C93DAD0 /* DTCoreGraphicsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 68302D3003412D32673539BAF3A71FFD /* DTCoreGraphicsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2FD7360250C2255A80583D4CF518FBFA /* DTTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FDA83DF0F8A6E9142BC2640BC2F9844 /* DTTextAttachment.m */; }; - 30C01FE491C26314F776AD8B2AF136FA /* NSAttributedStringRunDelegates.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C866ED63128D4AB5D968EEDA3CB7516 /* NSAttributedStringRunDelegates.m */; }; - 318FC0E7FCF79F00F83A7F03E766A219 /* RDEPUBReaderDependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = A533699DEE4985154543EA9F53620DB8 /* RDEPUBReaderDependencies.swift */; }; - 31B805C50E0E187E6242B0C878C4D30D /* DTCoreTextMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D3C2F16A4F9F4BEAA317715C1F17C81F /* DTCoreTextMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 342CF0083041E6957710A3D35EEDBD5F /* RDEPUBReaderSearchCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8DB205FB6149A977447BDB109A35B2E /* RDEPUBReaderSearchCoordinator.swift */; }; - 343E794F88AA503F5139C2244DC1A2B1 /* DTTextAttachmentHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C822D376841DA0BA4150A8A8E5B911D /* DTTextAttachmentHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34A377090CCB6577C85C8F72E0F3CD7F /* RDEpubReaderFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2715A17C898A6D776882BEBED0FE9695 /* RDEpubReaderFlowLayout.swift */; }; - 34A50CCAB9D9D2DB6C6E2568A4E8D047 /* NaturalLanguage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2060195F94C630A87E7A2F7B08B732D6 /* NaturalLanguage.framework */; }; - 3527805F1EAF4AA2D1C691835E0D3738 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = B466C1278D8245B512592A07C1965D32 /* ConstraintConstantTarget.swift */; }; - 35A02EFDD20399BE1910CB5C855BCBFA /* RDEpubReaderView-RDEpubReaderViewAssets in Resources */ = {isa = PBXBuildFile; fileRef = C8A6E90AB5E26049710E2C2404C28B9A /* RDEpubReaderView-RDEpubReaderViewAssets */; }; - 35C5BE59CA712CCDF93D6E7010D93883 /* DTAttributedTextContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 63A43AFE4C6D7EBA5A25A5B514F473AF /* DTAttributedTextContentView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 361808AE6FE4B0AD47DB34C9D1290C5C /* RDPDFReaderNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B3397616AD34F6B89948DEBE139C7C5 /* RDPDFReaderNavigationView.swift */; }; - 3674DE97851C406DA102B9E44BF04D28 /* DTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 16023686DC389E6755BC79366433C45B /* DTVersion.m */; }; - 372E907DF08263D0E1AF904F1FCD66EB /* DTTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = C911EE625C8CD488E8B66FA8BA2B5C8F /* DTTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3757CD1E7F4EA41CDAB495BBB6F7D9DC /* RDAIIndexService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F37BFCD74928584B57F92A89DC4573 /* RDAIIndexService.swift */; }; - 383ED4A31AA31ECDE5599419DDA89041 /* RDCBZReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A49256901179CB08DE0A320BF1D7BE /* RDCBZReaderController.swift */; }; - 387C801A5E9BC43D2E10A71E04597B03 /* RDEpubReaderView+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFBB650C069928DBF6A9F7BA0E89A4BA /* RDEpubReaderView+CollectionView.swift */; }; - 389F7C8400F9223C019F2D7825CD2369 /* NSCharacterSet+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = E26546A9CD322544BEF648DFE2B26D7D /* NSCharacterSet+HTML.m */; }; - 38ED3BA7A3F5F7E164EFA8FFC4D29678 /* NSURL+DTComparing.m in Sources */ = {isa = PBXBuildFile; fileRef = EF82EDCB0C8172FAF3847EAAD873E096 /* NSURL+DTComparing.m */; }; - 3905E0DA77036FD5BEFD7D80EF8A83CB /* RDEPUBParser+Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA21017980D553A4F9BDDF4AA5D7C5A /* RDEPUBParser+Package.swift */; }; - 3931A56C2503B0A3D0FE828F02D9B979 /* Archive+BackingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C4B1FD4CAF8FFB009FF39F501B2650 /* Archive+BackingConfiguration.swift */; }; - 3936F0CEFF36DF3B6950232469464C92 /* Archive+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF8481A9468E2620C3170C28BC17691E /* Archive+Deprecated.swift */; }; - 3B573DE391E21DD53D79438B96CC0393 /* RDEPUBReaderHighlightsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AD23766F927150C00F31EF8198B457A /* RDEPUBReaderHighlightsViewController.swift */; }; - 3B96821680A1C1A218CE1C9FC855A23B /* RDSpeechReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FBAA88C8DBE0129E51AD73F7D1AB4BD /* RDSpeechReaderController.swift */; }; - 3BA3E2716A868DCB8EAEFF2AA664DE4A /* RDEPUBReaderRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8568D36432A34FEDE5381E99A8C991F8 /* RDEPUBReaderRuntime.swift */; }; - 3BC5755AD310406848ABECE1CA3F246D /* DTFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E6AD45B90D08BACAF3AF76AE40BBCC10 /* DTFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CF535BAE45442DAA10B8602BDB97ED0 /* RDEPUBTextPositionConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DC986A408054D5C173C9528E22F94B5 /* RDEPUBTextPositionConverter.swift */; }; - 3DC8F9474FC6A0BB7E81A703CE958966 /* NSAttributedString+DTDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 21A5EB7C80D2F578DE579CA1B20F3CDB /* NSAttributedString+DTDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3DF19CE1034D02FA86C0B5BAB69917AE /* RDEPUBReaderAnnotationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036FFBB8F2CD53C655683977792C77E1 /* RDEPUBReaderAnnotationCoordinator.swift */; }; - 3FDC0622E8C79045CCD33384BECD3148 /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C726091C55C51A29EFD42913073CA5E /* Archive+Reading.swift */; }; - 4072AA6607B72436AD2E6AE3FFADAC89 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; - 40FFDE03700BDC58ED5577371EF237F2 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971623801171F2368ECD657BD0C2937F /* ConstraintMultiplierTarget.swift */; }; - 41B1A699D6984DB7183BA045834CB450 /* RDEPUBCFICompatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F873050819BDCAA6F32B3166C4ED9C5 /* RDEPUBCFICompatibility.swift */; }; - 41F5F94C7DF31187F8DEDACFED77F0E2 /* Archive+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 304EE7D51CFA84D5F4DBD3F5745F241D /* Archive+Helpers.swift */; }; - 42C418BB820EE1B51E1BB966F7D4A59A /* RDPDFZoomablePageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A41D37F86EFC816F7478316843069DA /* RDPDFZoomablePageView.swift */; }; - 432828354099FF9940FC9BB1A5DC2D6E /* RDEPUBAnnotationEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57F27A444B1D85CE9D552F3BE088E5E7 /* RDEPUBAnnotationEditorViewController.swift */; }; - 4378DA5B31F23FA54D3D1B377447835C /* RDEpubReaderGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 255FEB02D707D9C56E1D5BBE89A8488B /* RDEpubReaderGestureController.swift */; }; - 43E68A3A27053FD0A6BD82887F6A61B3 /* RDEPUBTextLayoutFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9462F129CC1EF33AAEDFC0F3CD09BD9A /* RDEPUBTextLayoutFrame.swift */; }; - 44B1FBF893C06F314F8C9BD1405897D8 /* DTCoreTextGlyphRun.m in Sources */ = {isa = PBXBuildFile; fileRef = 31B00EC977C5120446E63A976AD9DBC3 /* DTCoreTextGlyphRun.m */; }; - 44B420AB0963FB65CA7734418F1E80E1 /* RDPDFReaderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F654C6659A3FDE4C3E08BBDD2C01CCF /* RDPDFReaderViewController.swift */; }; - 44F3EDE2E5585295F5881B0354772652 /* RDEPUBStyleSheetComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35113955C9D390BAC3B55BD96F596650 /* RDEPUBStyleSheetComposer.swift */; }; - 44FA5DE799285D7A61EA798CEEA430B8 /* RDEPUBChapterLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E5A5D3D109FB88E6EA88F1E2253525 /* RDEPUBChapterLocation.swift */; }; - 45133E47CC5FBCF78BFCD38981BA027F /* DTDictationPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 86255994A7212A40F60FBEE69C526FF9 /* DTDictationPlaceholderView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 45C2D80A964B3CE611A003CBBDFD36ED /* RDAIDiagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 291A21D778336F982A7197655BD501D5 /* RDAIDiagnostics.swift */; }; - 45F90B98546FDBA03AB112DFE859A185 /* DTCSSStylesheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C5C85EAAD91F1E22CC5986EF9B5D218 /* DTCSSStylesheet.m */; }; - 4682824DA120D16A9C1E5A409449D660 /* RDPDFReaderAnnotationEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C91AB03142606446D515451D75613853 /* RDPDFReaderAnnotationEditorViewController.swift */; }; - 46D4BDA7B3DB868CE98E5733017F3E86 /* NSURL+DTUnshorten.h in Headers */ = {isa = PBXBuildFile; fileRef = 05565CA71DD7DDAA012573A841F7D8DF /* NSURL+DTUnshorten.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 46EF32D586FF590CE2C60C66364B9357 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B73DC0FE59A501CF1EBF64C6ABA20417 /* ImageIO.framework */; }; - 476B266618E9281C1F362C871E9686B2 /* RDEPUBNoteDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B9E332F7EDBC4A91BF0DBB014C44D12 /* RDEPUBNoteDetector.swift */; }; - 483931C8D43DEF9C708EC6111B7C8E6C /* NSURL+DTUnshorten.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB04D144E7A35904D2906AC517EC870 /* NSURL+DTUnshorten.m */; }; - 4840D1F3B294A0C51F6B6ED77779A836 /* RDEPUBWebView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF5A643FD1163E493C913723C79E6B44 /* RDEPUBWebView+Configuration.swift */; }; - 484D3D3F85A886BE6364CEEE333C7045 /* PDFKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A6185F233EFF0ED894B7128B2B09821 /* PDFKit.framework */; }; - 48D1F6EEB21172A1047DAE33BFC9D647 /* RDEPUBReaderController+LocationResolution.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAD65472015B1666F31D1B7722813104 /* RDEPUBReaderController+LocationResolution.swift */; }; - 48E166F2C1FCEA0163D05D60838C08AD /* RDEPUBCFIPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 400E1D62DDD3EBA94D28BCBAEEB8278D /* RDEPUBCFIPath.swift */; }; - 4905D46C2BB35B43AE7A780EA987D146 /* RDEPUBPaginationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22EC93BBACD9340338C2EA7F06488FF9 /* RDEPUBPaginationModels.swift */; }; - 4A13B4E5EA8616A8F09D90BC6EAEEA64 /* CTLineUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 07147F57468AB345BF82E26A70F60603 /* CTLineUtils.m */; }; - 4A1F368BBA3E00391DFC147AEB4ABF08 /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80235C2E1DB28406F275E23F0ADDE9B /* ConstraintMakerRelatable+Extensions.swift */; }; - 4A596FCAE2DB0ACF3FF099A65C7E0512 /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF76DD862995E6DCA4C9DD1EAD23C6F6 /* RDEPUBAttachmentTooltipOverlayView.swift */; }; - 4B119ECC1F5E2879EEBBECE73B885B5D /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2129FCC5AA430659582F12DBA1350292 /* ConstraintLayoutSupport.swift */; }; - 4BA0B5B55E26574C00CFD26DEF30CA7D /* RDEPUBPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 652FAC593B4120C7C6FB336099192C03 /* RDEPUBPreferences.swift */; }; - 4BAAFE6F010272E410ACAE88390153C3 /* RDEPUBCFIDOMPathBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = A141D6AF0DC4700DEB1835448CD930EE /* RDEPUBCFIDOMPathBuilder.swift */; }; - 4BD4C274A25A2C0D67A8CD58CEE23A96 /* NSFileWrapper+DTCopying.m in Sources */ = {isa = PBXBuildFile; fileRef = B2542127DF3D3CEF3D1EB999F8576341 /* NSFileWrapper+DTCopying.m */; }; - 4C3BF1D5C2B8A4CEEEB866622065590F /* RDEPUBTextPageVerticalJustifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7C0AB34CD2CE6BAD791E1F6E3D75649 /* RDEPUBTextPageVerticalJustifier.swift */; }; - 4DA6EC46F8968265B96C6D7B2260C4E5 /* DTTextBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FAE8E0BCF1CB66D6936A3CACAE7CF0B /* DTTextBlock.m */; }; - 4E4939F6592B06D2CA764DCACFB47871 /* NSString+Paragraphs.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FE24D923BB63C2BD4397C37352A6204 /* NSString+Paragraphs.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F50C703427747B88405080B221349A1 /* DTLinkButton.h in Headers */ = {isa = PBXBuildFile; fileRef = E7890CD33BD10753D1D971AD2FE20A74 /* DTLinkButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5063918BF068EDD60245CF1FFA14C784 /* RDEpubReaderView+ToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60CEE20803A7C342B83A5972F87CE05F /* RDEpubReaderView+ToolView.swift */; }; - 5065D99E1588E8CC60677E74916A5C03 /* DTAttributedTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A54C0C47B44A133E0CFF71526B88FAF /* DTAttributedTextCell.m */; }; - 5069AC302EAA58714AE6D0BB0AD65633 /* RDEpubReaderSpreadResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7921A77874E3E2E63E378843085CE55F /* RDEpubReaderSpreadResolver.swift */; }; - 51A1B5800D23C355B1712E8D1103780C /* DTTextBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 52A65E0D6AD4CFB0EECC8AD17A4E8EAC /* DTTextBlock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 522C9D67313466AF5FAE800D0D20A1B8 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE51B89744E67BA9CF7E4E2C6DB4DA05 /* ConstraintRelation.swift */; }; - 5271325F17912AE731F1FAF8D3328F6C /* RDPDFReaderDrawingLayersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFBBED2FC1668912DBF7592720CC14A4 /* RDPDFReaderDrawingLayersView.swift */; }; - 528DBAC7FCEFC7D6575C1F6CB4399AEA /* DTStylesheetHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8961D7BA81FEA0F2525F9E82F156426A /* DTStylesheetHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52C7F205E10750FE3DB39E685D6B00B0 /* wxread-default.css in Resources */ = {isa = PBXBuildFile; fileRef = 5964D41F9024DDA6DA0E1B06D5A628DE /* wxread-default.css */; }; - 53ED06B75EF9B8FFC0D2362B7B64F4FD /* RDAILocatorBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90DC3AA09B301621526C8BCC0AD9D9 /* RDAILocatorBuilder.swift */; }; - 5456493C65094838AD0F2BC39FDC7B41 /* RDPDFReaderChromeViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7C3A637594FCD8D6F09237F5103A39 /* RDPDFReaderChromeViews.swift */; }; - 54CFB30383D0EA0F41434F46087160F0 /* RDEPUBTextBookCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 280E073C67E0A1BAF7D84E6DA6FEF2CE /* RDEPUBTextBookCache.swift */; }; - 54D02DDE581B6C0C88C240CEBC5CC41B /* RDEPUBDarkImageAdjuster.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DD1E0E929865962947B62F7DED78F3 /* RDEPUBDarkImageAdjuster.swift */; }; - 5503E7E20C896418ECCDD315FA7F71BC /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20AFDAE6841D0000824C044E2CCEED62 /* ConstraintLayoutGuideDSL.swift */; }; - 555FD7CDC7364E9E4F849A54255B0D27 /* RDEPUBWebView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41842E3F5C4C4B1ACDE3C397F0AE687B /* RDEPUBWebView+Search.swift */; }; - 5582735073EBB9F5078E6E8AEEFB646A /* DTCoreTextLayoutLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 28FF8B4C669DE2384EE37199498D23E9 /* DTCoreTextLayoutLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 570B9696C1005A0AEF43490F610D6826 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAEA965F9F262BB8BF17C77B01C0956 /* Archive+Writing.swift */; }; - 570E7075A4C6493C10203B303AE5CE7B /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = 278B56CFF632EE38795D20993A889459 /* RDEPUBTextBuildPipelineInterfaces.swift */; }; - 57D5228C8A85628772D4D78E7FBEAF3C /* DTDictationPlaceholderTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 188836BC213C48E6459D098231133246 /* DTDictationPlaceholderTextAttachment.m */; }; - 57E6E8838EA62098BBF70310A8ED9A69 /* NSString+DTFormatNumbers.m in Sources */ = {isa = PBXBuildFile; fileRef = 298CF23475A19D50E172630BD6D1D1EA /* NSString+DTFormatNumbers.m */; }; - 587015DDFCEB54F1161FF6D1E04511CB /* RDEPUBRuntimePageCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BB109BD1A878FD38390731ED383EBB8 /* RDEPUBRuntimePageCount.swift */; }; - 59023BFD93B4B99D464C75471795658D /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FD67CE75631597FF6EE0F345C77B9D /* ConstraintPriorityTarget.swift */; }; - 590762C119260376B3DCCC16D2362964 /* RDEPUBFontFallbackResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18F8C909773BAAEE76086E976B096FDE /* RDEPUBFontFallbackResolver.swift */; }; - 593C7D0F96C618C5D04A67758D019C39 /* RDEPUBChapterRuntimeStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 252792DF6A9EBFA863DC153A59A7C003 /* RDEPUBChapterRuntimeStore.swift */; }; - 597DE4CDF5C674E269F03F6AA0AFFCC1 /* NSAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 74F621BADD77F0A22003EDCA6F92D153 /* NSAttributedString+HTML.m */; }; - 598D022C283819443091902BE734DAA8 /* DTActivityTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 702AB4F450076D82E264C7AF93A45F14 /* DTActivityTitleView.m */; }; - 5B5B1CD4310ABEA4C3480C1C1F0BA092 /* RDEPUBSelectionOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37A4370530967E365499946ECCA13F13 /* RDEPUBSelectionOverlayView.swift */; }; - 5BD8E695D1B9D6FB8A1CDB11F19F9E24 /* RDAIReaderContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCBD48F4256CF6916C32ACC00CA15E31 /* RDAIReaderContracts.swift */; }; - 5C034F77D297BB39CC375385C29086E7 /* RDEPUBBookPageMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999BDDCF67865CDD1D8FDFDCF47B3BA6 /* RDEPUBBookPageMap.swift */; }; - 5C39B3B61C6C9554E874E04461D099E0 /* RDEPUBReaderTopToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 351FD88DC68196BACB5E8C369837AF17 /* RDEPUBReaderTopToolView.swift */; }; - 5C8E343FC738C259948D09E98B2BE323 /* RDEPUBReaderController+ExternalLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88C8DF89086D815C51DE683C61FC05D1 /* RDEPUBReaderController+ExternalLinks.swift */; }; - 5CDC5753D0BEA1791C8585D0DFE20214 /* RDEpubReaderPagingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0D4CF44D919376D1696CC0827A6D4D9 /* RDEpubReaderPagingController.swift */; }; - 5D03A5B9DC067875CFEC9D4EA7B059E8 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2557D3D9913F2F7C7C6AD2C114C2A5C5 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5D8D65121E87E419D8D2F23F8AF43673 /* DTColor+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 51CD1050B1BC09EA428919282AA2614D /* DTColor+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5D9FF5F738BCBCB2CD47D8E127795DCD /* RDEpubReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E158150F7B2357D4D54239CBD346CE8 /* RDEpubReaderPageChildViewController.swift */; }; - 5E1C53786FAF732AA6AE6CDB8D03726C /* RDEPUBDecryptingImageAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = C34C80F5248BF6ED37B94686518B46EB /* RDEPUBDecryptingImageAttachment.swift */; }; - 5E90EBD876ED4E50AB890FB56C4BFA57 /* DTHTMLParserNode.h in Headers */ = {isa = PBXBuildFile; fileRef = FE2F750872F6BAE0ACB02ADF23011AF8 /* DTHTMLParserNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF4E86CD0381F96E2E2785DE8857966 /* RDPDFReaderView+ToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8C14962F04ECA1A8B77093B8EF5E23B /* RDPDFReaderView+ToolView.swift */; }; - 6015E451BF1858D3DEAABC76AA62D950 /* SnapKit-SnapKit_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */; }; - 60532A2E06CCFF814933D2FAE6793AE9 /* DTCoreTextLayouter.h in Headers */ = {isa = PBXBuildFile; fileRef = 55265AB7222E2B20F9B5B320259186BC /* DTCoreTextLayouter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60A4A0DBFD2263B7E2FA3928A0ABBD71 /* RDEPUBAnnotationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 953E3DE740417FEABC50197EA84D3869 /* RDEPUBAnnotationModels.swift */; }; - 61BE3607EABD2657BC71AF8ACB1C25D4 /* DTHTMLAttributedStringBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B10FCCF1F8CF05D36F5B65963EB1F41 /* DTHTMLAttributedStringBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61F79BC766893CDF8A84F85144D54E34 /* DTActivityTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 50E9C6F457FD3662DF4FC74CA5ACB962 /* DTActivityTitleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 621D8713C9AC9C3C09787C40997DDC85 /* RDEPUBFontNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F91B0C7F09F04D73718237F3B40697E /* RDEPUBFontNormalizer.swift */; }; - 627969A2C4F0C40D00C45FCF74C645DF /* RDSpeechTextPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08203CC2BC14FB8B3BA0CAA3EC92789C /* RDSpeechTextPreprocessor.swift */; }; - 62E433B2BAA5AA37D49EAF6B5BE98C4A /* RDEPUBViewportTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4D5A0A05487585451479D692E07399B /* RDEPUBViewportTypes.swift */; }; - 631388C3FD4E018ACBDDF55A0EE10AC2 /* URL+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E46A6DEEE6CEA27A1FC9024036D8136 /* URL+ZIP.swift */; }; - 63652A1FFAAD5C46479F1F8E051917D2 /* RDEPUBSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6032EC340E3CFAD1A8538662BBFF5BB /* RDEPUBSearchEngine.swift */; }; - 64155589E0B98A2A533AEADA4F0411F7 /* RDPDFKitPageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4419BC4EF1BB72BD430008215C2194B1 /* RDPDFKitPageProvider.swift */; }; - 64B52518CC3578ED6CA80020FB2F33C9 /* RDEPUBTextPaginationSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDC0C56A84DE47A00B353522B7309AE /* RDEPUBTextPaginationSupport.swift */; }; - 64F0A668BEE5C8AACCB9C3BC9388CDAB /* UIColor+RDEPUBHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE2FF626D776A0880B86E92EC160BA17 /* UIColor+RDEPUBHex.swift */; }; - 65E97E47A6CE7EEFD12CDBECD0D2E91F /* RDEPUBNotePopupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988C218F8E7B50E498B5A44BFE164678 /* RDEPUBNotePopupViewController.swift */; }; - 6622C4F4EAB0B5CAF9505377FD99AA2B /* ZIPFoundation-ZIPFoundation_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */; }; - 6634D568E49F5610242E1454680E5885 /* NSAttributedString+SmallCaps.h in Headers */ = {isa = PBXBuildFile; fileRef = ACD3CB33E5A4E915E5F4C09F4684FFF2 /* NSAttributedString+SmallCaps.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 66A624E8BC1DAF3DB5F73A4803E7D2BC /* NSArray+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BE28706DBAE983FB19FBE122D9F9E68 /* NSArray+DTError.m */; }; - 66FEEF58DB4B1991D6D0A641B05F937A /* RDEPUBCFIGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340ED4F9AD1A9332EABEC511A49FD18A /* RDEPUBCFIGenerator.swift */; }; - 6705BD3C1F523637A9AE0E5ED01A9121 /* DTSmartPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C1C6E107AA4540639C1ED1E7741CF07 /* DTSmartPagingScrollView.m */; }; - 6713F7FC53DE9E9717B7D7BED1966EEC /* RDEPUBBackgroundPriorityPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EBC152CC752677E2BF9AC52A6BA36E /* RDEPUBBackgroundPriorityPolicy.swift */; }; - 672001630C16C4BFF67B5E08F8BC74C0 /* RDEpubReaderView+PageCurl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89FC4D22055A02594B80AE3D61169CC1 /* RDEpubReaderView+PageCurl.swift */; }; - 672B4D141F08F37F31DB25A3B3C3436C /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02887009BADAD18D4A90F5A114DCE512 /* ConstraintDirectionalInsetTarget.swift */; }; - 675E36872F910FE44726AED144E3FC59 /* RDEPUBReaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C72E137C3DFA668BFDC57A4BEC6AE32C /* RDEPUBReaderDelegate.swift */; }; - 67AE2AC8D9B961D45871077774E11FD3 /* DTObjectTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FD1F6CDF944640D5F1E2A81A5494657 /* DTObjectTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 67E58BF0C1BB9DAFA1938AAE06AA0473 /* RDEPUBJavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3295E071BD0E7D326FF78153BA2B547 /* RDEPUBJavaScriptBridge.swift */; }; - 68A785B7E08A8E8829F896F3B9D20E4D /* RDEPUBPublication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D14015E61E39CFCDCA7990AD045B00A /* RDEPUBPublication.swift */; }; - 692FBE7827CB1C969D79F56C7250FDA1 /* RDEpubReaderTapRegionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 752C7424C07641B28AD2F0C06D1629D5 /* RDEpubReaderTapRegionHandler.swift */; }; - 69674FEA70899F07BE6098AAEC849978 /* DTAccessibilityViewProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = AC22C3CB82EEE746663403422F344116 /* DTAccessibilityViewProxy.m */; }; - 69C2DAE51CE7FB6012E7BC6B242F1D87 /* Archive+WritingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7382BDDD61B00469E398482B8AA31F3 /* Archive+WritingDeprecated.swift */; }; - 6A7CAC6F109F9A5FECFAF8365434B5E4 /* RDEPUBCFIResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7C568B890F636C0EFDCC12139EEC9A /* RDEPUBCFIResolver.swift */; }; - 6A7F010D74A23FDE95D3217D7BBF51F3 /* RDEPUBJumpSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB469565A1ED216AFEEDC8EAE6EBD11C /* RDEPUBJumpSession.swift */; }; - 6AEBFDC2BBEFF8D41B92E25BEBA88DA9 /* Archive+MemoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBD58858F74B286AB42B1D9C0E299BC0 /* Archive+MemoryFile.swift */; }; - 6B67545C9C3B50F376199A953DAAF248 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7EDB07502C56DF3D4F6E90F93880B28 /* ConstraintConfig.swift */; }; - 6C401234C15BC214C8C7EB4200624E17 /* RDEPUBChapterWarmupOrchestrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8271BF8B7810200FA9F29F48A6560327 /* RDEPUBChapterWarmupOrchestrator.swift */; }; - 6C493923CF5641870D6A95200105006B /* RDEpubPlainTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAE4A81DD559C8DAA24A7E45914AB294 /* RDEpubPlainTextBookBuilder.swift */; }; - 6C739D4266DDB13ABA18475D0DC8E6D4 /* RDEpubURLReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17C5298DC7291DA6730207C4C66F50D /* RDEpubURLReaderController.swift */; }; - 6E11974227C5789EF307B73FD968E54F /* rangy-serializer.js in Resources */ = {isa = PBXBuildFile; fileRef = 58557168DB1E78D1B4AF6C29B679CB21 /* rangy-serializer.js */; }; - 6E3D0FDD78ECC20F4B3697ED21D64224 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D0CB14225ACB0ECDF2CAD95CDA30DD2 /* MediaPlayer.framework */; }; - 6F9CCC35918031FA93F8DB97E92E3C12 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39EFEE9E154AB29DC2CC553438E66442 /* ConstraintDescription.swift */; }; - 6FA0125F16DDEDAD341DB75DEB084F4B /* DTHTMLWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BB20F608D8D3B80F2688014A5F661FC /* DTHTMLWriter.m */; }; - 6FE61735A4634CFD8570656E8D0CE8F9 /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36E06DBE2154F8FCE42DD5E8CB02B258 /* ConstraintView.swift */; }; - 7027EF8D77D4082C1BB9B80FF61FCADC /* DTCoreTextLayoutFrame+Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = CE669FB235F0A79C31606AC2D531E6C7 /* DTCoreTextLayoutFrame+Cursor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 70569A36850676C7E290786FA104AD9B /* RDEPUBFixedLayoutTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 176BA6492702B8C8B44BB4838E9BE22E /* RDEPUBFixedLayoutTemplate.swift */; }; - 70AE1C2638D37EFABDC722F9EEFE35C4 /* NSString+DTPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = BDFD7D9A4BFFBB2603B10E3A432551B6 /* NSString+DTPaths.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 713A5472FA1AC9AFDE2A53ADCBD7E275 /* RDEPUBChapterCacheKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 984D5B14277EA4CB70D58019DC0D2E7A /* RDEPUBChapterCacheKey.swift */; }; - 7140ED0FCBEE21E6ADC5C86510554445 /* NSData+DTCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 503556D1790A886D0E591A982279641B /* NSData+DTCrypto.m */; }; - 71418DB3666321E61DCCEB3283249368 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; - 7151C4FC372F80CE454CBB4ABD2C0FAD /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D35E3E5D1F0237B862AF1C496338DA61 /* RDEPUBPageMapReconciliationCoordinator.swift */; }; - 7154F8895FC65582EE371B109D94B2B3 /* RDPDFSpeechSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 064F689D0045852491C10A092AF5E30D /* RDPDFSpeechSession.swift */; }; - 719F5098842D53A54D6CF6D8CA38561F /* RDEPUBReaderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AC4B57FB834CD3FE6380801D726D436 /* RDEPUBReaderConfiguration.swift */; }; - 71FA30F520F3977FCA0F2E7DDFD0849D /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1870B77AD9A6F26AB3180BB4CE2A8BCC /* ConstraintPriority.swift */; }; - 728B81996929B1861280CF1FE49C25BA /* DTHTMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F78033C34E8C1FAD3B27FFC4F959A611 /* DTHTMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 730ACB99580C5982DC08D50FC5084D41 /* DTAttributedTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = B646DEE91A4E62F132C54E702B8BDF18 /* DTAttributedTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7395CBDBDC06A230C64495B11DED662D /* RDEPUBSearchModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7A9D2873B8F3EC6F43F7F65854A0341 /* RDEPUBSearchModels.swift */; }; - 7398FC3E3694EC9874DBAB773AAC1B24 /* RDEPUBReaderController+Trial.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3046302F1405F10DE953D9BB963E1A8 /* RDEPUBReaderController+Trial.swift */; }; - 73A83E4CC747E532247A09C60BE97099 /* RDEPUBStyleSheetBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F4690DA615CD1FD20F08CD8BB5CD166 /* RDEPUBStyleSheetBuilder.swift */; }; - 73CB1C47A368FB5FD420680227696815 /* RDPDFReaderPersistenceStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B368C95FB7C2727A7CA452242CB904 /* RDPDFReaderPersistenceStore.swift */; }; - 7459A1656EDC29D685073B83561B783E /* NSNumber+RomanNumerals.h in Headers */ = {isa = PBXBuildFile; fileRef = F8569A5FF03BA54C0F4080D3EE5539D5 /* NSNumber+RomanNumerals.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74C2C8965437DD15A1DF7393274EE945 /* DTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 708CF8B218058AAAA710BB7ADFC504FE /* DTVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74F65BAFF30DB1459C767CC1B79C267B /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = B71BC62246AFEBD517D3175813789310 /* Debugging.swift */; }; - 768D72C3538A9E008887345F76DA4D82 /* UIView+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3124E174D81A28717086F17445BED5BB /* UIView+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 76F75335C90A55087171C9DF54E2F4B0 /* RDEPUBReaderController+ContentDelegates.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0835A36D971DBF49B21DC08AF857E4 /* RDEPUBReaderController+ContentDelegates.swift */; }; - 7762FEA9B3865378C7A92096577009E5 /* NaturalLanguage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2060195F94C630A87E7A2F7B08B732D6 /* NaturalLanguage.framework */; }; - 7821105EF320619993B3BF7FB90C7ADA /* DTCSSStylesheet.h in Headers */ = {isa = PBXBuildFile; fileRef = 88A74F7BF47C6E3B2026A80DC4783F1A /* DTCSSStylesheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 786747640B55602D77885D5B3A6F5E03 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D42C4F678DDCCEAE9A66D3D55B30AA8 /* ConstraintMakerEditable.swift */; }; - 78D24D82D98D77E744FF73C9040618A8 /* DTHTMLParserNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 47E0F42EC4845B73E0193AA0062A1576 /* DTHTMLParserNode.m */; }; - 792D5CAEC030F37770DFC2DBC1BC3773 /* RDPDFReaderPagingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 943A86A9A49BFCE017A6E927A5227BF2 /* RDPDFReaderPagingController.swift */; }; - 79E20B3F49DEF332844FD439F1026EE4 /* RDEPUBParser+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA8EF373BBB5C4CCBC5508A277C66DA2 /* RDEPUBParser+Resources.swift */; }; - 7A0D1C65F575B626B24D92A841187495 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0EA3863B341F56C9B54980AD6A1FD5C0 /* PrivacyInfo.xcprivacy */; }; - 7A255B9249FE4C84267820873AC6CE40 /* RDEPUBNavigatorLayoutContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1003FAF53E637D0449A9CC1D883E1F1 /* RDEPUBNavigatorLayoutContext.swift */; }; - 7A48CDFB40202EFD09A2A9AB0EE0770D /* DTCoreTextFontDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = C56EB0E701347B766F12260495801CE1 /* DTCoreTextFontDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B30FDFEECF4A828890D252C2A5DE4F5 /* RDEPUBTextPageRenderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD6379B6FF36860C62B38044B24310C8 /* RDEPUBTextPageRenderView.swift */; }; - 7BFF4431124D99872DA99035564A479E /* RDEPUBCFIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135A0766D1D454304DFB4E2D541E3883 /* RDEPUBCFIError.swift */; }; - 7C05F56B62B15EFF344C5CDE4A52B8FB /* DTHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 44894FF917F68A61F0E523342FA5D0A8 /* DTHTMLElement.m */; }; - 7C074EB51A531B62A6EB9D8B825FFFFA /* NSURL+DTComparing.h in Headers */ = {isa = PBXBuildFile; fileRef = 74ECEF7602380F21B87522961E550A7E /* NSURL+DTComparing.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C403ABBEA121DBE2FDBC75076F2F6EA /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F533E14DBE841E334D44FEDC9132726 /* ConstraintOffsetTarget.swift */; }; - 7CA0156611964C72807860FA6F544D18 /* RDEPUBChapterTailNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED638272054208AFD646AF6EB4B4ACAE /* RDEPUBChapterTailNormalizer.swift */; }; - 7CEFDC81E5299572FF92465093A490F8 /* NSString+DTFormatNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C4EC50C6DC93761BB6C825CE1C4ECD /* NSString+DTFormatNumbers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E351271D44E8B0D5CF5AC5FC3BB5267 /* DTFolderMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D9D817F1F806BC50BB65FC80C7D47F /* DTFolderMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7F9CC306B17D409DB903DF850FEDA64C /* DTListItemHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B446AE2E106CECF72AEEA93B85897EC /* DTListItemHTMLElement.m */; }; - 7FAFC81AEE5E9018A74BB33F71B742CA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF67AACE84A77AEC6F9CED48AA5BAFDC /* QuartzCore.framework */; }; - 80251A1EAF798D1DA0E8B6943015E263 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; - 8030A76D8117D9E3811AB6B7D044D4D5 /* RDEPUBTextPageBoundaryValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D91B95C25EE62BB4B1F381EB057E9857 /* RDEPUBTextPageBoundaryValidator.swift */; }; - 8099F1E613A15275EF5FC59ED3C73579 /* NSAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 42C2ECC838DE8A6E5DEB264BEA6F59E4 /* NSAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 811D7CBCD710AE45FF80A4B05BFE444C /* UIFont+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FCDFEE3DE4E8469962B9931E7775E8C /* UIFont+DTCoreText.m */; }; - 8137EBB59B68FE44A292FAF24DE6DE37 /* RDPDFReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E9BFD9290BCB2009DB319A63935EF99 /* RDPDFReaderTheme.swift */; }; - 814D0D63E5FD4AB7231E63064FE9EB5C /* NSAttributedString+DTDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = B616B1E339BA326837E6325F3F291E51 /* NSAttributedString+DTDebug.m */; }; - 817BD48447F5B765716833E93D1EEE7C /* RDEPUBReaderToolViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA1492B4475D97CA7D2A514C6740AC74 /* RDEPUBReaderToolViewProtocols.swift */; }; - 8188B3342AF06DDB51B33015A01A2F40 /* UIApplication+DTNetworkActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AACA176C2E9FDB2B4834B426AC6368 /* UIApplication+DTNetworkActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 81905A7717925A17E6B98E934A75B8BA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF67AACE84A77AEC6F9CED48AA5BAFDC /* QuartzCore.framework */; }; - 81C566F6B24532A292C755DBE663D843 /* RDEPUBReaderChromeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A39FFDCEA5A80B1D0BDDCA93EB781EF4 /* RDEPUBReaderChromeCoordinator.swift */; }; - 820BE41FD46A46EFA47DCB51E36B3348 /* DTPieProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9678265F1949A0F038F13D422F2B55FD /* DTPieProgressIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 82119A0DC4981CC2AF389C7C4CC08186 /* DTListItemHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E6203B41468A1B8FBBF9CEC0BF15751 /* DTListItemHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8282D8B5123F0C53F433270E96967E74 /* RDEPUBPageInteractionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DF3043DDE18A19F6421EF2CF64139B1 /* RDEPUBPageInteractionController.swift */; }; - 82D616A6A0BDBECCECBF7DEE97439944 /* RDEPUBChapterDisplayContentCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 190346203AD581C70492D0745A6E8803 /* RDEPUBChapterDisplayContentCache.swift */; }; - 83A4BC9FE4765C9B848DD4925D99F362 /* DTAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = D816721347D943A1D204E1507FFA5019 /* DTAccessibilityElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 859D2BC60B7EAEFD562E13D22F1D836D /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D86855B4F039593754D5DC832865EA9 /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 85FB7A92E7BE58422BBCA8BCC503073F /* DTPieProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 973C2C363B09BC1E49983C6826A623E2 /* DTPieProgressIndicator.m */; }; - 863327A5E10B22298BB440E98DE9F15E /* Data+CompressionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAAA91CA607516E42FAA5C2245D6E0C2 /* Data+CompressionDeprecated.swift */; }; - 866736EAD1657A677B7CE98A60CC6249 /* RDEPUBMetadataParseWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134B4A5BAA37EE1E20002904058F91C0 /* RDEPUBMetadataParseWorker.swift */; }; - 86DC330DC883C193E3873FC14C462783 /* DTCoreGraphicsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 9761870FC405B984D09A304261C3CB25 /* DTCoreGraphicsUtils.m */; }; - 8731E6DFBE1CC958CE8B122D5144B3CC /* RDPDFReaderDrawingToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FC55A17D1CCC4C4BEB88B146B790D8 /* RDPDFReaderDrawingToolbar.swift */; }; - 878C973814D1C120B7940EA4477AAC7D /* RDEPUBWebDecorationOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6BB958DEBCC33A50F89F805D087B922 /* RDEPUBWebDecorationOverlayView.swift */; }; - 87E3B89BA351CD67C8DF1798B04D88B3 /* DTAnimatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C66F715840302F2CF4DA6C8558A09BD /* DTAnimatedGIF.m */; }; - 884A0E9B795FF7C1A3762AAEEDA0A6B9 /* RDEPUBReaderController+Orientation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10FAAD53D64E9A7F84D322E4DBCD7F4B /* RDEPUBReaderController+Orientation.swift */; }; - 88C129FF0E69C6E384F2779A23C55427 /* RDSpeechReaderContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02108A241C993AAC297AF4F8245FD443 /* RDSpeechReaderContracts.swift */; }; - 890B44E459F47281270749B9556E84AF /* cssInjector.js in Resources */ = {isa = PBXBuildFile; fileRef = 4851457CCDD4EA7C57B379138A7478E1 /* cssInjector.js */; }; - 893A917E82D5B3E36C2D32A6A17696BD /* RDAIReaderAssistantViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F5A849E82ECED8710DBA54B127186F /* RDAIReaderAssistantViewController.swift */; }; - 8992C1B0446EC0DE0C94A041BE926FB9 /* RDEPUBPageCountCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB2F54C055F942CA37FE44B4E194467D /* RDEPUBPageCountCache.swift */; }; - 89AB5F2CC5F3934CFA317ADB44092BA0 /* RDEPUBRuntimeChapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B519C702035AA132CC8AFFCF4399C678 /* RDEPUBRuntimeChapter.swift */; }; - 8A0A0FB23DB0021ADC9AD0D90631883A /* NSMutableString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 295BCC7FDA963E5D8F53CBF64F08B2B5 /* NSMutableString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8A35CC67F0AA6B26397C10D756EA34E8 /* DTTextHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 23E6F02F41FDE074ACD5C78DA921EEED /* DTTextHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8A7D59F186CD4A90AEF425FF382B3F0D /* FileManager+ZIPDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0486411409B1766377F5F2A6234D8E64 /* FileManager+ZIPDeprecated.swift */; }; - 8AAA54629501B2B15CDAE350BBF0E2CF /* RDEPUBParser+ReadingProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF517630D9C1210CC93BA4C5EDFEC72 /* RDEPUBParser+ReadingProfile.swift */; }; - 8AC90941E71199090BCED76DE89EFB60 /* DTAttributedTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C11AEF7E65FFDA653DFB142C22DEF4 /* DTAttributedTextView.m */; }; - 8B1D67AF4E9CA4C0401395ED3A381816 /* DTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F72747C46CC41B906C8A967ED5A47E6 /* DTLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B405CE13E7D718A9340A82B52766AB2 /* NSCharacterSet+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF70C90945A3410647B87CF1F107605 /* NSCharacterSet+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8C354A6F2AE332B985CDD60E2A98BEF1 /* UIColor+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1865AFCF70C53C253B8F4E01D5F5E61C /* UIColor+RDEPUB.swift */; }; - 8C8B2A92E5D2BFF214F751639F96DF33 /* DTBase64Coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D70C4504AFE88A621171FBB9368722F /* DTBase64Coding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8CB0C79D881B535BE9D8EB7FCFC5354E /* RDAISpeechContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3AC0D799821BAB2769DC35260D98143 /* RDAISpeechContentProvider.swift */; }; - 8CBD18C38E97757F67620E5EBA85A70F /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCF9B3BF987216CF1766D80FED04CF72 /* FileManager+ZIP.swift */; }; - 8CF42D8E97582A70BEC953567CC62F59 /* RDEPUBCFIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 861BA9ED43C06A4CF6845176A27A14E9 /* RDEPUBCFIParser.swift */; }; - 8CF55379C440B62AD7DAA78629264DD4 /* RDPDFReaderImageTextLayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48D4FB95327A55188B4EE105C47E7090 /* RDPDFReaderImageTextLayerView.swift */; }; - 8D2724AF90CEEF7E769462932D96037D /* AVFAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFD7E6FDEB959ED4BCBF686887E2BCE4 /* AVFAudio.framework */; }; - 8E8726381CBCFB1EDB350183456D4EF7 /* DTHTMLParserTextNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A2A7B53BCE33A88EB155ED5C4F5C09D /* DTHTMLParserTextNode.m */; }; - 8F4547B8CE2A89A9EEE45E743F503BDD /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E4757842563D7D3DAB82C8B693B313 /* ConstraintViewDSL.swift */; }; - 906561FBE3727743E5F81F793D5EE210 /* RDPDFReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A746B9DD2EDF2950A3F314EA3D5B2EF5 /* RDPDFReaderContentCell.swift */; }; - 90C1E12EED0B468F95435AE0E7AE8629 /* RDEpubReaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D180DE0FA4D342CB14AE055864AD03F0 /* RDEpubReaderView.swift */; }; - 91C03969F93620234EFFD70FD1552288 /* RDEPUBBackgroundTrace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92F0F3ABA13CE7A54A4E4E349805063E /* RDEPUBBackgroundTrace.swift */; }; - 91FDA47810CE5CE2C48AED9205AE89B5 /* DTStylesheetHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = E15930CD8D9ED2F990B87E8F78DD5A32 /* DTStylesheetHTMLElement.m */; }; - 92C59F96D443525E8833676479FA60C5 /* DTVideoTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AEDBB0324469C4ECD8D10A6355A2A09 /* DTVideoTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 931CA4F727B6DA33D41913BA9D5F9A5A /* RDEPUBParser+TOC.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC98EFE638423C12303C34B7A44385E2 /* RDEPUBParser+TOC.swift */; }; - 9379A9C9471BD46D7606BC0753579CE3 /* RDEPUBSafeArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04592A413A3E30701E478D8F61806A9C /* RDEPUBSafeArea.swift */; }; - 9478530F48C5EA152B22F8A3E6F5ACE0 /* RDEPUBCFIRecoveryEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = B48683C68BD7645B716F54066EFA211F /* RDEPUBCFIRecoveryEngine.swift */; }; - 94F5846979DBC90E2B646E975F5ECBA8 /* DTHTMLWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB8005939E9A85DD9BDAEAA3002E57 /* DTHTMLWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 960ECB0BE250A067C844D5E8A22372CE /* RDEPUBChapterOffsetMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E017DF266C5A63D2DD360346FD3790 /* RDEPUBChapterOffsetMap.swift */; }; - 96C694AAE72B5B05542CC44D21F53DDD /* RDEPUBRenderRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08D3259DEB40F1B981CE44EC804D3EAA /* RDEPUBRenderRequest.swift */; }; - 96D5FBBC74098899A127121C91CECDC4 /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 022E4755B34BE3FCD1475BB40C6FD7EB /* Entry.swift */; }; - 9717A7F4BC0C90F04397A1361BB7F71C /* wxread-dark.css in Resources */ = {isa = PBXBuildFile; fileRef = F1162FA50CA992FE5732F460227AB7DF /* wxread-dark.css */; }; - 9845DD8743E768B603FCA5E100022402 /* DTTiledLayerWithoutFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 188A763544B134CC1004ECB7380538D7 /* DTTiledLayerWithoutFade.m */; }; - 9854DC3F1763B6272C2EA3FC6EC40B95 /* NSAttributedStringRunDelegates.h in Headers */ = {isa = PBXBuildFile; fileRef = 60599FA355FBC31A4ED1E2EE5A09A312 /* NSAttributedStringRunDelegates.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 987538B07E11741899878EA8BC947F51 /* NSCoder+DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = B8CC7968142149B581329E3460D35484 /* NSCoder+DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 98EB67ADA2A245446B8A17B09E031AE1 /* UIImage+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BD77848C77F7674193EDA5C1F18DE6A /* UIImage+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9917E9B804CD33AF3BE2A992A3510C97 /* NSNumber+RomanNumerals.m in Sources */ = {isa = PBXBuildFile; fileRef = 175FF6D3C38E463368C8B7AE1AC4E41F /* NSNumber+RomanNumerals.m */; }; - 9928F78ED2A8119FAD85D395D0C14B81 /* RDEPUBCFIMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EE34177DA17E8A2A99610C136D802C2 /* RDEPUBCFIMap.swift */; }; - 992B7C8C824B5EA190EF1DB096064DB7 /* DTDictationPlaceholderTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = D89968532D9F2672C6B6D01C290AE466 /* DTDictationPlaceholderTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 996015E5109268820CBFDBD0374A42FC /* RDPDFReaderContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51CF84AF3FB536008E31CBC800E12B8 /* RDPDFReaderContainerView.swift */; }; - 9AC98ED3942DDCC434580B020478CCC1 /* RDPDFReaderView+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8451167CAD54879A8C6C68669A8CE1B1 /* RDPDFReaderView+CollectionView.swift */; }; - 9B199D71D2F48B2055A7FDF9BD7051CC /* NSString+CSS.m in Sources */ = {isa = PBXBuildFile; fileRef = 4351507ACB1193D9EA3EDD3DFDDA1AD2 /* NSString+CSS.m */; }; - 9BD146F72B29C703798001F138B069C2 /* NSCoder+DTCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DB99CF9B07AE8928ACEE9F5A107809D /* NSCoder+DTCompatibility.m */; }; - 9CB70FA44A722BEC76EDC4CF9726C4C9 /* RDEPUBCFIRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02CD7653F0EA5B7E1FC6930042F2FC7A /* RDEPUBCFIRange.swift */; }; - 9DE04C83A68C7512C0A860FFF5CEC113 /* DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B8CEFAE5E33709E3C9AABF89FFF29BC /* DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9DE4F6F6DA042A04F698FDCB2ED50500 /* RDEPUBTextRendererSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A0605D275609C02D0D78521B2B2F2B8 /* RDEPUBTextRendererSupport.swift */; }; - 9E4AB71DE8B3E7218B53B2C8EF6B843A /* DTAttributedTextContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9213525F01D9956B799C00C0D4A56558 /* DTAttributedTextContentView.m */; }; - 9E4E27D244C44F1DEB2792D62E8F8E46 /* RDEPUBSelectionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 804466C635EB4FEF9D6D616165F8B8DC /* RDEPUBSelectionState.swift */; }; - 9EBDC835399A340B1DE8C9448CCB346F /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7698F9998B2922CC8875BDD7849ED710 /* ConstraintDSL.swift */; }; - 9FAE69F2812510E0491D9BBB90C353D4 /* RDEPUBModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2001D46BD05DD1AA90F95E8DA1446665 /* RDEPUBModels.swift */; }; - 9FB5FDCF5ED0E32A4EF28A956D5C0C93 /* RDEPUBTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11499AD1EDDA56EE2CB5CDE6783F3137 /* RDEPUBTextBookBuilder.swift */; }; - 9FB9830AD67375F837C5CF062E5BFB6D /* epub-fixed-layout.html in Resources */ = {isa = PBXBuildFile; fileRef = CD4C8B83118F25943DE8FBCD85F54B81 /* epub-fixed-layout.html */; }; - 9FF66E7E89669D216788BDA45AF55BD0 /* RDEPUBReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7AE5609FB5D93807FB8ADD05770EBD7 /* RDEPUBReaderTheme.swift */; }; - A075DF2CFDA6B4FC6C13B70594D917EE /* DTTiledLayerWithoutFade.h in Headers */ = {isa = PBXBuildFile; fileRef = F9C223BB14280E813122F7F44DDD64F3 /* DTTiledLayerWithoutFade.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0D6AB59EF663597FBE4549E969593CB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; - A132A0C9EB13B65FB886B11AA2E6304C /* NSDictionary+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F9D3ED5DA816A72982CEF0FD18986D1 /* NSDictionary+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1BC9E0C0B13C8871A63632290E3FF0E /* NSString+DTPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = C862AF3C9768AEC3AF792217547BE47D /* NSString+DTPaths.m */; }; - A213045E1768916C7FFA74CE0B607703 /* RDEPUBCFITextAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674945CC36054ED9B857A60EACE06070 /* RDEPUBCFITextAssertion.swift */; }; - A235834F0BDA4FA924E2AA14523AA54D /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C06D2A51375DCB872C5A41004E287C0D /* SnapKit-dummy.m */; }; - A2CA9C27EB2B77637A12723F8CFE7AAB /* NSString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 84BDFD9872BDDC8D8E292A987C833142 /* NSString+HTML.m */; }; - A30D5C1E413A3D319A83D3410A8A549F /* DTCoreTextParagraphStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 226AE0F5865FC6A88B9D0C73C28A8381 /* DTCoreTextParagraphStyle.m */; }; - A3C9C18C530A61F708AD6860A8CFE46C /* RDEPUBWebViewDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = B90AD4BB9A9DF6CFF6AFAC1BBCB83B53 /* RDEPUBWebViewDebug.swift */; }; - A3CE10E0E0B909782BA6FF7DF4FCF467 /* RDEpubReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 86150AFA30DC7C6F49489D2B96796481 /* RDEpubReaderView-dummy.m */; }; - A3E6088B9121F949F6105C29F2709F5E /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9A09B9A70653ED4FB65C8A3934E3937 /* ConstraintMakerFinalizable.swift */; }; - A40D3941CD41BE5FB53F24DAA5492872 /* RDEPUBImageViewerCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35B1B17E64DD9DBA45117D4952F0F11C /* RDEPUBImageViewerCoordinator.swift */; }; - A45E03A637712DF44230063414AC8AC8 /* RDEPUBRenderDiagnosticsCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 901F68C92C3CA04787387C026ECAD9A2 /* RDEPUBRenderDiagnosticsCollector.swift */; }; - A72E9F983E5BBFA7485EFB482B80E89E /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = F43B7563256C964F3030A6C9BED2EA16 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A7C1F0178293C3939D2B66BDB019F2BE /* RDEPUBReaderToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD38C69E7CB0517D978AF67828A5D3D5 /* RDEPUBReaderToolView.swift */; }; - A7D665BBDADBE3D64023FF52E218FCFA /* DTCoreTextConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = D7D4385F08260E348B370DC79366E6CD /* DTCoreTextConstants.m */; }; - AA3722CC8B4992EDA8A9F5E9116835B7 /* DTCoreText-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 031C87137668EBD722F2FAB7A5826060 /* DTCoreText-dummy.m */; }; - AAA2EC8CD4EDF537B897254CD24A9CC7 /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41C70D721E1873184464B93001110824 /* ConstraintInsets.swift */; }; - AACD6869163962229AE357DA85AD6DD9 /* RDEPUBReaderState.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBFC61F3537CBD438016A097E37ACB6B /* RDEPUBReaderState.swift */; }; - AB985A7411525C66F09A2386B75DA422 /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = 78AA6CC1C34A3A64CED4C314B1FAE2F1 /* default.css */; }; - ABFF2FB0BB8397960B009D0969113CA0 /* RDEPUBSelectionLoupeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEDAA2C5AF091299DF54A6E16A992BC3 /* RDEPUBSelectionLoupeView.swift */; }; - AC3F3D52752D5E8BFDF2C731F4442871 /* RDEPUBImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 605ED3F23EC7AE0091693431E5AD464A /* RDEPUBImageViewController.swift */; }; - AC7000465258822B466855B12F1F97A3 /* DTCoreTextGlyphRun.h in Headers */ = {isa = PBXBuildFile; fileRef = AC925B7832B651D3B1C84393FF2F9573 /* DTCoreTextGlyphRun.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ACF09FE8BA5ACC0BF4140244B6E8F876 /* RDEPUBReaderTableOfContentsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0833E375390AEC8213D4AD7574DAFC6 /* RDEPUBReaderTableOfContentsItem.swift */; }; - AD0EAEA87AF94B2516AF25C962B1AB60 /* NSArray+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 73DCE046F4B55AE88A81C9E68400E93C /* NSArray+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE2B0DBA4EFFB8FC5D49290C93DFCD68 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64ECE2655E3EFB266C23544D1149B39F /* ConstraintMakerExtendable.swift */; }; - AE6162BF52609870B92F520029FF02D3 /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBD26CED79D9BC8B6093FB7163627198 /* ConstraintMakerPrioritizable.swift */; }; - AE7AB67AEC31EEC92E61BAE9BE952389 /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A672DF142E75858C34A342B2BB2AC891 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE9C15A64DC56172E16CAAB607A13E00 /* RDPDFReaderSettingsPanelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1B84BFB1ACB4057989E6AE9A039B3AC /* RDPDFReaderSettingsPanelViewController.swift */; }; - AEBB5E7A98408C8A212C07E64A48CE17 /* RDEPUBReaderChapterListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2C62DAC24CFAC9075940BF8230E8063 /* RDEPUBReaderChapterListController.swift */; }; - AEDF5207E4F50F04EE2175D6491153BB /* NSMutableArray+DTMoving.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A8B32341BD833856874E046C97EE36 /* NSMutableArray+DTMoving.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF7A1DC953992A149CB0815C90769529 /* DTIframeTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = AFFD40FFE61C73861D47FD66561E7E93 /* DTIframeTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF81CC94C3E819ABB2B931577F560036 /* RDEPUBCFI.swift in Sources */ = {isa = PBXBuildFile; fileRef = F00ED19C7AADAD7D6BD1E74A4A3236C3 /* RDEPUBCFI.swift */; }; - B09E9BB87481F36F1F60C8AB14D8BE22 /* String+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB66CFF964A5BAAE8F874E7FD57B193E /* String+RDEPUB.swift */; }; - B0C0CA37B2606633E435DA11DC3788DF /* DTFolderMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A381F075AF6CD9AFBB86130B39E20B4 /* DTFolderMonitor.m */; }; - B1D95DA928A2395DC801F291958ECDBE /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 005A076C910A4DBBE6E72F4D11CB624E /* Data+Compression.swift */; }; - B2041370A0FCF1BF2164DBEE8D28C5A9 /* RDEPUBTextSelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089001022ECC9DB5FD2E0F24D747A427 /* RDEPUBTextSelectionController.swift */; }; - B2166C7F52325B76D2854EBAF3B4A4F9 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D557DED28FA9EA85219AF05C93296C6D /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B24FAD34A7915FC4B90FE9038E814FF2 /* DTLazyImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = E757F9EEC3FE914CD8CFDFF7173A5D6E /* DTLazyImageView.m */; }; - B396528BBA2B2BABAEB8F1D5E2727B32 /* RDPDFReaderView+Paging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B76ED37710AEC809FAF71EC4C1F215 /* RDPDFReaderView+Paging.swift */; }; - B4886245B032CAA636E059E4A829FB6C /* Pods-ReadViewDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA0272559B0F7FAD8AC670AC7431188 /* Pods-ReadViewDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4F51EC45ADF5136DE6EEE4F8A6C1E48 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; - B5925F934F17183F1026FED654CDEA4C /* RDEpubReaderViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5896CC971B79D3B220D73186E99827 /* RDEpubReaderViewProtocols.swift */; }; - B5DF0C6248323B74F6D5896BE99CBC17 /* RDEPUBReaderLoadCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1099B7E3DBAA419B87F8C2B85489A83 /* RDEPUBReaderLoadCoordinator.swift */; }; - B6030124CAFB157D95FF3246A6FEEF3E /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F34DCA2B1BAA4FC1470138FC11B494 /* ConstraintInsetTarget.swift */; }; - B6FA3A9062517BAFEF468F04B78A1F8F /* RDPDFReaderDebugViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16957235ACD001BED6FBC8A1D2CB5BA5 /* RDPDFReaderDebugViewController.swift */; }; - B74A957119D813109A40784D5E991EFE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; - B777B94871B481D05AA3E0AA2CB24294 /* NSString+DTURLEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = C808AC5A8C55E7E56EF916C622B6091A /* NSString+DTURLEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7BDD79FC06A1E4E0E17592860844108 /* NSAttributedString+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = D8D859DA88367D318DA839A12B29A149 /* NSAttributedString+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7BEF6F32A272EE8E59CA3074A96269C /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D53EC1D66653102E077AA44906338EB5 /* ConstraintRelatableTarget.swift */; }; - B8332F36582F7A001FE85A8D54B27C9E /* DTCoreTextParagraphStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 407D64FA06B0D5E2DD9CDBC471AB9195 /* DTCoreTextParagraphStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B86493B996A888D1DA7814ECB6028E22 /* DTHorizontalRuleHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A21D84422DA0E64EA29D0155532671F /* DTHorizontalRuleHTMLElement.m */; }; - B94CD41727DFCA8791EED8FB2CA397DD /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = B44119BC710BFFD4549A1B83FBF80CF8 /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B97F73A0D8F0C6865E315DA91AE5613F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; - BA277E83BAB0D555D789A029D4514966 /* RDEPUBWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBE25EF5F0CDFCDC386BCA80518BBDB4 /* RDEPUBWebView.swift */; }; - BAF2CAF2430C2C71E76D42B72CF59797 /* RDEPUBTypesettingPipeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6E3BE0BCB1910EB53E36DDC696E26A0 /* RDEPUBTypesettingPipeline.swift */; }; - BB67A112E6F1254795D78A3839CE4911 /* RDEPUBTextLayouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B217FB058A1AB50A917831C10DB89F57 /* RDEPUBTextLayouter.swift */; }; - BCE13F950003B44D6DE4B0A3D73D4045 /* rangy-core.js in Resources */ = {isa = PBXBuildFile; fileRef = 105CB7B728D10FAF3A24822B65E01EE2 /* rangy-core.js */; }; - BDC4A815A986D2DA80AFCD9912AFA9F8 /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B1C52776D8E95B99DC3657201FB6FD0 /* ConstraintLayoutGuide+Extensions.swift */; }; - BE12CD112F82AD9050D7FB29395F27F9 /* DTVideoTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 45CF43387529121AEA90666FE86EE96A /* DTVideoTextAttachment.m */; }; - BE766E558428E8784BC6512D77BC4808 /* DTExtendedFileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 7440BEAF1F0CA8CE70C073FFEAF637F5 /* DTExtendedFileAttributes.m */; }; - BEE5024D00596E0DEB17983AFDF66B53 /* RDEPUBReaderController+RenderSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC8E6436E1B26640EF09D4ED2B97A71 /* RDEPUBReaderController+RenderSupport.swift */; }; - BF05C079B67F1BB11EE57FC7B4F9123F /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2B377E1647AD43F8B421E099F4DBA0 /* RDEPUBReaderController+AttachmentTooltip.swift */; }; - BFBE84BD4C66951B7C5744FA0EC7CEFF /* RDEPUBTextSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3869A8C25816E0E807A4B4362E9FD22 /* RDEPUBTextSearchEngine.swift */; }; - C0AA089CF77046447145E3C317D2233B /* UIView+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = A1A3A81081A2422058887BCEEAA78C9D /* UIView+DTFoundation.m */; }; - C19AA78C33972C5897BA47532A0B189A /* RDEPUBCSSCompatibilityLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DACBC0641FFC14D7F0309DD76DA75F3 /* RDEPUBCSSCompatibilityLayer.swift */; }; - C1A7E3DD4E0D633E0AF5432F76DF45E5 /* RDReaderDocumentFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BDBCF238B3B355A20BD8C8FA1F4CE77 /* RDReaderDocumentFormat.swift */; }; - C22BD9712D5C4C3A6606C9954E16EA3C /* DTCustomColoredAccessory.h in Headers */ = {isa = PBXBuildFile; fileRef = 81B4314CBEDA71647A929517B936613F /* DTCustomColoredAccessory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C24EB1777356C7233A5F03765BCBFA4F /* RDEPUBTextPageDecorationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1062E1B1D8A82FD2C1DD0B34E5D20AA /* RDEPUBTextPageDecorationView.swift */; }; - C28B3C4B424604F1AE9AD3A21DD853C4 /* RDEPUBBackgroundCoverageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 907F8DF524B0E15F52BF172C447C26E6 /* RDEPUBBackgroundCoverageStore.swift */; }; - C3722B9CB3A2CBC3C14B6E289B60C71A /* Vision.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC1A75CC4E2F1A706E081BDEDDEECC43 /* Vision.framework */; }; - C3AE32D38A31FDE8F3842C8F37A312E0 /* CryptoKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 638FEA4EDCBFA6A77620B0068D50175C /* CryptoKit.framework */; }; - C41422C964DEAD4BC036630E2CEE8EED /* RDAIAppleFoundationModelsProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27F4AF07E5CBA7B0CC54553D55983D1F /* RDAIAppleFoundationModelsProvider.swift */; }; - C4CB63E8E0A5742BA566A3EED0994390 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F38E01209C5238001BD7CD009ED3E88 /* ConstraintItem.swift */; }; - C5AE45CCE89262860C07A4D819F090B4 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D34826E445B4E08B0CEC27C6EB4DF3 /* Archive.swift */; }; - C5EE8E7373FBD24E66C678356393D871 /* DTCoreTextFontCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B53424287733C45D387175CE9132AFBD /* DTCoreTextFontCollection.m */; }; - C6089F43887B33500393FA1B1A90467D /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 443E44FE90506BEC3DFBB838EA344E2B /* CoreImage.framework */; }; - C6B65C0EA759DF426FBBBB113BA3C3E8 /* DTBreakHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF0985CE02F3B586A1C5DA6503103C3 /* DTBreakHTMLElement.m */; }; - C72CE4B974DFAE2C3037D425EB559314 /* DTCoreTextLayoutFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = C920C702702D03C98A6A6ADDE53C9E78 /* DTCoreTextLayoutFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C78C182488604E401FCF412ECAA918DA /* RDEPUBReaderContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BB49C3B2BFFFC50DADB4C826E51C20 /* RDEPUBReaderContext.swift */; }; - C85C52B080DCDCE11643373A20F761FC /* Archive+ReadingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8442D87941EF389213FFB9992DEF5D64 /* Archive+ReadingDeprecated.swift */; }; - C8F753B56A6C4D2A938B6EA68CF522F8 /* DTColorFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E247027425CC2ADC73F05F25DC0B857 /* DTColorFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9DD05EF2D27FFEBFA7BF6F437168501 /* DTCoreTextConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A7EDC6B8243A9B7E465C24C3E3032923 /* DTCoreTextConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CB7260801E1C1B7B19EB0F046F36C95B /* RDEPUBResourceDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DE9799AA807EEB5A537EC921B86BE14 /* RDEPUBResourceDataProvider.swift */; }; - CB7E3F2CFFCA14F52C4E3A0483522387 /* RDEPUBReaderBottomToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3DF166B97234809502C34352EE581D1 /* RDEPUBReaderBottomToolView.swift */; }; - CC8B8F3D758E98B51F69EDFAA69663A4 /* NSString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D4600C0ADBC3B1B542099C68D747659 /* NSString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CCFBEDA69BB901001DC03CC8C4981B22 /* RDEPUBWebView+Reflowable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B28F6E48DFAB553BCB9383DC6D19D3 /* RDEPUBWebView+Reflowable.swift */; }; - CF4297F5EFA9541634BEBBA1DF36AECA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 609A5F780ABE1ABCF9F5BB40419E506A /* UIKit.framework */; }; - CFC49467FE75BFABC22A1CE2FFA26570 /* DTImage+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = C171DA66E3550E5F4492D2964AB04FB2 /* DTImage+HTML.m */; }; - D034FB4FFC72E5FCE665A2549F90EFA3 /* RDEpubReaderView+ContentAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24CF6BE3C26245FDDEB7E60B92C35046 /* RDEpubReaderView+ContentAccess.swift */; }; - D0CBF9AF4D0A627745C22DA6500FE369 /* WeReadApi.js in Resources */ = {isa = PBXBuildFile; fileRef = BA9DCAAE8105CEA9A378DC9A7282CCBC /* WeReadApi.js */; }; - D0D635F5FE9B28BDA18350507E363E51 /* RDEPUBTextAnchor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B4C6FF338A6BCF7DF2A6F071DC960F3 /* RDEPUBTextAnchor.swift */; }; - D11141D3FE5BB9F8EDC8C4CB70560EA6 /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7271637D32095C0F526965851E2E06 /* ConstraintLayoutSupportDSL.swift */; }; - D1A93B2D7F1B312755C48790338D7712 /* DTIframeTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 81FB8EF1A1E911A5BA351013BE2BDDA3 /* DTIframeTextAttachment.m */; }; - D448FA68DFA59BB641DC224C5EB8BE22 /* RDEPUBReaderPaginationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B3E432595DAC50388DA01BF5E2C0064 /* RDEPUBReaderPaginationCoordinator.swift */; }; - D526E03C098DA6CF8F01C1BC126C9BBA /* DTCoreText-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4200F053D7EE79B56B3A430E865A9051 /* DTCoreText-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5DD33766EA2B6A0E05D6529E03F0E77 /* RDEPUBTextAnnotationOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62636EDE4CB9821D61448E5C954460F7 /* RDEPUBTextAnnotationOverlay.swift */; }; - D6FAE756D6437B0E2E039471ED84D262 /* UIImage+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7F56675C029BC561A7EFB55EF0041 /* UIImage+DTFoundation.m */; }; - D7021E6EB2D2D58D15CECD47BC9A9819 /* RDEPUBAssetRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF67542CFE745690B8EBE4830234AF3D /* RDEPUBAssetRepository.swift */; }; - D7893683E3175919960EF304323E7FEA /* RDEPUBMemoryProbe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B71F5A8A332E260EE37A50AA41BCF2B /* RDEPUBMemoryProbe.swift */; }; - D80A0D7409D41B929CB5C5ADB2FA123C /* RDPDFReaderNavigationPanelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF159AB510600EA0CD9EAE58F29A6582 /* RDPDFReaderNavigationPanelViewController.swift */; }; - D82DDA4C1E5C4D5378A9E5EA3F8E9DFE /* DTBreakHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1312638E3010913FB511FD8BE3E2DC60 /* DTBreakHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D853D2AF4801CB310D34B54E78C308FD /* RDEPUBWebView+JavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D50E19F80F64C425AF6E80129D14A85E /* RDEPUBWebView+JavaScriptBridge.swift */; }; - D861D571DFD73726E94AED3755335FA5 /* RDEPUBParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6FDDE36D802AB1EA9041B13BC3EA5A1 /* RDEPUBParser.swift */; }; - D8EE68FA80CC14F8DB7B5649BEEEEB6D /* RDPDFReaderImageTextRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A4F73DDFA534B5DDC38C9044FF275E0 /* RDPDFReaderImageTextRecognizer.swift */; }; - D9AE80A302124FDC65DDB8E7589D062C /* NSMutableArray+DTMoving.m in Sources */ = {isa = PBXBuildFile; fileRef = D245D04D70A4D36DC86741D0833AA95A /* NSMutableArray+DTMoving.m */; }; - D9BEF488CA3F83597D75F49FE00A26C5 /* RDEPUBReadingLocationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E239C1BEAAAF0774B63520941873BCE /* RDEPUBReadingLocationModels.swift */; }; - D9D5695FC5B0818E6FF40AD81BBDE87D /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E87093B88AB6F2B6A8E775DB61D7F9B /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA5B51E5D80C161D2902B6FC60DA5EC8 /* DTImageTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FECEDE17B4E87274DD2E9EBFD584ABF /* DTImageTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA7A44DADD3BC84841AE2677DAA3CF22 /* DTCustomColoredAccessory.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A4BA792340D151ECB734018B2FD3EF /* DTCustomColoredAccessory.m */; }; - DAD16D3E6EBB32FF96C63BFE6037065F /* DTLinkButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 007656EA11E3CE9D116BC39614FACB53 /* DTLinkButton.m */; }; - DB2C355032CF8B09E12091E2B4EDFF02 /* RDAISQLiteIndexStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C637C4B48A62EF0502BDEF1DE9D0E15 /* RDAISQLiteIndexStore.swift */; }; - DBCA42F7E1697F4EC82E0E7C9657851D /* DTAttributedTextCell.h in Headers */ = {isa = PBXBuildFile; fileRef = BB2A34C872861E98642DDE455E8E3A72 /* DTAttributedTextCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DC2B47D4298DC02811E3BE2611A252FB /* RDEPUBPageBreakPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0C13E7C0313E7DCCB3664ED29BE4B28 /* RDEPUBPageBreakPolicy.swift */; }; - DC3E2932A82AD5D88D8B1EFBF004BEC8 /* DTCSSListStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = C6303D6C8B50248F87D70D77E2CA66B7 /* DTCSSListStyle.m */; }; - DC58520AD1CA9B74B56B5C181D3B0CA3 /* RDEPUBReaderSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = C240F5A5D602DF39562C908A425EDCF3 /* RDEPUBReaderSettings.swift */; }; - DCB762A2263C1E8FC37B8F949926649E /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A15541928DAA1303B6219C49CCE42C9 /* ConstraintLayoutGuide.swift */; }; - DD73CD0E5148961D1ABD80E050122314 /* DTCoreTextFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D4D2890461C2EF2403D78EBF03B29D /* DTCoreTextFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DDB428542ACD7BB97C3A248B8B6D70C3 /* RDEPUBHTMLNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AE838E20F857F2CC3224F4B11A9399E /* RDEPUBHTMLNormalizer.swift */; }; - DE68AD2F426FD462BC70F968E5AF5553 /* DTTextAttachmentHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = E2993B5AF554E26603DFF0DE92D89C92 /* DTTextAttachmentHTMLElement.m */; }; - DED69A917E4E0176A310481FCF01C009 /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D1532D1876B11C0E08D8B7D4FA131B /* Data+Serialization.swift */; }; - DFB5A1C64C7908FD05BEFF7C7B571353 /* DTAttributedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = F0F90ED4AECC246EA5CD643490677AA9 /* DTAttributedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E08640A58BF20D612FB475697C49BCC4 /* epub-bridge.js in Resources */ = {isa = PBXBuildFile; fileRef = 6047CC6474064B5DBC63961634438A6B /* epub-bridge.js */; }; - E08646A14732B835E43DC18A168EA094 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0BD46122D186FBB226483F8DB80E6CE /* ConstraintDirectionalInsets.swift */; }; - E1BBC792423CF9FFA5FB02C7B70F5ED6 /* Entry+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53C2C2B5D2F9E3E125F8C7B1B2B41CA8 /* Entry+Serialization.swift */; }; - E1DA58105A72D6C0B77A8A9F7822BD68 /* DTCoreTextLayoutFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D4D642664400ACAE92FB5136B8121D0 /* DTCoreTextLayoutFrame.m */; }; - E1F7F3C1DFBC5BE87F455A8B2EF526BC /* RDEPUBMetadataParseCancellationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BAEE2DC5FDA8BB9EF5C4A5F7488DA75 /* RDEPUBMetadataParseCancellationController.swift */; }; - E227AE6681B28162FBF6964FCA235D91 /* NSString+DTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A67FB1DCECBDAA36B9B755606AC42C17 /* NSString+DTUtilities.m */; }; - E22E119D75358EEA1F8898837D400483 /* RDEPUBTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D41D52C7574A8265D75889EDFEA1F938 /* RDEPUBTextRenderer.swift */; }; - E22F7B610DF891EFC7195CC6B7D8FB3B /* RDEPUBNoteModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D13B77878270A7699E1975EB37F0DD4 /* RDEPUBNoteModels.swift */; }; - E29E2E80F0F968293BE3E37CBC6BB0CB /* RDEPUBResourceResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B9EC155E4E50C8B0D7C9E946A6EFD6E /* RDEPUBResourceResolver.swift */; }; - E2E4F9574AE38A6F8234918EDB03624A /* RDEPUBWebContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B18932E1E3BC841E202595971A30339 /* RDEPUBWebContentView.swift */; }; - E318725DBB931BB68BF243EB2300E3FC /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDDC3A2D20818C31909CC4C3F4BB4F96 /* Typealiases.swift */; }; - E38FC7829B5BDD1588FA487E0FBAC208 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; - E3C34ADE9B65154958F50C6D75BA77AC /* DTBase64Coding.m in Sources */ = {isa = PBXBuildFile; fileRef = F3ABB3278539E3E13585120647F01258 /* DTBase64Coding.m */; }; - E57A108FD62AEDC26F82FC5A2B8D0744 /* RDEPUBChapterSummaryDiskCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6982A7E6DC4C5C53D2CC2D5811ABD98 /* RDEPUBChapterSummaryDiskCache.swift */; }; - E647E758B0AB51A6070EC90FA56356D0 /* RDPDFReaderHighlightOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C9532C775F9C0F2DDE745981A3E5BD2 /* RDPDFReaderHighlightOverlayView.swift */; }; - E6F3BD9FCDDF8FBEC32F6BDF22939CC7 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05CA3610F2F3C8021110A179D6943F7A /* ConstraintAttributes.swift */; }; - E749B52B9E166B85AB0671D9FCFF5D2D /* RDEPUBFragmentMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAFD4EAE169F3144D806A519A51A90CA /* RDEPUBFragmentMarkerInjector.swift */; }; - E8AB5CE26A5224EF09E9E363D70C7775 /* DTDictationPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = BFD69C3CC4E96BBD5634E64370DBDA98 /* DTDictationPlaceholderView.m */; }; - E8E71B04D02EB95E1663B6B2BF228DA3 /* RDEPUBSettingsFlipAutomation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F17D89032AF6902002A2040DA395024B /* RDEPUBSettingsFlipAutomation.swift */; }; - E9468DE68A8609EE6DC056687D9E364B /* RDEPUBCoreTextPageFrameFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858667D975465E160120B5EC556529B8 /* RDEPUBCoreTextPageFrameFactory.swift */; }; - EA0040823CCF8E97363DB5891F5DA6D0 /* DTCoreTextFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 02CB03BBF6FEA9FE9E85706A75AB816B /* DTCoreTextFunctions.m */; }; - EB4853E4669079AB1DB69B5D0C282ED9 /* RDEPUBChapterPageCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82B72C555923342A6B29E0B34CD71194 /* RDEPUBChapterPageCounter.swift */; }; - EB98CCC346DE7C922EEC196BF6465F86 /* RDEPUBChapterData.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC17DFE7510F72C1BE80E4FB50182687 /* RDEPUBChapterData.swift */; }; - EBB7E4D4DB253B5F1267CF9B4DDB4E93 /* DTCoreTextFontDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 63DC0159C85524BC0348523335677809 /* DTCoreTextFontDescriptor.m */; }; - ECDEFC0141EF16D989D43B83E54A9BD9 /* UIScreen+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 60052288EBFD0DEA0CD594641192FB5C /* UIScreen+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ED439C8212BEA9A325731D47E029DB12 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 6B839E12858DFC58AF91990D8B6D27A3 /* PrivacyInfo.xcprivacy */; }; - ED9E121663FA208E8DF83A62EF140304 /* NSString+DTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = FC467FD187B387BBBF0D10B192925B53 /* NSString+DTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EDA269B595D70EC2B9D81DC890157D63 /* DTAccessibilityViewProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 06E2D8E1D6BCAF5913A7F3F6B1BF9E0F /* DTAccessibilityViewProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EDAD742333B773CB386BBF10BD61842E /* RDEPUBSemanticMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27A96DA3DBC26B10F7E433D58D93F480 /* RDEPUBSemanticMarkerInjector.swift */; }; - EE4F0992A0F597320FF7BDE4691D0FD4 /* NSString+CSS.h in Headers */ = {isa = PBXBuildFile; fileRef = F5A53C3033C8DE1724D37DA6323CF1D7 /* NSString+CSS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EF12622D7366BDBE4CDC8E1AA79096BD /* NSString+DTURLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = DE5387758E4F1C4128BE4A1E8D68A9BD /* NSString+DTURLEncoding.m */; }; - EF2577E6200E94FE255280886820DF36 /* RDEpubReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B430C8DE5FABD8B5265C378F9D6647CB /* RDEpubReaderContentCell.swift */; }; - F006F73F17F2E3CC0E7852E9357BA946 /* DTAnchorHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 790E97E55D348C4AAE5B90CE6447CD7E /* DTAnchorHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F0BE35A92217789FADC9601DB0AD1448 /* RDEPUBResourceURLSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11CB7096E9E4649F50811459D7FBB65C /* RDEPUBResourceURLSchemeHandler.swift */; }; - F0CEFCC3693FD1B1338B24B4157E0A3C /* Entry+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64ED14B8FB7C0060C3BAA215AC25363 /* Entry+ZIP64.swift */; }; - F0F631056BADA32253528247DF493272 /* DTHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = BD929E02D9C56EC44BBB74C1999F9892 /* DTHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F16A27973954A3E61FAD73EFC6640B68 /* DTBlockFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA0602B933CD0C98C4AEEE449A8D048 /* DTBlockFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F192C5927E7BA97C8B5DB00FAB5DC049 /* RDEPUBReaderLocationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A13E55782C8624DBE40150164B4EE2E /* RDEPUBReaderLocationCoordinator.swift */; }; - F2A5490C1C2E3E48A18A8FDF25B0B431 /* RDEPUBAttachmentTooltipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15C6FA1BB01CE3E3BC3877FE7BBA3F90 /* RDEPUBAttachmentTooltipView.swift */; }; - F2B9F986E77500749E2CEB4DEC344F79 /* RDEPUBReaderServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD75EF904CE8308F5AACF1FF146BF1FA /* RDEPUBReaderServices.swift */; }; - F2C88E61F4802BC84DF54D9DBBB2EDC6 /* NSURL+DTAppLinks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E16B563D3E20D4C0FB3C36350F2A330 /* NSURL+DTAppLinks.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3A71F88272177135CDF5BC18D68134D /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3C67AF64AACAFBCB1D6D909BF030731 /* LayoutConstraintItem.swift */; }; - F3B627391C748B025311A530BEADD8D8 /* NSDictionary+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 14AEB065E4B58020BECD466FA2C3582B /* NSDictionary+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F4A2E3C4237B8931F61B72FF0BDD6D69 /* DTObjectTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = FECD0A9F46F7D0CBF7FE9797EA63845E /* DTObjectTextAttachment.m */; }; - F58ABA106C6200175DF574DF05A75BA8 /* DTAccessibilityElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 02F0F2897650299308CB818238165341 /* DTAccessibilityElement.m */; }; - F58C1C3719931E786A62BA0D9AC90306 /* RDEPUBReaderUIState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825FBD8AD5EC92AAB0ECEE502EC41F8D /* RDEPUBReaderUIState.swift */; }; - F5A424E67F41C4F7B830CE2F7E71570D /* DTCoreText-Resources in Resources */ = {isa = PBXBuildFile; fileRef = F4E2B1AC73977F10254628C0B7EBE38F /* DTCoreText-Resources */; }; - F5BEFA1ECA945559A096787DFC7B5A27 /* RDPDFReaderAnnotationListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91A6DF5577800E7F0CB647061DB03E5 /* RDPDFReaderAnnotationListViewController.swift */; }; - F6036BBDFE7484F5A453F6876C97C098 /* NSAttributedString+SmallCaps.m in Sources */ = {isa = PBXBuildFile; fileRef = 958D7F12C237A34C059F4E43474BDFAF /* NSAttributedString+SmallCaps.m */; }; - F61102C9BF3D6296CB6C6B754ABF98C5 /* DTTextHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = C3096FD2B7053B4AF08D2B6156C7CA1A /* DTTextHTMLElement.m */; }; - F6E3A67CA745A6087FFCDBA16B856134 /* NSFileWrapper+DTCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 9719394B24A0CB3CCE6CCA87A0A70D08 /* NSFileWrapper+DTCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F74BE2C0D8345DF5EDE41CF6141A44BF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; - F94593217EBED39BF620C92D5CFD7942 /* RDEPUBReaderPersistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF5C216FDF2C515A93C0212E138FFCA3 /* RDEPUBReaderPersistence.swift */; }; - F94F155B9E380CCB319468C07B135C97 /* RDPDFReaderDrawingCanvasView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D15E11E01B7F344DD8863CBBC543A77 /* RDPDFReaderDrawingCanvasView.swift */; }; - F98520F7C30A9EC31303D52A6E11F6BF /* RDEPUBReaderViewportMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F29D2A4AA92951611BB88CBCEA7D676 /* RDEPUBReaderViewportMonitor.swift */; }; - F9F5A156E4544E2990D63A3E6D21F815 /* RDEPUBReaderController+PublicAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD7E574ECCBB60402506E409507E684A /* RDEPUBReaderController+PublicAPI.swift */; }; - FA30A0528F3F06269BBAE1DC923C5CED /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D5D2445B4619EC0C62C7560649DD2204 /* ZIPFoundation-dummy.m */; }; - FA45542C5C51CEDA07BBB673701DB1A7 /* DTLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1E29A71B902CC46EBA81C84ADCDA50 /* DTLog.m */; }; - FB9BF2BD5860E0AE6D47C3B3CB22565B /* Archive+Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73FD0605520377843F2F940947AFE16C /* Archive+Progress.swift */; }; - FBC42097F09EB9AD8717663C7CA9FE41 /* RDPDFReaderSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F939D46D9D49EF5FCAFCB16F1E35E23E /* RDPDFReaderSettingsView.swift */; }; - FBD39920E194F6AEFC3FC3FCE30E6C13 /* RDEPUBReaderController+TableOfContents.swift in Sources */ = {isa = PBXBuildFile; fileRef = F28957D624353D3F5648E30C1747E81A /* RDEPUBReaderController+TableOfContents.swift */; }; - FBE2E40F0FB3043166CC80AE7EE02311 /* RDEPUBParser+Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A5204B6BF43D97B5BF8D5E2750C169 /* RDEPUBParser+Archive.swift */; }; - FC5F52919451A15639442B46B38E4C67 /* DTCoreTextLayoutFrame+Cursor.m in Sources */ = {isa = PBXBuildFile; fileRef = BADC1A043414D84FBAFBF86CAC8F5399 /* DTCoreTextLayoutFrame+Cursor.m */; }; - FC8D9AC0784A89BBB42E3517337FE184 /* RDMOBIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D874813FB2A01B629B5DD27CDA40D744 /* RDMOBIParser.swift */; }; - FCAF77439153D6230723FCB76523E19F /* RDEPUBTextBookModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71D0768D8887E50A8240A225874288B0 /* RDEPUBTextBookModels.swift */; }; - FD5D68887297CFA94F543C49DC68A156 /* DTHTMLAttributedStringBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 41FD16F0768AA2512812644831FC90CA /* DTHTMLAttributedStringBuilder.m */; }; - FDDA135AA139B6C5E93628504593542F /* RDPDFReaderPanelPresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D87DBCF57F23239B520B73B9C238F64 /* RDPDFReaderPanelPresentation.swift */; }; - FE0AF1F9056F5F4F381792ABA2FCB0F9 /* RDEPUBCFISerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 743D878AA7644CDEA20992BC2F1B2E1A /* RDEPUBCFISerializer.swift */; }; - FEB00C614DCB6A8A7BDF8DEE11260984 /* NSMutableAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = AABB72617A844FF5405C727A0A23D568 /* NSMutableAttributedString+HTML.m */; }; - FEB253C1F43DB49770C020219F0D382C /* DTFoundationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 617D0CB55C260D48CC4ED2FF0A3A1051 /* DTFoundationConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FEF842F1CC8FD4321DA162C51B932256 /* DTFoundationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FE699719E4C619A2AE868EA35DBCE64E /* DTFoundationConstants.m */; }; - FF506E71078A7E78F593EB9F71FE5A0B /* RDEPUBPageResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DB47B6585052E2D965545738AB6126B /* RDEPUBPageResolver.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 0323874C0AE84330B0DFE6FBF0EE5CA7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 352EC96AFAEE0EDF74FD76A958827133; - remoteInfo = RDPDFReaderView; - }; - 04B6B248841C85F781C9DC9FD2C70198 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CC23E8498E4F0DDEB3C1A2AA05B8ACF2; - remoteInfo = RDSpeechReaderView; - }; - 1296438FCFC4BB8B026E5B13346AA007 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; - }; - 15FF4C23FCEC678886F7700DD7174D09 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; - remoteInfo = DTCoreText; - }; - 18FE27B2873AA09802132F3BFAA73B77 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = C7A8D82E407CD3FDC3BA55CEE519B252; - remoteInfo = "ZIPFoundation-ZIPFoundation_Privacy"; - }; - 1F2CB25A693EED699BC4AF34E0A78DCC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; - }; - 3B28F29AD72E32AE04AE655AF32CE9BB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1B6899710AE3E4BD213BE01489E557; - remoteInfo = RDAIReaderView; - }; - 40CA9C1D9FA9CD1BE5571974758DFB60 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1B6899710AE3E4BD213BE01489E557; - remoteInfo = RDAIReaderView; - }; - 566B2018B8125F5F086120A0F04E590A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CC23E8498E4F0DDEB3C1A2AA05B8ACF2; - remoteInfo = RDSpeechReaderView; - }; - 5BDFB48E45664D19196E404974F8F15C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1B6899710AE3E4BD213BE01489E557; - remoteInfo = RDAIReaderView; - }; - 6386FD313A8EFBECF47440ECE9D0E0CB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; - remoteInfo = ZIPFoundation; - }; - 9148121DB7AE39618ECC5EBA0FFCEED3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; - remoteInfo = DTFoundation; - }; - 9CE9E51198F6A77A18CCAB93C5E1773F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E07DDD766DCBF90486BCE6C2EA671E5E; - remoteInfo = "RDEpubReaderView-RDEpubReaderViewAssets"; - }; - 9E4792E9817191C6C8E1B6FDF6AFCB2F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CC23E8498E4F0DDEB3C1A2AA05B8ACF2; - remoteInfo = RDSpeechReaderView; - }; - A7C42C45544A5DA1825833C414C32548 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; - }; - AA6E14EAF872040B200515ED3D10A888 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = FBCB57A3AEAAA3449B3F365930BC0977; - remoteInfo = RDEpubReaderView; - }; - B05ABEA0D1B0F1400A6616382036F3F8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; - remoteInfo = DTFoundation; - }; - B2338A92D4F809073A0B634D8CDFFF11 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0C24CB0E87A728A11AA1124CB360D6A1; - remoteInfo = "DTCoreText-Resources"; - }; - D52C274234D28471F70AC5166584D91F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1B6899710AE3E4BD213BE01489E557; - remoteInfo = RDAIReaderView; - }; - D600C64030F4EC178AD77DDAAF89C5DA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; - remoteInfo = DTCoreText; - }; - E14CE914506E0DDCA9434F4ACB5C7327 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A; - remoteInfo = "SnapKit-SnapKit_Privacy"; - }; - F6B536978A947025AFBAAAF7351DC88E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; - remoteInfo = ZIPFoundation; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 005A076C910A4DBBE6E72F4D11CB624E /* Data+Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Compression.swift"; path = "Sources/ZIPFoundation/Data+Compression.swift"; sourceTree = ""; }; - 007656EA11E3CE9D116BC39614FACB53 /* DTLinkButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLinkButton.m; path = Core/Source/DTLinkButton.m; sourceTree = ""; }; - 01DCD1B42D40839F1C8DBBDB11EF09BA /* RDEpubReaderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RDEpubReaderView; path = RDEpubReaderView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 02108A241C993AAC297AF4F8245FD443 /* RDSpeechReaderContracts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDSpeechReaderContracts.swift; path = Sources/RDSpeechReaderContracts.swift; sourceTree = ""; }; - 022E4755B34BE3FCD1475BB40C6FD7EB /* Entry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Entry.swift; path = Sources/ZIPFoundation/Entry.swift; sourceTree = ""; }; - 02887009BADAD18D4A90F5A114DCE512 /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Sources/ConstraintDirectionalInsetTarget.swift; sourceTree = ""; }; - 02CB03BBF6FEA9FE9E85706A75AB816B /* DTCoreTextFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFunctions.m; path = Core/Source/DTCoreTextFunctions.m; sourceTree = ""; }; - 02CD7653F0EA5B7E1FC6930042F2FC7A /* RDEPUBCFIRange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRange.swift; sourceTree = ""; }; - 02E5A5D3D109FB88E6EA88F1E2253525 /* RDEPUBChapterLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLocation.swift; sourceTree = ""; }; - 02F0F2897650299308CB818238165341 /* DTAccessibilityElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityElement.m; path = Core/Source/DTAccessibilityElement.m; sourceTree = ""; }; - 031C87137668EBD722F2FAB7A5826060 /* DTCoreText-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTCoreText-dummy.m"; sourceTree = ""; }; - 034BC384E1BA330755046E5212201E4D /* DTHTMLParserTextNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserTextNode.h; path = Core/Source/DTHTMLParserTextNode.h; sourceTree = ""; }; - 036FFBB8F2CD53C655683977792C77E1 /* RDEPUBReaderAnnotationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAnnotationCoordinator.swift; sourceTree = ""; }; - 039B47D5CF4FDEA47C608CF07378D3DF /* DTFoundation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.release.xcconfig; sourceTree = ""; }; - 03D925237ACBF4382D1CF970BC943B0D /* RDSpeechReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDSpeechReaderView.release.xcconfig; sourceTree = ""; }; - 04592A413A3E30701E478D8F61806A9C /* RDEPUBSafeArea.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSafeArea.swift; sourceTree = ""; }; - 045ADBF2087ADD914A9CA0B62EBF2A9F /* Pods-ReadViewDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ReadViewDemo.modulemap"; sourceTree = ""; }; - 0486411409B1766377F5F2A6234D8E64 /* FileManager+ZIPDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIPDeprecated.swift"; path = "Sources/ZIPFoundation/FileManager+ZIPDeprecated.swift"; sourceTree = ""; }; - 04D65A018B525BEE5FB0F21896B5A27F /* RDEPUBDTCoreTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDTCoreTextRenderer.swift; sourceTree = ""; }; - 05565CA71DD7DDAA012573A841F7D8DF /* NSURL+DTUnshorten.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTUnshorten.h"; path = "Core/Source/NSURL+DTUnshorten.h"; sourceTree = ""; }; - 05CA3610F2F3C8021110A179D6943F7A /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Sources/ConstraintAttributes.swift; sourceTree = ""; }; - 064F689D0045852491C10A092AF5E30D /* RDPDFSpeechSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDPDFSpeechSession.swift; path = Speech/RDPDFSpeechSession.swift; sourceTree = ""; }; - 06E2D8E1D6BCAF5913A7F3F6B1BF9E0F /* DTAccessibilityViewProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityViewProxy.h; path = Core/Source/DTAccessibilityViewProxy.h; sourceTree = ""; }; - 07147F57468AB345BF82E26A70F60603 /* CTLineUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTLineUtils.m; path = Core/Source/CTLineUtils.m; sourceTree = ""; }; - 0769148555F482C8DF7EA21F6935B7F4 /* NSMutableString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableString+HTML.m"; path = "Core/Source/NSMutableString+HTML.m"; sourceTree = ""; }; - 08203CC2BC14FB8B3BA0CAA3EC92789C /* RDSpeechTextPreprocessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDSpeechTextPreprocessor.swift; path = Sources/RDSpeechTextPreprocessor.swift; sourceTree = ""; }; - 089001022ECC9DB5FD2E0F24D747A427 /* RDEPUBTextSelectionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSelectionController.swift; sourceTree = ""; }; - 08A8B32341BD833856874E046C97EE36 /* NSMutableArray+DTMoving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+DTMoving.h"; path = "Core/Source/NSMutableArray+DTMoving.h"; sourceTree = ""; }; - 08D3259DEB40F1B981CE44EC804D3EAA /* RDEPUBRenderRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderRequest.swift; sourceTree = ""; }; - 08DD1E0E929865962947B62F7DED78F3 /* RDEPUBDarkImageAdjuster.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDarkImageAdjuster.swift; sourceTree = ""; }; - 0AD23766F927150C00F31EF8198B457A /* RDEPUBReaderHighlightsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderHighlightsViewController.swift; sourceTree = ""; }; - 0B3047509587D803762D3B0A21B9F773 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Sources/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; - 0B446AE2E106CECF72AEEA93B85897EC /* DTListItemHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTListItemHTMLElement.m; path = Core/Source/DTListItemHTMLElement.m; sourceTree = ""; }; - 0B846342956B3700F458ACA24E534E17 /* RDEPUBCFIUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIUtilities.swift; sourceTree = ""; }; - 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 0D15E11E01B7F344DD8863CBBC543A77 /* RDPDFReaderDrawingCanvasView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDrawingCanvasView.swift; sourceTree = ""; }; - 0D235D896ED8A7EFDB618AB39D091153 /* ZIPFoundation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZIPFoundation.modulemap; sourceTree = ""; }; - 0D42C4F678DDCCEAE9A66D3D55B30AA8 /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Sources/ConstraintMakerEditable.swift; sourceTree = ""; }; - 0E198715507CC19E698253E47DA96954 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 0E46A6DEEE6CEA27A1FC9024036D8136 /* URL+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+ZIP.swift"; path = "Sources/ZIPFoundation/URL+ZIP.swift"; sourceTree = ""; }; - 0E6203B41468A1B8FBBF9CEC0BF15751 /* DTListItemHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTListItemHTMLElement.h; path = Core/Source/DTListItemHTMLElement.h; sourceTree = ""; }; - 0EA3863B341F56C9B54980AD6A1FD5C0 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 0EF517630D9C1210CC93BA4C5EDFEC72 /* RDEPUBParser+ReadingProfile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+ReadingProfile.swift"; sourceTree = ""; }; - 0F4690DA615CD1FD20F08CD8BB5CD166 /* RDEPUBStyleSheetBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetBuilder.swift; sourceTree = ""; }; - 0FAE8E0BCF1CB66D6936A3CACAE7CF0B /* DTTextBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextBlock.m; path = Core/Source/DTTextBlock.m; sourceTree = ""; }; - 105CB7B728D10FAF3A24822B65E01EE2 /* rangy-core.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-core.js"; path = "EPUBCore/Resources/rangy-core.js"; sourceTree = ""; }; - 10C60005AD8F659D0476A2D8DCDF0AB7 /* RDEPUBSpeechContentProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDEPUBSpeechContentProvider.swift; path = Speech/RDEPUBSpeechContentProvider.swift; sourceTree = ""; }; - 10FAAD53D64E9A7F84D322E4DBCD7F4B /* RDEPUBReaderController+Orientation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+Orientation.swift"; sourceTree = ""; }; - 11499AD1EDDA56EE2CB5CDE6783F3137 /* RDEPUBTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookBuilder.swift; sourceTree = ""; }; - 11CB7096E9E4649F50811459D7FBB65C /* RDEPUBResourceURLSchemeHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceURLSchemeHandler.swift; sourceTree = ""; }; - 1312638E3010913FB511FD8BE3E2DC60 /* DTBreakHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBreakHTMLElement.h; path = Core/Source/DTBreakHTMLElement.h; sourceTree = ""; }; - 134B4A5BAA37EE1E20002904058F91C0 /* RDEPUBMetadataParseWorker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseWorker.swift; sourceTree = ""; }; - 135A0766D1D454304DFB4E2D541E3883 /* RDEPUBCFIError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIError.swift; sourceTree = ""; }; - 13C91A1E88D3B946A1FA082A6EB05C9A /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Sources/Constraint.swift; sourceTree = ""; }; - 14AEB065E4B58020BECD466FA2C3582B /* NSDictionary+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTError.h"; path = "Core/Source/NSDictionary+DTError.h"; sourceTree = ""; }; - 15C6FA1BB01CE3E3BC3877FE7BBA3F90 /* RDEPUBAttachmentTooltipView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipView.swift; sourceTree = ""; }; - 16023686DC389E6755BC79366433C45B /* DTVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVersion.m; path = Core/Source/DTVersion.m; sourceTree = ""; }; - 16957235ACD001BED6FBC8A1D2CB5BA5 /* RDPDFReaderDebugViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDebugViewController.swift; sourceTree = ""; }; - 16EA564A15FAF13156B1B63CA898E824 /* RDEPUBReaderAssemblyCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAssemblyCoordinator.swift; sourceTree = ""; }; - 172C1329A4A6171B18EC5A192815941B /* DTCoreTextLayoutLine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutLine.m; path = Core/Source/DTCoreTextLayoutLine.m; sourceTree = ""; }; - 175FF6D3C38E463368C8B7AE1AC4E41F /* NSNumber+RomanNumerals.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNumber+RomanNumerals.m"; path = "Core/Source/NSNumber+RomanNumerals.m"; sourceTree = ""; }; - 176BA6492702B8C8B44BB4838E9BE22E /* RDEPUBFixedLayoutTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFixedLayoutTemplate.swift; sourceTree = ""; }; - 1865AFCF70C53C253B8F4E01D5F5E61C /* UIColor+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUB.swift"; sourceTree = ""; }; - 1870B77AD9A6F26AB3180BB4CE2A8BCC /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Sources/ConstraintPriority.swift; sourceTree = ""; }; - 188836BC213C48E6459D098231133246 /* DTDictationPlaceholderTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderTextAttachment.m; path = Core/Source/DTDictationPlaceholderTextAttachment.m; sourceTree = ""; }; - 188A763544B134CC1004ECB7380538D7 /* DTTiledLayerWithoutFade.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTiledLayerWithoutFade.m; path = Core/Source/iOS/DTTiledLayerWithoutFade.m; sourceTree = ""; }; - 18AACA176C2E9FDB2B4834B426AC6368 /* UIApplication+DTNetworkActivity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+DTNetworkActivity.h"; path = "Core/Source/iOS/UIApplication+DTNetworkActivity.h"; sourceTree = ""; }; - 18F8C909773BAAEE76086E976B096FDE /* RDEPUBFontFallbackResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontFallbackResolver.swift; sourceTree = ""; }; - 190346203AD581C70492D0745A6E8803 /* RDEPUBChapterDisplayContentCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterDisplayContentCache.swift; sourceTree = ""; }; - 1944985A167896CE8F522E61AFC67021 /* ResourceBundle-Resources-DTCoreText-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Resources-DTCoreText-Info.plist"; sourceTree = ""; }; - 1A0605D275609C02D0D78521B2B2F2B8 /* RDEPUBTextRendererSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRendererSupport.swift; sourceTree = ""; }; - 1A2A7B53BCE33A88EB155ED5C4F5C09D /* DTHTMLParserTextNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserTextNode.m; path = Core/Source/DTHTMLParserTextNode.m; sourceTree = ""; }; - 1A4F73DDFA534B5DDC38C9044FF275E0 /* RDPDFReaderImageTextRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderImageTextRecognizer.swift; sourceTree = ""; }; - 1AD502A1FA6EB1E38200B5283F979504 /* Pods-ReadViewDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReadViewDemo.release.xcconfig"; sourceTree = ""; }; - 1C726091C55C51A29EFD42913073CA5E /* Archive+Reading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Reading.swift"; path = "Sources/ZIPFoundation/Archive+Reading.swift"; sourceTree = ""; }; - 1C822D376841DA0BA4150A8A8E5B911D /* DTTextAttachmentHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextAttachmentHTMLElement.h; path = Core/Source/DTTextAttachmentHTMLElement.h; sourceTree = ""; }; - 1D0CB14225ACB0ECDF2CAD95CDA30DD2 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/MediaPlayer.framework; sourceTree = DEVELOPER_DIR; }; - 1D13B77878270A7699E1975EB37F0DD4 /* RDEPUBNoteModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteModels.swift; sourceTree = ""; }; - 1D70C4504AFE88A621171FBB9368722F /* DTBase64Coding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBase64Coding.h; path = Core/Source/DTBase64Coding.h; sourceTree = ""; }; - 1D945C6720DC6601B9B8FA83EE37E965 /* RDEPUBStyleCompatibilityModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleCompatibilityModels.swift; sourceTree = ""; }; - 1DE9799AA807EEB5A537EC921B86BE14 /* RDEPUBResourceDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceDataProvider.swift; sourceTree = ""; }; - 1E77200B2588979A91C702B9393646FE /* DTCoreText-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DTCoreText-Info.plist"; sourceTree = ""; }; - 1EDC0C56A84DE47A00B353522B7309AE /* RDEPUBTextPaginationSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationSupport.swift; sourceTree = ""; }; - 1F72747C46CC41B906C8A967ED5A47E6 /* DTLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLog.h; path = Core/Source/DTLog.h; sourceTree = ""; }; - 1FDA83DF0F8A6E9142BC2640BC2F9844 /* DTTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachment.m; path = Core/Source/DTTextAttachment.m; sourceTree = ""; }; - 2001D46BD05DD1AA90F95E8DA1446665 /* RDEPUBModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBModels.swift; sourceTree = ""; }; - 2042A956F6ADB5E2CF8DB889FA6F7652 /* RDAIReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDAIReaderView.debug.xcconfig; sourceTree = ""; }; - 2047430DF5C84E0A8FC8874A2B915FC3 /* Pods-ReadViewDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ReadViewDemo-acknowledgements.markdown"; sourceTree = ""; }; - 2060195F94C630A87E7A2F7B08B732D6 /* NaturalLanguage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NaturalLanguage.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/NaturalLanguage.framework; sourceTree = DEVELOPER_DIR; }; - 20A5204B6BF43D97B5BF8D5E2750C169 /* RDEPUBParser+Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Archive.swift"; sourceTree = ""; }; - 20AFDAE6841D0000824C044E2CCEED62 /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Sources/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; - 2129FCC5AA430659582F12DBA1350292 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Sources/ConstraintLayoutSupport.swift; sourceTree = ""; }; - 21A5EB7C80D2F578DE579CA1B20F3CDB /* NSAttributedString+DTDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+DTDebug.h"; path = "Core/Source/NSAttributedString+DTDebug.h"; sourceTree = ""; }; - 21F9B093162E445308F49662C7C35DA6 /* RDSpeechReaderControlView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDSpeechReaderControlView.swift; path = Sources/RDSpeechReaderControlView.swift; sourceTree = ""; }; - 226AE0F5865FC6A88B9D0C73C28A8381 /* DTCoreTextParagraphStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextParagraphStyle.m; path = Core/Source/DTCoreTextParagraphStyle.m; sourceTree = ""; }; - 22EC93BBACD9340338C2EA7F06488FF9 /* RDEPUBPaginationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationModels.swift; sourceTree = ""; }; - 23711E614B27F6F6EE187EDBFEFAAE38 /* wxread-replace.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace.css"; path = "EPUBCore/Resources/wxread-replace.css"; sourceTree = ""; }; - 23E6F02F41FDE074ACD5C78DA921EEED /* DTTextHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextHTMLElement.h; path = Core/Source/DTTextHTMLElement.h; sourceTree = ""; }; - 240F52CEA8D1F72985804D9FF38A9DDD /* RDEPUBWebView+FixedLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+FixedLayout.swift"; sourceTree = ""; }; - 24CF6BE3C26245FDDEB7E60B92C35046 /* RDEpubReaderView+ContentAccess.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+ContentAccess.swift"; sourceTree = ""; }; - 252792DF6A9EBFA863DC153A59A7C003 /* RDEPUBChapterRuntimeStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterRuntimeStore.swift; sourceTree = ""; }; - 2557D3D9913F2F7C7C6AD2C114C2A5C5 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.h; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.h; sourceTree = ""; }; - 255FEB02D707D9C56E1D5BBE89A8488B /* RDEpubReaderGestureController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderGestureController.swift; sourceTree = ""; }; - 2715A17C898A6D776882BEBED0FE9695 /* RDEpubReaderFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderFlowLayout.swift; sourceTree = ""; }; - 278B56CFF632EE38795D20993A889459 /* RDEPUBTextBuildPipelineInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBuildPipelineInterfaces.swift; sourceTree = ""; }; - 27A96DA3DBC26B10F7E433D58D93F480 /* RDEPUBSemanticMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSemanticMarkerInjector.swift; sourceTree = ""; }; - 27F4AF07E5CBA7B0CC54553D55983D1F /* RDAIAppleFoundationModelsProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAIAppleFoundationModelsProvider.swift; path = FoundationModels/RDAIAppleFoundationModelsProvider.swift; sourceTree = ""; }; - 280E073C67E0A1BAF7D84E6DA6FEF2CE /* RDEPUBTextBookCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookCache.swift; sourceTree = ""; }; - 28FF8B4C669DE2384EE37199498D23E9 /* DTCoreTextLayoutLine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutLine.h; path = Core/Source/DTCoreTextLayoutLine.h; sourceTree = ""; }; - 291A21D778336F982A7197655BD501D5 /* RDAIDiagnostics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAIDiagnostics.swift; path = Core/RDAIDiagnostics.swift; sourceTree = ""; }; - 295BCC7FDA963E5D8F53CBF64F08B2B5 /* NSMutableString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableString+HTML.h"; path = "Core/Source/NSMutableString+HTML.h"; sourceTree = ""; }; - 298CF23475A19D50E172630BD6D1D1EA /* NSString+DTFormatNumbers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTFormatNumbers.m"; path = "Core/Source/NSString+DTFormatNumbers.m"; sourceTree = ""; }; - 299AED4539FF5F16ACFC414AF2BDFCF3 /* RDAIReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDAIReaderView-dummy.m"; sourceTree = ""; }; - 29B76ED37710AEC809FAF71EC4C1F215 /* RDPDFReaderView+Paging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDPDFReaderView+Paging.swift"; sourceTree = ""; }; - 2A39B1AC101FC87E52C5110F072FEA07 /* DTFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.debug.xcconfig; sourceTree = ""; }; - 2BD77848C77F7674193EDA5C1F18DE6A /* UIImage+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+DTFoundation.h"; path = "Core/Source/iOS/UIImage+DTFoundation.h"; sourceTree = ""; }; - 2BDBCF238B3B355A20BD8C8FA1F4CE77 /* RDReaderDocumentFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderDocumentFormat.swift; sourceTree = ""; }; - 2C866ED63128D4AB5D968EEDA3CB7516 /* NSAttributedStringRunDelegates.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NSAttributedStringRunDelegates.m; path = Core/Source/NSAttributedStringRunDelegates.m; sourceTree = ""; }; - 2E158150F7B2357D4D54239CBD346CE8 /* RDEpubReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPageChildViewController.swift; sourceTree = ""; }; - 2FBAA88C8DBE0129E51AD73F7D1AB4BD /* RDSpeechReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDSpeechReaderController.swift; path = Sources/RDSpeechReaderController.swift; sourceTree = ""; }; - 304EE7D51CFA84D5F4DBD3F5745F241D /* Archive+Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Helpers.swift"; path = "Sources/ZIPFoundation/Archive+Helpers.swift"; sourceTree = ""; }; - 306477706BBB1E784F55BCF8EB1AD737 /* Pods-ReadViewDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReadViewDemo.debug.xcconfig"; sourceTree = ""; }; - 309D2521D7B9A10F86DA3F6BE7FB37B1 /* UIApplication+DTNetworkActivity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIApplication+DTNetworkActivity.m"; path = "Core/Source/iOS/UIApplication+DTNetworkActivity.m"; sourceTree = ""; }; - 3124E174D81A28717086F17445BED5BB /* UIView+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DTFoundation.h"; path = "Core/Source/iOS/UIView+DTFoundation.h"; sourceTree = ""; }; - 31B00EC977C5120446E63A976AD9DBC3 /* DTCoreTextGlyphRun.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextGlyphRun.m; path = Core/Source/DTCoreTextGlyphRun.m; sourceTree = ""; }; - 32D4D2890461C2EF2403D78EBF03B29D /* DTCoreTextFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFunctions.h; path = Core/Source/DTCoreTextFunctions.h; sourceTree = ""; }; - 340ED4F9AD1A9332EABEC511A49FD18A /* RDEPUBCFIGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIGenerator.swift; sourceTree = ""; }; - 344A53B9D93EDE7EB41DEC7D27C8AAF7 /* RDEPUBTextPerformanceSampler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPerformanceSampler.swift; sourceTree = ""; }; - 34F66F7B56F490F71666C3CC51B50EDB /* DTBlockFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBlockFunctions.m; path = Core/Source/DTBlockFunctions.m; sourceTree = ""; }; - 34FC1DCF56B5AEFDF71CEC0334776D7A /* RDPDFReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPageChildViewController.swift; sourceTree = ""; }; - 35113955C9D390BAC3B55BD96F596650 /* RDEPUBStyleSheetComposer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetComposer.swift; sourceTree = ""; }; - 351FD88DC68196BACB5E8C369837AF17 /* RDEPUBReaderTopToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTopToolView.swift; sourceTree = ""; }; - 352416B880C0869535D5187772C16D21 /* RDPDFReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDPDFReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 35B1B17E64DD9DBA45117D4952F0F11C /* RDEPUBImageViewerCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewerCoordinator.swift; sourceTree = ""; }; - 36209CE685AAEF60A5410D7D5EB08EA9 /* RDEPUBBuildDiagnosticsReporter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBuildDiagnosticsReporter.swift; sourceTree = ""; }; - 36E06DBE2154F8FCE42DD5E8CB02B258 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Sources/ConstraintView.swift; sourceTree = ""; }; - 3784C10C038F42C7074D9B20A81291A4 /* RDEPUBTextPaginationInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationInterfaces.swift; sourceTree = ""; }; - 37A4370530967E365499946ECCA13F13 /* RDEPUBSelectionOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionOverlayView.swift; sourceTree = ""; }; - 380BFE2729ACC77B6F3E846E9C456848 /* DTCoreTextFontCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontCollection.h; path = Core/Source/DTCoreTextFontCollection.h; sourceTree = ""; }; - 39EFEE9E154AB29DC2CC553438E66442 /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Sources/ConstraintDescription.swift; sourceTree = ""; }; - 39F01D07F324B206706E9809D44643C1 /* NSString+Paragraphs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Paragraphs.m"; path = "Core/Source/NSString+Paragraphs.m"; sourceTree = ""; }; - 3B45E8A61AE0DA23D19F4223E56F5D08 /* ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist"; sourceTree = ""; }; - 3BE28706DBAE983FB19FBE122D9F9E68 /* NSArray+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+DTError.m"; path = "Core/Source/NSArray+DTError.m"; sourceTree = ""; }; - 3D1E29A71B902CC46EBA81C84ADCDA50 /* DTLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLog.m; path = Core/Source/DTLog.m; sourceTree = ""; }; - 3D5896CC971B79D3B220D73186E99827 /* RDEpubReaderViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderViewProtocols.swift; sourceTree = ""; }; - 3D86855B4F039593754D5DC832865EA9 /* ZIPFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-umbrella.h"; sourceTree = ""; }; - 3DC986A408054D5C173C9528E22F94B5 /* RDEPUBTextPositionConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPositionConverter.swift; sourceTree = ""; }; - 3DE91417CF554D42F4493D636FF1F69C /* RDEPUBTextContentInteractionCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentInteractionCoordinator.swift; sourceTree = ""; }; - 3EF3AD9CA30968DDCB34B4B8F3477AA8 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; - 3FCDFEE3DE4E8469962B9931E7775E8C /* UIFont+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+DTCoreText.m"; path = "Core/Source/UIFont+DTCoreText.m"; sourceTree = ""; }; - 3FDE76F77A49B86E3A4499727321AC11 /* DTCoreText.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTCoreText.release.xcconfig; sourceTree = ""; }; - 3FFE1E06FDE8D4BA1EE289A4D0E7D127 /* DTCoreText.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTCoreText.debug.xcconfig; sourceTree = ""; }; - 400E1D62DDD3EBA94D28BCBAEEB8278D /* RDEPUBCFIPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIPath.swift; sourceTree = ""; }; - 407D64FA06B0D5E2DD9CDBC471AB9195 /* DTCoreTextParagraphStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextParagraphStyle.h; path = Core/Source/DTCoreTextParagraphStyle.h; sourceTree = ""; }; - 40BCF9C97C17844A974DA454DE537E7D /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; - 4113E34E3BD2181F4202CECBB3A0DDBA /* DTHorizontalRuleHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHorizontalRuleHTMLElement.h; path = Core/Source/DTHorizontalRuleHTMLElement.h; sourceTree = ""; }; - 41842E3F5C4C4B1ACDE3C397F0AE687B /* RDEPUBWebView+Search.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Search.swift"; sourceTree = ""; }; - 41C70D721E1873184464B93001110824 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Sources/ConstraintInsets.swift; sourceTree = ""; }; - 41FD16F0768AA2512812644831FC90CA /* DTHTMLAttributedStringBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLAttributedStringBuilder.m; path = Core/Source/DTHTMLAttributedStringBuilder.m; sourceTree = ""; }; - 4200F053D7EE79B56B3A430E865A9051 /* DTCoreText-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTCoreText-umbrella.h"; sourceTree = ""; }; - 42C2ECC838DE8A6E5DEB264BEA6F59E4 /* NSAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+HTML.h"; path = "Core/Source/NSAttributedString+HTML.h"; sourceTree = ""; }; - 4351507ACB1193D9EA3EDD3DFDDA1AD2 /* NSString+CSS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+CSS.m"; path = "Core/Source/NSString+CSS.m"; sourceTree = ""; }; - 4419BC4EF1BB72BD430008215C2194B1 /* RDPDFKitPageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFKitPageProvider.swift; sourceTree = ""; }; - 443E44FE90506BEC3DFBB838EA344E2B /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreImage.framework; sourceTree = DEVELOPER_DIR; }; - 44894FF917F68A61F0E523342FA5D0A8 /* DTHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLElement.m; path = Core/Source/DTHTMLElement.m; sourceTree = ""; }; - 44BB65037344EA640BD291D831FE5585 /* RDAIReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDAIReaderView.modulemap; sourceTree = ""; }; - 44EB3CBD2C1D167AE3BD1AD5A9FE063D /* RDEPUBAIContentProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDEPUBAIContentProvider.swift; path = AI/RDEPUBAIContentProvider.swift; sourceTree = ""; }; - 45C11AEF7E65FFDA653DFB142C22DEF4 /* DTAttributedTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextView.m; path = Core/Source/DTAttributedTextView.m; sourceTree = ""; }; - 45CF43387529121AEA90666FE86EE96A /* DTVideoTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVideoTextAttachment.m; path = Core/Source/DTVideoTextAttachment.m; sourceTree = ""; }; - 45E017DF266C5A63D2DD360346FD3790 /* RDEPUBChapterOffsetMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterOffsetMap.swift; sourceTree = ""; }; - 45F37BFCD74928584B57F92A89DC4573 /* RDAIIndexService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAIIndexService.swift; path = Core/RDAIIndexService.swift; sourceTree = ""; }; - 4703F3A2832A267D9F6D1EEA83ACB7CC /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; - 47E0F42EC4845B73E0193AA0062A1576 /* DTHTMLParserNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserNode.m; path = Core/Source/DTHTMLParserNode.m; sourceTree = ""; }; - 48146273249EBEC5F8B586E4AD1FBBFE /* RDEpubReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDEpubReaderView.release.xcconfig; sourceTree = ""; }; - 4822B5E091C79BBDF0CEC9C27FAD11ED /* Archive+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ZIP64.swift"; path = "Sources/ZIPFoundation/Archive+ZIP64.swift"; sourceTree = ""; }; - 4851457CCDD4EA7C57B379138A7478E1 /* cssInjector.js */ = {isa = PBXFileReference; includeInIndex = 1; name = cssInjector.js; path = EPUBCore/Resources/cssInjector.js; sourceTree = ""; }; - 48A4A6EDC08C8AC933D0DCD507E9D173 /* ZIPFoundation */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ZIPFoundation; path = ZIPFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 48D4FB95327A55188B4EE105C47E7090 /* RDPDFReaderImageTextLayerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderImageTextLayerView.swift; sourceTree = ""; }; - 498E8B4F4F6A151C181647CACD6F76DA /* RDEPUBCFIMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMarkerInjector.swift; sourceTree = ""; }; - 4A6185F233EFF0ED894B7128B2B09821 /* PDFKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PDFKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/PDFKit.framework; sourceTree = DEVELOPER_DIR; }; - 4AC8E6436E1B26640EF09D4ED2B97A71 /* RDEPUBReaderController+RenderSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RenderSupport.swift"; sourceTree = ""; }; - 4B1C52776D8E95B99DC3657201FB6FD0 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Sources/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; - 4B3397616AD34F6B89948DEBE139C7C5 /* RDPDFReaderNavigationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderNavigationView.swift; sourceTree = ""; }; - 4C90DC3AA09B301621526C8BCC0AD9D9 /* RDAILocatorBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAILocatorBuilder.swift; path = Core/RDAILocatorBuilder.swift; sourceTree = ""; }; - 4D4600C0ADBC3B1B542099C68D747659 /* NSString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+HTML.h"; path = "Core/Source/NSString+HTML.h"; sourceTree = ""; }; - 4D4D642664400ACAE92FB5136B8121D0 /* DTCoreTextLayoutFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrame.m; path = Core/Source/DTCoreTextLayoutFrame.m; sourceTree = ""; }; - 4D908F35D94E51D89507601431AC05B9 /* RDAINaturalLanguageAnalyzer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAINaturalLanguageAnalyzer.swift; path = NaturalLanguage/RDAINaturalLanguageAnalyzer.swift; sourceTree = ""; }; - 4ED5D1D93987D1ECA1C9ACBDDBA99968 /* RDEPUBReadingSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingSession.swift; sourceTree = ""; }; - 4F29D2A4AA92951611BB88CBCEA7D676 /* RDEPUBReaderViewportMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderViewportMonitor.swift; sourceTree = ""; }; - 4F654C6659A3FDE4C3E08BBDD2C01CCF /* RDPDFReaderViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderViewController.swift; sourceTree = ""; }; - 4F9D3ED5DA816A72982CEF0FD18986D1 /* NSDictionary+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTCoreText.h"; path = "Core/Source/NSDictionary+DTCoreText.h"; sourceTree = ""; }; - 503556D1790A886D0E591A982279641B /* NSData+DTCrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+DTCrypto.m"; path = "Core/Source/NSData+DTCrypto.m"; sourceTree = ""; }; - 507D9D8B9C2FF474F3C6BE68C6EF6C50 /* RDPDFReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDPDFReaderView-umbrella.h"; sourceTree = ""; }; - 50E9C6F457FD3662DF4FC74CA5ACB962 /* DTActivityTitleView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTActivityTitleView.h; path = Core/Source/iOS/DTActivityTitleView.h; sourceTree = ""; }; - 517D2A78DA380DB287A13785F250D543 /* RDPDFReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDPDFReaderView.debug.xcconfig; sourceTree = ""; }; - 51CD1050B1BC09EA428919282AA2614D /* DTColor+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTColor+Compatibility.h"; path = "Core/Source/DTColor+Compatibility.h"; sourceTree = ""; }; - 51D9D817F1F806BC50BB65FC80C7D47F /* DTFolderMonitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFolderMonitor.h; path = Core/Source/DTFolderMonitor.h; sourceTree = ""; }; - 52A65E0D6AD4CFB0EECC8AD17A4E8EAC /* DTTextBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextBlock.h; path = Core/Source/DTTextBlock.h; sourceTree = ""; }; - 53C2C2B5D2F9E3E125F8C7B1B2B41CA8 /* Entry+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+Serialization.swift"; path = "Sources/ZIPFoundation/Entry+Serialization.swift"; sourceTree = ""; }; - 54F2C8B38BF0106D946BEE9F7E854D08 /* RDPDFReaderPageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPageView.swift; sourceTree = ""; }; - 551D98EE6C1653939AE1E3BCBC4ACC2E /* DTImage+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTImage+HTML.h"; path = "Core/Source/DTImage+HTML.h"; sourceTree = ""; }; - 55265AB7222E2B20F9B5B320259186BC /* DTCoreTextLayouter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayouter.h; path = Core/Source/DTCoreTextLayouter.h; sourceTree = ""; }; - 5680AB3CE2258BA50F7E7FA84AA71368 /* DTCoreText.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTCoreText.modulemap; sourceTree = ""; }; - 57C055B2516B90417D158D4D31CF4A11 /* RDPDFReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDPDFReaderView-prefix.pch"; sourceTree = ""; }; - 57F27A444B1D85CE9D552F3BE088E5E7 /* RDEPUBAnnotationEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAnnotationEditorViewController.swift; sourceTree = ""; }; - 58557168DB1E78D1B4AF6C29B679CB21 /* rangy-serializer.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-serializer.js"; path = "EPUBCore/Resources/rangy-serializer.js"; sourceTree = ""; }; - 5964D41F9024DDA6DA0E1B06D5A628DE /* wxread-default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-default.css"; path = "EPUBCore/Resources/wxread-default.css"; sourceTree = ""; }; - 5977986EDFE76D5EF96A6D95483B12F7 /* Pods-ReadViewDemo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReadViewDemo-frameworks.sh"; sourceTree = ""; }; - 5AE838E20F857F2CC3224F4B11A9399E /* RDEPUBHTMLNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBHTMLNormalizer.swift; sourceTree = ""; }; - 5BEA1735DC206814580D0CBDDC031E24 /* RDEPUBPaginator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginator.swift; sourceTree = ""; }; - 5CA21017980D553A4F9BDDF4AA5D7C5A /* RDEPUBParser+Package.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Package.swift"; sourceTree = ""; }; - 5DACBC0641FFC14D7F0309DD76DA75F3 /* RDEPUBCSSCompatibilityLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCSSCompatibilityLayer.swift; sourceTree = ""; }; - 5E247027425CC2ADC73F05F25DC0B857 /* DTColorFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTColorFunctions.h; path = Core/Source/DTColorFunctions.h; sourceTree = ""; }; - 5EA0602B933CD0C98C4AEEE449A8D048 /* DTBlockFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBlockFunctions.h; path = Core/Source/DTBlockFunctions.h; sourceTree = ""; }; - 5F04F9EA650B7E82A6BD7560C308C1F9 /* RDEPUBSpeechSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDEPUBSpeechSession.swift; path = Speech/RDEPUBSpeechSession.swift; sourceTree = ""; }; - 5FB8D88DF51900F42796061036A2BC93 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; - 60052288EBFD0DEA0CD594641192FB5C /* UIScreen+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScreen+DTFoundation.h"; path = "Core/Source/iOS/UIScreen+DTFoundation.h"; sourceTree = ""; }; - 6047CC6474064B5DBC63961634438A6B /* epub-bridge.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-bridge.js"; path = "EPUBCore/Resources/epub-bridge.js"; sourceTree = ""; }; - 60599FA355FBC31A4ED1E2EE5A09A312 /* NSAttributedStringRunDelegates.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NSAttributedStringRunDelegates.h; path = Core/Source/NSAttributedStringRunDelegates.h; sourceTree = ""; }; - 605ED3F23EC7AE0091693431E5AD464A /* RDEPUBImageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewController.swift; sourceTree = ""; }; - 609A5F780ABE1ABCF9F5BB40419E506A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 60CEE20803A7C342B83A5972F87CE05F /* RDEpubReaderView+ToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+ToolView.swift"; sourceTree = ""; }; - 617D0CB55C260D48CC4ED2FF0A3A1051 /* DTFoundationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFoundationConstants.h; path = Core/Source/DTFoundationConstants.h; sourceTree = ""; }; - 62636EDE4CB9821D61448E5C954460F7 /* RDEPUBTextAnnotationOverlay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnnotationOverlay.swift; sourceTree = ""; }; - 62F3A858FD7165A3AEBBCA78E105DB73 /* RDAINaturalLanguageSemanticScorer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAINaturalLanguageSemanticScorer.swift; path = NaturalLanguage/RDAINaturalLanguageSemanticScorer.swift; sourceTree = ""; }; - 6314FB72D26D4408191CE8E9D1E318B1 /* RDEPUBPresentationRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPresentationRuntime.swift; sourceTree = ""; }; - 638FEA4EDCBFA6A77620B0068D50175C /* CryptoKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CryptoKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CryptoKit.framework; sourceTree = DEVELOPER_DIR; }; - 63A43AFE4C6D7EBA5A25A5B514F473AF /* DTAttributedTextContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextContentView.h; path = Core/Source/DTAttributedTextContentView.h; sourceTree = ""; }; - 63DC0159C85524BC0348523335677809 /* DTCoreTextFontDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontDescriptor.m; path = Core/Source/DTCoreTextFontDescriptor.m; sourceTree = ""; }; - 64ECE2655E3EFB266C23544D1149B39F /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Sources/ConstraintMakerExtendable.swift; sourceTree = ""; }; - 652FAC593B4120C7C6FB336099192C03 /* RDEPUBPreferences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPreferences.swift; sourceTree = ""; }; - 65806394BC872987207CCB0FB587E3B1 /* DTHTMLParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParser.m; path = Core/Source/DTHTMLParser/DTHTMLParser.m; sourceTree = ""; }; - 66388B03A7B6CCC521677D01D37D85F9 /* RDEPUBChapterLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLoader.swift; sourceTree = ""; }; - 66D4CB745F2AE3B89089A68CF287C279 /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; sourceTree = ""; }; - 674945CC36054ED9B857A60EACE06070 /* RDEPUBCFITextAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFITextAssertion.swift; sourceTree = ""; }; - 67C4B1FD4CAF8FFB009FF39F501B2650 /* Archive+BackingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+BackingConfiguration.swift"; path = "Sources/ZIPFoundation/Archive+BackingConfiguration.swift"; sourceTree = ""; }; - 67CBB4275FFEB0FDD4DB8C4BB881BDBA /* RDSpeechReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDSpeechReaderView-prefix.pch"; sourceTree = ""; }; - 68302D3003412D32673539BAF3A71FFD /* DTCoreGraphicsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreGraphicsUtils.h; path = Core/Source/DTCoreGraphicsUtils.h; sourceTree = ""; }; - 6A21D84422DA0E64EA29D0155532671F /* DTHorizontalRuleHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHorizontalRuleHTMLElement.m; path = Core/Source/DTHorizontalRuleHTMLElement.m; sourceTree = ""; }; - 6B18932E1E3BC841E202595971A30339 /* RDEPUBWebContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebContentView.swift; sourceTree = ""; }; - 6B3E432595DAC50388DA01BF5E2C0064 /* RDEPUBReaderPaginationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPaginationCoordinator.swift; sourceTree = ""; }; - 6B4C6FF338A6BCF7DF2A6F071DC960F3 /* RDEPUBTextAnchor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnchor.swift; sourceTree = ""; }; - 6B839E12858DFC58AF91990D8B6D27A3 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/ZIPFoundation/Resources/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 6B9EC155E4E50C8B0D7C9E946A6EFD6E /* RDEPUBResourceResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceResolver.swift; sourceTree = ""; }; - 6BA1F24F4DFCDDB93645FFE37C0C68A8 /* RDEPUBTextIndexTable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextIndexTable.swift; sourceTree = ""; }; - 6BE6B072BF746163179BDF80F8CDBE1D /* NSScanner+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSScanner+HTML.h"; path = "Core/Source/NSScanner+HTML.h"; sourceTree = ""; }; - 6C9532C775F9C0F2DDE745981A3E5BD2 /* RDPDFReaderHighlightOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderHighlightOverlayView.swift; sourceTree = ""; }; - 6CB45D03588F166B581A0965E7D18D6A /* RDPDFReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDPDFReaderView-Info.plist"; sourceTree = ""; }; - 6D211ACA62A5B241A668A682054310DE /* DTFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTFoundation-dummy.m"; sourceTree = ""; }; - 6DA7955406639DE39E1FD953D882301E /* NSURL+DTAppLinks.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTAppLinks.m"; path = "Core/Source/iOS/NSURL+DTAppLinks.m"; sourceTree = ""; }; - 6DB99CF9B07AE8928ACEE9F5A107809D /* NSCoder+DTCompatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCoder+DTCompatibility.m"; path = "Core/Source/NSCoder+DTCompatibility.m"; sourceTree = ""; }; - 6E56D97F139ADBF3D0E3DD57E5765A5A /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; - 6E87093B88AB6F2B6A8E775DB61D7F9B /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; - 6EDBB29D0A60FEB56FCC489DC10F37BB /* NSDictionary+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTCoreText.m"; path = "Core/Source/NSDictionary+DTCoreText.m"; sourceTree = ""; }; - 6F38E01209C5238001BD7CD009ED3E88 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Sources/ConstraintItem.swift; sourceTree = ""; }; - 6F97367EBFF425820B717CAC4FAF59F2 /* DTImageTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTImageTextAttachment.m; path = Core/Source/DTImageTextAttachment.m; sourceTree = ""; }; - 702AB4F450076D82E264C7AF93A45F14 /* DTActivityTitleView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTActivityTitleView.m; path = Core/Source/iOS/DTActivityTitleView.m; sourceTree = ""; }; - 708CF8B218058AAAA710BB7ADFC504FE /* DTVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVersion.h; path = Core/Source/DTVersion.h; sourceTree = ""; }; - 712CB0166C21E677902495FEC814327A /* RDAIReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDAIReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 719CCC5081F72A4CF289A77C6A10B8D6 /* RDAIReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDAIReaderView-prefix.pch"; sourceTree = ""; }; - 71D0768D8887E50A8240A225874288B0 /* RDEPUBTextBookModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookModels.swift; sourceTree = ""; }; - 73DCE046F4B55AE88A81C9E68400E93C /* NSArray+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+DTError.h"; path = "Core/Source/NSArray+DTError.h"; sourceTree = ""; }; - 73FD0605520377843F2F940947AFE16C /* Archive+Progress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Progress.swift"; path = "Sources/ZIPFoundation/Archive+Progress.swift"; sourceTree = ""; }; - 743D878AA7644CDEA20992BC2F1B2E1A /* RDEPUBCFISerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFISerializer.swift; sourceTree = ""; }; - 7440BEAF1F0CA8CE70C073FFEAF637F5 /* DTExtendedFileAttributes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTExtendedFileAttributes.m; path = Core/Source/DTExtendedFileAttributes.m; sourceTree = ""; }; - 74B2884E9214B5B38193587D773554BA /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.m; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.m; sourceTree = ""; }; - 74ECEF7602380F21B87522961E550A7E /* NSURL+DTComparing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTComparing.h"; path = "Core/Source/NSURL+DTComparing.h"; sourceTree = ""; }; - 74F621BADD77F0A22003EDCA6F92D153 /* NSAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+HTML.m"; path = "Core/Source/NSAttributedString+HTML.m"; sourceTree = ""; }; - 752C7424C07641B28AD2F0C06D1629D5 /* RDEpubReaderTapRegionHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderTapRegionHandler.swift; sourceTree = ""; }; - 75F5A849E82ECED8710DBA54B127186F /* RDAIReaderAssistantViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAIReaderAssistantViewController.swift; path = UI/RDAIReaderAssistantViewController.swift; sourceTree = ""; }; - 75FC55A17D1CCC4C4BEB88B146B790D8 /* RDPDFReaderDrawingToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDrawingToolbar.swift; sourceTree = ""; }; - 7698F9998B2922CC8875BDD7849ED710 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Sources/ConstraintDSL.swift; sourceTree = ""; }; - 773601B72FDE742724A1FE66115AC185 /* DTLazyImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLazyImageView.h; path = Core/Source/DTLazyImageView.h; sourceTree = ""; }; - 78AA6CC1C34A3A64CED4C314B1FAE2F1 /* default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = default.css; path = Core/Source/default.css; sourceTree = ""; }; - 78EA0DF405F8465A86BFD3DDFD2EC295 /* Pods-ReadViewDemo */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-ReadViewDemo"; path = Pods_ReadViewDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 790E97E55D348C4AAE5B90CE6447CD7E /* DTAnchorHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnchorHTMLElement.h; path = Core/Source/DTAnchorHTMLElement.h; sourceTree = ""; }; - 7921A77874E3E2E63E378843085CE55F /* RDEpubReaderSpreadResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderSpreadResolver.swift; sourceTree = ""; }; - 7A13E55782C8624DBE40150164B4EE2E /* RDEPUBReaderLocationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLocationCoordinator.swift; sourceTree = ""; }; - 7AEDBB0324469C4ECD8D10A6355A2A09 /* DTVideoTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVideoTextAttachment.h; path = Core/Source/DTVideoTextAttachment.h; sourceTree = ""; }; - 7B8CEFAE5E33709E3C9AABF89FFF29BC /* DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreText.h; path = Core/Source/DTCoreText.h; sourceTree = ""; }; - 7BB20F608D8D3B80F2688014A5F661FC /* DTHTMLWriter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLWriter.m; path = Core/Source/DTHTMLWriter.m; sourceTree = ""; }; - 7C1C6E107AA4540639C1ED1E7741CF07 /* DTSmartPagingScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSmartPagingScrollView.m; path = Core/Source/iOS/DTSmartPagingScrollView.m; sourceTree = ""; }; - 7C5C85EAAD91F1E22CC5986EF9B5D218 /* DTCSSStylesheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSStylesheet.m; path = Core/Source/DTCSSStylesheet.m; sourceTree = ""; }; - 7D14015E61E39CFCDCA7990AD045B00A /* RDEPUBPublication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPublication.swift; sourceTree = ""; }; - 7DB47B6585052E2D965545738AB6126B /* RDEPUBPageResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageResolver.swift; sourceTree = ""; }; - 7DCFEFDD6D693AD5967568E86920AB08 /* DTColor+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTColor+Compatibility.m"; path = "Core/Source/DTColor+Compatibility.m"; sourceTree = ""; }; - 7DF3043DDE18A19F6421EF2CF64139B1 /* RDEPUBPageInteractionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageInteractionController.swift; sourceTree = ""; }; - 7E9BFD9290BCB2009DB319A63935EF99 /* RDPDFReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderTheme.swift; sourceTree = ""; }; - 7F533E14DBE841E334D44FEDC9132726 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Sources/ConstraintOffsetTarget.swift; sourceTree = ""; }; - 804466C635EB4FEF9D6D616165F8B8DC /* RDEPUBSelectionState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionState.swift; sourceTree = ""; }; - 81313A5C1BC97CDA5BE30763C8F014F9 /* RDPDFAIContentProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDPDFAIContentProvider.swift; path = AI/RDPDFAIContentProvider.swift; sourceTree = ""; }; - 81B4314CBEDA71647A929517B936613F /* DTCustomColoredAccessory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCustomColoredAccessory.h; path = Core/Source/iOS/DTCustomColoredAccessory.h; sourceTree = ""; }; - 81E4757842563D7D3DAB82C8B693B313 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Sources/ConstraintViewDSL.swift; sourceTree = ""; }; - 81FB8EF1A1E911A5BA351013BE2BDDA3 /* DTIframeTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTIframeTextAttachment.m; path = Core/Source/DTIframeTextAttachment.m; sourceTree = ""; }; - 825FBD8AD5EC92AAB0ECEE502EC41F8D /* RDEPUBReaderUIState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderUIState.swift; sourceTree = ""; }; - 8271BF8B7810200FA9F29F48A6560327 /* RDEPUBChapterWarmupOrchestrator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterWarmupOrchestrator.swift; sourceTree = ""; }; - 82B72C555923342A6B29E0B34CD71194 /* RDEPUBChapterPageCounter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterPageCounter.swift; sourceTree = ""; }; - 8442D87941EF389213FFB9992DEF5D64 /* Archive+ReadingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ReadingDeprecated.swift"; path = "Sources/ZIPFoundation/Archive+ReadingDeprecated.swift"; sourceTree = ""; }; - 8451167CAD54879A8C6C68669A8CE1B1 /* RDPDFReaderView+CollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDPDFReaderView+CollectionView.swift"; sourceTree = ""; }; - 84BDFD9872BDDC8D8E292A987C833142 /* NSString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+HTML.m"; path = "Core/Source/NSString+HTML.m"; sourceTree = ""; }; - 84F38B3CAD708AE9333A29A9AB921FA4 /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Sources/LayoutConstraint.swift; sourceTree = ""; }; - 8568D36432A34FEDE5381E99A8C991F8 /* RDEPUBReaderRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderRuntime.swift; sourceTree = ""; }; - 856FED9E82D238C3694CC665594928A4 /* DTFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DTFoundation-Info.plist"; sourceTree = ""; }; - 858667D975465E160120B5EC556529B8 /* RDEPUBCoreTextPageFrameFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCoreTextPageFrameFactory.swift; sourceTree = ""; }; - 86150AFA30DC7C6F49489D2B96796481 /* RDEpubReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDEpubReaderView-dummy.m"; sourceTree = ""; }; - 861BA9ED43C06A4CF6845176A27A14E9 /* RDEPUBCFIParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIParser.swift; sourceTree = ""; }; - 86255994A7212A40F60FBEE69C526FF9 /* DTDictationPlaceholderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderView.h; path = Core/Source/DTDictationPlaceholderView.h; sourceTree = ""; }; - 86EDE1B29348DC15D6122E9FCF98DC42 /* RDEPUBReaderSettingsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettingsViewController.swift; sourceTree = ""; }; - 88A74F7BF47C6E3B2026A80DC4783F1A /* DTCSSStylesheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSStylesheet.h; path = Core/Source/DTCSSStylesheet.h; sourceTree = ""; }; - 88C8DF89086D815C51DE683C61FC05D1 /* RDEPUBReaderController+ExternalLinks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ExternalLinks.swift"; sourceTree = ""; }; - 8961D7BA81FEA0F2525F9E82F156426A /* DTStylesheetHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTStylesheetHTMLElement.h; path = Core/Source/DTStylesheetHTMLElement.h; sourceTree = ""; }; - 89FC4D22055A02594B80AE3D61169CC1 /* RDEpubReaderView+PageCurl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+PageCurl.swift"; sourceTree = ""; }; - 8A15541928DAA1303B6219C49CCE42C9 /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Sources/ConstraintLayoutGuide.swift; sourceTree = ""; }; - 8A3E297145AF1816CA5C623327CC59B8 /* RDEPUBReaderEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderEnvironment.swift; sourceTree = ""; }; - 8A41D37F86EFC816F7478316843069DA /* RDPDFZoomablePageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFZoomablePageView.swift; sourceTree = ""; }; - 8A54C0C47B44A133E0CFF71526B88FAF /* DTAttributedTextCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextCell.m; path = Core/Source/DTAttributedTextCell.m; sourceTree = ""; }; - 8AC4B57FB834CD3FE6380801D726D436 /* RDEPUBReaderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderConfiguration.swift; sourceTree = ""; }; - 8B10FCCF1F8CF05D36F5B65963EB1F41 /* DTHTMLAttributedStringBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLAttributedStringBuilder.h; path = Core/Source/DTHTMLAttributedStringBuilder.h; sourceTree = ""; }; - 8B35D0622F339A5B8A864FAA0C9EAE47 /* Pods-ReadViewDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReadViewDemo-acknowledgements.plist"; sourceTree = ""; }; - 8B666BD6A6C560D47BBC2E29BAF25836 /* ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; sourceTree = ""; }; - 8B71F5A8A332E260EE37A50AA41BCF2B /* RDEPUBMemoryProbe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMemoryProbe.swift; sourceTree = ""; }; - 8B9E332F7EDBC4A91BF0DBB014C44D12 /* RDEPUBNoteDetector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteDetector.swift; sourceTree = ""; }; - 8C637C4B48A62EF0502BDEF1DE9D0E15 /* RDAISQLiteIndexStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAISQLiteIndexStore.swift; path = Core/RDAISQLiteIndexStore.swift; sourceTree = ""; }; - 8D071D3F1AC2022BBB40C82D2DC2DFE3 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Sources/ConstraintMakerRelatable.swift; sourceTree = ""; }; - 8E16B563D3E20D4C0FB3C36350F2A330 /* NSURL+DTAppLinks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTAppLinks.h"; path = "Core/Source/iOS/NSURL+DTAppLinks.h"; sourceTree = ""; }; - 8E2E349ABD550C367772430F49937F3B /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; }; - 8EE34177DA17E8A2A99610C136D802C2 /* RDEPUBCFIMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMap.swift; sourceTree = ""; }; - 8F91B0C7F09F04D73718237F3B40697E /* RDEPUBFontNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontNormalizer.swift; sourceTree = ""; }; - 901F68C92C3CA04787387C026ECAD9A2 /* RDEPUBRenderDiagnosticsCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderDiagnosticsCollector.swift; sourceTree = ""; }; - 907F8DF524B0E15F52BF172C447C26E6 /* RDEPUBBackgroundCoverageStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundCoverageStore.swift; sourceTree = ""; }; - 9213525F01D9956B799C00C0D4A56558 /* DTAttributedTextContentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextContentView.m; path = Core/Source/DTAttributedTextContentView.m; sourceTree = ""; }; - 9245153495464B8CBAFED3ED68018040 /* RDEPUBTextContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentView.swift; sourceTree = ""; }; - 92F0F3ABA13CE7A54A4E4E349805063E /* RDEPUBBackgroundTrace.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundTrace.swift; sourceTree = ""; }; - 93D34826E445B4E08B0CEC27C6EB4DF3 /* Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Archive.swift; path = Sources/ZIPFoundation/Archive.swift; sourceTree = ""; }; - 943A86A9A49BFCE017A6E927A5227BF2 /* RDPDFReaderPagingController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPagingController.swift; sourceTree = ""; }; - 9462F129CC1EF33AAEDFC0F3CD09BD9A /* RDEPUBTextLayoutFrame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayoutFrame.swift; sourceTree = ""; }; - 953E3DE740417FEABC50197EA84D3869 /* RDEPUBAnnotationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAnnotationModels.swift; sourceTree = ""; }; - 958D7F12C237A34C059F4E43474BDFAF /* NSAttributedString+SmallCaps.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+SmallCaps.m"; path = "Core/Source/NSAttributedString+SmallCaps.m"; sourceTree = ""; }; - 95B28F6E48DFAB553BCB9383DC6D19D3 /* RDEPUBWebView+Reflowable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Reflowable.swift"; sourceTree = ""; }; - 9678265F1949A0F038F13D422F2B55FD /* DTPieProgressIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTPieProgressIndicator.h; path = Core/Source/iOS/DTPieProgressIndicator.h; sourceTree = ""; }; - 971623801171F2368ECD657BD0C2937F /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Sources/ConstraintMultiplierTarget.swift; sourceTree = ""; }; - 9719394B24A0CB3CCE6CCA87A0A70D08 /* NSFileWrapper+DTCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileWrapper+DTCopying.h"; path = "Core/Source/NSFileWrapper+DTCopying.h"; sourceTree = ""; }; - 973C2C363B09BC1E49983C6826A623E2 /* DTPieProgressIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTPieProgressIndicator.m; path = Core/Source/iOS/DTPieProgressIndicator.m; sourceTree = ""; }; - 9761870FC405B984D09A304261C3CB25 /* DTCoreGraphicsUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreGraphicsUtils.m; path = Core/Source/DTCoreGraphicsUtils.m; sourceTree = ""; }; - 979486118B3E90C08386079D57962701 /* SnapKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 984D5B14277EA4CB70D58019DC0D2E7A /* RDEPUBChapterCacheKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterCacheKey.swift; sourceTree = ""; }; - 988C218F8E7B50E498B5A44BFE164678 /* RDEPUBNotePopupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupViewController.swift; sourceTree = ""; }; - 999BDDCF67865CDD1D8FDFDCF47B3BA6 /* RDEPUBBookPageMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBookPageMap.swift; sourceTree = ""; }; - 9A2D50243BC80E38A54308D1350127D1 /* RDAIReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDAIReaderView-Info.plist"; sourceTree = ""; }; - 9A3467BB5CFDBA4B48A9830D47CED454 /* RDSpeechReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDSpeechReaderView.modulemap; sourceTree = ""; }; - 9A381F075AF6CD9AFBB86130B39E20B4 /* DTFolderMonitor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFolderMonitor.m; path = Core/Source/DTFolderMonitor.m; sourceTree = ""; }; - 9BAEE2DC5FDA8BB9EF5C4A5F7488DA75 /* RDEPUBMetadataParseCancellationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseCancellationController.swift; sourceTree = ""; }; - 9BB109BD1A878FD38390731ED383EBB8 /* RDEPUBRuntimePageCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimePageCount.swift; sourceTree = ""; }; - 9C66F715840302F2CF4DA6C8558A09BD /* DTAnimatedGIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnimatedGIF.m; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.m; sourceTree = ""; }; - 9D87DBCF57F23239B520B73B9C238F64 /* RDPDFReaderPanelPresentation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPanelPresentation.swift; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9E239C1BEAAAF0774B63520941873BCE /* RDEPUBReadingLocationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingLocationModels.swift; sourceTree = ""; }; - 9E4731BA187C02CDA816054F1F2BE70D /* UIScreen+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScreen+DTFoundation.m"; path = "Core/Source/iOS/UIScreen+DTFoundation.m"; sourceTree = ""; }; - 9F02C3AC85C88DDA0DB8A9EECF07DC35 /* DTFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-prefix.pch"; sourceTree = ""; }; - 9F873050819BDCAA6F32B3166C4ED9C5 /* RDEPUBCFICompatibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFICompatibility.swift; sourceTree = ""; }; - 9FD1F6CDF944640D5F1E2A81A5494657 /* DTObjectTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTObjectTextAttachment.h; path = Core/Source/DTObjectTextAttachment.h; sourceTree = ""; }; - 9FE24D923BB63C2BD4397C37352A6204 /* NSString+Paragraphs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Paragraphs.h"; path = "Core/Source/NSString+Paragraphs.h"; sourceTree = ""; }; - 9FECEDE17B4E87274DD2E9EBFD584ABF /* DTImageTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTImageTextAttachment.h; path = Core/Source/DTImageTextAttachment.h; sourceTree = ""; }; - A04214421115EF7A542C3F3216A318B0 /* RDEPUBReaderController+RuntimeBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RuntimeBridge.swift"; sourceTree = ""; }; - A0BD46122D186FBB226483F8DB80E6CE /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Sources/ConstraintDirectionalInsets.swift; sourceTree = ""; }; - A141D6AF0DC4700DEB1835448CD930EE /* RDEPUBCFIDOMPathBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIDOMPathBuilder.swift; sourceTree = ""; }; - A1A3A81081A2422058887BCEEAA78C9D /* UIView+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DTFoundation.m"; path = "Core/Source/iOS/UIView+DTFoundation.m"; sourceTree = ""; }; - A319B0AD0B5F014BB090153D3020DBA5 /* DTAnimatedGIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnimatedGIF.h; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.h; sourceTree = ""; }; - A367786E9C55FFE1AA25D87507414354 /* RDEpubReaderPreloadController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPreloadController.swift; sourceTree = ""; }; - A3942F6A75FD45095352344EAEA29F8B /* RDPDFReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDPDFReaderView.release.xcconfig; sourceTree = ""; }; - A39FFDCEA5A80B1D0BDDCA93EB781EF4 /* RDEPUBReaderChromeCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChromeCoordinator.swift; sourceTree = ""; }; - A4D5A0A05487585451479D692E07399B /* RDEPUBViewportTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBViewportTypes.swift; sourceTree = ""; }; - A51CF84AF3FB536008E31CBC800E12B8 /* RDPDFReaderContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderContainerView.swift; sourceTree = ""; }; - A533699DEE4985154543EA9F53620DB8 /* RDEPUBReaderDependencies.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDependencies.swift; sourceTree = ""; }; - A672DF142E75858C34A342B2BB2AC891 /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; sourceTree = ""; }; - A67FB1DCECBDAA36B9B755606AC42C17 /* NSString+DTUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTUtilities.m"; path = "Core/Source/NSString+DTUtilities.m"; sourceTree = ""; }; - A6C3FFDC5714D18BE0534AF20F6C07CA /* RDSpeechReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDSpeechReaderView-dummy.m"; sourceTree = ""; }; - A6FDDE36D802AB1EA9041B13BC3EA5A1 /* RDEPUBParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBParser.swift; sourceTree = ""; }; - A746B9DD2EDF2950A3F314EA3D5B2EF5 /* RDPDFReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderContentCell.swift; sourceTree = ""; }; - A7AE5609FB5D93807FB8ADD05770EBD7 /* RDEPUBReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTheme.swift; sourceTree = ""; }; - A7EDC6B8243A9B7E465C24C3E3032923 /* DTCoreTextConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextConstants.h; path = Core/Source/DTCoreTextConstants.h; sourceTree = ""; }; - A7FD67CE75631597FF6EE0F345C77B9D /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Sources/ConstraintPriorityTarget.swift; sourceTree = ""; }; - A8C14962F04ECA1A8B77093B8EF5E23B /* RDPDFReaderView+ToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDPDFReaderView+ToolView.swift"; sourceTree = ""; }; - A9A49256901179CB08DE0A320BF1D7BE /* RDCBZReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDCBZReaderController.swift; sourceTree = ""; }; - AA0811310099A4BCB3D52683B70DB3D1 /* Pods-ReadViewDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ReadViewDemo-dummy.m"; sourceTree = ""; }; - AA5EA82ABC61B0B974592D4CA89ACF8C /* ZIPFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-prefix.pch"; sourceTree = ""; }; - AABB72617A844FF5405C727A0A23D568 /* NSMutableAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableAttributedString+HTML.m"; path = "Core/Source/NSMutableAttributedString+HTML.m"; sourceTree = ""; }; - AAD65472015B1666F31D1B7722813104 /* RDEPUBReaderController+LocationResolution.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+LocationResolution.swift"; sourceTree = ""; }; - AAFD4EAE169F3144D806A519A51A90CA /* RDEPUBFragmentMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFragmentMarkerInjector.swift; sourceTree = ""; }; - AC22C3CB82EEE746663403422F344116 /* DTAccessibilityViewProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityViewProxy.m; path = Core/Source/DTAccessibilityViewProxy.m; sourceTree = ""; }; - AC925B7832B651D3B1C84393FF2F9573 /* DTCoreTextGlyphRun.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextGlyphRun.h; path = Core/Source/DTCoreTextGlyphRun.h; sourceTree = ""; }; - AC98EFE638423C12303C34B7A44385E2 /* RDEPUBParser+TOC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+TOC.swift"; sourceTree = ""; }; - ACD3CB33E5A4E915E5F4C09F4684FFF2 /* NSAttributedString+SmallCaps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+SmallCaps.h"; path = "Core/Source/NSAttributedString+SmallCaps.h"; sourceTree = ""; }; - AE51B89744E67BA9CF7E4E2C6DB4DA05 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Sources/ConstraintRelation.swift; sourceTree = ""; }; - AEDAA2C5AF091299DF54A6E16A992BC3 /* RDEPUBSelectionLoupeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionLoupeView.swift; sourceTree = ""; }; - AF41F6780E56AB0F76C46A75363DA697 /* NSDictionary+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTError.m"; path = "Core/Source/NSDictionary+DTError.m"; sourceTree = ""; }; - AF5A643FD1163E493C913723C79E6B44 /* RDEPUBWebView+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Configuration.swift"; sourceTree = ""; }; - AF76DD862995E6DCA4C9DD1EAD23C6F6 /* RDEPUBAttachmentTooltipOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipOverlayView.swift; sourceTree = ""; }; - AFBB8005939E9A85DD9BDAEAA3002E57 /* DTHTMLWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLWriter.h; path = Core/Source/DTHTMLWriter.h; sourceTree = ""; }; - AFD7E6FDEB959ED4BCBF686887E2BCE4 /* AVFAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFAudio.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/AVFAudio.framework; sourceTree = DEVELOPER_DIR; }; - AFFD40FFE61C73861D47FD66561E7E93 /* DTIframeTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTIframeTextAttachment.h; path = Core/Source/DTIframeTextAttachment.h; sourceTree = ""; }; - B03E48EA4685C3F0EC2C0C5A2714C60F /* RDSpeechReaderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RDSpeechReaderView; path = RDSpeechReaderView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B0833E375390AEC8213D4AD7574DAFC6 /* RDEPUBReaderTableOfContentsItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTableOfContentsItem.swift; sourceTree = ""; }; - B1D682E70FAFEEF08569FCA32E219FD1 /* ZIPFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZIPFoundation.debug.xcconfig; sourceTree = ""; }; - B217FB058A1AB50A917831C10DB89F57 /* RDEPUBTextLayouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayouter.swift; sourceTree = ""; }; - B2542127DF3D3CEF3D1EB999F8576341 /* NSFileWrapper+DTCopying.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileWrapper+DTCopying.m"; path = "Core/Source/NSFileWrapper+DTCopying.m"; sourceTree = ""; }; - B3C67AF64AACAFBCB1D6D909BF030731 /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Sources/LayoutConstraintItem.swift; sourceTree = ""; }; - B3DF166B97234809502C34352EE581D1 /* RDEPUBReaderBottomToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderBottomToolView.swift; sourceTree = ""; }; - B430C8DE5FABD8B5265C378F9D6647CB /* RDEpubReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderContentCell.swift; sourceTree = ""; }; - B44119BC710BFFD4549A1B83FBF80CF8 /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; - B466C1278D8245B512592A07C1965D32 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = ""; }; - B48683C68BD7645B716F54066EFA211F /* RDEPUBCFIRecoveryEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRecoveryEngine.swift; sourceTree = ""; }; - B519C702035AA132CC8AFFCF4399C678 /* RDEPUBRuntimeChapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimeChapter.swift; sourceTree = ""; }; - B53424287733C45D387175CE9132AFBD /* DTCoreTextFontCollection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontCollection.m; path = Core/Source/DTCoreTextFontCollection.m; sourceTree = ""; }; - B5E7F56675C029BC561A7EFB55EF0041 /* UIImage+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+DTFoundation.m"; path = "Core/Source/iOS/UIImage+DTFoundation.m"; sourceTree = ""; }; - B616B1E339BA326837E6325F3F291E51 /* NSAttributedString+DTDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTDebug.m"; path = "Core/Source/NSAttributedString+DTDebug.m"; sourceTree = ""; }; - B646DEE91A4E62F132C54E702B8BDF18 /* DTAttributedTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextView.h; path = Core/Source/DTAttributedTextView.h; sourceTree = ""; }; - B6E3BE0BCB1910EB53E36DDC696E26A0 /* RDEPUBTypesettingPipeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTypesettingPipeline.swift; sourceTree = ""; }; - B71BC62246AFEBD517D3175813789310 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Sources/Debugging.swift; sourceTree = ""; }; - B72E60DFC15F208F1BA00518E64F79B5 /* CTLineUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTLineUtils.h; path = Core/Source/CTLineUtils.h; sourceTree = ""; }; - B73DC0FE59A501CF1EBF64C6ABA20417 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - B75141FED04E4EEC380F0173E5DEBCA7 /* RDAIReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDAIReaderView.release.xcconfig; sourceTree = ""; }; - B7A9D2873B8F3EC6F43F7F65854A0341 /* RDEPUBSearchModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchModels.swift; sourceTree = ""; }; - B85CCDCC8D0342F8925CA9263B57A3AE /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; - B8CC7968142149B581329E3460D35484 /* NSCoder+DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCoder+DTCompatibility.h"; path = "Core/Source/NSCoder+DTCompatibility.h"; sourceTree = ""; }; - B90AD4BB9A9DF6CFF6AFAC1BBCB83B53 /* RDEPUBWebViewDebug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebViewDebug.swift; sourceTree = ""; }; - B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "SnapKit-SnapKit_Privacy"; path = SnapKit_Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - BA83941397AFE127903C2DA0EE626295 /* NSScanner+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSScanner+HTML.m"; path = "Core/Source/NSScanner+HTML.m"; sourceTree = ""; }; - BA8EF373BBB5C4CCBC5508A277C66DA2 /* RDEPUBParser+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Resources.swift"; sourceTree = ""; }; - BA9DCAAE8105CEA9A378DC9A7282CCBC /* WeReadApi.js */ = {isa = PBXFileReference; includeInIndex = 1; name = WeReadApi.js; path = EPUBCore/Resources/WeReadApi.js; sourceTree = ""; }; - BAC3BCDBDD88D30A3F51094944FB70FC /* DTSmartPagingScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSmartPagingScrollView.h; path = Core/Source/iOS/DTSmartPagingScrollView.h; sourceTree = ""; }; - BADC1A043414D84FBAFBF86CAC8F5399 /* DTCoreTextLayoutFrame+Cursor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTCoreTextLayoutFrame+Cursor.m"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.m"; sourceTree = ""; }; - BAE4A81DD559C8DAA24A7E45914AB294 /* RDEpubPlainTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubPlainTextBookBuilder.swift; sourceTree = ""; }; - BB2A34C872861E98642DDE455E8E3A72 /* DTAttributedTextCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextCell.h; path = Core/Source/DTAttributedTextCell.h; sourceTree = ""; }; - BB2B377E1647AD43F8B421E099F4DBA0 /* RDEPUBReaderController+AttachmentTooltip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+AttachmentTooltip.swift"; sourceTree = ""; }; - BB7271637D32095C0F526965851E2E06 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; - BB7C3A637594FCD8D6F09237F5103A39 /* RDPDFReaderChromeViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderChromeViews.swift; sourceTree = ""; }; - BB7C568B890F636C0EFDCC12139EEC9A /* RDEPUBCFIResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIResolver.swift; sourceTree = ""; }; - BBED33030719998F00A5173D3C466BD8 /* RDPDFReaderKitView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderKitView.swift; sourceTree = ""; }; - BC0B0BF8324AE3EE918E0885D68E209D /* RDPDFReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDPDFReaderView.modulemap; sourceTree = ""; }; - BCBD48F4256CF6916C32ACC00CA15E31 /* RDAIReaderContracts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAIReaderContracts.swift; path = Core/RDAIReaderContracts.swift; sourceTree = ""; }; - BCF9B3BF987216CF1766D80FED04CF72 /* FileManager+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIP.swift"; path = "Sources/ZIPFoundation/FileManager+ZIP.swift"; sourceTree = ""; }; - BD727D8D750906C2FCA03FA988C99329 /* RDAIReaderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RDAIReaderView; path = RDAIReaderView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BD929E02D9C56EC44BBB74C1999F9892 /* DTHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLElement.h; path = Core/Source/DTHTMLElement.h; sourceTree = ""; }; - BDDC3A2D20818C31909CC4C3F4BB4F96 /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Sources/Typealiases.swift; sourceTree = ""; }; - BDFD7D9A4BFFBB2603B10E3A432551B6 /* NSString+DTPaths.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTPaths.h"; path = "Core/Source/NSString+DTPaths.h"; sourceTree = ""; }; - BF67AACE84A77AEC6F9CED48AA5BAFDC /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - BFBB650C069928DBF6A9F7BA0E89A4BA /* RDEpubReaderView+CollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+CollectionView.swift"; sourceTree = ""; }; - BFD69C3CC4E96BBD5634E64370DBDA98 /* DTDictationPlaceholderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderView.m; path = Core/Source/DTDictationPlaceholderView.m; sourceTree = ""; }; - C02B75657834185F5471197156446395 /* RDEPUBChapterDataCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterDataCache.swift; sourceTree = ""; }; - C06D2A51375DCB872C5A41004E287C0D /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; - C0C13E7C0313E7DCCB3664ED29BE4B28 /* RDEPUBPageBreakPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageBreakPolicy.swift; sourceTree = ""; }; - C1099B7E3DBAA419B87F8C2B85489A83 /* RDEPUBReaderLoadCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLoadCoordinator.swift; sourceTree = ""; }; - C171DA66E3550E5F4492D2964AB04FB2 /* DTImage+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTImage+HTML.m"; path = "Core/Source/DTImage+HTML.m"; sourceTree = ""; }; - C17C5298DC7291DA6730207C4C66F50D /* RDEpubURLReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubURLReaderController.swift; sourceTree = ""; }; - C1B094ABE0685E65E249C93BF2B135A9 /* RDAIReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDAIReaderView-umbrella.h"; sourceTree = ""; }; - C1E22989CFF3153DC1445124C0A538AE /* RDEpubReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDEpubReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - C240F5A5D602DF39562C908A425EDCF3 /* RDEPUBReaderSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettings.swift; sourceTree = ""; }; - C3096FD2B7053B4AF08D2B6156C7CA1A /* DTTextHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextHTMLElement.m; path = Core/Source/DTTextHTMLElement.m; sourceTree = ""; }; - C34C80F5248BF6ED37B94686518B46EB /* RDEPUBDecryptingImageAttachment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDecryptingImageAttachment.swift; sourceTree = ""; }; - C357AC8D7A6E01440AC68979B529B2F7 /* RDSpeechReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDSpeechReaderView.debug.xcconfig; sourceTree = ""; }; - C3EF41BC74CB0A807D226BA1B6AAE225 /* RDEPUBReaderSearchBarView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchBarView.swift; sourceTree = ""; }; - C56EB0E701347B766F12260495801CE1 /* DTCoreTextFontDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontDescriptor.h; path = Core/Source/DTCoreTextFontDescriptor.h; sourceTree = ""; }; - C5A79F4CCFBC9953DB7A8CD52315A738 /* RDEPUBReaderController+DataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+DataSource.swift"; sourceTree = ""; }; - C6303D6C8B50248F87D70D77E2CA66B7 /* DTCSSListStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSListStyle.m; path = Core/Source/DTCSSListStyle.m; sourceTree = ""; }; - C72E137C3DFA668BFDC57A4BEC6AE32C /* RDEPUBReaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDelegate.swift; sourceTree = ""; }; - C7C0AB34CD2CE6BAD791E1F6E3D75649 /* RDEPUBTextPageVerticalJustifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageVerticalJustifier.swift; sourceTree = ""; }; - C7EDB07502C56DF3D4F6E90F93880B28 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Sources/ConstraintConfig.swift; sourceTree = ""; }; - C80235C2E1DB28406F275E23F0ADDE9B /* ConstraintMakerRelatable+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintMakerRelatable+Extensions.swift"; path = "Sources/ConstraintMakerRelatable+Extensions.swift"; sourceTree = ""; }; - C808AC5A8C55E7E56EF916C622B6091A /* NSString+DTURLEncoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTURLEncoding.h"; path = "Core/Source/NSString+DTURLEncoding.h"; sourceTree = ""; }; - C862AF3C9768AEC3AF792217547BE47D /* NSString+DTPaths.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTPaths.m"; path = "Core/Source/NSString+DTPaths.m"; sourceTree = ""; }; - C8A6E90AB5E26049710E2C2404C28B9A /* RDEpubReaderView-RDEpubReaderViewAssets */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "RDEpubReaderView-RDEpubReaderViewAssets"; path = RDEpubReaderViewAssets.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - C911EE625C8CD488E8B66FA8BA2B5C8F /* DTTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextAttachment.h; path = Core/Source/DTTextAttachment.h; sourceTree = ""; }; - C91AB03142606446D515451D75613853 /* RDPDFReaderAnnotationEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderAnnotationEditorViewController.swift; sourceTree = ""; }; - C920C702702D03C98A6A6ADDE53C9E78 /* DTCoreTextLayoutFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrame.h; path = Core/Source/DTCoreTextLayoutFrame.h; sourceTree = ""; }; - C9BB49C3B2BFFFC50DADB4C826E51C20 /* RDEPUBReaderContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderContext.swift; sourceTree = ""; }; - CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "ZIPFoundation-ZIPFoundation_Privacy"; path = ZIPFoundation_Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - CAED9812FF45FFA82A7B68F7B2B656D4 /* DTCSSListStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSListStyle.h; path = Core/Source/DTCSSListStyle.h; sourceTree = ""; }; - CBD58858F74B286AB42B1D9C0E299BC0 /* Archive+MemoryFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+MemoryFile.swift"; path = "Sources/ZIPFoundation/Archive+MemoryFile.swift"; sourceTree = ""; }; - CCAFE75D3171723D3C2F8D6B54F83810 /* RDEpubReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDEpubReaderView-Info.plist"; sourceTree = ""; }; - CD4C8B83118F25943DE8FBCD85F54B81 /* epub-fixed-layout.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-fixed-layout.html"; path = "EPUBCore/Resources/epub-fixed-layout.html"; sourceTree = ""; }; - CD770BD6314F1E02A05DC9744C65B5A4 /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; }; - CD7E574ECCBB60402506E409507E684A /* RDEPUBReaderController+PublicAPI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+PublicAPI.swift"; sourceTree = ""; }; - CDDC623AB1701601A907DA67C2F8F283 /* DTAnchorHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnchorHTMLElement.m; path = Core/Source/DTAnchorHTMLElement.m; sourceTree = ""; }; - CE1FA1663AC56607EB2C5556FB73813E /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; - CE669FB235F0A79C31606AC2D531E6C7 /* DTCoreTextLayoutFrame+Cursor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTCoreTextLayoutFrame+Cursor.h"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.h"; sourceTree = ""; }; - CE673C095E86DC64BE73E53BA8C59702 /* RDPDFSpeechContentProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDPDFSpeechContentProvider.swift; path = Speech/RDPDFSpeechContentProvider.swift; sourceTree = ""; }; - CEFCC148B58604D0C5A3C240C51B45FD /* RDPDFReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDPDFReaderView-dummy.m"; sourceTree = ""; }; - CF159AB510600EA0CD9EAE58F29A6582 /* RDPDFReaderNavigationPanelViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderNavigationPanelViewController.swift; sourceTree = ""; }; - CF5C216FDF2C515A93C0212E138FFCA3 /* RDEPUBReaderPersistence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPersistence.swift; sourceTree = ""; }; - CFC58CF344A0B807CF57D0AF2762B169 /* RDEpubReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDEpubReaderView.modulemap; sourceTree = ""; }; - CFF70C90945A3410647B87CF1F107605 /* NSCharacterSet+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCharacterSet+HTML.h"; path = "Core/Source/NSCharacterSet+HTML.h"; sourceTree = ""; }; - D0EBC152CC752677E2BF9AC52A6BA36E /* RDEPUBBackgroundPriorityPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundPriorityPolicy.swift; sourceTree = ""; }; - D1062E1B1D8A82FD2C1DD0B34E5D20AA /* RDEPUBTextPageDecorationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageDecorationView.swift; sourceTree = ""; }; - D180DE0FA4D342CB14AE055864AD03F0 /* RDEpubReaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderView.swift; sourceTree = ""; }; - D1E89A31867FF1FB44B4B999988F1B82 /* DTFoundation */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DTFoundation; path = DTFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D1F34DCA2B1BAA4FC1470138FC11B494 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Sources/ConstraintInsetTarget.swift; sourceTree = ""; }; - D245D04D70A4D36DC86741D0833AA95A /* NSMutableArray+DTMoving.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+DTMoving.m"; path = "Core/Source/NSMutableArray+DTMoving.m"; sourceTree = ""; }; - D3046302F1405F10DE953D9BB963E1A8 /* RDEPUBReaderController+Trial.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+Trial.swift"; sourceTree = ""; }; - D35E3E5D1F0237B862AF1C496338DA61 /* RDEPUBPageMapReconciliationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageMapReconciliationCoordinator.swift; sourceTree = ""; }; - D362CCA87B017930E7481AFE2E73FB74 /* DTExtendedFileAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTExtendedFileAttributes.h; path = Core/Source/DTExtendedFileAttributes.h; sourceTree = ""; }; - D3869A8C25816E0E807A4B4362E9FD22 /* RDEPUBTextSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSearchEngine.swift; sourceTree = ""; }; - D3A4BA792340D151ECB734018B2FD3EF /* DTCustomColoredAccessory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCustomColoredAccessory.m; path = Core/Source/iOS/DTCustomColoredAccessory.m; sourceTree = ""; }; - D3C2F16A4F9F4BEAA317715C1F17C81F /* DTCoreTextMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextMacros.h; path = Core/Source/DTCoreTextMacros.h; sourceTree = ""; }; - D41D52C7574A8265D75889EDFEA1F938 /* RDEPUBTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRenderer.swift; sourceTree = ""; }; - D4A82B2715640986D3701AF889DBD599 /* UIFont+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+DTCoreText.h"; path = "Core/Source/UIFont+DTCoreText.h"; sourceTree = ""; }; - D50E19F80F64C425AF6E80129D14A85E /* RDEPUBWebView+JavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+JavaScriptBridge.swift"; sourceTree = ""; }; - D53EC1D66653102E077AA44906338EB5 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Sources/ConstraintRelatableTarget.swift; sourceTree = ""; }; - D557DED28FA9EA85219AF05C93296C6D /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; - D5D2445B4619EC0C62C7560649DD2204 /* ZIPFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZIPFoundation-dummy.m"; sourceTree = ""; }; - D6032EC340E3CFAD1A8538662BBFF5BB /* RDEPUBSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchEngine.swift; sourceTree = ""; }; - D7826602DA2629A5A1DD5912ADCAF5B8 /* ZIPFoundation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZIPFoundation.release.xcconfig; sourceTree = ""; }; - D7B730A14FDA23EC9BB3ED876FBD5BA4 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Sources/ConstraintView+Extensions.swift"; sourceTree = ""; }; - D7D4385F08260E348B370DC79366E6CD /* DTCoreTextConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextConstants.m; path = Core/Source/DTCoreTextConstants.m; sourceTree = ""; }; - D816721347D943A1D204E1507FFA5019 /* DTAccessibilityElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityElement.h; path = Core/Source/DTAccessibilityElement.h; sourceTree = ""; }; - D874813FB2A01B629B5DD27CDA40D744 /* RDMOBIParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDMOBIParser.swift; sourceTree = ""; }; - D89968532D9F2672C6B6D01C290AE466 /* DTDictationPlaceholderTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderTextAttachment.h; path = Core/Source/DTDictationPlaceholderTextAttachment.h; sourceTree = ""; }; - D8D859DA88367D318DA839A12B29A149 /* NSAttributedString+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+DTCoreText.h"; path = "Core/Source/NSAttributedString+DTCoreText.h"; sourceTree = ""; }; - D91B95C25EE62BB4B1F381EB057E9857 /* RDEPUBTextPageBoundaryValidator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageBoundaryValidator.swift; sourceTree = ""; }; - D92D7AF796DC45709FBBF4BBCBF47095 /* DTColorFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTColorFunctions.m; path = Core/Source/DTColorFunctions.m; sourceTree = ""; }; - D94A0293C1A11AB0BF793F0804AF01BA /* RDSpeechReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDSpeechReaderView-umbrella.h"; sourceTree = ""; }; - D97A43F1E6018B92E85B58BB6549F7CB /* NSData+DTCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+DTCrypto.h"; path = "Core/Source/NSData+DTCrypto.h"; sourceTree = ""; }; - D9B368C95FB7C2727A7CA452242CB904 /* RDPDFReaderPersistenceStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPersistenceStore.swift; sourceTree = ""; }; - DA1492B4475D97CA7D2A514C6740AC74 /* RDEPUBReaderToolViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolViewProtocols.swift; sourceTree = ""; }; - DA93674B4C34DA54D242189AEEAF99FE /* DTFoundation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTFoundation.modulemap; sourceTree = ""; }; - DAAA91CA607516E42FAA5C2245D6E0C2 /* Data+CompressionDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+CompressionDeprecated.swift"; path = "Sources/ZIPFoundation/Data+CompressionDeprecated.swift"; sourceTree = ""; }; - DB2F54C055F942CA37FE44B4E194467D /* RDEPUBPageCountCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageCountCache.swift; sourceTree = ""; }; - DB469565A1ED216AFEEDC8EAE6EBD11C /* RDEPUBJumpSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJumpSession.swift; sourceTree = ""; }; - DBAEA965F9F262BB8BF17C77B01C0956 /* Archive+Writing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Writing.swift"; path = "Sources/ZIPFoundation/Archive+Writing.swift"; sourceTree = ""; }; - DC17DFE7510F72C1BE80E4FB50182687 /* RDEPUBChapterData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterData.swift; sourceTree = ""; }; - DD2B675FAAF78038DF681753B63E78F6 /* RDEpubReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDEpubReaderView-umbrella.h"; sourceTree = ""; }; - DD38C69E7CB0517D978AF67828A5D3D5 /* RDEPUBReaderToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolView.swift; sourceTree = ""; }; - DD75EF904CE8308F5AACF1FF146BF1FA /* RDEPUBReaderServices.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderServices.swift; sourceTree = ""; }; - DE5387758E4F1C4128BE4A1E8D68A9BD /* NSString+DTURLEncoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTURLEncoding.m"; path = "Core/Source/NSString+DTURLEncoding.m"; sourceTree = ""; }; - DF67542CFE745690B8EBE4830234AF3D /* RDEPUBAssetRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAssetRepository.swift; sourceTree = ""; }; - DFBBED2FC1668912DBF7592720CC14A4 /* RDPDFReaderDrawingLayersView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDrawingLayersView.swift; sourceTree = ""; }; - E1003FAF53E637D0449A9CC1D883E1F1 /* RDEPUBNavigatorLayoutContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNavigatorLayoutContext.swift; sourceTree = ""; }; - E1121A6303533CBF8AF0FC0CE2257AD2 /* RDEpubReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDEpubReaderView.debug.xcconfig; sourceTree = ""; }; - E15930CD8D9ED2F990B87E8F78DD5A32 /* DTStylesheetHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTStylesheetHTMLElement.m; path = Core/Source/DTStylesheetHTMLElement.m; sourceTree = ""; }; - E1D1532D1876B11C0E08D8B7D4FA131B /* Data+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Serialization.swift"; path = "Sources/ZIPFoundation/Data+Serialization.swift"; sourceTree = ""; }; - E209D74CEC1626A09885E55370AEFA53 /* Date+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+ZIP.swift"; path = "Sources/ZIPFoundation/Date+ZIP.swift"; sourceTree = ""; }; - E26546A9CD322544BEF648DFE2B26D7D /* NSCharacterSet+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCharacterSet+HTML.m"; path = "Core/Source/NSCharacterSet+HTML.m"; sourceTree = ""; }; - E28619FF1699FE5E9E9981D4B9C26E55 /* RDEPUBPageLayoutSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageLayoutSnapshot.swift; sourceTree = ""; }; - E2993B5AF554E26603DFF0DE92D89C92 /* DTTextAttachmentHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachmentHTMLElement.m; path = Core/Source/DTTextAttachmentHTMLElement.m; sourceTree = ""; }; - E3295E071BD0E7D326FF78153BA2B547 /* RDEPUBJavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJavaScriptBridge.swift; sourceTree = ""; }; - E3AC0D799821BAB2769DC35260D98143 /* RDAISpeechContentProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAISpeechContentProvider.swift; path = AIBridge/RDAISpeechContentProvider.swift; sourceTree = ""; }; - E64ED14B8FB7C0060C3BAA215AC25363 /* Entry+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+ZIP64.swift"; path = "Sources/ZIPFoundation/Entry+ZIP64.swift"; sourceTree = ""; }; - E6982A7E6DC4C5C53D2CC2D5811ABD98 /* RDEPUBChapterSummaryDiskCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterSummaryDiskCache.swift; sourceTree = ""; }; - E6AD45B90D08BACAF3AF76AE40BBCC10 /* DTFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-umbrella.h"; sourceTree = ""; }; - E7112D0C2BB66532AB032E85DB736D16 /* RDSpeechReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDSpeechReaderView-Info.plist"; sourceTree = ""; }; - E757F9EEC3FE914CD8CFDFF7173A5D6E /* DTLazyImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLazyImageView.m; path = Core/Source/DTLazyImageView.m; sourceTree = ""; }; - E7890CD33BD10753D1D971AD2FE20A74 /* DTLinkButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLinkButton.h; path = Core/Source/DTLinkButton.h; sourceTree = ""; }; - E8DB205FB6149A977447BDB109A35B2E /* RDEPUBReaderSearchCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchCoordinator.swift; sourceTree = ""; }; - E91A6DF5577800E7F0CB647061DB03E5 /* RDPDFReaderAnnotationListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderAnnotationListViewController.swift; sourceTree = ""; }; - E9A09B9A70653ED4FB65C8A3934E3937 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Sources/ConstraintMakerFinalizable.swift; sourceTree = ""; }; - EA0835A36D971DBF49B21DC08AF857E4 /* RDEPUBReaderController+ContentDelegates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ContentDelegates.swift"; sourceTree = ""; }; - EB434D5D2C4FC39DB37D676ABB6B7C68 /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Sources/ConstraintMaker.swift; sourceTree = ""; }; - EB66CFF964A5BAAE8F874E7FD57B193E /* String+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+RDEPUB.swift"; sourceTree = ""; }; - EBA0272559B0F7FAD8AC670AC7431188 /* Pods-ReadViewDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ReadViewDemo-umbrella.h"; sourceTree = ""; }; - EBD26CED79D9BC8B6093FB7163627198 /* ConstraintMakerPrioritizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPrioritizable.swift; path = Sources/ConstraintMakerPrioritizable.swift; sourceTree = ""; }; - EBFC61F3537CBD438016A097E37ACB6B /* RDEPUBReaderState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderState.swift; sourceTree = ""; }; - ED638272054208AFD646AF6EB4B4ACAE /* RDEPUBChapterTailNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterTailNormalizer.swift; sourceTree = ""; }; - EDA6D5D7D0A04878EE78FAAE94F65068 /* DTCoreText */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DTCoreText; path = DTCoreText.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EDD3DE7C60EC3C4BE3D7A2DEFA78EC2D /* RDEpubReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDEpubReaderView-prefix.pch"; sourceTree = ""; }; - EE10390ED67255ABE5E4D1A1B1EF07F5 /* RDPDFReaderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RDPDFReaderView; path = RDPDFReaderView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EE2FF626D776A0880B86E92EC160BA17 /* UIColor+RDEPUBHex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUBHex.swift"; sourceTree = ""; }; - EE4506392D83069D836221FAB813E8D6 /* DTCoreText-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTCoreText-prefix.pch"; sourceTree = ""; }; - EEF0985CE02F3B586A1C5DA6503103C3 /* DTBreakHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBreakHTMLElement.m; path = Core/Source/DTBreakHTMLElement.m; sourceTree = ""; }; - EF82EDCB0C8172FAF3847EAAD873E096 /* NSURL+DTComparing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTComparing.m"; path = "Core/Source/NSURL+DTComparing.m"; sourceTree = ""; }; - F00ED19C7AADAD7D6BD1E74A4A3236C3 /* RDEPUBCFI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFI.swift; sourceTree = ""; }; - F01A20D999E550EFA3C472C3A20E6A90 /* RDPDFReaderContracts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderContracts.swift; sourceTree = ""; }; - F0D4CF44D919376D1696CC0827A6D4D9 /* RDEpubReaderPagingController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPagingController.swift; sourceTree = ""; }; - F0D5A0F7E62D88B94912634DC9AD339D /* DTCoreTextLayouter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayouter.m; path = Core/Source/DTCoreTextLayouter.m; sourceTree = ""; }; - F0F90ED4AECC246EA5CD643490677AA9 /* DTAttributedLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedLabel.h; path = Core/Source/DTAttributedLabel.h; sourceTree = ""; }; - F1162FA50CA992FE5732F460227AB7DF /* wxread-dark.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-dark.css"; path = "EPUBCore/Resources/wxread-dark.css"; sourceTree = ""; }; - F17D89032AF6902002A2040DA395024B /* RDEPUBSettingsFlipAutomation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSettingsFlipAutomation.swift; sourceTree = ""; }; - F1B84BFB1ACB4057989E6AE9A039B3AC /* RDPDFReaderSettingsPanelViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderSettingsPanelViewController.swift; sourceTree = ""; }; - F2176E21CE60C17099C4437D1566786C /* RDSpeechReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDSpeechReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - F2212BCD78FFC35A46929B1C86B16DBC /* RDEPUBNoteResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteResolver.swift; sourceTree = ""; }; - F28957D624353D3F5648E30C1747E81A /* RDEPUBReaderController+TableOfContents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+TableOfContents.swift"; sourceTree = ""; }; - F2C62DAC24CFAC9075940BF8230E8063 /* RDEPUBReaderChapterListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChapterListController.swift; sourceTree = ""; }; - F3ABB3278539E3E13585120647F01258 /* DTBase64Coding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBase64Coding.m; path = Core/Source/DTBase64Coding.m; sourceTree = ""; }; - F3D00D37E3CB914B9957CBEC6F302A0B /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = ""; }; - F43B7563256C964F3030A6C9BED2EA16 /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; sourceTree = ""; }; - F43D341014C0A3261943902F0C6D7A47 /* RDEPUBNotePopupCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupCoordinator.swift; sourceTree = ""; }; - F4C4EC50C6DC93761BB6C825CE1C4ECD /* NSString+DTFormatNumbers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTFormatNumbers.h"; path = "Core/Source/NSString+DTFormatNumbers.h"; sourceTree = ""; }; - F4E2B1AC73977F10254628C0B7EBE38F /* DTCoreText-Resources */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "DTCoreText-Resources"; path = Resources.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - F5A53C3033C8DE1724D37DA6323CF1D7 /* NSString+CSS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+CSS.h"; path = "Core/Source/NSString+CSS.h"; sourceTree = ""; }; - F606B8AFFB6486EF76BF7118C0D2BBEF /* RDEPUBReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderController.swift; sourceTree = ""; }; - F610362838046514D87BF38DAC3B7829 /* NSAttributedString+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTCoreText.m"; path = "Core/Source/NSAttributedString+DTCoreText.m"; sourceTree = ""; }; - F6BB958DEBCC33A50F89F805D087B922 /* RDEPUBWebDecorationOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebDecorationOverlayView.swift; sourceTree = ""; }; - F7382BDDD61B00469E398482B8AA31F3 /* Archive+WritingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+WritingDeprecated.swift"; path = "Sources/ZIPFoundation/Archive+WritingDeprecated.swift"; sourceTree = ""; }; - F74C359E556A8876EF09A01201FB0403 /* RDEPUBAttachmentNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentNormalizer.swift; sourceTree = ""; }; - F78033C34E8C1FAD3B27FFC4F959A611 /* DTHTMLParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParser.h; path = Core/Source/DTHTMLParser/DTHTMLParser.h; sourceTree = ""; }; - F8569A5FF03BA54C0F4080D3EE5539D5 /* NSNumber+RomanNumerals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNumber+RomanNumerals.h"; path = "Core/Source/NSNumber+RomanNumerals.h"; sourceTree = ""; }; - F8F398A3D1144707216F9A20BEDF911E /* DTAttributedLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedLabel.m; path = Core/Source/DTAttributedLabel.m; sourceTree = ""; }; - F939D46D9D49EF5FCAFCB16F1E35E23E /* RDPDFReaderSettingsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderSettingsView.swift; sourceTree = ""; }; - F9C223BB14280E813122F7F44DDD64F3 /* DTTiledLayerWithoutFade.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTiledLayerWithoutFade.h; path = Core/Source/iOS/DTTiledLayerWithoutFade.h; sourceTree = ""; }; - F9C4993C8ED63C0215BEC38128F6EC5D /* ZIPFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ZIPFoundation-Info.plist"; sourceTree = ""; }; - FAA140AF73738B23155578D0AA734FE3 /* NSMutableAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableAttributedString+HTML.h"; path = "Core/Source/NSMutableAttributedString+HTML.h"; sourceTree = ""; }; - FBE25EF5F0CDFCDC386BCA80518BBDB4 /* RDEPUBWebView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebView.swift; sourceTree = ""; }; - FC1A75CC4E2F1A706E081BDEDDEECC43 /* Vision.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vision.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Vision.framework; sourceTree = DEVELOPER_DIR; }; - FC467FD187B387BBBF0D10B192925B53 /* NSString+DTUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTUtilities.h"; path = "Core/Source/NSString+DTUtilities.h"; sourceTree = ""; }; - FD6379B6FF36860C62B38044B24310C8 /* RDEPUBTextPageRenderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageRenderView.swift; sourceTree = ""; }; - FE2F750872F6BAE0ACB02ADF23011AF8 /* DTHTMLParserNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserNode.h; path = Core/Source/DTHTMLParserNode.h; sourceTree = ""; }; - FE50EC81EDB03616225DAB735C90CFAD /* RDEPUBPaginationCacheCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationCacheCoordinator.swift; sourceTree = ""; }; - FE699719E4C619A2AE868EA35DBCE64E /* DTFoundationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFoundationConstants.m; path = Core/Source/DTFoundationConstants.m; sourceTree = ""; }; - FEA9F91758013B23B0EEA71DA22E7475 /* Pods-ReadViewDemo-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReadViewDemo-Info.plist"; sourceTree = ""; }; - FEB04D144E7A35904D2906AC517EC870 /* NSURL+DTUnshorten.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTUnshorten.m"; path = "Core/Source/NSURL+DTUnshorten.m"; sourceTree = ""; }; - FECD0A9F46F7D0CBF7FE9797EA63845E /* DTObjectTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTObjectTextAttachment.m; path = Core/Source/DTObjectTextAttachment.m; sourceTree = ""; }; - FEEC0D985E61911DD98BBA2737107E1C /* wxread-replace-latin.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace-latin.css"; path = "EPUBCore/Resources/wxread-replace-latin.css"; sourceTree = ""; }; - FF8481A9468E2620C3170C28BC17691E /* Archive+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Deprecated.swift"; path = "Sources/ZIPFoundation/Archive+Deprecated.swift"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 15EFC3631BB58E1F211F61EC3577AE01 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - F74BE2C0D8345DF5EDE41CF6141A44BF /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F7EF4E26D92CE93E8A9095F2249D759 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3391796EF339E0AEC7120220AC387870 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B4F51EC45ADF5136DE6EEE4F8A6C1E48 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5EEBA8E20E44CA19A794938A2381523B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4072AA6607B72436AD2E6AE3FFADAC89 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 65386CE6376B0C3297DCF6B31658D126 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B74A957119D813109A40784D5E991EFE /* Foundation.framework in Frameworks */, - 182A511334D40CCC49EE48A1BCF23853 /* ImageIO.framework in Frameworks */, - 7FAFC81AEE5E9018A74BB33F71B742CA /* QuartzCore.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6F1DC7DF5E89C820D04E068D56B1D0EF /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 191824B2B1E1B0A7DD3B6298100B4B8A /* CoreGraphics.framework in Frameworks */, - 12B4A35B8E40C112E18A7C5511F023E9 /* CoreText.framework in Frameworks */, - E38FC7829B5BDD1588FA487E0FBAC208 /* Foundation.framework in Frameworks */, - 46EF32D586FF590CE2C60C66364B9357 /* ImageIO.framework in Frameworks */, - 6E3D0FDD78ECC20F4B3697ED21D64224 /* MediaPlayer.framework in Frameworks */, - 81905A7717925A17E6B98E934A75B8BA /* QuartzCore.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B3344B1196C556EC6C893EF8620F9CC7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C6089F43887B33500393FA1B1A90467D /* CoreImage.framework in Frameworks */, - 80251A1EAF798D1DA0E8B6943015E263 /* Foundation.framework in Frameworks */, - 484D3D3F85A886BE6364CEEE333C7045 /* PDFKit.framework in Frameworks */, - C3722B9CB3A2CBC3C14B6E289B60C71A /* Vision.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B44B7AA9530B98040DD47CBDA92139EA /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BFB3736B95B19241674697B82F71A24F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 71418DB3666321E61DCCEB3283249368 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C9EC9582E359734B524E8B4D9A1F2BDC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E5E3B4295E71D5850733F3571A6D139C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D2724AF90CEEF7E769462932D96037D /* AVFAudio.framework in Frameworks */, - B97F73A0D8F0C6865E315DA91AE5613F /* Foundation.framework in Frameworks */, - 09BAC6DCE171C42332F021EF1315F15F /* MediaPlayer.framework in Frameworks */, - 34A50CCAB9D9D2DB6C6E2568A4E8D047 /* NaturalLanguage.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F9B4D1354C134B52E8C87C971743C7CE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FAAA7EB0241A5F47FCDCE80019C03BE1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C3AE32D38A31FDE8F3842C8F37A312E0 /* CryptoKit.framework in Frameworks */, - A0D6AB59EF663597FBE4549E969593CB /* Foundation.framework in Frameworks */, - 7762FEA9B3865378C7A92096577009E5 /* NaturalLanguage.framework in Frameworks */, - CF4297F5EFA9541634BEBBA1DF36AECA /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 020E73FA1519F77615E79FE62162006F /* Resources */ = { - isa = PBXGroup; - children = ( - 78AA6CC1C34A3A64CED4C314B1FAE2F1 /* default.css */, - ); - name = Resources; - sourceTree = ""; - }; - 0B1D2560BC0864A57D00D0163A728746 /* Models */ = { - isa = PBXGroup; - children = ( - 953E3DE740417FEABC50197EA84D3869 /* RDEPUBAnnotationModels.swift */, - 22EC93BBACD9340338C2EA7F06488FF9 /* RDEPUBPaginationModels.swift */, - 9E239C1BEAAAF0774B63520941873BCE /* RDEPUBReadingLocationModels.swift */, - ); - name = Models; - path = Models; - sourceTree = ""; - }; - 0D4A349829D1C0DC0E69C0A64B9A4139 /* Pods-ReadViewDemo */ = { - isa = PBXGroup; - children = ( - 045ADBF2087ADD914A9CA0B62EBF2A9F /* Pods-ReadViewDemo.modulemap */, - 2047430DF5C84E0A8FC8874A2B915FC3 /* Pods-ReadViewDemo-acknowledgements.markdown */, - 8B35D0622F339A5B8A864FAA0C9EAE47 /* Pods-ReadViewDemo-acknowledgements.plist */, - AA0811310099A4BCB3D52683B70DB3D1 /* Pods-ReadViewDemo-dummy.m */, - 5977986EDFE76D5EF96A6D95483B12F7 /* Pods-ReadViewDemo-frameworks.sh */, - FEA9F91758013B23B0EEA71DA22E7475 /* Pods-ReadViewDemo-Info.plist */, - EBA0272559B0F7FAD8AC670AC7431188 /* Pods-ReadViewDemo-umbrella.h */, - 306477706BBB1E784F55BCF8EB1AD737 /* Pods-ReadViewDemo.debug.xcconfig */, - 1AD502A1FA6EB1E38200B5283F979504 /* Pods-ReadViewDemo.release.xcconfig */, - ); - name = "Pods-ReadViewDemo"; - path = "Target Support Files/Pods-ReadViewDemo"; - sourceTree = ""; - }; - 12526BFA2BF5BCFD26AF994558197D0D /* RDSpeechReaderView */ = { - isa = PBXGroup; - children = ( - 02108A241C993AAC297AF4F8245FD443 /* RDSpeechReaderContracts.swift */, - 2FBAA88C8DBE0129E51AD73F7D1AB4BD /* RDSpeechReaderController.swift */, - 21F9B093162E445308F49662C7C35DA6 /* RDSpeechReaderControlView.swift */, - 08203CC2BC14FB8B3BA0CAA3EC92789C /* RDSpeechTextPreprocessor.swift */, - 91E48AE3E44D87BABBD3206B031A771E /* AI */, - 1311AB5B17D6867C642822FA935A0210 /* Pod */, - A35D92C45ED9784FF33310E20959877B /* Support Files */, - ); - name = RDSpeechReaderView; - path = ../../Sources/RDSpeechReaderView; - sourceTree = ""; - }; - 1311AB5B17D6867C642822FA935A0210 /* Pod */ = { - isa = PBXGroup; - children = ( - F2176E21CE60C17099C4437D1566786C /* RDSpeechReaderView.podspec */, - CE1FA1663AC56607EB2C5556FB73813E /* README.md */, - ); - name = Pod; - sourceTree = ""; - }; - 17A436C4B45A61A61A73C52ECF2CADA5 /* Resources */ = { - isa = PBXGroup; - children = ( - 0EA3863B341F56C9B54980AD6A1FD5C0 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 18468FD2062F926F39737EFE4390AF03 /* ReaderView */ = { - isa = PBXGroup; - children = ( - B430C8DE5FABD8B5265C378F9D6647CB /* RDEpubReaderContentCell.swift */, - 2715A17C898A6D776882BEBED0FE9695 /* RDEpubReaderFlowLayout.swift */, - 255FEB02D707D9C56E1D5BBE89A8488B /* RDEpubReaderGestureController.swift */, - 2E158150F7B2357D4D54239CBD346CE8 /* RDEpubReaderPageChildViewController.swift */, - D180DE0FA4D342CB14AE055864AD03F0 /* RDEpubReaderView.swift */, - BFBB650C069928DBF6A9F7BA0E89A4BA /* RDEpubReaderView+CollectionView.swift */, - 24CF6BE3C26245FDDEB7E60B92C35046 /* RDEpubReaderView+ContentAccess.swift */, - 89FC4D22055A02594B80AE3D61169CC1 /* RDEpubReaderView+PageCurl.swift */, - 60CEE20803A7C342B83A5972F87CE05F /* RDEpubReaderView+ToolView.swift */, - 3D5896CC971B79D3B220D73186E99827 /* RDEpubReaderViewProtocols.swift */, - B9BFBDDD75EA7D7DC005B244A392AA20 /* Paging */, - ); - name = ReaderView; - path = ReaderView; - sourceTree = ""; - }; - 18E044FA60A4142CAEBBA1BA8B351AF0 /* ReaderView */ = { - isa = PBXGroup; - children = ( - A746B9DD2EDF2950A3F314EA3D5B2EF5 /* RDPDFReaderContentCell.swift */, - 34FC1DCF56B5AEFDF71CEC0334776D7A /* RDPDFReaderPageChildViewController.swift */, - 8451167CAD54879A8C6C68669A8CE1B1 /* RDPDFReaderView+CollectionView.swift */, - 29B76ED37710AEC809FAF71EC4C1F215 /* RDPDFReaderView+Paging.swift */, - A8C14962F04ECA1A8B77093B8EF5E23B /* RDPDFReaderView+ToolView.swift */, - 5DBC1A890B7F43DE8EB006F92D10F623 /* Paging */, - ); - name = ReaderView; - path = ReaderView; - sourceTree = ""; - }; - 1B8A7F414F6156F16578F6723EB260FE /* Core */ = { - isa = PBXGroup; - children = ( - ); - name = Core; - sourceTree = ""; - }; - 1F597F93F3AE569C791DF230C8FEC153 /* Pod */ = { - isa = PBXGroup; - children = ( - C1E22989CFF3153DC1445124C0A538AE /* RDEpubReaderView.podspec */, - 40BCF9C97C17844A974DA454DE537E7D /* README.md */, - ); - name = Pod; - sourceTree = ""; - }; - 23EEF1F245171001FD8C637D33393E98 /* Pod */ = { - isa = PBXGroup; - children = ( - 352416B880C0869535D5187772C16D21 /* RDPDFReaderView.podspec */, - B85CCDCC8D0342F8925CA9263B57A3AE /* README.md */, - ); - name = Pod; - sourceTree = ""; - }; - 2CA280394B77BE3923FC19933C026113 /* ZIPFoundation */ = { - isa = PBXGroup; - children = ( - 93D34826E445B4E08B0CEC27C6EB4DF3 /* Archive.swift */, - 67C4B1FD4CAF8FFB009FF39F501B2650 /* Archive+BackingConfiguration.swift */, - FF8481A9468E2620C3170C28BC17691E /* Archive+Deprecated.swift */, - 304EE7D51CFA84D5F4DBD3F5745F241D /* Archive+Helpers.swift */, - CBD58858F74B286AB42B1D9C0E299BC0 /* Archive+MemoryFile.swift */, - 73FD0605520377843F2F940947AFE16C /* Archive+Progress.swift */, - 1C726091C55C51A29EFD42913073CA5E /* Archive+Reading.swift */, - 8442D87941EF389213FFB9992DEF5D64 /* Archive+ReadingDeprecated.swift */, - DBAEA965F9F262BB8BF17C77B01C0956 /* Archive+Writing.swift */, - F7382BDDD61B00469E398482B8AA31F3 /* Archive+WritingDeprecated.swift */, - 4822B5E091C79BBDF0CEC9C27FAD11ED /* Archive+ZIP64.swift */, - 005A076C910A4DBBE6E72F4D11CB624E /* Data+Compression.swift */, - DAAA91CA607516E42FAA5C2245D6E0C2 /* Data+CompressionDeprecated.swift */, - E1D1532D1876B11C0E08D8B7D4FA131B /* Data+Serialization.swift */, - E209D74CEC1626A09885E55370AEFA53 /* Date+ZIP.swift */, - 022E4755B34BE3FCD1475BB40C6FD7EB /* Entry.swift */, - 53C2C2B5D2F9E3E125F8C7B1B2B41CA8 /* Entry+Serialization.swift */, - E64ED14B8FB7C0060C3BAA215AC25363 /* Entry+ZIP64.swift */, - BCF9B3BF987216CF1766D80FED04CF72 /* FileManager+ZIP.swift */, - 0486411409B1766377F5F2A6234D8E64 /* FileManager+ZIPDeprecated.swift */, - 0E46A6DEEE6CEA27A1FC9024036D8136 /* URL+ZIP.swift */, - 68553AEBE09FBCACA2E3C5DA7EB11494 /* Resources */, - BC94BBA575D65BD789B3BBC38F35DA38 /* Support Files */, - ); - name = ZIPFoundation; - path = ZIPFoundation; - sourceTree = ""; - }; - 2D608F4FD3DB3DC4A32B10CFE7E001B0 /* Support Files */ = { - isa = PBXGroup; - children = ( - CFC58CF344A0B807CF57D0AF2762B169 /* RDEpubReaderView.modulemap */, - 86150AFA30DC7C6F49489D2B96796481 /* RDEpubReaderView-dummy.m */, - CCAFE75D3171723D3C2F8D6B54F83810 /* RDEpubReaderView-Info.plist */, - EDD3DE7C60EC3C4BE3D7A2DEFA78EC2D /* RDEpubReaderView-prefix.pch */, - DD2B675FAAF78038DF681753B63E78F6 /* RDEpubReaderView-umbrella.h */, - E1121A6303533CBF8AF0FC0CE2257AD2 /* RDEpubReaderView.debug.xcconfig */, - 48146273249EBEC5F8B586E4AD1FBBFE /* RDEpubReaderView.release.xcconfig */, - 3B45E8A61AE0DA23D19F4223E56F5D08 /* ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist */, - ); - name = "Support Files"; - path = "../../ReadViewDemo/Pods/Target Support Files/RDEpubReaderView"; - sourceTree = ""; - }; - 2FE24D07190ABC01E7702651F8EC8BED /* Pagination */ = { - isa = PBXGroup; - children = ( - 82B72C555923342A6B29E0B34CD71194 /* RDEPUBChapterPageCounter.swift */, - 858667D975465E160120B5EC556529B8 /* RDEPUBCoreTextPageFrameFactory.swift */, - C0C13E7C0313E7DCCB3664ED29BE4B28 /* RDEPUBPageBreakPolicy.swift */, - B217FB058A1AB50A917831C10DB89F57 /* RDEPUBTextLayouter.swift */, - 9462F129CC1EF33AAEDFC0F3CD09BD9A /* RDEPUBTextLayoutFrame.swift */, - 3784C10C038F42C7074D9B20A81291A4 /* RDEPUBTextPaginationInterfaces.swift */, - 1EDC0C56A84DE47A00B353522B7309AE /* RDEPUBTextPaginationSupport.swift */, - ); - name = Pagination; - path = Pagination; - sourceTree = ""; - }; - 358851FFB64D2C7D55D839D659301D8F /* BuildPipeline */ = { - isa = PBXGroup; - children = ( - 36209CE685AAEF60A5410D7D5EB08EA9 /* RDEPUBBuildDiagnosticsReporter.swift */, - ED638272054208AFD646AF6EB4B4ACAE /* RDEPUBChapterTailNormalizer.swift */, - FE50EC81EDB03616225DAB735C90CFAD /* RDEPUBPaginationCacheCoordinator.swift */, - 11499AD1EDDA56EE2CB5CDE6783F3137 /* RDEPUBTextBookBuilder.swift */, - 280E073C67E0A1BAF7D84E6DA6FEF2CE /* RDEPUBTextBookCache.swift */, - 71D0768D8887E50A8240A225874288B0 /* RDEPUBTextBookModels.swift */, - 278B56CFF632EE38795D20993A889459 /* RDEPUBTextBuildPipelineInterfaces.swift */, - 344A53B9D93EDE7EB41DEC7D27C8AAF7 /* RDEPUBTextPerformanceSampler.swift */, - ); - name = BuildPipeline; - path = BuildPipeline; - sourceTree = ""; - }; - 35E526B6E4CA6A7E89FE8C5A5B1F2259 /* Frameworks */ = { - isa = PBXGroup; - children = ( - E623FE8E2C5104538087D16EA82D01FE /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 38F3D0A72B28BB0AA50CEA52EE23D389 /* EPUBTextRendering */ = { - isa = PBXGroup; - children = ( - DC17DFE7510F72C1BE80E4FB50182687 /* RDEPUBChapterData.swift */, - 04D65A018B525BEE5FB0F21896B5A27F /* RDEPUBDTCoreTextRenderer.swift */, - BAE4A81DD559C8DAA24A7E45914AB294 /* RDEpubPlainTextBookBuilder.swift */, - 6BA1F24F4DFCDDB93645FFE37C0C68A8 /* RDEPUBTextIndexTable.swift */, - 3DC986A408054D5C173C9528E22F94B5 /* RDEPUBTextPositionConverter.swift */, - D41D52C7574A8265D75889EDFEA1F938 /* RDEPUBTextRenderer.swift */, - D3869A8C25816E0E807A4B4362E9FD22 /* RDEPUBTextSearchEngine.swift */, - 358851FFB64D2C7D55D839D659301D8F /* BuildPipeline */, - 2FE24D07190ABC01E7702651F8EC8BED /* Pagination */, - DE3469A75F6A762C27041901AF44771A /* Typesetter */, - ); - name = EPUBTextRendering; - path = EPUBTextRendering; - sourceTree = ""; - }; - 390A90EDAE212CD241A8BE5BA1738497 /* RDAIReaderView */ = { - isa = PBXGroup; - children = ( - 77CEE3EADF5D3703EAFFDED6F4394F74 /* Core */, - FCA201DAA29B65124F3AD5D2A6291B0F /* FoundationModels */, - E0FC55DB56DA89CE8132DB26EFAD6331 /* NaturalLanguage */, - 8EF89AD6276F57F6D4CC74CDC760D410 /* Pod */, - 53A5E1AA710E875BA96CCD372501AAEF /* Support Files */, - B7437DB97F277F7C1807DAB99C765913 /* UI */, - ); - name = RDAIReaderView; - path = ../../Sources/RDAIReaderView; - sourceTree = ""; - }; - 39F098AC9A768AAE466253753D71E3E2 /* Support Files */ = { - isa = PBXGroup; - children = ( - 66D4CB745F2AE3B89089A68CF287C279 /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */, - 4703F3A2832A267D9F6D1EEA83ACB7CC /* SnapKit.modulemap */, - C06D2A51375DCB872C5A41004E287C0D /* SnapKit-dummy.m */, - 8E2E349ABD550C367772430F49937F3B /* SnapKit-Info.plist */, - 3EF3AD9CA30968DDCB34B4B8F3477AA8 /* SnapKit-prefix.pch */, - D557DED28FA9EA85219AF05C93296C6D /* SnapKit-umbrella.h */, - CD770BD6314F1E02A05DC9744C65B5A4 /* SnapKit.debug.xcconfig */, - F3D00D37E3CB914B9957CBEC6F302A0B /* SnapKit.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SnapKit"; - sourceTree = ""; - }; - 3D6BCAC12147FE8B0B02B30D3A5C3F54 /* Support Files */ = { - isa = PBXGroup; - children = ( - BC0B0BF8324AE3EE918E0885D68E209D /* RDPDFReaderView.modulemap */, - CEFCC148B58604D0C5A3C240C51B45FD /* RDPDFReaderView-dummy.m */, - 6CB45D03588F166B581A0965E7D18D6A /* RDPDFReaderView-Info.plist */, - 57C055B2516B90417D158D4D31CF4A11 /* RDPDFReaderView-prefix.pch */, - 507D9D8B9C2FF474F3C6BE68C6EF6C50 /* RDPDFReaderView-umbrella.h */, - 517D2A78DA380DB287A13785F250D543 /* RDPDFReaderView.debug.xcconfig */, - A3942F6A75FD45095352344EAEA29F8B /* RDPDFReaderView.release.xcconfig */, - ); - name = "Support Files"; - path = "../../ReadViewDemo/Pods/Target Support Files/RDPDFReaderView"; - sourceTree = ""; - }; - 4B674E3B8239984DCF70FD510FCFF709 /* SnapKit */ = { - isa = PBXGroup; - children = ( - 13C91A1E88D3B946A1FA082A6EB05C9A /* Constraint.swift */, - 05CA3610F2F3C8021110A179D6943F7A /* ConstraintAttributes.swift */, - C7EDB07502C56DF3D4F6E90F93880B28 /* ConstraintConfig.swift */, - B466C1278D8245B512592A07C1965D32 /* ConstraintConstantTarget.swift */, - 39EFEE9E154AB29DC2CC553438E66442 /* ConstraintDescription.swift */, - A0BD46122D186FBB226483F8DB80E6CE /* ConstraintDirectionalInsets.swift */, - 02887009BADAD18D4A90F5A114DCE512 /* ConstraintDirectionalInsetTarget.swift */, - 7698F9998B2922CC8875BDD7849ED710 /* ConstraintDSL.swift */, - 41C70D721E1873184464B93001110824 /* ConstraintInsets.swift */, - D1F34DCA2B1BAA4FC1470138FC11B494 /* ConstraintInsetTarget.swift */, - 6F38E01209C5238001BD7CD009ED3E88 /* ConstraintItem.swift */, - 8A15541928DAA1303B6219C49CCE42C9 /* ConstraintLayoutGuide.swift */, - 4B1C52776D8E95B99DC3657201FB6FD0 /* ConstraintLayoutGuide+Extensions.swift */, - 20AFDAE6841D0000824C044E2CCEED62 /* ConstraintLayoutGuideDSL.swift */, - 2129FCC5AA430659582F12DBA1350292 /* ConstraintLayoutSupport.swift */, - BB7271637D32095C0F526965851E2E06 /* ConstraintLayoutSupportDSL.swift */, - EB434D5D2C4FC39DB37D676ABB6B7C68 /* ConstraintMaker.swift */, - 0D42C4F678DDCCEAE9A66D3D55B30AA8 /* ConstraintMakerEditable.swift */, - 64ECE2655E3EFB266C23544D1149B39F /* ConstraintMakerExtendable.swift */, - E9A09B9A70653ED4FB65C8A3934E3937 /* ConstraintMakerFinalizable.swift */, - EBD26CED79D9BC8B6093FB7163627198 /* ConstraintMakerPrioritizable.swift */, - 8D071D3F1AC2022BBB40C82D2DC2DFE3 /* ConstraintMakerRelatable.swift */, - C80235C2E1DB28406F275E23F0ADDE9B /* ConstraintMakerRelatable+Extensions.swift */, - 971623801171F2368ECD657BD0C2937F /* ConstraintMultiplierTarget.swift */, - 7F533E14DBE841E334D44FEDC9132726 /* ConstraintOffsetTarget.swift */, - 1870B77AD9A6F26AB3180BB4CE2A8BCC /* ConstraintPriority.swift */, - A7FD67CE75631597FF6EE0F345C77B9D /* ConstraintPriorityTarget.swift */, - D53EC1D66653102E077AA44906338EB5 /* ConstraintRelatableTarget.swift */, - AE51B89744E67BA9CF7E4E2C6DB4DA05 /* ConstraintRelation.swift */, - 36E06DBE2154F8FCE42DD5E8CB02B258 /* ConstraintView.swift */, - D7B730A14FDA23EC9BB3ED876FBD5BA4 /* ConstraintView+Extensions.swift */, - 81E4757842563D7D3DAB82C8B693B313 /* ConstraintViewDSL.swift */, - B71BC62246AFEBD517D3175813789310 /* Debugging.swift */, - 84F38B3CAD708AE9333A29A9AB921FA4 /* LayoutConstraint.swift */, - B3C67AF64AACAFBCB1D6D909BF030731 /* LayoutConstraintItem.swift */, - BDDC3A2D20818C31909CC4C3F4BB4F96 /* Typealiases.swift */, - 0B3047509587D803762D3B0A21B9F773 /* UILayoutSupport+Extensions.swift */, - 17A436C4B45A61A61A73C52ECF2CADA5 /* Resources */, - 39F098AC9A768AAE466253753D71E3E2 /* Support Files */, - ); - name = SnapKit; - path = SnapKit; - sourceTree = ""; - }; - 4CC69C9304EF386C301DEFC2A1C8E4B8 /* EPUBUI */ = { - isa = PBXGroup; - children = ( - 57F27A444B1D85CE9D552F3BE088E5E7 /* RDEPUBAnnotationEditorViewController.swift */, - AF76DD862995E6DCA4C9DD1EAD23C6F6 /* RDEPUBAttachmentTooltipOverlayView.swift */, - 15C6FA1BB01CE3E3BC3877FE7BBA3F90 /* RDEPUBAttachmentTooltipView.swift */, - 605ED3F23EC7AE0091693431E5AD464A /* RDEPUBImageViewController.swift */, - 35B1B17E64DD9DBA45117D4952F0F11C /* RDEPUBImageViewerCoordinator.swift */, - B3DF166B97234809502C34352EE581D1 /* RDEPUBReaderBottomToolView.swift */, - F2C62DAC24CFAC9075940BF8230E8063 /* RDEPUBReaderChapterListController.swift */, - F606B8AFFB6486EF76BF7118C0D2BBEF /* RDEPUBReaderController.swift */, - BB2B377E1647AD43F8B421E099F4DBA0 /* RDEPUBReaderController+AttachmentTooltip.swift */, - EA0835A36D971DBF49B21DC08AF857E4 /* RDEPUBReaderController+ContentDelegates.swift */, - C5A79F4CCFBC9953DB7A8CD52315A738 /* RDEPUBReaderController+DataSource.swift */, - 88C8DF89086D815C51DE683C61FC05D1 /* RDEPUBReaderController+ExternalLinks.swift */, - AAD65472015B1666F31D1B7722813104 /* RDEPUBReaderController+LocationResolution.swift */, - 10FAAD53D64E9A7F84D322E4DBCD7F4B /* RDEPUBReaderController+Orientation.swift */, - CD7E574ECCBB60402506E409507E684A /* RDEPUBReaderController+PublicAPI.swift */, - 4AC8E6436E1B26640EF09D4ED2B97A71 /* RDEPUBReaderController+RenderSupport.swift */, - A04214421115EF7A542C3F3216A318B0 /* RDEPUBReaderController+RuntimeBridge.swift */, - F28957D624353D3F5648E30C1747E81A /* RDEPUBReaderController+TableOfContents.swift */, - D3046302F1405F10DE953D9BB963E1A8 /* RDEPUBReaderController+Trial.swift */, - C72E137C3DFA668BFDC57A4BEC6AE32C /* RDEPUBReaderDelegate.swift */, - 0AD23766F927150C00F31EF8198B457A /* RDEPUBReaderHighlightsViewController.swift */, - CF5C216FDF2C515A93C0212E138FFCA3 /* RDEPUBReaderPersistence.swift */, - C3EF41BC74CB0A807D226BA1B6AAE225 /* RDEPUBReaderSearchBarView.swift */, - B0833E375390AEC8213D4AD7574DAFC6 /* RDEPUBReaderTableOfContentsItem.swift */, - DD38C69E7CB0517D978AF67828A5D3D5 /* RDEPUBReaderToolView.swift */, - DA1492B4475D97CA7D2A514C6740AC74 /* RDEPUBReaderToolViewProtocols.swift */, - 351FD88DC68196BACB5E8C369837AF17 /* RDEPUBReaderTopToolView.swift */, - F17D89032AF6902002A2040DA395024B /* RDEPUBSettingsFlipAutomation.swift */, - C17C5298DC7291DA6730207C4C66F50D /* RDEpubURLReaderController.swift */, - A4D5A0A05487585451479D692E07399B /* RDEPUBViewportTypes.swift */, - 6B18932E1E3BC841E202595971A30339 /* RDEPUBWebContentView.swift */, - F6BB958DEBCC33A50F89F805D087B922 /* RDEPUBWebDecorationOverlayView.swift */, - EB66CFF964A5BAAE8F874E7FD57B193E /* String+RDEPUB.swift */, - 1865AFCF70C53C253B8F4E01D5F5E61C /* UIColor+RDEPUB.swift */, - EE2FF626D776A0880B86E92EC160BA17 /* UIColor+RDEPUBHex.swift */, - C88655D5F0DC56E04DCFE3803713EDB7 /* Notes */, - 62358BD998BF28121E63018A1C035C64 /* ReaderController */, - C1993320C66325DEC09EE7DE95976D1F /* Settings */, - 7B6D61FE6DB33C563A119647E5B6DE6E /* TextPage */, - ); - name = EPUBUI; - path = EPUBUI; - sourceTree = ""; - }; - 4DEB1352F0064F93A274DDB2378895FC /* Pods */ = { - isa = PBXGroup; - children = ( - A621C86DBEEBABB5DCCB206A343F5945 /* DTCoreText */, - 5D84EFCD32A12A50AB9692ACEF5C88EE /* DTFoundation */, - 4B674E3B8239984DCF70FD510FCFF709 /* SnapKit */, - 2CA280394B77BE3923FC19933C026113 /* ZIPFoundation */, - ); - name = Pods; - sourceTree = ""; - }; - 52CE2AD2DE3BF695540E186558566473 /* AI */ = { - isa = PBXGroup; - children = ( - 44EB3CBD2C1D167AE3BD1AD5A9FE063D /* RDEPUBAIContentProvider.swift */, - ); - name = AI; - sourceTree = ""; - }; - 53A5E1AA710E875BA96CCD372501AAEF /* Support Files */ = { - isa = PBXGroup; - children = ( - 44BB65037344EA640BD291D831FE5585 /* RDAIReaderView.modulemap */, - 299AED4539FF5F16ACFC414AF2BDFCF3 /* RDAIReaderView-dummy.m */, - 9A2D50243BC80E38A54308D1350127D1 /* RDAIReaderView-Info.plist */, - 719CCC5081F72A4CF289A77C6A10B8D6 /* RDAIReaderView-prefix.pch */, - C1B094ABE0685E65E249C93BF2B135A9 /* RDAIReaderView-umbrella.h */, - 2042A956F6ADB5E2CF8DB889FA6F7652 /* RDAIReaderView.debug.xcconfig */, - B75141FED04E4EEC380F0173E5DEBCA7 /* RDAIReaderView.release.xcconfig */, - ); - name = "Support Files"; - path = "../../ReadViewDemo/Pods/Target Support Files/RDAIReaderView"; - sourceTree = ""; - }; - 5788D3728DAFD201F8BDC34C43323168 /* Speech */ = { - isa = PBXGroup; - children = ( - CE673C095E86DC64BE73E53BA8C59702 /* RDPDFSpeechContentProvider.swift */, - 064F689D0045852491C10A092AF5E30D /* RDPDFSpeechSession.swift */, - ); - name = Speech; - sourceTree = ""; - }; - 5D84EFCD32A12A50AB9692ACEF5C88EE /* DTFoundation */ = { - isa = PBXGroup; - children = ( - B463807D92B5853C009524A41B5F7B6D /* Core */, - 7CA1F6C8239220E05E9A390877954050 /* DTAnimatedGIF */, - F0B5602D4D4DEF32DA9FFEAE235178C9 /* DTHTMLParser */, - CE79C46AB83D5ADB696E51F586C0BD5B /* Support Files */, - EC1DF5C41F0676128C483B9B7B6368BB /* UIKit */, - ); - name = DTFoundation; - path = DTFoundation; - sourceTree = ""; - }; - 5DBC1A890B7F43DE8EB006F92D10F623 /* Paging */ = { - isa = PBXGroup; - children = ( - 943A86A9A49BFCE017A6E927A5227BF2 /* RDPDFReaderPagingController.swift */, - ); - name = Paging; - path = Paging; - sourceTree = ""; - }; - 62358BD998BF28121E63018A1C035C64 /* ReaderController */ = { - isa = PBXGroup; - children = ( - 907F8DF524B0E15F52BF172C447C26E6 /* RDEPUBBackgroundCoverageStore.swift */, - D0EBC152CC752677E2BF9AC52A6BA36E /* RDEPUBBackgroundPriorityPolicy.swift */, - DB469565A1ED216AFEEDC8EAE6EBD11C /* RDEPUBJumpSession.swift */, - 8B71F5A8A332E260EE37A50AA41BCF2B /* RDEPUBMemoryProbe.swift */, - 9BAEE2DC5FDA8BB9EF5C4A5F7488DA75 /* RDEPUBMetadataParseCancellationController.swift */, - 134B4A5BAA37EE1E20002904058F91C0 /* RDEPUBMetadataParseWorker.swift */, - D35E3E5D1F0237B862AF1C496338DA61 /* RDEPUBPageMapReconciliationCoordinator.swift */, - 6314FB72D26D4408191CE8E9D1E318B1 /* RDEPUBPresentationRuntime.swift */, - 036FFBB8F2CD53C655683977792C77E1 /* RDEPUBReaderAnnotationCoordinator.swift */, - 16EA564A15FAF13156B1B63CA898E824 /* RDEPUBReaderAssemblyCoordinator.swift */, - A39FFDCEA5A80B1D0BDDCA93EB781EF4 /* RDEPUBReaderChromeCoordinator.swift */, - C9BB49C3B2BFFFC50DADB4C826E51C20 /* RDEPUBReaderContext.swift */, - A533699DEE4985154543EA9F53620DB8 /* RDEPUBReaderDependencies.swift */, - 8A3E297145AF1816CA5C623327CC59B8 /* RDEPUBReaderEnvironment.swift */, - C1099B7E3DBAA419B87F8C2B85489A83 /* RDEPUBReaderLoadCoordinator.swift */, - 7A13E55782C8624DBE40150164B4EE2E /* RDEPUBReaderLocationCoordinator.swift */, - 6B3E432595DAC50388DA01BF5E2C0064 /* RDEPUBReaderPaginationCoordinator.swift */, - 8568D36432A34FEDE5381E99A8C991F8 /* RDEPUBReaderRuntime.swift */, - E8DB205FB6149A977447BDB109A35B2E /* RDEPUBReaderSearchCoordinator.swift */, - DD75EF904CE8308F5AACF1FF146BF1FA /* RDEPUBReaderServices.swift */, - EBFC61F3537CBD438016A097E37ACB6B /* RDEPUBReaderState.swift */, - 825FBD8AD5EC92AAB0ECEE502EC41F8D /* RDEPUBReaderUIState.swift */, - 4F29D2A4AA92951611BB88CBCEA7D676 /* RDEPUBReaderViewportMonitor.swift */, - 804466C635EB4FEF9D6D616165F8B8DC /* RDEPUBSelectionState.swift */, - 7DB6A8086EA9ADA201AFFCAC77BDD0F4 /* ChapterRuntime */, - ); - name = ReaderController; - path = ReaderController; - sourceTree = ""; - }; - 68553AEBE09FBCACA2E3C5DA7EB11494 /* Resources */ = { - isa = PBXGroup; - children = ( - 6B839E12858DFC58AF91990D8B6D27A3 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 77CEE3EADF5D3703EAFFDED6F4394F74 /* Core */ = { - isa = PBXGroup; - children = ( - 291A21D778336F982A7197655BD501D5 /* RDAIDiagnostics.swift */, - 45F37BFCD74928584B57F92A89DC4573 /* RDAIIndexService.swift */, - 4C90DC3AA09B301621526C8BCC0AD9D9 /* RDAILocatorBuilder.swift */, - BCBD48F4256CF6916C32ACC00CA15E31 /* RDAIReaderContracts.swift */, - 8C637C4B48A62EF0502BDEF1DE9D0E15 /* RDAISQLiteIndexStore.swift */, - ); - name = Core; - sourceTree = ""; - }; - 7B6D61FE6DB33C563A119647E5B6DE6E /* TextPage */ = { - isa = PBXGroup; - children = ( - 190346203AD581C70492D0745A6E8803 /* RDEPUBChapterDisplayContentCache.swift */, - 08DD1E0E929865962947B62F7DED78F3 /* RDEPUBDarkImageAdjuster.swift */, - 7DF3043DDE18A19F6421EF2CF64139B1 /* RDEPUBPageInteractionController.swift */, - E28619FF1699FE5E9E9981D4B9C26E55 /* RDEPUBPageLayoutSnapshot.swift */, - AEDAA2C5AF091299DF54A6E16A992BC3 /* RDEPUBSelectionLoupeView.swift */, - 37A4370530967E365499946ECCA13F13 /* RDEPUBSelectionOverlayView.swift */, - 62636EDE4CB9821D61448E5C954460F7 /* RDEPUBTextAnnotationOverlay.swift */, - 3DE91417CF554D42F4493D636FF1F69C /* RDEPUBTextContentInteractionCoordinator.swift */, - 9245153495464B8CBAFED3ED68018040 /* RDEPUBTextContentView.swift */, - D91B95C25EE62BB4B1F381EB057E9857 /* RDEPUBTextPageBoundaryValidator.swift */, - D1062E1B1D8A82FD2C1DD0B34E5D20AA /* RDEPUBTextPageDecorationView.swift */, - FD6379B6FF36860C62B38044B24310C8 /* RDEPUBTextPageRenderView.swift */, - C7C0AB34CD2CE6BAD791E1F6E3D75649 /* RDEPUBTextPageVerticalJustifier.swift */, - 089001022ECC9DB5FD2E0F24D747A427 /* RDEPUBTextSelectionController.swift */, - ); - name = TextPage; - path = TextPage; - sourceTree = ""; - }; - 7CA1F6C8239220E05E9A390877954050 /* DTAnimatedGIF */ = { - isa = PBXGroup; - children = ( - A319B0AD0B5F014BB090153D3020DBA5 /* DTAnimatedGIF.h */, - 9C66F715840302F2CF4DA6C8558A09BD /* DTAnimatedGIF.m */, - ); - name = DTAnimatedGIF; - sourceTree = ""; - }; - 7DB6A8086EA9ADA201AFFCAC77BDD0F4 /* ChapterRuntime */ = { - isa = PBXGroup; - children = ( - 92F0F3ABA13CE7A54A4E4E349805063E /* RDEPUBBackgroundTrace.swift */, - 999BDDCF67865CDD1D8FDFDCF47B3BA6 /* RDEPUBBookPageMap.swift */, - 984D5B14277EA4CB70D58019DC0D2E7A /* RDEPUBChapterCacheKey.swift */, - C02B75657834185F5471197156446395 /* RDEPUBChapterDataCache.swift */, - 66388B03A7B6CCC521677D01D37D85F9 /* RDEPUBChapterLoader.swift */, - 02E5A5D3D109FB88E6EA88F1E2253525 /* RDEPUBChapterLocation.swift */, - 45E017DF266C5A63D2DD360346FD3790 /* RDEPUBChapterOffsetMap.swift */, - 252792DF6A9EBFA863DC153A59A7C003 /* RDEPUBChapterRuntimeStore.swift */, - E6982A7E6DC4C5C53D2CC2D5811ABD98 /* RDEPUBChapterSummaryDiskCache.swift */, - 8271BF8B7810200FA9F29F48A6560327 /* RDEPUBChapterWarmupOrchestrator.swift */, - DB2F54C055F942CA37FE44B4E194467D /* RDEPUBPageCountCache.swift */, - 7DB47B6585052E2D965545738AB6126B /* RDEPUBPageResolver.swift */, - B519C702035AA132CC8AFFCF4399C678 /* RDEPUBRuntimeChapter.swift */, - 9BB109BD1A878FD38390731ED383EBB8 /* RDEPUBRuntimePageCount.swift */, - ); - name = ChapterRuntime; - path = ChapterRuntime; - sourceTree = ""; - }; - 84BB63EEC92C4792477AE6A3F7F78099 /* Speech */ = { - isa = PBXGroup; - children = ( - 10C60005AD8F659D0476A2D8DCDF0AB7 /* RDEPUBSpeechContentProvider.swift */, - 5F04F9EA650B7E82A6BD7560C308C1F9 /* RDEPUBSpeechSession.swift */, - ); - name = Speech; - sourceTree = ""; - }; - 89B543FBD83F25016955F4C6944803DD /* Development Pods */ = { - isa = PBXGroup; - children = ( - 390A90EDAE212CD241A8BE5BA1738497 /* RDAIReaderView */, - D12D6BCBD1CDEB43C5A3A503D4303C0C /* RDEpubReaderView */, - F6622CD8178FE552BA5A2D887FCCA98D /* RDPDFReaderView */, - 12526BFA2BF5BCFD26AF994558197D0D /* RDSpeechReaderView */, - ); - name = "Development Pods"; - sourceTree = ""; - }; - 8ABEF91894658D3904F0DB438C040928 /* Support Files */ = { - isa = PBXGroup; - children = ( - 5680AB3CE2258BA50F7E7FA84AA71368 /* DTCoreText.modulemap */, - 031C87137668EBD722F2FAB7A5826060 /* DTCoreText-dummy.m */, - 1E77200B2588979A91C702B9393646FE /* DTCoreText-Info.plist */, - EE4506392D83069D836221FAB813E8D6 /* DTCoreText-prefix.pch */, - 4200F053D7EE79B56B3A430E865A9051 /* DTCoreText-umbrella.h */, - 3FFE1E06FDE8D4BA1EE289A4D0E7D127 /* DTCoreText.debug.xcconfig */, - 3FDE76F77A49B86E3A4499727321AC11 /* DTCoreText.release.xcconfig */, - 1944985A167896CE8F522E61AFC67021 /* ResourceBundle-Resources-DTCoreText-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/DTCoreText"; - sourceTree = ""; - }; - 8EF89AD6276F57F6D4CC74CDC760D410 /* Pod */ = { - isa = PBXGroup; - children = ( - 712CB0166C21E677902495FEC814327A /* RDAIReaderView.podspec */, - 6E56D97F139ADBF3D0E3DD57E5765A5A /* README.md */, - ); - name = Pod; - sourceTree = ""; - }; - 91E48AE3E44D87BABBD3206B031A771E /* AI */ = { - isa = PBXGroup; - children = ( - E3AC0D799821BAB2769DC35260D98143 /* RDAISpeechContentProvider.swift */, - ); - name = AI; - sourceTree = ""; - }; - 9416704F207813616C70A5A0886FC2FD /* EPUBCore */ = { - isa = PBXGroup; - children = ( - DF67542CFE745690B8EBE4830234AF3D /* RDEPUBAssetRepository.swift */, - 176BA6492702B8C8B44BB4838E9BE22E /* RDEPUBFixedLayoutTemplate.swift */, - E3295E071BD0E7D326FF78153BA2B547 /* RDEPUBJavaScriptBridge.swift */, - 2001D46BD05DD1AA90F95E8DA1446665 /* RDEPUBModels.swift */, - E1003FAF53E637D0449A9CC1D883E1F1 /* RDEPUBNavigatorLayoutContext.swift */, - 5BEA1735DC206814580D0CBDDC031E24 /* RDEPUBPaginator.swift */, - A6FDDE36D802AB1EA9041B13BC3EA5A1 /* RDEPUBParser.swift */, - 20A5204B6BF43D97B5BF8D5E2750C169 /* RDEPUBParser+Archive.swift */, - 5CA21017980D553A4F9BDDF4AA5D7C5A /* RDEPUBParser+Package.swift */, - 0EF517630D9C1210CC93BA4C5EDFEC72 /* RDEPUBParser+ReadingProfile.swift */, - BA8EF373BBB5C4CCBC5508A277C66DA2 /* RDEPUBParser+Resources.swift */, - AC98EFE638423C12303C34B7A44385E2 /* RDEPUBParser+TOC.swift */, - 652FAC593B4120C7C6FB336099192C03 /* RDEPUBPreferences.swift */, - 7D14015E61E39CFCDCA7990AD045B00A /* RDEPUBPublication.swift */, - 4ED5D1D93987D1ECA1C9ACBDDBA99968 /* RDEPUBReadingSession.swift */, - 08D3259DEB40F1B981CE44EC804D3EAA /* RDEPUBRenderRequest.swift */, - 1DE9799AA807EEB5A537EC921B86BE14 /* RDEPUBResourceDataProvider.swift */, - 6B9EC155E4E50C8B0D7C9E946A6EFD6E /* RDEPUBResourceResolver.swift */, - 11CB7096E9E4649F50811459D7FBB65C /* RDEPUBResourceURLSchemeHandler.swift */, - 04592A413A3E30701E478D8F61806A9C /* RDEPUBSafeArea.swift */, - D6032EC340E3CFAD1A8538662BBFF5BB /* RDEPUBSearchEngine.swift */, - B7A9D2873B8F3EC6F43F7F65854A0341 /* RDEPUBSearchModels.swift */, - 0F4690DA615CD1FD20F08CD8BB5CD166 /* RDEPUBStyleSheetBuilder.swift */, - 6B4C6FF338A6BCF7DF2A6F071DC960F3 /* RDEPUBTextAnchor.swift */, - FBE25EF5F0CDFCDC386BCA80518BBDB4 /* RDEPUBWebView.swift */, - AF5A643FD1163E493C913723C79E6B44 /* RDEPUBWebView+Configuration.swift */, - 240F52CEA8D1F72985804D9FF38A9DDD /* RDEPUBWebView+FixedLayout.swift */, - D50E19F80F64C425AF6E80129D14A85E /* RDEPUBWebView+JavaScriptBridge.swift */, - 95B28F6E48DFAB553BCB9383DC6D19D3 /* RDEPUBWebView+Reflowable.swift */, - 41842E3F5C4C4B1ACDE3C397F0AE687B /* RDEPUBWebView+Search.swift */, - B90AD4BB9A9DF6CFF6AFAC1BBCB83B53 /* RDEPUBWebViewDebug.swift */, - E9085F238564F395310AF033BBFA4A42 /* CFI */, - 0B1D2560BC0864A57D00D0163A728746 /* Models */, - 9BD5B5B6030545133D23EF8E779C9EB7 /* Notes */, - ); - name = EPUBCore; - path = EPUBCore; - sourceTree = ""; - }; - 994C39A644C0722C7A9E97AB46DB8965 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 0D4A349829D1C0DC0E69C0A64B9A4139 /* Pods-ReadViewDemo */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - 9BD5B5B6030545133D23EF8E779C9EB7 /* Notes */ = { - isa = PBXGroup; - children = ( - 8B9E332F7EDBC4A91BF0DBB014C44D12 /* RDEPUBNoteDetector.swift */, - 1D13B77878270A7699E1975EB37F0DD4 /* RDEPUBNoteModels.swift */, - F2212BCD78FFC35A46929B1C86B16DBC /* RDEPUBNoteResolver.swift */, - ); - name = Notes; - path = Notes; - sourceTree = ""; - }; - A35D92C45ED9784FF33310E20959877B /* Support Files */ = { - isa = PBXGroup; - children = ( - 9A3467BB5CFDBA4B48A9830D47CED454 /* RDSpeechReaderView.modulemap */, - A6C3FFDC5714D18BE0534AF20F6C07CA /* RDSpeechReaderView-dummy.m */, - E7112D0C2BB66532AB032E85DB736D16 /* RDSpeechReaderView-Info.plist */, - 67CBB4275FFEB0FDD4DB8C4BB881BDBA /* RDSpeechReaderView-prefix.pch */, - D94A0293C1A11AB0BF793F0804AF01BA /* RDSpeechReaderView-umbrella.h */, - C357AC8D7A6E01440AC68979B529B2F7 /* RDSpeechReaderView.debug.xcconfig */, - 03D925237ACBF4382D1CF970BC943B0D /* RDSpeechReaderView.release.xcconfig */, - ); - name = "Support Files"; - path = "../../ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView"; - sourceTree = ""; - }; - A60C9476C4F4CB970063579359A474EC /* Products */ = { - isa = PBXGroup; - children = ( - EDA6D5D7D0A04878EE78FAAE94F65068 /* DTCoreText */, - F4E2B1AC73977F10254628C0B7EBE38F /* DTCoreText-Resources */, - D1E89A31867FF1FB44B4B999988F1B82 /* DTFoundation */, - 78EA0DF405F8465A86BFD3DDFD2EC295 /* Pods-ReadViewDemo */, - BD727D8D750906C2FCA03FA988C99329 /* RDAIReaderView */, - 01DCD1B42D40839F1C8DBBDB11EF09BA /* RDEpubReaderView */, - C8A6E90AB5E26049710E2C2404C28B9A /* RDEpubReaderView-RDEpubReaderViewAssets */, - EE10390ED67255ABE5E4D1A1B1EF07F5 /* RDPDFReaderView */, - B03E48EA4685C3F0EC2C0C5A2714C60F /* RDSpeechReaderView */, - 979486118B3E90C08386079D57962701 /* SnapKit */, - B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */, - 48A4A6EDC08C8AC933D0DCD507E9D173 /* ZIPFoundation */, - CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */, - ); - name = Products; - sourceTree = ""; - }; - A621C86DBEEBABB5DCCB206A343F5945 /* DTCoreText */ = { - isa = PBXGroup; - children = ( - B72E60DFC15F208F1BA00518E64F79B5 /* CTLineUtils.h */, - 07147F57468AB345BF82E26A70F60603 /* CTLineUtils.m */, - D816721347D943A1D204E1507FFA5019 /* DTAccessibilityElement.h */, - 02F0F2897650299308CB818238165341 /* DTAccessibilityElement.m */, - 06E2D8E1D6BCAF5913A7F3F6B1BF9E0F /* DTAccessibilityViewProxy.h */, - AC22C3CB82EEE746663403422F344116 /* DTAccessibilityViewProxy.m */, - 790E97E55D348C4AAE5B90CE6447CD7E /* DTAnchorHTMLElement.h */, - CDDC623AB1701601A907DA67C2F8F283 /* DTAnchorHTMLElement.m */, - F0F90ED4AECC246EA5CD643490677AA9 /* DTAttributedLabel.h */, - F8F398A3D1144707216F9A20BEDF911E /* DTAttributedLabel.m */, - BB2A34C872861E98642DDE455E8E3A72 /* DTAttributedTextCell.h */, - 8A54C0C47B44A133E0CFF71526B88FAF /* DTAttributedTextCell.m */, - 63A43AFE4C6D7EBA5A25A5B514F473AF /* DTAttributedTextContentView.h */, - 9213525F01D9956B799C00C0D4A56558 /* DTAttributedTextContentView.m */, - B646DEE91A4E62F132C54E702B8BDF18 /* DTAttributedTextView.h */, - 45C11AEF7E65FFDA653DFB142C22DEF4 /* DTAttributedTextView.m */, - 1312638E3010913FB511FD8BE3E2DC60 /* DTBreakHTMLElement.h */, - EEF0985CE02F3B586A1C5DA6503103C3 /* DTBreakHTMLElement.m */, - 51CD1050B1BC09EA428919282AA2614D /* DTColor+Compatibility.h */, - 7DCFEFDD6D693AD5967568E86920AB08 /* DTColor+Compatibility.m */, - 5E247027425CC2ADC73F05F25DC0B857 /* DTColorFunctions.h */, - D92D7AF796DC45709FBBF4BBCBF47095 /* DTColorFunctions.m */, - B44119BC710BFFD4549A1B83FBF80CF8 /* DTCompatibility.h */, - 7B8CEFAE5E33709E3C9AABF89FFF29BC /* DTCoreText.h */, - A7EDC6B8243A9B7E465C24C3E3032923 /* DTCoreTextConstants.h */, - D7D4385F08260E348B370DC79366E6CD /* DTCoreTextConstants.m */, - 380BFE2729ACC77B6F3E846E9C456848 /* DTCoreTextFontCollection.h */, - B53424287733C45D387175CE9132AFBD /* DTCoreTextFontCollection.m */, - C56EB0E701347B766F12260495801CE1 /* DTCoreTextFontDescriptor.h */, - 63DC0159C85524BC0348523335677809 /* DTCoreTextFontDescriptor.m */, - 32D4D2890461C2EF2403D78EBF03B29D /* DTCoreTextFunctions.h */, - 02CB03BBF6FEA9FE9E85706A75AB816B /* DTCoreTextFunctions.m */, - AC925B7832B651D3B1C84393FF2F9573 /* DTCoreTextGlyphRun.h */, - 31B00EC977C5120446E63A976AD9DBC3 /* DTCoreTextGlyphRun.m */, - 55265AB7222E2B20F9B5B320259186BC /* DTCoreTextLayouter.h */, - F0D5A0F7E62D88B94912634DC9AD339D /* DTCoreTextLayouter.m */, - C920C702702D03C98A6A6ADDE53C9E78 /* DTCoreTextLayoutFrame.h */, - 4D4D642664400ACAE92FB5136B8121D0 /* DTCoreTextLayoutFrame.m */, - CE669FB235F0A79C31606AC2D531E6C7 /* DTCoreTextLayoutFrame+Cursor.h */, - BADC1A043414D84FBAFBF86CAC8F5399 /* DTCoreTextLayoutFrame+Cursor.m */, - 2557D3D9913F2F7C7C6AD2C114C2A5C5 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */, - 74B2884E9214B5B38193587D773554BA /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */, - 28FF8B4C669DE2384EE37199498D23E9 /* DTCoreTextLayoutLine.h */, - 172C1329A4A6171B18EC5A192815941B /* DTCoreTextLayoutLine.m */, - D3C2F16A4F9F4BEAA317715C1F17C81F /* DTCoreTextMacros.h */, - 407D64FA06B0D5E2DD9CDBC471AB9195 /* DTCoreTextParagraphStyle.h */, - 226AE0F5865FC6A88B9D0C73C28A8381 /* DTCoreTextParagraphStyle.m */, - CAED9812FF45FFA82A7B68F7B2B656D4 /* DTCSSListStyle.h */, - C6303D6C8B50248F87D70D77E2CA66B7 /* DTCSSListStyle.m */, - 88A74F7BF47C6E3B2026A80DC4783F1A /* DTCSSStylesheet.h */, - 7C5C85EAAD91F1E22CC5986EF9B5D218 /* DTCSSStylesheet.m */, - D89968532D9F2672C6B6D01C290AE466 /* DTDictationPlaceholderTextAttachment.h */, - 188836BC213C48E6459D098231133246 /* DTDictationPlaceholderTextAttachment.m */, - 86255994A7212A40F60FBEE69C526FF9 /* DTDictationPlaceholderView.h */, - BFD69C3CC4E96BBD5634E64370DBDA98 /* DTDictationPlaceholderView.m */, - 4113E34E3BD2181F4202CECBB3A0DDBA /* DTHorizontalRuleHTMLElement.h */, - 6A21D84422DA0E64EA29D0155532671F /* DTHorizontalRuleHTMLElement.m */, - 8B10FCCF1F8CF05D36F5B65963EB1F41 /* DTHTMLAttributedStringBuilder.h */, - 41FD16F0768AA2512812644831FC90CA /* DTHTMLAttributedStringBuilder.m */, - BD929E02D9C56EC44BBB74C1999F9892 /* DTHTMLElement.h */, - 44894FF917F68A61F0E523342FA5D0A8 /* DTHTMLElement.m */, - FE2F750872F6BAE0ACB02ADF23011AF8 /* DTHTMLParserNode.h */, - 47E0F42EC4845B73E0193AA0062A1576 /* DTHTMLParserNode.m */, - 034BC384E1BA330755046E5212201E4D /* DTHTMLParserTextNode.h */, - 1A2A7B53BCE33A88EB155ED5C4F5C09D /* DTHTMLParserTextNode.m */, - AFBB8005939E9A85DD9BDAEAA3002E57 /* DTHTMLWriter.h */, - 7BB20F608D8D3B80F2688014A5F661FC /* DTHTMLWriter.m */, - AFFD40FFE61C73861D47FD66561E7E93 /* DTIframeTextAttachment.h */, - 81FB8EF1A1E911A5BA351013BE2BDDA3 /* DTIframeTextAttachment.m */, - 551D98EE6C1653939AE1E3BCBC4ACC2E /* DTImage+HTML.h */, - C171DA66E3550E5F4492D2964AB04FB2 /* DTImage+HTML.m */, - 9FECEDE17B4E87274DD2E9EBFD584ABF /* DTImageTextAttachment.h */, - 6F97367EBFF425820B717CAC4FAF59F2 /* DTImageTextAttachment.m */, - 773601B72FDE742724A1FE66115AC185 /* DTLazyImageView.h */, - E757F9EEC3FE914CD8CFDFF7173A5D6E /* DTLazyImageView.m */, - E7890CD33BD10753D1D971AD2FE20A74 /* DTLinkButton.h */, - 007656EA11E3CE9D116BC39614FACB53 /* DTLinkButton.m */, - 0E6203B41468A1B8FBBF9CEC0BF15751 /* DTListItemHTMLElement.h */, - 0B446AE2E106CECF72AEEA93B85897EC /* DTListItemHTMLElement.m */, - 9FD1F6CDF944640D5F1E2A81A5494657 /* DTObjectTextAttachment.h */, - FECD0A9F46F7D0CBF7FE9797EA63845E /* DTObjectTextAttachment.m */, - 8961D7BA81FEA0F2525F9E82F156426A /* DTStylesheetHTMLElement.h */, - E15930CD8D9ED2F990B87E8F78DD5A32 /* DTStylesheetHTMLElement.m */, - C911EE625C8CD488E8B66FA8BA2B5C8F /* DTTextAttachment.h */, - 1FDA83DF0F8A6E9142BC2640BC2F9844 /* DTTextAttachment.m */, - 1C822D376841DA0BA4150A8A8E5B911D /* DTTextAttachmentHTMLElement.h */, - E2993B5AF554E26603DFF0DE92D89C92 /* DTTextAttachmentHTMLElement.m */, - 52A65E0D6AD4CFB0EECC8AD17A4E8EAC /* DTTextBlock.h */, - 0FAE8E0BCF1CB66D6936A3CACAE7CF0B /* DTTextBlock.m */, - 23E6F02F41FDE074ACD5C78DA921EEED /* DTTextHTMLElement.h */, - C3096FD2B7053B4AF08D2B6156C7CA1A /* DTTextHTMLElement.m */, - 7AEDBB0324469C4ECD8D10A6355A2A09 /* DTVideoTextAttachment.h */, - 45CF43387529121AEA90666FE86EE96A /* DTVideoTextAttachment.m */, - F43B7563256C964F3030A6C9BED2EA16 /* DTWeakSupport.h */, - D8D859DA88367D318DA839A12B29A149 /* NSAttributedString+DTCoreText.h */, - F610362838046514D87BF38DAC3B7829 /* NSAttributedString+DTCoreText.m */, - 21A5EB7C80D2F578DE579CA1B20F3CDB /* NSAttributedString+DTDebug.h */, - B616B1E339BA326837E6325F3F291E51 /* NSAttributedString+DTDebug.m */, - 42C2ECC838DE8A6E5DEB264BEA6F59E4 /* NSAttributedString+HTML.h */, - 74F621BADD77F0A22003EDCA6F92D153 /* NSAttributedString+HTML.m */, - ACD3CB33E5A4E915E5F4C09F4684FFF2 /* NSAttributedString+SmallCaps.h */, - 958D7F12C237A34C059F4E43474BDFAF /* NSAttributedString+SmallCaps.m */, - 60599FA355FBC31A4ED1E2EE5A09A312 /* NSAttributedStringRunDelegates.h */, - 2C866ED63128D4AB5D968EEDA3CB7516 /* NSAttributedStringRunDelegates.m */, - CFF70C90945A3410647B87CF1F107605 /* NSCharacterSet+HTML.h */, - E26546A9CD322544BEF648DFE2B26D7D /* NSCharacterSet+HTML.m */, - B8CC7968142149B581329E3460D35484 /* NSCoder+DTCompatibility.h */, - 6DB99CF9B07AE8928ACEE9F5A107809D /* NSCoder+DTCompatibility.m */, - 4F9D3ED5DA816A72982CEF0FD18986D1 /* NSDictionary+DTCoreText.h */, - 6EDBB29D0A60FEB56FCC489DC10F37BB /* NSDictionary+DTCoreText.m */, - FAA140AF73738B23155578D0AA734FE3 /* NSMutableAttributedString+HTML.h */, - AABB72617A844FF5405C727A0A23D568 /* NSMutableAttributedString+HTML.m */, - 295BCC7FDA963E5D8F53CBF64F08B2B5 /* NSMutableString+HTML.h */, - 0769148555F482C8DF7EA21F6935B7F4 /* NSMutableString+HTML.m */, - F8569A5FF03BA54C0F4080D3EE5539D5 /* NSNumber+RomanNumerals.h */, - 175FF6D3C38E463368C8B7AE1AC4E41F /* NSNumber+RomanNumerals.m */, - 6BE6B072BF746163179BDF80F8CDBE1D /* NSScanner+HTML.h */, - BA83941397AFE127903C2DA0EE626295 /* NSScanner+HTML.m */, - F5A53C3033C8DE1724D37DA6323CF1D7 /* NSString+CSS.h */, - 4351507ACB1193D9EA3EDD3DFDDA1AD2 /* NSString+CSS.m */, - 4D4600C0ADBC3B1B542099C68D747659 /* NSString+HTML.h */, - 84BDFD9872BDDC8D8E292A987C833142 /* NSString+HTML.m */, - 9FE24D923BB63C2BD4397C37352A6204 /* NSString+Paragraphs.h */, - 39F01D07F324B206706E9809D44643C1 /* NSString+Paragraphs.m */, - D4A82B2715640986D3701AF889DBD599 /* UIFont+DTCoreText.h */, - 3FCDFEE3DE4E8469962B9931E7775E8C /* UIFont+DTCoreText.m */, - 1B8A7F414F6156F16578F6723EB260FE /* Core */, - 020E73FA1519F77615E79FE62162006F /* Resources */, - 8ABEF91894658D3904F0DB438C040928 /* Support Files */, - ); - name = DTCoreText; - path = DTCoreText; - sourceTree = ""; - }; - B329946AD586BB80865C46BC7ADAF9A9 /* AI */ = { - isa = PBXGroup; - children = ( - 81313A5C1BC97CDA5BE30763C8F014F9 /* RDPDFAIContentProvider.swift */, - ); - name = AI; - sourceTree = ""; - }; - B463807D92B5853C009524A41B5F7B6D /* Core */ = { - isa = PBXGroup; - children = ( - 1D70C4504AFE88A621171FBB9368722F /* DTBase64Coding.h */, - F3ABB3278539E3E13585120647F01258 /* DTBase64Coding.m */, - 5EA0602B933CD0C98C4AEEE449A8D048 /* DTBlockFunctions.h */, - 34F66F7B56F490F71666C3CC51B50EDB /* DTBlockFunctions.m */, - 6E87093B88AB6F2B6A8E775DB61D7F9B /* DTCompatibility.h */, - 68302D3003412D32673539BAF3A71FFD /* DTCoreGraphicsUtils.h */, - 9761870FC405B984D09A304261C3CB25 /* DTCoreGraphicsUtils.m */, - D362CCA87B017930E7481AFE2E73FB74 /* DTExtendedFileAttributes.h */, - 7440BEAF1F0CA8CE70C073FFEAF637F5 /* DTExtendedFileAttributes.m */, - 51D9D817F1F806BC50BB65FC80C7D47F /* DTFolderMonitor.h */, - 9A381F075AF6CD9AFBB86130B39E20B4 /* DTFolderMonitor.m */, - 617D0CB55C260D48CC4ED2FF0A3A1051 /* DTFoundationConstants.h */, - FE699719E4C619A2AE868EA35DBCE64E /* DTFoundationConstants.m */, - 1F72747C46CC41B906C8A967ED5A47E6 /* DTLog.h */, - 3D1E29A71B902CC46EBA81C84ADCDA50 /* DTLog.m */, - 708CF8B218058AAAA710BB7ADFC504FE /* DTVersion.h */, - 16023686DC389E6755BC79366433C45B /* DTVersion.m */, - A672DF142E75858C34A342B2BB2AC891 /* DTWeakSupport.h */, - 73DCE046F4B55AE88A81C9E68400E93C /* NSArray+DTError.h */, - 3BE28706DBAE983FB19FBE122D9F9E68 /* NSArray+DTError.m */, - D97A43F1E6018B92E85B58BB6549F7CB /* NSData+DTCrypto.h */, - 503556D1790A886D0E591A982279641B /* NSData+DTCrypto.m */, - 14AEB065E4B58020BECD466FA2C3582B /* NSDictionary+DTError.h */, - AF41F6780E56AB0F76C46A75363DA697 /* NSDictionary+DTError.m */, - 9719394B24A0CB3CCE6CCA87A0A70D08 /* NSFileWrapper+DTCopying.h */, - B2542127DF3D3CEF3D1EB999F8576341 /* NSFileWrapper+DTCopying.m */, - 08A8B32341BD833856874E046C97EE36 /* NSMutableArray+DTMoving.h */, - D245D04D70A4D36DC86741D0833AA95A /* NSMutableArray+DTMoving.m */, - F4C4EC50C6DC93761BB6C825CE1C4ECD /* NSString+DTFormatNumbers.h */, - 298CF23475A19D50E172630BD6D1D1EA /* NSString+DTFormatNumbers.m */, - BDFD7D9A4BFFBB2603B10E3A432551B6 /* NSString+DTPaths.h */, - C862AF3C9768AEC3AF792217547BE47D /* NSString+DTPaths.m */, - C808AC5A8C55E7E56EF916C622B6091A /* NSString+DTURLEncoding.h */, - DE5387758E4F1C4128BE4A1E8D68A9BD /* NSString+DTURLEncoding.m */, - FC467FD187B387BBBF0D10B192925B53 /* NSString+DTUtilities.h */, - A67FB1DCECBDAA36B9B755606AC42C17 /* NSString+DTUtilities.m */, - 74ECEF7602380F21B87522961E550A7E /* NSURL+DTComparing.h */, - EF82EDCB0C8172FAF3847EAAD873E096 /* NSURL+DTComparing.m */, - 05565CA71DD7DDAA012573A841F7D8DF /* NSURL+DTUnshorten.h */, - FEB04D144E7A35904D2906AC517EC870 /* NSURL+DTUnshorten.m */, - ); - name = Core; - sourceTree = ""; - }; - B7437DB97F277F7C1807DAB99C765913 /* UI */ = { - isa = PBXGroup; - children = ( - 75F5A849E82ECED8710DBA54B127186F /* RDAIReaderAssistantViewController.swift */, - ); - name = UI; - sourceTree = ""; - }; - B9BFBDDD75EA7D7DC005B244A392AA20 /* Paging */ = { - isa = PBXGroup; - children = ( - F0D4CF44D919376D1696CC0827A6D4D9 /* RDEpubReaderPagingController.swift */, - A367786E9C55FFE1AA25D87507414354 /* RDEpubReaderPreloadController.swift */, - 7921A77874E3E2E63E378843085CE55F /* RDEpubReaderSpreadResolver.swift */, - 752C7424C07641B28AD2F0C06D1629D5 /* RDEpubReaderTapRegionHandler.swift */, - ); - name = Paging; - path = Paging; - sourceTree = ""; - }; - BC94BBA575D65BD789B3BBC38F35DA38 /* Support Files */ = { - isa = PBXGroup; - children = ( - 8B666BD6A6C560D47BBC2E29BAF25836 /* ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist */, - 0D235D896ED8A7EFDB618AB39D091153 /* ZIPFoundation.modulemap */, - D5D2445B4619EC0C62C7560649DD2204 /* ZIPFoundation-dummy.m */, - F9C4993C8ED63C0215BEC38128F6EC5D /* ZIPFoundation-Info.plist */, - AA5EA82ABC61B0B974592D4CA89ACF8C /* ZIPFoundation-prefix.pch */, - 3D86855B4F039593754D5DC832865EA9 /* ZIPFoundation-umbrella.h */, - B1D682E70FAFEEF08569FCA32E219FD1 /* ZIPFoundation.debug.xcconfig */, - D7826602DA2629A5A1DD5912ADCAF5B8 /* ZIPFoundation.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/ZIPFoundation"; - sourceTree = ""; - }; - C1993320C66325DEC09EE7DE95976D1F /* Settings */ = { - isa = PBXGroup; - children = ( - 8AC4B57FB834CD3FE6380801D726D436 /* RDEPUBReaderConfiguration.swift */, - C240F5A5D602DF39562C908A425EDCF3 /* RDEPUBReaderSettings.swift */, - 86EDE1B29348DC15D6122E9FCF98DC42 /* RDEPUBReaderSettingsViewController.swift */, - A7AE5609FB5D93807FB8ADD05770EBD7 /* RDEPUBReaderTheme.swift */, - ); - name = Settings; - path = Settings; - sourceTree = ""; - }; - C88655D5F0DC56E04DCFE3803713EDB7 /* Notes */ = { - isa = PBXGroup; - children = ( - F43D341014C0A3261943902F0C6D7A47 /* RDEPUBNotePopupCoordinator.swift */, - 988C218F8E7B50E498B5A44BFE164678 /* RDEPUBNotePopupViewController.swift */, - ); - name = Notes; - path = Notes; - sourceTree = ""; - }; - CE79C46AB83D5ADB696E51F586C0BD5B /* Support Files */ = { - isa = PBXGroup; - children = ( - DA93674B4C34DA54D242189AEEAF99FE /* DTFoundation.modulemap */, - 6D211ACA62A5B241A668A682054310DE /* DTFoundation-dummy.m */, - 856FED9E82D238C3694CC665594928A4 /* DTFoundation-Info.plist */, - 9F02C3AC85C88DDA0DB8A9EECF07DC35 /* DTFoundation-prefix.pch */, - E6AD45B90D08BACAF3AF76AE40BBCC10 /* DTFoundation-umbrella.h */, - 2A39B1AC101FC87E52C5110F072FEA07 /* DTFoundation.debug.xcconfig */, - 039B47D5CF4FDEA47C608CF07378D3DF /* DTFoundation.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DTFoundation"; - sourceTree = ""; - }; - CF1408CF629C7361332E53B88F7BD30C = { - isa = PBXGroup; - children = ( - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 89B543FBD83F25016955F4C6944803DD /* Development Pods */, - 35E526B6E4CA6A7E89FE8C5A5B1F2259 /* Frameworks */, - 4DEB1352F0064F93A274DDB2378895FC /* Pods */, - A60C9476C4F4CB970063579359A474EC /* Products */, - 994C39A644C0722C7A9E97AB46DB8965 /* Targets Support Files */, - ); - sourceTree = ""; - }; - D12D6BCBD1CDEB43C5A3A503D4303C0C /* RDEpubReaderView */ = { - isa = PBXGroup; - children = ( - 4851457CCDD4EA7C57B379138A7478E1 /* cssInjector.js */, - 6047CC6474064B5DBC63961634438A6B /* epub-bridge.js */, - CD4C8B83118F25943DE8FBCD85F54B81 /* epub-fixed-layout.html */, - 105CB7B728D10FAF3A24822B65E01EE2 /* rangy-core.js */, - 58557168DB1E78D1B4AF6C29B679CB21 /* rangy-serializer.js */, - BA9DCAAE8105CEA9A378DC9A7282CCBC /* WeReadApi.js */, - F1162FA50CA992FE5732F460227AB7DF /* wxread-dark.css */, - 5964D41F9024DDA6DA0E1B06D5A628DE /* wxread-default.css */, - 23711E614B27F6F6EE187EDBFEFAAE38 /* wxread-replace.css */, - FEEC0D985E61911DD98BBA2737107E1C /* wxread-replace-latin.css */, - 52CE2AD2DE3BF695540E186558566473 /* AI */, - E8ABF893717437BDF37DE81B6A56C9B8 /* DocumentFormats */, - 9416704F207813616C70A5A0886FC2FD /* EPUBCore */, - 38F3D0A72B28BB0AA50CEA52EE23D389 /* EPUBTextRendering */, - 4CC69C9304EF386C301DEFC2A1C8E4B8 /* EPUBUI */, - 1F597F93F3AE569C791DF230C8FEC153 /* Pod */, - 18468FD2062F926F39737EFE4390AF03 /* ReaderView */, - 84BB63EEC92C4792477AE6A3F7F78099 /* Speech */, - 2D608F4FD3DB3DC4A32B10CFE7E001B0 /* Support Files */, - ); - name = RDEpubReaderView; - path = ../../Sources/RDEpubReaderView; - sourceTree = ""; - }; - DE3469A75F6A762C27041901AF44771A /* Typesetter */ = { - isa = PBXGroup; - children = ( - F74C359E556A8876EF09A01201FB0403 /* RDEPUBAttachmentNormalizer.swift */, - 498E8B4F4F6A151C181647CACD6F76DA /* RDEPUBCFIMarkerInjector.swift */, - C34C80F5248BF6ED37B94686518B46EB /* RDEPUBDecryptingImageAttachment.swift */, - 8F91B0C7F09F04D73718237F3B40697E /* RDEPUBFontNormalizer.swift */, - AAFD4EAE169F3144D806A519A51A90CA /* RDEPUBFragmentMarkerInjector.swift */, - 5AE838E20F857F2CC3224F4B11A9399E /* RDEPUBHTMLNormalizer.swift */, - 901F68C92C3CA04787387C026ECAD9A2 /* RDEPUBRenderDiagnosticsCollector.swift */, - 27A96DA3DBC26B10F7E433D58D93F480 /* RDEPUBSemanticMarkerInjector.swift */, - 35113955C9D390BAC3B55BD96F596650 /* RDEPUBStyleSheetComposer.swift */, - 1A0605D275609C02D0D78521B2B2F2B8 /* RDEPUBTextRendererSupport.swift */, - B6E3BE0BCB1910EB53E36DDC696E26A0 /* RDEPUBTypesettingPipeline.swift */, - E325739D6639B25FAA6FE5412DE749DD /* Compatibility */, - ); - name = Typesetter; - path = Typesetter; - sourceTree = ""; - }; - E0FC55DB56DA89CE8132DB26EFAD6331 /* NaturalLanguage */ = { - isa = PBXGroup; - children = ( - 4D908F35D94E51D89507601431AC05B9 /* RDAINaturalLanguageAnalyzer.swift */, - 62F3A858FD7165A3AEBBCA78E105DB73 /* RDAINaturalLanguageSemanticScorer.swift */, - ); - name = NaturalLanguage; - sourceTree = ""; - }; - E325739D6639B25FAA6FE5412DE749DD /* Compatibility */ = { - isa = PBXGroup; - children = ( - 5DACBC0641FFC14D7F0309DD76DA75F3 /* RDEPUBCSSCompatibilityLayer.swift */, - 18F8C909773BAAEE76086E976B096FDE /* RDEPUBFontFallbackResolver.swift */, - 1D945C6720DC6601B9B8FA83EE37E965 /* RDEPUBStyleCompatibilityModels.swift */, - ); - name = Compatibility; - path = Compatibility; - sourceTree = ""; - }; - E623FE8E2C5104538087D16EA82D01FE /* iOS */ = { - isa = PBXGroup; - children = ( - AFD7E6FDEB959ED4BCBF686887E2BCE4 /* AVFAudio.framework */, - 0E198715507CC19E698253E47DA96954 /* CoreGraphics.framework */, - 443E44FE90506BEC3DFBB838EA344E2B /* CoreImage.framework */, - 5FB8D88DF51900F42796061036A2BC93 /* CoreText.framework */, - 638FEA4EDCBFA6A77620B0068D50175C /* CryptoKit.framework */, - 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */, - B73DC0FE59A501CF1EBF64C6ABA20417 /* ImageIO.framework */, - 1D0CB14225ACB0ECDF2CAD95CDA30DD2 /* MediaPlayer.framework */, - 2060195F94C630A87E7A2F7B08B732D6 /* NaturalLanguage.framework */, - 4A6185F233EFF0ED894B7128B2B09821 /* PDFKit.framework */, - BF67AACE84A77AEC6F9CED48AA5BAFDC /* QuartzCore.framework */, - 609A5F780ABE1ABCF9F5BB40419E506A /* UIKit.framework */, - FC1A75CC4E2F1A706E081BDEDDEECC43 /* Vision.framework */, - ); - name = iOS; - sourceTree = ""; - }; - E8ABF893717437BDF37DE81B6A56C9B8 /* DocumentFormats */ = { - isa = PBXGroup; - children = ( - A9A49256901179CB08DE0A320BF1D7BE /* RDCBZReaderController.swift */, - D874813FB2A01B629B5DD27CDA40D744 /* RDMOBIParser.swift */, - 2BDBCF238B3B355A20BD8C8FA1F4CE77 /* RDReaderDocumentFormat.swift */, - ); - name = DocumentFormats; - path = DocumentFormats; - sourceTree = ""; - }; - E9085F238564F395310AF033BBFA4A42 /* CFI */ = { - isa = PBXGroup; - children = ( - F00ED19C7AADAD7D6BD1E74A4A3236C3 /* RDEPUBCFI.swift */, - 9F873050819BDCAA6F32B3166C4ED9C5 /* RDEPUBCFICompatibility.swift */, - A141D6AF0DC4700DEB1835448CD930EE /* RDEPUBCFIDOMPathBuilder.swift */, - 135A0766D1D454304DFB4E2D541E3883 /* RDEPUBCFIError.swift */, - 340ED4F9AD1A9332EABEC511A49FD18A /* RDEPUBCFIGenerator.swift */, - 8EE34177DA17E8A2A99610C136D802C2 /* RDEPUBCFIMap.swift */, - 861BA9ED43C06A4CF6845176A27A14E9 /* RDEPUBCFIParser.swift */, - 400E1D62DDD3EBA94D28BCBAEEB8278D /* RDEPUBCFIPath.swift */, - 02CD7653F0EA5B7E1FC6930042F2FC7A /* RDEPUBCFIRange.swift */, - B48683C68BD7645B716F54066EFA211F /* RDEPUBCFIRecoveryEngine.swift */, - BB7C568B890F636C0EFDCC12139EEC9A /* RDEPUBCFIResolver.swift */, - 743D878AA7644CDEA20992BC2F1B2E1A /* RDEPUBCFISerializer.swift */, - 674945CC36054ED9B857A60EACE06070 /* RDEPUBCFITextAssertion.swift */, - 0B846342956B3700F458ACA24E534E17 /* RDEPUBCFIUtilities.swift */, - ); - name = CFI; - path = CFI; - sourceTree = ""; - }; - EC1DF5C41F0676128C483B9B7B6368BB /* UIKit */ = { - isa = PBXGroup; - children = ( - 50E9C6F457FD3662DF4FC74CA5ACB962 /* DTActivityTitleView.h */, - 702AB4F450076D82E264C7AF93A45F14 /* DTActivityTitleView.m */, - 81B4314CBEDA71647A929517B936613F /* DTCustomColoredAccessory.h */, - D3A4BA792340D151ECB734018B2FD3EF /* DTCustomColoredAccessory.m */, - 9678265F1949A0F038F13D422F2B55FD /* DTPieProgressIndicator.h */, - 973C2C363B09BC1E49983C6826A623E2 /* DTPieProgressIndicator.m */, - BAC3BCDBDD88D30A3F51094944FB70FC /* DTSmartPagingScrollView.h */, - 7C1C6E107AA4540639C1ED1E7741CF07 /* DTSmartPagingScrollView.m */, - F9C223BB14280E813122F7F44DDD64F3 /* DTTiledLayerWithoutFade.h */, - 188A763544B134CC1004ECB7380538D7 /* DTTiledLayerWithoutFade.m */, - 8E16B563D3E20D4C0FB3C36350F2A330 /* NSURL+DTAppLinks.h */, - 6DA7955406639DE39E1FD953D882301E /* NSURL+DTAppLinks.m */, - 18AACA176C2E9FDB2B4834B426AC6368 /* UIApplication+DTNetworkActivity.h */, - 309D2521D7B9A10F86DA3F6BE7FB37B1 /* UIApplication+DTNetworkActivity.m */, - 2BD77848C77F7674193EDA5C1F18DE6A /* UIImage+DTFoundation.h */, - B5E7F56675C029BC561A7EFB55EF0041 /* UIImage+DTFoundation.m */, - 60052288EBFD0DEA0CD594641192FB5C /* UIScreen+DTFoundation.h */, - 9E4731BA187C02CDA816054F1F2BE70D /* UIScreen+DTFoundation.m */, - 3124E174D81A28717086F17445BED5BB /* UIView+DTFoundation.h */, - A1A3A81081A2422058887BCEEAA78C9D /* UIView+DTFoundation.m */, - ); - name = UIKit; - sourceTree = ""; - }; - F0B5602D4D4DEF32DA9FFEAE235178C9 /* DTHTMLParser */ = { - isa = PBXGroup; - children = ( - F78033C34E8C1FAD3B27FFC4F959A611 /* DTHTMLParser.h */, - 65806394BC872987207CCB0FB587E3B1 /* DTHTMLParser.m */, - ); - name = DTHTMLParser; - sourceTree = ""; - }; - F6622CD8178FE552BA5A2D887FCCA98D /* RDPDFReaderView */ = { - isa = PBXGroup; - children = ( - B329946AD586BB80865C46BC7ADAF9A9 /* AI */, - 23EEF1F245171001FD8C637D33393E98 /* Pod */, - 18E044FA60A4142CAEBBA1BA8B351AF0 /* ReaderView */, - F6A7324D4ED1CF7A7EE71045C88E5B38 /* Sources */, - 5788D3728DAFD201F8BDC34C43323168 /* Speech */, - 3D6BCAC12147FE8B0B02B30D3A5C3F54 /* Support Files */, - ); - name = RDPDFReaderView; - path = ../../Sources/RDPDFReaderView; - sourceTree = ""; - }; - F6A7324D4ED1CF7A7EE71045C88E5B38 /* Sources */ = { - isa = PBXGroup; - children = ( - 4419BC4EF1BB72BD430008215C2194B1 /* RDPDFKitPageProvider.swift */, - C91AB03142606446D515451D75613853 /* RDPDFReaderAnnotationEditorViewController.swift */, - E91A6DF5577800E7F0CB647061DB03E5 /* RDPDFReaderAnnotationListViewController.swift */, - BB7C3A637594FCD8D6F09237F5103A39 /* RDPDFReaderChromeViews.swift */, - A51CF84AF3FB536008E31CBC800E12B8 /* RDPDFReaderContainerView.swift */, - F01A20D999E550EFA3C472C3A20E6A90 /* RDPDFReaderContracts.swift */, - 16957235ACD001BED6FBC8A1D2CB5BA5 /* RDPDFReaderDebugViewController.swift */, - 0D15E11E01B7F344DD8863CBBC543A77 /* RDPDFReaderDrawingCanvasView.swift */, - DFBBED2FC1668912DBF7592720CC14A4 /* RDPDFReaderDrawingLayersView.swift */, - 75FC55A17D1CCC4C4BEB88B146B790D8 /* RDPDFReaderDrawingToolbar.swift */, - 6C9532C775F9C0F2DDE745981A3E5BD2 /* RDPDFReaderHighlightOverlayView.swift */, - 48D4FB95327A55188B4EE105C47E7090 /* RDPDFReaderImageTextLayerView.swift */, - 1A4F73DDFA534B5DDC38C9044FF275E0 /* RDPDFReaderImageTextRecognizer.swift */, - BBED33030719998F00A5173D3C466BD8 /* RDPDFReaderKitView.swift */, - CF159AB510600EA0CD9EAE58F29A6582 /* RDPDFReaderNavigationPanelViewController.swift */, - 4B3397616AD34F6B89948DEBE139C7C5 /* RDPDFReaderNavigationView.swift */, - 54F2C8B38BF0106D946BEE9F7E854D08 /* RDPDFReaderPageView.swift */, - 9D87DBCF57F23239B520B73B9C238F64 /* RDPDFReaderPanelPresentation.swift */, - D9B368C95FB7C2727A7CA452242CB904 /* RDPDFReaderPersistenceStore.swift */, - F1B84BFB1ACB4057989E6AE9A039B3AC /* RDPDFReaderSettingsPanelViewController.swift */, - F939D46D9D49EF5FCAFCB16F1E35E23E /* RDPDFReaderSettingsView.swift */, - 7E9BFD9290BCB2009DB319A63935EF99 /* RDPDFReaderTheme.swift */, - 4F654C6659A3FDE4C3E08BBDD2C01CCF /* RDPDFReaderViewController.swift */, - 8A41D37F86EFC816F7478316843069DA /* RDPDFZoomablePageView.swift */, - ); - name = Sources; - path = Sources; - sourceTree = ""; - }; - FCA201DAA29B65124F3AD5D2A6291B0F /* FoundationModels */ = { - isa = PBXGroup; - children = ( - 27F4AF07E5CBA7B0CC54553D55983D1F /* RDAIAppleFoundationModelsProvider.swift */, - ); - name = FoundationModels; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 29CB77F5EC62298B8E19FEFFD791AEAD /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 0ABC4D62588EABAA636441FD9A82C940 /* CTLineUtils.h in Headers */, - 83A4BC9FE4765C9B848DD4925D99F362 /* DTAccessibilityElement.h in Headers */, - EDA269B595D70EC2B9D81DC890157D63 /* DTAccessibilityViewProxy.h in Headers */, - F006F73F17F2E3CC0E7852E9357BA946 /* DTAnchorHTMLElement.h in Headers */, - DFB5A1C64C7908FD05BEFF7C7B571353 /* DTAttributedLabel.h in Headers */, - DBCA42F7E1697F4EC82E0E7C9657851D /* DTAttributedTextCell.h in Headers */, - 35C5BE59CA712CCDF93D6E7010D93883 /* DTAttributedTextContentView.h in Headers */, - 730ACB99580C5982DC08D50FC5084D41 /* DTAttributedTextView.h in Headers */, - D82DDA4C1E5C4D5378A9E5EA3F8E9DFE /* DTBreakHTMLElement.h in Headers */, - 5D8D65121E87E419D8D2F23F8AF43673 /* DTColor+Compatibility.h in Headers */, - C8F753B56A6C4D2A938B6EA68CF522F8 /* DTColorFunctions.h in Headers */, - B94CD41727DFCA8791EED8FB2CA397DD /* DTCompatibility.h in Headers */, - 9DE04C83A68C7512C0A860FFF5CEC113 /* DTCoreText.h in Headers */, - D526E03C098DA6CF8F01C1BC126C9BBA /* DTCoreText-umbrella.h in Headers */, - C9DD05EF2D27FFEBFA7BF6F437168501 /* DTCoreTextConstants.h in Headers */, - 2203356EEA94A9172BC7902923E43CBE /* DTCoreTextFontCollection.h in Headers */, - 7A48CDFB40202EFD09A2A9AB0EE0770D /* DTCoreTextFontDescriptor.h in Headers */, - DD73CD0E5148961D1ABD80E050122314 /* DTCoreTextFunctions.h in Headers */, - AC7000465258822B466855B12F1F97A3 /* DTCoreTextGlyphRun.h in Headers */, - 60532A2E06CCFF814933D2FAE6793AE9 /* DTCoreTextLayouter.h in Headers */, - C72CE4B974DFAE2C3037D425EB559314 /* DTCoreTextLayoutFrame.h in Headers */, - 7027EF8D77D4082C1BB9B80FF61FCADC /* DTCoreTextLayoutFrame+Cursor.h in Headers */, - 5D03A5B9DC067875CFEC9D4EA7B059E8 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h in Headers */, - 5582735073EBB9F5078E6E8AEEFB646A /* DTCoreTextLayoutLine.h in Headers */, - 31B805C50E0E187E6242B0C878C4D30D /* DTCoreTextMacros.h in Headers */, - B8332F36582F7A001FE85A8D54B27C9E /* DTCoreTextParagraphStyle.h in Headers */, - 15A7ED15DA03DD3B9F26A017D270D1C2 /* DTCSSListStyle.h in Headers */, - 7821105EF320619993B3BF7FB90C7ADA /* DTCSSStylesheet.h in Headers */, - 992B7C8C824B5EA190EF1DB096064DB7 /* DTDictationPlaceholderTextAttachment.h in Headers */, - 45133E47CC5FBCF78BFCD38981BA027F /* DTDictationPlaceholderView.h in Headers */, - 19649ED312D92A6F5D2D6AF4E540CE75 /* DTHorizontalRuleHTMLElement.h in Headers */, - 61BE3607EABD2657BC71AF8ACB1C25D4 /* DTHTMLAttributedStringBuilder.h in Headers */, - F0F631056BADA32253528247DF493272 /* DTHTMLElement.h in Headers */, - 5E90EBD876ED4E50AB890FB56C4BFA57 /* DTHTMLParserNode.h in Headers */, - 2445709667CB3820E51CD4AA915E6943 /* DTHTMLParserTextNode.h in Headers */, - 94F5846979DBC90E2B646E975F5ECBA8 /* DTHTMLWriter.h in Headers */, - AF7A1DC953992A149CB0815C90769529 /* DTIframeTextAttachment.h in Headers */, - 0B6FA1F22150D7F8B1865F41FF70C922 /* DTImage+HTML.h in Headers */, - DA5B51E5D80C161D2902B6FC60DA5EC8 /* DTImageTextAttachment.h in Headers */, - 109458F9D48FD4F381F0E40E2DB3D91C /* DTLazyImageView.h in Headers */, - 4F50C703427747B88405080B221349A1 /* DTLinkButton.h in Headers */, - 82119A0DC4981CC2AF389C7C4CC08186 /* DTListItemHTMLElement.h in Headers */, - 67AE2AC8D9B961D45871077774E11FD3 /* DTObjectTextAttachment.h in Headers */, - 528DBAC7FCEFC7D6575C1F6CB4399AEA /* DTStylesheetHTMLElement.h in Headers */, - 372E907DF08263D0E1AF904F1FCD66EB /* DTTextAttachment.h in Headers */, - 343E794F88AA503F5139C2244DC1A2B1 /* DTTextAttachmentHTMLElement.h in Headers */, - 51A1B5800D23C355B1712E8D1103780C /* DTTextBlock.h in Headers */, - 8A35CC67F0AA6B26397C10D756EA34E8 /* DTTextHTMLElement.h in Headers */, - 92C59F96D443525E8833676479FA60C5 /* DTVideoTextAttachment.h in Headers */, - A72E9F983E5BBFA7485EFB482B80E89E /* DTWeakSupport.h in Headers */, - B7BDD79FC06A1E4E0E17592860844108 /* NSAttributedString+DTCoreText.h in Headers */, - 3DC8F9474FC6A0BB7E81A703CE958966 /* NSAttributedString+DTDebug.h in Headers */, - 8099F1E613A15275EF5FC59ED3C73579 /* NSAttributedString+HTML.h in Headers */, - 6634D568E49F5610242E1454680E5885 /* NSAttributedString+SmallCaps.h in Headers */, - 9854DC3F1763B6272C2EA3FC6EC40B95 /* NSAttributedStringRunDelegates.h in Headers */, - 8B405CE13E7D718A9340A82B52766AB2 /* NSCharacterSet+HTML.h in Headers */, - 987538B07E11741899878EA8BC947F51 /* NSCoder+DTCompatibility.h in Headers */, - A132A0C9EB13B65FB886B11AA2E6304C /* NSDictionary+DTCoreText.h in Headers */, - 03D90C831397E8636A33CE557024A136 /* NSMutableAttributedString+HTML.h in Headers */, - 8A0A0FB23DB0021ADC9AD0D90631883A /* NSMutableString+HTML.h in Headers */, - 7459A1656EDC29D685073B83561B783E /* NSNumber+RomanNumerals.h in Headers */, - 130C3A85D9F9F445222C2E31EC245B0A /* NSScanner+HTML.h in Headers */, - EE4F0992A0F597320FF7BDE4691D0FD4 /* NSString+CSS.h in Headers */, - CC8B8F3D758E98B51F69EDFAA69663A4 /* NSString+HTML.h in Headers */, - 4E4939F6592B06D2CA764DCACFB47871 /* NSString+Paragraphs.h in Headers */, - 0FCBC8C64D8862F2A0E8794EDADDECBD /* UIFont+DTCoreText.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3880AAF3B1B181F324889A65137B30E0 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 61F79BC766893CDF8A84F85144D54E34 /* DTActivityTitleView.h in Headers */, - 2E86C5D5A6A8ECE76FC710F5A7839A4B /* DTAnimatedGIF.h in Headers */, - 8C8B2A92E5D2BFF214F751639F96DF33 /* DTBase64Coding.h in Headers */, - F16A27973954A3E61FAD73EFC6640B68 /* DTBlockFunctions.h in Headers */, - D9D5695FC5B0818E6FF40AD81BBDE87D /* DTCompatibility.h in Headers */, - 2FC2EC825BFB520C931A20AD3C93DAD0 /* DTCoreGraphicsUtils.h in Headers */, - C22BD9712D5C4C3A6606C9954E16EA3C /* DTCustomColoredAccessory.h in Headers */, - 0CA21E82B6B347BD2370DD2FEFDE44C1 /* DTExtendedFileAttributes.h in Headers */, - 7E351271D44E8B0D5CF5AC5FC3BB5267 /* DTFolderMonitor.h in Headers */, - 3BC5755AD310406848ABECE1CA3F246D /* DTFoundation-umbrella.h in Headers */, - FEB253C1F43DB49770C020219F0D382C /* DTFoundationConstants.h in Headers */, - 728B81996929B1861280CF1FE49C25BA /* DTHTMLParser.h in Headers */, - 8B1D67AF4E9CA4C0401395ED3A381816 /* DTLog.h in Headers */, - 820BE41FD46A46EFA47DCB51E36B3348 /* DTPieProgressIndicator.h in Headers */, - 2B258179860AC499B50883A6410CEE22 /* DTSmartPagingScrollView.h in Headers */, - A075DF2CFDA6B4FC6C13B70594D917EE /* DTTiledLayerWithoutFade.h in Headers */, - 74C2C8965437DD15A1DF7393274EE945 /* DTVersion.h in Headers */, - AE7AB67AEC31EEC92E61BAE9BE952389 /* DTWeakSupport.h in Headers */, - AD0EAEA87AF94B2516AF25C962B1AB60 /* NSArray+DTError.h in Headers */, - 1C01105DE2BEF1F1049F8F0B270F8AFA /* NSData+DTCrypto.h in Headers */, - F3B627391C748B025311A530BEADD8D8 /* NSDictionary+DTError.h in Headers */, - F6E3A67CA745A6087FFCDBA16B856134 /* NSFileWrapper+DTCopying.h in Headers */, - AEDF5207E4F50F04EE2175D6491153BB /* NSMutableArray+DTMoving.h in Headers */, - 7CEFDC81E5299572FF92465093A490F8 /* NSString+DTFormatNumbers.h in Headers */, - 70AE1C2638D37EFABDC722F9EEFE35C4 /* NSString+DTPaths.h in Headers */, - B777B94871B481D05AA3E0AA2CB24294 /* NSString+DTURLEncoding.h in Headers */, - ED9E121663FA208E8DF83A62EF140304 /* NSString+DTUtilities.h in Headers */, - F2C88E61F4802BC84DF54D9DBBB2EDC6 /* NSURL+DTAppLinks.h in Headers */, - 7C074EB51A531B62A6EB9D8B825FFFFA /* NSURL+DTComparing.h in Headers */, - 46D4BDA7B3DB868CE98E5733017F3E86 /* NSURL+DTUnshorten.h in Headers */, - 8188B3342AF06DDB51B33015A01A2F40 /* UIApplication+DTNetworkActivity.h in Headers */, - 98EB67ADA2A245446B8A17B09E031AE1 /* UIImage+DTFoundation.h in Headers */, - ECDEFC0141EF16D989D43B83E54A9BD9 /* UIScreen+DTFoundation.h in Headers */, - 768D72C3538A9E008887345F76DA4D82 /* UIView+DTFoundation.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 44C1420C6D84F4B642A502E7BFDA3E99 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 0030FDF2E834088639D9C73A89669CC1 /* RDPDFReaderView-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 84BD9781C18EA51526C6CA88BA58DF12 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 859D2BC60B7EAEFD562E13D22F1D836D /* ZIPFoundation-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 88893EF6AD0938D0EB36A32169D0DC58 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - B4886245B032CAA636E059E4A829FB6C /* Pods-ReadViewDemo-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B3E4855E64B423F71CCC8B448D4E49F6 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 063A88FB321E454069155A625FAC1A29 /* RDEpubReaderView-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B5AE11C4A0F087E3E12BD229195B0408 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 2D9F451FCE658C36FBD90A4B9FB6E807 /* RDSpeechReaderView-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BC871C6B9542078FDAAC019176925B44 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 29DA059FFB3372A3405B1F483D9F9DDF /* RDAIReaderView-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E12779AE77CEC421C1AD0A727E8D0D43 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - B2166C7F52325B76D2854EBAF3B4A4F9 /* SnapKit-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */ = { - isa = PBXNativeTarget; - buildConfigurationList = 88DFAB0C5D472D4A00EA6904F6B72B8C /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */; - buildPhases = ( - D7B482915F333DB053E9B3FF533B0E8B /* Sources */, - C9EC9582E359734B524E8B4D9A1F2BDC /* Frameworks */, - 815F09C1BEF66826AB7211C15D3A5AAA /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "DTCoreText-Resources"; - productName = Resources; - productReference = F4E2B1AC73977F10254628C0B7EBE38F /* DTCoreText-Resources */; - productType = "com.apple.product-type.bundle"; - }; - 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = ACF0A1F60E8D8F76664F3C28A623BC64 /* Build configuration list for PBXNativeTarget "SnapKit" */; - buildPhases = ( - E12779AE77CEC421C1AD0A727E8D0D43 /* Headers */, - 3809A6B5AA40EF4B7F0DD5ED5C2935D8 /* Sources */, - 3391796EF339E0AEC7120220AC387870 /* Frameworks */, - B53CF50EEBDADAAA060BF8BAB83B7C59 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - F2EC52C5D4A57624BDD402CBAE177214 /* PBXTargetDependency */, - ); - name = SnapKit; - productName = SnapKit; - productReference = 979486118B3E90C08386079D57962701 /* SnapKit */; - productType = "com.apple.product-type.framework"; - }; - 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */ = { - isa = PBXNativeTarget; - buildConfigurationList = 405AA89C9ECEED358343DF9D47442DFD /* Build configuration list for PBXNativeTarget "RDAIReaderView" */; - buildPhases = ( - BC871C6B9542078FDAAC019176925B44 /* Headers */, - D73049BF56BC8CA1EDE0BB99E8536406 /* Sources */, - FAAA7EB0241A5F47FCDCE80019C03BE1 /* Frameworks */, - 51DEF707B1999C5A4A6966EECE237897 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = RDAIReaderView; - productName = RDAIReaderView; - productReference = BD727D8D750906C2FCA03FA988C99329 /* RDAIReaderView */; - productType = "com.apple.product-type.framework"; - }; - 352EC96AFAEE0EDF74FD76A958827133 /* RDPDFReaderView */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7A3DCEA78F09A537F1401A969F58D46A /* Build configuration list for PBXNativeTarget "RDPDFReaderView" */; - buildPhases = ( - 44C1420C6D84F4B642A502E7BFDA3E99 /* Headers */, - 315C3E209269EF9DCC01F9A09A749BA9 /* Sources */, - B3344B1196C556EC6C893EF8620F9CC7 /* Frameworks */, - 1EA154A90696133BD237B7843D460A2D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 63FFF77F305A945F6DF0D41454036F57 /* PBXTargetDependency */, - CF63D823A1BCA96531A6D02A6B07E4A5 /* PBXTargetDependency */, - 42C1A7E2942980AB6B984615E00902D5 /* PBXTargetDependency */, - ); - name = RDPDFReaderView; - productName = RDPDFReaderView; - productReference = EE10390ED67255ABE5E4D1A1B1EF07F5 /* RDPDFReaderView */; - productType = "com.apple.product-type.framework"; - }; - 87E2B8A29E8A66B9205D8A41F66E4927 /* Pods-ReadViewDemo */ = { - isa = PBXNativeTarget; - buildConfigurationList = E75535D74C1EF460F963375B59850559 /* Build configuration list for PBXNativeTarget "Pods-ReadViewDemo" */; - buildPhases = ( - 88893EF6AD0938D0EB36A32169D0DC58 /* Headers */, - 7F0E1E43783433272F33954F422787AB /* Sources */, - 15EFC3631BB58E1F211F61EC3577AE01 /* Frameworks */, - A1FC8CB05F1E98A37F4AE7A224D7FBAC /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 9E4845C7BD02B359C6C66763674EF25B /* PBXTargetDependency */, - 52BCC4A19191B906F794A89BB6DC4E43 /* PBXTargetDependency */, - 8C316BD3F59179826FD212F31764533B /* PBXTargetDependency */, - 8CCD3E65771647DD50CBBC1AE1B84CDE /* PBXTargetDependency */, - 5BA37A3BEA7B80B3899F5AFAF7286CA0 /* PBXTargetDependency */, - D1157C5ACAE4229432F1CE0A595803CF /* PBXTargetDependency */, - 1F74E8ECF506A2E13D69E00CB12EAEBD /* PBXTargetDependency */, - FCEC1B8D28905A556834FE6F4E5FA86F /* PBXTargetDependency */, - ); - name = "Pods-ReadViewDemo"; - productName = Pods_ReadViewDemo; - productReference = 78EA0DF405F8465A86BFD3DDFD2EC295 /* Pods-ReadViewDemo */; - productType = "com.apple.product-type.framework"; - }; - 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */ = { - isa = PBXNativeTarget; - buildConfigurationList = DE7AB0E01615B50F23381FFAEFF20E5B /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */; - buildPhases = ( - 3796DB175D65E1B8CB06726B730C3365 /* Sources */, - B44B7AA9530B98040DD47CBDA92139EA /* Frameworks */, - F928DB8600445DB0B949E5B562A2D359 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "SnapKit-SnapKit_Privacy"; - productName = SnapKit_Privacy; - productReference = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */; - productType = "com.apple.product-type.bundle"; - }; - 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */ = { - isa = PBXNativeTarget; - buildConfigurationList = 90D5F965BB40CB8C886D5F80738D76A7 /* Build configuration list for PBXNativeTarget "DTFoundation" */; - buildPhases = ( - 3880AAF3B1B181F324889A65137B30E0 /* Headers */, - FB4EF7F1D5A790146D0A8C362A41E9EB /* Sources */, - 65386CE6376B0C3297DCF6B31658D126 /* Frameworks */, - 18D2ACB499AFFB915BA59E1DB671C8EA /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DTFoundation; - productName = DTFoundation; - productReference = D1E89A31867FF1FB44B4B999988F1B82 /* DTFoundation */; - productType = "com.apple.product-type.framework"; - }; - AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */ = { - isa = PBXNativeTarget; - buildConfigurationList = B4EFCC222F2A780FF376179B1C60098D /* Build configuration list for PBXNativeTarget "ZIPFoundation" */; - buildPhases = ( - 84BD9781C18EA51526C6CA88BA58DF12 /* Headers */, - B992E8A05E2B8924BE5AD80B55132A31 /* Sources */, - BFB3736B95B19241674697B82F71A24F /* Frameworks */, - DCE6FF4AC65B70A5DB495AEF2EA06700 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 535BA5CE3CED388B6D328526C1EBE529 /* PBXTargetDependency */, - ); - name = ZIPFoundation; - productName = ZIPFoundation; - productReference = 48A4A6EDC08C8AC933D0DCD507E9D173 /* ZIPFoundation */; - productType = "com.apple.product-type.framework"; - }; - B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0C6B1944226D4396EB72162F792F7CD2 /* Build configuration list for PBXNativeTarget "DTCoreText" */; - buildPhases = ( - 29CB77F5EC62298B8E19FEFFD791AEAD /* Headers */, - F5FD889341D3D1DCCA58EA12D78CF9E8 /* Sources */, - 6F1DC7DF5E89C820D04E068D56B1D0EF /* Frameworks */, - 378BF991D3B318AACBF6D78F57218233 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - FBF6F2679B3714B32673C54517297A6D /* PBXTargetDependency */, - FF2A24A406F8D7B05FAB19FF9BDFB00A /* PBXTargetDependency */, - ); - name = DTCoreText; - productName = DTCoreText; - productReference = EDA6D5D7D0A04878EE78FAAE94F65068 /* DTCoreText */; - productType = "com.apple.product-type.framework"; - }; - C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */ = { - isa = PBXNativeTarget; - buildConfigurationList = EB7FE7AF01BFFEBE77A46FDC98F484EA /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */; - buildPhases = ( - 42D6C5C2970F2E5A7E40A33E67F081A4 /* Sources */, - 1F7EF4E26D92CE93E8A9095F2249D759 /* Frameworks */, - DA6D65AA52555577B4F984C423885E0A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "ZIPFoundation-ZIPFoundation_Privacy"; - productName = ZIPFoundation_Privacy; - productReference = CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */; - productType = "com.apple.product-type.bundle"; - }; - CC23E8498E4F0DDEB3C1A2AA05B8ACF2 /* RDSpeechReaderView */ = { - isa = PBXNativeTarget; - buildConfigurationList = ADFB5EC9B1DA991B04C8903769EF834E /* Build configuration list for PBXNativeTarget "RDSpeechReaderView" */; - buildPhases = ( - B5AE11C4A0F087E3E12BD229195B0408 /* Headers */, - 7B1A9147AD781B8C85299490F212E46A /* Sources */, - E5E3B4295E71D5850733F3571A6D139C /* Frameworks */, - 59EDB5EA1A5FE10282A14A89D0598FD0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - E55650B2223C316B3097288B971F9456 /* PBXTargetDependency */, - ); - name = RDSpeechReaderView; - productName = RDSpeechReaderView; - productReference = B03E48EA4685C3F0EC2C0C5A2714C60F /* RDSpeechReaderView */; - productType = "com.apple.product-type.framework"; - }; - E07DDD766DCBF90486BCE6C2EA671E5E /* RDEpubReaderView-RDEpubReaderViewAssets */ = { - isa = PBXNativeTarget; - buildConfigurationList = 16A5B3C4A095036807F7094109F29449 /* Build configuration list for PBXNativeTarget "RDEpubReaderView-RDEpubReaderViewAssets" */; - buildPhases = ( - 541FFE865648B06764067D97C8898EB8 /* Sources */, - F9B4D1354C134B52E8C87C971743C7CE /* Frameworks */, - F65D4491AD52104702AA22E299F50E71 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "RDEpubReaderView-RDEpubReaderViewAssets"; - productName = RDEpubReaderViewAssets; - productReference = C8A6E90AB5E26049710E2C2404C28B9A /* RDEpubReaderView-RDEpubReaderViewAssets */; - productType = "com.apple.product-type.bundle"; - }; - FBCB57A3AEAAA3449B3F365930BC0977 /* RDEpubReaderView */ = { - isa = PBXNativeTarget; - buildConfigurationList = AB65638284CBD3373B8D5B6C1314CFFC /* Build configuration list for PBXNativeTarget "RDEpubReaderView" */; - buildPhases = ( - B3E4855E64B423F71CCC8B448D4E49F6 /* Headers */, - CCC0D335450A0E9051C1C7073A62FA83 /* Sources */, - 5EEBA8E20E44CA19A794938A2381523B /* Frameworks */, - 829E63FEF2D4F139817DF654BFFF142E /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 07407F12428F13D3E4006FC4CA276CE0 /* PBXTargetDependency */, - 219A38586F8223C049B64431795D2B04 /* PBXTargetDependency */, - 8F5AFC4AF9141D12FA46A946D211D7BF /* PBXTargetDependency */, - C262447253885048E17A57AF21378C64 /* PBXTargetDependency */, - FE1A32BF91015B0BAC298BA898CAA5DF /* PBXTargetDependency */, - 0818A35B3F5AFB1A0122EDC08DFCC0FB /* PBXTargetDependency */, - ); - name = RDEpubReaderView; - productName = RDEpubReaderView; - productReference = 01DCD1B42D40839F1C8DBBDB11EF09BA /* RDEpubReaderView */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BFDFE7DC352907FC980B868725387E98 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1600; - LastUpgradeCheck = 1600; - }; - buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 16.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - Base, - en, - ); - mainGroup = CF1408CF629C7361332E53B88F7BD30C; - minimizedProjectReferenceProxies = 0; - preferredProjectObjectVersion = 77; - productRefGroup = A60C9476C4F4CB970063579359A474EC /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */, - 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */, - 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */, - 87E2B8A29E8A66B9205D8A41F66E4927 /* Pods-ReadViewDemo */, - 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */, - FBCB57A3AEAAA3449B3F365930BC0977 /* RDEpubReaderView */, - E07DDD766DCBF90486BCE6C2EA671E5E /* RDEpubReaderView-RDEpubReaderViewAssets */, - 352EC96AFAEE0EDF74FD76A958827133 /* RDPDFReaderView */, - CC23E8498E4F0DDEB3C1A2AA05B8ACF2 /* RDSpeechReaderView */, - 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */, - 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */, - AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */, - C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 18D2ACB499AFFB915BA59E1DB671C8EA /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1EA154A90696133BD237B7843D460A2D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 378BF991D3B318AACBF6D78F57218233 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F5A424E67F41C4F7B830CE2F7E71570D /* DTCoreText-Resources in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 51DEF707B1999C5A4A6966EECE237897 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 59EDB5EA1A5FE10282A14A89D0598FD0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 815F09C1BEF66826AB7211C15D3A5AAA /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AB985A7411525C66F09A2386B75DA422 /* default.css in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 829E63FEF2D4F139817DF654BFFF142E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 35A02EFDD20399BE1910CB5C855BCBFA /* RDEpubReaderView-RDEpubReaderViewAssets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A1FC8CB05F1E98A37F4AE7A224D7FBAC /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B53CF50EEBDADAAA060BF8BAB83B7C59 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 6015E451BF1858D3DEAABC76AA62D950 /* SnapKit-SnapKit_Privacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA6D65AA52555577B4F984C423885E0A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ED439C8212BEA9A325731D47E029DB12 /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DCE6FF4AC65B70A5DB495AEF2EA06700 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 6622C4F4EAB0B5CAF9505377FD99AA2B /* ZIPFoundation-ZIPFoundation_Privacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F65D4491AD52104702AA22E299F50E71 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 890B44E459F47281270749B9556E84AF /* cssInjector.js in Resources */, - E08640A58BF20D612FB475697C49BCC4 /* epub-bridge.js in Resources */, - 9FB9830AD67375F837C5CF062E5BFB6D /* epub-fixed-layout.html in Resources */, - BCE13F950003B44D6DE4B0A3D73D4045 /* rangy-core.js in Resources */, - 6E11974227C5789EF307B73FD968E54F /* rangy-serializer.js in Resources */, - D0CBF9AF4D0A627745C22DA6500FE369 /* WeReadApi.js in Resources */, - 9717A7F4BC0C90F04397A1361BB7F71C /* wxread-dark.css in Resources */, - 52C7F205E10750FE3DB39E685D6B00B0 /* wxread-default.css in Resources */, - 2387E55634D5FB72111ACF2EEEBD6139 /* wxread-replace.css in Resources */, - 1359FECFF2E8215E574C69F0099D11F5 /* wxread-replace-latin.css in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F928DB8600445DB0B949E5B562A2D359 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7A0D1C65F575B626B24D92A841187495 /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 315C3E209269EF9DCC01F9A09A749BA9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2F4AB3D711200DAB6B8B0E6D5E3E9774 /* RDPDFAIContentProvider.swift in Sources */, - 64155589E0B98A2A533AEADA4F0411F7 /* RDPDFKitPageProvider.swift in Sources */, - 4682824DA120D16A9C1E5A409449D660 /* RDPDFReaderAnnotationEditorViewController.swift in Sources */, - F5BEFA1ECA945559A096787DFC7B5A27 /* RDPDFReaderAnnotationListViewController.swift in Sources */, - 5456493C65094838AD0F2BC39FDC7B41 /* RDPDFReaderChromeViews.swift in Sources */, - 996015E5109268820CBFDBD0374A42FC /* RDPDFReaderContainerView.swift in Sources */, - 906561FBE3727743E5F81F793D5EE210 /* RDPDFReaderContentCell.swift in Sources */, - 0E6CC1B4E893EB6D9D76FCCDD125F3CD /* RDPDFReaderContracts.swift in Sources */, - B6FA3A9062517BAFEF468F04B78A1F8F /* RDPDFReaderDebugViewController.swift in Sources */, - F94F155B9E380CCB319468C07B135C97 /* RDPDFReaderDrawingCanvasView.swift in Sources */, - 5271325F17912AE731F1FAF8D3328F6C /* RDPDFReaderDrawingLayersView.swift in Sources */, - 8731E6DFBE1CC958CE8B122D5144B3CC /* RDPDFReaderDrawingToolbar.swift in Sources */, - E647E758B0AB51A6070EC90FA56356D0 /* RDPDFReaderHighlightOverlayView.swift in Sources */, - 8CF55379C440B62AD7DAA78629264DD4 /* RDPDFReaderImageTextLayerView.swift in Sources */, - D8EE68FA80CC14F8DB7B5649BEEEEB6D /* RDPDFReaderImageTextRecognizer.swift in Sources */, - 2272682D201A6AB03AC748D5EE1B4C9C /* RDPDFReaderKitView.swift in Sources */, - D80A0D7409D41B929CB5C5ADB2FA123C /* RDPDFReaderNavigationPanelViewController.swift in Sources */, - 361808AE6FE4B0AD47DB34C9D1290C5C /* RDPDFReaderNavigationView.swift in Sources */, - 085826A323C90FB16A9380AD88E1E394 /* RDPDFReaderPageChildViewController.swift in Sources */, - 0A9D1BAF9EE83FDBA8B4976EEA453EFA /* RDPDFReaderPageView.swift in Sources */, - 792D5CAEC030F37770DFC2DBC1BC3773 /* RDPDFReaderPagingController.swift in Sources */, - FDDA135AA139B6C5E93628504593542F /* RDPDFReaderPanelPresentation.swift in Sources */, - 73CB1C47A368FB5FD420680227696815 /* RDPDFReaderPersistenceStore.swift in Sources */, - AE9C15A64DC56172E16CAAB607A13E00 /* RDPDFReaderSettingsPanelViewController.swift in Sources */, - FBC42097F09EB9AD8717663C7CA9FE41 /* RDPDFReaderSettingsView.swift in Sources */, - 8137EBB59B68FE44A292FAF24DE6DE37 /* RDPDFReaderTheme.swift in Sources */, - 9AC98ED3942DDCC434580B020478CCC1 /* RDPDFReaderView+CollectionView.swift in Sources */, - B396528BBA2B2BABAEB8F1D5E2727B32 /* RDPDFReaderView+Paging.swift in Sources */, - 5FF4E86CD0381F96E2E2785DE8857966 /* RDPDFReaderView+ToolView.swift in Sources */, - 241EA2AA99E27D96E4468289A8B02F42 /* RDPDFReaderView-dummy.m in Sources */, - 44B420AB0963FB65CA7734418F1E80E1 /* RDPDFReaderViewController.swift in Sources */, - 2EB84DBB152379A800758656C572218C /* RDPDFSpeechContentProvider.swift in Sources */, - 7154F8895FC65582EE371B109D94B2B3 /* RDPDFSpeechSession.swift in Sources */, - 42C418BB820EE1B51E1BB966F7D4A59A /* RDPDFZoomablePageView.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3796DB175D65E1B8CB06726B730C3365 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3809A6B5AA40EF4B7F0DD5ED5C2935D8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0A27A469DC24F223905DCC8182E2CA52 /* Constraint.swift in Sources */, - E6F3BD9FCDDF8FBEC32F6BDF22939CC7 /* ConstraintAttributes.swift in Sources */, - 6B67545C9C3B50F376199A953DAAF248 /* ConstraintConfig.swift in Sources */, - 3527805F1EAF4AA2D1C691835E0D3738 /* ConstraintConstantTarget.swift in Sources */, - 6F9CCC35918031FA93F8DB97E92E3C12 /* ConstraintDescription.swift in Sources */, - E08646A14732B835E43DC18A168EA094 /* ConstraintDirectionalInsets.swift in Sources */, - 672B4D141F08F37F31DB25A3B3C3436C /* ConstraintDirectionalInsetTarget.swift in Sources */, - 9EBDC835399A340B1DE8C9448CCB346F /* ConstraintDSL.swift in Sources */, - AAA2EC8CD4EDF537B897254CD24A9CC7 /* ConstraintInsets.swift in Sources */, - B6030124CAFB157D95FF3246A6FEEF3E /* ConstraintInsetTarget.swift in Sources */, - C4CB63E8E0A5742BA566A3EED0994390 /* ConstraintItem.swift in Sources */, - DCB762A2263C1E8FC37B8F949926649E /* ConstraintLayoutGuide.swift in Sources */, - BDC4A815A986D2DA80AFCD9912AFA9F8 /* ConstraintLayoutGuide+Extensions.swift in Sources */, - 5503E7E20C896418ECCDD315FA7F71BC /* ConstraintLayoutGuideDSL.swift in Sources */, - 4B119ECC1F5E2879EEBBECE73B885B5D /* ConstraintLayoutSupport.swift in Sources */, - D11141D3FE5BB9F8EDC8C4CB70560EA6 /* ConstraintLayoutSupportDSL.swift in Sources */, - 0EC04427BB9F77932E19591E8D37492F /* ConstraintMaker.swift in Sources */, - 786747640B55602D77885D5B3A6F5E03 /* ConstraintMakerEditable.swift in Sources */, - AE2B0DBA4EFFB8FC5D49290C93DFCD68 /* ConstraintMakerExtendable.swift in Sources */, - A3E6088B9121F949F6105C29F2709F5E /* ConstraintMakerFinalizable.swift in Sources */, - AE6162BF52609870B92F520029FF02D3 /* ConstraintMakerPrioritizable.swift in Sources */, - 146BDE9063EF5A1F0481FCEBD97046A2 /* ConstraintMakerRelatable.swift in Sources */, - 4A1F368BBA3E00391DFC147AEB4ABF08 /* ConstraintMakerRelatable+Extensions.swift in Sources */, - 40FFDE03700BDC58ED5577371EF237F2 /* ConstraintMultiplierTarget.swift in Sources */, - 7C403ABBEA121DBE2FDBC75076F2F6EA /* ConstraintOffsetTarget.swift in Sources */, - 71FA30F520F3977FCA0F2E7DDFD0849D /* ConstraintPriority.swift in Sources */, - 59023BFD93B4B99D464C75471795658D /* ConstraintPriorityTarget.swift in Sources */, - B7BEF6F32A272EE8E59CA3074A96269C /* ConstraintRelatableTarget.swift in Sources */, - 522C9D67313466AF5FAE800D0D20A1B8 /* ConstraintRelation.swift in Sources */, - 6FE61735A4634CFD8570656E8D0CE8F9 /* ConstraintView.swift in Sources */, - 11C1917887762E50D1E02382C46D9977 /* ConstraintView+Extensions.swift in Sources */, - 8F4547B8CE2A89A9EEE45E743F503BDD /* ConstraintViewDSL.swift in Sources */, - 74F65BAFF30DB1459C767CC1B79C267B /* Debugging.swift in Sources */, - 0A1404655C6339B0D10F01ECC970E852 /* LayoutConstraint.swift in Sources */, - F3A71F88272177135CDF5BC18D68134D /* LayoutConstraintItem.swift in Sources */, - A235834F0BDA4FA924E2AA14523AA54D /* SnapKit-dummy.m in Sources */, - E318725DBB931BB68BF243EB2300E3FC /* Typealiases.swift in Sources */, - 0E68D8160E5C813DB3839865A2B61A7F /* UILayoutSupport+Extensions.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 42D6C5C2970F2E5A7E40A33E67F081A4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 541FFE865648B06764067D97C8898EB8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7B1A9147AD781B8C85299490F212E46A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8CB0C79D881B535BE9D8EB7FCFC5354E /* RDAISpeechContentProvider.swift in Sources */, - 88C129FF0E69C6E384F2779A23C55427 /* RDSpeechReaderContracts.swift in Sources */, - 3B96821680A1C1A218CE1C9FC855A23B /* RDSpeechReaderController.swift in Sources */, - 0D9DBD85739EA6FA524BC4AEF817361B /* RDSpeechReaderControlView.swift in Sources */, - 0335F9FB12F2E7B0CDA69B9DB048C1B5 /* RDSpeechReaderView-dummy.m in Sources */, - 627969A2C4F0C40D00C45FCF74C645DF /* RDSpeechTextPreprocessor.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7F0E1E43783433272F33954F422787AB /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 22796A7363B805A1A3CFE22E9FEF53DA /* Pods-ReadViewDemo-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B992E8A05E2B8924BE5AD80B55132A31 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C5AE45CCE89262860C07A4D819F090B4 /* Archive.swift in Sources */, - 3931A56C2503B0A3D0FE828F02D9B979 /* Archive+BackingConfiguration.swift in Sources */, - 3936F0CEFF36DF3B6950232469464C92 /* Archive+Deprecated.swift in Sources */, - 41F5F94C7DF31187F8DEDACFED77F0E2 /* Archive+Helpers.swift in Sources */, - 6AEBFDC2BBEFF8D41B92E25BEBA88DA9 /* Archive+MemoryFile.swift in Sources */, - FB9BF2BD5860E0AE6D47C3B3CB22565B /* Archive+Progress.swift in Sources */, - 3FDC0622E8C79045CCD33384BECD3148 /* Archive+Reading.swift in Sources */, - C85C52B080DCDCE11643373A20F761FC /* Archive+ReadingDeprecated.swift in Sources */, - 570B9696C1005A0AEF43490F610D6826 /* Archive+Writing.swift in Sources */, - 69C2DAE51CE7FB6012E7BC6B242F1D87 /* Archive+WritingDeprecated.swift in Sources */, - 2AE79C560C0E3BF0E8F280F86AAB8CA4 /* Archive+ZIP64.swift in Sources */, - B1D95DA928A2395DC801F291958ECDBE /* Data+Compression.swift in Sources */, - 863327A5E10B22298BB440E98DE9F15E /* Data+CompressionDeprecated.swift in Sources */, - DED69A917E4E0176A310481FCF01C009 /* Data+Serialization.swift in Sources */, - 11A9957CEC14EA2676686062B57AE434 /* Date+ZIP.swift in Sources */, - 96D5FBBC74098899A127121C91CECDC4 /* Entry.swift in Sources */, - E1BBC792423CF9FFA5FB02C7B70F5ED6 /* Entry+Serialization.swift in Sources */, - F0CEFCC3693FD1B1338B24B4157E0A3C /* Entry+ZIP64.swift in Sources */, - 8CBD18C38E97757F67620E5EBA85A70F /* FileManager+ZIP.swift in Sources */, - 8A7D59F186CD4A90AEF425FF382B3F0D /* FileManager+ZIPDeprecated.swift in Sources */, - 631388C3FD4E018ACBDDF55A0EE10AC2 /* URL+ZIP.swift in Sources */, - FA30A0528F3F06269BBAE1DC923C5CED /* ZIPFoundation-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CCC0D335450A0E9051C1C7073A62FA83 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 383ED4A31AA31ECDE5599419DDA89041 /* RDCBZReaderController.swift in Sources */, - 122ADCB2F0FDD7FC639648DAEBCB31F8 /* RDEPUBAIContentProvider.swift in Sources */, - 432828354099FF9940FC9BB1A5DC2D6E /* RDEPUBAnnotationEditorViewController.swift in Sources */, - 60A4A0DBFD2263B7E2FA3928A0ABBD71 /* RDEPUBAnnotationModels.swift in Sources */, - D7021E6EB2D2D58D15CECD47BC9A9819 /* RDEPUBAssetRepository.swift in Sources */, - 2895AAFE16A7927C9CC5B0F75D32139A /* RDEPUBAttachmentNormalizer.swift in Sources */, - 4A596FCAE2DB0ACF3FF099A65C7E0512 /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */, - F2A5490C1C2E3E48A18A8FDF25B0B431 /* RDEPUBAttachmentTooltipView.swift in Sources */, - C28B3C4B424604F1AE9AD3A21DD853C4 /* RDEPUBBackgroundCoverageStore.swift in Sources */, - 6713F7FC53DE9E9717B7D7BED1966EEC /* RDEPUBBackgroundPriorityPolicy.swift in Sources */, - 91C03969F93620234EFFD70FD1552288 /* RDEPUBBackgroundTrace.swift in Sources */, - 5C034F77D297BB39CC375385C29086E7 /* RDEPUBBookPageMap.swift in Sources */, - 2B95E139A981A6A49099B4ECFB90AE9D /* RDEPUBBuildDiagnosticsReporter.swift in Sources */, - AF81CC94C3E819ABB2B931577F560036 /* RDEPUBCFI.swift in Sources */, - 41B1A699D6984DB7183BA045834CB450 /* RDEPUBCFICompatibility.swift in Sources */, - 4BAAFE6F010272E410ACAE88390153C3 /* RDEPUBCFIDOMPathBuilder.swift in Sources */, - 7BFF4431124D99872DA99035564A479E /* RDEPUBCFIError.swift in Sources */, - 66FEEF58DB4B1991D6D0A641B05F937A /* RDEPUBCFIGenerator.swift in Sources */, - 9928F78ED2A8119FAD85D395D0C14B81 /* RDEPUBCFIMap.swift in Sources */, - 0DA047CE0938660F1AC82BB461F607B4 /* RDEPUBCFIMarkerInjector.swift in Sources */, - 8CF42D8E97582A70BEC953567CC62F59 /* RDEPUBCFIParser.swift in Sources */, - 48E166F2C1FCEA0163D05D60838C08AD /* RDEPUBCFIPath.swift in Sources */, - 9CB70FA44A722BEC76EDC4CF9726C4C9 /* RDEPUBCFIRange.swift in Sources */, - 9478530F48C5EA152B22F8A3E6F5ACE0 /* RDEPUBCFIRecoveryEngine.swift in Sources */, - 6A7CAC6F109F9A5FECFAF8365434B5E4 /* RDEPUBCFIResolver.swift in Sources */, - FE0AF1F9056F5F4F381792ABA2FCB0F9 /* RDEPUBCFISerializer.swift in Sources */, - A213045E1768916C7FFA74CE0B607703 /* RDEPUBCFITextAssertion.swift in Sources */, - 2153FA3BF80801DEF871E1F058B4BC28 /* RDEPUBCFIUtilities.swift in Sources */, - 713A5472FA1AC9AFDE2A53ADCBD7E275 /* RDEPUBChapterCacheKey.swift in Sources */, - EB98CCC346DE7C922EEC196BF6465F86 /* RDEPUBChapterData.swift in Sources */, - 1D394585BF38C3050B6C81E80A905312 /* RDEPUBChapterDataCache.swift in Sources */, - 82D616A6A0BDBECCECBF7DEE97439944 /* RDEPUBChapterDisplayContentCache.swift in Sources */, - 1029F6A1D00934BA1729926279757FEE /* RDEPUBChapterLoader.swift in Sources */, - 44FA5DE799285D7A61EA798CEEA430B8 /* RDEPUBChapterLocation.swift in Sources */, - 960ECB0BE250A067C844D5E8A22372CE /* RDEPUBChapterOffsetMap.swift in Sources */, - EB4853E4669079AB1DB69B5D0C282ED9 /* RDEPUBChapterPageCounter.swift in Sources */, - 593C7D0F96C618C5D04A67758D019C39 /* RDEPUBChapterRuntimeStore.swift in Sources */, - E57A108FD62AEDC26F82FC5A2B8D0744 /* RDEPUBChapterSummaryDiskCache.swift in Sources */, - 7CA0156611964C72807860FA6F544D18 /* RDEPUBChapterTailNormalizer.swift in Sources */, - 6C401234C15BC214C8C7EB4200624E17 /* RDEPUBChapterWarmupOrchestrator.swift in Sources */, - E9468DE68A8609EE6DC056687D9E364B /* RDEPUBCoreTextPageFrameFactory.swift in Sources */, - C19AA78C33972C5897BA47532A0B189A /* RDEPUBCSSCompatibilityLayer.swift in Sources */, - 54D02DDE581B6C0C88C240CEBC5CC41B /* RDEPUBDarkImageAdjuster.swift in Sources */, - 5E1C53786FAF732AA6AE6CDB8D03726C /* RDEPUBDecryptingImageAttachment.swift in Sources */, - 154B7E4D9B281D3F49B8430DC2F730E0 /* RDEPUBDTCoreTextRenderer.swift in Sources */, - 70569A36850676C7E290786FA104AD9B /* RDEPUBFixedLayoutTemplate.swift in Sources */, - 590762C119260376B3DCCC16D2362964 /* RDEPUBFontFallbackResolver.swift in Sources */, - 621D8713C9AC9C3C09787C40997DDC85 /* RDEPUBFontNormalizer.swift in Sources */, - E749B52B9E166B85AB0671D9FCFF5D2D /* RDEPUBFragmentMarkerInjector.swift in Sources */, - DDB428542ACD7BB97C3A248B8B6D70C3 /* RDEPUBHTMLNormalizer.swift in Sources */, - AC3F3D52752D5E8BFDF2C731F4442871 /* RDEPUBImageViewController.swift in Sources */, - A40D3941CD41BE5FB53F24DAA5492872 /* RDEPUBImageViewerCoordinator.swift in Sources */, - 67E58BF0C1BB9DAFA1938AAE06AA0473 /* RDEPUBJavaScriptBridge.swift in Sources */, - 6A7F010D74A23FDE95D3217D7BBF51F3 /* RDEPUBJumpSession.swift in Sources */, - D7893683E3175919960EF304323E7FEA /* RDEPUBMemoryProbe.swift in Sources */, - E1F7F3C1DFBC5BE87F455A8B2EF526BC /* RDEPUBMetadataParseCancellationController.swift in Sources */, - 866736EAD1657A677B7CE98A60CC6249 /* RDEPUBMetadataParseWorker.swift in Sources */, - 9FAE69F2812510E0491D9BBB90C353D4 /* RDEPUBModels.swift in Sources */, - 7A255B9249FE4C84267820873AC6CE40 /* RDEPUBNavigatorLayoutContext.swift in Sources */, - 476B266618E9281C1F362C871E9686B2 /* RDEPUBNoteDetector.swift in Sources */, - E22F7B610DF891EFC7195CC6B7D8FB3B /* RDEPUBNoteModels.swift in Sources */, - 108336F1A5BBF5C4C8D4468287C8BC8C /* RDEPUBNotePopupCoordinator.swift in Sources */, - 65E97E47A6CE7EEFD12CDBECD0D2E91F /* RDEPUBNotePopupViewController.swift in Sources */, - 094D63A7B2DC786E383C4145EBFF6146 /* RDEPUBNoteResolver.swift in Sources */, - DC2B47D4298DC02811E3BE2611A252FB /* RDEPUBPageBreakPolicy.swift in Sources */, - 8992C1B0446EC0DE0C94A041BE926FB9 /* RDEPUBPageCountCache.swift in Sources */, - 8282D8B5123F0C53F433270E96967E74 /* RDEPUBPageInteractionController.swift in Sources */, - 2EEEF833B213486F044A3AABF1BC1A99 /* RDEPUBPageLayoutSnapshot.swift in Sources */, - 7151C4FC372F80CE454CBB4ABD2C0FAD /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */, - FF506E71078A7E78F593EB9F71FE5A0B /* RDEPUBPageResolver.swift in Sources */, - 2DEE061E843862292F7E1DD86A7D217D /* RDEPUBPaginationCacheCoordinator.swift in Sources */, - 4905D46C2BB35B43AE7A780EA987D146 /* RDEPUBPaginationModels.swift in Sources */, - 24BD40AD5A9BADE65425D9D05A349CDB /* RDEPUBPaginator.swift in Sources */, - D861D571DFD73726E94AED3755335FA5 /* RDEPUBParser.swift in Sources */, - FBE2E40F0FB3043166CC80AE7EE02311 /* RDEPUBParser+Archive.swift in Sources */, - 3905E0DA77036FD5BEFD7D80EF8A83CB /* RDEPUBParser+Package.swift in Sources */, - 8AAA54629501B2B15CDAE350BBF0E2CF /* RDEPUBParser+ReadingProfile.swift in Sources */, - 79E20B3F49DEF332844FD439F1026EE4 /* RDEPUBParser+Resources.swift in Sources */, - 931CA4F727B6DA33D41913BA9D5F9A5A /* RDEPUBParser+TOC.swift in Sources */, - 6C493923CF5641870D6A95200105006B /* RDEpubPlainTextBookBuilder.swift in Sources */, - 4BA0B5B55E26574C00CFD26DEF30CA7D /* RDEPUBPreferences.swift in Sources */, - 2DAB2050BC06A4C6A8903E9B3DD06777 /* RDEPUBPresentationRuntime.swift in Sources */, - 68A785B7E08A8E8829F896F3B9D20E4D /* RDEPUBPublication.swift in Sources */, - 3DF19CE1034D02FA86C0B5BAB69917AE /* RDEPUBReaderAnnotationCoordinator.swift in Sources */, - 2CA2B5A8BC35D7493E7F8A26C082789E /* RDEPUBReaderAssemblyCoordinator.swift in Sources */, - CB7E3F2CFFCA14F52C4E3A0483522387 /* RDEPUBReaderBottomToolView.swift in Sources */, - AEBB5E7A98408C8A212C07E64A48CE17 /* RDEPUBReaderChapterListController.swift in Sources */, - 81C566F6B24532A292C755DBE663D843 /* RDEPUBReaderChromeCoordinator.swift in Sources */, - 719F5098842D53A54D6CF6D8CA38561F /* RDEPUBReaderConfiguration.swift in Sources */, - EF2577E6200E94FE255280886820DF36 /* RDEpubReaderContentCell.swift in Sources */, - C78C182488604E401FCF412ECAA918DA /* RDEPUBReaderContext.swift in Sources */, - 1E5A1370975CB23A3109708965000BEB /* RDEPUBReaderController.swift in Sources */, - BF05C079B67F1BB11EE57FC7B4F9123F /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */, - 76F75335C90A55087171C9DF54E2F4B0 /* RDEPUBReaderController+ContentDelegates.swift in Sources */, - 2C5919C12ABE1A22BB98F7ED2AA8E5CD /* RDEPUBReaderController+DataSource.swift in Sources */, - 5C8E343FC738C259948D09E98B2BE323 /* RDEPUBReaderController+ExternalLinks.swift in Sources */, - 48D1F6EEB21172A1047DAE33BFC9D647 /* RDEPUBReaderController+LocationResolution.swift in Sources */, - 884A0E9B795FF7C1A3762AAEEDA0A6B9 /* RDEPUBReaderController+Orientation.swift in Sources */, - F9F5A156E4544E2990D63A3E6D21F815 /* RDEPUBReaderController+PublicAPI.swift in Sources */, - BEE5024D00596E0DEB17983AFDF66B53 /* RDEPUBReaderController+RenderSupport.swift in Sources */, - 1C64391C561D8C8C71B8BA9A8C9D8F6E /* RDEPUBReaderController+RuntimeBridge.swift in Sources */, - FBD39920E194F6AEFC3FC3FCE30E6C13 /* RDEPUBReaderController+TableOfContents.swift in Sources */, - 7398FC3E3694EC9874DBAB773AAC1B24 /* RDEPUBReaderController+Trial.swift in Sources */, - 675E36872F910FE44726AED144E3FC59 /* RDEPUBReaderDelegate.swift in Sources */, - 318FC0E7FCF79F00F83A7F03E766A219 /* RDEPUBReaderDependencies.swift in Sources */, - 2CB4BF91A9035EF091737601094DE286 /* RDEPUBReaderEnvironment.swift in Sources */, - 34A377090CCB6577C85C8F72E0F3CD7F /* RDEpubReaderFlowLayout.swift in Sources */, - 4378DA5B31F23FA54D3D1B377447835C /* RDEpubReaderGestureController.swift in Sources */, - 3B573DE391E21DD53D79438B96CC0393 /* RDEPUBReaderHighlightsViewController.swift in Sources */, - B5DF0C6248323B74F6D5896BE99CBC17 /* RDEPUBReaderLoadCoordinator.swift in Sources */, - F192C5927E7BA97C8B5DB00FAB5DC049 /* RDEPUBReaderLocationCoordinator.swift in Sources */, - 5D9FF5F738BCBCB2CD47D8E127795DCD /* RDEpubReaderPageChildViewController.swift in Sources */, - D448FA68DFA59BB641DC224C5EB8BE22 /* RDEPUBReaderPaginationCoordinator.swift in Sources */, - 5CDC5753D0BEA1791C8585D0DFE20214 /* RDEpubReaderPagingController.swift in Sources */, - F94593217EBED39BF620C92D5CFD7942 /* RDEPUBReaderPersistence.swift in Sources */, - 2EF74777E4F0C408BE00A974639979CD /* RDEpubReaderPreloadController.swift in Sources */, - 3BA3E2716A868DCB8EAEFF2AA664DE4A /* RDEPUBReaderRuntime.swift in Sources */, - 19276546DD5AF3B0E64AC610951F24FE /* RDEPUBReaderSearchBarView.swift in Sources */, - 342CF0083041E6957710A3D35EEDBD5F /* RDEPUBReaderSearchCoordinator.swift in Sources */, - F2B9F986E77500749E2CEB4DEC344F79 /* RDEPUBReaderServices.swift in Sources */, - DC58520AD1CA9B74B56B5C181D3B0CA3 /* RDEPUBReaderSettings.swift in Sources */, - 0F5377BB4CD47877A1A4FF9056244D6C /* RDEPUBReaderSettingsViewController.swift in Sources */, - 5069AC302EAA58714AE6D0BB0AD65633 /* RDEpubReaderSpreadResolver.swift in Sources */, - AACD6869163962229AE357DA85AD6DD9 /* RDEPUBReaderState.swift in Sources */, - ACF09FE8BA5ACC0BF4140244B6E8F876 /* RDEPUBReaderTableOfContentsItem.swift in Sources */, - 692FBE7827CB1C969D79F56C7250FDA1 /* RDEpubReaderTapRegionHandler.swift in Sources */, - 9FF66E7E89669D216788BDA45AF55BD0 /* RDEPUBReaderTheme.swift in Sources */, - A7C1F0178293C3939D2B66BDB019F2BE /* RDEPUBReaderToolView.swift in Sources */, - 817BD48447F5B765716833E93D1EEE7C /* RDEPUBReaderToolViewProtocols.swift in Sources */, - 5C39B3B61C6C9554E874E04461D099E0 /* RDEPUBReaderTopToolView.swift in Sources */, - F58C1C3719931E786A62BA0D9AC90306 /* RDEPUBReaderUIState.swift in Sources */, - 90C1E12EED0B468F95435AE0E7AE8629 /* RDEpubReaderView.swift in Sources */, - 387C801A5E9BC43D2E10A71E04597B03 /* RDEpubReaderView+CollectionView.swift in Sources */, - D034FB4FFC72E5FCE665A2549F90EFA3 /* RDEpubReaderView+ContentAccess.swift in Sources */, - 672001630C16C4BFF67B5E08F8BC74C0 /* RDEpubReaderView+PageCurl.swift in Sources */, - 5063918BF068EDD60245CF1FFA14C784 /* RDEpubReaderView+ToolView.swift in Sources */, - A3CE10E0E0B909782BA6FF7DF4FCF467 /* RDEpubReaderView-dummy.m in Sources */, - F98520F7C30A9EC31303D52A6E11F6BF /* RDEPUBReaderViewportMonitor.swift in Sources */, - B5925F934F17183F1026FED654CDEA4C /* RDEpubReaderViewProtocols.swift in Sources */, - D9BEF488CA3F83597D75F49FE00A26C5 /* RDEPUBReadingLocationModels.swift in Sources */, - 27942A1175523D2BD5E9E7E7F6AAFCBF /* RDEPUBReadingSession.swift in Sources */, - A45E03A637712DF44230063414AC8AC8 /* RDEPUBRenderDiagnosticsCollector.swift in Sources */, - 96C694AAE72B5B05542CC44D21F53DDD /* RDEPUBRenderRequest.swift in Sources */, - CB7260801E1C1B7B19EB0F046F36C95B /* RDEPUBResourceDataProvider.swift in Sources */, - E29E2E80F0F968293BE3E37CBC6BB0CB /* RDEPUBResourceResolver.swift in Sources */, - F0BE35A92217789FADC9601DB0AD1448 /* RDEPUBResourceURLSchemeHandler.swift in Sources */, - 89AB5F2CC5F3934CFA317ADB44092BA0 /* RDEPUBRuntimeChapter.swift in Sources */, - 587015DDFCEB54F1161FF6D1E04511CB /* RDEPUBRuntimePageCount.swift in Sources */, - 9379A9C9471BD46D7606BC0753579CE3 /* RDEPUBSafeArea.swift in Sources */, - 63652A1FFAAD5C46479F1F8E051917D2 /* RDEPUBSearchEngine.swift in Sources */, - 7395CBDBDC06A230C64495B11DED662D /* RDEPUBSearchModels.swift in Sources */, - ABFF2FB0BB8397960B009D0969113CA0 /* RDEPUBSelectionLoupeView.swift in Sources */, - 5B5B1CD4310ABEA4C3480C1C1F0BA092 /* RDEPUBSelectionOverlayView.swift in Sources */, - 9E4E27D244C44F1DEB2792D62E8F8E46 /* RDEPUBSelectionState.swift in Sources */, - EDAD742333B773CB386BBF10BD61842E /* RDEPUBSemanticMarkerInjector.swift in Sources */, - E8E71B04D02EB95E1663B6B2BF228DA3 /* RDEPUBSettingsFlipAutomation.swift in Sources */, - 18FCC6EB5E321A7758064DC0220B8441 /* RDEPUBSpeechContentProvider.swift in Sources */, - 066408F6DF6744FCE21A0844EB8B972E /* RDEPUBSpeechSession.swift in Sources */, - 13B7F5C2B8676959CDB2E290466E3BB6 /* RDEPUBStyleCompatibilityModels.swift in Sources */, - 73A83E4CC747E532247A09C60BE97099 /* RDEPUBStyleSheetBuilder.swift in Sources */, - 44F3EDE2E5585295F5881B0354772652 /* RDEPUBStyleSheetComposer.swift in Sources */, - D0D635F5FE9B28BDA18350507E363E51 /* RDEPUBTextAnchor.swift in Sources */, - D5DD33766EA2B6A0E05D6529E03F0E77 /* RDEPUBTextAnnotationOverlay.swift in Sources */, - 9FB5FDCF5ED0E32A4EF28A956D5C0C93 /* RDEPUBTextBookBuilder.swift in Sources */, - 54CFB30383D0EA0F41434F46087160F0 /* RDEPUBTextBookCache.swift in Sources */, - FCAF77439153D6230723FCB76523E19F /* RDEPUBTextBookModels.swift in Sources */, - 570E7075A4C6493C10203B303AE5CE7B /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */, - 1105B3FC3E36AEB697E983A289F12E38 /* RDEPUBTextContentInteractionCoordinator.swift in Sources */, - 1DC412848A5F645120BE5C544F117E40 /* RDEPUBTextContentView.swift in Sources */, - 1023882FD50FC476405F3AA2D63A631E /* RDEPUBTextIndexTable.swift in Sources */, - BB67A112E6F1254795D78A3839CE4911 /* RDEPUBTextLayouter.swift in Sources */, - 43E68A3A27053FD0A6BD82887F6A61B3 /* RDEPUBTextLayoutFrame.swift in Sources */, - 8030A76D8117D9E3811AB6B7D044D4D5 /* RDEPUBTextPageBoundaryValidator.swift in Sources */, - C24EB1777356C7233A5F03765BCBFA4F /* RDEPUBTextPageDecorationView.swift in Sources */, - 7B30FDFEECF4A828890D252C2A5DE4F5 /* RDEPUBTextPageRenderView.swift in Sources */, - 4C3BF1D5C2B8A4CEEEB866622065590F /* RDEPUBTextPageVerticalJustifier.swift in Sources */, - 10734A1CB54C48CAE3AFAFBE80CB2725 /* RDEPUBTextPaginationInterfaces.swift in Sources */, - 64B52518CC3578ED6CA80020FB2F33C9 /* RDEPUBTextPaginationSupport.swift in Sources */, - 289E098417EDE9D3518B1C1A01FF4C56 /* RDEPUBTextPerformanceSampler.swift in Sources */, - 3CF535BAE45442DAA10B8602BDB97ED0 /* RDEPUBTextPositionConverter.swift in Sources */, - E22E119D75358EEA1F8898837D400483 /* RDEPUBTextRenderer.swift in Sources */, - 9DE4F6F6DA042A04F698FDCB2ED50500 /* RDEPUBTextRendererSupport.swift in Sources */, - BFBE84BD4C66951B7C5744FA0EC7CEFF /* RDEPUBTextSearchEngine.swift in Sources */, - B2041370A0FCF1BF2164DBEE8D28C5A9 /* RDEPUBTextSelectionController.swift in Sources */, - BAF2CAF2430C2C71E76D42B72CF59797 /* RDEPUBTypesettingPipeline.swift in Sources */, - 6C739D4266DDB13ABA18475D0DC8E6D4 /* RDEpubURLReaderController.swift in Sources */, - 62E433B2BAA5AA37D49EAF6B5BE98C4A /* RDEPUBViewportTypes.swift in Sources */, - E2E4F9574AE38A6F8234918EDB03624A /* RDEPUBWebContentView.swift in Sources */, - 878C973814D1C120B7940EA4477AAC7D /* RDEPUBWebDecorationOverlayView.swift in Sources */, - BA277E83BAB0D555D789A029D4514966 /* RDEPUBWebView.swift in Sources */, - 4840D1F3B294A0C51F6B6ED77779A836 /* RDEPUBWebView+Configuration.swift in Sources */, - 21AED133680D1E64446239B0F6C436E8 /* RDEPUBWebView+FixedLayout.swift in Sources */, - D853D2AF4801CB310D34B54E78C308FD /* RDEPUBWebView+JavaScriptBridge.swift in Sources */, - CCFBEDA69BB901001DC03CC8C4981B22 /* RDEPUBWebView+Reflowable.swift in Sources */, - 555FD7CDC7364E9E4F849A54255B0D27 /* RDEPUBWebView+Search.swift in Sources */, - A3C9C18C530A61F708AD6860A8CFE46C /* RDEPUBWebViewDebug.swift in Sources */, - FC8D9AC0784A89BBB42E3517337FE184 /* RDMOBIParser.swift in Sources */, - C1A7E3DD4E0D633E0AF5432F76DF45E5 /* RDReaderDocumentFormat.swift in Sources */, - B09E9BB87481F36F1F60C8AB14D8BE22 /* String+RDEPUB.swift in Sources */, - 8C354A6F2AE332B985CDD60E2A98BEF1 /* UIColor+RDEPUB.swift in Sources */, - 64F0A668BEE5C8AACCB9C3BC9388CDAB /* UIColor+RDEPUBHex.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D73049BF56BC8CA1EDE0BB99E8536406 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C41422C964DEAD4BC036630E2CEE8EED /* RDAIAppleFoundationModelsProvider.swift in Sources */, - 45C2D80A964B3CE611A003CBBDFD36ED /* RDAIDiagnostics.swift in Sources */, - 3757CD1E7F4EA41CDAB495BBB6F7D9DC /* RDAIIndexService.swift in Sources */, - 53ED06B75EF9B8FFC0D2362B7B64F4FD /* RDAILocatorBuilder.swift in Sources */, - 0AC9DDCE140E39ECDD8DDA62D0D724DD /* RDAINaturalLanguageAnalyzer.swift in Sources */, - 173C5A26C576DE62DD9DEE0835D9A85F /* RDAINaturalLanguageSemanticScorer.swift in Sources */, - 893A917E82D5B3E36C2D32A6A17696BD /* RDAIReaderAssistantViewController.swift in Sources */, - 5BD8E695D1B9D6FB8A1CDB11F19F9E24 /* RDAIReaderContracts.swift in Sources */, - 157BD809FC0CAEDFB4316A537C74FA00 /* RDAIReaderView-dummy.m in Sources */, - DB2C355032CF8B09E12091E2B4EDFF02 /* RDAISQLiteIndexStore.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D7B482915F333DB053E9B3FF533B0E8B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F5FD889341D3D1DCCA58EA12D78CF9E8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4A13B4E5EA8616A8F09D90BC6EAEEA64 /* CTLineUtils.m in Sources */, - F58ABA106C6200175DF574DF05A75BA8 /* DTAccessibilityElement.m in Sources */, - 69674FEA70899F07BE6098AAEC849978 /* DTAccessibilityViewProxy.m in Sources */, - 014449AE560FFF3C628FAE639D043004 /* DTAnchorHTMLElement.m in Sources */, - 24395BEB3C360D9DA5180BFB955B04A0 /* DTAttributedLabel.m in Sources */, - 5065D99E1588E8CC60677E74916A5C03 /* DTAttributedTextCell.m in Sources */, - 9E4AB71DE8B3E7218B53B2C8EF6B843A /* DTAttributedTextContentView.m in Sources */, - 8AC90941E71199090BCED76DE89EFB60 /* DTAttributedTextView.m in Sources */, - C6B65C0EA759DF426FBBBB113BA3C3E8 /* DTBreakHTMLElement.m in Sources */, - 270C5C10028F0BC5A62548326CCB379B /* DTColor+Compatibility.m in Sources */, - 1D460603DCA4A4E5ECFE8FF1F1CACC10 /* DTColorFunctions.m in Sources */, - AA3722CC8B4992EDA8A9F5E9116835B7 /* DTCoreText-dummy.m in Sources */, - A7D665BBDADBE3D64023FF52E218FCFA /* DTCoreTextConstants.m in Sources */, - C5EE8E7373FBD24E66C678356393D871 /* DTCoreTextFontCollection.m in Sources */, - EBB7E4D4DB253B5F1267CF9B4DDB4E93 /* DTCoreTextFontDescriptor.m in Sources */, - EA0040823CCF8E97363DB5891F5DA6D0 /* DTCoreTextFunctions.m in Sources */, - 44B1FBF893C06F314F8C9BD1405897D8 /* DTCoreTextGlyphRun.m in Sources */, - 0561DF6793C8516F469D9813F5CE3211 /* DTCoreTextLayouter.m in Sources */, - E1DA58105A72D6C0B77A8A9F7822BD68 /* DTCoreTextLayoutFrame.m in Sources */, - FC5F52919451A15639442B46B38E4C67 /* DTCoreTextLayoutFrame+Cursor.m in Sources */, - 100BFFBD24F234C095EDB001B8088DB1 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m in Sources */, - 29D9B32DFFC59A157EDEF005DB92A5AC /* DTCoreTextLayoutLine.m in Sources */, - A30D5C1E413A3D319A83D3410A8A549F /* DTCoreTextParagraphStyle.m in Sources */, - DC3E2932A82AD5D88D8B1EFBF004BEC8 /* DTCSSListStyle.m in Sources */, - 45F90B98546FDBA03AB112DFE859A185 /* DTCSSStylesheet.m in Sources */, - 57D5228C8A85628772D4D78E7FBEAF3C /* DTDictationPlaceholderTextAttachment.m in Sources */, - E8AB5CE26A5224EF09E9E363D70C7775 /* DTDictationPlaceholderView.m in Sources */, - B86493B996A888D1DA7814ECB6028E22 /* DTHorizontalRuleHTMLElement.m in Sources */, - FD5D68887297CFA94F543C49DC68A156 /* DTHTMLAttributedStringBuilder.m in Sources */, - 7C05F56B62B15EFF344C5CDE4A52B8FB /* DTHTMLElement.m in Sources */, - 78D24D82D98D77E744FF73C9040618A8 /* DTHTMLParserNode.m in Sources */, - 8E8726381CBCFB1EDB350183456D4EF7 /* DTHTMLParserTextNode.m in Sources */, - 6FA0125F16DDEDAD341DB75DEB084F4B /* DTHTMLWriter.m in Sources */, - D1A93B2D7F1B312755C48790338D7712 /* DTIframeTextAttachment.m in Sources */, - CFC49467FE75BFABC22A1CE2FFA26570 /* DTImage+HTML.m in Sources */, - 11AB1902A68385851FB81E870991F9A0 /* DTImageTextAttachment.m in Sources */, - B24FAD34A7915FC4B90FE9038E814FF2 /* DTLazyImageView.m in Sources */, - DAD16D3E6EBB32FF96C63BFE6037065F /* DTLinkButton.m in Sources */, - 7F9CC306B17D409DB903DF850FEDA64C /* DTListItemHTMLElement.m in Sources */, - F4A2E3C4237B8931F61B72FF0BDD6D69 /* DTObjectTextAttachment.m in Sources */, - 91FDA47810CE5CE2C48AED9205AE89B5 /* DTStylesheetHTMLElement.m in Sources */, - 2FD7360250C2255A80583D4CF518FBFA /* DTTextAttachment.m in Sources */, - DE68AD2F426FD462BC70F968E5AF5553 /* DTTextAttachmentHTMLElement.m in Sources */, - 4DA6EC46F8968265B96C6D7B2260C4E5 /* DTTextBlock.m in Sources */, - F61102C9BF3D6296CB6C6B754ABF98C5 /* DTTextHTMLElement.m in Sources */, - BE12CD112F82AD9050D7FB29395F27F9 /* DTVideoTextAttachment.m in Sources */, - 14BDD9FB7A7AC5C8ABFF8D24C381F3DA /* NSAttributedString+DTCoreText.m in Sources */, - 814D0D63E5FD4AB7231E63064FE9EB5C /* NSAttributedString+DTDebug.m in Sources */, - 597DE4CDF5C674E269F03F6AA0AFFCC1 /* NSAttributedString+HTML.m in Sources */, - F6036BBDFE7484F5A453F6876C97C098 /* NSAttributedString+SmallCaps.m in Sources */, - 30C01FE491C26314F776AD8B2AF136FA /* NSAttributedStringRunDelegates.m in Sources */, - 389F7C8400F9223C019F2D7825CD2369 /* NSCharacterSet+HTML.m in Sources */, - 9BD146F72B29C703798001F138B069C2 /* NSCoder+DTCompatibility.m in Sources */, - 24C5B52FD2AA9C49731DC6859ABA7CDE /* NSDictionary+DTCoreText.m in Sources */, - FEB00C614DCB6A8A7BDF8DEE11260984 /* NSMutableAttributedString+HTML.m in Sources */, - 2AAF9361720FC2D8FFCA93B5FAE42019 /* NSMutableString+HTML.m in Sources */, - 9917E9B804CD33AF3BE2A992A3510C97 /* NSNumber+RomanNumerals.m in Sources */, - 0AAA5BB1DBF584102B15CF8738F1815E /* NSScanner+HTML.m in Sources */, - 9B199D71D2F48B2055A7FDF9BD7051CC /* NSString+CSS.m in Sources */, - A2CA9C27EB2B77637A12723F8CFE7AAB /* NSString+HTML.m in Sources */, - 002685407B9C4D548571DA24AFD6E8F1 /* NSString+Paragraphs.m in Sources */, - 811D7CBCD710AE45FF80A4B05BFE444C /* UIFont+DTCoreText.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FB4EF7F1D5A790146D0A8C362A41E9EB /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 598D022C283819443091902BE734DAA8 /* DTActivityTitleView.m in Sources */, - 87E3B89BA351CD67C8DF1798B04D88B3 /* DTAnimatedGIF.m in Sources */, - E3C34ADE9B65154958F50C6D75BA77AC /* DTBase64Coding.m in Sources */, - 0CD64766E04A6801A55DFEFC5A9A379B /* DTBlockFunctions.m in Sources */, - 86DC330DC883C193E3873FC14C462783 /* DTCoreGraphicsUtils.m in Sources */, - DA7A44DADD3BC84841AE2677DAA3CF22 /* DTCustomColoredAccessory.m in Sources */, - BE766E558428E8784BC6512D77BC4808 /* DTExtendedFileAttributes.m in Sources */, - B0C0CA37B2606633E435DA11DC3788DF /* DTFolderMonitor.m in Sources */, - 24C6A5A67DF71CA76B6F3AF29F193AE4 /* DTFoundation-dummy.m in Sources */, - FEF842F1CC8FD4321DA162C51B932256 /* DTFoundationConstants.m in Sources */, - 1B56723E39283A17E2A689DBDD09C313 /* DTHTMLParser.m in Sources */, - FA45542C5C51CEDA07BBB673701DB1A7 /* DTLog.m in Sources */, - 85FB7A92E7BE58422BBCA8BCC503073F /* DTPieProgressIndicator.m in Sources */, - 6705BD3C1F523637A9AE0E5ED01A9121 /* DTSmartPagingScrollView.m in Sources */, - 9845DD8743E768B603FCA5E100022402 /* DTTiledLayerWithoutFade.m in Sources */, - 3674DE97851C406DA102B9E44BF04D28 /* DTVersion.m in Sources */, - 66A624E8BC1DAF3DB5F73A4803E7D2BC /* NSArray+DTError.m in Sources */, - 7140ED0FCBEE21E6ADC5C86510554445 /* NSData+DTCrypto.m in Sources */, - 2C0B4E9293C8B24B2E5086202EC8BA77 /* NSDictionary+DTError.m in Sources */, - 4BD4C274A25A2C0D67A8CD58CEE23A96 /* NSFileWrapper+DTCopying.m in Sources */, - D9AE80A302124FDC65DDB8E7589D062C /* NSMutableArray+DTMoving.m in Sources */, - 57E6E8838EA62098BBF70310A8ED9A69 /* NSString+DTFormatNumbers.m in Sources */, - A1BC9E0C0B13C8871A63632290E3FF0E /* NSString+DTPaths.m in Sources */, - EF12622D7366BDBE4CDC8E1AA79096BD /* NSString+DTURLEncoding.m in Sources */, - E227AE6681B28162FBF6964FCA235D91 /* NSString+DTUtilities.m in Sources */, - 2D5D90B31C27ABFE9A71AA0829B70447 /* NSURL+DTAppLinks.m in Sources */, - 38ED3BA7A3F5F7E164EFA8FFC4D29678 /* NSURL+DTComparing.m in Sources */, - 483931C8D43DEF9C708EC6111B7C8E6C /* NSURL+DTUnshorten.m in Sources */, - 262BF4A73925D6C0DAA45DE8041FDF48 /* UIApplication+DTNetworkActivity.m in Sources */, - D6FAE756D6437B0E2E039471ED84D262 /* UIImage+DTFoundation.m in Sources */, - 02A25882938831E94E43CA8A7CB729B9 /* UIScreen+DTFoundation.m in Sources */, - C0AA089CF77046447145E3C317D2233B /* UIView+DTFoundation.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 07407F12428F13D3E4006FC4CA276CE0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTCoreText; - target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; - targetProxy = D600C64030F4EC178AD77DDAAF89C5DA /* PBXContainerItemProxy */; - }; - 0818A35B3F5AFB1A0122EDC08DFCC0FB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ZIPFoundation; - target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; - targetProxy = F6B536978A947025AFBAAAF7351DC88E /* PBXContainerItemProxy */; - }; - 1F74E8ECF506A2E13D69E00CB12EAEBD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 1296438FCFC4BB8B026E5B13346AA007 /* PBXContainerItemProxy */; - }; - 219A38586F8223C049B64431795D2B04 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDAIReaderView; - target = 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */; - targetProxy = D52C274234D28471F70AC5166584D91F /* PBXContainerItemProxy */; - }; - 42C1A7E2942980AB6B984615E00902D5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 1F2CB25A693EED699BC4AF34E0A78DCC /* PBXContainerItemProxy */; - }; - 52BCC4A19191B906F794A89BB6DC4E43 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTFoundation; - target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; - targetProxy = 9148121DB7AE39618ECC5EBA0FFCEED3 /* PBXContainerItemProxy */; - }; - 535BA5CE3CED388B6D328526C1EBE529 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "ZIPFoundation-ZIPFoundation_Privacy"; - target = C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */; - targetProxy = 18FE27B2873AA09802132F3BFAA73B77 /* PBXContainerItemProxy */; - }; - 5BA37A3BEA7B80B3899F5AFAF7286CA0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDPDFReaderView; - target = 352EC96AFAEE0EDF74FD76A958827133 /* RDPDFReaderView */; - targetProxy = 0323874C0AE84330B0DFE6FBF0EE5CA7 /* PBXContainerItemProxy */; - }; - 63FFF77F305A945F6DF0D41454036F57 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDAIReaderView; - target = 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */; - targetProxy = 40CA9C1D9FA9CD1BE5571974758DFB60 /* PBXContainerItemProxy */; - }; - 8C316BD3F59179826FD212F31764533B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDAIReaderView; - target = 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */; - targetProxy = 5BDFB48E45664D19196E404974F8F15C /* PBXContainerItemProxy */; - }; - 8CCD3E65771647DD50CBBC1AE1B84CDE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDEpubReaderView; - target = FBCB57A3AEAAA3449B3F365930BC0977 /* RDEpubReaderView */; - targetProxy = AA6E14EAF872040B200515ED3D10A888 /* PBXContainerItemProxy */; - }; - 8F5AFC4AF9141D12FA46A946D211D7BF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "RDEpubReaderView-RDEpubReaderViewAssets"; - target = E07DDD766DCBF90486BCE6C2EA671E5E /* RDEpubReaderView-RDEpubReaderViewAssets */; - targetProxy = 9CE9E51198F6A77A18CCAB93C5E1773F /* PBXContainerItemProxy */; - }; - 9E4845C7BD02B359C6C66763674EF25B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTCoreText; - target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; - targetProxy = 15FF4C23FCEC678886F7700DD7174D09 /* PBXContainerItemProxy */; - }; - C262447253885048E17A57AF21378C64 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDSpeechReaderView; - target = CC23E8498E4F0DDEB3C1A2AA05B8ACF2 /* RDSpeechReaderView */; - targetProxy = 04B6B248841C85F781C9DC9FD2C70198 /* PBXContainerItemProxy */; - }; - CF63D823A1BCA96531A6D02A6B07E4A5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDSpeechReaderView; - target = CC23E8498E4F0DDEB3C1A2AA05B8ACF2 /* RDSpeechReaderView */; - targetProxy = 566B2018B8125F5F086120A0F04E590A /* PBXContainerItemProxy */; - }; - D1157C5ACAE4229432F1CE0A595803CF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDSpeechReaderView; - target = CC23E8498E4F0DDEB3C1A2AA05B8ACF2 /* RDSpeechReaderView */; - targetProxy = 9E4792E9817191C6C8E1B6FDF6AFCB2F /* PBXContainerItemProxy */; - }; - E55650B2223C316B3097288B971F9456 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDAIReaderView; - target = 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */; - targetProxy = 3B28F29AD72E32AE04AE655AF32CE9BB /* PBXContainerItemProxy */; - }; - F2EC52C5D4A57624BDD402CBAE177214 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SnapKit-SnapKit_Privacy"; - target = 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */; - targetProxy = E14CE914506E0DDCA9434F4ACB5C7327 /* PBXContainerItemProxy */; - }; - FBF6F2679B3714B32673C54517297A6D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "DTCoreText-Resources"; - target = 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */; - targetProxy = B2338A92D4F809073A0B634D8CDFFF11 /* PBXContainerItemProxy */; - }; - FCEC1B8D28905A556834FE6F4E5FA86F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ZIPFoundation; - target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; - targetProxy = 6386FD313A8EFBECF47440ECE9D0E0CB /* PBXContainerItemProxy */; - }; - FE1A32BF91015B0BAC298BA898CAA5DF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = A7C42C45544A5DA1825833C414C32548 /* PBXContainerItemProxy */; - }; - FF2A24A406F8D7B05FAB19FF9BDFB00A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTFoundation; - target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; - targetProxy = B05ABEA0D1B0F1400A6616382036F3F8 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 0CCAD0FFCBF6DEA721A71FDFEB58CB00 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 306477706BBB1E784F55BCF8EB1AD737 /* Pods-ReadViewDemo.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - INFOPLIST_FILE = "Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 1111F3DEE9EF70EEF9A8A5F1F617B60F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B75141FED04E4EEC380F0173E5DEBCA7 /* RDAIReaderView.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDAIReaderView/RDAIReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDAIReaderView/RDAIReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDAIReaderView/RDAIReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDAIReaderView; - PRODUCT_NAME = RDAIReaderView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 15BDA228DFA9DD44C8B100038F4CBB8E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2A39B1AC101FC87E52C5110F072FEA07 /* DTFoundation.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/DTFoundation/DTFoundation-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; - PRODUCT_MODULE_NAME = DTFoundation; - PRODUCT_NAME = DTFoundation; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 221F14CC071C4E49C1E1399166F51C72 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A3942F6A75FD45095352344EAEA29F8B /* RDPDFReaderView.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDPDFReaderView/RDPDFReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDPDFReaderView/RDPDFReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDPDFReaderView/RDPDFReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDPDFReaderView; - PRODUCT_NAME = RDPDFReaderView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 396BC6EEF9E7E0BCAAEA0DC00F55968B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 03D925237ACBF4382D1CF970BC943B0D /* RDSpeechReaderView.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDSpeechReaderView/RDSpeechReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDSpeechReaderView/RDSpeechReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDSpeechReaderView/RDSpeechReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDSpeechReaderView; - PRODUCT_NAME = RDSpeechReaderView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 40FFFF4767533BC952BA1F78CCDCB4AC /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B1D682E70FAFEEF08569FCA32E219FD1 /* ZIPFoundation.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ZIPFoundation-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/ZIPFoundation/ZIPFoundation.modulemap"; - PRODUCT_MODULE_NAME = ZIPFoundation; - PRODUCT_NAME = ZIPFoundation; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 44A4B2FB6211B90C1949A44A381F6D1F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - 459CB83D11DA56FD02D86CB1C6408A7B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F3D00D37E3CB914B9957CBEC6F302A0B /* SnapKit.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; - IBSC_MODULE = SnapKit; - INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = SnapKit_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - 48543F4CC7F4FCF27961EF04E146086D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E1121A6303533CBF8AF0FC0CE2257AD2 /* RDEpubReaderView.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDEpubReaderView"; - IBSC_MODULE = RDEpubReaderView; - INFOPLIST_FILE = "Target Support Files/RDEpubReaderView/ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = RDEpubReaderViewAssets; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - 4A2B39332FB866C980A9E53B8D8CBD07 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E1121A6303533CBF8AF0FC0CE2257AD2 /* RDEpubReaderView.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDEpubReaderView/RDEpubReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDEpubReaderView/RDEpubReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDEpubReaderView/RDEpubReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDEpubReaderView; - PRODUCT_NAME = RDEpubReaderView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 50F8FFD3B4E6D3CE1AE08DEB910B48EE /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C357AC8D7A6E01440AC68979B529B2F7 /* RDSpeechReaderView.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDSpeechReaderView/RDSpeechReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDSpeechReaderView/RDSpeechReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDSpeechReaderView/RDSpeechReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDSpeechReaderView; - PRODUCT_NAME = RDSpeechReaderView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 52537393D6301EC4EC1D446B22DAA4B6 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CD770BD6314F1E02A05DC9744C65B5A4 /* SnapKit.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; - IBSC_MODULE = SnapKit; - INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = SnapKit_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - 56E2A90AB727964FF6CE4CB126AB1E28 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 039B47D5CF4FDEA47C608CF07378D3DF /* DTFoundation.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/DTFoundation/DTFoundation-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; - PRODUCT_MODULE_NAME = DTFoundation; - PRODUCT_NAME = DTFoundation; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 59AB49DA21BAA1DD8CE07B674424404B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2042A956F6ADB5E2CF8DB889FA6F7652 /* RDAIReaderView.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDAIReaderView/RDAIReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDAIReaderView/RDAIReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDAIReaderView/RDAIReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDAIReaderView; - PRODUCT_NAME = RDAIReaderView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 65DAB5BFE60604F3516FEFD905FD46E9 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3FDE76F77A49B86E3A4499727321AC11 /* DTCoreText.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; - IBSC_MODULE = DTCoreText; - INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = Resources; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - 8E8B39CBF8B43C5AD2EA268A100C9EC4 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D7826602DA2629A5A1DD5912ADCAF5B8 /* ZIPFoundation.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZIPFoundation"; - IBSC_MODULE = ZIPFoundation; - INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = ZIPFoundation_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - 984661288CA8670CA17D31E2AC43B452 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B1D682E70FAFEEF08569FCA32E219FD1 /* ZIPFoundation.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZIPFoundation"; - IBSC_MODULE = ZIPFoundation; - INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = ZIPFoundation_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - 9D7FD8BA36976E73CCF9151C7069CA0E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F3D00D37E3CB914B9957CBEC6F302A0B /* SnapKit.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - A0DC1C2C814704734F83EAB35BB20B21 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - A1F5B44E8E7C59A962189D14989BCAFF /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3FDE76F77A49B86E3A4499727321AC11 /* DTCoreText.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/DTCoreText/DTCoreText-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/DTCoreText/DTCoreText-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/DTCoreText/DTCoreText.modulemap"; - PRODUCT_MODULE_NAME = DTCoreText; - PRODUCT_NAME = DTCoreText; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - A843E21C1B95C92BE904EB3F8115DD30 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3FFE1E06FDE8D4BA1EE289A4D0E7D127 /* DTCoreText.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/DTCoreText/DTCoreText-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/DTCoreText/DTCoreText-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/DTCoreText/DTCoreText.modulemap"; - PRODUCT_MODULE_NAME = DTCoreText; - PRODUCT_NAME = DTCoreText; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - AC2483A21E8FD8DEF00B9728C7C2B955 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3FFE1E06FDE8D4BA1EE289A4D0E7D127 /* DTCoreText.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; - IBSC_MODULE = DTCoreText; - INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = Resources; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - B169B65A62DAE42DE9A6CD1322B2770D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D7826602DA2629A5A1DD5912ADCAF5B8 /* ZIPFoundation.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ZIPFoundation-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/ZIPFoundation/ZIPFoundation.modulemap"; - PRODUCT_MODULE_NAME = ZIPFoundation; - PRODUCT_NAME = ZIPFoundation; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - B7CDE9995A60AE7262CC14391698821B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1AD502A1FA6EB1E38200B5283F979504 /* Pods-ReadViewDemo.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - INFOPLIST_FILE = "Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - C85CBB195B27DB56AF8571E35EBE0A8D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 48146273249EBEC5F8B586E4AD1FBBFE /* RDEpubReaderView.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDEpubReaderView/RDEpubReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDEpubReaderView/RDEpubReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDEpubReaderView/RDEpubReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDEpubReaderView; - PRODUCT_NAME = RDEpubReaderView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - C9C929215F56192257D3B3A26DBBF8B3 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CD770BD6314F1E02A05DC9744C65B5A4 /* SnapKit.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - DD4C466290589D036BF65FD06F472CAD /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 48146273249EBEC5F8B586E4AD1FBBFE /* RDEpubReaderView.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDEpubReaderView"; - IBSC_MODULE = RDEpubReaderView; - INFOPLIST_FILE = "Target Support Files/RDEpubReaderView/ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = RDEpubReaderViewAssets; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - FF4D798DA0305084DBBF74A386269F29 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 517D2A78DA380DB287A13785F250D543 /* RDPDFReaderView.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDPDFReaderView/RDPDFReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDPDFReaderView/RDPDFReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDPDFReaderView/RDPDFReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDPDFReaderView; - PRODUCT_NAME = RDPDFReaderView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 0C6B1944226D4396EB72162F792F7CD2 /* Build configuration list for PBXNativeTarget "DTCoreText" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A843E21C1B95C92BE904EB3F8115DD30 /* Debug */, - A1F5B44E8E7C59A962189D14989BCAFF /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 16A5B3C4A095036807F7094109F29449 /* Build configuration list for PBXNativeTarget "RDEpubReaderView-RDEpubReaderViewAssets" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 48543F4CC7F4FCF27961EF04E146086D /* Debug */, - DD4C466290589D036BF65FD06F472CAD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 405AA89C9ECEED358343DF9D47442DFD /* Build configuration list for PBXNativeTarget "RDAIReaderView" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 59AB49DA21BAA1DD8CE07B674424404B /* Debug */, - 1111F3DEE9EF70EEF9A8A5F1F617B60F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A0DC1C2C814704734F83EAB35BB20B21 /* Debug */, - 44A4B2FB6211B90C1949A44A381F6D1F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7A3DCEA78F09A537F1401A969F58D46A /* Build configuration list for PBXNativeTarget "RDPDFReaderView" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FF4D798DA0305084DBBF74A386269F29 /* Debug */, - 221F14CC071C4E49C1E1399166F51C72 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 88DFAB0C5D472D4A00EA6904F6B72B8C /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AC2483A21E8FD8DEF00B9728C7C2B955 /* Debug */, - 65DAB5BFE60604F3516FEFD905FD46E9 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 90D5F965BB40CB8C886D5F80738D76A7 /* Build configuration list for PBXNativeTarget "DTFoundation" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 15BDA228DFA9DD44C8B100038F4CBB8E /* Debug */, - 56E2A90AB727964FF6CE4CB126AB1E28 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - AB65638284CBD3373B8D5B6C1314CFFC /* Build configuration list for PBXNativeTarget "RDEpubReaderView" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4A2B39332FB866C980A9E53B8D8CBD07 /* Debug */, - C85CBB195B27DB56AF8571E35EBE0A8D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ACF0A1F60E8D8F76664F3C28A623BC64 /* Build configuration list for PBXNativeTarget "SnapKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C9C929215F56192257D3B3A26DBBF8B3 /* Debug */, - 9D7FD8BA36976E73CCF9151C7069CA0E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ADFB5EC9B1DA991B04C8903769EF834E /* Build configuration list for PBXNativeTarget "RDSpeechReaderView" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 50F8FFD3B4E6D3CE1AE08DEB910B48EE /* Debug */, - 396BC6EEF9E7E0BCAAEA0DC00F55968B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - B4EFCC222F2A780FF376179B1C60098D /* Build configuration list for PBXNativeTarget "ZIPFoundation" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 40FFFF4767533BC952BA1F78CCDCB4AC /* Debug */, - B169B65A62DAE42DE9A6CD1322B2770D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DE7AB0E01615B50F23381FFAEFF20E5B /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 52537393D6301EC4EC1D446B22DAA4B6 /* Debug */, - 459CB83D11DA56FD02D86CB1C6408A7B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - E75535D74C1EF460F963375B59850559 /* Build configuration list for PBXNativeTarget "Pods-ReadViewDemo" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0CCAD0FFCBF6DEA721A71FDFEB58CB00 /* Debug */, - B7CDE9995A60AE7262CC14391698821B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - EB7FE7AF01BFFEBE77A46FDC98F484EA /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 984661288CA8670CA17D31E2AC43B452 /* Debug */, - 8E8B39CBF8B43C5AD2EA268A100C9EC4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; -} diff --git a/ReadViewDemo/Pods/SnapKit/LICENSE b/ReadViewDemo/Pods/SnapKit/LICENSE deleted file mode 100644 index a18ccfb..0000000 --- a/ReadViewDemo/Pods/SnapKit/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/ReadViewDemo/Pods/SnapKit/README.md b/ReadViewDemo/Pods/SnapKit/README.md deleted file mode 100644 index e1be307..0000000 --- a/ReadViewDemo/Pods/SnapKit/README.md +++ /dev/null @@ -1,155 +0,0 @@ - - -SnapKit is a DSL to make Auto Layout easy on both iOS and OS X. - -[![Build Status](https://travis-ci.org/SnapKit/SnapKit.svg)](https://travis-ci.org/SnapKit/SnapKit) -[![Platform](https://img.shields.io/cocoapods/p/SnapKit.svg?style=flat)](https://github.com/SnapKit/SnapKit) -[![Cocoapods Compatible](https://img.shields.io/cocoapods/v/SnapKit.svg)](https://cocoapods.org/pods/SnapKit) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) - -#### ⚠️ **To use with Swift 4.x please ensure you are using >= 4.0.0** ⚠️ -#### ⚠️ **To use with Swift 5.x please ensure you are using >= 5.0.0** ⚠️ - -## Contents - -- [Requirements](#requirements) -- [Migration Guides](#migration-guides) -- [Communication](#communication) -- [Installation](#installation) -- [Usage](#usage) -- [Credits](#credits) -- [License](#license) - -## Requirements - -- iOS 12.0+ / Mac OS X 10.13+ / tvOS 10.0+ -- Xcode 10.0+ -- Swift 4.0+ - -## Migration Guides - -- [SnapKit 3.0 Migration Guide](Documentation/SnapKit%203.0%20Migration%20Guide.md) - -## Communication - -- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). (Tag 'snapkit') -- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). -- If you **found a bug**, open an issue. -- If you **have a feature request**, open an issue. -- If you **want to contribute**, submit a pull request. - - -## Installation - -### CocoaPods - -[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: - -```bash -$ gem install cocoapods -``` - -> CocoaPods 1.1.0+ is required to build SnapKit 4.0.0+. - -To integrate SnapKit into your Xcode project using CocoaPods, specify it in your `Podfile`: - -```ruby -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '10.0' -use_frameworks! - -target '' do - pod 'SnapKit', '~> 5.7.0' -end -``` - -Then, run the following command: - -```bash -$ pod install -``` - -### Carthage - -[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. - -You can install Carthage with [Homebrew](http://brew.sh/) using the following command: - -```bash -$ brew update -$ brew install carthage -``` - -To integrate SnapKit into your Xcode project using Carthage, specify it in your `Cartfile`: - -```ogdl -github "SnapKit/SnapKit" ~> 5.0.0 -``` - -Run `carthage update` to build the framework and drag the built `SnapKit.framework` into your Xcode project. - -### Swift Package Manager - -[Swift Package Manager](https://swift.org/package-manager/) is a tool for managing the distribution of Swift code. It’s integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies. - -> Xcode 11+ is required to build SnapKit using Swift Package Manager. - -To integrate SnapKit into your Xcode project using Swift Package Manager, add it to the dependencies value of your `Package.swift`: - -```swift -dependencies: [ - .package(url: "https://github.com/SnapKit/SnapKit.git", .upToNextMajor(from: "5.0.1")) -] -``` - -### Manually - -If you prefer not to use either of the aforementioned dependency managers, you can integrate SnapKit into your project manually. - ---- - -## Usage - -### Quick Start - -```swift -import SnapKit - -class MyViewController: UIViewController { - - lazy var box = UIView() - - override func viewDidLoad() { - super.viewDidLoad() - - self.view.addSubview(box) - box.backgroundColor = .green - box.snp.makeConstraints { (make) -> Void in - make.width.height.equalTo(50) - make.center.equalTo(self.view) - } - } - -} -``` - -### Playground -You can try SnapKit in Playground. - -**Note:** - -> To try SnapKit in playground, open `SnapKit.xcworkspace` and build SnapKit.framework for any simulator first. - -### Resources - -- [Documentation](https://snapkit.github.io/SnapKit/docs/) -- [F.A.Q.](https://snapkit.github.io/SnapKit/faq/) - -## Credits - -- Robert Payne ([@robertjpayne](https://twitter.com/robertjpayne)) -- Many other contributors - -## License - -SnapKit is released under the MIT license. See LICENSE for details. diff --git a/ReadViewDemo/Pods/SnapKit/Sources/Constraint.swift b/ReadViewDemo/Pods/SnapKit/Sources/Constraint.swift deleted file mode 100644 index b890152..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/Constraint.swift +++ /dev/null @@ -1,341 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - -public final class Constraint { - - internal let sourceLocation: (String, UInt) - internal let label: String? - - private let from: ConstraintItem - private let to: ConstraintItem - private let relation: ConstraintRelation - private let multiplier: ConstraintMultiplierTarget - private var constant: ConstraintConstantTarget { - didSet { - self.updateConstantAndPriorityIfNeeded() - } - } - private var priority: ConstraintPriorityTarget { - didSet { - self.updateConstantAndPriorityIfNeeded() - } - } - public var layoutConstraints: [LayoutConstraint] - - public var isActive: Bool { - set { - if newValue { - activate() - } - else { - deactivate() - } - } - - get { - for layoutConstraint in self.layoutConstraints { - if layoutConstraint.isActive { - return true - } - } - return false - } - } - - // MARK: Initialization - - internal init(from: ConstraintItem, - to: ConstraintItem, - relation: ConstraintRelation, - sourceLocation: (String, UInt), - label: String?, - multiplier: ConstraintMultiplierTarget, - constant: ConstraintConstantTarget, - priority: ConstraintPriorityTarget) { - self.from = from - self.to = to - self.relation = relation - self.sourceLocation = sourceLocation - self.label = label - self.multiplier = multiplier - self.constant = constant - self.priority = priority - self.layoutConstraints = [] - - // get attributes - let layoutFromAttributes = self.from.attributes.layoutAttributes - let layoutToAttributes = self.to.attributes.layoutAttributes - - // get layout from - let layoutFrom = self.from.layoutConstraintItem! - - // get relation - let layoutRelation = self.relation.layoutRelation - - for layoutFromAttribute in layoutFromAttributes { - // get layout to attribute - let layoutToAttribute: LayoutAttribute - #if canImport(UIKit) - if layoutToAttributes.count > 0 { - if self.from.attributes == .edges && self.to.attributes == .margins { - switch layoutFromAttribute { - case .left: - layoutToAttribute = .leftMargin - case .right: - layoutToAttribute = .rightMargin - case .top: - layoutToAttribute = .topMargin - case .bottom: - layoutToAttribute = .bottomMargin - default: - fatalError() - } - } else if self.from.attributes == .margins && self.to.attributes == .edges { - switch layoutFromAttribute { - case .leftMargin: - layoutToAttribute = .left - case .rightMargin: - layoutToAttribute = .right - case .topMargin: - layoutToAttribute = .top - case .bottomMargin: - layoutToAttribute = .bottom - default: - fatalError() - } - } else if self.from.attributes == .directionalEdges && self.to.attributes == .directionalMargins { - switch layoutFromAttribute { - case .leading: - layoutToAttribute = .leadingMargin - case .trailing: - layoutToAttribute = .trailingMargin - case .top: - layoutToAttribute = .topMargin - case .bottom: - layoutToAttribute = .bottomMargin - default: - fatalError() - } - } else if self.from.attributes == .directionalMargins && self.to.attributes == .directionalEdges { - switch layoutFromAttribute { - case .leadingMargin: - layoutToAttribute = .leading - case .trailingMargin: - layoutToAttribute = .trailing - case .topMargin: - layoutToAttribute = .top - case .bottomMargin: - layoutToAttribute = .bottom - default: - fatalError() - } - } else if self.from.attributes == self.to.attributes { - layoutToAttribute = layoutFromAttribute - } else { - layoutToAttribute = layoutToAttributes[0] - } - } else { - if self.to.target == nil && (layoutFromAttribute == .centerX || layoutFromAttribute == .centerY) { - layoutToAttribute = layoutFromAttribute == .centerX ? .left : .top - } else { - layoutToAttribute = layoutFromAttribute - } - } - #else - if self.from.attributes == self.to.attributes { - layoutToAttribute = layoutFromAttribute - } else if layoutToAttributes.count > 0 { - layoutToAttribute = layoutToAttributes[0] - } else { - layoutToAttribute = layoutFromAttribute - } - #endif - - // get layout constant - let layoutConstant: CGFloat = self.constant.constraintConstantTargetValueFor(layoutAttribute: layoutToAttribute) - - // get layout to - var layoutTo: AnyObject? = self.to.target - - // use superview if possible - if layoutTo == nil && layoutToAttribute != .width && layoutToAttribute != .height { - layoutTo = layoutFrom.superview - } - - // create layout constraint - let layoutConstraint = LayoutConstraint( - item: layoutFrom, - attribute: layoutFromAttribute, - relatedBy: layoutRelation, - toItem: layoutTo, - attribute: layoutToAttribute, - multiplier: self.multiplier.constraintMultiplierTargetValue, - constant: layoutConstant - ) - - // set label - layoutConstraint.label = self.label - - // set priority - layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue) - - // set constraint - layoutConstraint.constraint = self - - // append - self.layoutConstraints.append(layoutConstraint) - } - } - - // MARK: Public - - @available(*, deprecated, renamed:"activate()") - public func install() { - self.activate() - } - - @available(*, deprecated, renamed:"deactivate()") - public func uninstall() { - self.deactivate() - } - - public func activate() { - self.activateIfNeeded() - } - - public func deactivate() { - self.deactivateIfNeeded() - } - - @discardableResult - public func update(offset: ConstraintOffsetTarget) -> Constraint { - self.constant = offset.constraintOffsetTargetValue - return self - } - - @discardableResult - public func update(inset: ConstraintInsetTarget) -> Constraint { - self.constant = inset.constraintInsetTargetValue - return self - } - - #if canImport(UIKit) - @discardableResult - @available(iOS 11.0, tvOS 11.0, *) - public func update(inset: ConstraintDirectionalInsetTarget) -> Constraint { - self.constant = inset.constraintDirectionalInsetTargetValue - return self - } - #endif - - @discardableResult - public func update(priority: ConstraintPriorityTarget) -> Constraint { - self.priority = priority.constraintPriorityTargetValue - return self - } - - @discardableResult - public func update(priority: ConstraintPriority) -> Constraint { - self.priority = priority.value - return self - } - - @available(*, deprecated, renamed:"update(offset:)") - public func updateOffset(amount: ConstraintOffsetTarget) -> Void { self.update(offset: amount) } - - @available(*, deprecated, renamed:"update(inset:)") - public func updateInsets(amount: ConstraintInsetTarget) -> Void { self.update(inset: amount) } - - @available(*, deprecated, renamed:"update(priority:)") - public func updatePriority(amount: ConstraintPriorityTarget) -> Void { self.update(priority: amount) } - - @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriorityRequired() -> Void {} - - @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriorityHigh() -> Void { fatalError("Must be implemented by Concrete subclass.") } - - @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriorityMedium() -> Void { fatalError("Must be implemented by Concrete subclass.") } - - @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriorityLow() -> Void { fatalError("Must be implemented by Concrete subclass.") } - - // MARK: Internal - - internal func updateConstantAndPriorityIfNeeded() { - for layoutConstraint in self.layoutConstraints { - let attribute = (layoutConstraint.secondAttribute == .notAnAttribute) ? layoutConstraint.firstAttribute : layoutConstraint.secondAttribute - layoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: attribute) - - let requiredPriority = ConstraintPriority.required.value - if (layoutConstraint.priority.rawValue < requiredPriority), (self.priority.constraintPriorityTargetValue != requiredPriority) { - layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue) - } - } - } - - internal func activateIfNeeded(updatingExisting: Bool = false) { - guard let item = self.from.layoutConstraintItem else { - print("WARNING: SnapKit failed to get from item from constraint. Activate will be a no-op.") - return - } - let layoutConstraints = self.layoutConstraints - - if updatingExisting { - var existingLayoutConstraints: [LayoutConstraint] = [] - for constraint in item.constraints { - existingLayoutConstraints += constraint.layoutConstraints - } - - for layoutConstraint in layoutConstraints { - let existingLayoutConstraint = existingLayoutConstraints.first { $0 == layoutConstraint } - guard let updateLayoutConstraint = existingLayoutConstraint else { - fatalError("Updated constraint could not find existing matching constraint to update: \(layoutConstraint)") - } - - let updateLayoutAttribute = (updateLayoutConstraint.secondAttribute == .notAnAttribute) ? updateLayoutConstraint.firstAttribute : updateLayoutConstraint.secondAttribute - updateLayoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: updateLayoutAttribute) - } - } else { - NSLayoutConstraint.activate(layoutConstraints) - item.add(constraints: [self]) - } - } - - internal func deactivateIfNeeded() { - guard let item = self.from.layoutConstraintItem else { - print("WARNING: SnapKit failed to get from item from constraint. Deactivate will be a no-op.") - return - } - let layoutConstraints = self.layoutConstraints - NSLayoutConstraint.deactivate(layoutConstraints) - item.remove(constraints: [self]) - } -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintAttributes.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintAttributes.swift deleted file mode 100644 index c1a79c2..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintAttributes.swift +++ /dev/null @@ -1,203 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -internal struct ConstraintAttributes : OptionSet, ExpressibleByIntegerLiteral { - - typealias IntegerLiteralType = UInt - - internal init(rawValue: UInt) { - self.rawValue = rawValue - } - internal init(_ rawValue: UInt) { - self.init(rawValue: rawValue) - } - internal init(nilLiteral: ()) { - self.rawValue = 0 - } - internal init(integerLiteral rawValue: IntegerLiteralType) { - self.init(rawValue: rawValue) - } - - internal private(set) var rawValue: UInt - internal static var allZeros: ConstraintAttributes { return 0 } - internal static func convertFromNilLiteral() -> ConstraintAttributes { return 0 } - internal var boolValue: Bool { return self.rawValue != 0 } - - internal func toRaw() -> UInt { return self.rawValue } - internal static func fromRaw(_ raw: UInt) -> ConstraintAttributes? { return self.init(raw) } - internal static func fromMask(_ raw: UInt) -> ConstraintAttributes { return self.init(raw) } - - // normal - - internal static let none: ConstraintAttributes = 0 - internal static let left: ConstraintAttributes = ConstraintAttributes(UInt(1) << 0) - internal static let top: ConstraintAttributes = ConstraintAttributes(UInt(1) << 1) - internal static let right: ConstraintAttributes = ConstraintAttributes(UInt(1) << 2) - internal static let bottom: ConstraintAttributes = ConstraintAttributes(UInt(1) << 3) - internal static let leading: ConstraintAttributes = ConstraintAttributes(UInt(1) << 4) - internal static let trailing: ConstraintAttributes = ConstraintAttributes(UInt(1) << 5) - internal static let width: ConstraintAttributes = ConstraintAttributes(UInt(1) << 6) - internal static let height: ConstraintAttributes = ConstraintAttributes(UInt(1) << 7) - internal static let centerX: ConstraintAttributes = ConstraintAttributes(UInt(1) << 8) - internal static let centerY: ConstraintAttributes = ConstraintAttributes(UInt(1) << 9) - internal static let lastBaseline: ConstraintAttributes = ConstraintAttributes(UInt(1) << 10) - - @available(iOS 8.0, OSX 10.11, *) - internal static let firstBaseline: ConstraintAttributes = ConstraintAttributes(UInt(1) << 11) - - @available(iOS 8.0, *) - internal static let leftMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 12) - - @available(iOS 8.0, *) - internal static let rightMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 13) - - @available(iOS 8.0, *) - internal static let topMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 14) - - @available(iOS 8.0, *) - internal static let bottomMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 15) - - @available(iOS 8.0, *) - internal static let leadingMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 16) - - @available(iOS 8.0, *) - internal static let trailingMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 17) - - @available(iOS 8.0, *) - internal static let centerXWithinMargins: ConstraintAttributes = ConstraintAttributes(UInt(1) << 18) - - @available(iOS 8.0, *) - internal static let centerYWithinMargins: ConstraintAttributes = ConstraintAttributes(UInt(1) << 19) - - // aggregates - - internal static let edges: ConstraintAttributes = [.horizontalEdges, .verticalEdges] - internal static let horizontalEdges: ConstraintAttributes = [.left, .right] - internal static let verticalEdges: ConstraintAttributes = [.top, .bottom] - internal static let directionalEdges: ConstraintAttributes = [.directionalHorizontalEdges, .directionalVerticalEdges] - internal static let directionalHorizontalEdges: ConstraintAttributes = [.leading, .trailing] - internal static let directionalVerticalEdges: ConstraintAttributes = [.top, .bottom] - internal static let size: ConstraintAttributes = [.width, .height] - internal static let center: ConstraintAttributes = [.centerX, .centerY] - - @available(iOS 8.0, *) - internal static let margins: ConstraintAttributes = [.leftMargin, .topMargin, .rightMargin, .bottomMargin] - - @available(iOS 8.0, *) - internal static let directionalMargins: ConstraintAttributes = [.leadingMargin, .topMargin, .trailingMargin, .bottomMargin] - - @available(iOS 8.0, *) - internal static let centerWithinMargins: ConstraintAttributes = [.centerXWithinMargins, .centerYWithinMargins] - - internal var layoutAttributes:[LayoutAttribute] { - var attrs = [LayoutAttribute]() - if (self.contains(ConstraintAttributes.left)) { - attrs.append(.left) - } - if (self.contains(ConstraintAttributes.top)) { - attrs.append(.top) - } - if (self.contains(ConstraintAttributes.right)) { - attrs.append(.right) - } - if (self.contains(ConstraintAttributes.bottom)) { - attrs.append(.bottom) - } - if (self.contains(ConstraintAttributes.leading)) { - attrs.append(.leading) - } - if (self.contains(ConstraintAttributes.trailing)) { - attrs.append(.trailing) - } - if (self.contains(ConstraintAttributes.width)) { - attrs.append(.width) - } - if (self.contains(ConstraintAttributes.height)) { - attrs.append(.height) - } - if (self.contains(ConstraintAttributes.centerX)) { - attrs.append(.centerX) - } - if (self.contains(ConstraintAttributes.centerY)) { - attrs.append(.centerY) - } - if (self.contains(ConstraintAttributes.lastBaseline)) { - attrs.append(.lastBaseline) - } - - #if canImport(UIKit) - if (self.contains(ConstraintAttributes.firstBaseline)) { - attrs.append(.firstBaseline) - } - if (self.contains(ConstraintAttributes.leftMargin)) { - attrs.append(.leftMargin) - } - if (self.contains(ConstraintAttributes.rightMargin)) { - attrs.append(.rightMargin) - } - if (self.contains(ConstraintAttributes.topMargin)) { - attrs.append(.topMargin) - } - if (self.contains(ConstraintAttributes.bottomMargin)) { - attrs.append(.bottomMargin) - } - if (self.contains(ConstraintAttributes.leadingMargin)) { - attrs.append(.leadingMargin) - } - if (self.contains(ConstraintAttributes.trailingMargin)) { - attrs.append(.trailingMargin) - } - if (self.contains(ConstraintAttributes.centerXWithinMargins)) { - attrs.append(.centerXWithinMargins) - } - if (self.contains(ConstraintAttributes.centerYWithinMargins)) { - attrs.append(.centerYWithinMargins) - } - #endif - - return attrs - } -} - -internal func + (left: ConstraintAttributes, right: ConstraintAttributes) -> ConstraintAttributes { - return left.union(right) -} - -internal func +=(left: inout ConstraintAttributes, right: ConstraintAttributes) { - left.formUnion(right) -} - -internal func -=(left: inout ConstraintAttributes, right: ConstraintAttributes) { - left.subtract(right) -} - -internal func ==(left: ConstraintAttributes, right: ConstraintAttributes) -> Bool { - return left.rawValue == right.rawValue -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintConfig.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintConfig.swift deleted file mode 100644 index 9bd0f23..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintConfig.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit - public typealias ConstraintInterfaceLayoutDirection = UIUserInterfaceLayoutDirection -#else - import AppKit - public typealias ConstraintInterfaceLayoutDirection = NSUserInterfaceLayoutDirection -#endif - - -public struct ConstraintConfig { - - public static var interfaceLayoutDirection: ConstraintInterfaceLayoutDirection = .leftToRight - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintConstantTarget.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintConstantTarget.swift deleted file mode 100644 index e16f503..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintConstantTarget.swift +++ /dev/null @@ -1,213 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintConstantTarget { -} - -extension CGPoint: ConstraintConstantTarget { -} - -extension CGSize: ConstraintConstantTarget { -} - -extension ConstraintInsets: ConstraintConstantTarget { -} - -#if canImport(UIKit) -@available(iOS 11.0, tvOS 11.0, *) -extension ConstraintDirectionalInsets: ConstraintConstantTarget { -} -#endif - -extension ConstraintConstantTarget { - - internal func constraintConstantTargetValueFor(layoutAttribute: LayoutAttribute) -> CGFloat { - if let value = self as? CGFloat { - return value - } - - if let value = self as? Float { - return CGFloat(value) - } - - if let value = self as? Double { - return CGFloat(value) - } - - if let value = self as? Int { - return CGFloat(value) - } - - if let value = self as? UInt { - return CGFloat(value) - } - - if let value = self as? CGSize { - if layoutAttribute == .width { - return value.width - } else if layoutAttribute == .height { - return value.height - } else { - return 0.0 - } - } - - if let value = self as? CGPoint { - #if canImport(UIKit) - switch layoutAttribute { - case .left, .right, .leading, .trailing, .centerX, .leftMargin, .rightMargin, .leadingMargin, .trailingMargin, .centerXWithinMargins: - return value.x - case .top, .bottom, .centerY, .topMargin, .bottomMargin, .centerYWithinMargins, .lastBaseline, .firstBaseline: - return value.y - case .width, .height, .notAnAttribute: - return 0.0 - #if swift(>=5.0) - @unknown default: - return 0.0 - #endif - } - #else - switch layoutAttribute { - case .left, .right, .leading, .trailing, .centerX: - return value.x - case .top, .bottom, .centerY, .lastBaseline, .firstBaseline: - return value.y - case .width, .height, .notAnAttribute: - return 0.0 - #if swift(>=5.0) - @unknown default: - return 0.0 - #endif - } - #endif - } - - if let value = self as? ConstraintInsets { - #if canImport(UIKit) - switch layoutAttribute { - case .left, .leftMargin: - return value.left - case .top, .topMargin, .firstBaseline: - return value.top - case .right, .rightMargin: - return -value.right - case .bottom, .bottomMargin, .lastBaseline: - return -value.bottom - case .leading, .leadingMargin: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right - case .trailing, .trailingMargin: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left - case .centerX, .centerXWithinMargins: - return (value.left - value.right) / 2 - case .centerY, .centerYWithinMargins: - return (value.top - value.bottom) / 2 - case .width: - return -(value.left + value.right) - case .height: - return -(value.top + value.bottom) - case .notAnAttribute: - return 0.0 - #if swift(>=5.0) - @unknown default: - return 0.0 - #endif - } - #else - switch layoutAttribute { - case .left: - return value.left - case .top, .firstBaseline: - return value.top - case .right: - return -value.right - case .bottom, .lastBaseline: - return -value.bottom - case .leading: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right - case .trailing: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left - case .centerX: - return (value.left - value.right) / 2 - case .centerY: - return (value.top - value.bottom) / 2 - case .width: - return -(value.left + value.right) - case .height: - return -(value.top + value.bottom) - case .notAnAttribute: - return 0.0 - #if swift(>=5.0) - @unknown default: - return 0.0 - #endif - } - #endif - } - - #if canImport(UIKit) - if #available(iOS 11.0, tvOS 11.0, *), let value = self as? ConstraintDirectionalInsets { - switch layoutAttribute { - case .left, .leftMargin: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.leading : value.trailing - case .top, .topMargin, .firstBaseline: - return value.top - case .right, .rightMargin: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.trailing : -value.leading - case .bottom, .bottomMargin, .lastBaseline: - return -value.bottom - case .leading, .leadingMargin: - return value.leading - case .trailing, .trailingMargin: - return -value.trailing - case .centerX, .centerXWithinMargins: - return (value.leading - value.trailing) / 2 - case .centerY, .centerYWithinMargins: - return (value.top - value.bottom) / 2 - case .width: - return -(value.leading + value.trailing) - case .height: - return -(value.top + value.bottom) - case .notAnAttribute: - return 0.0 - #if swift(>=5.0) - @unknown default: - return 0.0 - #else - default: - return 0.0 - #endif - } - } - #endif - - return 0.0 - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintDSL.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintDSL.swift deleted file mode 100644 index 5683b7f..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintDSL.swift +++ /dev/null @@ -1,209 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintDSL { - - var target: AnyObject? { get } - - func setLabel(_ value: String?) - func label() -> String? - -} -extension ConstraintDSL { - - public func setLabel(_ value: String?) { - objc_setAssociatedObject(self.target as Any, &labelKey, value, .OBJC_ASSOCIATION_COPY_NONATOMIC) - } - public func label() -> String? { - return objc_getAssociatedObject(self.target as Any, &labelKey) as? String - } - -} -private var labelKey: UInt8 = 0 - - -public protocol ConstraintBasicAttributesDSL : ConstraintDSL { -} -extension ConstraintBasicAttributesDSL { - - // MARK: Basics - - public var left: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.left) - } - - public var top: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) - } - - public var right: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.right) - } - - public var bottom: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) - } - - public var leading: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leading) - } - - public var trailing: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailing) - } - - public var width: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.width) - } - - public var height: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) - } - - public var centerX: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerX) - } - - public var centerY: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerY) - } - - public var edges: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.edges) - } - - public var directionalEdges: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalEdges) - } - - public var horizontalEdges: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.horizontalEdges) - } - - public var verticalEdges: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.verticalEdges) - } - - public var directionalHorizontalEdges: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalHorizontalEdges) - } - - public var directionalVerticalEdges: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalVerticalEdges) - } - - public var size: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.size) - } - - public var center: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.center) - } - -} - -public protocol ConstraintAttributesDSL : ConstraintBasicAttributesDSL { -} -extension ConstraintAttributesDSL { - - // MARK: Baselines - @available(*, deprecated, renamed:"lastBaseline") - public var baseline: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline) - } - - @available(iOS 8.0, OSX 10.11, *) - public var lastBaseline: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline) - } - - @available(iOS 8.0, OSX 10.11, *) - public var firstBaseline: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.firstBaseline) - } - - // MARK: Margins - - @available(iOS 8.0, *) - public var leftMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leftMargin) - } - - @available(iOS 8.0, *) - public var topMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.topMargin) - } - - @available(iOS 8.0, *) - public var rightMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.rightMargin) - } - - @available(iOS 8.0, *) - public var bottomMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottomMargin) - } - - @available(iOS 8.0, *) - public var leadingMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leadingMargin) - } - - @available(iOS 8.0, *) - public var trailingMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailingMargin) - } - - @available(iOS 8.0, *) - public var centerXWithinMargins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerXWithinMargins) - } - - @available(iOS 8.0, *) - public var centerYWithinMargins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerYWithinMargins) - } - - @available(iOS 8.0, *) - public var margins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.margins) - } - - @available(iOS 8.0, *) - public var directionalMargins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalMargins) - } - - @available(iOS 8.0, *) - public var centerWithinMargins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerWithinMargins) - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintDescription.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintDescription.swift deleted file mode 100644 index b9d476c..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintDescription.swift +++ /dev/null @@ -1,69 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintDescription { - - internal let item: LayoutConstraintItem - internal var attributes: ConstraintAttributes - internal var relation: ConstraintRelation? = nil - internal var sourceLocation: (String, UInt)? = nil - internal var label: String? = nil - internal var related: ConstraintItem? = nil - internal var multiplier: ConstraintMultiplierTarget = 1.0 - internal var constant: ConstraintConstantTarget = 0.0 - internal var priority: ConstraintPriorityTarget = 1000.0 - internal lazy var constraint: Constraint? = { - guard let relation = self.relation, - let related = self.related, - let sourceLocation = self.sourceLocation else { - return nil - } - let from = ConstraintItem(target: self.item, attributes: self.attributes) - - return Constraint( - from: from, - to: related, - relation: relation, - sourceLocation: sourceLocation, - label: self.label, - multiplier: self.multiplier, - constant: self.constant, - priority: self.priority - ) - }() - - // MARK: Initialization - - internal init(item: LayoutConstraintItem, attributes: ConstraintAttributes) { - self.item = item - self.attributes = attributes - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintDirectionalInsetTarget.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintDirectionalInsetTarget.swift deleted file mode 100644 index 4c3c418..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintDirectionalInsetTarget.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) -import UIKit -#else -import AppKit -#endif - -#if canImport(UIKit) -public protocol ConstraintDirectionalInsetTarget: ConstraintConstantTarget { -} - -@available(iOS 11.0, tvOS 11.0, *) -extension ConstraintDirectionalInsets: ConstraintDirectionalInsetTarget { -} - -extension ConstraintDirectionalInsetTarget { - - @available(iOS 11.0, tvOS 11.0, *) - internal var constraintDirectionalInsetTargetValue: ConstraintDirectionalInsets { - if let amount = self as? ConstraintDirectionalInsets { - return amount - } else { - return ConstraintDirectionalInsets(top: 0, leading: 0, bottom: 0, trailing: 0) - } - } -} -#endif diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintDirectionalInsets.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintDirectionalInsets.swift deleted file mode 100644 index 056b5c8..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintDirectionalInsets.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -#if canImport(UIKit) - @available(iOS 11.0, tvOS 11.0, *) - public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets -#endif diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintInsetTarget.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintInsetTarget.swift deleted file mode 100644 index 43c0220..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintInsetTarget.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintInsetTarget: ConstraintConstantTarget { -} - -extension Int: ConstraintInsetTarget { -} - -extension UInt: ConstraintInsetTarget { -} - -extension Float: ConstraintInsetTarget { -} - -extension Double: ConstraintInsetTarget { -} - -extension CGFloat: ConstraintInsetTarget { -} - -extension ConstraintInsets: ConstraintInsetTarget { -} - -extension ConstraintInsetTarget { - - internal var constraintInsetTargetValue: ConstraintInsets { - if let amount = self as? ConstraintInsets { - return amount - } else if let amount = self as? Float { - return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) - } else if let amount = self as? Double { - return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) - } else if let amount = self as? CGFloat { - return ConstraintInsets(top: amount, left: amount, bottom: amount, right: amount) - } else if let amount = self as? Int { - return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) - } else if let amount = self as? UInt { - return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) - } else { - return ConstraintInsets(top: 0, left: 0, bottom: 0, right: 0) - } - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintInsets.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintInsets.swift deleted file mode 100644 index 64d781d..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintInsets.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -#if canImport(UIKit) - public typealias ConstraintInsets = UIEdgeInsets -#else - public typealias ConstraintInsets = NSEdgeInsets -#endif diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintItem.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintItem.swift deleted file mode 100644 index 2f92221..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintItem.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public final class ConstraintItem { - - internal weak var target: AnyObject? - internal let attributes: ConstraintAttributes - - internal init(target: AnyObject?, attributes: ConstraintAttributes) { - self.target = target - self.attributes = attributes - } - - internal var layoutConstraintItem: LayoutConstraintItem? { - return self.target as? LayoutConstraintItem - } - -} - -public func ==(lhs: ConstraintItem, rhs: ConstraintItem) -> Bool { - // pointer equality - guard lhs !== rhs else { - return true - } - - // must both have valid targets and identical attributes - guard let target1 = lhs.target, - let target2 = rhs.target, - target1 === target2 && lhs.attributes == rhs.attributes else { - return false - } - - return true -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutGuide+Extensions.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutGuide+Extensions.swift deleted file mode 100644 index e9fd9b3..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutGuide+Extensions.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#endif - - -@available(iOS 9.0, OSX 10.11, *) -public extension ConstraintLayoutGuide { - - var snp: ConstraintLayoutGuideDSL { - return ConstraintLayoutGuideDSL(guide: self) - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutGuide.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutGuide.swift deleted file mode 100644 index fd89556..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutGuide.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -#if canImport(UIKit) - @available(iOS 9.0, *) - public typealias ConstraintLayoutGuide = UILayoutGuide -#else - @available(OSX 10.11, *) - public typealias ConstraintLayoutGuide = NSLayoutGuide -#endif diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutGuideDSL.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutGuideDSL.swift deleted file mode 100644 index 7e78261..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutGuideDSL.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -@available(iOS 9.0, OSX 10.11, *) -public struct ConstraintLayoutGuideDSL: ConstraintAttributesDSL { - - @discardableResult - public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { - return ConstraintMaker.prepareConstraints(item: self.guide, closure: closure) - } - - public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.makeConstraints(item: self.guide, closure: closure) - } - - public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.remakeConstraints(item: self.guide, closure: closure) - } - - public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.updateConstraints(item: self.guide, closure: closure) - } - - public func removeConstraints() { - ConstraintMaker.removeConstraints(item: self.guide) - } - - public var target: AnyObject? { - return self.guide - } - - internal let guide: ConstraintLayoutGuide - - internal init(guide: ConstraintLayoutGuide) { - self.guide = guide - - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutSupport.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutSupport.swift deleted file mode 100644 index 085f5cd..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutSupport.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -#if canImport(UIKit) - @available(iOS 8.0, *) - public typealias ConstraintLayoutSupport = UILayoutSupport -#else - public class ConstraintLayoutSupport {} -#endif diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutSupportDSL.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutSupportDSL.swift deleted file mode 100644 index 71e1158..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintLayoutSupportDSL.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -@available(iOS 8.0, *) -public struct ConstraintLayoutSupportDSL: ConstraintDSL { - - public var target: AnyObject? { - return self.support - } - - internal let support: ConstraintLayoutSupport - - internal init(support: ConstraintLayoutSupport) { - self.support = support - - } - - public var top: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) - } - - public var bottom: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) - } - - public var height: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) - } -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMaker.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMaker.swift deleted file mode 100644 index 7c352f6..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMaker.swift +++ /dev/null @@ -1,224 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - -public class ConstraintMaker { - - public var left: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.left) - } - - public var top: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.top) - } - - public var bottom: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.bottom) - } - - public var right: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.right) - } - - public var leading: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.leading) - } - - public var trailing: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.trailing) - } - - public var width: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.width) - } - - public var height: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.height) - } - - public var centerX: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerX) - } - - public var centerY: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerY) - } - - @available(*, deprecated, renamed:"lastBaseline") - public var baseline: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.lastBaseline) - } - - public var lastBaseline: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.lastBaseline) - } - - @available(iOS 8.0, OSX 10.11, *) - public var firstBaseline: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.firstBaseline) - } - - @available(iOS 8.0, *) - public var leftMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.leftMargin) - } - - @available(iOS 8.0, *) - public var rightMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.rightMargin) - } - - @available(iOS 8.0, *) - public var topMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.topMargin) - } - - @available(iOS 8.0, *) - public var bottomMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.bottomMargin) - } - - @available(iOS 8.0, *) - public var leadingMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.leadingMargin) - } - - @available(iOS 8.0, *) - public var trailingMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.trailingMargin) - } - - @available(iOS 8.0, *) - public var centerXWithinMargins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerXWithinMargins) - } - - @available(iOS 8.0, *) - public var centerYWithinMargins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerYWithinMargins) - } - - public var edges: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.edges) - } - public var horizontalEdges: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.horizontalEdges) - } - public var verticalEdges: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.verticalEdges) - } - public var directionalEdges: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.directionalEdges) - } - public var directionalHorizontalEdges: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.directionalHorizontalEdges) - } - public var directionalVerticalEdges: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.directionalVerticalEdges) - } - public var size: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.size) - } - public var center: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.center) - } - - @available(iOS 8.0, *) - public var margins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.margins) - } - - @available(iOS 8.0, *) - public var directionalMargins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.directionalMargins) - } - - @available(iOS 8.0, *) - public var centerWithinMargins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerWithinMargins) - } - - public let item: LayoutConstraintItem - private var descriptions = [ConstraintDescription]() - - internal init(item: LayoutConstraintItem) { - self.item = item - self.item.prepare() - } - - internal func makeExtendableWithAttributes(_ attributes: ConstraintAttributes) -> ConstraintMakerExtendable { - let description = ConstraintDescription(item: self.item, attributes: attributes) - self.descriptions.append(description) - return ConstraintMakerExtendable(description) - } - - internal static func prepareConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { - let maker = ConstraintMaker(item: item) - closure(maker) - var constraints: [Constraint] = [] - for description in maker.descriptions { - guard let constraint = description.constraint else { - continue - } - constraints.append(constraint) - } - return constraints - } - - internal static func makeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { - let constraints = prepareConstraints(item: item, closure: closure) - for constraint in constraints { - constraint.activateIfNeeded(updatingExisting: false) - } - } - - internal static func remakeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { - self.removeConstraints(item: item) - self.makeConstraints(item: item, closure: closure) - } - - internal static func updateConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { - guard item.constraints.count > 0 else { - self.makeConstraints(item: item, closure: closure) - return - } - - let constraints = prepareConstraints(item: item, closure: closure) - for constraint in constraints { - constraint.activateIfNeeded(updatingExisting: true) - } - } - - internal static func removeConstraints(item: LayoutConstraintItem) { - let constraints = item.constraints - for constraint in constraints { - constraint.deactivateIfNeeded() - } - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerEditable.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerEditable.swift deleted file mode 100644 index 0e08e38..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerEditable.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerEditable: ConstraintMakerPrioritizable { - - @discardableResult - public func multipliedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable { - self.description.multiplier = amount - return self - } - - @discardableResult - public func dividedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable { - return self.multipliedBy(1.0 / amount.constraintMultiplierTargetValue) - } - - @discardableResult - public func offset(_ amount: ConstraintOffsetTarget) -> ConstraintMakerEditable { - self.description.constant = amount.constraintOffsetTargetValue - return self - } - - @discardableResult - public func inset(_ amount: ConstraintInsetTarget) -> ConstraintMakerEditable { - self.description.constant = amount.constraintInsetTargetValue - return self - } - - #if canImport(UIKit) - @discardableResult - @available(iOS 11.0, tvOS 11.0, *) - public func inset(_ amount: ConstraintDirectionalInsetTarget) -> ConstraintMakerEditable { - self.description.constant = amount.constraintDirectionalInsetTargetValue - return self - } - #endif -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerExtendable.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerExtendable.swift deleted file mode 100644 index b30688e..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerExtendable.swift +++ /dev/null @@ -1,195 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerExtendable: ConstraintMakerRelatable { - - public var left: ConstraintMakerExtendable { - self.description.attributes += .left - return self - } - - public var top: ConstraintMakerExtendable { - self.description.attributes += .top - return self - } - - public var bottom: ConstraintMakerExtendable { - self.description.attributes += .bottom - return self - } - - public var right: ConstraintMakerExtendable { - self.description.attributes += .right - return self - } - - public var leading: ConstraintMakerExtendable { - self.description.attributes += .leading - return self - } - - public var trailing: ConstraintMakerExtendable { - self.description.attributes += .trailing - return self - } - - public var width: ConstraintMakerExtendable { - self.description.attributes += .width - return self - } - - public var height: ConstraintMakerExtendable { - self.description.attributes += .height - return self - } - - public var centerX: ConstraintMakerExtendable { - self.description.attributes += .centerX - return self - } - - public var centerY: ConstraintMakerExtendable { - self.description.attributes += .centerY - return self - } - - @available(*, deprecated, renamed:"lastBaseline") - public var baseline: ConstraintMakerExtendable { - self.description.attributes += .lastBaseline - return self - } - - public var lastBaseline: ConstraintMakerExtendable { - self.description.attributes += .lastBaseline - return self - } - - @available(iOS 8.0, OSX 10.11, *) - public var firstBaseline: ConstraintMakerExtendable { - self.description.attributes += .firstBaseline - return self - } - - @available(iOS 8.0, *) - public var leftMargin: ConstraintMakerExtendable { - self.description.attributes += .leftMargin - return self - } - - @available(iOS 8.0, *) - public var rightMargin: ConstraintMakerExtendable { - self.description.attributes += .rightMargin - return self - } - - @available(iOS 8.0, *) - public var topMargin: ConstraintMakerExtendable { - self.description.attributes += .topMargin - return self - } - - @available(iOS 8.0, *) - public var bottomMargin: ConstraintMakerExtendable { - self.description.attributes += .bottomMargin - return self - } - - @available(iOS 8.0, *) - public var leadingMargin: ConstraintMakerExtendable { - self.description.attributes += .leadingMargin - return self - } - - @available(iOS 8.0, *) - public var trailingMargin: ConstraintMakerExtendable { - self.description.attributes += .trailingMargin - return self - } - - @available(iOS 8.0, *) - public var centerXWithinMargins: ConstraintMakerExtendable { - self.description.attributes += .centerXWithinMargins - return self - } - - @available(iOS 8.0, *) - public var centerYWithinMargins: ConstraintMakerExtendable { - self.description.attributes += .centerYWithinMargins - return self - } - - public var edges: ConstraintMakerExtendable { - self.description.attributes += .edges - return self - } - public var horizontalEdges: ConstraintMakerExtendable { - self.description.attributes += .horizontalEdges - return self - } - public var verticalEdges: ConstraintMakerExtendable { - self.description.attributes += .verticalEdges - return self - } - public var directionalEdges: ConstraintMakerExtendable { - self.description.attributes += .directionalEdges - return self - } - public var directionalHorizontalEdges: ConstraintMakerExtendable { - self.description.attributes += .directionalHorizontalEdges - return self - } - public var directionalVerticalEdges: ConstraintMakerExtendable { - self.description.attributes += .directionalVerticalEdges - return self - } - public var size: ConstraintMakerExtendable { - self.description.attributes += .size - return self - } - - @available(iOS 8.0, *) - public var margins: ConstraintMakerExtendable { - self.description.attributes += .margins - return self - } - - @available(iOS 8.0, *) - public var directionalMargins: ConstraintMakerExtendable { - self.description.attributes += .directionalMargins - return self - } - - @available(iOS 8.0, *) - public var centerWithinMargins: ConstraintMakerExtendable { - self.description.attributes += .centerWithinMargins - return self - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerFinalizable.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerFinalizable.swift deleted file mode 100644 index 8342476..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerFinalizable.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerFinalizable { - - internal let description: ConstraintDescription - - internal init(_ description: ConstraintDescription) { - self.description = description - } - - @discardableResult - public func labeled(_ label: String) -> ConstraintMakerFinalizable { - self.description.label = label - return self - } - - public var constraint: Constraint { - return self.description.constraint! - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerPrioritizable.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerPrioritizable.swift deleted file mode 100644 index 05451e6..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerPrioritizable.swift +++ /dev/null @@ -1,70 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - -@available(*, deprecated, message:"Use ConstraintMakerPrioritizable instead.") -public typealias ConstraintMakerPriortizable = ConstraintMakerPrioritizable - -public class ConstraintMakerPrioritizable: ConstraintMakerFinalizable { - - @discardableResult - public func priority(_ amount: ConstraintPriority) -> ConstraintMakerFinalizable { - self.description.priority = amount.value - return self - } - - @discardableResult - public func priority(_ amount: ConstraintPriorityTarget) -> ConstraintMakerFinalizable { - self.description.priority = amount - return self - } - - @available(*, deprecated, message:"Use priority(.required) instead.") - @discardableResult - public func priorityRequired() -> ConstraintMakerFinalizable { - return self.priority(.required) - } - - @available(*, deprecated, message:"Use priority(.high) instead.") - @discardableResult - public func priorityHigh() -> ConstraintMakerFinalizable { - return self.priority(.high) - } - - @available(*, deprecated, message:"Use priority(.medium) instead.") - @discardableResult - public func priorityMedium() -> ConstraintMakerFinalizable { - return self.priority(.medium) - } - - @available(*, deprecated, message:"Use priority(.low) instead.") - @discardableResult - public func priorityLow() -> ConstraintMakerFinalizable { - return self.priority(.low) - } -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerRelatable+Extensions.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerRelatable+Extensions.swift deleted file mode 100644 index bfde272..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerRelatable+Extensions.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -extension ConstraintMakerRelatable { - - @discardableResult - public func equalToSuperview(_ closure: (ConstraintView) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview else { - fatalError("Expected superview but found nil when attempting make constraint `equalToSuperview`.") - } - return self.relatedTo(closure(other), relation: .equal, file: file, line: line) - } - - @discardableResult - public func lessThanOrEqualToSuperview(_ closure: (ConstraintView) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview else { - fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperview`.") - } - return self.relatedTo(closure(other), relation: .lessThanOrEqual, file: file, line: line) - } - - @discardableResult - public func greaterThanOrEqualToSuperview(_ closure: (ConstraintView) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview else { - fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperview`.") - } - return self.relatedTo(closure(other), relation: .greaterThanOrEqual, file: file, line: line) - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerRelatable.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerRelatable.swift deleted file mode 100644 index 0a3d5ee..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMakerRelatable.swift +++ /dev/null @@ -1,115 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerRelatable { - - internal let description: ConstraintDescription - - internal init(_ description: ConstraintDescription) { - self.description = description - } - - internal func relatedTo(_ other: ConstraintRelatableTarget, relation: ConstraintRelation, file: String, line: UInt) -> ConstraintMakerEditable { - let related: ConstraintItem - let constant: ConstraintConstantTarget - - if let other = other as? ConstraintItem { - guard other.attributes == ConstraintAttributes.none || - other.attributes.layoutAttributes.count <= 1 || - other.attributes.layoutAttributes == self.description.attributes.layoutAttributes || - other.attributes == .edges && self.description.attributes == .margins || - other.attributes == .margins && self.description.attributes == .edges || - other.attributes == .directionalEdges && self.description.attributes == .directionalMargins || - other.attributes == .directionalMargins && self.description.attributes == .directionalEdges else { - fatalError("Cannot constraint to multiple non identical attributes. (\(file), \(line))"); - } - - related = other - constant = 0.0 - } else if let other = other as? ConstraintView { - related = ConstraintItem(target: other, attributes: ConstraintAttributes.none) - constant = 0.0 - } else if let other = other as? ConstraintConstantTarget { - related = ConstraintItem(target: nil, attributes: ConstraintAttributes.none) - constant = other - } else if #available(iOS 9.0, OSX 10.11, *), let other = other as? ConstraintLayoutGuide { - related = ConstraintItem(target: other, attributes: ConstraintAttributes.none) - constant = 0.0 - } else { - fatalError("Invalid constraint. (\(file), \(line))") - } - - let editable = ConstraintMakerEditable(self.description) - editable.description.sourceLocation = (file, line) - editable.description.relation = relation - editable.description.related = related - editable.description.constant = constant - return editable - } - - @discardableResult - public func equalTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { - return self.relatedTo(other, relation: .equal, file: file, line: line) - } - - @discardableResult - public func equalToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview else { - fatalError("Expected superview but found nil when attempting make constraint `equalToSuperview`.") - } - return self.relatedTo(other, relation: .equal, file: file, line: line) - } - - @discardableResult - public func lessThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { - return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) - } - - @discardableResult - public func lessThanOrEqualToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview else { - fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperview`.") - } - return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) - } - - @discardableResult - public func greaterThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { - return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) - } - - @discardableResult - public func greaterThanOrEqualToSuperview(_ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview else { - fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperview`.") - } - return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) - } -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMultiplierTarget.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMultiplierTarget.swift deleted file mode 100644 index ac537ba..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintMultiplierTarget.swift +++ /dev/null @@ -1,75 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintMultiplierTarget { - - var constraintMultiplierTargetValue: CGFloat { get } - -} - -extension Int: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return CGFloat(self) - } - -} - -extension UInt: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return CGFloat(self) - } - -} - -extension Float: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return CGFloat(self) - } - -} - -extension Double: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return CGFloat(self) - } - -} - -extension CGFloat: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return self - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintOffsetTarget.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintOffsetTarget.swift deleted file mode 100644 index 6ec1107..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintOffsetTarget.swift +++ /dev/null @@ -1,69 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintOffsetTarget: ConstraintConstantTarget { -} - -extension Int: ConstraintOffsetTarget { -} - -extension UInt: ConstraintOffsetTarget { -} - -extension Float: ConstraintOffsetTarget { -} - -extension Double: ConstraintOffsetTarget { -} - -extension CGFloat: ConstraintOffsetTarget { -} - -extension ConstraintOffsetTarget { - - internal var constraintOffsetTargetValue: CGFloat { - let offset: CGFloat - if let amount = self as? Float { - offset = CGFloat(amount) - } else if let amount = self as? Double { - offset = CGFloat(amount) - } else if let amount = self as? CGFloat { - offset = CGFloat(amount) - } else if let amount = self as? Int { - offset = CGFloat(amount) - } else if let amount = self as? UInt { - offset = CGFloat(amount) - } else { - offset = 0.0 - } - return offset - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintPriority.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintPriority.swift deleted file mode 100644 index bf90693..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintPriority.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - -public struct ConstraintPriority : ExpressibleByFloatLiteral, Equatable, Strideable { - public typealias FloatLiteralType = Float - - public let value: Float - - public init(floatLiteral value: Float) { - self.value = value - } - - public init(_ value: Float) { - self.value = value - } - - public static var required: ConstraintPriority { - return 1000.0 - } - - public static var high: ConstraintPriority { - return 750.0 - } - - public static var medium: ConstraintPriority { - #if os(OSX) - return 501.0 - #else - return 500.0 - #endif - - } - - public static var low: ConstraintPriority { - return 250.0 - } - - public static func ==(lhs: ConstraintPriority, rhs: ConstraintPriority) -> Bool { - return lhs.value == rhs.value - } - - // MARK: Strideable - - public func advanced(by n: FloatLiteralType) -> ConstraintPriority { - return ConstraintPriority(floatLiteral: value + n) - } - - public func distance(to other: ConstraintPriority) -> FloatLiteralType { - return other.value - value - } -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintPriorityTarget.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintPriorityTarget.swift deleted file mode 100644 index 1aa701e..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintPriorityTarget.swift +++ /dev/null @@ -1,85 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintPriorityTarget { - - var constraintPriorityTargetValue: Float { get } - -} - -extension Int: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return Float(self) - } - -} - -extension UInt: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return Float(self) - } - -} - -extension Float: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return self - } - -} - -extension Double: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return Float(self) - } - -} - -extension CGFloat: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return Float(self) - } - -} - -#if canImport(UIKit) -extension UILayoutPriority: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return self.rawValue - } - -} -#endif diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintRelatableTarget.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintRelatableTarget.swift deleted file mode 100644 index df04464..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintRelatableTarget.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintRelatableTarget { -} - -extension Int: ConstraintRelatableTarget { -} - -extension UInt: ConstraintRelatableTarget { -} - -extension Float: ConstraintRelatableTarget { -} - -extension Double: ConstraintRelatableTarget { -} - -extension CGFloat: ConstraintRelatableTarget { -} - -extension CGSize: ConstraintRelatableTarget { -} - -extension CGPoint: ConstraintRelatableTarget { -} - -extension ConstraintInsets: ConstraintRelatableTarget { -} - -#if canImport(UIKit) -@available(iOS 11.0, tvOS 11.0, *) -extension ConstraintDirectionalInsets: ConstraintRelatableTarget { -} -#endif - -extension ConstraintItem: ConstraintRelatableTarget { -} - -extension ConstraintView: ConstraintRelatableTarget { -} - -@available(iOS 9.0, OSX 10.11, *) -extension ConstraintLayoutGuide: ConstraintRelatableTarget { -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintRelation.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintRelation.swift deleted file mode 100644 index 643d499..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintRelation.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -internal enum ConstraintRelation : Int { - case equal = 1 - case lessThanOrEqual - case greaterThanOrEqual - - internal var layoutRelation: LayoutRelation { - get { - switch(self) { - case .equal: - return .equal - case .lessThanOrEqual: - return .lessThanOrEqual - case .greaterThanOrEqual: - return .greaterThanOrEqual - } - } - } -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintView+Extensions.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintView+Extensions.swift deleted file mode 100644 index 1225c04..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintView+Extensions.swift +++ /dev/null @@ -1,152 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public extension ConstraintView { - - @available(*, deprecated, renamed:"snp.left") - var snp_left: ConstraintItem { return self.snp.left } - - @available(*, deprecated, renamed:"snp.top") - var snp_top: ConstraintItem { return self.snp.top } - - @available(*, deprecated, renamed:"snp.right") - var snp_right: ConstraintItem { return self.snp.right } - - @available(*, deprecated, renamed:"snp.bottom") - var snp_bottom: ConstraintItem { return self.snp.bottom } - - @available(*, deprecated, renamed:"snp.leading") - var snp_leading: ConstraintItem { return self.snp.leading } - - @available(*, deprecated, renamed:"snp.trailing") - var snp_trailing: ConstraintItem { return self.snp.trailing } - - @available(*, deprecated, renamed:"snp.width") - var snp_width: ConstraintItem { return self.snp.width } - - @available(*, deprecated, renamed:"snp.height") - var snp_height: ConstraintItem { return self.snp.height } - - @available(*, deprecated, renamed:"snp.centerX") - var snp_centerX: ConstraintItem { return self.snp.centerX } - - @available(*, deprecated, renamed:"snp.centerY") - var snp_centerY: ConstraintItem { return self.snp.centerY } - - @available(*, deprecated, renamed:"snp.baseline") - var snp_baseline: ConstraintItem { return self.snp.baseline } - - @available(*, deprecated, renamed:"snp.lastBaseline") - @available(iOS 8.0, OSX 10.11, *) - var snp_lastBaseline: ConstraintItem { return self.snp.lastBaseline } - - @available(iOS, deprecated, renamed:"snp.firstBaseline") - @available(iOS 8.0, OSX 10.11, *) - var snp_firstBaseline: ConstraintItem { return self.snp.firstBaseline } - - @available(iOS, deprecated, renamed:"snp.leftMargin") - @available(iOS 8.0, *) - var snp_leftMargin: ConstraintItem { return self.snp.leftMargin } - - @available(iOS, deprecated, renamed:"snp.topMargin") - @available(iOS 8.0, *) - var snp_topMargin: ConstraintItem { return self.snp.topMargin } - - @available(iOS, deprecated, renamed:"snp.rightMargin") - @available(iOS 8.0, *) - var snp_rightMargin: ConstraintItem { return self.snp.rightMargin } - - @available(iOS, deprecated, renamed:"snp.bottomMargin") - @available(iOS 8.0, *) - var snp_bottomMargin: ConstraintItem { return self.snp.bottomMargin } - - @available(iOS, deprecated, renamed:"snp.leadingMargin") - @available(iOS 8.0, *) - var snp_leadingMargin: ConstraintItem { return self.snp.leadingMargin } - - @available(iOS, deprecated, renamed:"snp.trailingMargin") - @available(iOS 8.0, *) - var snp_trailingMargin: ConstraintItem { return self.snp.trailingMargin } - - @available(iOS, deprecated, renamed:"snp.centerXWithinMargins") - @available(iOS 8.0, *) - var snp_centerXWithinMargins: ConstraintItem { return self.snp.centerXWithinMargins } - - @available(iOS, deprecated, renamed:"snp.centerYWithinMargins") - @available(iOS 8.0, *) - var snp_centerYWithinMargins: ConstraintItem { return self.snp.centerYWithinMargins } - - @available(*, deprecated, renamed:"snp.edges") - var snp_edges: ConstraintItem { return self.snp.edges } - - @available(*, deprecated, renamed:"snp.size") - var snp_size: ConstraintItem { return self.snp.size } - - @available(*, deprecated, renamed:"snp.center") - var snp_center: ConstraintItem { return self.snp.center } - - @available(iOS, deprecated, renamed:"snp.margins") - @available(iOS 8.0, *) - var snp_margins: ConstraintItem { return self.snp.margins } - - @available(iOS, deprecated, renamed:"snp.centerWithinMargins") - @available(iOS 8.0, *) - var snp_centerWithinMargins: ConstraintItem { return self.snp.centerWithinMargins } - - @available(*, deprecated, renamed:"snp.prepareConstraints(_:)") - func snp_prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { - return self.snp.prepareConstraints(closure) - } - - @available(*, deprecated, renamed:"snp.makeConstraints(_:)") - func snp_makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - self.snp.makeConstraints(closure) - } - - @available(*, deprecated, renamed:"snp.remakeConstraints(_:)") - func snp_remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - self.snp.remakeConstraints(closure) - } - - @available(*, deprecated, renamed:"snp.updateConstraints(_:)") - func snp_updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - self.snp.updateConstraints(closure) - } - - @available(*, deprecated, renamed:"snp.removeConstraints()") - func snp_removeConstraints() { - self.snp.removeConstraints() - } - - var snp: ConstraintViewDSL { - return ConstraintViewDSL(view: self) - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintView.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintView.swift deleted file mode 100644 index 1203300..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintView.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -#if canImport(UIKit) - public typealias ConstraintView = UIView -#else - public typealias ConstraintView = NSView -#endif diff --git a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintViewDSL.swift b/ReadViewDemo/Pods/SnapKit/Sources/ConstraintViewDSL.swift deleted file mode 100644 index 8567e54..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/ConstraintViewDSL.swift +++ /dev/null @@ -1,101 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public struct ConstraintViewDSL: ConstraintAttributesDSL { - - @discardableResult - public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { - return ConstraintMaker.prepareConstraints(item: self.view, closure: closure) - } - - public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.makeConstraints(item: self.view, closure: closure) - } - - public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.remakeConstraints(item: self.view, closure: closure) - } - - public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.updateConstraints(item: self.view, closure: closure) - } - - public func removeConstraints() { - ConstraintMaker.removeConstraints(item: self.view) - } - - public var contentHuggingHorizontalPriority: Float { - get { - return self.view.contentHuggingPriority(for: .horizontal).rawValue - } - nonmutating set { - self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .horizontal) - } - } - - public var contentHuggingVerticalPriority: Float { - get { - return self.view.contentHuggingPriority(for: .vertical).rawValue - } - nonmutating set { - self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .vertical) - } - } - - public var contentCompressionResistanceHorizontalPriority: Float { - get { - return self.view.contentCompressionResistancePriority(for: .horizontal).rawValue - } - nonmutating set { - self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .horizontal) - } - } - - public var contentCompressionResistanceVerticalPriority: Float { - get { - return self.view.contentCompressionResistancePriority(for: .vertical).rawValue - } - nonmutating set { - self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .vertical) - } - } - - public var target: AnyObject? { - return self.view - } - - internal let view: ConstraintView - - internal init(view: ConstraintView) { - self.view = view - - } - -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/Debugging.swift b/ReadViewDemo/Pods/SnapKit/Sources/Debugging.swift deleted file mode 100644 index f4120b2..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/Debugging.swift +++ /dev/null @@ -1,169 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - -public extension LayoutConstraint { - - override var description: String { - var description = "<" - - description += descriptionForObject(self) - - if let firstItem = conditionalOptional(from: self.firstItem) { - description += " \(descriptionForObject(firstItem))" - } - - if self.firstAttribute != .notAnAttribute { - description += ".\(descriptionForAttribute(self.firstAttribute))" - } - - description += " \(descriptionForRelation(self.relation))" - - if let secondItem = self.secondItem { - description += " \(descriptionForObject(secondItem))" - } - - if self.secondAttribute != .notAnAttribute { - description += ".\(descriptionForAttribute(self.secondAttribute))" - } - - if self.multiplier != 1.0 { - description += " * \(self.multiplier)" - } - - if self.secondAttribute == .notAnAttribute { - description += " \(self.constant)" - } else { - if self.constant > 0.0 { - description += " + \(self.constant)" - } else if self.constant < 0.0 { - description += " - \(abs(self.constant))" - } - } - - if self.priority.rawValue != 1000.0 { - description += " ^\(self.priority)" - } - - description += ">" - - return description - } - -} - -private func descriptionForRelation(_ relation: LayoutRelation) -> String { - switch relation { - case .equal: return "==" - case .greaterThanOrEqual: return ">=" - case .lessThanOrEqual: return "<=" - #if swift(>=5.0) - @unknown default: return "unknown" - #endif - } -} - -private func descriptionForAttribute(_ attribute: LayoutAttribute) -> String { - #if canImport(UIKit) - switch attribute { - case .notAnAttribute: return "notAnAttribute" - case .top: return "top" - case .left: return "left" - case .bottom: return "bottom" - case .right: return "right" - case .leading: return "leading" - case .trailing: return "trailing" - case .width: return "width" - case .height: return "height" - case .centerX: return "centerX" - case .centerY: return "centerY" - case .lastBaseline: return "lastBaseline" - case .firstBaseline: return "firstBaseline" - case .topMargin: return "topMargin" - case .leftMargin: return "leftMargin" - case .bottomMargin: return "bottomMargin" - case .rightMargin: return "rightMargin" - case .leadingMargin: return "leadingMargin" - case .trailingMargin: return "trailingMargin" - case .centerXWithinMargins: return "centerXWithinMargins" - case .centerYWithinMargins: return "centerYWithinMargins" - #if swift(>=5.0) - @unknown default: return "unknown" - #endif - } - #else - switch attribute { - case .notAnAttribute: return "notAnAttribute" - case .top: return "top" - case .left: return "left" - case .bottom: return "bottom" - case .right: return "right" - case .leading: return "leading" - case .trailing: return "trailing" - case .width: return "width" - case .height: return "height" - case .centerX: return "centerX" - case .centerY: return "centerY" - case .lastBaseline: return "lastBaseline" - case .firstBaseline: return "firstBaseline" - #if swift(>=5.0) - @unknown default: return "unknown" - #endif - } - #endif -} - -private func conditionalOptional(from object: Optional) -> Optional { - return object -} - -private func conditionalOptional(from object: T) -> Optional { - return Optional.some(object) -} - -private func descriptionForObject(_ object: AnyObject) -> String { - let pointerDescription = String(format: "%p", UInt(bitPattern: ObjectIdentifier(object))) - var desc = "" - - desc += type(of: object).description() - - if let object = object as? ConstraintView { - desc += ":\(object.snp.label() ?? pointerDescription)" - } else if let object = object as? LayoutConstraint { - desc += ":\(object.label ?? pointerDescription)" - } else { - desc += ":\(pointerDescription)" - } - - if let object = object as? LayoutConstraint, let file = object.constraint?.sourceLocation.0, let line = object.constraint?.sourceLocation.1 { - desc += "@\((file as NSString).lastPathComponent)#\(line)" - } - - desc += "" - return desc -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/LayoutConstraint.swift b/ReadViewDemo/Pods/SnapKit/Sources/LayoutConstraint.swift deleted file mode 100644 index 607616d..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/LayoutConstraint.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public class LayoutConstraint : NSLayoutConstraint { - - public var label: String? { - get { - return self.identifier - } - set { - self.identifier = newValue - } - } - - internal weak var constraint: Constraint? = nil - -} - -internal func ==(lhs: LayoutConstraint, rhs: LayoutConstraint) -> Bool { - // If firstItem or secondItem on either constraint has a dangling pointer - // this comparison can cause a crash. The solution for this is to ensure - // your layout code hold strong references to things like Views, LayoutGuides - // and LayoutAnchors as SnapKit will not keep strong references to any of these. - guard lhs.firstAttribute == rhs.firstAttribute && - lhs.secondAttribute == rhs.secondAttribute && - lhs.relation == rhs.relation && - lhs.priority == rhs.priority && - lhs.multiplier == rhs.multiplier && - lhs.secondItem === rhs.secondItem && - lhs.firstItem === rhs.firstItem else { - return false - } - return true -} diff --git a/ReadViewDemo/Pods/SnapKit/Sources/LayoutConstraintItem.swift b/ReadViewDemo/Pods/SnapKit/Sources/LayoutConstraintItem.swift deleted file mode 100644 index 4f41b5d..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/LayoutConstraintItem.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#else - import AppKit -#endif - - -public protocol LayoutConstraintItem: AnyObject { -} - -@available(iOS 9.0, OSX 10.11, *) -extension ConstraintLayoutGuide : LayoutConstraintItem { -} - -extension ConstraintView : LayoutConstraintItem { -} - - -extension LayoutConstraintItem { - - internal func prepare() { - if let view = self as? ConstraintView { - view.translatesAutoresizingMaskIntoConstraints = false - } - } - - internal var superview: ConstraintView? { - if let view = self as? ConstraintView { - return view.superview - } - - if #available(iOS 9.0, OSX 10.11, *), let guide = self as? ConstraintLayoutGuide { - return guide.owningView - } - - return nil - } - internal var constraints: [Constraint] { - return self.constraintsSet.allObjects as! [Constraint] - } - - internal func add(constraints: [Constraint]) { - let constraintsSet = self.constraintsSet - for constraint in constraints { - constraintsSet.add(constraint) - } - } - - internal func remove(constraints: [Constraint]) { - let constraintsSet = self.constraintsSet - for constraint in constraints { - constraintsSet.remove(constraint) - } - } - - private var constraintsSet: NSMutableSet { - let constraintsSet: NSMutableSet - - if let existing = objc_getAssociatedObject(self, &constraintsKey) as? NSMutableSet { - constraintsSet = existing - } else { - constraintsSet = NSMutableSet() - objc_setAssociatedObject(self, &constraintsKey, constraintsSet, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - return constraintsSet - - } - -} -private var constraintsKey: UInt8 = 0 diff --git a/ReadViewDemo/Pods/SnapKit/Sources/PrivacyInfo.xcprivacy b/ReadViewDemo/Pods/SnapKit/Sources/PrivacyInfo.xcprivacy deleted file mode 100644 index e540750..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/PrivacyInfo.xcprivacy +++ /dev/null @@ -1,14 +0,0 @@ - - - - - NSPrivacyTracking - - NSPrivacyAccessedAPITypes - - NSPrivacyCollectedDataTypes - - NSPrivacyTrackingDomains - - - diff --git a/ReadViewDemo/Pods/SnapKit/Sources/Typealiases.swift b/ReadViewDemo/Pods/SnapKit/Sources/Typealiases.swift deleted file mode 100644 index c0e6982..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/Typealiases.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import Foundation - -#if canImport(UIKit) - import UIKit -#if swift(>=4.2) - typealias LayoutRelation = NSLayoutConstraint.Relation - typealias LayoutAttribute = NSLayoutConstraint.Attribute -#else - typealias LayoutRelation = NSLayoutRelation - typealias LayoutAttribute = NSLayoutAttribute -#endif - typealias LayoutPriority = UILayoutPriority -#else - import AppKit - typealias LayoutRelation = NSLayoutConstraint.Relation - typealias LayoutAttribute = NSLayoutConstraint.Attribute - typealias LayoutPriority = NSLayoutConstraint.Priority -#endif - diff --git a/ReadViewDemo/Pods/SnapKit/Sources/UILayoutSupport+Extensions.swift b/ReadViewDemo/Pods/SnapKit/Sources/UILayoutSupport+Extensions.swift deleted file mode 100644 index 801cc3c..0000000 --- a/ReadViewDemo/Pods/SnapKit/Sources/UILayoutSupport+Extensions.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(UIKit) - import UIKit -#endif - - -@available(iOS 8.0, *) -public extension ConstraintLayoutSupport { - - var snp: ConstraintLayoutSupportDSL { - return ConstraintLayoutSupportDSL(support: self) - } - -} diff --git a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText-Info.plist b/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText-Info.plist deleted file mode 100644 index 076a660..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.6.28 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText-dummy.m b/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText-dummy.m deleted file mode 100644 index f5244f8..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_DTCoreText : NSObject -@end -@implementation PodsDummy_DTCoreText -@end diff --git a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText-prefix.pch b/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText-prefix.pch deleted file mode 100644 index 2ec4b2d..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText-prefix.pch +++ /dev/null @@ -1,13 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import diff --git a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText-umbrella.h b/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText-umbrella.h deleted file mode 100644 index 3b21ebc..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText-umbrella.h +++ /dev/null @@ -1,146 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "CTLineUtils.h" -#import "DTAccessibilityElement.h" -#import "DTAccessibilityViewProxy.h" -#import "DTAnchorHTMLElement.h" -#import "DTAttributedLabel.h" -#import "DTAttributedTextCell.h" -#import "DTAttributedTextContentView.h" -#import "DTAttributedTextView.h" -#import "DTBreakHTMLElement.h" -#import "DTColor+Compatibility.h" -#import "DTColorFunctions.h" -#import "DTCompatibility.h" -#import "DTCoreText.h" -#import "DTCoreTextConstants.h" -#import "DTCoreTextFontCollection.h" -#import "DTCoreTextFontDescriptor.h" -#import "DTCoreTextFunctions.h" -#import "DTCoreTextGlyphRun.h" -#import "DTCoreTextLayouter.h" -#import "DTCoreTextLayoutFrame+Cursor.h" -#import "DTCoreTextLayoutFrame.h" -#import "DTCoreTextLayoutFrameAccessibilityElementGenerator.h" -#import "DTCoreTextLayoutLine.h" -#import "DTCoreTextMacros.h" -#import "DTCoreTextParagraphStyle.h" -#import "DTCSSListStyle.h" -#import "DTCSSStylesheet.h" -#import "DTDictationPlaceholderTextAttachment.h" -#import "DTDictationPlaceholderView.h" -#import "DTHorizontalRuleHTMLElement.h" -#import "DTHTMLAttributedStringBuilder.h" -#import "DTHTMLElement.h" -#import "DTHTMLParserNode.h" -#import "DTHTMLParserTextNode.h" -#import "DTHTMLWriter.h" -#import "DTIframeTextAttachment.h" -#import "DTImage+HTML.h" -#import "DTImageTextAttachment.h" -#import "DTLazyImageView.h" -#import "DTLinkButton.h" -#import "DTListItemHTMLElement.h" -#import "DTObjectTextAttachment.h" -#import "DTStylesheetHTMLElement.h" -#import "DTTextAttachment.h" -#import "DTTextAttachmentHTMLElement.h" -#import "DTTextBlock.h" -#import "DTTextHTMLElement.h" -#import "DTVideoTextAttachment.h" -#import "DTWeakSupport.h" -#import "NSAttributedString+DTCoreText.h" -#import "NSAttributedString+DTDebug.h" -#import "NSAttributedString+HTML.h" -#import "NSAttributedString+SmallCaps.h" -#import "NSAttributedStringRunDelegates.h" -#import "NSCharacterSet+HTML.h" -#import "NSCoder+DTCompatibility.h" -#import "NSDictionary+DTCoreText.h" -#import "NSMutableAttributedString+HTML.h" -#import "NSMutableString+HTML.h" -#import "NSNumber+RomanNumerals.h" -#import "NSScanner+HTML.h" -#import "NSString+CSS.h" -#import "NSString+HTML.h" -#import "NSString+Paragraphs.h" -#import "UIFont+DTCoreText.h" -#import "CTLineUtils.h" -#import "DTAccessibilityElement.h" -#import "DTAccessibilityViewProxy.h" -#import "DTAnchorHTMLElement.h" -#import "DTAttributedLabel.h" -#import "DTAttributedTextCell.h" -#import "DTAttributedTextContentView.h" -#import "DTAttributedTextView.h" -#import "DTBreakHTMLElement.h" -#import "DTColor+Compatibility.h" -#import "DTColorFunctions.h" -#import "DTCompatibility.h" -#import "DTCoreText.h" -#import "DTCoreTextConstants.h" -#import "DTCoreTextFontCollection.h" -#import "DTCoreTextFontDescriptor.h" -#import "DTCoreTextFunctions.h" -#import "DTCoreTextGlyphRun.h" -#import "DTCoreTextLayouter.h" -#import "DTCoreTextLayoutFrame+Cursor.h" -#import "DTCoreTextLayoutFrame.h" -#import "DTCoreTextLayoutFrameAccessibilityElementGenerator.h" -#import "DTCoreTextLayoutLine.h" -#import "DTCoreTextMacros.h" -#import "DTCoreTextParagraphStyle.h" -#import "DTCSSListStyle.h" -#import "DTCSSStylesheet.h" -#import "DTDictationPlaceholderTextAttachment.h" -#import "DTDictationPlaceholderView.h" -#import "DTHorizontalRuleHTMLElement.h" -#import "DTHTMLAttributedStringBuilder.h" -#import "DTHTMLElement.h" -#import "DTHTMLParserNode.h" -#import "DTHTMLParserTextNode.h" -#import "DTHTMLWriter.h" -#import "DTIframeTextAttachment.h" -#import "DTImage+HTML.h" -#import "DTImageTextAttachment.h" -#import "DTLazyImageView.h" -#import "DTLinkButton.h" -#import "DTListItemHTMLElement.h" -#import "DTObjectTextAttachment.h" -#import "DTStylesheetHTMLElement.h" -#import "DTTextAttachment.h" -#import "DTTextAttachmentHTMLElement.h" -#import "DTTextBlock.h" -#import "DTTextHTMLElement.h" -#import "DTVideoTextAttachment.h" -#import "DTWeakSupport.h" -#import "NSAttributedString+DTCoreText.h" -#import "NSAttributedString+DTDebug.h" -#import "NSAttributedString+HTML.h" -#import "NSAttributedString+SmallCaps.h" -#import "NSAttributedStringRunDelegates.h" -#import "NSCharacterSet+HTML.h" -#import "NSCoder+DTCompatibility.h" -#import "NSDictionary+DTCoreText.h" -#import "NSMutableAttributedString+HTML.h" -#import "NSMutableString+HTML.h" -#import "NSNumber+RomanNumerals.h" -#import "NSScanner+HTML.h" -#import "NSString+CSS.h" -#import "NSString+HTML.h" -#import "NSString+Paragraphs.h" -#import "UIFont+DTCoreText.h" - -FOUNDATION_EXPORT double DTCoreTextVersionNumber; -FOUNDATION_EXPORT const unsigned char DTCoreTextVersionString[]; - diff --git a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText.debug.xcconfig deleted file mode 100644 index 03c6c30..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText.debug.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "CoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/DTCoreText -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText.modulemap b/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText.modulemap deleted file mode 100644 index 954955f..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module DTCoreText { - umbrella header "DTCoreText-umbrella.h" - - export * - module * { export * } -} diff --git a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText.release.xcconfig deleted file mode 100644 index 03c6c30..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTCoreText/DTCoreText.release.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "CoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/DTCoreText -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist b/ReadViewDemo/Pods/Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist deleted file mode 100644 index e78debd..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.6.28 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation-Info.plist b/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation-Info.plist deleted file mode 100644 index 9595025..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.7.19 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation-dummy.m b/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation-dummy.m deleted file mode 100644 index 1aa7962..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_DTFoundation : NSObject -@end -@implementation PodsDummy_DTFoundation -@end diff --git a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation-prefix.pch b/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation-umbrella.h b/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation-umbrella.h deleted file mode 100644 index f5d6fc5..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation-umbrella.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "DTBase64Coding.h" -#import "DTBlockFunctions.h" -#import "DTCompatibility.h" -#import "DTCoreGraphicsUtils.h" -#import "DTExtendedFileAttributes.h" -#import "DTFolderMonitor.h" -#import "DTFoundationConstants.h" -#import "DTLog.h" -#import "DTVersion.h" -#import "DTWeakSupport.h" -#import "NSArray+DTError.h" -#import "NSData+DTCrypto.h" -#import "NSDictionary+DTError.h" -#import "NSFileWrapper+DTCopying.h" -#import "NSMutableArray+DTMoving.h" -#import "NSString+DTFormatNumbers.h" -#import "NSString+DTPaths.h" -#import "NSString+DTURLEncoding.h" -#import "NSString+DTUtilities.h" -#import "NSURL+DTComparing.h" -#import "NSURL+DTUnshorten.h" -#import "DTAnimatedGIF.h" -#import "DTHTMLParser.h" -#import "DTActivityTitleView.h" -#import "DTCustomColoredAccessory.h" -#import "DTPieProgressIndicator.h" -#import "DTSmartPagingScrollView.h" -#import "DTTiledLayerWithoutFade.h" -#import "NSURL+DTAppLinks.h" -#import "UIApplication+DTNetworkActivity.h" -#import "UIImage+DTFoundation.h" -#import "UIScreen+DTFoundation.h" -#import "UIView+DTFoundation.h" - -FOUNDATION_EXPORT double DTFoundationVersionNumber; -FOUNDATION_EXPORT const unsigned char DTFoundationVersionString[]; - diff --git a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation.debug.xcconfig deleted file mode 100644 index 22f5568..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation.debug.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "$(SDKROOT)/usr/include/libxml2" -OTHER_LDFLAGS = $(inherited) -l"xml2" -framework "ImageIO" -framework "QuartzCore" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/DTFoundation -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation.modulemap b/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation.modulemap deleted file mode 100644 index c0c00c0..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module DTFoundation { - umbrella header "DTFoundation-umbrella.h" - - export * - module * { export * } -} diff --git a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation.release.xcconfig deleted file mode 100644 index 22f5568..0000000 --- a/ReadViewDemo/Pods/Target Support Files/DTFoundation/DTFoundation.release.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "$(SDKROOT)/usr/include/libxml2" -OTHER_LDFLAGS = $(inherited) -l"xml2" -framework "ImageIO" -framework "QuartzCore" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/DTFoundation -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-Info.plist b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-Info.plist deleted file mode 100644 index 19cf209..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-acknowledgements.markdown b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-acknowledgements.markdown deleted file mode 100644 index f37645f..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-acknowledgements.markdown +++ /dev/null @@ -1,103 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## DTCoreText - -Copyright (c) 2011, Oliver Drobnik All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -## DTFoundation - -Copyright (c) 2011, Oliver Drobnik All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -## SnapKit - -Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -## ZIPFoundation - -MIT License - -Copyright (c) 2017-2025 Thomas Zoechling (https://www.peakstep.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Generated by CocoaPods - https://cocoapods.org diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-acknowledgements.plist b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-acknowledgements.plist deleted file mode 100644 index fa59cd4..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-acknowledgements.plist +++ /dev/null @@ -1,153 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2011, Oliver Drobnik All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - License - BSD - Title - DTCoreText - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2011, Oliver Drobnik All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - License - BSD - Title - DTFoundation - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - License - MIT - Title - SnapKit - Type - PSGroupSpecifier - - - FooterText - MIT License - -Copyright (c) 2017-2025 Thomas Zoechling (https://www.peakstep.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - License - MIT - Title - ZIPFoundation - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-dummy.m b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-dummy.m deleted file mode 100644 index ebfdb0e..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_ReadViewDemo : NSObject -@end -@implementation PodsDummy_Pods_ReadViewDemo -@end diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-Debug-input-files.xcfilelist b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-Debug-input-files.xcfilelist deleted file mode 100644 index 1ffa132..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-Debug-input-files.xcfilelist +++ /dev/null @@ -1,9 +0,0 @@ -${PODS_ROOT}/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks.sh -${BUILT_PRODUCTS_DIR}/DTCoreText/DTCoreText.framework -${BUILT_PRODUCTS_DIR}/DTFoundation/DTFoundation.framework -${BUILT_PRODUCTS_DIR}/RDAIReaderView/RDAIReaderView.framework -${BUILT_PRODUCTS_DIR}/RDEpubReaderView/RDEpubReaderView.framework -${BUILT_PRODUCTS_DIR}/RDPDFReaderView/RDPDFReaderView.framework -${BUILT_PRODUCTS_DIR}/RDSpeechReaderView/RDSpeechReaderView.framework -${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework -${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework \ No newline at end of file diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-Debug-output-files.xcfilelist b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-Debug-output-files.xcfilelist deleted file mode 100644 index 975443d..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-Debug-output-files.xcfilelist +++ /dev/null @@ -1,8 +0,0 @@ -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DTCoreText.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DTFoundation.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RDAIReaderView.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RDEpubReaderView.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RDPDFReaderView.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RDSpeechReaderView.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZIPFoundation.framework \ No newline at end of file diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-Release-input-files.xcfilelist b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-Release-input-files.xcfilelist deleted file mode 100644 index 1ffa132..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-Release-input-files.xcfilelist +++ /dev/null @@ -1,9 +0,0 @@ -${PODS_ROOT}/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks.sh -${BUILT_PRODUCTS_DIR}/DTCoreText/DTCoreText.framework -${BUILT_PRODUCTS_DIR}/DTFoundation/DTFoundation.framework -${BUILT_PRODUCTS_DIR}/RDAIReaderView/RDAIReaderView.framework -${BUILT_PRODUCTS_DIR}/RDEpubReaderView/RDEpubReaderView.framework -${BUILT_PRODUCTS_DIR}/RDPDFReaderView/RDPDFReaderView.framework -${BUILT_PRODUCTS_DIR}/RDSpeechReaderView/RDSpeechReaderView.framework -${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework -${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework \ No newline at end of file diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-Release-output-files.xcfilelist b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-Release-output-files.xcfilelist deleted file mode 100644 index 975443d..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-Release-output-files.xcfilelist +++ /dev/null @@ -1,8 +0,0 @@ -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DTCoreText.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DTFoundation.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RDAIReaderView.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RDEpubReaderView.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RDPDFReaderView.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RDSpeechReaderView.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZIPFoundation.framework \ No newline at end of file diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks.sh b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks.sh deleted file mode 100755 index d77db97..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks.sh +++ /dev/null @@ -1,200 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -function on_error { - echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" -} -trap 'on_error $LINENO' ERR - -if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then - # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy - # frameworks to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" -BCSYMBOLMAP_DIR="BCSymbolMaps" - - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -# Copies and strips a vendored framework -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink -f "${source}")" - fi - - if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then - # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied - find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do - echo "Installing $f" - install_bcsymbolmap "$f" "$destination" - rm "$f" - done - rmdir "${source}/${BCSYMBOLMAP_DIR}" - fi - - # Use filter instead of exclude so missing patterns don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - elif [ -L "${binary}" ]; then - echo "Destination binary is symlinked..." - dirname="$(dirname "${binary}")" - binary="${dirname}/$(readlink "${binary}")" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} -# Copies and strips a vendored dSYM -install_dsym() { - local source="$1" - warn_missing_arch=${2:-true} - if [ -r "$source" ]; then - # Copy the dSYM into the targets temp dir. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" - - local basename - basename="$(basename -s .dSYM "$source")" - binary_name="$(ls "$source/Contents/Resources/DWARF")" - binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" - - # Strip invalid architectures from the dSYM. - if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then - strip_invalid_archs "$binary" "$warn_missing_arch" - fi - if [[ $STRIP_BINARY_RETVAL == 0 ]]; then - # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" - else - # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. - mkdir -p "${DWARF_DSYM_FOLDER_PATH}" - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" - fi - fi -} - -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - warn_missing_arch=${2:-true} - # Get architectures for current target binary - binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" - # Intersect them with the architectures we are building for - intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" - # If there are no archs supported by this binary then warn the user - if [[ -z "$intersected_archs" ]]; then - if [[ "$warn_missing_arch" == "true" ]]; then - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." - fi - STRIP_BINARY_RETVAL=1 - return - fi - stripped="" - for arch in $binary_archs; do - if ! [[ "${ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi - STRIP_BINARY_RETVAL=0 -} - -# Copies the bcsymbolmap files of a vendored framework -install_bcsymbolmap() { - local bcsymbolmap_path="$1" - local destination="${BUILT_PRODUCTS_DIR}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identity - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" - - if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - code_sign_cmd="$code_sign_cmd &" - fi - echo "$code_sign_cmd" - eval "$code_sign_cmd" - fi -} - -if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/DTCoreText/DTCoreText.framework" - install_framework "${BUILT_PRODUCTS_DIR}/DTFoundation/DTFoundation.framework" - install_framework "${BUILT_PRODUCTS_DIR}/RDAIReaderView/RDAIReaderView.framework" - install_framework "${BUILT_PRODUCTS_DIR}/RDEpubReaderView/RDEpubReaderView.framework" - install_framework "${BUILT_PRODUCTS_DIR}/RDPDFReaderView/RDPDFReaderView.framework" - install_framework "${BUILT_PRODUCTS_DIR}/RDSpeechReaderView/RDSpeechReaderView.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/DTCoreText/DTCoreText.framework" - install_framework "${BUILT_PRODUCTS_DIR}/DTFoundation/DTFoundation.framework" - install_framework "${BUILT_PRODUCTS_DIR}/RDAIReaderView/RDAIReaderView.framework" - install_framework "${BUILT_PRODUCTS_DIR}/RDEpubReaderView/RDEpubReaderView.framework" - install_framework "${BUILT_PRODUCTS_DIR}/RDPDFReaderView/RDPDFReaderView.framework" - install_framework "${BUILT_PRODUCTS_DIR}/RDSpeechReaderView/RDSpeechReaderView.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework" -fi -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources-Debug-input-files.xcfilelist b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources-Debug-input-files.xcfilelist deleted file mode 100644 index 6b3f267..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources-Debug-input-files.xcfilelist +++ /dev/null @@ -1,2 +0,0 @@ -${PODS_ROOT}/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources.sh -${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView/RDEpubReaderViewAssets.bundle \ No newline at end of file diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources-Debug-output-files.xcfilelist b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources-Debug-output-files.xcfilelist deleted file mode 100644 index f6bc945..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources-Debug-output-files.xcfilelist +++ /dev/null @@ -1 +0,0 @@ -${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RDEpubReaderViewAssets.bundle \ No newline at end of file diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources-Release-input-files.xcfilelist b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources-Release-input-files.xcfilelist deleted file mode 100644 index 6b3f267..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources-Release-input-files.xcfilelist +++ /dev/null @@ -1,2 +0,0 @@ -${PODS_ROOT}/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources.sh -${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView/RDEpubReaderViewAssets.bundle \ No newline at end of file diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources-Release-output-files.xcfilelist b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources-Release-output-files.xcfilelist deleted file mode 100644 index f6bc945..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources-Release-output-files.xcfilelist +++ /dev/null @@ -1 +0,0 @@ -${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RDEpubReaderViewAssets.bundle \ No newline at end of file diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources.sh b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources.sh deleted file mode 100755 index 69b37a3..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-resources.sh +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -function on_error { - echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" -} -trap 'on_error $LINENO' ERR - -if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then - # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy - # resources to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -XCASSET_FILES=() - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -case "${TARGETED_DEVICE_FAMILY:-}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - 3) - TARGET_DEVICE_ARGS="--target-device tv" - ;; - 4) - TARGET_DEVICE_ARGS="--target-device watch" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; -esac - -install_resource() -{ - if [[ "$1" = /* ]] ; then - RESOURCE_PATH="$1" - else - RESOURCE_PATH="${PODS_ROOT}/$1" - fi - if [[ ! -e "$RESOURCE_PATH" ]] ; then - cat << EOM -error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. -EOM - exit 1 - fi - case $RESOURCE_PATH in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true - xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" - XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") - ;; - *) - echo "$RESOURCE_PATH" || true - echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" - ;; - esac -} -if [[ "$CONFIGURATION" == "Debug" ]]; then - install_resource "${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView/RDEpubReaderViewAssets.bundle" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_resource "${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView/RDEpubReaderViewAssets.bundle" -fi - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then - mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] -then - # Find all other xcassets (this unfortunately includes those of path pods and other targets). - OTHER_XCASSETS=$(find -L "$PWD" -iname "*.xcassets" -type d) - while read line; do - if [[ $line != "${PODS_ROOT}*" ]]; then - XCASSET_FILES+=("$line") - fi - done <<<"$OTHER_XCASSETS" - - if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - else - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" - fi -fi diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-umbrella.h b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-umbrella.h deleted file mode 100644 index 18bdd7b..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double Pods_ReadViewDemoVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_ReadViewDemoVersionString[]; - diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.debug.xcconfig deleted file mode 100644 index 5746c6c..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.debug.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView/RDAIReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView/RDEpubReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView/RDPDFReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView/RDSpeechReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.framework/Headers" "$(SDKROOT)/usr/include/libxml2" -LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"swiftCoreGraphics" -l"xml2" -framework "AVFAudio" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreText" -framework "CryptoKit" -framework "DTCoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "PDFKit" -framework "QuartzCore" -framework "RDAIReaderView" -framework "RDEpubReaderView" -framework "RDPDFReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "Vision" -framework "ZIPFoundation" -weak_framework "FoundationModels" -OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "-F${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.modulemap b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.modulemap deleted file mode 100644 index 6ade0d5..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_ReadViewDemo { - umbrella header "Pods-ReadViewDemo-umbrella.h" - - export * - module * { export * } -} diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.release.xcconfig deleted file mode 100644 index 5746c6c..0000000 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.release.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView/RDAIReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView/RDEpubReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView/RDPDFReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView/RDSpeechReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.framework/Headers" "$(SDKROOT)/usr/include/libxml2" -LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"swiftCoreGraphics" -l"xml2" -framework "AVFAudio" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreText" -framework "CryptoKit" -framework "DTCoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "PDFKit" -framework "QuartzCore" -framework "RDAIReaderView" -framework "RDEpubReaderView" -framework "RDPDFReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "Vision" -framework "ZIPFoundation" -weak_framework "FoundationModels" -OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "-F${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView-Info.plist b/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView-Info.plist deleted file mode 100644 index 434e06a..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.1.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView-dummy.m b/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView-dummy.m deleted file mode 100644 index cd6bcde..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_RDAIReaderView : NSObject -@end -@implementation PodsDummy_RDAIReaderView -@end diff --git a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView-prefix.pch b/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView-umbrella.h b/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView-umbrella.h deleted file mode 100644 index 8a79cad..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double RDAIReaderViewVersionNumber; -FOUNDATION_EXPORT const unsigned char RDAIReaderViewVersionString[]; - diff --git a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.debug.xcconfig deleted file mode 100644 index dd0d492..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.debug.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CryptoKit" -framework "NaturalLanguage" -framework "UIKit" -weak_framework "FoundationModels" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../Sources/RDAIReaderView -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.modulemap b/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.modulemap deleted file mode 100644 index f88a5d1..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module RDAIReaderView { - umbrella header "RDAIReaderView-umbrella.h" - - export * - module * { export * } -} diff --git a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.release.xcconfig deleted file mode 100644 index dd0d492..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.release.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CryptoKit" -framework "NaturalLanguage" -framework "UIKit" -weak_framework "FoundationModels" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../Sources/RDAIReaderView -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView-Info.plist b/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView-Info.plist deleted file mode 100644 index aa57310..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.0.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView-dummy.m b/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView-dummy.m deleted file mode 100644 index ea51046..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_RDEpubReaderView : NSObject -@end -@implementation PodsDummy_RDEpubReaderView -@end diff --git a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView-prefix.pch b/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView-umbrella.h b/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView-umbrella.h deleted file mode 100644 index f94b53e..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double RDEpubReaderViewVersionNumber; -FOUNDATION_EXPORT const unsigned char RDEpubReaderViewVersionString[]; - diff --git a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.debug.xcconfig deleted file mode 100644 index 39dd71c..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.debug.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CoreGraphics" -framework "CoreText" -framework "CryptoKit" -framework "DTCoreText" -framework "ImageIO" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "QuartzCore" -framework "RDAIReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "ZIPFoundation" -weak_framework "FoundationModels" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../Sources/RDEpubReaderView -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.modulemap b/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.modulemap deleted file mode 100644 index 8f70124..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module RDEpubReaderView { - umbrella header "RDEpubReaderView-umbrella.h" - - export * - module * { export * } -} diff --git a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.release.xcconfig deleted file mode 100644 index 39dd71c..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.release.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CoreGraphics" -framework "CoreText" -framework "CryptoKit" -framework "DTCoreText" -framework "ImageIO" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "QuartzCore" -framework "RDAIReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "ZIPFoundation" -weak_framework "FoundationModels" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../Sources/RDEpubReaderView -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist b/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist deleted file mode 100644 index 63188fb..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 0.0.2 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView-Info.plist b/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView-Info.plist deleted file mode 100644 index 8928a8d..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.0.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView-dummy.m b/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView-dummy.m deleted file mode 100644 index 4b34245..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_RDPDFReaderView : NSObject -@end -@implementation PodsDummy_RDPDFReaderView -@end diff --git a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView-prefix.pch b/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView-umbrella.h b/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView-umbrella.h deleted file mode 100644 index 8326106..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double RDPDFReaderViewVersionNumber; -FOUNDATION_EXPORT const unsigned char RDPDFReaderViewVersionString[]; - diff --git a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.debug.xcconfig deleted file mode 100644 index 7713801..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.debug.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CoreImage" -framework "CryptoKit" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "PDFKit" -framework "RDAIReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "Vision" -weak_framework "FoundationModels" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../Sources/RDPDFReaderView -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.modulemap b/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.modulemap deleted file mode 100644 index 1c24e67..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module RDPDFReaderView { - umbrella header "RDPDFReaderView-umbrella.h" - - export * - module * { export * } -} diff --git a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.release.xcconfig deleted file mode 100644 index 7713801..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.release.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CoreImage" -framework "CryptoKit" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "PDFKit" -framework "RDAIReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "Vision" -weak_framework "FoundationModels" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../Sources/RDPDFReaderView -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView-Info.plist b/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView-Info.plist deleted file mode 100644 index 434e06a..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.1.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView-dummy.m b/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView-dummy.m deleted file mode 100644 index 364be9b..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_RDSpeechReaderView : NSObject -@end -@implementation PodsDummy_RDSpeechReaderView -@end diff --git a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView-prefix.pch b/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView-umbrella.h b/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView-umbrella.h deleted file mode 100644 index 1862428..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double RDSpeechReaderViewVersionNumber; -FOUNDATION_EXPORT const unsigned char RDSpeechReaderViewVersionString[]; - diff --git a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.debug.xcconfig deleted file mode 100644 index fd2f825..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.debug.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CryptoKit" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "RDAIReaderView" -framework "UIKit" -weak_framework "FoundationModels" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../Sources/RDSpeechReaderView -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.modulemap b/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.modulemap deleted file mode 100644 index e1fb286..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module RDSpeechReaderView { - umbrella header "RDSpeechReaderView-umbrella.h" - - export * - module * { export * } -} diff --git a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.release.xcconfig deleted file mode 100644 index fd2f825..0000000 --- a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.release.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CryptoKit" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "RDAIReaderView" -framework "UIKit" -weak_framework "FoundationModels" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../Sources/RDSpeechReaderView -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist b/ReadViewDemo/Pods/Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist deleted file mode 100644 index d6be571..0000000 --- a/ReadViewDemo/Pods/Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 5.7.1 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit-Info.plist b/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit-Info.plist deleted file mode 100644 index af3ef2c..0000000 --- a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 5.7.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit-dummy.m b/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit-dummy.m deleted file mode 100644 index b44e8e5..0000000 --- a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_SnapKit : NSObject -@end -@implementation PodsDummy_SnapKit -@end diff --git a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch b/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h b/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h deleted file mode 100644 index 1b1be64..0000000 --- a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double SnapKitVersionNumber; -FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; - diff --git a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig deleted file mode 100644 index 3e6e223..0000000 --- a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit.modulemap b/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit.modulemap deleted file mode 100644 index 4b3e47b..0000000 --- a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module SnapKit { - umbrella header "SnapKit-umbrella.h" - - export * - module * { export * } -} diff --git a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig deleted file mode 100644 index 3e6e223..0000000 --- a/ReadViewDemo/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist b/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist deleted file mode 100644 index 686844a..0000000 --- a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 0.9.20 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-Info.plist b/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-Info.plist deleted file mode 100644 index 8531d47..0000000 --- a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.9.20 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-dummy.m b/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-dummy.m deleted file mode 100644 index f29e071..0000000 --- a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_ZIPFoundation : NSObject -@end -@implementation PodsDummy_ZIPFoundation -@end diff --git a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch b/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-umbrella.h b/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-umbrella.h deleted file mode 100644 index 442597c..0000000 --- a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double ZIPFoundationVersionNumber; -FOUNDATION_EXPORT const unsigned char ZIPFoundationVersionString[]; - diff --git a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.debug.xcconfig deleted file mode 100644 index 7da9d60..0000000 --- a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.debug.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/ZIPFoundation -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.modulemap b/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.modulemap deleted file mode 100644 index e65c98a..0000000 --- a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module ZIPFoundation { - umbrella header "ZIPFoundation-umbrella.h" - - export * - module * { export * } -} diff --git a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.release.xcconfig deleted file mode 100644 index 7da9d60..0000000 --- a/ReadViewDemo/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.release.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/ZIPFoundation -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ReadViewDemo/Pods/ZIPFoundation/LICENSE b/ReadViewDemo/Pods/ZIPFoundation/LICENSE deleted file mode 100644 index 07362ff..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017-2025 Thomas Zoechling (https://www.peakstep.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/ReadViewDemo/Pods/ZIPFoundation/README.md b/ReadViewDemo/Pods/ZIPFoundation/README.md deleted file mode 100644 index 8f8ebe2..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/README.md +++ /dev/null @@ -1,297 +0,0 @@ - - -[![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/ZIPFoundation.svg)](https://cocoapods.org/pods/ZIPFoundation) -[![Platform](https://img.shields.io/badge/Platforms-macOS%20|%20iOS%20|%20tvOS%20|%20watchOS%20|%20visionOS%20|%20Linux-lightgrey.svg)](https://github.com/weichsel/ZIPFoundation) -[![Twitter](https://img.shields.io/badge/twitter-@weichsel-blue.svg?style=flat)](http://twitter.com/weichsel) - -ZIP Foundation is a library to create, read and modify ZIP archive files. -It is written in Swift and based on [Apple's libcompression](https://developer.apple.com/documentation/compression) for high performance and energy efficiency. -To learn more about the performance characteristics of the framework, you can read [this blog post](https://thomas.zoechling.me/journal/2017/07/ZIPFoundation.html). - -- [Features](#features) -- [Requirements](#requirements) -- [Installation](#installation) -- [Usage](#usage) - - [Zipping Files and Directories](#zipping-files-and-directories) - - [Unzipping Archives](#unzipping-archives) -- [Advanced Usage](#advanced-usage) - - [Accessing individual Entries](#accessing-individual-entries) - - [Creating Archives](#creating-archives) - - [Adding and Removing Entries](#adding-and-removing-entries) - - [Closure based Reading and Writing](#closure-based-reading-and-writing) - - [In-Memory Archives](#in-memory-archives) - - [Progress Tracking and Cancellation](#progress-tracking-and-cancellation) -- [Credits](#credits) -- [License](#license) - -## Features - -- [x] Modern Swift API -- [x] High Performance Compression and Decompression -- [x] Large File Support -- [x] In-Memory Archives -- [x] Deterministic Memory Consumption -- [x] Linux compatibility -- [x] No 3rd party dependencies (on Apple platforms, zlib on Linux) -- [x] Comprehensive Unit and Performance Test Coverage -- [x] Complete Documentation - -## Requirements - -- iOS 12.0+ / macOS 10.11+ / tvOS 12.0+ / watchOS 2.0+ / visionOS 1.0+ -- Or Linux with zlib development package -- Xcode 11.0 -- Swift 4.0 - -## Installation - -### Swift Package Manager -The Swift Package Manager is a dependency manager integrated with the Swift build system. To learn how to use the Swift Package Manager for your project, please read the [official documentation](https://github.com/apple/swift-package-manager/blob/master/Documentation/Usage.md). -To add ZIP Foundation as a dependency, you have to add it to the `dependencies` of your `Package.swift` file and refer to that dependency in your `target`. - -```swift -// swift-tools-version:5.0 -import PackageDescription -let package = Package( - name: "", - dependencies: [ - .package(url: "https://github.com/weichsel/ZIPFoundation.git", .upToNextMajor(from: "0.9.0")) - ], - targets: [ - .target( - name: "", - dependencies: ["ZIPFoundation"]), - ] -) -``` - -After adding the dependency, you can fetch the library with: - -```bash -$ swift package resolve -``` - -### Carthage - -[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager. -Installation instructions can be found in the project's [README file](https://github.com/Carthage/Carthage#installing-carthage). - -To integrate ZIPFoundation into your Xcode project using Carthage, you have to add it to your `Cartfile`: - -```ogdl -github "weichsel/ZIPFoundation" ~> 0.9 -``` - -After adding ZIPFoundation to the `Cartfile`, you have to fetch the sources by running: - -```bash -carthage update --no-build -``` - -The fetched project has to be integrated into your workspace by dragging `ZIPFoundation.xcodeproj` to Xcode's Project Navigator. (See [official Carhage docs](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application).) - -### CocoaPods - -CocoaPods is a dependency manager for Objective-C and Swift. -To learn more about setting up your project for CocoaPods, please refer to the [official documentation](https://cocoapods.org/#install). -To integrate ZIP Foundation into your Xcode project using CocoaPods, you have to add it to your project's `Podfile`: - -```ruby -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '10.0' -use_frameworks! -target '' do - pod 'ZIPFoundation', '~> 0.9' -end -``` - -Afterwards, run the following command: - -```bash -$ pod install -``` - -## Usage -ZIP Foundation provides two high level methods to zip and unzip items. Both are implemented as extension of `FileManager`. -The functionality of those methods is modeled after the behavior of the Archive Utility in macOS. - -### Zipping Files and Directories -To zip a single file you simply pass a file URL representing the item you want to zip and a destination URL to `FileManager.zipItem(at sourceURL: URL, to destinationURL: URL)`: - -```swift -let fileManager = FileManager() -let currentWorkingPath = fileManager.currentDirectoryPath -var sourceURL = URL(fileURLWithPath: currentWorkingPath) -sourceURL.appendPathComponent("file.txt") -var destinationURL = URL(fileURLWithPath: currentWorkingPath) -destinationURL.appendPathComponent("archive.zip") -do { - try fileManager.zipItem(at: sourceURL, to: destinationURL) -} catch { - print("Creation of ZIP archive failed with error:\(error)") -} -``` - -By default, archives are created without any compression. To create compressed ZIP archives, the optional `compressionMethod` parameter has to be set to `.deflate`. -The same method also accepts URLs that represent directory items. In that case, `zipItem` adds the directory content of `sourceURL` to the archive. -By default, a root directory entry named after the `lastPathComponent` of the `sourceURL` is added to the destination archive. If you don't want to preserve the parent directory of the source in your archive, you can pass `shouldKeepParent: false`. - -### Unzipping Archives -To unzip existing archives, you can use `FileManager.unzipItem(at sourceURL: URL, to destinationURL: URL)`. -This recursively extracts all entries within the archive to the destination URL: - -```swift -let fileManager = FileManager() -let currentWorkingPath = fileManager.currentDirectoryPath -var sourceURL = URL(fileURLWithPath: currentWorkingPath) -sourceURL.appendPathComponent("archive.zip") -var destinationURL = URL(fileURLWithPath: currentWorkingPath) -destinationURL.appendPathComponent("directory") -do { - try fileManager.createDirectory(at: destinationURL, withIntermediateDirectories: true, attributes: nil) - try fileManager.unzipItem(at: sourceURL, to: destinationURL) -} catch { - print("Extraction of ZIP archive failed with error:\(error)") -} -``` - -## Advanced Usage -ZIP Foundation also allows you to individually access specific entries without the need to extract the whole archive. Additionally it comes with the ability to incrementally update archive contents. - -### Accessing individual Entries -To gain access to specific ZIP entries, you have to initialize an `Archive` object with a file URL that represents an existing archive. After doing that, entries can be retrieved via their relative path. `Archive` conforms to `Sequence` and therefore supports subscripting: - -```swift -let fileManager = FileManager() -let currentWorkingPath = fileManager.currentDirectoryPath -var archiveURL = URL(fileURLWithPath: currentWorkingPath) -archiveURL.appendPathComponent("archive.zip") -let archive = try Archive(url: archiveURL, accessMode: .read) -guard let entry = archive["file.txt"] else { - return -} -var destinationURL = URL(fileURLWithPath: currentWorkingPath) -destinationURL.appendPathComponent("out.txt") -do { - try archive.extract(entry, to: destinationURL) -} catch { - print("Extracting entry from archive failed with error:\(error)") -} -``` - -The `extract` method accepts optional parameters that allow you to control compression and memory consumption. -You can find detailed information about that parameters in the method's documentation. - -### Creating Archives -To create a new `Archive`, pass in a non-existing file URL and `AccessMode.create`. - -```swift -let fileManager = FileManager() -let currentWorkingPath = fileManager.currentDirectoryPath -var archiveURL = URL(fileURLWithPath: currentWorkingPath) -archiveURL.appendPathComponent("newArchive.zip") -let archive = try Archive(url: archiveURL, accessMode: .create) -``` - -### Adding and Removing Entries -You can add or remove entries to/from archives that have been opened with `.create` or `.update` `AccessMode`. -To add an entry from an existing file, you can pass a relative path and a base URL to `addEntry`. The relative path identifies the -entry within the ZIP archive. The relative path and the base URL must form an absolute file URL that points to the file you want to add to -the archive: - -```swift -let fileManager = FileManager() -let currentWorkingPath = fileManager.currentDirectoryPath -var archiveURL = URL(fileURLWithPath: currentWorkingPath) -archiveURL.appendPathComponent("archive.zip") -let archive = try Archive(url: archiveURL, accessMode: .update) -var fileURL = URL(fileURLWithPath: currentWorkingPath) -fileURL.appendPathComponent("file.txt") -do { - try archive.addEntry(with: fileURL.lastPathComponent, relativeTo: fileURL.deletingLastPathComponent()) -} catch { - print("Adding entry to ZIP archive failed with error:\(error)") -} -``` - -Alternatively, the `addEntry(with path: String, fileURL: URL)` method can be used to add files that are _not_ sharing a common base directory. -The `fileURL` parameter must contain an absolute file URL that points to a file, symlink or directory on an arbitrary file system location. - -The `addEntry` method accepts several optional parameters that allow you to control compression, memory consumption and file attributes. -You can find detailed information about that parameters in the method's documentation. - -To remove an entry, you need a reference to an entry within an archive that you can pass to `removeEntry`: - -```swift -guard let entry = archive["file.txt"] else { - return -} -do { - try archive.remove(entry) -} catch { - print("Removing entry from ZIP archive failed with error:\(error)") -} -``` - -### Closure based Reading and Writing -ZIP Foundation also allows you to consume ZIP entry contents without writing them to the file system. -The `extract` method accepts a closure of type `Consumer`. This closure is called during extraction until the contents of an entry are exhausted: - -```swift -try archive.extract(entry, consumer: { (data) in - print(data.count) -}) -``` -The `data` passed into the closure contains chunks of the current entry. You can control the chunk size of the entry by providing the optional `bufferSize` parameter. - -You can also add entries from an in-memory data source. To do this you have to provide a closure of type `Provider` to the `addEntry` method: - -```swift -let string = "abcdefghijkl" -guard let data = string.data(using: .utf8) else { return } -try? archive.addEntry(with: "fromMemory.txt", type: .file, uncompressedSize: Int64(data.count), bufferSize: 4, provider: { (position, size) -> Data in - // This will be called until `data` is exhausted (3x in this case). - return data.subdata(in: Data.Index(position).. Data in - return data.subdata(in: Data.Index(position)..=5.0) - let memoryFile: MemoryFile? - - init(file: FILEPointer, - endOfCentralDirectoryRecord: EndOfCentralDirectoryRecord, - zip64EndOfCentralDirectory: ZIP64EndOfCentralDirectory? = nil, - memoryFile: MemoryFile? = nil) { - self.file = file - self.endOfCentralDirectoryRecord = endOfCentralDirectoryRecord - self.zip64EndOfCentralDirectory = zip64EndOfCentralDirectory - self.memoryFile = memoryFile - } - #else - - init(file: FILEPointer, - endOfCentralDirectoryRecord: EndOfCentralDirectoryRecord, - zip64EndOfCentralDirectory: ZIP64EndOfCentralDirectory?) { - self.file = file - self.endOfCentralDirectoryRecord = endOfCentralDirectoryRecord - self.zip64EndOfCentralDirectory = zip64EndOfCentralDirectory - } - #endif - } - - static func makeBackingConfiguration(for url: URL, mode: AccessMode) throws - -> BackingConfiguration { - let fileManager = FileManager() - switch mode { - case .read: - let fileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) - guard let archiveFile = fopen(fileSystemRepresentation, "rb") else { - throw POSIXError(errno, path: url.path) - } - guard let (eocdRecord, zip64EOCD) = Archive.scanForEndOfCentralDirectoryRecord(in: archiveFile) else { - fclose(archiveFile) - throw ArchiveError.missingEndOfCentralDirectoryRecord - } - return BackingConfiguration(file: archiveFile, - endOfCentralDirectoryRecord: eocdRecord, - zip64EndOfCentralDirectory: zip64EOCD) - case .create: - let endOfCentralDirectoryRecord = EndOfCentralDirectoryRecord(numberOfDisk: 0, numberOfDiskStart: 0, - totalNumberOfEntriesOnDisk: 0, - totalNumberOfEntriesInCentralDirectory: 0, - sizeOfCentralDirectory: 0, - offsetToStartOfCentralDirectory: 0, - zipFileCommentLength: 0, - zipFileCommentData: Data()) - try endOfCentralDirectoryRecord.data.write(to: url, options: .withoutOverwriting) - fallthrough - case .update: - let fileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) - guard let archiveFile = fopen(fileSystemRepresentation, "rb+") else { - throw POSIXError(errno, path: url.path) - } - guard let (eocdRecord, zip64EOCD) = Archive.scanForEndOfCentralDirectoryRecord(in: archiveFile) else { - fclose(archiveFile) - throw ArchiveError.missingEndOfCentralDirectoryRecord - } - fseeko(archiveFile, 0, SEEK_SET) - return BackingConfiguration(file: archiveFile, - endOfCentralDirectoryRecord: eocdRecord, - zip64EndOfCentralDirectory: zip64EOCD) - } - } - - #if swift(>=5.0) - static func makeBackingConfiguration(for data: Data, mode: AccessMode) throws - -> BackingConfiguration { - let memoryFile = MemoryFile(data: data) - let archiveFile = try memoryFile.open(mode: mode) - switch mode { - case .read: - guard let (eocdRecord, zip64EOCD) = Archive.scanForEndOfCentralDirectoryRecord(in: archiveFile) else { - throw ArchiveError.missingEndOfCentralDirectoryRecord - } - - return BackingConfiguration(file: archiveFile, - endOfCentralDirectoryRecord: eocdRecord, - zip64EndOfCentralDirectory: zip64EOCD, - memoryFile: memoryFile) - case .create: - let endOfCentralDirectoryRecord = EndOfCentralDirectoryRecord(numberOfDisk: 0, numberOfDiskStart: 0, - totalNumberOfEntriesOnDisk: 0, - totalNumberOfEntriesInCentralDirectory: 0, - sizeOfCentralDirectory: 0, - offsetToStartOfCentralDirectory: 0, - zipFileCommentLength: 0, - zipFileCommentData: Data()) - _ = endOfCentralDirectoryRecord.data.withUnsafeBytes { (buffer: UnsafeRawBufferPointer) in - fwrite(buffer.baseAddress, buffer.count, 1, archiveFile) // Errors handled during read - } - fallthrough - case .update: - guard let (eocdRecord, zip64EOCD) = Archive.scanForEndOfCentralDirectoryRecord(in: archiveFile) else { - throw ArchiveError.missingEndOfCentralDirectoryRecord - } - - fseeko(archiveFile, 0, SEEK_SET) - return BackingConfiguration(file: archiveFile, - endOfCentralDirectoryRecord: eocdRecord, - zip64EndOfCentralDirectory: zip64EOCD, - memoryFile: memoryFile) - } - } - #endif -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Deprecated.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Deprecated.swift deleted file mode 100644 index e325f88..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Deprecated.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// Archive+Deprecated.swift -// ZIPFoundation -// -// Created by Thomas Zoechling on 06.02.23. -// - -import Foundation - -public extension Archive { - - @available(*, deprecated, message: "Please use the throwing initializer.") - convenience init?(url: URL, accessMode mode: AccessMode, preferredEncoding: String.Encoding? = nil) { - try? self.init(url: url, accessMode: mode, pathEncoding: preferredEncoding) - } - -#if swift(>=5.0) - @available(*, deprecated, message: "Please use the throwing initializer.") - convenience init?(data: Data = Data(), accessMode mode: AccessMode, preferredEncoding: String.Encoding? = nil) { - try? self.init(data: data, accessMode: mode, pathEncoding: preferredEncoding) - } -#endif -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Helpers.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Helpers.swift deleted file mode 100644 index e1ab527..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Helpers.swift +++ /dev/null @@ -1,279 +0,0 @@ -// -// Archive+Helpers.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -extension Archive { - - // MARK: - Reading - - func readUncompressed(entry: Entry, bufferSize: Int, skipCRC32: Bool, - progress: Progress? = nil, with consumer: Consumer) throws -> CRC32 { - let size = entry.centralDirectoryStructure.effectiveUncompressedSize - guard size <= .max else { throw ArchiveError.invalidEntrySize } - return try Data.consumePart(of: Int64(size), chunkSize: bufferSize, skipCRC32: skipCRC32, - provider: { (_, chunkSize) -> Data in - return try Data.readChunk(of: chunkSize, from: self.archiveFile) - }, consumer: { (data) in - if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } - try consumer(data) - progress?.completedUnitCount += Int64(data.count) - }) - } - - func readCompressed(entry: Entry, bufferSize: Int, skipCRC32: Bool, - progress: Progress? = nil, with consumer: Consumer) throws -> CRC32 { - let size = entry.centralDirectoryStructure.effectiveCompressedSize - guard size <= .max else { throw ArchiveError.invalidEntrySize } - return try Data.decompress(size: Int64(size), bufferSize: bufferSize, skipCRC32: skipCRC32, - provider: { (_, chunkSize) -> Data in - return try Data.readChunk(of: chunkSize, from: self.archiveFile) - }, consumer: { (data) in - if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } - try consumer(data) - progress?.completedUnitCount += Int64(data.count) - }) - } - - // MARK: - Writing - - func writeEntry(uncompressedSize: Int64, type: Entry.EntryType, - compressionMethod: CompressionMethod, bufferSize: Int, progress: Progress? = nil, - provider: Provider) throws -> (sizeWritten: Int64, crc32: CRC32) { - var checksum = CRC32(0) - var sizeWritten = Int64(0) - switch type { - case .file: - switch compressionMethod { - case .none: - (sizeWritten, checksum) = try self.writeUncompressed(size: uncompressedSize, - bufferSize: bufferSize, - progress: progress, provider: provider) - case .deflate: - (sizeWritten, checksum) = try self.writeCompressed(size: uncompressedSize, - bufferSize: bufferSize, - progress: progress, provider: provider) - } - case .directory: - _ = try provider(0, 0) - if let progress = progress { progress.completedUnitCount = progress.totalUnitCount } - case .symlink: - let (linkSizeWritten, linkChecksum) = try self.writeSymbolicLink(size: Int(uncompressedSize), - provider: provider) - (sizeWritten, checksum) = (Int64(linkSizeWritten), linkChecksum) - if let progress = progress { progress.completedUnitCount = progress.totalUnitCount } - } - return (sizeWritten, checksum) - } - - func writeLocalFileHeader(path: String, compressionMethod: CompressionMethod, - size: (uncompressed: UInt64, compressed: UInt64), checksum: CRC32, - modificationDateTime: (UInt16, UInt16)) throws -> LocalFileHeader { - // We always set Bit 11 in generalPurposeBitFlag, which indicates an UTF-8 encoded path. - let fileNameData = Data(path.utf8) - var uncompressedSizeOfLFH = UInt32(0) - var compressedSizeOfLFH = UInt32(0) - var extraFieldLength = UInt16(0) - var zip64ExtendedInformation: Entry.ZIP64ExtendedInformation? - var versionNeededToExtract = Version.v20.rawValue - // ZIP64 Extended Information in the Local header MUST include BOTH original and compressed file size fields. - if size.uncompressed >= maxUncompressedSize || size.compressed >= maxCompressedSize { - uncompressedSizeOfLFH = .max - compressedSizeOfLFH = .max - extraFieldLength = UInt16(20) // 2 + 2 + 8 + 8 - versionNeededToExtract = Version.v45.rawValue - zip64ExtendedInformation = Entry.ZIP64ExtendedInformation(dataSize: extraFieldLength - 4, - uncompressedSize: size.uncompressed, - compressedSize: size.compressed, - relativeOffsetOfLocalHeader: 0, - diskNumberStart: 0) - } else { - uncompressedSizeOfLFH = UInt32(size.uncompressed) - compressedSizeOfLFH = UInt32(size.compressed) - } - - let localFileHeader = LocalFileHeader(versionNeededToExtract: versionNeededToExtract, - generalPurposeBitFlag: UInt16(2048), - compressionMethod: compressionMethod.rawValue, - lastModFileTime: modificationDateTime.1, - lastModFileDate: modificationDateTime.0, crc32: checksum, - compressedSize: compressedSizeOfLFH, - uncompressedSize: uncompressedSizeOfLFH, - fileNameLength: UInt16(fileNameData.count), - extraFieldLength: extraFieldLength, fileNameData: fileNameData, - extraFieldData: zip64ExtendedInformation?.data ?? Data()) - _ = try Data.write(chunk: localFileHeader.data, to: self.archiveFile) - return localFileHeader - } - - func writeCentralDirectoryStructure(localFileHeader: LocalFileHeader, relativeOffset: UInt64, - externalFileAttributes: UInt32) throws -> CentralDirectoryStructure { - var extraUncompressedSize: UInt64? - var extraCompressedSize: UInt64? - var extraOffset: UInt64? - var relativeOffsetOfCD = UInt32(0) - var extraFieldLength = UInt16(0) - var zip64ExtendedInformation: Entry.ZIP64ExtendedInformation? - if localFileHeader.uncompressedSize == .max || localFileHeader.compressedSize == .max { - let zip64Field = Entry.ZIP64ExtendedInformation - .scanForZIP64Field(in: localFileHeader.extraFieldData, fields: [.uncompressedSize, .compressedSize]) - extraUncompressedSize = zip64Field?.uncompressedSize - extraCompressedSize = zip64Field?.compressedSize - } - if relativeOffset >= maxOffsetOfLocalFileHeader { - extraOffset = relativeOffset - relativeOffsetOfCD = .max - } else { - relativeOffsetOfCD = UInt32(relativeOffset) - } - extraFieldLength = [extraUncompressedSize, extraCompressedSize, extraOffset] - .compactMap { $0 } - .reduce(UInt16(0), { $0 + UInt16(MemoryLayout.size(ofValue: $1)) }) - if extraFieldLength > 0 { - // Size of extra fields, shouldn't include the leading 4 bytes - zip64ExtendedInformation = Entry.ZIP64ExtendedInformation(dataSize: extraFieldLength, - uncompressedSize: extraUncompressedSize ?? 0, - compressedSize: extraCompressedSize ?? 0, - relativeOffsetOfLocalHeader: extraOffset ?? 0, - diskNumberStart: 0) - extraFieldLength += Entry.ZIP64ExtendedInformation.headerSize - } - let centralDirectory = CentralDirectoryStructure(localFileHeader: localFileHeader, - fileAttributes: externalFileAttributes, - relativeOffset: relativeOffsetOfCD, - extraField: (extraFieldLength, - zip64ExtendedInformation?.data ?? Data())) - _ = try Data.write(chunk: centralDirectory.data, to: self.archiveFile) - return centralDirectory - } - - func writeEndOfCentralDirectory(centralDirectoryStructure: CentralDirectoryStructure, - startOfCentralDirectory: UInt64, - startOfEndOfCentralDirectory: UInt64, - operation: ModifyOperation) throws -> EndOfCentralDirectoryStructure { - var record = self.endOfCentralDirectoryRecord - let sizeOfCD = self.sizeOfCentralDirectory - let numberOfTotalEntries = self.totalNumberOfEntriesInCentralDirectory - let countChange = operation.rawValue - var dataLength = centralDirectoryStructure.extraFieldLength - dataLength += centralDirectoryStructure.fileNameLength - dataLength += centralDirectoryStructure.fileCommentLength - let cdDataLengthChange = countChange * (Int(dataLength) + CentralDirectoryStructure.size) - let (updatedSizeOfCD, updatedNumberOfEntries): (UInt64, UInt64) = try { - switch operation { - case .add: - guard .max - sizeOfCD >= cdDataLengthChange else { - throw ArchiveError.invalidCentralDirectorySize - } - guard .max - numberOfTotalEntries >= countChange else { - throw ArchiveError.invalidCentralDirectoryEntryCount - } - return (sizeOfCD + UInt64(cdDataLengthChange), numberOfTotalEntries + UInt64(countChange)) - case .remove: - return (sizeOfCD - UInt64(-cdDataLengthChange), numberOfTotalEntries - UInt64(-countChange)) - } - }() - let sizeOfCDForEOCD = updatedSizeOfCD >= maxSizeOfCentralDirectory - ? UInt32.max - : UInt32(updatedSizeOfCD) - let numberOfTotalEntriesForEOCD = updatedNumberOfEntries >= maxTotalNumberOfEntries - ? UInt16.max - : UInt16(updatedNumberOfEntries) - let offsetOfCDForEOCD = startOfCentralDirectory >= maxOffsetOfCentralDirectory - ? UInt32.max - : UInt32(startOfCentralDirectory) - // ZIP64 End of Central Directory - var zip64EOCD: ZIP64EndOfCentralDirectory? - if numberOfTotalEntriesForEOCD == .max || offsetOfCDForEOCD == .max || sizeOfCDForEOCD == .max { - zip64EOCD = try self.writeZIP64EOCD(totalNumberOfEntries: updatedNumberOfEntries, - sizeOfCentralDirectory: updatedSizeOfCD, - offsetOfCentralDirectory: startOfCentralDirectory, - offsetOfEndOfCentralDirectory: startOfEndOfCentralDirectory) - } - record = EndOfCentralDirectoryRecord(record: record, numberOfEntriesOnDisk: numberOfTotalEntriesForEOCD, - numberOfEntriesInCentralDirectory: numberOfTotalEntriesForEOCD, - updatedSizeOfCentralDirectory: sizeOfCDForEOCD, - startOfCentralDirectory: offsetOfCDForEOCD) - _ = try Data.write(chunk: record.data, to: self.archiveFile) - return (record, zip64EOCD) - } - - func writeUncompressed(size: Int64, bufferSize: Int, progress: Progress? = nil, - provider: Provider) throws -> (sizeWritten: Int64, checksum: CRC32) { - var position: Int64 = 0 - var sizeWritten: Int64 = 0 - var checksum = CRC32(0) - while position < size { - if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } - let readSize = (size - position) >= bufferSize ? bufferSize : Int(size - position) - let entryChunk = try provider(position, readSize) - checksum = entryChunk.crc32(checksum: checksum) - sizeWritten += Int64(try Data.write(chunk: entryChunk, to: self.archiveFile)) - position += Int64(bufferSize) - progress?.completedUnitCount = sizeWritten - } - return (sizeWritten, checksum) - } - - func writeCompressed(size: Int64, bufferSize: Int, progress: Progress? = nil, - provider: Provider) throws -> (sizeWritten: Int64, checksum: CRC32) { - var sizeWritten: Int64 = 0 - let consumer: Consumer = { data in sizeWritten += Int64(try Data.write(chunk: data, to: self.archiveFile)) } - let checksum = try Data.compress(size: size, bufferSize: bufferSize, - provider: { (position, size) -> Data in - if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } - let data = try provider(position, size) - progress?.completedUnitCount += Int64(data.count) - return data - }, consumer: consumer) - return(sizeWritten, checksum) - } - - func writeSymbolicLink(size: Int, provider: Provider) throws -> (sizeWritten: Int, checksum: CRC32) { - // The reported size of a symlink is the number of characters in the path it points to. - let linkData = try provider(0, size) - let checksum = linkData.crc32(checksum: 0) - let sizeWritten = try Data.write(chunk: linkData, to: self.archiveFile) - return (sizeWritten, checksum) - } - - func writeZIP64EOCD(totalNumberOfEntries: UInt64, - sizeOfCentralDirectory: UInt64, - offsetOfCentralDirectory: UInt64, - offsetOfEndOfCentralDirectory: UInt64) throws -> ZIP64EndOfCentralDirectory { - var zip64EOCD: ZIP64EndOfCentralDirectory = self.zip64EndOfCentralDirectory ?? { - // Shouldn't include the leading 12 bytes: (size - 12 = 44) - let record = ZIP64EndOfCentralDirectoryRecord(sizeOfZIP64EndOfCentralDirectoryRecord: UInt64(44), - versionMadeBy: UInt16(789), - versionNeededToExtract: Version.v45.rawValue, - numberOfDisk: 0, numberOfDiskStart: 0, - totalNumberOfEntriesOnDisk: 0, - totalNumberOfEntriesInCentralDirectory: 0, - sizeOfCentralDirectory: 0, - offsetToStartOfCentralDirectory: 0, - zip64ExtensibleDataSector: Data()) - let locator = ZIP64EndOfCentralDirectoryLocator(numberOfDiskWithZIP64EOCDRecordStart: 0, - relativeOffsetOfZIP64EOCDRecord: 0, - totalNumberOfDisk: 1) - return ZIP64EndOfCentralDirectory(record: record, locator: locator) - }() - - let updatedRecord = ZIP64EndOfCentralDirectoryRecord(record: zip64EOCD.record, - numberOfEntriesOnDisk: totalNumberOfEntries, - numberOfEntriesInCD: totalNumberOfEntries, - sizeOfCentralDirectory: sizeOfCentralDirectory, - offsetToStartOfCD: offsetOfCentralDirectory) - let updatedLocator = ZIP64EndOfCentralDirectoryLocator(locator: zip64EOCD.locator, - offsetOfZIP64EOCDRecord: offsetOfEndOfCentralDirectory) - zip64EOCD = ZIP64EndOfCentralDirectory(record: updatedRecord, locator: updatedLocator) - _ = try Data.write(chunk: zip64EOCD.data, to: self.archiveFile) - return zip64EOCD - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+MemoryFile.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+MemoryFile.swift deleted file mode 100644 index 7278609..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+MemoryFile.swift +++ /dev/null @@ -1,176 +0,0 @@ -// -// Archive+MemoryFile.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -extension Archive { - var isMemoryArchive: Bool { return self.url.scheme == memoryURLScheme } -} - -#if swift(>=5.0) - -extension Archive { - - class MemoryFile { - - private(set) var data: Data - private var offset = 0 - - init(data: Data = Data()) { - self.data = data - } - - func open(mode: AccessMode) throws -> FILEPointer { - let cookie = Unmanaged.passRetained(self) - #if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) || os(Android) - guard let result = mode.isWritable - ? funopen(cookie.toOpaque(), readStub, writeStub, seekStub, closeStub) - : funopen(cookie.toOpaque(), readStub, nil, seekStub, closeStub) - else { throw MemoryFileError.invalidMemoryFile } - #else - let stubs = cookie_io_functions_t(read: readStub, write: writeStub, seek: seekStub, close: closeStub) - guard let result = fopencookie(cookie.toOpaque(), mode.posixMode, stubs) - else { throw MemoryFileError.invalidMemoryFile } - #endif - return result - } - } - - /// Returns a `Data` object containing a representation of the receiver. - public var data: Data? { return self.memoryFile?.data } -} - -public enum MemoryFileError: Error { - case invalidMemoryFile -} - -private extension Archive.MemoryFile { - - func readData(buffer: UnsafeMutableRawBufferPointer) -> Int { - let size = min(buffer.count, data.count-offset) - let start = data.startIndex - self.data.copyBytes(to: buffer.bindMemory(to: UInt8.self), from: start+offset.. Int { - let start = self.data.startIndex - if self.offset < self.data.count && self.offset+buffer.count > self.data.count { - self.data.removeSubrange(start+self.offset.. data.count { - self.data.append(Data(count: self.offset-self.data.count)) - } - if self.offset == self.data.count { - self.data.append(buffer.bindMemory(to: UInt8.self)) - } else { - let start = self.data.startIndex // May have changed in earlier mutation - self.data.replaceSubrange( - start+self.offset.. Int { - var result = -1 - if whence == SEEK_SET { - result = offset - } else if whence == SEEK_CUR { - result = self.offset + offset - } else if whence == SEEK_END { - result = data.count + offset - } - self.offset = result - return self.offset - } -} - -private func fileFromCookie(cookie: UnsafeRawPointer) -> Archive.MemoryFile { - return Unmanaged.fromOpaque(cookie).takeUnretainedValue() -} - -private func closeStub(_ cookie: UnsafeMutableRawPointer?) -> Int32 { - if let cookie = cookie { - Unmanaged.fromOpaque(cookie).release() - } - return 0 -} - -#if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) || os(Android) - -private func readStub(_ cookie: UnsafeMutableRawPointer?, - _ bytePtr: UnsafeMutablePointer?, - _ count: Int32) -> Int32 { - guard let cookie = cookie, let bytePtr = bytePtr else { return 0 } - return Int32(fileFromCookie(cookie: cookie).readData( - buffer: UnsafeMutableRawBufferPointer(start: bytePtr, count: Int(count)))) -} - -private func writeStub(_ cookie: UnsafeMutableRawPointer?, - _ bytePtr: UnsafePointer?, - _ count: Int32) -> Int32 { - guard let cookie = cookie, let bytePtr = bytePtr else { return 0 } - return Int32(fileFromCookie(cookie: cookie).writeData( - buffer: UnsafeRawBufferPointer(start: bytePtr, count: Int(count)))) -} - -private func seekStub(_ cookie: UnsafeMutableRawPointer?, - _ offset: fpos_t, - _ whence: Int32) -> fpos_t { - guard let cookie = cookie else { return 0 } - return fpos_t(fileFromCookie(cookie: cookie).seek(offset: Int(offset), whence: whence)) -} - -#else - -extension Archive.AccessMode { - - var posixMode: String { - switch self { - case .read: return "rb" - case .create: return "wb+" - case .update: return "rb+" - } - } -} - -private func readStub(_ cookie: UnsafeMutableRawPointer?, - _ bytePtr: UnsafeMutablePointer?, - _ count: Int) -> Int { - guard let cookie = cookie, let bytePtr = bytePtr else { return 0 } - return fileFromCookie(cookie: cookie).readData( - buffer: UnsafeMutableRawBufferPointer(start: bytePtr, count: count)) -} - -private func writeStub(_ cookie: UnsafeMutableRawPointer?, - _ bytePtr: UnsafePointer?, - _ count: Int) -> Int { - guard let cookie = cookie, let bytePtr = bytePtr else { return 0 } - return fileFromCookie(cookie: cookie).writeData( - buffer: UnsafeRawBufferPointer(start: bytePtr, count: count)) -} - -private func seekStub(_ cookie: UnsafeMutableRawPointer?, - _ offset: UnsafeMutablePointer?, - _ whence: Int32) -> Int32 { - guard let cookie = cookie, let offset = offset else { return 0 } - let result = fileFromCookie(cookie: cookie).seek(offset: Int(offset.pointee), whence: whence) - if result >= 0 { - offset.pointee = result - return 0 - } else { - return -1 - } -} -#endif -#endif diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Progress.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Progress.swift deleted file mode 100644 index 51e331a..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Progress.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// Archive+Progress.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -extension Archive { - /// The number of the work units that have to be performed when - /// removing `entry` from the receiver. - /// - /// - Parameter entry: The entry that will be removed. - /// - Returns: The number of the work units. - public func totalUnitCountForRemoving(_ entry: Entry) -> Int64 { - return Int64(self.offsetToStartOfCentralDirectory - entry.localSize) - } - - func makeProgressForRemoving(_ entry: Entry) -> Progress { - return Progress(totalUnitCount: self.totalUnitCountForRemoving(entry)) - } - - /// The number of the work units that have to be performed when - /// reading `entry` from the receiver. - /// - /// - Parameter entry: The entry that will be read. - /// - Returns: The number of the work units. - public func totalUnitCountForReading(_ entry: Entry) -> Int64 { - switch entry.type { - case .file, .symlink: - return Int64(entry.uncompressedSize) - case .directory: - return defaultDirectoryUnitCount - } - } - - func makeProgressForReading(_ entry: Entry) -> Progress { - return Progress(totalUnitCount: self.totalUnitCountForReading(entry)) - } - - /// The number of the work units that have to be performed when - /// adding the file at `url` to the receiver. - /// - Parameter entry: The entry that will be removed. - /// - Returns: The number of the work units. - public func totalUnitCountForAddingItem(at url: URL) -> Int64 { - var count = Int64(0) - do { - let type = try FileManager.typeForItem(at: url) - switch type { - case .file, .symlink: - count = Int64(try FileManager.fileSizeForItem(at: url)) - case .directory: - count = defaultDirectoryUnitCount - } - } catch { count = -1 } - return count - } - - func makeProgressForAddingItem(at url: URL) -> Progress { - return Progress(totalUnitCount: self.totalUnitCountForAddingItem(at: url)) - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Reading.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Reading.swift deleted file mode 100644 index 8423bd9..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Reading.swift +++ /dev/null @@ -1,120 +0,0 @@ -// -// Archive+Reading.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -extension Archive { - /// Read a ZIP `Entry` from the receiver and write it to `url`. - /// - /// - Parameters: - /// - entry: The ZIP `Entry` to read. - /// - url: The destination file URL. - /// - bufferSize: The maximum size of the read buffer and the decompression buffer (if needed). - /// - skipCRC32: Optional flag to skip calculation of the CRC32 checksum to improve performance. - /// - allowUncontainedSymlinks: Optional flag to allow symlinks that point to paths outside the destination. - /// - progress: A progress object that can be used to track or cancel the extract operation. - /// - Returns: The checksum of the processed content or 0 if the `skipCRC32` flag was set to `true`. - /// - Throws: An error if the destination file cannot be written or the entry contains malformed content. - public func extract(_ entry: Entry, to url: URL, bufferSize: Int = defaultReadChunkSize, - skipCRC32: Bool = false, allowUncontainedSymlinks: Bool = false, - progress: Progress? = nil) throws -> CRC32 { - guard bufferSize > 0 else { - throw ArchiveError.invalidBufferSize - } - let fileManager = FileManager() - var checksum = CRC32(0) - switch entry.type { - case .file: - guard fileManager.itemExists(at: url) == false else { - throw CocoaError(.fileWriteFileExists, userInfo: [NSFilePathErrorKey: url.path]) - } - try fileManager.createParentDirectoryStructure(for: url) - let destinationRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) - guard let destinationFile: FILEPointer = fopen(destinationRepresentation, "wb+") else { - throw POSIXError(errno, path: url.path) - } - defer { fclose(destinationFile) } - let consumer = { _ = try Data.write(chunk: $0, to: destinationFile) } - checksum = try self.extract(entry, bufferSize: bufferSize, skipCRC32: skipCRC32, - progress: progress, consumer: consumer) - case .directory: - let consumer = { (_: Data) in - try fileManager.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil) - } - checksum = try self.extract(entry, bufferSize: bufferSize, skipCRC32: skipCRC32, - progress: progress, consumer: consumer) - case .symlink: - guard fileManager.itemExists(at: url) == false else { - throw CocoaError(.fileWriteFileExists, userInfo: [NSFilePathErrorKey: url.path]) - } - let consumer = { (data: Data) in - guard let linkPath = String(data: data, encoding: .utf8) else { throw ArchiveError.invalidEntryPath } - - let parentURL = url.deletingLastPathComponent() - let isAbsolutePath = (linkPath as NSString).isAbsolutePath - let linkURL = URL(fileURLWithPath: linkPath, relativeTo: isAbsolutePath ? nil : parentURL) - let isContained = allowUncontainedSymlinks || linkURL.isContained(in: parentURL) - guard isContained else { throw ArchiveError.uncontainedSymlink } - - try fileManager.createParentDirectoryStructure(for: url) - try fileManager.createSymbolicLink(atPath: url.path, withDestinationPath: linkPath) - } - checksum = try self.extract(entry, bufferSize: bufferSize, skipCRC32: skipCRC32, - progress: progress, consumer: consumer) - } - try fileManager.transferAttributes(from: entry, toItemAtURL: url) - return checksum - } - - /// Read a ZIP `Entry` from the receiver and forward its contents to a `Consumer` closure. - /// - /// - Parameters: - /// - entry: The ZIP `Entry` to read. - /// - bufferSize: The maximum size of the read buffer and the decompression buffer (if needed). - /// - skipCRC32: Optional flag to skip calculation of the CRC32 checksum to improve performance. - /// - progress: A progress object that can be used to track or cancel the extract operation. - /// - consumer: A closure that consumes contents of `Entry` as `Data` chunks. - /// - Returns: The checksum of the processed content or 0 if the `skipCRC32` flag was set to `true`.. - /// - Throws: An error if the destination file cannot be written or the entry contains malformed content. - public func extract(_ entry: Entry, bufferSize: Int = defaultReadChunkSize, skipCRC32: Bool = false, - progress: Progress? = nil, consumer: Consumer) throws -> CRC32 { - guard bufferSize > 0 else { - throw ArchiveError.invalidBufferSize - } - var checksum = CRC32(0) - let localFileHeader = entry.localFileHeader - guard entry.dataOffset <= .max else { throw ArchiveError.invalidLocalHeaderDataOffset } - fseeko(self.archiveFile, off_t(entry.dataOffset), SEEK_SET) - progress?.totalUnitCount = self.totalUnitCountForReading(entry) - switch entry.type { - case .file: - guard let compressionMethod = CompressionMethod(rawValue: localFileHeader.compressionMethod) else { - throw ArchiveError.invalidCompressionMethod - } - switch compressionMethod { - case .none: checksum = try self.readUncompressed(entry: entry, bufferSize: bufferSize, - skipCRC32: skipCRC32, progress: progress, with: consumer) - case .deflate: checksum = try self.readCompressed(entry: entry, bufferSize: bufferSize, - skipCRC32: skipCRC32, progress: progress, with: consumer) - } - case .directory: - try consumer(Data()) - progress?.completedUnitCount = self.totalUnitCountForReading(entry) - case .symlink: - let localFileHeader = entry.localFileHeader - let size = Int(localFileHeader.compressedSize) - let data = try Data.readChunk(of: size, from: self.archiveFile) - checksum = data.crc32(checksum: 0) - try consumer(data) - progress?.completedUnitCount = self.totalUnitCountForReading(entry) - } - return checksum - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+ReadingDeprecated.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+ReadingDeprecated.swift deleted file mode 100644 index e0cd363..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+ReadingDeprecated.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// Archive+ReadingDeprecated.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -public extension Archive { - - @available(*, deprecated, - message: "Please use `Int` for `bufferSize`.") - func extract(_ entry: Entry, to url: URL, bufferSize: UInt32, skipCRC32: Bool = false, - progress: Progress? = nil) throws -> CRC32 { - try self.extract(entry, to: url, bufferSize: Int(bufferSize), skipCRC32: skipCRC32, progress: progress) - } - - @available(*, deprecated, - message: "Please use `Int` for `bufferSize`.") - func extract(_ entry: Entry, bufferSize: UInt32, skipCRC32: Bool = false, - progress: Progress? = nil, consumer: Consumer) throws -> CRC32 { - try self.extract(entry, bufferSize: Int(bufferSize), skipCRC32: skipCRC32, - progress: progress, consumer: consumer) - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Writing.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Writing.swift deleted file mode 100644 index 6b821cd..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Writing.swift +++ /dev/null @@ -1,316 +0,0 @@ -// -// Archive+Writing.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -extension Archive { - enum ModifyOperation: Int { - case remove = -1 - case add = 1 - } - - typealias EndOfCentralDirectoryStructure = (EndOfCentralDirectoryRecord, ZIP64EndOfCentralDirectory?) - - /// Write files, directories or symlinks to the receiver. - /// - /// - Parameters: - /// - path: The path that is used to identify an `Entry` within the `Archive` file. - /// - baseURL: The base URL of the resource to add. - /// The `baseURL` combined with `path` must form a fully qualified file URL. - /// - compressionMethod: Indicates the `CompressionMethod` that should be applied to `Entry`. - /// By default, no compression will be applied. - /// - bufferSize: The maximum size of the write buffer and the compression buffer (if needed). - /// - progress: A progress object that can be used to track or cancel the add operation. - /// - Throws: An error if the source file cannot be read or the receiver is not writable. - public func addEntry(with path: String, relativeTo baseURL: URL, - compressionMethod: CompressionMethod = .none, - bufferSize: Int = defaultWriteChunkSize, progress: Progress? = nil) throws { - let fileURL = baseURL.appendingPathComponent(path) - - try self.addEntry(with: path, fileURL: fileURL, compressionMethod: compressionMethod, - bufferSize: bufferSize, progress: progress) - } - - /// Write files, directories or symlinks to the receiver. - /// - /// - Parameters: - /// - path: The path that is used to identify an `Entry` within the `Archive` file. - /// - fileURL: An absolute file URL referring to the resource to add. - /// - compressionMethod: Indicates the `CompressionMethod` that should be applied to `Entry`. - /// By default, no compression will be applied. - /// - bufferSize: The maximum size of the write buffer and the compression buffer (if needed). - /// - progress: A progress object that can be used to track or cancel the add operation. - /// - Throws: An error if the source file cannot be read or the receiver is not writable. - public func addEntry(with path: String, fileURL: URL, compressionMethod: CompressionMethod = .none, - bufferSize: Int = defaultWriteChunkSize, progress: Progress? = nil) throws { - let fileManager = FileManager() - guard fileManager.itemExists(at: fileURL) else { - throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: fileURL.path]) - } - let type = try FileManager.typeForItem(at: fileURL) - // symlinks do not need to be readable - guard type == .symlink || fileManager.isReadableFile(atPath: fileURL.path) else { - throw CocoaError(.fileReadNoPermission, userInfo: [NSFilePathErrorKey: fileURL.path]) - } - let modDate = try FileManager.fileModificationDateTimeForItem(at: fileURL) - let uncompressedSize = type == .directory ? 0 : try FileManager.fileSizeForItem(at: fileURL) - let permissions = try FileManager.permissionsForItem(at: fileURL) - var provider: Provider - switch type { - case .file: - let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: fileURL.path) - guard let entryFile: FILEPointer = fopen(entryFileSystemRepresentation, "rb") else { - throw POSIXError(errno, path: url.path) - } - defer { fclose(entryFile) } - provider = { _, _ in return try Data.readChunk(of: bufferSize, from: entryFile) } - try self.addEntry(with: path, type: type, uncompressedSize: uncompressedSize, - modificationDate: modDate, permissions: permissions, - compressionMethod: compressionMethod, bufferSize: bufferSize, - progress: progress, provider: provider) - case .directory: - provider = { _, _ in return Data() } - try self.addEntry(with: path.hasSuffix("/") ? path : path + "/", - type: type, uncompressedSize: uncompressedSize, - modificationDate: modDate, permissions: permissions, - compressionMethod: compressionMethod, bufferSize: bufferSize, - progress: progress, provider: provider) - case .symlink: - provider = { _, _ -> Data in - let linkDestination = try fileManager.destinationOfSymbolicLink(atPath: fileURL.path) - let linkFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: linkDestination) - let linkLength = Int(strlen(linkFileSystemRepresentation)) - let linkBuffer = UnsafeBufferPointer(start: linkFileSystemRepresentation, count: linkLength) - return Data(buffer: linkBuffer) - } - try self.addEntry(with: path, type: type, uncompressedSize: uncompressedSize, - modificationDate: modDate, permissions: permissions, - compressionMethod: compressionMethod, bufferSize: bufferSize, - progress: progress, provider: provider) - } - } - - /// Write files, directories or symlinks to the receiver. - /// - /// - Parameters: - /// - path: The path that is used to identify an `Entry` within the `Archive` file. - /// - type: Indicates the `Entry.EntryType` of the added content. - /// - uncompressedSize: The uncompressed size of the data that is going to be added with `provider`. - /// - modificationDate: A `Date` describing the file modification date of the `Entry`. - /// Default is the current `Date`. - /// - permissions: POSIX file permissions for the `Entry`. - /// Default is `0`o`644` for files and symlinks and `0`o`755` for directories. - /// - compressionMethod: Indicates the `CompressionMethod` that should be applied to `Entry`. - /// By default, no compression will be applied. - /// - bufferSize: The maximum size of the write buffer and the compression buffer (if needed). - /// - progress: A progress object that can be used to track or cancel the add operation. - /// - provider: A closure that accepts a position and a chunk size. Returns a `Data` chunk. - /// - Throws: An error if the source data is invalid or the receiver is not writable. - public func addEntry(with path: String, type: Entry.EntryType, uncompressedSize: Int64, - modificationDate: Date = Date(), permissions: UInt16? = nil, - compressionMethod: CompressionMethod = .none, bufferSize: Int = defaultWriteChunkSize, - progress: Progress? = nil, provider: Provider) throws { - guard self.accessMode != .read else { throw ArchiveError.unwritableArchive } - // Directories and symlinks cannot be compressed - let compressionMethod = type == .file ? compressionMethod : .none - progress?.totalUnitCount = type == .directory ? defaultDirectoryUnitCount : uncompressedSize - let (eocdRecord, zip64EOCD) = (self.endOfCentralDirectoryRecord, self.zip64EndOfCentralDirectory) - guard self.offsetToStartOfCentralDirectory <= .max else { throw ArchiveError.invalidCentralDirectoryOffset } - var startOfCD = Int64(self.offsetToStartOfCentralDirectory) - fseeko(self.archiveFile, off_t(startOfCD), SEEK_SET) - let existingSize = self.sizeOfCentralDirectory - let existingData = try Data.readChunk(of: Int(existingSize), from: self.archiveFile) - fseeko(self.archiveFile, off_t(startOfCD), SEEK_SET) - let fileHeaderStart = Int64(ftello(self.archiveFile)) - guard fileHeaderStart >= 0 else { throw ArchiveError.unwritableArchive } - - let modDateTime = modificationDate.fileModificationDateTime - defer { fflush(self.archiveFile) } - do { - // Local File Header - var localFileHeader = try self.writeLocalFileHeader(path: path, compressionMethod: compressionMethod, - size: (UInt64(uncompressedSize), 0), checksum: 0, - modificationDateTime: modDateTime) - // File Data - let (written, checksum) = try self.writeEntry(uncompressedSize: uncompressedSize, type: type, - compressionMethod: compressionMethod, bufferSize: bufferSize, - progress: progress, provider: provider) - startOfCD = Int64(ftello(self.archiveFile)) - guard startOfCD >= 0 else { throw ArchiveError.unwritableArchive } - - // Write the local file header a second time. Now with compressedSize (if applicable) and a valid checksum. - fseeko(self.archiveFile, off_t(fileHeaderStart), SEEK_SET) - localFileHeader = try self.writeLocalFileHeader(path: path, compressionMethod: compressionMethod, - size: (UInt64(uncompressedSize), UInt64(written)), - checksum: checksum, modificationDateTime: modDateTime) - // Central Directory - fseeko(self.archiveFile, off_t(startOfCD), SEEK_SET) - _ = try Data.writeLargeChunk(existingData, size: existingSize, bufferSize: bufferSize, to: archiveFile) - let permissions = permissions ?? (type == .directory ? defaultDirectoryPermissions : defaultFilePermissions) - let externalAttributes = FileManager.externalFileAttributesForEntry(of: type, permissions: permissions) - let centralDir = try self.writeCentralDirectoryStructure(localFileHeader: localFileHeader, - relativeOffset: UInt64(fileHeaderStart), - externalFileAttributes: externalAttributes) - // End of Central Directory Record (including ZIP64 End of Central Directory Record/Locator) - let startOfEOCD = Int64(ftello(self.archiveFile)) - guard startOfEOCD >= 0 else { throw ArchiveError.unwritableArchive } - - let eocd = try - self.writeEndOfCentralDirectory(centralDirectoryStructure: centralDir, - startOfCentralDirectory: UInt64(startOfCD), - startOfEndOfCentralDirectory: UInt64(startOfEOCD), operation: .add) - (self.endOfCentralDirectoryRecord, self.zip64EndOfCentralDirectory) = eocd - } catch ArchiveError.cancelledOperation { - try rollback(UInt64(fileHeaderStart), (existingData, existingSize), bufferSize, eocdRecord, zip64EOCD) - throw ArchiveError.cancelledOperation - } - } - - /// Remove a ZIP `Entry` from the receiver. - /// - /// - Parameters: - /// - entry: The `Entry` to remove. - /// - bufferSize: The maximum size for the read and write buffers used during removal. - /// - progress: A progress object that can be used to track or cancel the remove operation. - /// - Throws: An error if the `Entry` is malformed or the receiver is not writable. - public func remove(_ entry: Entry, bufferSize: Int = defaultReadChunkSize, progress: Progress? = nil) throws { - guard self.accessMode != .read else { throw ArchiveError.unwritableArchive } - let (tempArchive, tempDir) = try self.makeTempArchive() - defer { tempDir.map { try? FileManager().removeItem(at: $0) } } - progress?.totalUnitCount = self.totalUnitCountForRemoving(entry) - var centralDirectoryData = Data() - var offset: UInt64 = 0 - for currentEntry in self { - let cds = currentEntry.centralDirectoryStructure - if currentEntry != entry { - let entryStart = cds.effectiveRelativeOffsetOfLocalHeader - fseeko(self.archiveFile, off_t(entryStart), SEEK_SET) - let provider: Provider = { (_, chunkSize) -> Data in - return try Data.readChunk(of: chunkSize, from: self.archiveFile) - } - let consumer: Consumer = { - if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } - _ = try Data.write(chunk: $0, to: tempArchive.archiveFile) - progress?.completedUnitCount += Int64($0.count) - } - guard currentEntry.localSize <= .max else { throw ArchiveError.invalidLocalHeaderSize } - _ = try Data.consumePart(of: Int64(currentEntry.localSize), chunkSize: bufferSize, - provider: provider, consumer: consumer) - let updatedCentralDirectory = updateOffsetInCentralDirectory(centralDirectoryStructure: cds, - updatedOffset: entryStart - offset) - centralDirectoryData.append(updatedCentralDirectory.data) - } else { offset = currentEntry.localSize } - } - let startOfCentralDirectory = Int64(ftello(tempArchive.archiveFile)) - guard startOfCentralDirectory >= 0 else { throw ArchiveError.unwritableArchive } - - _ = try Data.write(chunk: centralDirectoryData, to: tempArchive.archiveFile) - let startOfEndOfCentralDirectory = Int64(ftello(tempArchive.archiveFile)) - guard startOfEndOfCentralDirectory >= 0 else { throw ArchiveError.unwritableArchive } - - tempArchive.endOfCentralDirectoryRecord = self.endOfCentralDirectoryRecord - tempArchive.zip64EndOfCentralDirectory = self.zip64EndOfCentralDirectory - let ecodStructure = try - tempArchive.writeEndOfCentralDirectory(centralDirectoryStructure: entry.centralDirectoryStructure, - startOfCentralDirectory: UInt64(startOfCentralDirectory), - startOfEndOfCentralDirectory: UInt64(startOfEndOfCentralDirectory), - operation: .remove) - (tempArchive.endOfCentralDirectoryRecord, tempArchive.zip64EndOfCentralDirectory) = ecodStructure - (self.endOfCentralDirectoryRecord, self.zip64EndOfCentralDirectory) = ecodStructure - fflush(tempArchive.archiveFile) - try self.replaceCurrentArchive(with: tempArchive) - } - - func replaceCurrentArchive(with archive: Archive) throws { - if self.isMemoryArchive { - #if swift(>=5.0) - guard let data = archive.data else { - throw ArchiveError.unwritableArchive - } - - let config = try Archive.makeBackingConfiguration(for: data, mode: .update) - self.archiveFile = config.file - self.memoryFile = config.memoryFile - self.endOfCentralDirectoryRecord = config.endOfCentralDirectoryRecord - self.zip64EndOfCentralDirectory = config.zip64EndOfCentralDirectory - #endif - } else { - let fileManager = FileManager() - #if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) - do { - _ = try fileManager.replaceItemAt(self.url, withItemAt: archive.url) - } catch { - _ = try fileManager.removeItem(at: self.url) - _ = try fileManager.moveItem(at: archive.url, to: self.url) - } - #else - _ = try fileManager.removeItem(at: self.url) - _ = try fileManager.moveItem(at: archive.url, to: self.url) - #endif - let fileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: self.url.path) - guard let file = fopen(fileSystemRepresentation, "rb+") else { throw ArchiveError.unreadableArchive } - - self.archiveFile = file - } - } -} - -// MARK: - Private - -private extension Archive { - - func updateOffsetInCentralDirectory(centralDirectoryStructure: CentralDirectoryStructure, - updatedOffset: UInt64) -> CentralDirectoryStructure { - let zip64ExtendedInformation = Entry.ZIP64ExtendedInformation( - zip64ExtendedInformation: centralDirectoryStructure.zip64ExtendedInformation, offset: updatedOffset) - let offsetInCD = updatedOffset < maxOffsetOfLocalFileHeader ? UInt32(updatedOffset) : UInt32.max - return CentralDirectoryStructure(centralDirectoryStructure: centralDirectoryStructure, - zip64ExtendedInformation: zip64ExtendedInformation, - relativeOffset: offsetInCD) - } - - func rollback(_ localFileHeaderStart: UInt64, _ existingCentralDirectory: (data: Data, size: UInt64), - _ bufferSize: Int, _ endOfCentralDirRecord: EndOfCentralDirectoryRecord, - _ zip64EndOfCentralDirectory: ZIP64EndOfCentralDirectory?) throws { - fflush(self.archiveFile) - ftruncate(fileno(self.archiveFile), off_t(localFileHeaderStart)) - fseeko(self.archiveFile, off_t(localFileHeaderStart), SEEK_SET) - _ = try Data.writeLargeChunk(existingCentralDirectory.data, size: existingCentralDirectory.size, - bufferSize: bufferSize, to: archiveFile) - _ = try Data.write(chunk: existingCentralDirectory.data, to: self.archiveFile) - if let zip64EOCD = zip64EndOfCentralDirectory { - _ = try Data.write(chunk: zip64EOCD.data, to: self.archiveFile) - } - _ = try Data.write(chunk: endOfCentralDirRecord.data, to: self.archiveFile) - } - - func makeTempArchive() throws -> (Archive, URL?) { - var archive: Archive - var url: URL? - if self.isMemoryArchive { - #if swift(>=5.0) - archive = try Archive(data: Data(), accessMode: .create, - pathEncoding: self.pathEncoding) - #else - fatalError("Memory archives are unsupported.") - #endif - } else { - let manager = FileManager() - let tempDir = URL.temporaryReplacementDirectoryURL(for: self) - let uniqueString = ProcessInfo.processInfo.globallyUniqueString - let tempArchiveURL = tempDir.appendingPathComponent(uniqueString) - try manager.createParentDirectoryStructure(for: tempArchiveURL) - let tempArchive = try Archive(url: tempArchiveURL, accessMode: .create) - archive = tempArchive - url = tempDir - } - return (archive, url) - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+WritingDeprecated.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+WritingDeprecated.swift deleted file mode 100644 index 52fd336..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+WritingDeprecated.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// Archive+WritingDeprecated.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -public extension Archive { - - @available(*, deprecated, - message: "Please use `Int` for `bufferSize`.") - func addEntry(with path: String, relativeTo baseURL: URL, - compressionMethod: CompressionMethod = .none, - bufferSize: UInt32, progress: Progress? = nil) throws { - try self.addEntry(with: path, relativeTo: baseURL, compressionMethod: compressionMethod, - bufferSize: Int(bufferSize), progress: progress) - } - - @available(*, deprecated, - message: "Please use `Int` for `bufferSize`.") - func addEntry(with path: String, fileURL: URL, compressionMethod: CompressionMethod = .none, - bufferSize: UInt32, progress: Progress? = nil) throws { - try self.addEntry(with: path, fileURL: fileURL, compressionMethod: compressionMethod, - bufferSize: Int(bufferSize), progress: progress) - } - - @available(*, deprecated, - message: "Please use `Int64` for `uncompressedSize` and provider `position`. `Int` for `bufferSize`.") - func addEntry(with path: String, type: Entry.EntryType, uncompressedSize: UInt32, - modificationDate: Date = Date(), permissions: UInt16? = nil, - compressionMethod: CompressionMethod = .none, bufferSize: Int = defaultWriteChunkSize, - progress: Progress? = nil, provider: (_ position: Int, _ size: Int) throws -> Data) throws { - let newProvider: Provider = { try provider(Int($0), $1) } - try self.addEntry(with: path, type: type, uncompressedSize: Int64(uncompressedSize), - modificationDate: modificationDate, permissions: permissions, - compressionMethod: compressionMethod, bufferSize: bufferSize, - progress: progress, provider: newProvider) - } - - @available(*, deprecated, - message: "Please use `Int` for `bufferSize`.") - func remove(_ entry: Entry, bufferSize: UInt32, progress: Progress? = nil) throws { - try self.remove(entry, bufferSize: Int(bufferSize), progress: progress) - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+ZIP64.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+ZIP64.swift deleted file mode 100644 index 8b94b7c..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+ZIP64.swift +++ /dev/null @@ -1,154 +0,0 @@ -// -// Archive+ZIP64.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -let zip64EOCDRecordStructSignature = 0x06064b50 -let zip64EOCDLocatorStructSignature = 0x07064b50 - -enum ExtraFieldHeaderID: UInt16 { - case zip64ExtendedInformation = 0x0001 -} - -extension Archive { - struct ZIP64EndOfCentralDirectory { - let record: ZIP64EndOfCentralDirectoryRecord - let locator: ZIP64EndOfCentralDirectoryLocator - } - - struct ZIP64EndOfCentralDirectoryRecord: DataSerializable { - let zip64EOCDRecordSignature = UInt32(zip64EOCDRecordStructSignature) - let sizeOfZIP64EndOfCentralDirectoryRecord: UInt64 - let versionMadeBy: UInt16 - let versionNeededToExtract: UInt16 - let numberOfDisk: UInt32 - let numberOfDiskStart: UInt32 - let totalNumberOfEntriesOnDisk: UInt64 - let totalNumberOfEntriesInCentralDirectory: UInt64 - let sizeOfCentralDirectory: UInt64 - let offsetToStartOfCentralDirectory: UInt64 - let zip64ExtensibleDataSector: Data - static let size = 56 - } - - struct ZIP64EndOfCentralDirectoryLocator: DataSerializable { - let zip64EOCDLocatorSignature = UInt32(zip64EOCDLocatorStructSignature) - let numberOfDiskWithZIP64EOCDRecordStart: UInt32 - let relativeOffsetOfZIP64EOCDRecord: UInt64 - let totalNumberOfDisk: UInt32 - static let size = 20 - } -} - -extension Archive.ZIP64EndOfCentralDirectoryRecord { - var data: Data { - var zip64EOCDRecordSignature = self.zip64EOCDRecordSignature - var sizeOfZIP64EOCDRecord = self.sizeOfZIP64EndOfCentralDirectoryRecord - var versionMadeBy = self.versionMadeBy - var versionNeededToExtract = self.versionNeededToExtract - var numberOfDisk = self.numberOfDisk - var numberOfDiskStart = self.numberOfDiskStart - var totalNumberOfEntriesOnDisk = self.totalNumberOfEntriesOnDisk - var totalNumberOfEntriesInCD = self.totalNumberOfEntriesInCentralDirectory - var sizeOfCD = self.sizeOfCentralDirectory - var offsetToStartOfCD = self.offsetToStartOfCentralDirectory - var data = Data() - withUnsafePointer(to: &zip64EOCDRecordSignature, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &sizeOfZIP64EOCDRecord, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &versionMadeBy, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &versionNeededToExtract, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &numberOfDisk, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &numberOfDiskStart, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &totalNumberOfEntriesOnDisk, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &totalNumberOfEntriesInCD, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &sizeOfCD, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &offsetToStartOfCD, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - data.append(self.zip64ExtensibleDataSector) - return data - } - - init?(data: Data, additionalDataProvider provider: (Int) throws -> Data) { - guard data.count == Archive.ZIP64EndOfCentralDirectoryRecord.size else { return nil } - guard data.scanValue(start: 0) == zip64EOCDRecordSignature else { return nil } - self.sizeOfZIP64EndOfCentralDirectoryRecord = data.scanValue(start: 4) - self.versionMadeBy = data.scanValue(start: 12) - self.versionNeededToExtract = data.scanValue(start: 14) - // Version Needed to Extract: 4.5 - File uses ZIP64 format extensions - guard self.versionNeededToExtract >= Archive.Version.v45.rawValue else { return nil } - self.numberOfDisk = data.scanValue(start: 16) - self.numberOfDiskStart = data.scanValue(start: 20) - self.totalNumberOfEntriesOnDisk = data.scanValue(start: 24) - self.totalNumberOfEntriesInCentralDirectory = data.scanValue(start: 32) - self.sizeOfCentralDirectory = data.scanValue(start: 40) - self.offsetToStartOfCentralDirectory = data.scanValue(start: 48) - self.zip64ExtensibleDataSector = Data() - } - - init(record: Archive.ZIP64EndOfCentralDirectoryRecord, - numberOfEntriesOnDisk: UInt64, - numberOfEntriesInCD: UInt64, - sizeOfCentralDirectory: UInt64, - offsetToStartOfCD: UInt64) { - self.sizeOfZIP64EndOfCentralDirectoryRecord = record.sizeOfZIP64EndOfCentralDirectoryRecord - self.versionMadeBy = record.versionMadeBy - self.versionNeededToExtract = record.versionNeededToExtract - self.numberOfDisk = record.numberOfDisk - self.numberOfDiskStart = record.numberOfDiskStart - self.totalNumberOfEntriesOnDisk = numberOfEntriesOnDisk - self.totalNumberOfEntriesInCentralDirectory = numberOfEntriesInCD - self.sizeOfCentralDirectory = sizeOfCentralDirectory - self.offsetToStartOfCentralDirectory = offsetToStartOfCD - self.zip64ExtensibleDataSector = record.zip64ExtensibleDataSector - } -} - -extension Archive.ZIP64EndOfCentralDirectoryLocator { - var data: Data { - var zip64EOCDLocatorSignature = self.zip64EOCDLocatorSignature - var numberOfDiskWithZIP64EOCD = self.numberOfDiskWithZIP64EOCDRecordStart - var offsetOfZIP64EOCDRecord = self.relativeOffsetOfZIP64EOCDRecord - var totalNumberOfDisk = self.totalNumberOfDisk - var data = Data() - withUnsafePointer(to: &zip64EOCDLocatorSignature, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &numberOfDiskWithZIP64EOCD, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &offsetOfZIP64EOCDRecord, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &totalNumberOfDisk, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - return data - } - - init?(data: Data, additionalDataProvider provider: (Int) throws -> Data) { - guard data.count == Archive.ZIP64EndOfCentralDirectoryLocator.size else { return nil } - guard data.scanValue(start: 0) == zip64EOCDLocatorSignature else { return nil } - self.numberOfDiskWithZIP64EOCDRecordStart = data.scanValue(start: 4) - self.relativeOffsetOfZIP64EOCDRecord = data.scanValue(start: 8) - self.totalNumberOfDisk = data.scanValue(start: 16) - } - - init(locator: Archive.ZIP64EndOfCentralDirectoryLocator, offsetOfZIP64EOCDRecord: UInt64) { - self.numberOfDiskWithZIP64EOCDRecordStart = locator.numberOfDiskWithZIP64EOCDRecordStart - self.relativeOffsetOfZIP64EOCDRecord = offsetOfZIP64EOCDRecord - self.totalNumberOfDisk = locator.totalNumberOfDisk - } -} - -extension Archive.ZIP64EndOfCentralDirectory { - var data: Data { record.data + locator.data } -} - -/// Properties that represent the maximum value of each field -var maxUInt32 = UInt32.max -var maxUInt16 = UInt16.max - -var maxCompressedSize: UInt32 { maxUInt32 } -var maxUncompressedSize: UInt32 { maxUInt32 } -var maxOffsetOfLocalFileHeader: UInt32 { maxUInt32 } -var maxOffsetOfCentralDirectory: UInt32 { maxUInt32 } -var maxSizeOfCentralDirectory: UInt32 { maxUInt32 } -var maxTotalNumberOfEntries: UInt16 { maxUInt16 } diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive.swift deleted file mode 100644 index 5fc11d2..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive.swift +++ /dev/null @@ -1,369 +0,0 @@ -// -// Archive.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -/// The default chunk size when reading entry data from an archive. -public let defaultReadChunkSize = Int(16*1024) -/// The default chunk size when writing entry data to an archive. -public let defaultWriteChunkSize = defaultReadChunkSize -/// The default permissions for newly added entries. -public let defaultFilePermissions = UInt16(0o644) -/// The default permissions for newly added directories. -public let defaultDirectoryPermissions = UInt16(0o755) -let defaultPOSIXBufferSize = defaultReadChunkSize -let defaultDirectoryUnitCount = Int64(1) -let minEndOfCentralDirectoryOffset = Int64(22) -let endOfCentralDirectoryStructSignature = 0x06054b50 -let localFileHeaderStructSignature = 0x04034b50 -let dataDescriptorStructSignature = 0x08074b50 -let centralDirectoryStructSignature = 0x02014b50 -let memoryURLScheme = "memory" - -/// A sequence of uncompressed or compressed ZIP entries. -/// -/// You use an `Archive` to create, read or update ZIP files. -/// To read an existing ZIP file, you have to pass in an existing file `URL` and `AccessMode.read`: -/// -/// var archiveURL = URL(fileURLWithPath: "/path/file.zip") -/// var archive = Archive(url: archiveURL, accessMode: .read) -/// -/// An `Archive` is a sequence of entries. You can -/// iterate over an archive using a `for`-`in` loop to get access to individual `Entry` objects: -/// -/// for entry in archive { -/// print(entry.path) -/// } -/// -/// Each `Entry` in an `Archive` is represented by its `path`. You can -/// use `path` to retrieve the corresponding `Entry` from an `Archive` via subscripting: -/// -/// let entry = archive['/path/file.txt'] -/// -/// To create a new `Archive`, pass in a non-existing file URL and `AccessMode.create`. To modify an -/// existing `Archive` use `AccessMode.update`: -/// -/// var archiveURL = URL(fileURLWithPath: "/path/file.zip") -/// var archive = Archive(url: archiveURL, accessMode: .update) -/// try archive?.addEntry("test.txt", relativeTo: baseURL, compressionMethod: .deflate) -public final class Archive: Sequence { - - typealias LocalFileHeader = Entry.LocalFileHeader - typealias DataDescriptor = Entry.DefaultDataDescriptor - typealias ZIP64DataDescriptor = Entry.ZIP64DataDescriptor - typealias CentralDirectoryStructure = Entry.CentralDirectoryStructure - - /// An error that occurs during reading, creating or updating a ZIP file. - public enum ArchiveError: Error { - /// Thrown when an archive file is either damaged or inaccessible. - case unreadableArchive - /// Thrown when an archive is either opened with AccessMode.read or the destination file is unwritable. - case unwritableArchive - /// Thrown when the path of an `Entry` cannot be stored in an archive. - case invalidEntryPath - /// Thrown when an `Entry` can't be stored in the archive with the proposed compression method. - case invalidCompressionMethod - /// Thrown when the stored checksum of an `Entry` doesn't match the checksum during reading. - case invalidCRC32 - /// Thrown when an extract, add or remove operation was canceled. - case cancelledOperation - /// Thrown when an extract operation was called with zero or negative `bufferSize` parameter. - case invalidBufferSize - /// Thrown when uncompressedSize/compressedSize exceeds `Int64.max` (Imposed by file API). - case invalidEntrySize - /// Thrown when the offset of local header data exceeds `Int64.max` (Imposed by file API). - case invalidLocalHeaderDataOffset - /// Thrown when the size of local header exceeds `Int64.max` (Imposed by file API). - case invalidLocalHeaderSize - /// Thrown when the offset of central directory exceeds `Int64.max` (Imposed by file API). - case invalidCentralDirectoryOffset - /// Thrown when the size of central directory exceeds `UInt64.max` (Imposed by ZIP specification). - case invalidCentralDirectorySize - /// Thrown when number of entries in central directory exceeds `UInt64.max` (Imposed by ZIP specification). - case invalidCentralDirectoryEntryCount - /// Thrown when an archive does not contain the required End of Central Directory Record. - case missingEndOfCentralDirectoryRecord - /// Thrown when an entry contains a symlink pointing to a path outside the destination directory. - case uncontainedSymlink - } - - /// The access mode for an `Archive`. - public enum AccessMode: UInt { - /// Indicates that a newly instantiated `Archive` should create its backing file. - case create - /// Indicates that a newly instantiated `Archive` should read from an existing backing file. - case read - /// Indicates that a newly instantiated `Archive` should update an existing backing file. - case update - - /// Indicates that the archive can be written to. - var isWritable: Bool { self != .read } - } - - /// The version of an `Archive` - enum Version: UInt16 { - /// The minimum version for deflate compressed archives - case v20 = 20 - /// The minimum version for archives making use of ZIP64 extensions - case v45 = 45 - } - - struct EndOfCentralDirectoryRecord: DataSerializable { - let endOfCentralDirectorySignature = UInt32(endOfCentralDirectoryStructSignature) - let numberOfDisk: UInt16 - let numberOfDiskStart: UInt16 - let totalNumberOfEntriesOnDisk: UInt16 - let totalNumberOfEntriesInCentralDirectory: UInt16 - let sizeOfCentralDirectory: UInt32 - let offsetToStartOfCentralDirectory: UInt32 - let zipFileCommentLength: UInt16 - let zipFileCommentData: Data - static let size = 22 - } - - /// URL of an Archive's backing file. - public let url: URL - /// Access mode for an archive file. - public let accessMode: AccessMode - var archiveFile: FILEPointer { - willSet { - fclose(self.archiveFile) - } - } - var endOfCentralDirectoryRecord: EndOfCentralDirectoryRecord - var zip64EndOfCentralDirectory: ZIP64EndOfCentralDirectory? - var pathEncoding: String.Encoding? - - var totalNumberOfEntriesInCentralDirectory: UInt64 { - zip64EndOfCentralDirectory?.record.totalNumberOfEntriesInCentralDirectory - ?? UInt64(endOfCentralDirectoryRecord.totalNumberOfEntriesInCentralDirectory) - } - var sizeOfCentralDirectory: UInt64 { - zip64EndOfCentralDirectory?.record.sizeOfCentralDirectory - ?? UInt64(endOfCentralDirectoryRecord.sizeOfCentralDirectory) - } - var offsetToStartOfCentralDirectory: UInt64 { - zip64EndOfCentralDirectory?.record.offsetToStartOfCentralDirectory - ?? UInt64(endOfCentralDirectoryRecord.offsetToStartOfCentralDirectory) - } - - /// Initializes a new ZIP `Archive`. - /// - /// You can use this initalizer to create new archive files or to read and update existing ones. - /// The `mode` parameter indicates the intended usage of the archive: `.read`, `.create` or `.update`. - /// - Parameters: - /// - url: File URL to the receivers backing file. - /// - mode: Access mode of the receiver. - /// - pathEncoding: Encoding for entry paths. Overrides the encoding specified in the archive. - /// This encoding is only used when _decoding_ paths from the receiver. - /// Paths of entries added with `addEntry` are always UTF-8 encoded. - /// - Returns: An archive initialized with a backing file at the passed in file URL and the given access mode - /// or `nil` if the following criteria are not met: - /// - Note: - /// - The file URL _must_ point to an existing file for `AccessMode.read`. - /// - The file URL _must_ point to a non-existing file for `AccessMode.create`. - /// - The file URL _must_ point to an existing file for `AccessMode.update`. - public init(url: URL, accessMode mode: AccessMode, pathEncoding: String.Encoding? = nil) throws { - self.url = url - self.accessMode = mode - self.pathEncoding = pathEncoding - let config = try Archive.makeBackingConfiguration(for: url, mode: mode) - self.archiveFile = config.file - self.endOfCentralDirectoryRecord = config.endOfCentralDirectoryRecord - self.zip64EndOfCentralDirectory = config.zip64EndOfCentralDirectory - setvbuf(self.archiveFile, nil, _IOFBF, Int(defaultPOSIXBufferSize)) - } - - #if swift(>=5.0) - var memoryFile: MemoryFile? - - /// Initializes a new in-memory ZIP `Archive`. - /// - /// You can use this initalizer to create new in-memory archive files or to read and update existing ones. - /// - /// - Parameters: - /// - data: `Data` object used as backing for in-memory archives. - /// - mode: Access mode of the receiver. - /// - pathEncoding: Encoding for entry paths. Overrides the encoding specified in the archive. - /// This encoding is only used when _decoding_ paths from the receiver. - /// Paths of entries added with `addEntry` are always UTF-8 encoded. - /// - Returns: An in-memory archive initialized with passed in backing data. - /// - Note: - /// - The backing `data` _must_ contain a valid ZIP archive for `AccessMode.read` and `AccessMode.update`. - /// - The backing `data` _must_ be empty (or omitted) for `AccessMode.create`. - public init(data: Data = Data(), accessMode mode: AccessMode, pathEncoding: String.Encoding? = nil) throws { - let url = URL(string: "\(memoryURLScheme)://")! - self.url = url - self.accessMode = mode - self.pathEncoding = pathEncoding - let config = try Archive.makeBackingConfiguration(for: data, mode: mode) - self.archiveFile = config.file - self.memoryFile = config.memoryFile - self.endOfCentralDirectoryRecord = config.endOfCentralDirectoryRecord - self.zip64EndOfCentralDirectory = config.zip64EndOfCentralDirectory - } - #endif - - deinit { - fclose(self.archiveFile) - } - - public func makeIterator() -> AnyIterator { - let totalNumberOfEntriesInCD = self.totalNumberOfEntriesInCentralDirectory - var directoryIndex = self.offsetToStartOfCentralDirectory - var index = 0 - return AnyIterator { - guard index < totalNumberOfEntriesInCD else { return nil } - guard let centralDirStruct: CentralDirectoryStructure = Data.readStruct(from: self.archiveFile, - at: directoryIndex) else { - return nil - } - let offset = UInt64(centralDirStruct.effectiveRelativeOffsetOfLocalHeader) - guard let localFileHeader: LocalFileHeader = Data.readStruct(from: self.archiveFile, - at: offset) else { return nil } - var dataDescriptor: DataDescriptor? - var zip64DataDescriptor: ZIP64DataDescriptor? - if centralDirStruct.usesDataDescriptor { - let additionalSize = UInt64(localFileHeader.fileNameLength) + UInt64(localFileHeader.extraFieldLength) - let isCompressed = centralDirStruct.compressionMethod != CompressionMethod.none.rawValue - let dataSize = isCompressed - ? centralDirStruct.effectiveCompressedSize - : centralDirStruct.effectiveUncompressedSize - let descriptorPosition = offset + UInt64(LocalFileHeader.size) + additionalSize + dataSize - if centralDirStruct.isZIP64 { - zip64DataDescriptor = Data.readStruct(from: self.archiveFile, at: descriptorPosition) - } else { - dataDescriptor = Data.readStruct(from: self.archiveFile, at: descriptorPosition) - } - } - defer { - directoryIndex += UInt64(CentralDirectoryStructure.size) - directoryIndex += UInt64(centralDirStruct.fileNameLength) - directoryIndex += UInt64(centralDirStruct.extraFieldLength) - directoryIndex += UInt64(centralDirStruct.fileCommentLength) - index += 1 - } - return Entry(centralDirectoryStructure: centralDirStruct, localFileHeader: localFileHeader, - dataDescriptor: dataDescriptor, zip64DataDescriptor: zip64DataDescriptor) - } - } - - /// Retrieve the ZIP `Entry` with the given `path` from the receiver. - /// - /// - Note: The ZIP file format specification does not enforce unique paths for entries. - /// Therefore an archive can contain multiple entries with the same path. This method - /// always returns the first `Entry` with the given `path`. - /// - /// - Parameter path: A relative file path identifying the corresponding `Entry`. - /// - Returns: An `Entry` with the given `path`. Otherwise, `nil`. - public subscript(path: String) -> Entry? { - if let encoding = self.pathEncoding { - return self.first { $0.path(using: encoding) == path } - } - return self.first { $0.path == path } - } - - // MARK: - Helpers - - static func scanForEndOfCentralDirectoryRecord(in file: FILEPointer) - -> EndOfCentralDirectoryStructure? { - var eocdOffset: UInt64 = 0 - var index = minEndOfCentralDirectoryOffset - fseeko(file, 0, SEEK_END) - let archiveLength = Int64(ftello(file)) - guard archiveLength >= 0 else { return nil } - - while eocdOffset == 0 && index <= archiveLength { - fseeko(file, off_t(archiveLength - index), SEEK_SET) - var potentialDirectoryEndTag: UInt32 = UInt32() - fread(&potentialDirectoryEndTag, 1, MemoryLayout.size, file) - if potentialDirectoryEndTag == UInt32(endOfCentralDirectoryStructSignature) { - eocdOffset = UInt64(archiveLength - index) - guard let eocd: EndOfCentralDirectoryRecord = Data.readStruct(from: file, at: eocdOffset) else { - return nil - } - let zip64EOCD = scanForZIP64EndOfCentralDirectory(in: file, eocdOffset: eocdOffset) - return (eocd, zip64EOCD) - } - index += 1 - } - return nil - } - - private static func scanForZIP64EndOfCentralDirectory(in file: FILEPointer, eocdOffset: UInt64) - -> ZIP64EndOfCentralDirectory? { - guard UInt64(ZIP64EndOfCentralDirectoryLocator.size) < eocdOffset else { return nil } - - let locatorOffset = eocdOffset - UInt64(ZIP64EndOfCentralDirectoryLocator.size) - guard UInt64(ZIP64EndOfCentralDirectoryRecord.size) < locatorOffset else { return nil } - - let recordOffset = locatorOffset - UInt64(ZIP64EndOfCentralDirectoryRecord.size) - guard let locator: ZIP64EndOfCentralDirectoryLocator = Data.readStruct(from: file, at: locatorOffset), - let record: ZIP64EndOfCentralDirectoryRecord = Data.readStruct(from: file, at: recordOffset) else { - return nil - } - return ZIP64EndOfCentralDirectory(record: record, locator: locator) - } -} - -extension Archive.EndOfCentralDirectoryRecord { - - var data: Data { - var endOfCDSignature = self.endOfCentralDirectorySignature - var numberOfDisk = self.numberOfDisk - var numberOfDiskStart = self.numberOfDiskStart - var totalNumberOfEntriesOnDisk = self.totalNumberOfEntriesOnDisk - var totalNumberOfEntriesInCD = self.totalNumberOfEntriesInCentralDirectory - var sizeOfCentralDirectory = self.sizeOfCentralDirectory - var offsetToStartOfCD = self.offsetToStartOfCentralDirectory - var zipFileCommentLength = self.zipFileCommentLength - var data = Data() - withUnsafePointer(to: &endOfCDSignature, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &numberOfDisk, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &numberOfDiskStart, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &totalNumberOfEntriesOnDisk, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &totalNumberOfEntriesInCD, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &sizeOfCentralDirectory, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &offsetToStartOfCD, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &zipFileCommentLength, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - data.append(self.zipFileCommentData) - return data - } - - init?(data: Data, additionalDataProvider provider: (Int) throws -> Data) { - guard data.count == Archive.EndOfCentralDirectoryRecord.size else { return nil } - guard data.scanValue(start: 0) == endOfCentralDirectorySignature else { return nil } - self.numberOfDisk = data.scanValue(start: 4) - self.numberOfDiskStart = data.scanValue(start: 6) - self.totalNumberOfEntriesOnDisk = data.scanValue(start: 8) - self.totalNumberOfEntriesInCentralDirectory = data.scanValue(start: 10) - self.sizeOfCentralDirectory = data.scanValue(start: 12) - self.offsetToStartOfCentralDirectory = data.scanValue(start: 16) - self.zipFileCommentLength = data.scanValue(start: 20) - guard let commentData = try? provider(Int(self.zipFileCommentLength)) else { return nil } - guard commentData.count == Int(self.zipFileCommentLength) else { return nil } - self.zipFileCommentData = commentData - } - - init(record: Archive.EndOfCentralDirectoryRecord, - numberOfEntriesOnDisk: UInt16, - numberOfEntriesInCentralDirectory: UInt16, - updatedSizeOfCentralDirectory: UInt32, - startOfCentralDirectory: UInt32) { - self.numberOfDisk = record.numberOfDisk - self.numberOfDiskStart = record.numberOfDiskStart - self.totalNumberOfEntriesOnDisk = numberOfEntriesOnDisk - self.totalNumberOfEntriesInCentralDirectory = numberOfEntriesInCentralDirectory - self.sizeOfCentralDirectory = updatedSizeOfCentralDirectory - self.offsetToStartOfCentralDirectory = startOfCentralDirectory - self.zipFileCommentLength = record.zipFileCommentLength - self.zipFileCommentData = record.zipFileCommentData - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Compression.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Compression.swift deleted file mode 100644 index 900233c..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Compression.swift +++ /dev/null @@ -1,367 +0,0 @@ -// -// Data+Compression.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -#if canImport(zlib) -import zlib -#endif - -/// The compression method of an `Entry` in a ZIP `Archive`. -public enum CompressionMethod: UInt16 { - /// Indicates that an `Entry` has no compression applied to its contents. - case none = 0 - /// Indicates that contents of an `Entry` have been compressed with a zlib compatible Deflate algorithm. - case deflate = 8 -} - -/// An unsigned 32-Bit Integer representing a checksum. -public typealias CRC32 = UInt32 -/// A custom handler that consumes a `Data` object containing partial entry data. -/// - Parameters: -/// - data: A chunk of `Data` to consume. -/// - Throws: Can throw to indicate errors during data consumption. -public typealias Consumer = (_ data: Data) throws -> Void -/// A custom handler that receives a position and a size that can be used to provide data from an arbitrary source. -/// - Parameters: -/// - position: The current read position. -/// - size: The size of the chunk to provide. -/// - Returns: A chunk of `Data`. -/// - Throws: Can throw to indicate errors in the data source. -public typealias Provider = (_ position: Int64, _ size: Int) throws -> Data - -extension Data { - enum CompressionError: Error { - case invalidStream - case corruptedData - } - - /// Calculate the `CRC32` checksum of the receiver. - /// - /// - Parameter checksum: The starting seed. - /// - Returns: The checksum calculated from the bytes of the receiver and the starting seed. - public func crc32(checksum: CRC32) -> CRC32 { - #if canImport(zlib) - return withUnsafeBytes { bufferPointer in - let length = UInt32(count) - return CRC32(zlib.crc32(UInt(checksum), bufferPointer.bindMemory(to: UInt8.self).baseAddress, length)) - } - #else - return self.builtInCRC32(checksum: checksum) - #endif - } - - /// Compress the output of `provider` and pass it to `consumer`. - /// - Parameters: - /// - size: The uncompressed size of the data to be compressed. - /// - bufferSize: The maximum size of the compression buffer. - /// - provider: A closure that accepts a position and a chunk size. Returns a `Data` chunk. - /// - consumer: A closure that processes the result of the compress operation. - /// - Returns: The checksum of the processed content. - public static func compress(size: Int64, bufferSize: Int, provider: Provider, consumer: Consumer) throws -> CRC32 { - #if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) - return try self.process(operation: COMPRESSION_STREAM_ENCODE, size: size, bufferSize: bufferSize, - provider: provider, consumer: consumer) - #else - return try self.encode(size: size, bufferSize: bufferSize, provider: provider, consumer: consumer) - #endif - } - - /// Decompress the output of `provider` and pass it to `consumer`. - /// - Parameters: - /// - size: The compressed size of the data to be decompressed. - /// - bufferSize: The maximum size of the decompression buffer. - /// - skipCRC32: Optional flag to skip calculation of the CRC32 checksum to improve performance. - /// - provider: A closure that accepts a position and a chunk size. Returns a `Data` chunk. - /// - consumer: A closure that processes the result of the decompress operation. - /// - Returns: The checksum of the processed content. - public static func decompress(size: Int64, bufferSize: Int, skipCRC32: Bool, - provider: Provider, consumer: Consumer) throws -> CRC32 { - #if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) - return try self.process(operation: COMPRESSION_STREAM_DECODE, size: size, bufferSize: bufferSize, - skipCRC32: skipCRC32, provider: provider, consumer: consumer) - #else - return try self.decode(bufferSize: bufferSize, skipCRC32: skipCRC32, provider: provider, consumer: consumer) - #endif - } -} - -// MARK: - Apple Platforms - -#if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) -import Compression - -extension Data { - - static func process(operation: compression_stream_operation, size: Int64, bufferSize: Int, skipCRC32: Bool = false, - provider: Provider, consumer: Consumer) throws -> CRC32 { - var crc32 = CRC32(0) - let destPointer = UnsafeMutablePointer.allocate(capacity: bufferSize) - defer { destPointer.deallocate() } - let streamPointer = UnsafeMutablePointer.allocate(capacity: 1) - defer { streamPointer.deallocate() } - var stream = streamPointer.pointee - var status = compression_stream_init(&stream, operation, COMPRESSION_ZLIB) - guard status != COMPRESSION_STATUS_ERROR else { throw CompressionError.invalidStream } - defer { compression_stream_destroy(&stream) } - stream.src_size = 0 - stream.dst_ptr = destPointer - stream.dst_size = bufferSize - var position: Int64 = 0 - var sourceData: Data? - repeat { - let isExhausted = stream.src_size == 0 - if isExhausted { - do { - sourceData = try provider(position, Int(Swift.min((size - position), Int64(bufferSize)))) - position += Int64(stream.prepare(for: sourceData)) - } catch { throw error } - } - if let sourceData = sourceData { - sourceData.withUnsafeBytes { rawBufferPointer in - if let baseAddress = rawBufferPointer.baseAddress { - let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) - stream.src_ptr = pointer.advanced(by: sourceData.count - stream.src_size) - let flags = sourceData.count < bufferSize ? Int32(COMPRESSION_STREAM_FINALIZE.rawValue) : 0 - status = compression_stream_process(&stream, flags) - } - } - if operation == COMPRESSION_STREAM_ENCODE && - isExhausted && skipCRC32 == false { crc32 = sourceData.crc32(checksum: crc32) } - } - switch status { - case COMPRESSION_STATUS_OK, COMPRESSION_STATUS_END: - let outputData = Data(bytesNoCopy: destPointer, count: bufferSize - stream.dst_size, deallocator: .none) - try consumer(outputData) - if operation == COMPRESSION_STREAM_DECODE && !skipCRC32 { crc32 = outputData.crc32(checksum: crc32) } - stream.dst_ptr = destPointer - stream.dst_size = bufferSize - default: throw CompressionError.corruptedData - } - } while status == COMPRESSION_STATUS_OK - return crc32 - } -} - -private extension compression_stream { - - mutating func prepare(for sourceData: Data?) -> Int { - guard let sourceData = sourceData else { return 0 } - - self.src_size = sourceData.count - return sourceData.count - } -} - -// MARK: - Linux - -#else -import CZlib - -extension Data { - static func encode(size: Int64, bufferSize: Int, provider: Provider, consumer: Consumer) throws -> CRC32 { - var stream = z_stream() - let streamSize = Int32(MemoryLayout.size) - var result = deflateInit2_(&stream, Z_DEFAULT_COMPRESSION, - Z_DEFLATED, -MAX_WBITS, 9, Z_DEFAULT_STRATEGY, ZLIB_VERSION, streamSize) - defer { deflateEnd(&stream) } - guard result == Z_OK else { throw CompressionError.invalidStream } - var flush = Z_NO_FLUSH - var position: Int64 = 0 - var zipCRC32 = CRC32(0) - repeat { - let readSize = Int(Swift.min((size - position), Int64(bufferSize))) - var inputChunk = try provider(position, readSize) - zipCRC32 = inputChunk.crc32(checksum: zipCRC32) - stream.avail_in = UInt32(inputChunk.count) - try inputChunk.withUnsafeMutableBytes { (rawBufferPointer) in - if let baseAddress = rawBufferPointer.baseAddress { - let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) - stream.next_in = pointer - flush = position + Int64(bufferSize) >= size ? Z_FINISH : Z_NO_FLUSH - } else if rawBufferPointer.count > 0 { - throw CompressionError.corruptedData - } else { - stream.next_in = nil - flush = Z_FINISH - } - var outputChunk = Data(count: bufferSize) - repeat { - stream.avail_out = UInt32(bufferSize) - try outputChunk.withUnsafeMutableBytes { (rawBufferPointer) in - guard let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 else { - throw CompressionError.corruptedData - } - let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) - stream.next_out = pointer - result = deflate(&stream, flush) - } - guard result >= Z_OK else { throw CompressionError.corruptedData } - - outputChunk.count = bufferSize - Int(stream.avail_out) - try consumer(outputChunk) - } while stream.avail_out == 0 - } - position += Int64(readSize) - } while flush != Z_FINISH - return zipCRC32 - } - - static func decode(bufferSize: Int, skipCRC32: Bool, provider: Provider, consumer: Consumer) throws -> CRC32 { - var stream = z_stream() - let streamSize = Int32(MemoryLayout.size) - var result = inflateInit2_(&stream, -MAX_WBITS, ZLIB_VERSION, streamSize) - defer { inflateEnd(&stream) } - guard result == Z_OK else { throw CompressionError.invalidStream } - var unzipCRC32 = CRC32(0) - var position: Int64 = 0 - repeat { - stream.avail_in = UInt32(bufferSize) - var chunk = try provider(position, bufferSize) - position += Int64(chunk.count) - try chunk.withUnsafeMutableBytes { (rawBufferPointer) in - if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 { - let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) - stream.next_in = pointer - repeat { - var outputData = Data(count: bufferSize) - stream.avail_out = UInt32(bufferSize) - try outputData.withUnsafeMutableBytes { (rawBufferPointer) in - if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 { - let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) - stream.next_out = pointer - } else { - throw CompressionError.corruptedData - } - result = inflate(&stream, Z_NO_FLUSH) - guard result != Z_NEED_DICT && - result != Z_DATA_ERROR && - result != Z_MEM_ERROR else { - throw CompressionError.corruptedData - } - } - let remainingLength = UInt32(bufferSize) - stream.avail_out - outputData.count = Int(remainingLength) - try consumer(outputData) - if !skipCRC32 { unzipCRC32 = outputData.crc32(checksum: unzipCRC32) } - } while stream.avail_out == 0 - } - } - } while result != Z_STREAM_END - return unzipCRC32 - } -} - -#endif - -/// The lookup table used to calculate `CRC32` checksums when using the built-in -/// CRC32 implementation. -private let crcTable: [CRC32] = [ - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, - 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, - 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, - 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, - 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, - 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, - 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, - 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, - 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, - 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, - 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, - 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, - 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, - 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, - 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, - 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, - 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d] - -extension Data { - - /// Lookup table-based CRC32 implenetation that is used - /// if `zlib` isn't available. - /// - Parameter checksum: Running checksum or `0` for the initial run. - /// - Returns: The calculated checksum of the receiver. - func builtInCRC32(checksum: CRC32) -> CRC32 { - // The typecast is necessary on 32-bit platforms because of - // https://bugs.swift.org/browse/SR-1774 - let mask = 0xffffffff as CRC32 - var result = checksum ^ mask -#if swift(>=5.0) - crcTable.withUnsafeBufferPointer { crcTablePointer in - self.withUnsafeBytes { bufferPointer in - var bufferIndex = 0 - while bufferIndex < self.count { - let byte = bufferPointer[bufferIndex] - let index = Int((result ^ CRC32(byte)) & 0xff) - result = (result >> 8) ^ crcTablePointer[index] - bufferIndex += 1 - } - } - } -#else - self.withUnsafeBytes { (bytes) in - let bins = stride(from: 0, to: self.count, by: 256) - for bin in bins { - for binIndex in 0..<256 { - let byteIndex = bin + binIndex - guard byteIndex < self.count else { break } - - let byte = bytes[byteIndex] - let index = Int((result ^ CRC32(byte)) & 0xff) - result = (result >> 8) ^ crcTable[index] - } - } - } -#endif - return result ^ mask - } -} - -#if !swift(>=5.0) - -// Since Swift 5.0, `Data.withUnsafeBytes()` passes an `UnsafeRawBufferPointer` instead of an `UnsafePointer` -// into `body`. -// We provide a compatible method for targets that use Swift 4.x so that we can use the new version -// across all language versions. - -extension Data { - func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> T) rethrows -> T { - let count = self.count - return try withUnsafeBytes { (pointer: UnsafePointer) throws -> T in - try body(UnsafeRawBufferPointer(start: pointer, count: count)) - } - } - - #if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) - #else - mutating func withUnsafeMutableBytes(_ body: (UnsafeMutableRawBufferPointer) throws -> T) rethrows -> T { - let count = self.count - guard count > 0 else { - return try body(UnsafeMutableRawBufferPointer(start: nil, count: count)) - } - return try withUnsafeMutableBytes { (pointer: UnsafeMutablePointer) throws -> T in - try body(UnsafeMutableRawBufferPointer(start: pointer, count: count)) - } - } - #endif -} -#endif diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+CompressionDeprecated.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+CompressionDeprecated.swift deleted file mode 100644 index 05b33dc..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+CompressionDeprecated.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// Data+CompressionDeprecated.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -public extension Data { - - @available(*, deprecated, message: "Please use `Int64` for `size` and provider `position`.") - static func compress(size: Int, bufferSize: Int, - provider: (_ position: Int, _ size: Int) throws -> Data, - consumer: Consumer) throws -> CRC32 { - let newProvider: Provider = { try provider(Int($0), $1) } - return try self.compress(size: Int64(size), bufferSize: bufferSize, provider: newProvider, consumer: consumer) - } - - @available(*, deprecated, message: "Please use `Int64` for `size` and provider `position`.") - static func decompress(size: Int, bufferSize: Int, skipCRC32: Bool, - provider: (_ position: Int, _ size: Int) throws -> Data, - consumer: Consumer) throws -> CRC32 { - let newProvider: Provider = { try provider(Int($0), $1) } - return try self.decompress(size: Int64(size), bufferSize: bufferSize, skipCRC32: skipCRC32, - provider: newProvider, consumer: consumer) - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Serialization.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Serialization.swift deleted file mode 100644 index 4fe794f..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Serialization.swift +++ /dev/null @@ -1,132 +0,0 @@ -// -// Data+Serialization.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -#if os(Android) -public typealias FILEPointer = OpaquePointer -#else -public typealias FILEPointer = UnsafeMutablePointer -#endif - -protocol DataSerializable { - static var size: Int { get } - init?(data: Data, additionalDataProvider: (Int) throws -> Data) - var data: Data { get } -} - -extension Data { - public enum DataError: Error { - case unreadableFile - case unwritableFile - } - - func scanValue(start: Int) -> T { - return self.withUnsafeBytes { - $0.loadUnaligned(fromByteOffset: start, as: T.self) - } - } - - static func readStruct(from file: FILEPointer, at offset: UInt64) - -> T? where T: DataSerializable { - guard offset <= .max else { return nil } - fseeko(file, off_t(offset), SEEK_SET) - guard let data = try? self.readChunk(of: T.size, from: file) else { - return nil - } - let structure = T(data: data, additionalDataProvider: { (additionalDataSize) -> Data in - return try self.readChunk(of: additionalDataSize, from: file) - }) - return structure - } - - static func consumePart(of size: Int64, chunkSize: Int, skipCRC32: Bool = false, - provider: Provider, consumer: Consumer) throws -> CRC32 { - var checksum = CRC32(0) - guard size > 0 else { - try consumer(Data()) - return checksum - } - - let readInOneChunk = (size < chunkSize) - var chunkSize = readInOneChunk ? Int(size) : chunkSize - var bytesRead: Int64 = 0 - while bytesRead < size { - let remainingSize = size - bytesRead - chunkSize = remainingSize < chunkSize ? Int(remainingSize) : chunkSize - let data = try provider(bytesRead, chunkSize) - try consumer(data) - if !skipCRC32 { - checksum = data.crc32(checksum: checksum) - } - bytesRead += Int64(chunkSize) - } - return checksum - } - - static func readChunk(of size: Int, from file: FILEPointer) throws -> Data { - let alignment = MemoryLayout.alignment - #if swift(>=4.1) - let bytes = UnsafeMutableRawPointer.allocate(byteCount: size, alignment: alignment) - #else - let bytes = UnsafeMutableRawPointer.allocate(bytes: size, alignedTo: alignment) - #endif - let bytesRead = fread(bytes, 1, size, file) - let error = ferror(file) - if error > 0 { - bytes.deallocate() - throw DataError.unreadableFile - } - #if swift(>=4.1) - return Data(bytesNoCopy: bytes, count: bytesRead, deallocator: .custom({ buf, _ in buf.deallocate() })) - #else - let deallocator = Deallocator.custom({ buf, _ in buf.deallocate(bytes: size, alignedTo: 1) }) - return Data(bytesNoCopy: bytes, count: bytesRead, deallocator: deallocator) - #endif - } - - static func write(chunk: Data, to file: FILEPointer) throws -> Int { - var sizeWritten: Int = 0 - chunk.withUnsafeBytes { (rawBufferPointer) in - if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 { - let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) - sizeWritten = fwrite(pointer, 1, chunk.count, file) - } - } - let error = ferror(file) - if error > 0 { - throw DataError.unwritableFile - } - return sizeWritten - } - - static func writeLargeChunk(_ chunk: Data, size: UInt64, bufferSize: Int, - to file: FILEPointer) throws -> UInt64 { - var sizeWritten: UInt64 = 0 - chunk.withUnsafeBytes { (rawBufferPointer) in - if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 { - let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) - - while sizeWritten < size { - let remainingSize = size - sizeWritten - let chunkSize = Swift.min(Int(remainingSize), bufferSize) - let curPointer = pointer.advanced(by: Int(sizeWritten)) - fwrite(curPointer, 1, chunkSize, file) - sizeWritten += UInt64(chunkSize) - } - } - } - let error = ferror(file) - if error > 0 { - throw DataError.unwritableFile - } - return sizeWritten - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Date+ZIP.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Date+ZIP.swift deleted file mode 100644 index 429a06c..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Date+ZIP.swift +++ /dev/null @@ -1,94 +0,0 @@ -// -// Date+ZIP.swift -// ZIPFoundation -// -// Created by Thomas Zoechling on 20.12.22. -// - -import Foundation - -extension Date { - - var fileModificationDateTime: (UInt16, UInt16) { - return (self.fileModificationDate, self.fileModificationTime) - } - - var fileModificationDate: UInt16 { - var time = time_t(self.timeIntervalSince1970) - guard let unixTime = gmtime(&time) else { - return 0 - } - var year = unixTime.pointee.tm_year + 1900 // UNIX time structs count in "years since 1900". - // ZIP uses the MSDOS date format which has a valid range of 1980 - 2099. - year = year >= 1980 ? year : 1980 - year = year <= 2099 ? year : 2099 - let month = unixTime.pointee.tm_mon + 1 // UNIX time struct month entries are zero based. - let day = unixTime.pointee.tm_mday - return (UInt16)(day + ((month) * 32) + ((year - 1980) * 512)) - } - - var fileModificationTime: UInt16 { - var time = time_t(self.timeIntervalSince1970) - guard let unixTime = gmtime(&time) else { - return 0 - } - let hour = unixTime.pointee.tm_hour - let minute = unixTime.pointee.tm_min - let second = unixTime.pointee.tm_sec - return (UInt16)((second/2) + (minute * 32) + (hour * 2048)) - } - - init(dateTime: (UInt16, UInt16)) { - var msdosDateTime = Int(dateTime.0) - msdosDateTime <<= 16 - msdosDateTime |= Int(dateTime.1) - var unixTime = tm() - unixTime.tm_sec = Int32((msdosDateTime&31)*2) - unixTime.tm_min = Int32((msdosDateTime>>5)&63) - unixTime.tm_hour = Int32((Int(dateTime.1)>>11)&31) - unixTime.tm_mday = Int32((msdosDateTime>>16)&31) - unixTime.tm_mon = Int32((msdosDateTime>>21)&15) - unixTime.tm_mon -= 1 // UNIX time struct month entries are zero based. - unixTime.tm_year = Int32(1980+(msdosDateTime>>25)) - unixTime.tm_year -= 1900 // UNIX time structs count in "years since 1900". - let time = timegm(&unixTime) - self = Date(timeIntervalSince1970: TimeInterval(time)) - } - - init(timespec: timespec) { - let seconds = 1.0e-9 * Double(timespec.tv_nsec) - let timeIntervalSince1970 = TimeInterval(timespec.tv_sec) - let absoluteTimeIntervalSince1970 = Constants.absoluteTimeIntervalSince1970 - self.init(timeIntervalSinceReferenceDate: (timeIntervalSince1970 - absoluteTimeIntervalSince1970) + seconds) - } -} - -private extension Date { - - enum Constants { -#if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) - static let absoluteTimeIntervalSince1970 = kCFAbsoluteTimeIntervalSince1970 -#else - static let absoluteTimeIntervalSince1970: Double = 978307200.0 -#endif - } -} - -extension stat { - - var lastAccessDate: Date { -#if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) - return Date(timespec: st_atimespec) -#else - return Date(timespec: st_atim) -#endif - } -} - -extension timeval { - - init(timeIntervalSince1970: TimeInterval) { - let (integral, fractional) = modf(timeIntervalSince1970) - self.init(tv_sec: time_t(integral), tv_usec: suseconds_t(1.0e6 * fractional)) - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Entry+Serialization.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Entry+Serialization.swift deleted file mode 100644 index cd87eb2..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Entry+Serialization.swift +++ /dev/null @@ -1,171 +0,0 @@ -// -// Entry+Serialization.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -extension Entry.LocalFileHeader { - var data: Data { - var localFileHeaderSignature = self.localFileHeaderSignature - var versionNeededToExtract = self.versionNeededToExtract - var generalPurposeBitFlag = self.generalPurposeBitFlag - var compressionMethod = self.compressionMethod - var lastModFileTime = self.lastModFileTime - var lastModFileDate = self.lastModFileDate - var crc32 = self.crc32 - var compressedSize = self.compressedSize - var uncompressedSize = self.uncompressedSize - var fileNameLength = self.fileNameLength - var extraFieldLength = self.extraFieldLength - var data = Data() - withUnsafePointer(to: &localFileHeaderSignature, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &versionNeededToExtract, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &generalPurposeBitFlag, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &compressionMethod, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &lastModFileTime, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &lastModFileDate, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &crc32, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &compressedSize, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &uncompressedSize, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &fileNameLength, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &extraFieldLength, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - data.append(self.fileNameData) - data.append(self.extraFieldData) - return data - } - - init?(data: Data, additionalDataProvider provider: (Int) throws -> Data) { - guard data.count == Entry.LocalFileHeader.size else { return nil } - guard data.scanValue(start: 0) == localFileHeaderSignature else { return nil } - self.versionNeededToExtract = data.scanValue(start: 4) - self.generalPurposeBitFlag = data.scanValue(start: 6) - self.compressionMethod = data.scanValue(start: 8) - self.lastModFileTime = data.scanValue(start: 10) - self.lastModFileDate = data.scanValue(start: 12) - self.crc32 = data.scanValue(start: 14) - self.compressedSize = data.scanValue(start: 18) - self.uncompressedSize = data.scanValue(start: 22) - self.fileNameLength = data.scanValue(start: 26) - self.extraFieldLength = data.scanValue(start: 28) - let additionalDataLength = Int(self.fileNameLength) + Int(self.extraFieldLength) - guard let additionalData = try? provider(additionalDataLength) else { return nil } - guard additionalData.count == additionalDataLength else { return nil } - var subRangeStart = 0 - var subRangeEnd = Int(self.fileNameLength) - self.fileNameData = additionalData.subdata(in: subRangeStart.. Data) { - guard data.count == Entry.CentralDirectoryStructure.size else { return nil } - guard data.scanValue(start: 0) == centralDirectorySignature else { return nil } - self.versionMadeBy = data.scanValue(start: 4) - self.versionNeededToExtract = data.scanValue(start: 6) - self.generalPurposeBitFlag = data.scanValue(start: 8) - self.compressionMethod = data.scanValue(start: 10) - self.lastModFileTime = data.scanValue(start: 12) - self.lastModFileDate = data.scanValue(start: 14) - self.crc32 = data.scanValue(start: 16) - self.compressedSize = data.scanValue(start: 20) - self.uncompressedSize = data.scanValue(start: 24) - self.fileNameLength = data.scanValue(start: 28) - self.extraFieldLength = data.scanValue(start: 30) - self.fileCommentLength = data.scanValue(start: 32) - self.diskNumberStart = data.scanValue(start: 34) - self.internalFileAttributes = data.scanValue(start: 36) - self.externalFileAttributes = data.scanValue(start: 38) - self.relativeOffsetOfLocalHeader = data.scanValue(start: 42) - let additionalDataLength = Int(self.fileNameLength) + Int(self.extraFieldLength) + Int(self.fileCommentLength) - guard let additionalData = try? provider(additionalDataLength) else { return nil } - guard additionalData.count == additionalDataLength else { return nil } - var subRangeStart = 0 - var subRangeEnd = Int(self.fileNameLength) - self.fileNameData = additionalData.subdata(in: subRangeStart.. Data) { - guard data.count == Self.size else { return nil } - let signature: UInt32 = data.scanValue(start: 0) - // The DataDescriptor signature is not mandatory so we have to re-arrange the input data if it is missing. - var readOffset = 0 - if signature == self.dataDescriptorSignature { readOffset = 4 } - self.crc32 = data.scanValue(start: readOffset) - readOffset += MemoryLayout.size - self.compressedSize = data.scanValue(start: readOffset) - readOffset += Self.memoryLengthOfSize - self.uncompressedSize = data.scanValue(start: readOffset) - // Our add(_ entry:) methods always maintain compressed & uncompressed - // sizes and so we don't need a data descriptor for newly added entries. - // Data descriptors of already existing entries are manually preserved - // when copying those entries to the tempArchive during remove(_ entry:). - self.data = Data() - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Entry+ZIP64.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Entry+ZIP64.swift deleted file mode 100644 index a65afcb..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Entry+ZIP64.swift +++ /dev/null @@ -1,162 +0,0 @@ -// -// Entry+ZIP64.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -protocol ExtensibleDataField { - var headerID: UInt16 { get } - var dataSize: UInt16 { get } -} - -extension Entry { - - enum EntryError: Error { - case missingPermissionsAttributeError - case missingModificationDateAttributeError - } - - struct ZIP64ExtendedInformation: ExtensibleDataField { - let headerID: UInt16 = ExtraFieldHeaderID.zip64ExtendedInformation.rawValue - let dataSize: UInt16 - static let headerSize: UInt16 = 4 - let uncompressedSize: UInt64 - let compressedSize: UInt64 - let relativeOffsetOfLocalHeader: UInt64 - let diskNumberStart: UInt32 - } - - var zip64ExtendedInformation: ZIP64ExtendedInformation? { - self.centralDirectoryStructure.zip64ExtendedInformation - } -} - -typealias Field = Entry.ZIP64ExtendedInformation.Field - -extension Entry.LocalFileHeader { - var validFields: [Field] { - var fields: [Field] = [] - if self.uncompressedSize == .max { fields.append(.uncompressedSize) } - if self.compressedSize == .max { fields.append(.compressedSize) } - return fields - } -} - -extension Entry.CentralDirectoryStructure { - var validFields: [Field] { - var fields: [Field] = [] - if self.uncompressedSize == .max { fields.append(.uncompressedSize) } - if self.compressedSize == .max { fields.append(.compressedSize) } - if self.relativeOffsetOfLocalHeader == .max { fields.append(.relativeOffsetOfLocalHeader) } - if self.diskNumberStart == .max { fields.append(.diskNumberStart) } - return fields - } - var zip64ExtendedInformation: Entry.ZIP64ExtendedInformation? { - self.extraFields?.compactMap { $0 as? Entry.ZIP64ExtendedInformation }.first - } -} - -extension Entry.ZIP64ExtendedInformation { - - enum Field { - case uncompressedSize - case compressedSize - case relativeOffsetOfLocalHeader - case diskNumberStart - - var size: Int { - switch self { - case .uncompressedSize, .compressedSize, .relativeOffsetOfLocalHeader: - return 8 - case .diskNumberStart: - return 4 - } - } - } - - var data: Data { - var headerID = self.headerID - var dataSize = self.dataSize - var uncompressedSize = self.uncompressedSize - var compressedSize = self.compressedSize - var relativeOffsetOfLFH = self.relativeOffsetOfLocalHeader - var diskNumberStart = self.diskNumberStart - var data = Data() - withUnsafePointer(to: &headerID, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &dataSize, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - if uncompressedSize != 0 || compressedSize != 0 { - withUnsafePointer(to: &uncompressedSize, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - withUnsafePointer(to: &compressedSize, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - } - if relativeOffsetOfLocalHeader != 0 { - withUnsafePointer(to: &relativeOffsetOfLFH, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - } - if diskNumberStart != 0 { - withUnsafePointer(to: &diskNumberStart, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) - } - return data - } - - init?(data: Data, fields: [Field]) { - let headerLength = 4 - guard fields.reduce(0, { $0 + $1.size }) + headerLength == data.count else { return nil } - - var readOffset = headerLength - func value(of field: Field) -> T where T: BinaryInteger { - if fields.contains(field), readOffset + field.size <= data.count { - defer { readOffset += MemoryLayout.size } - - return data.scanValue(start: readOffset) - } else { - return 0 - } - } - - self.dataSize = data.scanValue(start: 2) - self.uncompressedSize = value(of: .uncompressedSize) - self.compressedSize = value(of: .compressedSize) - self.relativeOffsetOfLocalHeader = value(of: .relativeOffsetOfLocalHeader) - self.diskNumberStart = value(of: .diskNumberStart) - } - - init?(zip64ExtendedInformation: Entry.ZIP64ExtendedInformation?, offset: UInt64) { - // Only used when removing entry, if no ZIP64 extended information exists, - // then this information will not be newly added either - guard let existingInfo = zip64ExtendedInformation else { return nil } - relativeOffsetOfLocalHeader = offset >= maxOffsetOfLocalFileHeader ? offset : 0 - uncompressedSize = existingInfo.uncompressedSize - compressedSize = existingInfo.compressedSize - diskNumberStart = existingInfo.diskNumberStart - let tempDataSize = [relativeOffsetOfLocalHeader, uncompressedSize, compressedSize] - .filter { $0 != 0 } - .reduce(UInt16(0), { $0 + UInt16(MemoryLayout.size(ofValue: $1))}) - dataSize = tempDataSize + (diskNumberStart > 0 ? UInt16(MemoryLayout.size(ofValue: diskNumberStart)) : 0) - if dataSize == 0 { return nil } - } - - static func scanForZIP64Field(in data: Data, fields: [Field]) -> Entry.ZIP64ExtendedInformation? { - guard data.isEmpty == false else { return nil } - var offset = 0 - var headerID: UInt16 - var dataSize: UInt16 - let extraFieldLength = data.count - let headerSize = Int(Entry.ZIP64ExtendedInformation.headerSize) - while offset < extraFieldLength - headerSize { - headerID = data.scanValue(start: offset) - dataSize = data.scanValue(start: offset + 2) - let nextOffset = offset + headerSize + Int(dataSize) - guard nextOffset <= extraFieldLength else { return nil } - if headerID == ExtraFieldHeaderID.zip64ExtendedInformation.rawValue { - return Entry.ZIP64ExtendedInformation(data: data.subdata(in: offset..: DataSerializable { - let data: Data - let dataDescriptorSignature = UInt32(dataDescriptorStructSignature) - let crc32: UInt32 - // For normal archives, the compressed and uncompressed sizes are 4 bytes each. - // For ZIP64 format archives, the compressed and uncompressed sizes are 8 bytes each. - let compressedSize: T - let uncompressedSize: T - static var memoryLengthOfSize: Int { MemoryLayout.size } - static var size: Int { memoryLengthOfSize * 2 + 8 } - } - - typealias DefaultDataDescriptor = DataDescriptor - typealias ZIP64DataDescriptor = DataDescriptor - - struct CentralDirectoryStructure: DataSerializable { - let centralDirectorySignature = UInt32(centralDirectoryStructSignature) - let versionMadeBy: UInt16 - let versionNeededToExtract: UInt16 - let generalPurposeBitFlag: UInt16 - let compressionMethod: UInt16 - let lastModFileTime: UInt16 - let lastModFileDate: UInt16 - let crc32: UInt32 - let compressedSize: UInt32 - let uncompressedSize: UInt32 - let fileNameLength: UInt16 - let extraFieldLength: UInt16 - let fileCommentLength: UInt16 - let diskNumberStart: UInt16 - let internalFileAttributes: UInt16 - let externalFileAttributes: UInt32 - let relativeOffsetOfLocalHeader: UInt32 - static let size = 46 - let fileNameData: Data - let extraFieldData: Data - let fileCommentData: Data - - var extraFields: [ExtensibleDataField]? - var usesDataDescriptor: Bool { return (self.generalPurposeBitFlag & (1 << 3 )) != 0 } - var usesUTF8PathEncoding: Bool { return (self.generalPurposeBitFlag & (1 << 11 )) != 0 } - var isEncrypted: Bool { return (self.generalPurposeBitFlag & (1 << 0)) != 0 } - var isZIP64: Bool { - // If ZIP64 extended information is existing, try to treat cd as ZIP64 format - // even if the version needed to extract is lower than 4.5 - return UInt8(truncatingIfNeeded: self.versionNeededToExtract) >= 45 || zip64ExtendedInformation != nil - } - } - /// Returns the `path` of the receiver within a ZIP `Archive` using a given encoding. - /// - /// - Parameters: - /// - encoding: `String.Encoding` - public func path(using encoding: String.Encoding) -> String { - return String(pathData: self.centralDirectoryStructure.fileNameData, encoding: encoding) - } - /// The `path` of the receiver within a ZIP `Archive`. - public var path: String { - let encoding = self.centralDirectoryStructure.usesUTF8PathEncoding ? String.Encoding.utf8 : .codepage437 - return self.path(using: encoding) - } - /// The file attributes of the receiver as key/value pairs. - /// - /// Contains the modification date and file permissions. - public var fileAttributes: [FileAttributeKey: Any] { - return FileManager.attributes(from: self) - } - /// The `CRC32` checksum of the receiver. - /// - /// - Note: Always returns `0` for entries of type `EntryType.directory`. - public var checksum: CRC32 { - if self.centralDirectoryStructure.usesDataDescriptor { - return self.zip64DataDescriptor?.crc32 ?? self.dataDescriptor?.crc32 ?? 0 - } - return self.centralDirectoryStructure.crc32 - } - /// The `EntryType` of the receiver. - public var type: EntryType { - // OS Type is stored in the upper byte of versionMadeBy - let osTypeRaw = self.centralDirectoryStructure.versionMadeBy >> 8 - let osType = OSType(rawValue: UInt(osTypeRaw)) ?? .unused - var isDirectory = self.path.hasSuffix("/") - switch osType { - case .unix, .osx: - // Use truncatingIfNeeded for safer conversion across platforms - let modeValue = UInt16(truncatingIfNeeded: self.centralDirectoryStructure.externalFileAttributes >> 16) - let mode = mode_t(modeValue) & S_IFMT - switch mode { - case S_IFREG: - return .file - case S_IFDIR: - return .directory - case S_IFLNK: - return .symlink - default: - return isDirectory ? .directory : .file - } - case .msdos: - isDirectory = isDirectory || ((centralDirectoryStructure.externalFileAttributes >> 4) == 0x01) - fallthrough // For all other OSes we can only guess based on the directory suffix char - default: return isDirectory ? .directory : .file - } - } - /// Indicates whether or not the receiver is compressed. - public var isCompressed: Bool { - self.localFileHeader.compressionMethod != CompressionMethod.none.rawValue - } - /// The size of the receiver's compressed data. - public var compressedSize: UInt64 { - if centralDirectoryStructure.isZIP64 { - return zip64DataDescriptor?.compressedSize ?? centralDirectoryStructure.effectiveCompressedSize - } - return UInt64(dataDescriptor?.compressedSize ?? centralDirectoryStructure.compressedSize) - } - /// The size of the receiver's uncompressed data. - public var uncompressedSize: UInt64 { - if centralDirectoryStructure.isZIP64 { - return zip64DataDescriptor?.uncompressedSize ?? centralDirectoryStructure.effectiveUncompressedSize - } - return UInt64(dataDescriptor?.uncompressedSize ?? centralDirectoryStructure.uncompressedSize) - } - /// The combined size of the local header, the data and the optional data descriptor. - var localSize: UInt64 { - let localFileHeader = self.localFileHeader - var extraDataLength = Int(localFileHeader.fileNameLength) - extraDataLength += Int(localFileHeader.extraFieldLength) - var size = UInt64(LocalFileHeader.size + extraDataLength) - size += self.isCompressed ? self.compressedSize : self.uncompressedSize - if centralDirectoryStructure.isZIP64 { - size += self.zip64DataDescriptor != nil ? UInt64(ZIP64DataDescriptor.size) : 0 - } else { - size += self.dataDescriptor != nil ? UInt64(DefaultDataDescriptor.size) : 0 - } - return size - } - var dataOffset: UInt64 { - var dataOffset = self.centralDirectoryStructure.effectiveRelativeOffsetOfLocalHeader - dataOffset += UInt64(LocalFileHeader.size) - dataOffset += UInt64(self.localFileHeader.fileNameLength) - dataOffset += UInt64(self.localFileHeader.extraFieldLength) - return dataOffset - } - let centralDirectoryStructure: CentralDirectoryStructure - let localFileHeader: LocalFileHeader - let dataDescriptor: DefaultDataDescriptor? - let zip64DataDescriptor: ZIP64DataDescriptor? - - public static func == (lhs: Entry, rhs: Entry) -> Bool { - return lhs.path == rhs.path - && lhs.localFileHeader.crc32 == rhs.localFileHeader.crc32 - && lhs.centralDirectoryStructure.effectiveRelativeOffsetOfLocalHeader - == rhs.centralDirectoryStructure.effectiveRelativeOffsetOfLocalHeader - } - - init?(centralDirectoryStructure: CentralDirectoryStructure, - localFileHeader: LocalFileHeader, - dataDescriptor: DefaultDataDescriptor? = nil, - zip64DataDescriptor: ZIP64DataDescriptor? = nil) { - // We currently don't support encrypted archives - guard !centralDirectoryStructure.isEncrypted else { return nil } - self.centralDirectoryStructure = centralDirectoryStructure - self.localFileHeader = localFileHeader - self.dataDescriptor = dataDescriptor - self.zip64DataDescriptor = zip64DataDescriptor - } -} - -extension Entry.CentralDirectoryStructure { - - init(localFileHeader: Entry.LocalFileHeader, fileAttributes: UInt32, relativeOffset: UInt32, - extraField: (length: UInt16, data: Data)) { - self.versionMadeBy = UInt16(789) - self.versionNeededToExtract = localFileHeader.versionNeededToExtract - self.generalPurposeBitFlag = localFileHeader.generalPurposeBitFlag - self.compressionMethod = localFileHeader.compressionMethod - self.lastModFileTime = localFileHeader.lastModFileTime - self.lastModFileDate = localFileHeader.lastModFileDate - self.crc32 = localFileHeader.crc32 - self.compressedSize = localFileHeader.compressedSize - self.uncompressedSize = localFileHeader.uncompressedSize - self.fileNameLength = localFileHeader.fileNameLength - self.extraFieldLength = extraField.length - self.fileCommentLength = UInt16(0) - self.diskNumberStart = UInt16(0) - self.internalFileAttributes = UInt16(0) - self.externalFileAttributes = fileAttributes - self.relativeOffsetOfLocalHeader = relativeOffset - self.fileNameData = localFileHeader.fileNameData - self.extraFieldData = extraField.data - self.fileCommentData = Data() - if let zip64ExtendedInformation = Entry.ZIP64ExtendedInformation.scanForZIP64Field(in: self.extraFieldData, - fields: self.validFields) { - self.extraFields = [zip64ExtendedInformation] - } - } - - init(centralDirectoryStructure: Entry.CentralDirectoryStructure, - zip64ExtendedInformation: Entry.ZIP64ExtendedInformation?, relativeOffset: UInt32) { - if let existingInfo = zip64ExtendedInformation { - self.extraFieldData = existingInfo.data - self.versionNeededToExtract = max(centralDirectoryStructure.versionNeededToExtract, - Archive.Version.v45.rawValue) - } else { - self.extraFieldData = centralDirectoryStructure.extraFieldData - let existingVersion = centralDirectoryStructure.versionNeededToExtract - self.versionNeededToExtract = existingVersion < Archive.Version.v45.rawValue - ? centralDirectoryStructure.versionNeededToExtract - : Archive.Version.v20.rawValue - } - self.extraFieldLength = UInt16(extraFieldData.count) - self.relativeOffsetOfLocalHeader = relativeOffset - self.versionMadeBy = centralDirectoryStructure.versionMadeBy - self.generalPurposeBitFlag = centralDirectoryStructure.generalPurposeBitFlag - self.compressionMethod = centralDirectoryStructure.compressionMethod - self.lastModFileTime = centralDirectoryStructure.lastModFileTime - self.lastModFileDate = centralDirectoryStructure.lastModFileDate - self.crc32 = centralDirectoryStructure.crc32 - self.compressedSize = centralDirectoryStructure.compressedSize - self.uncompressedSize = centralDirectoryStructure.uncompressedSize - self.fileNameLength = centralDirectoryStructure.fileNameLength - self.fileCommentLength = centralDirectoryStructure.fileCommentLength - self.diskNumberStart = centralDirectoryStructure.diskNumberStart - self.internalFileAttributes = centralDirectoryStructure.internalFileAttributes - self.externalFileAttributes = centralDirectoryStructure.externalFileAttributes - self.fileNameData = centralDirectoryStructure.fileNameData - self.fileCommentData = centralDirectoryStructure.fileCommentData - if let zip64ExtendedInformation = Entry.ZIP64ExtendedInformation.scanForZIP64Field(in: self.extraFieldData, - fields: self.validFields) { - self.extraFields = [zip64ExtendedInformation] - } - } -} - -extension Entry.CentralDirectoryStructure { - - var effectiveCompressedSize: UInt64 { - if self.isZIP64, let compressedSize = self.zip64ExtendedInformation?.compressedSize, compressedSize > 0 { - return compressedSize - } - return UInt64(compressedSize) - } - var effectiveUncompressedSize: UInt64 { - if self.isZIP64, let uncompressedSize = self.zip64ExtendedInformation?.uncompressedSize, uncompressedSize > 0 { - return uncompressedSize - } - return UInt64(uncompressedSize) - } - var effectiveRelativeOffsetOfLocalHeader: UInt64 { - if self.isZIP64, let offset = self.zip64ExtendedInformation?.relativeOffsetOfLocalHeader, offset > 0 { - return offset - } - return UInt64(relativeOffsetOfLocalHeader) - } -} - -extension String.Encoding { - - static let codepage437: Self = { - let dosLatinUS = 0x400 - let dosLatinUSEncoding = CFStringEncoding(dosLatinUS) - let dosLatinUSStringEncoding = CFStringConvertEncodingToNSStringEncoding(dosLatinUSEncoding) - return String.Encoding(rawValue: dosLatinUSStringEncoding) - }() -} - -extension String { - - init(pathData: Data, encoding: String.Encoding) { - #if os(Linux) - if encoding == .codepage437 { - self.init() - for byte in pathData { - self.unicodeScalars.append(Self.cp437Lookup[Int(byte)]) - } - return - } - #endif - self = String(data: pathData, encoding: encoding) ?? "" - } - - #if os(Linux) - // Source: https://en.wikipedia.org/wiki/Code_page_437#Character_set - private static let cp437Lookup: [UnicodeScalar] = [ - 0x0000, 0x263A, 0x263B, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022, - 0x25D8, 0x25CB, 0x25D9, 0x2642, 0x2640, 0x266A, 0x266B, 0x263C, - 0x25BA, 0x25C4, 0x2195, 0x203C, 0x00B6, 0x00A7, 0x25AC, 0x21A8, - 0x2191, 0x2193, 0x2192, 0x2190, 0x221F, 0x2194, 0x25B2, 0x25BC, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x2302, - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, - 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, - 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, - 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, - 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, - 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, - 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, - 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, - 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, - 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, - 0x2261, 0x00B1, 0x2265, 0x2264, 0x2329, 0x2321, 0x00F7, 0x2248, - 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 - ].map { UnicodeScalar($0)! } - #endif - -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift deleted file mode 100644 index 6cd5571..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift +++ /dev/null @@ -1,373 +0,0 @@ -// -// FileManager+ZIP.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -extension FileManager { - - typealias CentralDirectoryStructure = Entry.CentralDirectoryStructure - - /// Zips the file or directory contents at the specified source URL to the destination URL. - /// - /// If the item at the source URL is a directory, the directory itself will be - /// represented within the ZIP `Archive`. Calling this method with a directory URL - /// `file:///path/directory/` will create an archive with a `directory/` entry at the root level. - /// You can override this behavior by passing `false` for `shouldKeepParent`. In that case, the contents - /// of the source directory will be placed at the root of the archive. - /// - Parameters: - /// - sourceURL: The file URL pointing to an existing file or directory. - /// - destinationURL: The file URL that identifies the destination of the zip operation. - /// - shouldKeepParent: Indicates that the directory name of a source item should be used as root element - /// within the archive. Default is `true`. - /// - compressionMethod: Indicates the `CompressionMethod` that should be applied. - /// By default, `zipItem` will create uncompressed archives. - /// - progress: A progress object that can be used to track or cancel the zip operation. - /// - Throws: Throws an error if the source item does not exist or the destination URL is not writable. - public func zipItem(at sourceURL: URL, to destinationURL: URL, - shouldKeepParent: Bool = true, compressionMethod: CompressionMethod = .none, - progress: Progress? = nil) throws { - let fileManager = FileManager() - guard fileManager.itemExists(at: sourceURL) else { - throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: sourceURL.path]) - } - guard !fileManager.itemExists(at: destinationURL) else { - throw CocoaError(.fileWriteFileExists, userInfo: [NSFilePathErrorKey: destinationURL.path]) - } - let archive = try Archive(url: destinationURL, accessMode: .create) - let isDirectory = try FileManager.typeForItem(at: sourceURL) == .directory - if isDirectory { - var subPaths = try self.subpathsOfDirectory(atPath: sourceURL.path) - // Enforce an entry for the root directory to preserve its file attributes - if shouldKeepParent { subPaths.append("") } - var totalUnitCount = Int64(0) - if let progress = progress { - totalUnitCount = subPaths.reduce(Int64(0), { - let itemURL = sourceURL.appendingPathComponent($1) - let itemSize = archive.totalUnitCountForAddingItem(at: itemURL) - return $0 + itemSize - }) - progress.totalUnitCount = totalUnitCount - } - - // If the caller wants to keep the parent directory, we use the lastPathComponent of the source URL - // as common base for all entries (similar to macOS' Archive Utility.app) - let directoryPrefix = sourceURL.lastPathComponent - for entryPath in subPaths { - let finalEntryPath = shouldKeepParent ? directoryPrefix + "/" + entryPath : entryPath - let finalBaseURL = shouldKeepParent ? sourceURL.deletingLastPathComponent() : sourceURL - if let progress = progress { - let itemURL = sourceURL.appendingPathComponent(entryPath) - let entryProgress = archive.makeProgressForAddingItem(at: itemURL) - progress.addChild(entryProgress, withPendingUnitCount: entryProgress.totalUnitCount) - try archive.addEntry(with: finalEntryPath, relativeTo: finalBaseURL, - compressionMethod: compressionMethod, progress: entryProgress) - } else { - try archive.addEntry(with: finalEntryPath, relativeTo: finalBaseURL, - compressionMethod: compressionMethod) - } - } - } else { - progress?.totalUnitCount = archive.totalUnitCountForAddingItem(at: sourceURL) - let baseURL = sourceURL.deletingLastPathComponent() - try archive.addEntry(with: sourceURL.lastPathComponent, relativeTo: baseURL, - compressionMethod: compressionMethod, progress: progress) - } - } - - /// Unzips the contents at the specified source URL to the destination URL. - /// - /// - Parameters: - /// - sourceURL: The file URL pointing to an existing ZIP file. - /// - destinationURL: The file URL that identifies the destination directory of the unzip operation. - /// - skipCRC32: Optional flag to skip calculation of the CRC32 checksum to improve performance. - /// - allowUncontainedSymlinks: Optional flag to allow symlinks that point to paths outside the destination. - /// - progress: A progress object that can be used to track or cancel the unzip operation. - /// - pathEncoding: Encoding for entry paths. Overrides the encoding specified in the archive. - /// - Throws: Throws an error if the source item does not exist or the destination URL is not writable. - public func unzipItem(at sourceURL: URL, to destinationURL: URL, - skipCRC32: Bool = false, allowUncontainedSymlinks: Bool = false, - progress: Progress? = nil, pathEncoding: String.Encoding? = nil) throws { - let fileManager = FileManager() - guard fileManager.itemExists(at: sourceURL) else { - throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: sourceURL.path]) - } - let archive = try Archive(url: sourceURL, accessMode: .read, pathEncoding: pathEncoding) - var totalUnitCount = Int64(0) - if let progress = progress { - totalUnitCount = archive.reduce(0, { $0 + archive.totalUnitCountForReading($1) }) - progress.totalUnitCount = totalUnitCount - } - - for entry in archive { - let path = pathEncoding == nil ? entry.path : entry.path(using: pathEncoding!) - let entryURL = destinationURL.appendingPathComponent(path) - guard entryURL.isContained(in: destinationURL) else { - throw CocoaError(.fileReadInvalidFileName, - userInfo: [NSFilePathErrorKey: entryURL.path]) - } - let crc32: CRC32 - if let progress = progress { - let entryProgress = archive.makeProgressForReading(entry) - progress.addChild(entryProgress, withPendingUnitCount: entryProgress.totalUnitCount) - crc32 = try archive.extract(entry, to: entryURL, - skipCRC32: skipCRC32, allowUncontainedSymlinks: allowUncontainedSymlinks, - progress: entryProgress) - } else { - crc32 = try archive.extract(entry, to: entryURL, - skipCRC32: skipCRC32, allowUncontainedSymlinks: allowUncontainedSymlinks) - } - - func verifyChecksumIfNecessary() throws { - if skipCRC32 == false, crc32 != entry.checksum { - throw Archive.ArchiveError.invalidCRC32 - } - } - try verifyChecksumIfNecessary() - } - } - - // MARK: - Helpers - - func itemExists(at url: URL) -> Bool { - // Use `URL.checkResourceIsReachable()` instead of `FileManager.fileExists()` here - // because we don't want implicit symlink resolution. - // As per documentation, `FileManager.fileExists()` traverses symlinks and therefore a broken symlink - // would throw a `.fileReadNoSuchFile` false positive error. - // For ZIP files it may be intended to archive "broken" symlinks because they might be - // resolvable again when extracting the archive to a different destination. - return (try? url.checkResourceIsReachable()) == true - } - - func createParentDirectoryStructure(for url: URL) throws { - let parentDirectoryURL = url.deletingLastPathComponent() - try self.createDirectory(at: parentDirectoryURL, withIntermediateDirectories: true, attributes: nil) - } - - func transferAttributes(from entry: Entry, toItemAtURL url: URL) throws { - let attributes = FileManager.attributes(from: entry) - switch entry.type { - case .directory, .file: - try self.setAttributes(attributes, ofItemAtURL: url) - case .symlink: - try self.setAttributes(attributes, ofItemAtURL: url, traverseLink: false) - } - } - - func setAttributes(_ attributes: [FileAttributeKey: Any], ofItemAtURL url: URL, traverseLink: Bool = true) throws { - // `FileManager.setAttributes` traverses symlinks and applies the attributes to - // the symlink destination. Since we want to be able to create symlinks where - // the destination isn't available (yet), we want to directly apply entry attributes - // to the symlink (vs. the destination file). - guard traverseLink == false else { - try self.setAttributes(attributes, ofItemAtPath: url.path) - return - } - -#if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) - guard let posixPermissions = attributes[.posixPermissions] as? NSNumber else { - throw Entry.EntryError.missingPermissionsAttributeError - } - - try self.setSymlinkPermissions(posixPermissions, ofItemAtURL: url) - - guard let modificationDate = attributes[.modificationDate] as? Date else { - throw Entry.EntryError.missingModificationDateAttributeError - } - - try self.setSymlinkModificationDate(modificationDate, ofItemAtURL: url) -#else - // Since non-Darwin POSIX platforms ignore permissions on symlinks and swift-corelibs-foundation - // currently doesn't support setting the modification date, this codepath is currently a no-op - // on these platforms. - return -#endif - } - - func setSymlinkPermissions(_ posixPermissions: NSNumber, ofItemAtURL url: URL) throws { - let fileSystemRepresentation = self.fileSystemRepresentation(withPath: url.path) - let modeT = posixPermissions.uint16Value - guard lchmod(fileSystemRepresentation, mode_t(modeT)) == 0 else { - throw POSIXError(errno, path: url.path) - } - } - - func setSymlinkModificationDate(_ modificationDate: Date, ofItemAtURL url: URL) throws { - let fileSystemRepresentation = self.fileSystemRepresentation(withPath: url.path) - var fileStat = stat() - guard lstat(fileSystemRepresentation, &fileStat) == 0 else { - throw POSIXError(errno, path: url.path) - } - - let accessDate = fileStat.lastAccessDate - let array = [ - timeval(timeIntervalSince1970: accessDate.timeIntervalSince1970), - timeval(timeIntervalSince1970: modificationDate.timeIntervalSince1970) - ] - try array.withUnsafeBufferPointer { - guard lutimes(fileSystemRepresentation, $0.baseAddress) == 0 else { - throw POSIXError(errno, path: url.path) - } - } - } - - class func attributes(from entry: Entry) -> [FileAttributeKey: Any] { - let centralDirectoryStructure = entry.centralDirectoryStructure - let entryType = entry.type - let fileTime = centralDirectoryStructure.lastModFileTime - let fileDate = centralDirectoryStructure.lastModFileDate - let defaultPermissions = entryType == .directory ? defaultDirectoryPermissions : defaultFilePermissions - var attributes = [.posixPermissions: defaultPermissions] as [FileAttributeKey: Any] - attributes[.modificationDate] = Date(dateTime: (fileDate, fileTime)) - let versionMadeBy = centralDirectoryStructure.versionMadeBy - guard let osType = Entry.OSType(rawValue: UInt(versionMadeBy >> 8)) else { return attributes } - - let externalFileAttributes = centralDirectoryStructure.externalFileAttributes - let permissions = self.permissions(for: externalFileAttributes, osType: osType, entryType: entryType) - attributes[.posixPermissions] = NSNumber(value: permissions) - return attributes - } - - class func permissions(for externalFileAttributes: UInt32, osType: Entry.OSType, - entryType: Entry.EntryType) -> UInt16 { - switch osType { - case .unix, .osx: - let permissions = mode_t(externalFileAttributes >> 16) & (~S_IFMT) - let defaultPermissions = entryType == .directory ? defaultDirectoryPermissions : defaultFilePermissions - return permissions == 0 ? defaultPermissions : UInt16(permissions) - default: - return entryType == .directory ? defaultDirectoryPermissions : defaultFilePermissions - } - } - - class func externalFileAttributesForEntry(of type: Entry.EntryType, permissions: UInt16) -> UInt32 { - var typeInt: UInt16 - switch type { - case .file: - typeInt = UInt16(S_IFREG) - case .directory: - typeInt = UInt16(S_IFDIR) - case .symlink: - typeInt = UInt16(S_IFLNK) - } - var externalFileAttributes = UInt32(typeInt|UInt16(permissions)) - externalFileAttributes = (externalFileAttributes << 16) - return externalFileAttributes - } - - class func permissionsForItem(at URL: URL) throws -> UInt16 { - let fileManager = FileManager() - let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: URL.path) - var fileStat = stat() - lstat(entryFileSystemRepresentation, &fileStat) - let permissions = fileStat.st_mode - return UInt16(permissions) - } - - class func fileModificationDateTimeForItem(at url: URL) throws -> Date { - let fileManager = FileManager() - guard fileManager.itemExists(at: url) else { - throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: url.path]) - } - let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) - var fileStat = stat() - lstat(entryFileSystemRepresentation, &fileStat) -#if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) - let modTimeSpec = fileStat.st_mtimespec -#else - let modTimeSpec = fileStat.st_mtim -#endif - - let timeStamp = TimeInterval(modTimeSpec.tv_sec) + TimeInterval(modTimeSpec.tv_nsec)/1000000000.0 - let modDate = Date(timeIntervalSince1970: timeStamp) - return modDate - } - - class func fileSizeForItem(at url: URL) throws -> Int64 { - let fileManager = FileManager() - guard fileManager.itemExists(at: url) else { - throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: url.path]) - } - - let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) - var stats = stat() - lstat(entryFileSystemRepresentation, &stats) - guard stats.st_size >= 0 else { throw CocoaError(.fileReadTooLarge, userInfo: [NSFilePathErrorKey: url.path]) } - - // `st_size` is a signed int value - return Int64(stats.st_size) - } - - class func typeForItem(at url: URL) throws -> Entry.EntryType { - let fileManager = FileManager() - guard url.isFileURL, fileManager.itemExists(at: url) else { - throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: url.path]) - } - let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) - var fileStat = stat() - lstat(entryFileSystemRepresentation, &fileStat) - return Entry.EntryType(mode: mode_t(fileStat.st_mode)) - } -} - -extension POSIXError { - - init(_ code: Int32, path: String) { - let errorCode = POSIXError.Code(rawValue: code) ?? .EPERM - self = .init(errorCode, userInfo: [NSFilePathErrorKey: path]) - } -} - -extension CocoaError { - -#if swift(>=4.2) -#else - -#if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) -#else - - // The swift-corelibs-foundation version of NSError.swift was missing a convenience method to create - // error objects from error codes. (https://github.com/apple/swift-corelibs-foundation/pull/1420) - // We have to provide an implementation for non-Darwin platforms using Swift versions < 4.2. - - public static func error(_ code: CocoaError.Code, userInfo: [AnyHashable: Any]? = nil, url: URL? = nil) -> Error { - var info: [String: Any] = userInfo as? [String: Any] ?? [:] - if let url = url { - info[NSURLErrorKey] = url - } - return NSError(domain: NSCocoaErrorDomain, code: code.rawValue, userInfo: info) - } - -#endif -#endif -} - -public extension URL { - - func isContained(in parentDirectoryURL: URL) -> Bool { - // Ensure this URL is contained in the passed in URL - let parentDirectoryURL = URL(fileURLWithPath: parentDirectoryURL.path, isDirectory: true).standardized - // Maliciously crafted ZIP files can contain entries using a prepended path delimiter `/` in combination - // with the parent directory shorthand `..` to bypass our containment check. - // When a malicious entry path like e.g. `/../secret.txt` gets appended to the destination - // directory URL (e.g. `file:///tmp/`), the resulting URL `file:///tmp//../secret.txt` gets expanded - // to `file:///tmp/secret` when using `URL.standardized`. This URL would pass the check performed - // in `isContained(in:)`. - // Lower level API like POSIX `fopen` - which is used at a later point during extraction - expands - // `/tmp//../secret.txt` to `/secret.txt` though. This would lead to an escape to the parent directory. - // To avoid that, we replicate the behavior of `fopen`s path expansion and replace all double delimiters - // with single delimiters. - // More details: https://github.com/weichsel/ZIPFoundation/issues/281 - let sanitizedEntryPathURL: URL = { - let sanitizedPath = self.path.replacingOccurrences(of: "//", with: "/") - return URL(fileURLWithPath: sanitizedPath) - }() - return sanitizedEntryPathURL.standardized.absoluteString.hasPrefix(parentDirectoryURL.absoluteString) - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIPDeprecated.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIPDeprecated.swift deleted file mode 100644 index 0b2ab5a..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIPDeprecated.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// FileManager+ZIPDeprecated.swift -// ZIPFoundation -// -// Created by Thomas Zoechling on 06.02.23. -// - -import Foundation - -public extension FileManager { - - @available(*, deprecated, renamed: "unzipItem(at:to:skipCRC32:progress:pathEncoding:)") - func unzipItem(at sourceURL: URL, to destinationURL: URL, skipCRC32: Bool = false, - progress: Progress? = nil, preferredEncoding: String.Encoding?) throws { - try self.unzipItem(at: sourceURL, to: destinationURL, skipCRC32: skipCRC32, - progress: progress, pathEncoding: preferredEncoding) - } -} diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Resources/PrivacyInfo.xcprivacy b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Resources/PrivacyInfo.xcprivacy deleted file mode 100644 index 2ed8099..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/Resources/PrivacyInfo.xcprivacy +++ /dev/null @@ -1,23 +0,0 @@ - - - - - NSPrivacyTracking - - NSPrivacyCollectedDataTypes - - NSPrivacyTrackingDomains - - NSPrivacyAccessedAPITypes - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryFileTimestamp - NSPrivacyAccessedAPITypeReasons - - 0A2A.1 - - - - - diff --git a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/URL+ZIP.swift b/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/URL+ZIP.swift deleted file mode 100644 index 49e841c..0000000 --- a/ReadViewDemo/Pods/ZIPFoundation/Sources/ZIPFoundation/URL+ZIP.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// URL+ZIP.swift -// ZIPFoundation -// -// Copyright © 2017-2025 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. -// Released under the MIT License. -// -// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. -// - -import Foundation - -extension URL { - - static func temporaryReplacementDirectoryURL(for archive: Archive) -> URL { - #if swift(>=5.0) || os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS) - if archive.url.isFileURL, - let tempDir = try? FileManager().url(for: .itemReplacementDirectory, in: .userDomainMask, - appropriateFor: archive.url, create: true) { - return tempDir - } - #endif - - return URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent( - ProcessInfo.processInfo.globallyUniqueString) - } -}