From acdd5187ad9b7ae41c1e6573dbb9de8e23c47e85 Mon Sep 17 00:00:00 2001 From: Will Lumley Date: Mon, 29 Jan 2024 15:59:19 +1100 Subject: [PATCH 1/5] Removed CocoaPods and Carthage support. Restructured project around SPM format. --- Cartfile | 1 - .../FaviconFinder.xcodeproj/project.pbxproj | 847 ------- .../xcschemes/FaviconFinder-Example.xcscheme | 97 - .../FaviconFinder_iOS_Example.xcscheme | 78 - .../contents.xcworkspacedata | 10 - Example/FaviconFinder/AppDelegate.swift | 31 - .../AppIcon.appiconset/Contents.json | 58 - Example/FaviconFinder/Base.lproj/MainMenu.xib | 680 ------ .../FaviconFinder/ExampleViewController.swift | 59 - .../FaviconFinder/ExampleViewController.xib | 65 - Example/FaviconFinder/Info.plist | 43 - .../AppDelegate.swift | 34 - .../AppIcon.appiconset/Contents.json | 98 - .../Assets.xcassets/Contents.json | 6 - .../Base.lproj/LaunchScreen.storyboard | 25 - .../Base.lproj/Main.storyboard | 73 - Example/FaviconFinder_iOS_Example/Info.plist | 64 - .../SceneDelegate.swift | 53 - .../ViewController.swift | 49 - Example/Podfile | 16 - Example/Podfile.lock | 23 - .../Local Podspecs/FaviconFinder.podspec.json | 31 - Example/Pods/Manifest.lock | 23 - Example/Pods/Pods.xcodeproj/project.pbxproj | 1951 ----------------- .../xcschemes/FaviconFinder-iOS.xcscheme | 58 - .../xcschemes/FaviconFinder-macOS.xcscheme | 58 - .../xcschemes/FaviconFinder.xcscheme | 58 - .../Pods-FaviconFinder_Example.xcscheme | 58 - .../Pods-FaviconFinder_Tests.xcscheme | 58 - .../Pods-FaviconFinder_iOS_Example.xcscheme | 58 - .../xcschemes/SwiftSoup-iOS.xcscheme | 58 - .../xcschemes/SwiftSoup-macOS.xcscheme | 58 - Example/Pods/SwiftSoup/LICENSE | 21 - Example/Pods/SwiftSoup/README.md | 595 ----- Example/Pods/SwiftSoup/Sources/ArrayExt.swift | 21 - .../Pods/SwiftSoup/Sources/Attribute.swift | 148 -- .../Pods/SwiftSoup/Sources/Attributes.swift | 235 -- .../Pods/SwiftSoup/Sources/BinarySearch.swift | 95 - .../SwiftSoup/Sources/BooleanAttribute.swift | 26 - .../Pods/SwiftSoup/Sources/CharacterExt.swift | 81 - .../SwiftSoup/Sources/CharacterReader.swift | 320 --- Example/Pods/SwiftSoup/Sources/Cleaner.swift | 150 -- .../Pods/SwiftSoup/Sources/Collector.swift | 59 - .../Sources/CombiningEvaluator.swift | 127 -- Example/Pods/SwiftSoup/Sources/Comment.swift | 66 - .../Pods/SwiftSoup/Sources/Connection.swift | 10 - .../Pods/SwiftSoup/Sources/CssSelector.swift | 166 -- Example/Pods/SwiftSoup/Sources/DataNode.swift | 85 - Example/Pods/SwiftSoup/Sources/DataUtil.swift | 24 - Example/Pods/SwiftSoup/Sources/Document.swift | 562 ----- .../Pods/SwiftSoup/Sources/DocumentType.swift | 129 -- Example/Pods/SwiftSoup/Sources/Element.swift | 1308 ----------- Example/Pods/SwiftSoup/Sources/Elements.swift | 657 ------ Example/Pods/SwiftSoup/Sources/Entities.swift | 323 --- .../Pods/SwiftSoup/Sources/Evaluator.swift | 720 ------ .../Pods/SwiftSoup/Sources/Exception.swift | 22 - .../Pods/SwiftSoup/Sources/FormElement.swift | 125 -- .../SwiftSoup/Sources/HtmlTreeBuilder.swift | 781 ------- .../Sources/HtmlTreeBuilderState.swift | 1585 ------------- .../Sources/HttpStatusException.swift | 10 - Example/Pods/SwiftSoup/Sources/Node.swift | 808 ------- .../SwiftSoup/Sources/NodeTraversor.swift | 50 - .../Pods/SwiftSoup/Sources/NodeVisitor.swift | 37 - .../Pods/SwiftSoup/Sources/OrderedSet.swift | 453 ---- .../Pods/SwiftSoup/Sources/ParseError.swift | 42 - .../SwiftSoup/Sources/ParseErrorList.swift | 52 - .../SwiftSoup/Sources/ParseSettings.swift | 57 - Example/Pods/SwiftSoup/Sources/Parser.swift | 201 -- Example/Pods/SwiftSoup/Sources/Pattern.swift | 84 - .../Pods/SwiftSoup/Sources/QueryParser.swift | 322 --- .../Sources/SerializationException.swift | 10 - .../SwiftSoup/Sources/SimpleDictionary.swift | 39 - .../Pods/SwiftSoup/Sources/StreamReader.swift | 89 - Example/Pods/SwiftSoup/Sources/String.swift | 218 -- .../SwiftSoup/Sources/StringBuilder.swift | 163 -- .../Pods/SwiftSoup/Sources/StringUtil.swift | 249 --- .../Sources/StructuralEvaluator.swift | 174 -- .../Pods/SwiftSoup/Sources/SwiftSoup.swift | 242 -- Example/Pods/SwiftSoup/Sources/Tag.swift | 347 --- Example/Pods/SwiftSoup/Sources/TextNode.swift | 199 -- Example/Pods/SwiftSoup/Sources/Token.swift | 396 ---- .../Pods/SwiftSoup/Sources/TokenQueue.swift | 429 ---- .../Pods/SwiftSoup/Sources/Tokeniser.swift | 303 --- .../SwiftSoup/Sources/TokeniserState.swift | 1644 -------------- .../Pods/SwiftSoup/Sources/TreeBuilder.swift | 98 - .../SwiftSoup/Sources/UnicodeScalar.swift | 67 - Example/Pods/SwiftSoup/Sources/Validate.swift | 133 -- .../Pods/SwiftSoup/Sources/Whitelist.swift | 650 ------ .../SwiftSoup/Sources/XmlDeclaration.swift | 77 - .../SwiftSoup/Sources/XmlTreeBuilder.swift | 146 -- .../FaviconFinder-iOS-Info.plist | 26 - .../FaviconFinder-iOS-dummy.m | 5 - .../FaviconFinder-iOS-prefix.pch | 12 - .../FaviconFinder-iOS-umbrella.h | 16 - .../FaviconFinder-iOS.debug.xcconfig | 15 - .../FaviconFinder-iOS.modulemap | 6 - .../FaviconFinder-iOS.release.xcconfig | 15 - .../FaviconFinder-iOS.xcconfig | 11 - .../FaviconFinder-macOS-Info.plist | 26 - .../FaviconFinder-macOS-dummy.m | 5 - .../FaviconFinder-macOS-prefix.pch | 12 - .../FaviconFinder-macOS-umbrella.h | 16 - .../FaviconFinder-macOS.debug.xcconfig | 16 - .../FaviconFinder-macOS.modulemap | 6 - .../FaviconFinder-macOS.release.xcconfig | 16 - .../FaviconFinder-macOS.xcconfig | 12 - .../Pods-FaviconFinder_Example-Info.plist | 26 - ...onFinder_Example-acknowledgements.markdown | 51 - ...viconFinder_Example-acknowledgements.plist | 89 - .../Pods-FaviconFinder_Example-dummy.m | 5 - .../Pods-FaviconFinder_Example-frameworks.sh | 188 -- .../Pods-FaviconFinder_Example-umbrella.h | 16 - .../Pods-FaviconFinder_Example.debug.xcconfig | 15 - .../Pods-FaviconFinder_Example.modulemap | 6 - ...ods-FaviconFinder_Example.release.xcconfig | 15 - .../Pods-FaviconFinder_Tests-Info.plist | 26 - ...iconFinder_Tests-acknowledgements.markdown | 51 - ...FaviconFinder_Tests-acknowledgements.plist | 89 - .../Pods-FaviconFinder_Tests-dummy.m | 5 - .../Pods-FaviconFinder_Tests-frameworks.sh | 188 -- .../Pods-FaviconFinder_Tests-umbrella.h | 16 - .../Pods-FaviconFinder_Tests.debug.xcconfig | 14 - .../Pods-FaviconFinder_Tests.modulemap | 6 - .../Pods-FaviconFinder_Tests.release.xcconfig | 14 - .../Pods-FaviconFinder_iOS_Example-Info.plist | 26 - ...nder_iOS_Example-acknowledgements.markdown | 51 - ...nFinder_iOS_Example-acknowledgements.plist | 89 - .../Pods-FaviconFinder_iOS_Example-dummy.m | 5 - ...ds-FaviconFinder_iOS_Example-frameworks.sh | 188 -- .../Pods-FaviconFinder_iOS_Example-umbrella.h | 16 - ...s-FaviconFinder_iOS_Example.debug.xcconfig | 15 - .../Pods-FaviconFinder_iOS_Example.modulemap | 6 - ...FaviconFinder_iOS_Example.release.xcconfig | 15 - .../SwiftSoup-iOS/SwiftSoup-iOS-Info.plist | 26 - .../SwiftSoup-iOS/SwiftSoup-iOS-dummy.m | 5 - .../SwiftSoup-iOS/SwiftSoup-iOS-prefix.pch | 12 - .../SwiftSoup-iOS/SwiftSoup-iOS-umbrella.h | 16 - .../SwiftSoup-iOS.debug.xcconfig | 13 - .../SwiftSoup-iOS/SwiftSoup-iOS.modulemap | 6 - .../SwiftSoup-iOS.release.xcconfig | 13 - .../SwiftSoup-iOS/SwiftSoup-iOS.xcconfig | 10 - .../SwiftSoup-macOS-Info.plist | 26 - .../SwiftSoup-macOS/SwiftSoup-macOS-dummy.m | 5 - .../SwiftSoup-macOS-prefix.pch | 12 - .../SwiftSoup-macOS-umbrella.h | 16 - .../SwiftSoup-macOS.debug.xcconfig | 14 - .../SwiftSoup-macOS/SwiftSoup-macOS.modulemap | 6 - .../SwiftSoup-macOS.release.xcconfig | 14 - .../SwiftSoup-macOS/SwiftSoup-macOS.xcconfig | 11 - FaviconFinder.podspec | 36 - Package.resolved | 4 +- README.md | 15 +- .../FaviconFinderTests.swift | 0 .../FaviconFinderTests}/Info.plist | 0 .../FaviconFinderTests}/RegexTests.swift | 0 .../StringRemovalTests.swift | 0 .../FaviconFinderTests}/URLParsingTests.swift | 0 _Pods.xcodeproj | 1 - .../project.pbxproj | 378 ++++ .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/swiftpm/Package.resolved | 14 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 13 + .../Assets.xcassets/Contents.json | 6 + .../iOSFaviconFinderExample/ContentView.swift | 72 + .../Preview Assets.xcassets/Contents.json | 6 + .../iOSFaviconFinderExampleApp.swift | 17 + .../project.pbxproj | 382 ++++ .../contents.xcworkspacedata | 3 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/swiftpm/Package.resolved | 14 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 58 + .../Assets.xcassets/Contents.json | 6 + .../ContentView.swift | 26 +- .../macOSFaviconFinderExample/Info.plist | 6 + .../Preview Assets.xcassets/Contents.json | 6 + .../macOSFaviconFinderExample.entitlements | 0 .../macOSFaviconFinderExampleApp.swift | 17 + 180 files changed, 1053 insertions(+), 22819 deletions(-) delete mode 100755 Cartfile delete mode 100755 Example/FaviconFinder.xcodeproj/project.pbxproj delete mode 100755 Example/FaviconFinder.xcodeproj/xcshareddata/xcschemes/FaviconFinder-Example.xcscheme delete mode 100755 Example/FaviconFinder.xcodeproj/xcshareddata/xcschemes/FaviconFinder_iOS_Example.xcscheme delete mode 100755 Example/FaviconFinder.xcworkspace/contents.xcworkspacedata delete mode 100755 Example/FaviconFinder/AppDelegate.swift delete mode 100755 Example/FaviconFinder/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100755 Example/FaviconFinder/Base.lproj/MainMenu.xib delete mode 100755 Example/FaviconFinder/ExampleViewController.swift delete mode 100755 Example/FaviconFinder/ExampleViewController.xib delete mode 100755 Example/FaviconFinder/Info.plist delete mode 100755 Example/FaviconFinder_iOS_Example/AppDelegate.swift delete mode 100755 Example/FaviconFinder_iOS_Example/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100755 Example/FaviconFinder_iOS_Example/Assets.xcassets/Contents.json delete mode 100755 Example/FaviconFinder_iOS_Example/Base.lproj/LaunchScreen.storyboard delete mode 100755 Example/FaviconFinder_iOS_Example/Base.lproj/Main.storyboard delete mode 100755 Example/FaviconFinder_iOS_Example/Info.plist delete mode 100755 Example/FaviconFinder_iOS_Example/SceneDelegate.swift delete mode 100755 Example/FaviconFinder_iOS_Example/ViewController.swift delete mode 100755 Example/Podfile delete mode 100755 Example/Podfile.lock delete mode 100755 Example/Pods/Local Podspecs/FaviconFinder.podspec.json delete mode 100755 Example/Pods/Manifest.lock delete mode 100755 Example/Pods/Pods.xcodeproj/project.pbxproj delete mode 100755 Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/FaviconFinder-iOS.xcscheme delete mode 100755 Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/FaviconFinder-macOS.xcscheme delete mode 100755 Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/FaviconFinder.xcscheme delete mode 100755 Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-FaviconFinder_Example.xcscheme delete mode 100755 Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-FaviconFinder_Tests.xcscheme delete mode 100755 Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-FaviconFinder_iOS_Example.xcscheme delete mode 100755 Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SwiftSoup-iOS.xcscheme delete mode 100755 Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SwiftSoup-macOS.xcscheme delete mode 100755 Example/Pods/SwiftSoup/LICENSE delete mode 100755 Example/Pods/SwiftSoup/README.md delete mode 100755 Example/Pods/SwiftSoup/Sources/ArrayExt.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Attribute.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Attributes.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/BinarySearch.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/BooleanAttribute.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/CharacterExt.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/CharacterReader.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Cleaner.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Collector.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/CombiningEvaluator.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Comment.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Connection.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/CssSelector.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/DataNode.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/DataUtil.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Document.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/DocumentType.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Element.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Elements.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Entities.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Evaluator.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Exception.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/FormElement.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/HtmlTreeBuilder.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/HtmlTreeBuilderState.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/HttpStatusException.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Node.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/NodeTraversor.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/NodeVisitor.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/OrderedSet.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/ParseError.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/ParseErrorList.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/ParseSettings.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Parser.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Pattern.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/QueryParser.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/SerializationException.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/SimpleDictionary.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/StreamReader.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/String.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/StringBuilder.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/StringUtil.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/StructuralEvaluator.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/SwiftSoup.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Tag.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/TextNode.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Token.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/TokenQueue.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Tokeniser.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/TokeniserState.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/TreeBuilder.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/UnicodeScalar.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Validate.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/Whitelist.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/XmlDeclaration.swift delete mode 100755 Example/Pods/SwiftSoup/Sources/XmlTreeBuilder.swift delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-Info.plist delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-dummy.m delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-prefix.pch delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-umbrella.h delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.debug.xcconfig delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.modulemap delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.release.xcconfig delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.xcconfig delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-Info.plist delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-dummy.m delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-prefix.pch delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-umbrella.h delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.debug.xcconfig delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.modulemap delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.release.xcconfig delete mode 100755 Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.xcconfig delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-Info.plist delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-acknowledgements.markdown delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-acknowledgements.plist delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-dummy.m delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-frameworks.sh delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-umbrella.h delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.debug.xcconfig delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.modulemap delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.release.xcconfig delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-Info.plist delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-acknowledgements.markdown delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-acknowledgements.plist delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-dummy.m delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-frameworks.sh delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-umbrella.h delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.debug.xcconfig delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.modulemap delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.release.xcconfig delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-Info.plist delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-acknowledgements.markdown delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-acknowledgements.plist delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-dummy.m delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-frameworks.sh delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-umbrella.h delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.debug.xcconfig delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.modulemap delete mode 100755 Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.release.xcconfig delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-Info.plist delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-dummy.m delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-prefix.pch delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-umbrella.h delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.debug.xcconfig delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.modulemap delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.release.xcconfig delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.xcconfig delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-Info.plist delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-dummy.m delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-prefix.pch delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-umbrella.h delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.debug.xcconfig delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.modulemap delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.release.xcconfig delete mode 100755 Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.xcconfig delete mode 100755 FaviconFinder.podspec mode change 100755 => 100644 Package.resolved rename {Example/Tests => Tests/FaviconFinderTests}/FaviconFinderTests.swift (100%) rename {Example/Tests => Tests/FaviconFinderTests}/Info.plist (100%) rename {Example/Tests => Tests/FaviconFinderTests}/RegexTests.swift (100%) rename {Example/Tests => Tests/FaviconFinderTests}/StringRemovalTests.swift (100%) rename {Example/Tests => Tests/FaviconFinderTests}/URLParsingTests.swift (100%) delete mode 120000 _Pods.xcodeproj create mode 100644 iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.pbxproj rename {Example/FaviconFinder.xcodeproj => iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (68%) mode change 100755 => 100644 rename {Example/FaviconFinder.xcworkspace => iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.xcworkspace}/xcshareddata/IDEWorkspaceChecks.plist (100%) mode change 100755 => 100644 create mode 100644 iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 iOSFaviconFinderExample/iOSFaviconFinderExample/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 iOSFaviconFinderExample/iOSFaviconFinderExample/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 iOSFaviconFinderExample/iOSFaviconFinderExample/Assets.xcassets/Contents.json create mode 100644 iOSFaviconFinderExample/iOSFaviconFinderExample/ContentView.swift create mode 100644 iOSFaviconFinderExample/iOSFaviconFinderExample/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 iOSFaviconFinderExample/iOSFaviconFinderExample/iOSFaviconFinderExampleApp.swift create mode 100644 macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.pbxproj rename {Example/Pods/Pods.xcodeproj => macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (61%) mode change 100755 => 100644 create mode 100644 macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 macOSFaviconFinderExample/macOSFaviconFinderExample/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 macOSFaviconFinderExample/macOSFaviconFinderExample/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 macOSFaviconFinderExample/macOSFaviconFinderExample/Assets.xcassets/Contents.json rename {Example/FaviconFinder => macOSFaviconFinderExample/macOSFaviconFinderExample}/ContentView.swift (83%) mode change 100755 => 100644 create mode 100644 macOSFaviconFinderExample/macOSFaviconFinderExample/Info.plist create mode 100644 macOSFaviconFinderExample/macOSFaviconFinderExample/Preview Content/Preview Assets.xcassets/Contents.json rename Example/FaviconFinder/FaviconFinder.entitlements => macOSFaviconFinderExample/macOSFaviconFinderExample/macOSFaviconFinderExample.entitlements (100%) mode change 100755 => 100644 create mode 100644 macOSFaviconFinderExample/macOSFaviconFinderExample/macOSFaviconFinderExampleApp.swift diff --git a/Cartfile b/Cartfile deleted file mode 100755 index b441f83..0000000 --- a/Cartfile +++ /dev/null @@ -1 +0,0 @@ -github "scinfu/SwiftSoup" "2.3.7" diff --git a/Example/FaviconFinder.xcodeproj/project.pbxproj b/Example/FaviconFinder.xcodeproj/project.pbxproj deleted file mode 100755 index 6dcb56d..0000000 --- a/Example/FaviconFinder.xcodeproj/project.pbxproj +++ /dev/null @@ -1,847 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 48; - objects = { - -/* Begin PBXBuildFile section */ - 6031398A9AE57430E50815BA /* Pods_FaviconFinder_iOS_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73D264E7952AED94626A0755 /* Pods_FaviconFinder_iOS_Example.framework */; }; - 732DEED46B3B595E5840601D /* Pods_FaviconFinder_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 630C60C5784DCC190F8E2126 /* Pods_FaviconFinder_Tests.framework */; }; - 880E99F98B30CD2FE6895A11 /* Pods_FaviconFinder_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA7C527B8CAE06B6FAAC37F6 /* Pods_FaviconFinder_Example.framework */; }; - BE21380A23F0D4FD00DCA2CB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE21380923F0D4FD00DCA2CB /* AppDelegate.swift */; }; - BE21380C23F0D4FD00DCA2CB /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE21380B23F0D4FD00DCA2CB /* SceneDelegate.swift */; }; - BE21380E23F0D4FD00DCA2CB /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE21380D23F0D4FD00DCA2CB /* ViewController.swift */; }; - BE21381123F0D4FD00DCA2CB /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BE21380F23F0D4FD00DCA2CB /* Main.storyboard */; }; - BE21381323F0D4FF00DCA2CB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BE21381223F0D4FF00DCA2CB /* Assets.xcassets */; }; - BE21381623F0D4FF00DCA2CB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BE21381423F0D4FF00DCA2CB /* LaunchScreen.storyboard */; }; - BE52CAF523CAE3BA005F1123 /* StringRemovalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE52CAF223CAE3BA005F1123 /* StringRemovalTests.swift */; }; - BE52CAF623CAE3BA005F1123 /* RegexTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE52CAF323CAE3BA005F1123 /* RegexTests.swift */; }; - BE52CAF723CAE3BA005F1123 /* URLParsingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE52CAF423CAE3BA005F1123 /* URLParsingTests.swift */; }; - BE52CB1923CB26C0005F1123 /* ExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE52CB1823CB26C0005F1123 /* ExampleViewController.swift */; }; - BE52CB3923CB2E56005F1123 /* ExampleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BE52CB3823CB2E56005F1123 /* ExampleViewController.xib */; }; - BEBAE77F23CB2F1F00A60406 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = BEBAE77D23CB2F1F00A60406 /* MainMenu.xib */; }; - BEDA437D23F226B80086C78A /* Cartfile in Resources */ = {isa = PBXBuildFile; fileRef = BEDA437C23F226B80086C78A /* Cartfile */; }; - ED83F67C20348A760038D96B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED83F67B20348A760038D96B /* AppDelegate.swift */; }; - ED83F67E20348A760038D96B /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED83F67D20348A760038D96B /* ContentView.swift */; }; - ED83F68020348A760038D96B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ED83F67F20348A760038D96B /* Assets.xcassets */; }; - ED83F68F20348A760038D96B /* FaviconFinderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED83F68E20348A760038D96B /* FaviconFinderTests.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - ED83F68B20348A760038D96B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = ED83F67020348A760038D96B /* Project object */; - proxyType = 1; - remoteGlobalIDString = ED83F67720348A760038D96B; - remoteInfo = FaviconFinder; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 012C43A70A0346876129F0F6 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; - 0355A9B752E3E77793ABD3FA /* Pods-FaviconFinder_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FaviconFinder_Example.debug.xcconfig"; path = "Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.debug.xcconfig"; sourceTree = ""; }; - 1B8BB63D6EB800781733BC1D /* Pods-FaviconFinder_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FaviconFinder_Tests.release.xcconfig"; path = "Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.release.xcconfig"; sourceTree = ""; }; - 630C60C5784DCC190F8E2126 /* Pods_FaviconFinder_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FaviconFinder_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6DCFFFF4C95ECA56DA8C1F91 /* Pods-FaviconFinder_iOS_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FaviconFinder_iOS_Example.release.xcconfig"; path = "Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.release.xcconfig"; sourceTree = ""; }; - 73D264E7952AED94626A0755 /* Pods_FaviconFinder_iOS_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FaviconFinder_iOS_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 81EF860286A33245010DEEED /* Pods-FaviconFinder_iOS_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FaviconFinder_iOS_Example.debug.xcconfig"; path = "Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.debug.xcconfig"; sourceTree = ""; }; - 9C5773D0659DE71F64359322 /* FaviconFinder.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = FaviconFinder.podspec; path = ../FaviconFinder.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - BE20446C27996CFD00D5D2EB /* BuildTests.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; name = BuildTests.yml; path = ../.github/workflows/BuildTests.yml; sourceTree = ""; }; - BE2044712799795400D5D2EB /* DeployToCocoapods.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; name = DeployToCocoapods.yml; path = ../.github/workflows/DeployToCocoapods.yml; sourceTree = ""; }; - BE21380723F0D4FD00DCA2CB /* FaviconFinder_iOS_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FaviconFinder_iOS_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; - BE21380923F0D4FD00DCA2CB /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - BE21380B23F0D4FD00DCA2CB /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - BE21380D23F0D4FD00DCA2CB /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - BE21381023F0D4FD00DCA2CB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - BE21381223F0D4FF00DCA2CB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - BE21381523F0D4FF00DCA2CB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - BE21381723F0D4FF00DCA2CB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - BE52CAF223CAE3BA005F1123 /* StringRemovalTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringRemovalTests.swift; sourceTree = ""; }; - BE52CAF323CAE3BA005F1123 /* RegexTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegexTests.swift; sourceTree = ""; }; - BE52CAF423CAE3BA005F1123 /* URLParsingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLParsingTests.swift; sourceTree = ""; }; - BE52CB1823CB26C0005F1123 /* ExampleViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExampleViewController.swift; sourceTree = ""; }; - BE52CB3823CB2E56005F1123 /* ExampleViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ExampleViewController.xib; sourceTree = ""; }; - BEBAE77E23CB2F1F00A60406 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; - BEDA437C23F226B80086C78A /* Cartfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Cartfile; path = ../Cartfile; sourceTree = ""; }; - BEDA437E23F226C20086C78A /* Package.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Package.swift; path = ../Package.swift; sourceTree = ""; }; - CA7C527B8CAE06B6FAAC37F6 /* Pods_FaviconFinder_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FaviconFinder_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D126331FEBE93627C20ED818 /* Pods-FaviconFinder_Example-FaviconFinder_iOS_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FaviconFinder_Example-FaviconFinder_iOS_Example.release.xcconfig"; path = "Target Support Files/Pods-FaviconFinder_Example-FaviconFinder_iOS_Example/Pods-FaviconFinder_Example-FaviconFinder_iOS_Example.release.xcconfig"; sourceTree = ""; }; - D507263EAAFD4C18A4924A31 /* Pods-FaviconFinder_Example-FaviconFinder_iOS_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FaviconFinder_Example-FaviconFinder_iOS_Example.debug.xcconfig"; path = "Target Support Files/Pods-FaviconFinder_Example-FaviconFinder_iOS_Example/Pods-FaviconFinder_Example-FaviconFinder_iOS_Example.debug.xcconfig"; sourceTree = ""; }; - DA44D8257B1E35AFC92A0480 /* Pods-FaviconFinder_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FaviconFinder_Tests.debug.xcconfig"; path = "Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.debug.xcconfig"; sourceTree = ""; }; - E43CC0CE153FC238A29BC3B4 /* LICENSE.txt */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE.txt; path = ../LICENSE.txt; sourceTree = ""; }; - ED83F67820348A760038D96B /* FaviconFinder_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FaviconFinder_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; - ED83F67B20348A760038D96B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - ED83F67D20348A760038D96B /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - ED83F67F20348A760038D96B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - ED83F68420348A760038D96B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - ED83F68520348A760038D96B /* FaviconFinder.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = FaviconFinder.entitlements; sourceTree = ""; }; - ED83F68A20348A760038D96B /* FaviconFinder_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FaviconFinder_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - ED83F68E20348A760038D96B /* FaviconFinderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaviconFinderTests.swift; sourceTree = ""; }; - ED83F69020348A760038D96B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F466EFBB5FC3E85126D4FC2E /* Pods-FaviconFinder_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FaviconFinder_Example.release.xcconfig"; path = "Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.release.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - BE21380423F0D4FD00DCA2CB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 6031398A9AE57430E50815BA /* Pods_FaviconFinder_iOS_Example.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ED83F67520348A760038D96B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 880E99F98B30CD2FE6895A11 /* Pods_FaviconFinder_Example.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ED83F68720348A760038D96B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 732DEED46B3B595E5840601D /* Pods_FaviconFinder_Tests.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 44253845685B5BB60DAA1F42 /* Frameworks */ = { - isa = PBXGroup; - children = ( - CA7C527B8CAE06B6FAAC37F6 /* Pods_FaviconFinder_Example.framework */, - 630C60C5784DCC190F8E2126 /* Pods_FaviconFinder_Tests.framework */, - 73D264E7952AED94626A0755 /* Pods_FaviconFinder_iOS_Example.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 9B3444C47359C6B680921499 /* Pods */ = { - isa = PBXGroup; - children = ( - 0355A9B752E3E77793ABD3FA /* Pods-FaviconFinder_Example.debug.xcconfig */, - F466EFBB5FC3E85126D4FC2E /* Pods-FaviconFinder_Example.release.xcconfig */, - DA44D8257B1E35AFC92A0480 /* Pods-FaviconFinder_Tests.debug.xcconfig */, - 1B8BB63D6EB800781733BC1D /* Pods-FaviconFinder_Tests.release.xcconfig */, - D507263EAAFD4C18A4924A31 /* Pods-FaviconFinder_Example-FaviconFinder_iOS_Example.debug.xcconfig */, - D126331FEBE93627C20ED818 /* Pods-FaviconFinder_Example-FaviconFinder_iOS_Example.release.xcconfig */, - 81EF860286A33245010DEEED /* Pods-FaviconFinder_iOS_Example.debug.xcconfig */, - 6DCFFFF4C95ECA56DA8C1F91 /* Pods-FaviconFinder_iOS_Example.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; - BE2044702799794400D5D2EB /* Workflows */ = { - isa = PBXGroup; - children = ( - BE20446C27996CFD00D5D2EB /* BuildTests.yml */, - BE2044712799795400D5D2EB /* DeployToCocoapods.yml */, - ); - name = Workflows; - sourceTree = ""; - }; - BE21380823F0D4FD00DCA2CB /* FaviconFinder_iOS_Example */ = { - isa = PBXGroup; - children = ( - BE21380923F0D4FD00DCA2CB /* AppDelegate.swift */, - BE21380B23F0D4FD00DCA2CB /* SceneDelegate.swift */, - BE21380D23F0D4FD00DCA2CB /* ViewController.swift */, - BE21380F23F0D4FD00DCA2CB /* Main.storyboard */, - BE21381223F0D4FF00DCA2CB /* Assets.xcassets */, - BE21381423F0D4FF00DCA2CB /* LaunchScreen.storyboard */, - BE21381723F0D4FF00DCA2CB /* Info.plist */, - ); - path = FaviconFinder_iOS_Example; - sourceTree = ""; - }; - ED83F66F20348A760038D96B = { - isa = PBXGroup; - children = ( - ED83F69A20348B650038D96B /* Metadata */, - ED83F67A20348A760038D96B /* FaviconFinder */, - BE21380823F0D4FD00DCA2CB /* FaviconFinder_iOS_Example */, - ED83F68D20348A760038D96B /* Tests */, - ED83F67920348A760038D96B /* Products */, - 9B3444C47359C6B680921499 /* Pods */, - 44253845685B5BB60DAA1F42 /* Frameworks */, - ); - sourceTree = ""; - }; - ED83F67920348A760038D96B /* Products */ = { - isa = PBXGroup; - children = ( - ED83F67820348A760038D96B /* FaviconFinder_Example.app */, - ED83F68A20348A760038D96B /* FaviconFinder_Tests.xctest */, - BE21380723F0D4FD00DCA2CB /* FaviconFinder_iOS_Example.app */, - ); - name = Products; - sourceTree = ""; - }; - ED83F67A20348A760038D96B /* FaviconFinder */ = { - isa = PBXGroup; - children = ( - BEBAE77D23CB2F1F00A60406 /* MainMenu.xib */, - ED83F67B20348A760038D96B /* AppDelegate.swift */, - BE52CB1823CB26C0005F1123 /* ExampleViewController.swift */, - BE52CB3823CB2E56005F1123 /* ExampleViewController.xib */, - ED83F67D20348A760038D96B /* ContentView.swift */, - ED83F67F20348A760038D96B /* Assets.xcassets */, - ED83F68420348A760038D96B /* Info.plist */, - ED83F68520348A760038D96B /* FaviconFinder.entitlements */, - ); - path = FaviconFinder; - sourceTree = ""; - }; - ED83F68D20348A760038D96B /* Tests */ = { - isa = PBXGroup; - children = ( - ED83F68E20348A760038D96B /* FaviconFinderTests.swift */, - BE52CAF323CAE3BA005F1123 /* RegexTests.swift */, - BE52CAF223CAE3BA005F1123 /* StringRemovalTests.swift */, - BE52CAF423CAE3BA005F1123 /* URLParsingTests.swift */, - ED83F69020348A760038D96B /* Info.plist */, - ); - path = Tests; - sourceTree = ""; - }; - ED83F69A20348B650038D96B /* Metadata */ = { - isa = PBXGroup; - children = ( - BE2044702799794400D5D2EB /* Workflows */, - 9C5773D0659DE71F64359322 /* FaviconFinder.podspec */, - BEDA437C23F226B80086C78A /* Cartfile */, - BEDA437E23F226C20086C78A /* Package.swift */, - 012C43A70A0346876129F0F6 /* README.md */, - E43CC0CE153FC238A29BC3B4 /* LICENSE.txt */, - ); - name = Metadata; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - BE21380623F0D4FD00DCA2CB /* FaviconFinder_iOS_Example */ = { - isa = PBXNativeTarget; - buildConfigurationList = BE21381A23F0D4FF00DCA2CB /* Build configuration list for PBXNativeTarget "FaviconFinder_iOS_Example" */; - buildPhases = ( - 1134917192D385D86276553B /* [CP] Check Pods Manifest.lock */, - BE21380323F0D4FD00DCA2CB /* Sources */, - BE21380423F0D4FD00DCA2CB /* Frameworks */, - BE21380523F0D4FD00DCA2CB /* Resources */, - EDD079974E7192EE54A8BED1 /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FaviconFinder_iOS_Example; - productName = FaviconFinder_iOS_Example; - productReference = BE21380723F0D4FD00DCA2CB /* FaviconFinder_iOS_Example.app */; - productType = "com.apple.product-type.application"; - }; - ED83F67720348A760038D96B /* FaviconFinder_Example */ = { - isa = PBXNativeTarget; - buildConfigurationList = ED83F69320348A760038D96B /* Build configuration list for PBXNativeTarget "FaviconFinder_Example" */; - buildPhases = ( - 6B502F7D7224032E84415425 /* [CP] Check Pods Manifest.lock */, - ED83F67420348A760038D96B /* Sources */, - ED83F67520348A760038D96B /* Frameworks */, - ED83F67620348A760038D96B /* Resources */, - 8618B6423E693321B298FB22 /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FaviconFinder_Example; - productName = FaviconFinder; - productReference = ED83F67820348A760038D96B /* FaviconFinder_Example.app */; - productType = "com.apple.product-type.application"; - }; - ED83F68920348A760038D96B /* FaviconFinder_Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = ED83F69620348A760038D96B /* Build configuration list for PBXNativeTarget "FaviconFinder_Tests" */; - buildPhases = ( - 327E63F0435F60FF38B4464F /* [CP] Check Pods Manifest.lock */, - ED83F68620348A760038D96B /* Sources */, - ED83F68720348A760038D96B /* Frameworks */, - ED83F68820348A760038D96B /* Resources */, - CFD501F3D731E84F86830A3D /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ED83F68C20348A760038D96B /* PBXTargetDependency */, - ); - name = FaviconFinder_Tests; - productName = FaviconFinderTests; - productReference = ED83F68A20348A760038D96B /* FaviconFinder_Tests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - ED83F67020348A760038D96B /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1130; - LastUpgradeCheck = 1220; - ORGANIZATIONNAME = CocoaPods; - TargetAttributes = { - BE21380623F0D4FD00DCA2CB = { - CreatedOnToolsVersion = 11.3.1; - ProvisioningStyle = Manual; - }; - ED83F67720348A760038D96B = { - CreatedOnToolsVersion = 9.0; - LastSwiftMigration = 1120; - ProvisioningStyle = Automatic; - }; - ED83F68920348A760038D96B = { - CreatedOnToolsVersion = 9.0; - LastSwiftMigration = 1120; - ProvisioningStyle = Automatic; - TestTargetID = ED83F67720348A760038D96B; - }; - }; - }; - buildConfigurationList = ED83F67320348A760038D96B /* Build configuration list for PBXProject "FaviconFinder" */; - compatibilityVersion = "Xcode 8.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = ED83F66F20348A760038D96B; - productRefGroup = ED83F67920348A760038D96B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - ED83F67720348A760038D96B /* FaviconFinder_Example */, - BE21380623F0D4FD00DCA2CB /* FaviconFinder_iOS_Example */, - ED83F68920348A760038D96B /* FaviconFinder_Tests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - BE21380523F0D4FD00DCA2CB /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BE21381623F0D4FF00DCA2CB /* LaunchScreen.storyboard in Resources */, - BE21381323F0D4FF00DCA2CB /* Assets.xcassets in Resources */, - BE21381123F0D4FD00DCA2CB /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ED83F67620348A760038D96B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ED83F68020348A760038D96B /* Assets.xcassets in Resources */, - BE52CB3923CB2E56005F1123 /* ExampleViewController.xib in Resources */, - BEDA437D23F226B80086C78A /* Cartfile in Resources */, - BEBAE77F23CB2F1F00A60406 /* MainMenu.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ED83F68820348A760038D96B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 1134917192D385D86276553B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-FaviconFinder_iOS_Example-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 327E63F0435F60FF38B4464F /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-FaviconFinder_Tests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 6B502F7D7224032E84415425 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-FaviconFinder_Example-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8618B6423E693321B298FB22 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/FaviconFinder-macOS/FaviconFinder.framework", - "${BUILT_PRODUCTS_DIR}/SwiftSoup-macOS/SwiftSoup.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FaviconFinder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftSoup.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - CFD501F3D731E84F86830A3D /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/FaviconFinder-macOS/FaviconFinder.framework", - "${BUILT_PRODUCTS_DIR}/SwiftSoup-macOS/SwiftSoup.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FaviconFinder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftSoup.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - EDD079974E7192EE54A8BED1 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/FaviconFinder-iOS/FaviconFinder.framework", - "${BUILT_PRODUCTS_DIR}/SwiftSoup-iOS/SwiftSoup.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FaviconFinder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftSoup.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - BE21380323F0D4FD00DCA2CB /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BE21380E23F0D4FD00DCA2CB /* ViewController.swift in Sources */, - BE21380A23F0D4FD00DCA2CB /* AppDelegate.swift in Sources */, - BE21380C23F0D4FD00DCA2CB /* SceneDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ED83F67420348A760038D96B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ED83F67E20348A760038D96B /* ContentView.swift in Sources */, - ED83F67C20348A760038D96B /* AppDelegate.swift in Sources */, - BE52CB1923CB26C0005F1123 /* ExampleViewController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ED83F68620348A760038D96B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ED83F68F20348A760038D96B /* FaviconFinderTests.swift in Sources */, - BE52CAF623CAE3BA005F1123 /* RegexTests.swift in Sources */, - BE52CAF723CAE3BA005F1123 /* URLParsingTests.swift in Sources */, - BE52CAF523CAE3BA005F1123 /* StringRemovalTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - ED83F68C20348A760038D96B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = ED83F67720348A760038D96B /* FaviconFinder_Example */; - targetProxy = ED83F68B20348A760038D96B /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - BE21380F23F0D4FD00DCA2CB /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - BE21381023F0D4FD00DCA2CB /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - BE21381423F0D4FF00DCA2CB /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - BE21381523F0D4FF00DCA2CB /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - BEBAE77D23CB2F1F00A60406 /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - BEBAE77E23CB2F1F00A60406 /* Base */, - ); - name = MainMenu.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - BE21381823F0D4FF00DCA2CB /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 81EF860286A33245010DEEED /* Pods-FaviconFinder_iOS_Example.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = FaviconFinder_iOS_Example/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.williamlumley.faviconfinder; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = iphoneos; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - BE21381923F0D4FF00DCA2CB /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6DCFFFF4C95ECA56DA8C1F91 /* Pods-FaviconFinder_iOS_Example.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = FaviconFinder_iOS_Example/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 12.0; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.williamlumley.faviconfinder; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = iphoneos; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - ED83F69120348A760038D96B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - 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_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; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - EXCLUDED_ARCHS = ""; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "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; - HEADER_SEARCH_PATHS = "$(SDKROOT)/usr/include/libxml2"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - VALIDATE_WORKSPACE = YES_ERROR; - }; - name = Debug; - }; - ED83F69220348A760038D96B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - 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_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; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - EXCLUDED_ARCHS = ""; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - 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; - HEADER_SEARCH_PATHS = "$(SDKROOT)/usr/include/libxml2"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - VALIDATE_WORKSPACE = YES_ERROR; - }; - name = Release; - }; - ED83F69420348A760038D96B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0355A9B752E3E77793ABD3FA /* Pods-FaviconFinder_Example.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = FaviconFinder/FaviconFinder.entitlements; - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = FaviconFinder/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 12.0; - PRODUCT_BUNDLE_IDENTIFIER = com.williamlumley.faviconfinder; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - ED83F69520348A760038D96B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F466EFBB5FC3E85126D4FC2E /* Pods-FaviconFinder_Example.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = FaviconFinder/FaviconFinder.entitlements; - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = FaviconFinder/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 12.0; - PRODUCT_BUNDLE_IDENTIFIER = com.williamlumley.faviconfinder; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - ED83F69720348A760038D96B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DA44D8257B1E35AFC92A0480 /* Pods-FaviconFinder_Tests.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Tests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 12.0; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.FaviconFinder-Tests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = ""; - }; - name = Debug; - }; - ED83F69820348A760038D96B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1B8BB63D6EB800781733BC1D /* Pods-FaviconFinder_Tests.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Tests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 12.0; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.FaviconFinder-Tests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = ""; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - BE21381A23F0D4FF00DCA2CB /* Build configuration list for PBXNativeTarget "FaviconFinder_iOS_Example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BE21381823F0D4FF00DCA2CB /* Debug */, - BE21381923F0D4FF00DCA2CB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ED83F67320348A760038D96B /* Build configuration list for PBXProject "FaviconFinder" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ED83F69120348A760038D96B /* Debug */, - ED83F69220348A760038D96B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ED83F69320348A760038D96B /* Build configuration list for PBXNativeTarget "FaviconFinder_Example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ED83F69420348A760038D96B /* Debug */, - ED83F69520348A760038D96B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ED83F69620348A760038D96B /* Build configuration list for PBXNativeTarget "FaviconFinder_Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ED83F69720348A760038D96B /* Debug */, - ED83F69820348A760038D96B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = ED83F67020348A760038D96B /* Project object */; -} diff --git a/Example/FaviconFinder.xcodeproj/xcshareddata/xcschemes/FaviconFinder-Example.xcscheme b/Example/FaviconFinder.xcodeproj/xcshareddata/xcschemes/FaviconFinder-Example.xcscheme deleted file mode 100755 index b7d2628..0000000 --- a/Example/FaviconFinder.xcodeproj/xcshareddata/xcschemes/FaviconFinder-Example.xcscheme +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/FaviconFinder.xcodeproj/xcshareddata/xcschemes/FaviconFinder_iOS_Example.xcscheme b/Example/FaviconFinder.xcodeproj/xcshareddata/xcschemes/FaviconFinder_iOS_Example.xcscheme deleted file mode 100755 index 44a2b1d..0000000 --- a/Example/FaviconFinder.xcodeproj/xcshareddata/xcschemes/FaviconFinder_iOS_Example.xcscheme +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/FaviconFinder.xcworkspace/contents.xcworkspacedata b/Example/FaviconFinder.xcworkspace/contents.xcworkspacedata deleted file mode 100755 index 1505e88..0000000 --- a/Example/FaviconFinder.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/Example/FaviconFinder/AppDelegate.swift b/Example/FaviconFinder/AppDelegate.swift deleted file mode 100755 index 0429283..0000000 --- a/Example/FaviconFinder/AppDelegate.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// AppDelegate.swift -// FaviconFinderExample -// -// Created by William Lumley on 18/10/19. -// Copyright © 2019 William Lumley. All rights reserved. -// - -import Cocoa - -@NSApplicationMain -class AppDelegate: NSObject, NSApplicationDelegate -{ - var window: NSWindow! - - func applicationDidFinishLaunching(_ aNotification: Notification) - { - self.window = NSWindow( - contentRect: NSRect(x: 0, y: 0, width: 480, height: 300), - styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView], - backing: .buffered, defer: false) - self.window.center() - self.window.contentViewController = ExampleViewController(nibName: "ExampleViewController", bundle: Bundle.main) - self.window.makeKeyAndOrderFront(nil) - } - - func applicationWillTerminate(_ aNotification: Notification) - { - - } -} diff --git a/Example/FaviconFinder/Assets.xcassets/AppIcon.appiconset/Contents.json b/Example/FaviconFinder/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100755 index 16b39b6..0000000 --- a/Example/FaviconFinder/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "size" : "16x16", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "16x16", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "32x32", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "32x32", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "128x128", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "128x128", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "256x256", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "256x256", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "512x512", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "512x512", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/Example/FaviconFinder/Base.lproj/MainMenu.xib b/Example/FaviconFinder/Base.lproj/MainMenu.xib deleted file mode 100755 index 9a5b449..0000000 --- a/Example/FaviconFinder/Base.lproj/MainMenu.xib +++ /dev/null @@ -1,680 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Default - - - - - - - Left to Right - - - - - - - Right to Left - - - - - - - - - - - Default - - - - - - - Left to Right - - - - - - - Right to Left - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/FaviconFinder/ExampleViewController.swift b/Example/FaviconFinder/ExampleViewController.swift deleted file mode 100755 index bb914dc..0000000 --- a/Example/FaviconFinder/ExampleViewController.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// ExampleViewController.swift -// FaviconFinder_Example -// -// Created by William Lumley on 12/1/20. -// Copyright © 2020 CocoaPods. All rights reserved. -// - -import Cocoa -import FaviconFinder - -class ExampleViewController: NSViewController -{ - @IBOutlet weak var imageView: NSImageView! - @IBOutlet weak var textField: NSTextField! - - override func viewDidLoad() - { - super.viewDidLoad() - print("ExampleViewController") - } - - @IBAction func downloadButtonTapped(_ sender: Any) - { - let urlStr = self.textField.stringValue - - guard let url = URL(string: urlStr) else { - print("Not a valid URL: \(urlStr)") - return - } - - Task { - do { - let favicon = try await FaviconFinder( - url: url, - preferredType: .html, - preferences: [ - FaviconDownloadType.ico: "favicon.ico", - FaviconDownloadType.html: FaviconType.appleTouchIcon.rawValue - ] - ).downloadFavicon() - - print("URL of Favicon: \(favicon.url)") - DispatchQueue.main.async { - self.imageView.image = favicon.image - } - - } catch let error { - print("Error: \(error)") - - let alert = NSAlert() - alert.messageText = "Error" - alert.informativeText = "\(error)" - - alert.runModal() - } - } - } -} diff --git a/Example/FaviconFinder/ExampleViewController.xib b/Example/FaviconFinder/ExampleViewController.xib deleted file mode 100755 index 3a46b07..0000000 --- a/Example/FaviconFinder/ExampleViewController.xib +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/FaviconFinder/Info.plist b/Example/FaviconFinder/Info.plist deleted file mode 100755 index bec461f..0000000 --- a/Example/FaviconFinder/Info.plist +++ /dev/null @@ -1,43 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIconFile - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) - NSAppTransportSecurity - - NSExceptionDomains - - foodmate.net - - NSIncludesSubdomains - - NSThirdPartyExceptionAllowsInsecureHTTPLoads - - - - - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/Example/FaviconFinder_iOS_Example/AppDelegate.swift b/Example/FaviconFinder_iOS_Example/AppDelegate.swift deleted file mode 100755 index 14e54a1..0000000 --- a/Example/FaviconFinder_iOS_Example/AppDelegate.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// AppDelegate.swift -// FaviconFinder_iOS_Example -// -// Created by Will Lumley on 10/2/20. -// Copyright © 2020 CocoaPods. All rights reserved. -// - -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate -{ - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool - { - return true - } - - // MARK: UISceneSession Lifecycle - func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration - { - // Called when a new scene session is being created. - // Use this method to select a configuration to create the new scene with. - return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) - } - - func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) - { - // Called when the user discards a scene session. - // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. - // Use this method to release any resources that were specific to the discarded scenes, as they will not return. - } -} - diff --git a/Example/FaviconFinder_iOS_Example/Assets.xcassets/AppIcon.appiconset/Contents.json b/Example/FaviconFinder_iOS_Example/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100755 index d8db8d6..0000000 --- a/Example/FaviconFinder_iOS_Example/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x" - }, - { - "idiom" : "ios-marketing", - "size" : "1024x1024", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/FaviconFinder_iOS_Example/Assets.xcassets/Contents.json b/Example/FaviconFinder_iOS_Example/Assets.xcassets/Contents.json deleted file mode 100755 index da4a164..0000000 --- a/Example/FaviconFinder_iOS_Example/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/FaviconFinder_iOS_Example/Base.lproj/LaunchScreen.storyboard b/Example/FaviconFinder_iOS_Example/Base.lproj/LaunchScreen.storyboard deleted file mode 100755 index 865e932..0000000 --- a/Example/FaviconFinder_iOS_Example/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/FaviconFinder_iOS_Example/Base.lproj/Main.storyboard b/Example/FaviconFinder_iOS_Example/Base.lproj/Main.storyboard deleted file mode 100755 index 9ceb70e..0000000 --- a/Example/FaviconFinder_iOS_Example/Base.lproj/Main.storyboard +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/FaviconFinder_iOS_Example/Info.plist b/Example/FaviconFinder_iOS_Example/Info.plist deleted file mode 100755 index 2a3483c..0000000 --- a/Example/FaviconFinder_iOS_Example/Info.plist +++ /dev/null @@ -1,64 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - UIWindowSceneSessionRoleApplication - - - UISceneConfigurationName - Default Configuration - UISceneDelegateClassName - $(PRODUCT_MODULE_NAME).SceneDelegate - UISceneStoryboardFile - Main - - - - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/Example/FaviconFinder_iOS_Example/SceneDelegate.swift b/Example/FaviconFinder_iOS_Example/SceneDelegate.swift deleted file mode 100755 index 23647cb..0000000 --- a/Example/FaviconFinder_iOS_Example/SceneDelegate.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// SceneDelegate.swift -// FaviconFinder_iOS_Example -// -// Created by Will Lumley on 10/2/20. -// Copyright © 2020 CocoaPods. All rights reserved. -// - -import UIKit - -class SceneDelegate: UIResponder, UIWindowSceneDelegate { - - var window: UIWindow? - - - func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { - // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. - // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. - // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). - guard let _ = (scene as? UIWindowScene) else { return } - } - - func sceneDidDisconnect(_ scene: UIScene) { - // Called as the scene is being released by the system. - // This occurs shortly after the scene enters the background, or when its session is discarded. - // Release any resources associated with this scene that can be re-created the next time the scene connects. - // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). - } - - func sceneDidBecomeActive(_ scene: UIScene) { - // Called when the scene has moved from an inactive state to an active state. - // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. - } - - func sceneWillResignActive(_ scene: UIScene) { - // Called when the scene will move from an active state to an inactive state. - // This may occur due to temporary interruptions (ex. an incoming phone call). - } - - func sceneWillEnterForeground(_ scene: UIScene) { - // Called as the scene transitions from the background to the foreground. - // Use this method to undo the changes made on entering the background. - } - - func sceneDidEnterBackground(_ scene: UIScene) { - // Called as the scene transitions from the foreground to the background. - // Use this method to save data, release shared resources, and store enough scene-specific state information - // to restore the scene back to its current state. - } - - -} - diff --git a/Example/FaviconFinder_iOS_Example/ViewController.swift b/Example/FaviconFinder_iOS_Example/ViewController.swift deleted file mode 100755 index ffbb2a0..0000000 --- a/Example/FaviconFinder_iOS_Example/ViewController.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// ViewController.swift -// FaviconFinder_iOS_Example -// -// Created by Will Lumley on 10/2/20. -// Copyright © 2020 CocoaPods. All rights reserved. -// - -import UIKit -import FaviconFinder - -class ViewController: UIViewController { - @IBOutlet weak var imageView: UIImageView! - @IBOutlet weak var textField: UITextField! - - override func viewDidLoad() { - super.viewDidLoad() - } - - @IBAction func buttonTapped(_ sender: Any) { - guard let urlStr = self.textField.text else { - print("TextField text is nil.") - return - } - - guard let url = URL(string: urlStr) else { - print("Not a valid URL: \(urlStr)") - return - } - - Task { - do { - let favicon = try await FaviconFinder(url: url, preferredType: .html, preferences: [ - FaviconDownloadType.html: FaviconType.appleTouchIcon.rawValue, - FaviconDownloadType.ico: "favicon.ico" - ]).downloadFavicon() - - print("URL of Favicon: \(favicon.url)") - DispatchQueue.main.async { - self.imageView.image = favicon.image - } - - } catch let error { - print("Error: \(error)") - } - } - } -} - diff --git a/Example/Podfile b/Example/Podfile deleted file mode 100755 index a4a1548..0000000 --- a/Example/Podfile +++ /dev/null @@ -1,16 +0,0 @@ -use_frameworks! - -target 'FaviconFinder_Example' do - platform :macos, '12.0' - pod 'FaviconFinder', :path => '../' - - target 'FaviconFinder_Tests' do - inherit! :search_paths - pod 'FaviconFinder', :path => '../' - end - - target 'FaviconFinder_iOS_Example' do - platform :ios, '15.0' - pod 'FaviconFinder', :path => '../' - end -end diff --git a/Example/Podfile.lock b/Example/Podfile.lock deleted file mode 100755 index 55e6c4b..0000000 --- a/Example/Podfile.lock +++ /dev/null @@ -1,23 +0,0 @@ -PODS: - - FaviconFinder (3.3.0): - - SwiftSoup (~> 2.3.7) - - SwiftSoup (2.3.7) - -DEPENDENCIES: - - FaviconFinder (from `../`) - -SPEC REPOS: - trunk: - - SwiftSoup - -EXTERNAL SOURCES: - FaviconFinder: - :path: "../" - -SPEC CHECKSUMS: - FaviconFinder: 6a6bd1d0ef1cbeab9d20daa7c86a8cfe3bfd1dab - SwiftSoup: 58e6228d50e89645f7345a3729929c5c2f25e4f2 - -PODFILE CHECKSUM: d2815a812f3c03df01e2913e4af391b0b2c917fe - -COCOAPODS: 1.11.3 diff --git a/Example/Pods/Local Podspecs/FaviconFinder.podspec.json b/Example/Pods/Local Podspecs/FaviconFinder.podspec.json deleted file mode 100755 index 071fb5c..0000000 --- a/Example/Pods/Local Podspecs/FaviconFinder.podspec.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "FaviconFinder", - "version": "3.3.0", - "summary": "A pure Swift library to detect favicons use by a website.", - "homepage": "https://github.com/will-lumley/FaviconFinder.git", - "license": { - "type": "MIT", - "file": "LICENSE.txt" - }, - "description": "FaviconFinder is a tiny pure Swift library designed for iOS and macOS applications that allows\nyou to detect favicons used by a website.", - "authors": { - "William Lumley": "will@lumley.io" - }, - "social_media_url": "https://twitter.com/wlumley95", - "platforms": { - "ios": "15.0", - "osx": "12.0" - }, - "swift_versions": "5.0", - "source": { - "git": "https://github.com/will-lumley/FaviconFinder.git", - "tag": "3.3.0" - }, - "source_files": "Sources/**/*/*", - "dependencies": { - "SwiftSoup": [ - "~> 2.3.7" - ] - }, - "swift_version": "5.0" -} diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock deleted file mode 100755 index 55e6c4b..0000000 --- a/Example/Pods/Manifest.lock +++ /dev/null @@ -1,23 +0,0 @@ -PODS: - - FaviconFinder (3.3.0): - - SwiftSoup (~> 2.3.7) - - SwiftSoup (2.3.7) - -DEPENDENCIES: - - FaviconFinder (from `../`) - -SPEC REPOS: - trunk: - - SwiftSoup - -EXTERNAL SOURCES: - FaviconFinder: - :path: "../" - -SPEC CHECKSUMS: - FaviconFinder: 6a6bd1d0ef1cbeab9d20daa7c86a8cfe3bfd1dab - SwiftSoup: 58e6228d50e89645f7345a3729929c5c2f25e4f2 - -PODFILE CHECKSUM: d2815a812f3c03df01e2913e4af391b0b2c917fe - -COCOAPODS: 1.11.3 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100755 index 842f0a7..0000000 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1951 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 48; - objects = { - -/* Begin PBXBuildFile section */ - 024A098FAABC9BD5FE5C1DEFA9A6009E /* SerializationException.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCF3EBC48AF26319981AF5EC1CC7EAAB /* SerializationException.swift */; }; - 02F60A3FCE52747101927BA1344EC0DA /* StreamReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 695AB5456742D2C28AEA348C72E41A0A /* StreamReader.swift */; }; - 0A0AB3AD5AE93AC2C88FEC47F58EFF7B /* HtmlTreeBuilderState.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7EEBC313F3D4208CC18678030B2665D /* HtmlTreeBuilderState.swift */; }; - 0B21AF5CCAE177968888916A224D5BC1 /* Cleaner.swift in Sources */ = {isa = PBXBuildFile; fileRef = F67872D56E0E1F8E79F8E1C4BBB851C0 /* Cleaner.swift */; }; - 0B5CFBD267CC715127EF47EBDF625BBF /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A54C97DEB1A3977AC3A62AFF00971BF /* Cocoa.framework */; }; - 0C3AAFB7413BCA1E0369486A2C23BA06 /* FaviconError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A124E4A4EB6B1DD153F81B95F21C04D /* FaviconError.swift */; }; - 0C9776C6F518C7AA920904207BA0CB71 /* CharacterExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DF129D1EFCA7F37D1AC9804585C61BD /* CharacterExt.swift */; }; - 0CC20CC37A6EDFC10C4FDBB4FA997914 /* SwiftSoup-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BA00E1F11CD87D8C7C6A87F92B6EB10 /* SwiftSoup-iOS-dummy.m */; }; - 0F6D3528CA417853059FF1F69E1F4C71 /* HtmlTreeBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B990A502308EFA35B277BA915C5EE80 /* HtmlTreeBuilder.swift */; }; - 0F71E654ECB6758021BC5569C1F85B45 /* Attributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ABECEE739D44AFA6D22F1939016F522 /* Attributes.swift */; }; - 10A06D309613CC1938FB075E2872F480 /* CssSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0615288FF10296393839B111562D6F22 /* CssSelector.swift */; }; - 11386376F148F911D73FA0D48E0752CF /* FaviconURLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F5C1C8490FDB324A23A9B7DF8A1A4E2 /* FaviconURLRequest.swift */; }; - 149DB3EE4F3B7061E0694C63C5EF680D /* TokenQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D041F34FDA87540234D179D19FDD61A9 /* TokenQueue.swift */; }; - 16A4223ECBEE83ED7490F19F5C7BDB38 /* ArrayExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9891CE73C9557E0F7F1D139768C15C97 /* ArrayExt.swift */; }; - 190840B1E66D890280889B42A930A8E3 /* ParseErrorList.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B9DD2542D07848C393D8712F398C2D /* ParseErrorList.swift */; }; - 1BE0665F47920FDE14F58940876DE899 /* CharacterReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C0D314301E00E7C3918532960F3DEA /* CharacterReader.swift */; }; - 1C091EE559DBE640C212117617A1A0AF /* Pods-FaviconFinder_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F28AC593872D9CC80CA51BDC366FD68C /* Pods-FaviconFinder_Tests-dummy.m */; }; - 1E43C8A8B4FEAF194B8E34A3219CDB1D /* Entities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C6221749FE01630EFFFAB745C39B0E7 /* Entities.swift */; }; - 1FAB21D0EF0982370C584CFFC1627B6B /* DataUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = F067C325F73CE827CCDF35B43153E34D /* DataUtil.swift */; }; - 22E07B2471F1B760F3D74F8863494DDE /* Attribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41510B89CE8291C3678DB82F93D4AD77 /* Attribute.swift */; }; - 24088E4512F0ACE27AF06ABED9D6FB26 /* BooleanAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBAD9ABEC2C6A097B6E4B373CA2F18B /* BooleanAttribute.swift */; }; - 24D3CE00A39588AAFA1F93CC31BB9929 /* TokeniserState.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55302528FE9453EB3BB90D1FA877126 /* TokeniserState.swift */; }; - 2578C680A6635D052C241010C43F428A /* DataNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3449BB90781627254A26AE3462B2641 /* DataNode.swift */; }; - 285A613A30FF908698EE769CED60B53E /* FaviconDownloadType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA0885C6F526C44E33B2649DE267D86D /* FaviconDownloadType.swift */; }; - 28E3B4B6485F9AF41205683988F8CC4E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A54C97DEB1A3977AC3A62AFF00971BF /* Cocoa.framework */; }; - 29681FDE123D02E573D6C760F5F685FD /* Regex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CF52C3AED86D557D50CAE3B8BF70FF /* Regex.swift */; }; - 2EBA0C33A29095E19D1277EB5C2B2AD5 /* TreeBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C095A47F4007A71D72667867D375BE /* TreeBuilder.swift */; }; - 306D95EA9CC51C81357E9A7014E67BEA /* CharacterExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DF129D1EFCA7F37D1AC9804585C61BD /* CharacterExt.swift */; }; - 30E584F971896CF855F499D6BD3E9C34 /* ICOFaviconFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFA4849A035DCB84F89E44CF59E15A4 /* ICOFaviconFinder.swift */; }; - 31940E83AE83FFD049521FEA9D1EDA56 /* WebApplicationManifestFaviconFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806AEBE8B92D34079BFC05A7CF3E76E3 /* WebApplicationManifestFaviconFinder.swift */; }; - 31F70DE79E2A5BAC1AEBFDF3721ECE66 /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FFCBFA2B10F943E91AF7B1DFB6EC549 /* Node.swift */; }; - 36B192B628304318FD026D087E6661A0 /* Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 575C8AE3BB2470696D264C739FDB2597 /* Comment.swift */; }; - 377D339F5F72FFE411B7BEFAE36F5328 /* XmlDeclaration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50C213B5781CE2EE6968721B56BBD18B /* XmlDeclaration.swift */; }; - 3958E6984A36795C2C2B8A8213FE079B /* OrderedSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179A888C4C7AB464643A7CE7357EAC15 /* OrderedSet.swift */; }; - 3A3EA19E07050D5B1A873B90EEC36860 /* FormElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CC21078D54B4985C4FB7971F220426D /* FormElement.swift */; }; - 3B7F8988EE81D244C6D972696D44AB31 /* Exception.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE1C6BDD764751D36451D37373DD1DEF /* Exception.swift */; }; - 3CB7AF7E98BD8F14231E3C7C79942FB0 /* FaviconURLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F5C1C8490FDB324A23A9B7DF8A1A4E2 /* FaviconURLRequest.swift */; }; - 3D2FDFD151E8CB2CF0BF8D3AF65B66DF /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A54C97DEB1A3977AC3A62AFF00971BF /* Cocoa.framework */; }; - 3E984E46669A236DA3D743306981284C /* Pods-FaviconFinder_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B9B09667E52AFB674DA0D8C8CBD5B6C0 /* Pods-FaviconFinder_Example-dummy.m */; }; - 40A83BAB0698A508ACA8159D6D45171C /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C92CD9A7D86765B09A9B0FABFDED173 /* Logger.swift */; }; - 41128B895DF662F4779DB20BD8809F0C /* FaviconFinder-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61DBF7D259DB5EA8DBE3FF65A3326B /* FaviconFinder-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 42A22EABF1544841FF8D1E6A658D8160 /* FormElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CC21078D54B4985C4FB7971F220426D /* FormElement.swift */; }; - 43238AF083EC4DC8BEAE621DE3FAA66B /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F382A218DFD40FA14F05DF911340D81 /* String.swift */; }; - 4627C94E0B64C98CDF37ED940B5A4D7D /* Attribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41510B89CE8291C3678DB82F93D4AD77 /* Attribute.swift */; }; - 46BFCF825186B3C53C669FEF958F3EB4 /* OrderedSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179A888C4C7AB464643A7CE7357EAC15 /* OrderedSet.swift */; }; - 47C06781755059B950864A3C7102C08B /* FaviconError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A124E4A4EB6B1DD153F81B95F21C04D /* FaviconError.swift */; }; - 48472539191E154CDB36CE54F58E11DD /* SerializationException.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCF3EBC48AF26319981AF5EC1CC7EAAB /* SerializationException.swift */; }; - 494480B3B23A9D9CC95957265C2BE645 /* Regex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CF52C3AED86D557D50CAE3B8BF70FF /* Regex.swift */; }; - 4AEE1E919EC8C724E313867D188A0F24 /* FaviconType.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACDC7EBC2139EA00E520C7EEBCE3A22B /* FaviconType.swift */; }; - 4B10FB01F5CEA6868139BA78AEB35FB2 /* Whitelist.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6EF644594CFD497AC5D715EFA250703 /* Whitelist.swift */; }; - 4BD5AACCA19B393EC31FC96CC3371AAF /* StreamReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 695AB5456742D2C28AEA348C72E41A0A /* StreamReader.swift */; }; - 4FEE1242F5DC2FCA259C441CA1DDAA6A /* FaviconFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09CBBB8330705B6E1859E790CAAEEE2D /* FaviconFinder.swift */; }; - 563035CC067C633E3926B9D84B3C1310 /* Pods-FaviconFinder_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8224169CD8361A3BB68D53A238967A8F /* Pods-FaviconFinder_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57AE16EECE7E4BAE82A44A9BE3FE6558 /* CombiningEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DED926B23F8120975F8E1AB63DDD34B /* CombiningEvaluator.swift */; }; - 58A04CA1ABECE44C7486808D922476DF /* Pods-FaviconFinder_iOS_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D61818FAE602BFCCC5C102293A45511E /* Pods-FaviconFinder_iOS_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 595700C951218B97835A398F41029FBC /* Evaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABFAA586B8D8161288A22D5A6F9EBF61 /* Evaluator.swift */; }; - 5A02A1B616A1B5C4C466F53D59CFFDDC /* BinarySearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9755DCFD73E4491367384250BAA9258C /* BinarySearch.swift */; }; - 5A8F944E7054152368E296167BA46609 /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 994B9FB4863A6C4A146DABE171EF2B42 /* Connection.swift */; }; - 5BCB22EDEF249DFBBBFED63107E0CCCD /* String+Removals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D3F4C278068F1ACA53057E091EC6C01 /* String+Removals.swift */; }; - 5D14CBD8D51EE8680D83A7A6F03E2C89 /* Element.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D08A9DBEA37BB5B07CED1DFE1D89BB /* Element.swift */; }; - 5DA2745362DE0A1D62E4BD43297F5498 /* UnicodeScalar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF42B561FAD3CF0F9A3AC0C7CB1D786 /* UnicodeScalar.swift */; }; - 5EC9AE6ED0584B5DAB168DAA686BEF2E /* SwiftSoup-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 09EE9BE14037853F50719EC31847B377 /* SwiftSoup-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F768F0324BCDDBAD07621B4A3A61233 /* FaviconFinderProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4627122A1E9EBCEFC3572A06D1968D8A /* FaviconFinderProtocol.swift */; }; - 5FDA29E81666B1184C54C3598FFB3DC1 /* Evaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABFAA586B8D8161288A22D5A6F9EBF61 /* Evaluator.swift */; }; - 614A5928DD9B0BD3BE482F9769E738F9 /* BooleanAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBAD9ABEC2C6A097B6E4B373CA2F18B /* BooleanAttribute.swift */; }; - 6203E7A0BA873777ABB9D9D1E296863F /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AFD450145076BFA310955A3F7772BDE /* Tag.swift */; }; - 6289F7C6A94B3DDD620E3830344EF384 /* Whitelist.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6EF644594CFD497AC5D715EFA250703 /* Whitelist.swift */; }; - 634D67523F95B95F3E045CAF37C8999D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3261E5A5395F45780622405F504B2804 /* Foundation.framework */; }; - 65E712B15AE2EFC41984D7CD03974E9C /* String+Removals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D3F4C278068F1ACA53057E091EC6C01 /* String+Removals.swift */; }; - 664CD16CC32B7749873A01FA32D1C06D /* SwiftSoup-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D3EC5A1864FC156958AC204DEB012A14 /* SwiftSoup-macOS-dummy.m */; }; - 692ED645AE40B332F3B762819D2E1584 /* XmlDeclaration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50C213B5781CE2EE6968721B56BBD18B /* XmlDeclaration.swift */; }; - 6C0BD6490BD0DE4ABD0E76C8059FBC91 /* QueryParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 307B5D2FA19A0E93748A39CA7BF48236 /* QueryParser.swift */; }; - 6DC79B3A3BFE01CF0EAC9D96E53099A6 /* Token.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA17CA6EE894C8217179C10C0610DC40 /* Token.swift */; }; - 714421C28AED549E3D74F2503F984F89 /* FaviconFinder-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D4CD32DBBDE0CC8D8254391DD7D3C80 /* FaviconFinder-macOS-dummy.m */; }; - 74548F6A8EB6B31C5DF2F1ACEC68A04B /* StructuralEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C974F3AD02EE46AB341F415C8B643F2 /* StructuralEvaluator.swift */; }; - 747406DCCBDE666A4F3EFDE3F53BCCBF /* FaviconFinder-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A49C06F8BB87AFA7BF5E886BD28FB17 /* FaviconFinder-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 76F79C0E699C3D4B25092AE1244DFD23 /* NodeTraversor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF1CD91B058A8B7BF2AA6E98552034AB /* NodeTraversor.swift */; }; - 7779480BDC3E7187D67950EF8544FB84 /* SwiftSoup-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D4B1CC52D216AB5F739B5255B5BCD3AB /* SwiftSoup-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7BC818BF91DFC31F379092CCE88F13FE /* Pattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347FD70CAA199954EDF07FDB9DAD6470 /* Pattern.swift */; }; - 7C2734E214D7CB43D0557FDC5E0ABCAA /* HttpStatusException.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2171D26BA1499C60846762A42B0FDDB /* HttpStatusException.swift */; }; - 7FD021C667AA0246DAF139ABF73368A5 /* Collector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 645311ED531D62F4760E40ED9E11D200 /* Collector.swift */; }; - 7FFBA76E0D2745216BBA1BE614BB3C29 /* URL+Parsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 769A528A74D952AB3DF9A651F09A4239 /* URL+Parsing.swift */; }; - 800AE10A4FC19227B8EF534C455C906C /* FaviconURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A8B54E6C60196CD732D2A4D0A2153B6 /* FaviconURL.swift */; }; - 816123A3D60B6EB90453CBF0D52E7BD7 /* SwiftSoup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DE35DEEAAE4A4C2D430A4D83B2381AF /* SwiftSoup.swift */; }; - 82447AD935D35F52D1F654CA7BBABAA8 /* FaviconURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A8B54E6C60196CD732D2A4D0A2153B6 /* FaviconURL.swift */; }; - 89CDF006596D8FF26CCF4D8353A0F736 /* FaviconFinderProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4627122A1E9EBCEFC3572A06D1968D8A /* FaviconFinderProtocol.swift */; }; - 8D10925E626EA0F913138F4139C4BBDB /* FaviconType.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACDC7EBC2139EA00E520C7EEBCE3A22B /* FaviconType.swift */; }; - 8EE2342894C3DC57C458E5D3FC7899B4 /* HtmlTreeBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B990A502308EFA35B277BA915C5EE80 /* HtmlTreeBuilder.swift */; }; - 9182D836A11BC661B9E846B00704DC75 /* Attributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ABECEE739D44AFA6D22F1939016F522 /* Attributes.swift */; }; - 9208D81E49253BBD4EE8850EE5A26A59 /* WebApplicationManifestFaviconFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806AEBE8B92D34079BFC05A7CF3E76E3 /* WebApplicationManifestFaviconFinder.swift */; }; - 92D1BD742FCB28AA6D7AD13DEDE1CAE1 /* Entities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C6221749FE01630EFFFAB745C39B0E7 /* Entities.swift */; }; - 93E07F29B508A20450711B017AAB1F92 /* NodeVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DE888AB4C5D7864C698244A0A478184 /* NodeVisitor.swift */; }; - 945A7DCFA12691CE13E15A81B4413220 /* StringUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A1A5A356A785F5DDE2E8771C3FEEA65 /* StringUtil.swift */; }; - 9548D598835C425E9A3AF2037A09E7B8 /* SimpleDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = A055EA2C6D90C2AABC28671A400F6B9A /* SimpleDictionary.swift */; }; - 9574BFCB5DB7A0CBCF18250799C39580 /* HtmlTreeBuilderState.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7EEBC313F3D4208CC18678030B2665D /* HtmlTreeBuilderState.swift */; }; - 962A1B1D0CD543D39CCF9F9599280448 /* HttpStatusException.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2171D26BA1499C60846762A42B0FDDB /* HttpStatusException.swift */; }; - 981BFB03A8F3B2C9E89AA18B53DDFC6E /* Parser.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB08FAD924516DEBE0DD23CE6A466FEB /* Parser.swift */; }; - 9907D1B839C34A9BB923868524EA76AA /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F382A218DFD40FA14F05DF911340D81 /* String.swift */; }; - 992204CC9A346831865193C0A383EA76 /* DocumentType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1544DC46B9F50A6DF32483B8755AC4A7 /* DocumentType.swift */; }; - 9A4923B6E9CCAC69158DD8022D28BE34 /* StringBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23174E66D21709BBE2A289D0B6BB4519 /* StringBuilder.swift */; }; - 9B6D6CFF6FCD37F922F5E5CD9F822066 /* ICOFaviconFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFA4849A035DCB84F89E44CF59E15A4 /* ICOFaviconFinder.swift */; }; - 9D53681D8F6BFCC0D2F39D7F3C53D3B5 /* StringBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23174E66D21709BBE2A289D0B6BB4519 /* StringBuilder.swift */; }; - 9DC0F3CD67840A890AD982EDE888D4E7 /* ArrayExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9891CE73C9557E0F7F1D139768C15C97 /* ArrayExt.swift */; }; - 9DC2657501AF21212F06C3773DD7BDEA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3261E5A5395F45780622405F504B2804 /* Foundation.framework */; }; - 9F141D2248B5D64C36AE46C0CCF77E83 /* FaviconFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09CBBB8330705B6E1859E790CAAEEE2D /* FaviconFinder.swift */; }; - A1345DB30F8417513D1D06988C49F95E /* HTMLFaviconFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = F630CC69046AA862536E059C6B66ED4A /* HTMLFaviconFinder.swift */; }; - A2D8CC1A29AE79C424B4E0A374098529 /* DataNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3449BB90781627254A26AE3462B2641 /* DataNode.swift */; }; - A2D9AFC495EE6CD783E79BC7773EB2A9 /* Cleaner.swift in Sources */ = {isa = PBXBuildFile; fileRef = F67872D56E0E1F8E79F8E1C4BBB851C0 /* Cleaner.swift */; }; - A33C4611FB834A3C0A5C6227ECFCD1EF /* Collector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 645311ED531D62F4760E40ED9E11D200 /* Collector.swift */; }; - A34A14FC3B27B4D84AA69C35BAA86DA6 /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FFCBFA2B10F943E91AF7B1DFB6EC549 /* Node.swift */; }; - A478F9F332A80F8930959782EB4D8A17 /* SimpleDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = A055EA2C6D90C2AABC28671A400F6B9A /* SimpleDictionary.swift */; }; - A54615FC5BDF5A51C2801C7F89B6AE91 /* Exception.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE1C6BDD764751D36451D37373DD1DEF /* Exception.swift */; }; - A5683FCB364E20F571FACDADFE176FFC /* Element.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D08A9DBEA37BB5B07CED1DFE1D89BB /* Element.swift */; }; - A6A1411C6C56D9CF72C101D749CCD3F7 /* ParseSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0EDBF0A1EDEAFFEF4B3F049DDC612C0 /* ParseSettings.swift */; }; - AA16D38F023CE29DAE8347E6AC2B180A /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AFD450145076BFA310955A3F7772BDE /* Tag.swift */; }; - AC8B4BFEBBBF0B9F539BF48201ECF4CF /* NodeVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DE888AB4C5D7864C698244A0A478184 /* NodeVisitor.swift */; }; - AE676B8AE088E0B06C025C525BAD669B /* TextNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDDBD0CBD546005C62F1B6C5FFD456DE /* TextNode.swift */; }; - AEF54242A5C1B6EFEB0A82A48C059FF8 /* FaviconDownloadType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA0885C6F526C44E33B2649DE267D86D /* FaviconDownloadType.swift */; }; - B11A881C1B371DBEFE6B5BA345DCECE5 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C92CD9A7D86765B09A9B0FABFDED173 /* Logger.swift */; }; - B352CBEFF1D5D48DC2AC56AA004DAA1A /* Favicon.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFEFFC9694B469A8940F0FE33D3D83CB /* Favicon.swift */; }; - B6B544062946877925A792FB632779F6 /* Validate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32E464FDCE65CBC8BD5EC4241540A577 /* Validate.swift */; }; - B8ABBBE5149F59923CB41C4D0E014643 /* XmlTreeBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5FA55E0DC71B20C04C1218F4829CA26 /* XmlTreeBuilder.swift */; }; - BAC3414F9AE9CDFC61E3743077CC52E0 /* SwiftSoup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DE35DEEAAE4A4C2D430A4D83B2381AF /* SwiftSoup.swift */; }; - BB112C7C5E2160D57903035AAFBE8D80 /* Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 575C8AE3BB2470696D264C739FDB2597 /* Comment.swift */; }; - BBFE8C5233C99DE8F929CDB54CAFD3AB /* TokeniserState.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55302528FE9453EB3BB90D1FA877126 /* TokeniserState.swift */; }; - BE580AA62878458E00A7DE22 /* URLResponse+StringEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE580AA52878458E00A7DE22 /* URLResponse+StringEncoding.swift */; }; - BE580AA72878458E00A7DE22 /* URLResponse+StringEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE580AA52878458E00A7DE22 /* URLResponse+StringEncoding.swift */; }; - BFCCF2DE0A5602A78E3E16627C1B5BC6 /* Elements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3716937BCAB6F0D36BD18C22AAD75E3C /* Elements.swift */; }; - C2539A8CC965879B0AA0AD8EC3FAEA3B /* TextNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDDBD0CBD546005C62F1B6C5FFD456DE /* TextNode.swift */; }; - C311A6106D14B9D7AD0A90F338DEBA2A /* Favicon.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFEFFC9694B469A8940F0FE33D3D83CB /* Favicon.swift */; }; - C683F63C87B5F4AE6D380920DCCA5758 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A54C97DEB1A3977AC3A62AFF00971BF /* Cocoa.framework */; }; - C8A965CD428816127EBA95571F1723C0 /* Parser.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB08FAD924516DEBE0DD23CE6A466FEB /* Parser.swift */; }; - C98AD1E4D0A54FBA88D081656F02494F /* Tokeniser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45C3B93B04E7828E6B5F6FB96A4B008F /* Tokeniser.swift */; }; - CD6AF29F15F7821F6530B37E9278BCD2 /* XmlTreeBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5FA55E0DC71B20C04C1218F4829CA26 /* XmlTreeBuilder.swift */; }; - CDB71404634DE6022B52AD4AF18EA7A4 /* StringUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A1A5A356A785F5DDE2E8771C3FEEA65 /* StringUtil.swift */; }; - CF7EAB726014D5979629AEF562CCB9BB /* HTMLFaviconFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = F630CC69046AA862536E059C6B66ED4A /* HTMLFaviconFinder.swift */; }; - CF8E355BFBCD563BE9BE12A72E6B98E2 /* Tokeniser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45C3B93B04E7828E6B5F6FB96A4B008F /* Tokeniser.swift */; }; - CFD7EA659B3A002BEFFCE25C3AADEEDB /* DocumentType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1544DC46B9F50A6DF32483B8755AC4A7 /* DocumentType.swift */; }; - D01A92459F14854501BACE01C4E8EEE5 /* BinarySearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9755DCFD73E4491367384250BAA9258C /* BinarySearch.swift */; }; - D1C54A8F07F130C401B87D01CB4855FC /* StructuralEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C974F3AD02EE46AB341F415C8B643F2 /* StructuralEvaluator.swift */; }; - D3129B47F1C78A8A1F29130F8E578ED5 /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 994B9FB4863A6C4A146DABE171EF2B42 /* Connection.swift */; }; - D3444B8CE318863399A3F0EF39FB589F /* CombiningEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DED926B23F8120975F8E1AB63DDD34B /* CombiningEvaluator.swift */; }; - D4D3F8E560D894F23C823EDBAEB3F0DA /* FaviconFinder-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E77B2297639709BF3EE336E32C8A56 /* FaviconFinder-iOS-dummy.m */; }; - DBAF2BACF7ED2B477155D7C8D0DD00F8 /* Validate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32E464FDCE65CBC8BD5EC4241540A577 /* Validate.swift */; }; - DCB5186BC787000D4696530D8F526A9B /* Elements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3716937BCAB6F0D36BD18C22AAD75E3C /* Elements.swift */; }; - DD432DEE8ABAAE3E919044853D361A5E /* CharacterReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C0D314301E00E7C3918532960F3DEA /* CharacterReader.swift */; }; - DE478F70A54C43456B974DB2F254EBC7 /* DataUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = F067C325F73CE827CCDF35B43153E34D /* DataUtil.swift */; }; - DF958B5633A2E0E9B71608A15CC79902 /* Pattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347FD70CAA199954EDF07FDB9DAD6470 /* Pattern.swift */; }; - E2FD5E6CF853789B4B519A9EBE898CFA /* ParseSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0EDBF0A1EDEAFFEF4B3F049DDC612C0 /* ParseSettings.swift */; }; - E343C2FDA2BC7C072F88C4B02069FA9B /* NodeTraversor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF1CD91B058A8B7BF2AA6E98552034AB /* NodeTraversor.swift */; }; - E3B61BE306D15D3B3616588C13F081B9 /* Pods-FaviconFinder_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 09D58F8BF9BF042BB9C3A8D74A399F96 /* Pods-FaviconFinder_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E70346537E7FBAFAE77359356B75BB82 /* UnicodeScalar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF42B561FAD3CF0F9A3AC0C7CB1D786 /* UnicodeScalar.swift */; }; - EA50259B35A3EB355B0D1156D534913F /* Document.swift in Sources */ = {isa = PBXBuildFile; fileRef = 555EEAE004EA043704A0CEDAB82F187C /* Document.swift */; }; - ED9746890D065ECBB82320A394C32684 /* CssSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0615288FF10296393839B111562D6F22 /* CssSelector.swift */; }; - F18DAD8BB7B1FA360A430B92C12A32C8 /* URL+Parsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 769A528A74D952AB3DF9A651F09A4239 /* URL+Parsing.swift */; }; - F2E267A6B64B01CD486E6A4BF2CC8BE9 /* ParseErrorList.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B9DD2542D07848C393D8712F398C2D /* ParseErrorList.swift */; }; - F507D2AE6F99722525F7DD6149240E77 /* TreeBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C095A47F4007A71D72667867D375BE /* TreeBuilder.swift */; }; - F6CF51687B559E5647BEED555E7ADA87 /* ParseError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8438DAC514BED7A92346E28A96E93ED1 /* ParseError.swift */; }; - F86E82E6BBD7F85C6F2E52B17034C7F5 /* TokenQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D041F34FDA87540234D179D19FDD61A9 /* TokenQueue.swift */; }; - F9251FDC3EF08A66E525271322FA7145 /* Document.swift in Sources */ = {isa = PBXBuildFile; fileRef = 555EEAE004EA043704A0CEDAB82F187C /* Document.swift */; }; - F9B83E5F11292D43A9E6F3753040AEF0 /* ParseError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8438DAC514BED7A92346E28A96E93ED1 /* ParseError.swift */; }; - FAE84E84A48064754FC164F13843C5E1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3261E5A5395F45780622405F504B2804 /* Foundation.framework */; }; - FBFBEC076494561E3A92A226F6EB43A5 /* QueryParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 307B5D2FA19A0E93748A39CA7BF48236 /* QueryParser.swift */; }; - FCA257B287ADAF1D96FA871C9DEDEEF4 /* Token.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA17CA6EE894C8217179C10C0610DC40 /* Token.swift */; }; - FE2271B93A103EAE9878D65C3D85FD86 /* Pods-FaviconFinder_iOS_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 64F2407BB28469C282007BD0E4D2AEA5 /* Pods-FaviconFinder_iOS_Example-dummy.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 017DA242D4C1088C267B9CCFAD1D4E98 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = A1D4A8EEB7F202C90E457B2F3FD09EFC; - remoteInfo = "Pods-FaviconFinder_Example"; - }; - 193ED1B41BB989F70F5EEFDE8ED57C7F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 764C59316C237D86F0E7E6065F523FF6; - remoteInfo = "FaviconFinder-iOS"; - }; - 6401237D68AE1BEBB861E04A28DA00FF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 87AB35C2C25A0D974E382A4C2C6B35D3; - remoteInfo = "SwiftSoup-macOS"; - }; - 7DDF80EB1086359BDD2F4FF1E66D9109 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D9B8DB9CB287820107F813D05015ACF2; - remoteInfo = "SwiftSoup-iOS"; - }; - 8507F14CB2C91C6960F483D03E9F07FE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B974AD9B0F92206CF4FDC93F59EFF6F6; - remoteInfo = "FaviconFinder-macOS"; - }; - 86C6FC87D0746DFC1DB6078CC963E569 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 87AB35C2C25A0D974E382A4C2C6B35D3; - remoteInfo = "SwiftSoup-macOS"; - }; - B7685182AF0FDBB1162144E398BD4026 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B974AD9B0F92206CF4FDC93F59EFF6F6; - remoteInfo = "FaviconFinder-macOS"; - }; - E3A8D2C1456416B265F97036997C3AA4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 87AB35C2C25A0D974E382A4C2C6B35D3; - remoteInfo = "SwiftSoup-macOS"; - }; - F91D22C731A06DDE3E43679FDEBA2E07 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D9B8DB9CB287820107F813D05015ACF2; - remoteInfo = "SwiftSoup-iOS"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 01F1E1E0985239AE23172AD9707CD43A /* Pods_FaviconFinder_iOS_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FaviconFinder_iOS_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 05DDAE01413AAC3E295B4DCCD2F6C607 /* Pods-FaviconFinder_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FaviconFinder_Tests.release.xcconfig"; sourceTree = ""; }; - 0615288FF10296393839B111562D6F22 /* CssSelector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CssSelector.swift; path = Sources/CssSelector.swift; sourceTree = ""; }; - 09CBBB8330705B6E1859E790CAAEEE2D /* FaviconFinder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FaviconFinder.swift; sourceTree = ""; }; - 09D58F8BF9BF042BB9C3A8D74A399F96 /* Pods-FaviconFinder_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-FaviconFinder_Tests-umbrella.h"; sourceTree = ""; }; - 09EE9BE14037853F50719EC31847B377 /* SwiftSoup-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SwiftSoup-macOS-umbrella.h"; path = "../SwiftSoup-macOS/SwiftSoup-macOS-umbrella.h"; sourceTree = ""; }; - 1544DC46B9F50A6DF32483B8755AC4A7 /* DocumentType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DocumentType.swift; path = Sources/DocumentType.swift; sourceTree = ""; }; - 179A888C4C7AB464643A7CE7357EAC15 /* OrderedSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OrderedSet.swift; path = Sources/OrderedSet.swift; sourceTree = ""; }; - 1A8B54E6C60196CD732D2A4D0A2153B6 /* FaviconURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FaviconURL.swift; sourceTree = ""; }; - 1B9B924DDF35ED5BC47A63B8DE3C9BB1 /* Pods-FaviconFinder_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FaviconFinder_Tests.debug.xcconfig"; sourceTree = ""; }; - 1BA807BD869B9DC43511DFA0EEA60E3F /* FaviconFinder.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = FaviconFinder.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 1C974F3AD02EE46AB341F415C8B643F2 /* StructuralEvaluator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StructuralEvaluator.swift; path = Sources/StructuralEvaluator.swift; sourceTree = ""; }; - 23174E66D21709BBE2A289D0B6BB4519 /* StringBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringBuilder.swift; path = Sources/StringBuilder.swift; sourceTree = ""; }; - 29CAE34DEA444CE23E9E30F90C655A8A /* Pods-FaviconFinder_iOS_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FaviconFinder_iOS_Example.debug.xcconfig"; sourceTree = ""; }; - 29E8E06578F90D9D08FEECEC23FC0B33 /* SwiftSoup-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "SwiftSoup-macOS.debug.xcconfig"; path = "../SwiftSoup-macOS/SwiftSoup-macOS.debug.xcconfig"; sourceTree = ""; }; - 2CC21078D54B4985C4FB7971F220426D /* FormElement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FormElement.swift; path = Sources/FormElement.swift; sourceTree = ""; }; - 2D3F4C278068F1ACA53057E091EC6C01 /* String+Removals.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+Removals.swift"; sourceTree = ""; }; - 2D4508B27B3C1D0A2C9760B23DA576DB /* Pods_FaviconFinder_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FaviconFinder_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 307B5D2FA19A0E93748A39CA7BF48236 /* QueryParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QueryParser.swift; path = Sources/QueryParser.swift; sourceTree = ""; }; - 3261E5A5395F45780622405F504B2804 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 32E464FDCE65CBC8BD5EC4241540A577 /* Validate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validate.swift; path = Sources/Validate.swift; sourceTree = ""; }; - 33CF52C3AED86D557D50CAE3B8BF70FF /* Regex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Regex.swift; sourceTree = ""; }; - 347FD70CAA199954EDF07FDB9DAD6470 /* Pattern.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Pattern.swift; path = Sources/Pattern.swift; sourceTree = ""; }; - 3716937BCAB6F0D36BD18C22AAD75E3C /* Elements.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Elements.swift; path = Sources/Elements.swift; sourceTree = ""; }; - 3A1A5A356A785F5DDE2E8771C3FEEA65 /* StringUtil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringUtil.swift; path = Sources/StringUtil.swift; sourceTree = ""; }; - 3B84525295B99C677D28BE2361A5021F /* Pods-FaviconFinder_iOS_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FaviconFinder_iOS_Example-acknowledgements.plist"; sourceTree = ""; }; - 40245A37FE78049C180FC4714B211962 /* FaviconFinder-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "FaviconFinder-iOS.debug.xcconfig"; sourceTree = ""; }; - 41510B89CE8291C3678DB82F93D4AD77 /* Attribute.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Attribute.swift; path = Sources/Attribute.swift; sourceTree = ""; }; - 45C3B93B04E7828E6B5F6FB96A4B008F /* Tokeniser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Tokeniser.swift; path = Sources/Tokeniser.swift; sourceTree = ""; }; - 4627122A1E9EBCEFC3572A06D1968D8A /* FaviconFinderProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FaviconFinderProtocol.swift; sourceTree = ""; }; - 4752E2BD8329483568A799FCC41ADF61 /* Pods-FaviconFinder_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-FaviconFinder_Example-frameworks.sh"; sourceTree = ""; }; - 47C095A47F4007A71D72667867D375BE /* TreeBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TreeBuilder.swift; path = Sources/TreeBuilder.swift; sourceTree = ""; }; - 487848743CE962DD3A04A29735228330 /* Pods-FaviconFinder_iOS_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FaviconFinder_iOS_Example-Info.plist"; sourceTree = ""; }; - 488A1E9A2919D7E0DE6A16CDDEBFBBD9 /* SwiftSoup-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "SwiftSoup-macOS.modulemap"; path = "../SwiftSoup-macOS/SwiftSoup-macOS.modulemap"; sourceTree = ""; }; - 4D4CD32DBBDE0CC8D8254391DD7D3C80 /* FaviconFinder-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FaviconFinder-macOS-dummy.m"; path = "../FaviconFinder-macOS/FaviconFinder-macOS-dummy.m"; sourceTree = ""; }; - 4D5AECC180C3A849273EF8D717BA0C4E /* Pods_FaviconFinder_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FaviconFinder_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4DE888AB4C5D7864C698244A0A478184 /* NodeVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NodeVisitor.swift; path = Sources/NodeVisitor.swift; sourceTree = ""; }; - 4E0F4C4320390F45C2F4955635BADB84 /* FaviconFinder-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "FaviconFinder-macOS.debug.xcconfig"; path = "../FaviconFinder-macOS/FaviconFinder-macOS.debug.xcconfig"; sourceTree = ""; }; - 4FF42B561FAD3CF0F9A3AC0C7CB1D786 /* UnicodeScalar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnicodeScalar.swift; path = Sources/UnicodeScalar.swift; sourceTree = ""; }; - 50C213B5781CE2EE6968721B56BBD18B /* XmlDeclaration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XmlDeclaration.swift; path = Sources/XmlDeclaration.swift; sourceTree = ""; }; - 51F019B9024136A0E5D07F2E98342209 /* Pods-FaviconFinder_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FaviconFinder_Example-acknowledgements.plist"; sourceTree = ""; }; - 555EEAE004EA043704A0CEDAB82F187C /* Document.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Document.swift; path = Sources/Document.swift; sourceTree = ""; }; - 575C8AE3BB2470696D264C739FDB2597 /* Comment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Comment.swift; path = Sources/Comment.swift; sourceTree = ""; }; - 5A124E4A4EB6B1DD153F81B95F21C04D /* FaviconError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FaviconError.swift; sourceTree = ""; }; - 5A54C97DEB1A3977AC3A62AFF00971BF /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; - 5C007ACDC509E118FA24148617F927EA /* SwiftSoup-macOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "SwiftSoup-macOS-Info.plist"; path = "../SwiftSoup-macOS/SwiftSoup-macOS-Info.plist"; sourceTree = ""; }; - 5D61DBF7D259DB5EA8DBE3FF65A3326B /* FaviconFinder-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FaviconFinder-macOS-umbrella.h"; path = "../FaviconFinder-macOS/FaviconFinder-macOS-umbrella.h"; sourceTree = ""; }; - 5DED926B23F8120975F8E1AB63DDD34B /* CombiningEvaluator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombiningEvaluator.swift; path = Sources/CombiningEvaluator.swift; sourceTree = ""; }; - 5E8DBD0788D912AB682EA49E4D3F3FCD /* Pods-FaviconFinder_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-FaviconFinder_Tests.modulemap"; sourceTree = ""; }; - 6452133D3188E3B4F1FCF0B165AF7E7A /* Pods-FaviconFinder_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FaviconFinder_Tests-Info.plist"; sourceTree = ""; }; - 645311ED531D62F4760E40ED9E11D200 /* Collector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collector.swift; path = Sources/Collector.swift; sourceTree = ""; }; - 64F2407BB28469C282007BD0E4D2AEA5 /* Pods-FaviconFinder_iOS_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-FaviconFinder_iOS_Example-dummy.m"; sourceTree = ""; }; - 6587BE2117C9507704A2A812C4D2A31E /* SwiftSoup-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftSoup-iOS-Info.plist"; sourceTree = ""; }; - 695AB5456742D2C28AEA348C72E41A0A /* StreamReader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StreamReader.swift; path = Sources/StreamReader.swift; sourceTree = ""; }; - 6A49C06F8BB87AFA7BF5E886BD28FB17 /* FaviconFinder-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FaviconFinder-iOS-umbrella.h"; sourceTree = ""; }; - 6C6221749FE01630EFFFAB745C39B0E7 /* Entities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Entities.swift; path = Sources/Entities.swift; sourceTree = ""; }; - 6C92CD9A7D86765B09A9B0FABFDED173 /* Logger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = ""; }; - 6CBAD9ABEC2C6A097B6E4B373CA2F18B /* BooleanAttribute.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BooleanAttribute.swift; path = Sources/BooleanAttribute.swift; sourceTree = ""; }; - 6DF129D1EFCA7F37D1AC9804585C61BD /* CharacterExt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CharacterExt.swift; path = Sources/CharacterExt.swift; sourceTree = ""; }; - 6F6068A90AE168C010945654F4C1D874 /* FaviconFinder-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "FaviconFinder-iOS.release.xcconfig"; sourceTree = ""; }; - 769A528A74D952AB3DF9A651F09A4239 /* URL+Parsing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "URL+Parsing.swift"; sourceTree = ""; }; - 7ABECEE739D44AFA6D22F1939016F522 /* Attributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Attributes.swift; path = Sources/Attributes.swift; sourceTree = ""; }; - 7BA00E1F11CD87D8C7C6A87F92B6EB10 /* SwiftSoup-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftSoup-iOS-dummy.m"; sourceTree = ""; }; - 7DE35DEEAAE4A4C2D430A4D83B2381AF /* SwiftSoup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftSoup.swift; path = Sources/SwiftSoup.swift; sourceTree = ""; }; - 7E0947EC7B3987ADD5B0A686D3C1E383 /* SwiftSoup-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "SwiftSoup-iOS.modulemap"; sourceTree = ""; }; - 7FFCBFA2B10F943E91AF7B1DFB6EC549 /* Node.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Node.swift; path = Sources/Node.swift; sourceTree = ""; }; - 8031035D9C171767CA3D88684089F73F /* Pods-FaviconFinder_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FaviconFinder_Example.release.xcconfig"; sourceTree = ""; }; - 806AEBE8B92D34079BFC05A7CF3E76E3 /* WebApplicationManifestFaviconFinder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WebApplicationManifestFaviconFinder.swift; sourceTree = ""; }; - 80F75A59FF01CC64B720E9DF705711FE /* LICENSE.txt */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - 8224169CD8361A3BB68D53A238967A8F /* Pods-FaviconFinder_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-FaviconFinder_Example-umbrella.h"; sourceTree = ""; }; - 83E54A3F599E152CCBAFC8897F5E497C /* FaviconFinder.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FaviconFinder.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8438DAC514BED7A92346E28A96E93ED1 /* ParseError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParseError.swift; path = Sources/ParseError.swift; sourceTree = ""; }; - 85D08A9DBEA37BB5B07CED1DFE1D89BB /* Element.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Element.swift; path = Sources/Element.swift; sourceTree = ""; }; - 86CC726BD22450D22A11376E9E5884EA /* Pods-FaviconFinder_iOS_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FaviconFinder_iOS_Example.release.xcconfig"; sourceTree = ""; }; - 87D341D94E293658DD1A46E17DD5119F /* SwiftSoup.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftSoup.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8B990A502308EFA35B277BA915C5EE80 /* HtmlTreeBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HtmlTreeBuilder.swift; path = Sources/HtmlTreeBuilder.swift; sourceTree = ""; }; - 8E1026FB3D8599C9CCAE9ADB53B57ACD /* FaviconFinder-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "FaviconFinder-iOS.modulemap"; sourceTree = ""; }; - 8F382A218DFD40FA14F05DF911340D81 /* String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = String.swift; path = Sources/String.swift; sourceTree = ""; }; - 92C0D314301E00E7C3918532960F3DEA /* CharacterReader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CharacterReader.swift; path = Sources/CharacterReader.swift; sourceTree = ""; }; - 9366A4E91302DEB60E4EDE51EBD425F5 /* Pods-FaviconFinder_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-FaviconFinder_Example-acknowledgements.markdown"; sourceTree = ""; }; - 9755DCFD73E4491367384250BAA9258C /* BinarySearch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinarySearch.swift; path = Sources/BinarySearch.swift; sourceTree = ""; }; - 9891CE73C9557E0F7F1D139768C15C97 /* ArrayExt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ArrayExt.swift; path = Sources/ArrayExt.swift; sourceTree = ""; }; - 994B9FB4863A6C4A146DABE171EF2B42 /* Connection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Connection.swift; path = Sources/Connection.swift; sourceTree = ""; }; - 9A4112FBE53D4451CE36E042D3948608 /* Pods-FaviconFinder_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-FaviconFinder_Tests-frameworks.sh"; sourceTree = ""; }; - 9AFD450145076BFA310955A3F7772BDE /* Tag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Tag.swift; path = Sources/Tag.swift; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9F5C1C8490FDB324A23A9B7DF8A1A4E2 /* FaviconURLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FaviconURLRequest.swift; sourceTree = ""; }; - A055EA2C6D90C2AABC28671A400F6B9A /* SimpleDictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SimpleDictionary.swift; path = Sources/SimpleDictionary.swift; sourceTree = ""; }; - A3449BB90781627254A26AE3462B2641 /* DataNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataNode.swift; path = Sources/DataNode.swift; sourceTree = ""; }; - A3537BA11499C16D61BBB97ECA61BBE9 /* SwiftSoup-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SwiftSoup-macOS-prefix.pch"; path = "../SwiftSoup-macOS/SwiftSoup-macOS-prefix.pch"; sourceTree = ""; }; - A3E77B2297639709BF3EE336E32C8A56 /* FaviconFinder-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FaviconFinder-iOS-dummy.m"; sourceTree = ""; }; - A72C79612158960A5FD40277685427D9 /* SwiftSoup-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "SwiftSoup-iOS.debug.xcconfig"; sourceTree = ""; }; - AB0033C54D58B162E33482866B875687 /* FaviconFinder-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "FaviconFinder-macOS.release.xcconfig"; path = "../FaviconFinder-macOS/FaviconFinder-macOS.release.xcconfig"; sourceTree = ""; }; - AB349326101557DC21BE77604CA09FF5 /* Pods-FaviconFinder_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-FaviconFinder_Example.modulemap"; sourceTree = ""; }; - ABFAA586B8D8161288A22D5A6F9EBF61 /* Evaluator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Evaluator.swift; path = Sources/Evaluator.swift; sourceTree = ""; }; - ACDC7EBC2139EA00E520C7EEBCE3A22B /* FaviconType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FaviconType.swift; sourceTree = ""; }; - AF1CD91B058A8B7BF2AA6E98552034AB /* NodeTraversor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NodeTraversor.swift; path = Sources/NodeTraversor.swift; sourceTree = ""; }; - B0AC1D6F07B67E30DDCD3A03EA282FED /* FaviconFinder-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "FaviconFinder-macOS.modulemap"; path = "../FaviconFinder-macOS/FaviconFinder-macOS.modulemap"; sourceTree = ""; }; - B55302528FE9453EB3BB90D1FA877126 /* TokeniserState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TokeniserState.swift; path = Sources/TokeniserState.swift; sourceTree = ""; }; - B7EEBC313F3D4208CC18678030B2665D /* HtmlTreeBuilderState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HtmlTreeBuilderState.swift; path = Sources/HtmlTreeBuilderState.swift; sourceTree = ""; }; - B9B09667E52AFB674DA0D8C8CBD5B6C0 /* Pods-FaviconFinder_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-FaviconFinder_Example-dummy.m"; sourceTree = ""; }; - BB08FAD924516DEBE0DD23CE6A466FEB /* Parser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Parser.swift; path = Sources/Parser.swift; sourceTree = ""; }; - BBC76ADB84C4197270FCDDB1CDBD62CD /* SwiftSoup-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "SwiftSoup-iOS.release.xcconfig"; sourceTree = ""; }; - BDDBD0CBD546005C62F1B6C5FFD456DE /* TextNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextNode.swift; path = Sources/TextNode.swift; sourceTree = ""; }; - BE580AA52878458E00A7DE22 /* URLResponse+StringEncoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLResponse+StringEncoding.swift"; sourceTree = ""; }; - BE85293150927E90D60487FA6DE069A6 /* Pods-FaviconFinder_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-FaviconFinder_Tests-acknowledgements.markdown"; sourceTree = ""; }; - C0EDBF0A1EDEAFFEF4B3F049DDC612C0 /* ParseSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParseSettings.swift; path = Sources/ParseSettings.swift; sourceTree = ""; }; - C20B42400EF692136C361A875D6052B2 /* FaviconFinder-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FaviconFinder-iOS-prefix.pch"; sourceTree = ""; }; - C22F9A0852BCB0CBDCBEA24426E1596F /* Pods-FaviconFinder_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FaviconFinder_Tests-acknowledgements.plist"; sourceTree = ""; }; - C456AFA3E1D8D4ADB363F8928A9B0551 /* SwiftSoup.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftSoup.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C556980DDA39B7FAC78F3B809CB9ED05 /* Pods-FaviconFinder_iOS_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-FaviconFinder_iOS_Example-acknowledgements.markdown"; sourceTree = ""; }; - CA17CA6EE894C8217179C10C0610DC40 /* Token.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Token.swift; path = Sources/Token.swift; sourceTree = ""; }; - CC9BBA2AC55C3D50545A590FCF6AC3D0 /* SwiftSoup-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftSoup-iOS-prefix.pch"; sourceTree = ""; }; - CCF3EBC48AF26319981AF5EC1CC7EAAB /* SerializationException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerializationException.swift; path = Sources/SerializationException.swift; sourceTree = ""; }; - CDFA4849A035DCB84F89E44CF59E15A4 /* ICOFaviconFinder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ICOFaviconFinder.swift; sourceTree = ""; }; - CE3BD4230C792CBE9807D2FF2982B6D9 /* Pods-FaviconFinder_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FaviconFinder_Example.debug.xcconfig"; sourceTree = ""; }; - CF8F382C491A706FA7572018D1FAB1F6 /* Pods-FaviconFinder_iOS_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-FaviconFinder_iOS_Example.modulemap"; sourceTree = ""; }; - CFEFFC9694B469A8940F0FE33D3D83CB /* Favicon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Favicon.swift; sourceTree = ""; }; - D041F34FDA87540234D179D19FDD61A9 /* TokenQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TokenQueue.swift; path = Sources/TokenQueue.swift; sourceTree = ""; }; - D1A41E9952419A44141E3E9B895783BD /* FaviconFinder-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FaviconFinder-iOS-Info.plist"; sourceTree = ""; }; - D1B9DD2542D07848C393D8712F398C2D /* ParseErrorList.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParseErrorList.swift; path = Sources/ParseErrorList.swift; sourceTree = ""; }; - D3EC5A1864FC156958AC204DEB012A14 /* SwiftSoup-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SwiftSoup-macOS-dummy.m"; path = "../SwiftSoup-macOS/SwiftSoup-macOS-dummy.m"; sourceTree = ""; }; - D4B1CC52D216AB5F739B5255B5BCD3AB /* SwiftSoup-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftSoup-iOS-umbrella.h"; sourceTree = ""; }; - D52C3AEA8042A02D9FE0FD5EE78DC7B6 /* Pods-FaviconFinder_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FaviconFinder_Example-Info.plist"; sourceTree = ""; }; - D61818FAE602BFCCC5C102293A45511E /* Pods-FaviconFinder_iOS_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-FaviconFinder_iOS_Example-umbrella.h"; sourceTree = ""; }; - D6EF644594CFD497AC5D715EFA250703 /* Whitelist.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Whitelist.swift; path = Sources/Whitelist.swift; sourceTree = ""; }; - DE1C6BDD764751D36451D37373DD1DEF /* Exception.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Exception.swift; path = Sources/Exception.swift; sourceTree = ""; }; - E2171D26BA1499C60846762A42B0FDDB /* HttpStatusException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HttpStatusException.swift; path = Sources/HttpStatusException.swift; sourceTree = ""; }; - E28B3A3038C0F560B07D186EC2685BC5 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - E5358E29167092D90DE6D7430D664E7C /* Pods-FaviconFinder_iOS_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-FaviconFinder_iOS_Example-frameworks.sh"; sourceTree = ""; }; - E5FA55E0DC71B20C04C1218F4829CA26 /* XmlTreeBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XmlTreeBuilder.swift; path = Sources/XmlTreeBuilder.swift; sourceTree = ""; }; - E835225688132A5057F09D0F6BB9253C /* FaviconFinder-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FaviconFinder-macOS-prefix.pch"; path = "../FaviconFinder-macOS/FaviconFinder-macOS-prefix.pch"; sourceTree = ""; }; - E8C85A2BC930F1EA27A3E7F6D427B44D /* FaviconFinder.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FaviconFinder.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E96B9C632A6995D4A08F18B659CE1433 /* FaviconFinder-macOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "FaviconFinder-macOS-Info.plist"; path = "../FaviconFinder-macOS/FaviconFinder-macOS-Info.plist"; sourceTree = ""; }; - EC91ACB88E008CFEAA225093977D0711 /* SwiftSoup-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "SwiftSoup-macOS.release.xcconfig"; path = "../SwiftSoup-macOS/SwiftSoup-macOS.release.xcconfig"; sourceTree = ""; }; - F067C325F73CE827CCDF35B43153E34D /* DataUtil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataUtil.swift; path = Sources/DataUtil.swift; sourceTree = ""; }; - F28AC593872D9CC80CA51BDC366FD68C /* Pods-FaviconFinder_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-FaviconFinder_Tests-dummy.m"; sourceTree = ""; }; - F630CC69046AA862536E059C6B66ED4A /* HTMLFaviconFinder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HTMLFaviconFinder.swift; sourceTree = ""; }; - F67872D56E0E1F8E79F8E1C4BBB851C0 /* Cleaner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cleaner.swift; path = Sources/Cleaner.swift; sourceTree = ""; }; - FA0885C6F526C44E33B2649DE267D86D /* FaviconDownloadType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FaviconDownloadType.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 072A29ED71A03084B12EA69F6354C13E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 3D2FDFD151E8CB2CF0BF8D3AF65B66DF /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 479664702C549D12ECFDE3AB2473A321 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FAE84E84A48064754FC164F13843C5E1 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7BE2D2B748EA2E9377BA3D155B3125DD /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 0B5CFBD267CC715127EF47EBDF625BBF /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A666317137F7FABB6438F6531443F8E9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 28E3B4B6485F9AF41205683988F8CC4E /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B1C49071263F7B8AE8CF6B6A832763D4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 634D67523F95B95F3E045CAF37C8999D /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BB98B535E5881BEED4BAB9D9122F68CA /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C683F63C87B5F4AE6D380920DCCA5758 /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D00696D1B731FEF37C23529F032A3233 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9DC2657501AF21212F06C3773DD7BDEA /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 177B496CD41814BEE2567BBC8675C78E /* FaviconFinder */ = { - isa = PBXGroup; - children = ( - 6C71883A232C0BAC57920F5C7967622C /* Classes */, - 57C9C56C1B1E7919848237E22E51ADD2 /* Extensions */, - E92A53F2C0308DE3D2628E7D494E7A5B /* Pod */, - A0BC21C761483E552C97F0C8F1B45B95 /* Support Files */, - ); - name = FaviconFinder; - path = ../..; - sourceTree = ""; - }; - 2B82BC73B38290328D863C4BFEEA51A1 /* Types */ = { - isa = PBXGroup; - children = ( - CFEFFC9694B469A8940F0FE33D3D83CB /* Favicon.swift */, - FA0885C6F526C44E33B2649DE267D86D /* FaviconDownloadType.swift */, - 5A124E4A4EB6B1DD153F81B95F21C04D /* FaviconError.swift */, - ACDC7EBC2139EA00E520C7EEBCE3A22B /* FaviconType.swift */, - 1A8B54E6C60196CD732D2A4D0A2153B6 /* FaviconURL.swift */, - ); - path = Types; - sourceTree = ""; - }; - 39CD5D329DD957C66BB1287C47CD847B /* Pods-FaviconFinder_Example */ = { - isa = PBXGroup; - children = ( - AB349326101557DC21BE77604CA09FF5 /* Pods-FaviconFinder_Example.modulemap */, - 9366A4E91302DEB60E4EDE51EBD425F5 /* Pods-FaviconFinder_Example-acknowledgements.markdown */, - 51F019B9024136A0E5D07F2E98342209 /* Pods-FaviconFinder_Example-acknowledgements.plist */, - B9B09667E52AFB674DA0D8C8CBD5B6C0 /* Pods-FaviconFinder_Example-dummy.m */, - 4752E2BD8329483568A799FCC41ADF61 /* Pods-FaviconFinder_Example-frameworks.sh */, - D52C3AEA8042A02D9FE0FD5EE78DC7B6 /* Pods-FaviconFinder_Example-Info.plist */, - 8224169CD8361A3BB68D53A238967A8F /* Pods-FaviconFinder_Example-umbrella.h */, - CE3BD4230C792CBE9807D2FF2982B6D9 /* Pods-FaviconFinder_Example.debug.xcconfig */, - 8031035D9C171767CA3D88684089F73F /* Pods-FaviconFinder_Example.release.xcconfig */, - ); - name = "Pods-FaviconFinder_Example"; - path = "Target Support Files/Pods-FaviconFinder_Example"; - sourceTree = ""; - }; - 41C052635D3E21350AC08C5F316759F6 /* OS X */ = { - isa = PBXGroup; - children = ( - 5A54C97DEB1A3977AC3A62AFF00971BF /* Cocoa.framework */, - ); - name = "OS X"; - sourceTree = ""; - }; - 4EDC20B56A0B9A8564E1FCEA191C83C4 /* Frameworks */ = { - isa = PBXGroup; - children = ( - DABCD2AA1C1DFCD4E2578CE87BDFD93F /* iOS */, - 41C052635D3E21350AC08C5F316759F6 /* OS X */, - ); - name = Frameworks; - sourceTree = ""; - }; - 511CD1B613F401F0B5CCEC03FEA7F028 /* Finders */ = { - isa = PBXGroup; - children = ( - F630CC69046AA862536E059C6B66ED4A /* HTMLFaviconFinder.swift */, - CDFA4849A035DCB84F89E44CF59E15A4 /* ICOFaviconFinder.swift */, - 806AEBE8B92D34079BFC05A7CF3E76E3 /* WebApplicationManifestFaviconFinder.swift */, - ); - path = Finders; - sourceTree = ""; - }; - 57C9C56C1B1E7919848237E22E51ADD2 /* Extensions */ = { - isa = PBXGroup; - children = ( - 2D3F4C278068F1ACA53057E091EC6C01 /* String+Removals.swift */, - 769A528A74D952AB3DF9A651F09A4239 /* URL+Parsing.swift */, - BE580AA52878458E00A7DE22 /* URLResponse+StringEncoding.swift */, - ); - name = Extensions; - path = Sources/FaviconFinder/Extensions; - sourceTree = ""; - }; - 6C71883A232C0BAC57920F5C7967622C /* Classes */ = { - isa = PBXGroup; - children = ( - 09CBBB8330705B6E1859E790CAAEEE2D /* FaviconFinder.swift */, - 4627122A1E9EBCEFC3572A06D1968D8A /* FaviconFinderProtocol.swift */, - 511CD1B613F401F0B5CCEC03FEA7F028 /* Finders */, - ECE7A2A3B3EBCE151D965E350A65B585 /* Toolbox */, - 2B82BC73B38290328D863C4BFEEA51A1 /* Types */, - ); - name = Classes; - path = Sources/FaviconFinder/Classes; - sourceTree = ""; - }; - A0BC21C761483E552C97F0C8F1B45B95 /* Support Files */ = { - isa = PBXGroup; - children = ( - 8E1026FB3D8599C9CCAE9ADB53B57ACD /* FaviconFinder-iOS.modulemap */, - A3E77B2297639709BF3EE336E32C8A56 /* FaviconFinder-iOS-dummy.m */, - D1A41E9952419A44141E3E9B895783BD /* FaviconFinder-iOS-Info.plist */, - C20B42400EF692136C361A875D6052B2 /* FaviconFinder-iOS-prefix.pch */, - 6A49C06F8BB87AFA7BF5E886BD28FB17 /* FaviconFinder-iOS-umbrella.h */, - 40245A37FE78049C180FC4714B211962 /* FaviconFinder-iOS.debug.xcconfig */, - 6F6068A90AE168C010945654F4C1D874 /* FaviconFinder-iOS.release.xcconfig */, - B0AC1D6F07B67E30DDCD3A03EA282FED /* FaviconFinder-macOS.modulemap */, - 4D4CD32DBBDE0CC8D8254391DD7D3C80 /* FaviconFinder-macOS-dummy.m */, - E96B9C632A6995D4A08F18B659CE1433 /* FaviconFinder-macOS-Info.plist */, - E835225688132A5057F09D0F6BB9253C /* FaviconFinder-macOS-prefix.pch */, - 5D61DBF7D259DB5EA8DBE3FF65A3326B /* FaviconFinder-macOS-umbrella.h */, - 4E0F4C4320390F45C2F4955635BADB84 /* FaviconFinder-macOS.debug.xcconfig */, - AB0033C54D58B162E33482866B875687 /* FaviconFinder-macOS.release.xcconfig */, - ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/FaviconFinder-iOS"; - sourceTree = ""; - }; - B36BC037ED17AC74F6A5E28B72921999 /* Products */ = { - isa = PBXGroup; - children = ( - 83E54A3F599E152CCBAFC8897F5E497C /* FaviconFinder.framework */, - E8C85A2BC930F1EA27A3E7F6D427B44D /* FaviconFinder.framework */, - 2D4508B27B3C1D0A2C9760B23DA576DB /* Pods_FaviconFinder_Example.framework */, - 01F1E1E0985239AE23172AD9707CD43A /* Pods_FaviconFinder_iOS_Example.framework */, - 4D5AECC180C3A849273EF8D717BA0C4E /* Pods_FaviconFinder_Tests.framework */, - 87D341D94E293658DD1A46E17DD5119F /* SwiftSoup.framework */, - C456AFA3E1D8D4ADB363F8928A9B0551 /* SwiftSoup.framework */, - ); - name = Products; - sourceTree = ""; - }; - BBC7567A00D04E66B4FE7E2775076C41 /* Support Files */ = { - isa = PBXGroup; - children = ( - 7E0947EC7B3987ADD5B0A686D3C1E383 /* SwiftSoup-iOS.modulemap */, - 7BA00E1F11CD87D8C7C6A87F92B6EB10 /* SwiftSoup-iOS-dummy.m */, - 6587BE2117C9507704A2A812C4D2A31E /* SwiftSoup-iOS-Info.plist */, - CC9BBA2AC55C3D50545A590FCF6AC3D0 /* SwiftSoup-iOS-prefix.pch */, - D4B1CC52D216AB5F739B5255B5BCD3AB /* SwiftSoup-iOS-umbrella.h */, - A72C79612158960A5FD40277685427D9 /* SwiftSoup-iOS.debug.xcconfig */, - BBC76ADB84C4197270FCDDB1CDBD62CD /* SwiftSoup-iOS.release.xcconfig */, - 488A1E9A2919D7E0DE6A16CDDEBFBBD9 /* SwiftSoup-macOS.modulemap */, - D3EC5A1864FC156958AC204DEB012A14 /* SwiftSoup-macOS-dummy.m */, - 5C007ACDC509E118FA24148617F927EA /* SwiftSoup-macOS-Info.plist */, - A3537BA11499C16D61BBB97ECA61BBE9 /* SwiftSoup-macOS-prefix.pch */, - 09EE9BE14037853F50719EC31847B377 /* SwiftSoup-macOS-umbrella.h */, - 29E8E06578F90D9D08FEECEC23FC0B33 /* SwiftSoup-macOS.debug.xcconfig */, - EC91ACB88E008CFEAA225093977D0711 /* SwiftSoup-macOS.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SwiftSoup-iOS"; - sourceTree = ""; - }; - C6866729A8287D2D76716D6282CD784C /* Development Pods */ = { - isa = PBXGroup; - children = ( - 177B496CD41814BEE2567BBC8675C78E /* FaviconFinder */, - ); - name = "Development Pods"; - sourceTree = ""; - }; - CB226845039A4AADC9CC91CC19298AE2 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 39CD5D329DD957C66BB1287C47CD847B /* Pods-FaviconFinder_Example */, - CF62CBD53C7B022101CC722F4E38090F /* Pods-FaviconFinder_iOS_Example */, - E4254789CF5CF26C6A3F9920FCD51FB0 /* Pods-FaviconFinder_Tests */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - CF1408CF629C7361332E53B88F7BD30C = { - isa = PBXGroup; - children = ( - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - C6866729A8287D2D76716D6282CD784C /* Development Pods */, - 4EDC20B56A0B9A8564E1FCEA191C83C4 /* Frameworks */, - CFB4ABEAEAFCDB4587FF6BE5A683746C /* Pods */, - B36BC037ED17AC74F6A5E28B72921999 /* Products */, - CB226845039A4AADC9CC91CC19298AE2 /* Targets Support Files */, - ); - sourceTree = ""; - }; - CF62CBD53C7B022101CC722F4E38090F /* Pods-FaviconFinder_iOS_Example */ = { - isa = PBXGroup; - children = ( - CF8F382C491A706FA7572018D1FAB1F6 /* Pods-FaviconFinder_iOS_Example.modulemap */, - C556980DDA39B7FAC78F3B809CB9ED05 /* Pods-FaviconFinder_iOS_Example-acknowledgements.markdown */, - 3B84525295B99C677D28BE2361A5021F /* Pods-FaviconFinder_iOS_Example-acknowledgements.plist */, - 64F2407BB28469C282007BD0E4D2AEA5 /* Pods-FaviconFinder_iOS_Example-dummy.m */, - E5358E29167092D90DE6D7430D664E7C /* Pods-FaviconFinder_iOS_Example-frameworks.sh */, - 487848743CE962DD3A04A29735228330 /* Pods-FaviconFinder_iOS_Example-Info.plist */, - D61818FAE602BFCCC5C102293A45511E /* Pods-FaviconFinder_iOS_Example-umbrella.h */, - 29CAE34DEA444CE23E9E30F90C655A8A /* Pods-FaviconFinder_iOS_Example.debug.xcconfig */, - 86CC726BD22450D22A11376E9E5884EA /* Pods-FaviconFinder_iOS_Example.release.xcconfig */, - ); - name = "Pods-FaviconFinder_iOS_Example"; - path = "Target Support Files/Pods-FaviconFinder_iOS_Example"; - sourceTree = ""; - }; - CFB4ABEAEAFCDB4587FF6BE5A683746C /* Pods */ = { - isa = PBXGroup; - children = ( - F09304C6384C7F9992344F93D008D329 /* SwiftSoup */, - ); - name = Pods; - sourceTree = ""; - }; - DABCD2AA1C1DFCD4E2578CE87BDFD93F /* iOS */ = { - isa = PBXGroup; - children = ( - 3261E5A5395F45780622405F504B2804 /* Foundation.framework */, - ); - name = iOS; - sourceTree = ""; - }; - E4254789CF5CF26C6A3F9920FCD51FB0 /* Pods-FaviconFinder_Tests */ = { - isa = PBXGroup; - children = ( - 5E8DBD0788D912AB682EA49E4D3F3FCD /* Pods-FaviconFinder_Tests.modulemap */, - BE85293150927E90D60487FA6DE069A6 /* Pods-FaviconFinder_Tests-acknowledgements.markdown */, - C22F9A0852BCB0CBDCBEA24426E1596F /* Pods-FaviconFinder_Tests-acknowledgements.plist */, - F28AC593872D9CC80CA51BDC366FD68C /* Pods-FaviconFinder_Tests-dummy.m */, - 9A4112FBE53D4451CE36E042D3948608 /* Pods-FaviconFinder_Tests-frameworks.sh */, - 6452133D3188E3B4F1FCF0B165AF7E7A /* Pods-FaviconFinder_Tests-Info.plist */, - 09D58F8BF9BF042BB9C3A8D74A399F96 /* Pods-FaviconFinder_Tests-umbrella.h */, - 1B9B924DDF35ED5BC47A63B8DE3C9BB1 /* Pods-FaviconFinder_Tests.debug.xcconfig */, - 05DDAE01413AAC3E295B4DCCD2F6C607 /* Pods-FaviconFinder_Tests.release.xcconfig */, - ); - name = "Pods-FaviconFinder_Tests"; - path = "Target Support Files/Pods-FaviconFinder_Tests"; - sourceTree = ""; - }; - E92A53F2C0308DE3D2628E7D494E7A5B /* Pod */ = { - isa = PBXGroup; - children = ( - 1BA807BD869B9DC43511DFA0EEA60E3F /* FaviconFinder.podspec */, - 80F75A59FF01CC64B720E9DF705711FE /* LICENSE.txt */, - E28B3A3038C0F560B07D186EC2685BC5 /* README.md */, - ); - name = Pod; - sourceTree = ""; - }; - ECE7A2A3B3EBCE151D965E350A65B585 /* Toolbox */ = { - isa = PBXGroup; - children = ( - 9F5C1C8490FDB324A23A9B7DF8A1A4E2 /* FaviconURLRequest.swift */, - 6C92CD9A7D86765B09A9B0FABFDED173 /* Logger.swift */, - 33CF52C3AED86D557D50CAE3B8BF70FF /* Regex.swift */, - ); - path = Toolbox; - sourceTree = ""; - }; - F09304C6384C7F9992344F93D008D329 /* SwiftSoup */ = { - isa = PBXGroup; - children = ( - 9891CE73C9557E0F7F1D139768C15C97 /* ArrayExt.swift */, - 41510B89CE8291C3678DB82F93D4AD77 /* Attribute.swift */, - 7ABECEE739D44AFA6D22F1939016F522 /* Attributes.swift */, - 9755DCFD73E4491367384250BAA9258C /* BinarySearch.swift */, - 6CBAD9ABEC2C6A097B6E4B373CA2F18B /* BooleanAttribute.swift */, - 6DF129D1EFCA7F37D1AC9804585C61BD /* CharacterExt.swift */, - 92C0D314301E00E7C3918532960F3DEA /* CharacterReader.swift */, - F67872D56E0E1F8E79F8E1C4BBB851C0 /* Cleaner.swift */, - 645311ED531D62F4760E40ED9E11D200 /* Collector.swift */, - 5DED926B23F8120975F8E1AB63DDD34B /* CombiningEvaluator.swift */, - 575C8AE3BB2470696D264C739FDB2597 /* Comment.swift */, - 994B9FB4863A6C4A146DABE171EF2B42 /* Connection.swift */, - 0615288FF10296393839B111562D6F22 /* CssSelector.swift */, - A3449BB90781627254A26AE3462B2641 /* DataNode.swift */, - F067C325F73CE827CCDF35B43153E34D /* DataUtil.swift */, - 555EEAE004EA043704A0CEDAB82F187C /* Document.swift */, - 1544DC46B9F50A6DF32483B8755AC4A7 /* DocumentType.swift */, - 85D08A9DBEA37BB5B07CED1DFE1D89BB /* Element.swift */, - 3716937BCAB6F0D36BD18C22AAD75E3C /* Elements.swift */, - 6C6221749FE01630EFFFAB745C39B0E7 /* Entities.swift */, - ABFAA586B8D8161288A22D5A6F9EBF61 /* Evaluator.swift */, - DE1C6BDD764751D36451D37373DD1DEF /* Exception.swift */, - 2CC21078D54B4985C4FB7971F220426D /* FormElement.swift */, - 8B990A502308EFA35B277BA915C5EE80 /* HtmlTreeBuilder.swift */, - B7EEBC313F3D4208CC18678030B2665D /* HtmlTreeBuilderState.swift */, - E2171D26BA1499C60846762A42B0FDDB /* HttpStatusException.swift */, - 7FFCBFA2B10F943E91AF7B1DFB6EC549 /* Node.swift */, - AF1CD91B058A8B7BF2AA6E98552034AB /* NodeTraversor.swift */, - 4DE888AB4C5D7864C698244A0A478184 /* NodeVisitor.swift */, - 179A888C4C7AB464643A7CE7357EAC15 /* OrderedSet.swift */, - 8438DAC514BED7A92346E28A96E93ED1 /* ParseError.swift */, - D1B9DD2542D07848C393D8712F398C2D /* ParseErrorList.swift */, - BB08FAD924516DEBE0DD23CE6A466FEB /* Parser.swift */, - C0EDBF0A1EDEAFFEF4B3F049DDC612C0 /* ParseSettings.swift */, - 347FD70CAA199954EDF07FDB9DAD6470 /* Pattern.swift */, - 307B5D2FA19A0E93748A39CA7BF48236 /* QueryParser.swift */, - CCF3EBC48AF26319981AF5EC1CC7EAAB /* SerializationException.swift */, - A055EA2C6D90C2AABC28671A400F6B9A /* SimpleDictionary.swift */, - 695AB5456742D2C28AEA348C72E41A0A /* StreamReader.swift */, - 8F382A218DFD40FA14F05DF911340D81 /* String.swift */, - 23174E66D21709BBE2A289D0B6BB4519 /* StringBuilder.swift */, - 3A1A5A356A785F5DDE2E8771C3FEEA65 /* StringUtil.swift */, - 1C974F3AD02EE46AB341F415C8B643F2 /* StructuralEvaluator.swift */, - 7DE35DEEAAE4A4C2D430A4D83B2381AF /* SwiftSoup.swift */, - 9AFD450145076BFA310955A3F7772BDE /* Tag.swift */, - BDDBD0CBD546005C62F1B6C5FFD456DE /* TextNode.swift */, - CA17CA6EE894C8217179C10C0610DC40 /* Token.swift */, - 45C3B93B04E7828E6B5F6FB96A4B008F /* Tokeniser.swift */, - B55302528FE9453EB3BB90D1FA877126 /* TokeniserState.swift */, - D041F34FDA87540234D179D19FDD61A9 /* TokenQueue.swift */, - 47C095A47F4007A71D72667867D375BE /* TreeBuilder.swift */, - 4FF42B561FAD3CF0F9A3AC0C7CB1D786 /* UnicodeScalar.swift */, - 32E464FDCE65CBC8BD5EC4241540A577 /* Validate.swift */, - D6EF644594CFD497AC5D715EFA250703 /* Whitelist.swift */, - 50C213B5781CE2EE6968721B56BBD18B /* XmlDeclaration.swift */, - E5FA55E0DC71B20C04C1218F4829CA26 /* XmlTreeBuilder.swift */, - BBC7567A00D04E66B4FE7E2775076C41 /* Support Files */, - ); - path = SwiftSoup; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 403173A130BC16A9DAEBD1FD75007B94 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 747406DCCBDE666A4F3EFDE3F53BCCBF /* FaviconFinder-iOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 41B70763FA6FF9305C44EA53192D5DF4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 563035CC067C633E3926B9D84B3C1310 /* Pods-FaviconFinder_Example-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4CA9FA0953EFAC9F2548DF2ACE9E802D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 7779480BDC3E7187D67950EF8544FB84 /* SwiftSoup-iOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 612CA4E21B1DB06CACE7B9B5A0588AB5 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 5EC9AE6ED0584B5DAB168DAA686BEF2E /* SwiftSoup-macOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9C59A695D494A9D32766C839BF42B5A4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 41128B895DF662F4779DB20BD8809F0C /* FaviconFinder-macOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9EC54E8E786F0BFE01D9DA7FB64F4E9F /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 58A04CA1ABECE44C7486808D922476DF /* Pods-FaviconFinder_iOS_Example-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F24084E4DA9098505DF4831055EA6F0C /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - E3B61BE306D15D3B3616588C13F081B9 /* Pods-FaviconFinder_Tests-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 60C8A9BFB14C8675E40A980CF21960F6 /* Pods-FaviconFinder_iOS_Example */ = { - isa = PBXNativeTarget; - buildConfigurationList = 64E1806F9AF4119FBC61F9FB5491FC1A /* Build configuration list for PBXNativeTarget "Pods-FaviconFinder_iOS_Example" */; - buildPhases = ( - 9EC54E8E786F0BFE01D9DA7FB64F4E9F /* Headers */, - EFFB5403D603E1EDC018DEBCA51D04B1 /* Sources */, - B1C49071263F7B8AE8CF6B6A832763D4 /* Frameworks */, - B199D297BE17398E871708428D19E248 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - DBCEE17AA304CB1E279519FEF8804087 /* PBXTargetDependency */, - 39C3AA84172FAB39A09DE78F0FB5B49D /* PBXTargetDependency */, - ); - name = "Pods-FaviconFinder_iOS_Example"; - productName = Pods_FaviconFinder_iOS_Example; - productReference = 01F1E1E0985239AE23172AD9707CD43A /* Pods_FaviconFinder_iOS_Example.framework */; - productType = "com.apple.product-type.framework"; - }; - 764C59316C237D86F0E7E6065F523FF6 /* FaviconFinder-iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 82FAD9339F691F97465AFA4D8439FF55 /* Build configuration list for PBXNativeTarget "FaviconFinder-iOS" */; - buildPhases = ( - 403173A130BC16A9DAEBD1FD75007B94 /* Headers */, - 2643E323B8AD5A221C40E2A404A09364 /* Sources */, - 479664702C549D12ECFDE3AB2473A321 /* Frameworks */, - 4427F11A7555C86A9DC715F51E60FBD4 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 035A5366F6C1619B316F045583267252 /* PBXTargetDependency */, - ); - name = "FaviconFinder-iOS"; - productName = FaviconFinder; - productReference = 83E54A3F599E152CCBAFC8897F5E497C /* FaviconFinder.framework */; - productType = "com.apple.product-type.framework"; - }; - 87AB35C2C25A0D974E382A4C2C6B35D3 /* SwiftSoup-macOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = C80B2D30474A1822D94E2CE7F8FA13EA /* Build configuration list for PBXNativeTarget "SwiftSoup-macOS" */; - buildPhases = ( - 612CA4E21B1DB06CACE7B9B5A0588AB5 /* Headers */, - 8F84B45AFF4AA0C098342136D910990E /* Sources */, - 7BE2D2B748EA2E9377BA3D155B3125DD /* Frameworks */, - C1EF29DDB8FB1DFF28AFAA86E812ABC7 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "SwiftSoup-macOS"; - productName = SwiftSoup; - productReference = C456AFA3E1D8D4ADB363F8928A9B0551 /* SwiftSoup.framework */; - productType = "com.apple.product-type.framework"; - }; - A1D4A8EEB7F202C90E457B2F3FD09EFC /* Pods-FaviconFinder_Example */ = { - isa = PBXNativeTarget; - buildConfigurationList = 50B7E27289EA3347EAA06379B44819E0 /* Build configuration list for PBXNativeTarget "Pods-FaviconFinder_Example" */; - buildPhases = ( - 41B70763FA6FF9305C44EA53192D5DF4 /* Headers */, - 46260B3B4CD9562FD9AFA70E05D69CE2 /* Sources */, - 072A29ED71A03084B12EA69F6354C13E /* Frameworks */, - 6BAA1FD4600ED63353C9EF4407795BAF /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - C889AD41849E7F410DE33831A243C6EB /* PBXTargetDependency */, - 7905C1C5ACF42509998CAB9E4DD4EC42 /* PBXTargetDependency */, - ); - name = "Pods-FaviconFinder_Example"; - productName = Pods_FaviconFinder_Example; - productReference = 2D4508B27B3C1D0A2C9760B23DA576DB /* Pods_FaviconFinder_Example.framework */; - productType = "com.apple.product-type.framework"; - }; - B974AD9B0F92206CF4FDC93F59EFF6F6 /* FaviconFinder-macOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = D503AE53A55F44695E23756FE0A8E2A8 /* Build configuration list for PBXNativeTarget "FaviconFinder-macOS" */; - buildPhases = ( - 9C59A695D494A9D32766C839BF42B5A4 /* Headers */, - 5A0679F231DAEACDE48301848DA2B872 /* Sources */, - A666317137F7FABB6438F6531443F8E9 /* Frameworks */, - 6CAD2F4CED4B44FC60292AC269729095 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - A4FE0241250F3EF886B2AA7E8D515314 /* PBXTargetDependency */, - ); - name = "FaviconFinder-macOS"; - productName = FaviconFinder; - productReference = E8C85A2BC930F1EA27A3E7F6D427B44D /* FaviconFinder.framework */; - productType = "com.apple.product-type.framework"; - }; - D9B8DB9CB287820107F813D05015ACF2 /* SwiftSoup-iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 39F75BA907077CB119F58A3BCCBFC5B7 /* Build configuration list for PBXNativeTarget "SwiftSoup-iOS" */; - buildPhases = ( - 4CA9FA0953EFAC9F2548DF2ACE9E802D /* Headers */, - 2274F1694C25308EA2A24FABC5647CCD /* Sources */, - D00696D1B731FEF37C23529F032A3233 /* Frameworks */, - C4F5B6031B206B4533C2BF31B44A6991 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "SwiftSoup-iOS"; - productName = SwiftSoup; - productReference = 87D341D94E293658DD1A46E17DD5119F /* SwiftSoup.framework */; - productType = "com.apple.product-type.framework"; - }; - E1D363F11D12D5E614861FDB7B09F071 /* Pods-FaviconFinder_Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 2E1BCDF0DEE973094390A6D9E1F78463 /* Build configuration list for PBXNativeTarget "Pods-FaviconFinder_Tests" */; - buildPhases = ( - F24084E4DA9098505DF4831055EA6F0C /* Headers */, - BC044503FFC0FECB3E9C15480DAC388F /* Sources */, - BB98B535E5881BEED4BAB9D9122F68CA /* Frameworks */, - AE4DFDFF52AA32FA3ABD92026A19226E /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 4A3BAD8432B7EE9D717A917F7FF18C09 /* PBXTargetDependency */, - 4805B04517D4E4209C58CB4A1A2E77E5 /* PBXTargetDependency */, - 54A1B4102089A102400A20F9857339D6 /* PBXTargetDependency */, - ); - name = "Pods-FaviconFinder_Tests"; - productName = Pods_FaviconFinder_Tests; - productReference = 4D5AECC180C3A849273EF8D717BA0C4E /* Pods_FaviconFinder_Tests.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BFDFE7DC352907FC980B868725387E98 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1240; - LastUpgradeCheck = 1340; - }; - buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 8.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - Base, - en, - ); - mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = B36BC037ED17AC74F6A5E28B72921999 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 764C59316C237D86F0E7E6065F523FF6 /* FaviconFinder-iOS */, - B974AD9B0F92206CF4FDC93F59EFF6F6 /* FaviconFinder-macOS */, - A1D4A8EEB7F202C90E457B2F3FD09EFC /* Pods-FaviconFinder_Example */, - 60C8A9BFB14C8675E40A980CF21960F6 /* Pods-FaviconFinder_iOS_Example */, - E1D363F11D12D5E614861FDB7B09F071 /* Pods-FaviconFinder_Tests */, - D9B8DB9CB287820107F813D05015ACF2 /* SwiftSoup-iOS */, - 87AB35C2C25A0D974E382A4C2C6B35D3 /* SwiftSoup-macOS */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 4427F11A7555C86A9DC715F51E60FBD4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6BAA1FD4600ED63353C9EF4407795BAF /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6CAD2F4CED4B44FC60292AC269729095 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AE4DFDFF52AA32FA3ABD92026A19226E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B199D297BE17398E871708428D19E248 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C1EF29DDB8FB1DFF28AFAA86E812ABC7 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C4F5B6031B206B4533C2BF31B44A6991 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 2274F1694C25308EA2A24FABC5647CCD /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9DC0F3CD67840A890AD982EDE888D4E7 /* ArrayExt.swift in Sources */, - 4627C94E0B64C98CDF37ED940B5A4D7D /* Attribute.swift in Sources */, - 0F71E654ECB6758021BC5569C1F85B45 /* Attributes.swift in Sources */, - 5A02A1B616A1B5C4C466F53D59CFFDDC /* BinarySearch.swift in Sources */, - 614A5928DD9B0BD3BE482F9769E738F9 /* BooleanAttribute.swift in Sources */, - 0C9776C6F518C7AA920904207BA0CB71 /* CharacterExt.swift in Sources */, - DD432DEE8ABAAE3E919044853D361A5E /* CharacterReader.swift in Sources */, - 0B21AF5CCAE177968888916A224D5BC1 /* Cleaner.swift in Sources */, - A33C4611FB834A3C0A5C6227ECFCD1EF /* Collector.swift in Sources */, - 57AE16EECE7E4BAE82A44A9BE3FE6558 /* CombiningEvaluator.swift in Sources */, - 36B192B628304318FD026D087E6661A0 /* Comment.swift in Sources */, - D3129B47F1C78A8A1F29130F8E578ED5 /* Connection.swift in Sources */, - 10A06D309613CC1938FB075E2872F480 /* CssSelector.swift in Sources */, - A2D8CC1A29AE79C424B4E0A374098529 /* DataNode.swift in Sources */, - DE478F70A54C43456B974DB2F254EBC7 /* DataUtil.swift in Sources */, - F9251FDC3EF08A66E525271322FA7145 /* Document.swift in Sources */, - CFD7EA659B3A002BEFFCE25C3AADEEDB /* DocumentType.swift in Sources */, - 5D14CBD8D51EE8680D83A7A6F03E2C89 /* Element.swift in Sources */, - BFCCF2DE0A5602A78E3E16627C1B5BC6 /* Elements.swift in Sources */, - 1E43C8A8B4FEAF194B8E34A3219CDB1D /* Entities.swift in Sources */, - 5FDA29E81666B1184C54C3598FFB3DC1 /* Evaluator.swift in Sources */, - A54615FC5BDF5A51C2801C7F89B6AE91 /* Exception.swift in Sources */, - 42A22EABF1544841FF8D1E6A658D8160 /* FormElement.swift in Sources */, - 0F6D3528CA417853059FF1F69E1F4C71 /* HtmlTreeBuilder.swift in Sources */, - 9574BFCB5DB7A0CBCF18250799C39580 /* HtmlTreeBuilderState.swift in Sources */, - 7C2734E214D7CB43D0557FDC5E0ABCAA /* HttpStatusException.swift in Sources */, - A34A14FC3B27B4D84AA69C35BAA86DA6 /* Node.swift in Sources */, - 76F79C0E699C3D4B25092AE1244DFD23 /* NodeTraversor.swift in Sources */, - 93E07F29B508A20450711B017AAB1F92 /* NodeVisitor.swift in Sources */, - 46BFCF825186B3C53C669FEF958F3EB4 /* OrderedSet.swift in Sources */, - F6CF51687B559E5647BEED555E7ADA87 /* ParseError.swift in Sources */, - F2E267A6B64B01CD486E6A4BF2CC8BE9 /* ParseErrorList.swift in Sources */, - C8A965CD428816127EBA95571F1723C0 /* Parser.swift in Sources */, - E2FD5E6CF853789B4B519A9EBE898CFA /* ParseSettings.swift in Sources */, - DF958B5633A2E0E9B71608A15CC79902 /* Pattern.swift in Sources */, - FBFBEC076494561E3A92A226F6EB43A5 /* QueryParser.swift in Sources */, - 48472539191E154CDB36CE54F58E11DD /* SerializationException.swift in Sources */, - A478F9F332A80F8930959782EB4D8A17 /* SimpleDictionary.swift in Sources */, - 4BD5AACCA19B393EC31FC96CC3371AAF /* StreamReader.swift in Sources */, - 43238AF083EC4DC8BEAE621DE3FAA66B /* String.swift in Sources */, - 9A4923B6E9CCAC69158DD8022D28BE34 /* StringBuilder.swift in Sources */, - CDB71404634DE6022B52AD4AF18EA7A4 /* StringUtil.swift in Sources */, - D1C54A8F07F130C401B87D01CB4855FC /* StructuralEvaluator.swift in Sources */, - 816123A3D60B6EB90453CBF0D52E7BD7 /* SwiftSoup.swift in Sources */, - 0CC20CC37A6EDFC10C4FDBB4FA997914 /* SwiftSoup-iOS-dummy.m in Sources */, - 6203E7A0BA873777ABB9D9D1E296863F /* Tag.swift in Sources */, - C2539A8CC965879B0AA0AD8EC3FAEA3B /* TextNode.swift in Sources */, - FCA257B287ADAF1D96FA871C9DEDEEF4 /* Token.swift in Sources */, - CF8E355BFBCD563BE9BE12A72E6B98E2 /* Tokeniser.swift in Sources */, - 24D3CE00A39588AAFA1F93CC31BB9929 /* TokeniserState.swift in Sources */, - F86E82E6BBD7F85C6F2E52B17034C7F5 /* TokenQueue.swift in Sources */, - 2EBA0C33A29095E19D1277EB5C2B2AD5 /* TreeBuilder.swift in Sources */, - E70346537E7FBAFAE77359356B75BB82 /* UnicodeScalar.swift in Sources */, - B6B544062946877925A792FB632779F6 /* Validate.swift in Sources */, - 4B10FB01F5CEA6868139BA78AEB35FB2 /* Whitelist.swift in Sources */, - 692ED645AE40B332F3B762819D2E1584 /* XmlDeclaration.swift in Sources */, - CD6AF29F15F7821F6530B37E9278BCD2 /* XmlTreeBuilder.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2643E323B8AD5A221C40E2A404A09364 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B352CBEFF1D5D48DC2AC56AA004DAA1A /* Favicon.swift in Sources */, - 285A613A30FF908698EE769CED60B53E /* FaviconDownloadType.swift in Sources */, - 0C3AAFB7413BCA1E0369486A2C23BA06 /* FaviconError.swift in Sources */, - BE580AA62878458E00A7DE22 /* URLResponse+StringEncoding.swift in Sources */, - 4FEE1242F5DC2FCA259C441CA1DDAA6A /* FaviconFinder.swift in Sources */, - D4D3F8E560D894F23C823EDBAEB3F0DA /* FaviconFinder-iOS-dummy.m in Sources */, - 89CDF006596D8FF26CCF4D8353A0F736 /* FaviconFinderProtocol.swift in Sources */, - 4AEE1E919EC8C724E313867D188A0F24 /* FaviconType.swift in Sources */, - 800AE10A4FC19227B8EF534C455C906C /* FaviconURL.swift in Sources */, - 3CB7AF7E98BD8F14231E3C7C79942FB0 /* FaviconURLRequest.swift in Sources */, - A1345DB30F8417513D1D06988C49F95E /* HTMLFaviconFinder.swift in Sources */, - 30E584F971896CF855F499D6BD3E9C34 /* ICOFaviconFinder.swift in Sources */, - B11A881C1B371DBEFE6B5BA345DCECE5 /* Logger.swift in Sources */, - 29681FDE123D02E573D6C760F5F685FD /* Regex.swift in Sources */, - 5BCB22EDEF249DFBBBFED63107E0CCCD /* String+Removals.swift in Sources */, - F18DAD8BB7B1FA360A430B92C12A32C8 /* URL+Parsing.swift in Sources */, - 9208D81E49253BBD4EE8850EE5A26A59 /* WebApplicationManifestFaviconFinder.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 46260B3B4CD9562FD9AFA70E05D69CE2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3E984E46669A236DA3D743306981284C /* Pods-FaviconFinder_Example-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5A0679F231DAEACDE48301848DA2B872 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C311A6106D14B9D7AD0A90F338DEBA2A /* Favicon.swift in Sources */, - AEF54242A5C1B6EFEB0A82A48C059FF8 /* FaviconDownloadType.swift in Sources */, - 47C06781755059B950864A3C7102C08B /* FaviconError.swift in Sources */, - BE580AA72878458E00A7DE22 /* URLResponse+StringEncoding.swift in Sources */, - 9F141D2248B5D64C36AE46C0CCF77E83 /* FaviconFinder.swift in Sources */, - 714421C28AED549E3D74F2503F984F89 /* FaviconFinder-macOS-dummy.m in Sources */, - 5F768F0324BCDDBAD07621B4A3A61233 /* FaviconFinderProtocol.swift in Sources */, - 8D10925E626EA0F913138F4139C4BBDB /* FaviconType.swift in Sources */, - 82447AD935D35F52D1F654CA7BBABAA8 /* FaviconURL.swift in Sources */, - 11386376F148F911D73FA0D48E0752CF /* FaviconURLRequest.swift in Sources */, - CF7EAB726014D5979629AEF562CCB9BB /* HTMLFaviconFinder.swift in Sources */, - 9B6D6CFF6FCD37F922F5E5CD9F822066 /* ICOFaviconFinder.swift in Sources */, - 40A83BAB0698A508ACA8159D6D45171C /* Logger.swift in Sources */, - 494480B3B23A9D9CC95957265C2BE645 /* Regex.swift in Sources */, - 65E712B15AE2EFC41984D7CD03974E9C /* String+Removals.swift in Sources */, - 7FFBA76E0D2745216BBA1BE614BB3C29 /* URL+Parsing.swift in Sources */, - 31940E83AE83FFD049521FEA9D1EDA56 /* WebApplicationManifestFaviconFinder.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8F84B45AFF4AA0C098342136D910990E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 16A4223ECBEE83ED7490F19F5C7BDB38 /* ArrayExt.swift in Sources */, - 22E07B2471F1B760F3D74F8863494DDE /* Attribute.swift in Sources */, - 9182D836A11BC661B9E846B00704DC75 /* Attributes.swift in Sources */, - D01A92459F14854501BACE01C4E8EEE5 /* BinarySearch.swift in Sources */, - 24088E4512F0ACE27AF06ABED9D6FB26 /* BooleanAttribute.swift in Sources */, - 306D95EA9CC51C81357E9A7014E67BEA /* CharacterExt.swift in Sources */, - 1BE0665F47920FDE14F58940876DE899 /* CharacterReader.swift in Sources */, - A2D9AFC495EE6CD783E79BC7773EB2A9 /* Cleaner.swift in Sources */, - 7FD021C667AA0246DAF139ABF73368A5 /* Collector.swift in Sources */, - D3444B8CE318863399A3F0EF39FB589F /* CombiningEvaluator.swift in Sources */, - BB112C7C5E2160D57903035AAFBE8D80 /* Comment.swift in Sources */, - 5A8F944E7054152368E296167BA46609 /* Connection.swift in Sources */, - ED9746890D065ECBB82320A394C32684 /* CssSelector.swift in Sources */, - 2578C680A6635D052C241010C43F428A /* DataNode.swift in Sources */, - 1FAB21D0EF0982370C584CFFC1627B6B /* DataUtil.swift in Sources */, - EA50259B35A3EB355B0D1156D534913F /* Document.swift in Sources */, - 992204CC9A346831865193C0A383EA76 /* DocumentType.swift in Sources */, - A5683FCB364E20F571FACDADFE176FFC /* Element.swift in Sources */, - DCB5186BC787000D4696530D8F526A9B /* Elements.swift in Sources */, - 92D1BD742FCB28AA6D7AD13DEDE1CAE1 /* Entities.swift in Sources */, - 595700C951218B97835A398F41029FBC /* Evaluator.swift in Sources */, - 3B7F8988EE81D244C6D972696D44AB31 /* Exception.swift in Sources */, - 3A3EA19E07050D5B1A873B90EEC36860 /* FormElement.swift in Sources */, - 8EE2342894C3DC57C458E5D3FC7899B4 /* HtmlTreeBuilder.swift in Sources */, - 0A0AB3AD5AE93AC2C88FEC47F58EFF7B /* HtmlTreeBuilderState.swift in Sources */, - 962A1B1D0CD543D39CCF9F9599280448 /* HttpStatusException.swift in Sources */, - 31F70DE79E2A5BAC1AEBFDF3721ECE66 /* Node.swift in Sources */, - E343C2FDA2BC7C072F88C4B02069FA9B /* NodeTraversor.swift in Sources */, - AC8B4BFEBBBF0B9F539BF48201ECF4CF /* NodeVisitor.swift in Sources */, - 3958E6984A36795C2C2B8A8213FE079B /* OrderedSet.swift in Sources */, - F9B83E5F11292D43A9E6F3753040AEF0 /* ParseError.swift in Sources */, - 190840B1E66D890280889B42A930A8E3 /* ParseErrorList.swift in Sources */, - 981BFB03A8F3B2C9E89AA18B53DDFC6E /* Parser.swift in Sources */, - A6A1411C6C56D9CF72C101D749CCD3F7 /* ParseSettings.swift in Sources */, - 7BC818BF91DFC31F379092CCE88F13FE /* Pattern.swift in Sources */, - 6C0BD6490BD0DE4ABD0E76C8059FBC91 /* QueryParser.swift in Sources */, - 024A098FAABC9BD5FE5C1DEFA9A6009E /* SerializationException.swift in Sources */, - 9548D598835C425E9A3AF2037A09E7B8 /* SimpleDictionary.swift in Sources */, - 02F60A3FCE52747101927BA1344EC0DA /* StreamReader.swift in Sources */, - 9907D1B839C34A9BB923868524EA76AA /* String.swift in Sources */, - 9D53681D8F6BFCC0D2F39D7F3C53D3B5 /* StringBuilder.swift in Sources */, - 945A7DCFA12691CE13E15A81B4413220 /* StringUtil.swift in Sources */, - 74548F6A8EB6B31C5DF2F1ACEC68A04B /* StructuralEvaluator.swift in Sources */, - BAC3414F9AE9CDFC61E3743077CC52E0 /* SwiftSoup.swift in Sources */, - 664CD16CC32B7749873A01FA32D1C06D /* SwiftSoup-macOS-dummy.m in Sources */, - AA16D38F023CE29DAE8347E6AC2B180A /* Tag.swift in Sources */, - AE676B8AE088E0B06C025C525BAD669B /* TextNode.swift in Sources */, - 6DC79B3A3BFE01CF0EAC9D96E53099A6 /* Token.swift in Sources */, - C98AD1E4D0A54FBA88D081656F02494F /* Tokeniser.swift in Sources */, - BBFE8C5233C99DE8F929CDB54CAFD3AB /* TokeniserState.swift in Sources */, - 149DB3EE4F3B7061E0694C63C5EF680D /* TokenQueue.swift in Sources */, - F507D2AE6F99722525F7DD6149240E77 /* TreeBuilder.swift in Sources */, - 5DA2745362DE0A1D62E4BD43297F5498 /* UnicodeScalar.swift in Sources */, - DBAF2BACF7ED2B477155D7C8D0DD00F8 /* Validate.swift in Sources */, - 6289F7C6A94B3DDD620E3830344EF384 /* Whitelist.swift in Sources */, - 377D339F5F72FFE411B7BEFAE36F5328 /* XmlDeclaration.swift in Sources */, - B8ABBBE5149F59923CB41C4D0E014643 /* XmlTreeBuilder.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BC044503FFC0FECB3E9C15480DAC388F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1C091EE559DBE640C212117617A1A0AF /* Pods-FaviconFinder_Tests-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EFFB5403D603E1EDC018DEBCA51D04B1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FE2271B93A103EAE9878D65C3D85FD86 /* Pods-FaviconFinder_iOS_Example-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 035A5366F6C1619B316F045583267252 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SwiftSoup-iOS"; - target = D9B8DB9CB287820107F813D05015ACF2 /* SwiftSoup-iOS */; - targetProxy = F91D22C731A06DDE3E43679FDEBA2E07 /* PBXContainerItemProxy */; - }; - 39C3AA84172FAB39A09DE78F0FB5B49D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SwiftSoup-iOS"; - target = D9B8DB9CB287820107F813D05015ACF2 /* SwiftSoup-iOS */; - targetProxy = 7DDF80EB1086359BDD2F4FF1E66D9109 /* PBXContainerItemProxy */; - }; - 4805B04517D4E4209C58CB4A1A2E77E5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Pods-FaviconFinder_Example"; - target = A1D4A8EEB7F202C90E457B2F3FD09EFC /* Pods-FaviconFinder_Example */; - targetProxy = 017DA242D4C1088C267B9CCFAD1D4E98 /* PBXContainerItemProxy */; - }; - 4A3BAD8432B7EE9D717A917F7FF18C09 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "FaviconFinder-macOS"; - target = B974AD9B0F92206CF4FDC93F59EFF6F6 /* FaviconFinder-macOS */; - targetProxy = B7685182AF0FDBB1162144E398BD4026 /* PBXContainerItemProxy */; - }; - 54A1B4102089A102400A20F9857339D6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SwiftSoup-macOS"; - target = 87AB35C2C25A0D974E382A4C2C6B35D3 /* SwiftSoup-macOS */; - targetProxy = 86C6FC87D0746DFC1DB6078CC963E569 /* PBXContainerItemProxy */; - }; - 7905C1C5ACF42509998CAB9E4DD4EC42 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SwiftSoup-macOS"; - target = 87AB35C2C25A0D974E382A4C2C6B35D3 /* SwiftSoup-macOS */; - targetProxy = E3A8D2C1456416B265F97036997C3AA4 /* PBXContainerItemProxy */; - }; - A4FE0241250F3EF886B2AA7E8D515314 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SwiftSoup-macOS"; - target = 87AB35C2C25A0D974E382A4C2C6B35D3 /* SwiftSoup-macOS */; - targetProxy = 6401237D68AE1BEBB861E04A28DA00FF /* PBXContainerItemProxy */; - }; - C889AD41849E7F410DE33831A243C6EB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "FaviconFinder-macOS"; - target = B974AD9B0F92206CF4FDC93F59EFF6F6 /* FaviconFinder-macOS */; - targetProxy = 8507F14CB2C91C6960F483D03E9F07FE /* PBXContainerItemProxy */; - }; - DBCEE17AA304CB1E279519FEF8804087 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "FaviconFinder-iOS"; - target = 764C59316C237D86F0E7E6065F523FF6 /* FaviconFinder-iOS */; - targetProxy = 193ED1B41BB989F70F5EEFDE8ED57C7F /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 129DAB0DC66CA24C44CF4FD929B5E9D8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 29E8E06578F90D9D08FEECEC23FC0B33 /* SwiftSoup-macOS.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MODULEMAP_FILE = "Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.modulemap"; - PRODUCT_MODULE_NAME = SwiftSoup; - PRODUCT_NAME = SwiftSoup; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 23A01ABD5607A1F93964BFB490E55230 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 29CAE34DEA444CE23E9E30F90C655A8A /* Pods-FaviconFinder_iOS_Example.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"; - INFOPLIST_FILE = "Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-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-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.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; - }; - 30527B52A3245407AEDD36FD104D7FD4 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8031035D9C171767CA3D88684089F73F /* Pods-FaviconFinder_Example.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = "Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 3E3443CC7DD04AD1CFC452B5A88AADDE /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 86CC726BD22450D22A11376E9E5884EA /* Pods-FaviconFinder_iOS_Example.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"; - INFOPLIST_FILE = "Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-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-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.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; - }; - 50F1083082838AA46D0EBC162223506E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EC91ACB88E008CFEAA225093977D0711 /* SwiftSoup-macOS.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MODULEMAP_FILE = "Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.modulemap"; - PRODUCT_MODULE_NAME = SwiftSoup; - PRODUCT_NAME = SwiftSoup; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 6A0F54067E296143503663E808F0BD01 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 05DDAE01413AAC3E295B4DCCD2F6C607 /* Pods-FaviconFinder_Tests.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = "Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 6C85647F9B051B8207061377D4FED462 /* 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; - MACOSX_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - 8D4CD5066004846272C027F829515186 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AB0033C54D58B162E33482866B875687 /* FaviconFinder-macOS.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = "Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.modulemap"; - PRODUCT_MODULE_NAME = FaviconFinder; - PRODUCT_NAME = FaviconFinder; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8F166692CDD98A0C156EE67A7CAABBEF /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6F6068A90AE168C010945654F4C1D874 /* FaviconFinder-iOS.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"; - GCC_PREFIX_HEADER = "Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-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/FaviconFinder-iOS/FaviconFinder-iOS.modulemap"; - PRODUCT_MODULE_NAME = FaviconFinder; - PRODUCT_NAME = FaviconFinder; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - ACAB19F4B12817D05D634BDB1AECB12F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4E0F4C4320390F45C2F4955635BADB84 /* FaviconFinder-macOS.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = "Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.modulemap"; - PRODUCT_MODULE_NAME = FaviconFinder; - PRODUCT_NAME = FaviconFinder; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - B6E0F06267E93D26D63183394E50147F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 40245A37FE78049C180FC4714B211962 /* FaviconFinder-iOS.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"; - GCC_PREFIX_HEADER = "Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-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/FaviconFinder-iOS/FaviconFinder-iOS.modulemap"; - PRODUCT_MODULE_NAME = FaviconFinder; - PRODUCT_NAME = FaviconFinder; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - CC290B3D29F275265A0B4C2913963F7D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A72C79612158960A5FD40277685427D9 /* SwiftSoup-iOS.debug.xcconfig */; - buildSettings = { - "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"; - GCC_PREFIX_HEADER = "Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.modulemap"; - PRODUCT_MODULE_NAME = SwiftSoup; - PRODUCT_NAME = SwiftSoup; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - CC50521F3E5D9987B9BBF75C90041712 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CE3BD4230C792CBE9807D2FF2982B6D9 /* Pods-FaviconFinder_Example.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = "Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - E7458FE0A05F92D9C1E44CC0CF1D1072 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1B9B924DDF35ED5BC47A63B8DE3C9BB1 /* Pods-FaviconFinder_Tests.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = "Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - EB17D8DF20FC5638F2D99522D491151A /* 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; - MACOSX_DEPLOYMENT_TARGET = 12.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; - }; - F82C9BE36EED0379205CB61F7DEA9F83 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BBC76ADB84C4197270FCDDB1CDBD62CD /* SwiftSoup-iOS.release.xcconfig */; - buildSettings = { - "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"; - GCC_PREFIX_HEADER = "Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.modulemap"; - PRODUCT_MODULE_NAME = SwiftSoup; - PRODUCT_NAME = SwiftSoup; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 2E1BCDF0DEE973094390A6D9E1F78463 /* Build configuration list for PBXNativeTarget "Pods-FaviconFinder_Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E7458FE0A05F92D9C1E44CC0CF1D1072 /* Debug */, - 6A0F54067E296143503663E808F0BD01 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 39F75BA907077CB119F58A3BCCBFC5B7 /* Build configuration list for PBXNativeTarget "SwiftSoup-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CC290B3D29F275265A0B4C2913963F7D /* Debug */, - F82C9BE36EED0379205CB61F7DEA9F83 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - EB17D8DF20FC5638F2D99522D491151A /* Debug */, - 6C85647F9B051B8207061377D4FED462 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 50B7E27289EA3347EAA06379B44819E0 /* Build configuration list for PBXNativeTarget "Pods-FaviconFinder_Example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CC50521F3E5D9987B9BBF75C90041712 /* Debug */, - 30527B52A3245407AEDD36FD104D7FD4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 64E1806F9AF4119FBC61F9FB5491FC1A /* Build configuration list for PBXNativeTarget "Pods-FaviconFinder_iOS_Example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 23A01ABD5607A1F93964BFB490E55230 /* Debug */, - 3E3443CC7DD04AD1CFC452B5A88AADDE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 82FAD9339F691F97465AFA4D8439FF55 /* Build configuration list for PBXNativeTarget "FaviconFinder-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B6E0F06267E93D26D63183394E50147F /* Debug */, - 8F166692CDD98A0C156EE67A7CAABBEF /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C80B2D30474A1822D94E2CE7F8FA13EA /* Build configuration list for PBXNativeTarget "SwiftSoup-macOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 129DAB0DC66CA24C44CF4FD929B5E9D8 /* Debug */, - 50F1083082838AA46D0EBC162223506E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D503AE53A55F44695E23756FE0A8E2A8 /* Build configuration list for PBXNativeTarget "FaviconFinder-macOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ACAB19F4B12817D05D634BDB1AECB12F /* Debug */, - 8D4CD5066004846272C027F829515186 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; -} diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/FaviconFinder-iOS.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/FaviconFinder-iOS.xcscheme deleted file mode 100755 index 5e35103..0000000 --- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/FaviconFinder-iOS.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/FaviconFinder-macOS.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/FaviconFinder-macOS.xcscheme deleted file mode 100755 index 7e1f607..0000000 --- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/FaviconFinder-macOS.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/FaviconFinder.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/FaviconFinder.xcscheme deleted file mode 100755 index 7ebc10e..0000000 --- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/FaviconFinder.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-FaviconFinder_Example.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-FaviconFinder_Example.xcscheme deleted file mode 100755 index e380339..0000000 --- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-FaviconFinder_Example.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-FaviconFinder_Tests.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-FaviconFinder_Tests.xcscheme deleted file mode 100755 index d870890..0000000 --- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-FaviconFinder_Tests.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-FaviconFinder_iOS_Example.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-FaviconFinder_iOS_Example.xcscheme deleted file mode 100755 index 44d860e..0000000 --- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-FaviconFinder_iOS_Example.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SwiftSoup-iOS.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SwiftSoup-iOS.xcscheme deleted file mode 100755 index 34dc655..0000000 --- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SwiftSoup-iOS.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SwiftSoup-macOS.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SwiftSoup-macOS.xcscheme deleted file mode 100755 index 5315d29..0000000 --- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SwiftSoup-macOS.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/Pods/SwiftSoup/LICENSE b/Example/Pods/SwiftSoup/LICENSE deleted file mode 100755 index ddeb6c9..0000000 --- a/Example/Pods/SwiftSoup/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 Nabil Chatbi - -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/Example/Pods/SwiftSoup/README.md b/Example/Pods/SwiftSoup/README.md deleted file mode 100755 index 23c28bd..0000000 --- a/Example/Pods/SwiftSoup/README.md +++ /dev/null @@ -1,595 +0,0 @@ -

- SwiftSoup -

- - -![Platform OS X | iOS | tvOS | watchOS | Linux](https://img.shields.io/badge/platform-Linux%20%7C%20OS%20X%20%7C%20iOS%20%7C%20tvOS%20%7C%20watchOS-orange.svg) -[![SPM compatible](https://img.shields.io/badge/SPM-compatible-4BC51D.svg?style=flat)](https://github.com/apple/swift-package-manager) -![🐧 linux: ready](https://img.shields.io/badge/%F0%9F%90%A7%20linux-ready-red.svg) -![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat) -[![Build Status](https://travis-ci.org/scinfu/SwiftSoup.svg?branch=master)](https://travis-ci.org/scinfu/SwiftSoup) -[![Version](https://img.shields.io/cocoapods/v/SwiftSoup.svg?style=flat)](http://cocoapods.org/pods/SwiftSoup) -[![License](https://img.shields.io/cocoapods/l/SwiftSoup.svg?style=flat)](http://cocoapods.org/pods/SwiftSoup) -[![Twitter](https://img.shields.io/badge/twitter-@scinfu-blue.svg?style=flat)](http://twitter.com/scinfu) - -`SwiftSoup` is a pure Swift library, cross-platform (macOS, iOS, tvOS, watchOS and Linux!), for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jQuery-like methods. -`SwiftSoup` implements the WHATWG HTML5 specification, and parses HTML to the same DOM as modern browsers do. -* Scrape and parse HTML from a URL, file, or string -* Find and extract data, using DOM traversal or CSS selectors -* Manipulate the HTML elements, attributes, and text -* Clean user-submitted content against a safe white-list, to prevent XSS attacks -* Output tidy HTML -`SwiftSoup` is designed to deal with all varieties of HTML found in the wild; from pristine and validating, to invalid tag-soup; `SwiftSoup` will create a sensible parse tree. -## Swift -Swift 5 ```>=2.0.0``` - -Swift 4.2 ```1.7.4``` - -## Installation - -### Cocoapods -SwiftSoup is available through [CocoaPods](http://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'SwiftSoup' -``` -### Carthage -SwiftSoup is also available through [Carthage](https://github.com/Carthage/Carthage). To install -it, simply add the following line to your Cartfile: - -```ruby -github "scinfu/SwiftSoup" -``` -### Swift Package Manager -SwiftSoup is also available through [Swift Package Manager](https://github.com/apple/swift-package-manager). -To install it, simply add the dependency to your Package.Swift file: - -```swift -... -dependencies: [ - .package(url: "https://github.com/scinfu/SwiftSoup.git", from: "1.7.4"), -], -targets: [ - .target( name: "YourTarget", dependencies: ["SwiftSoup"]), -] -... -``` - -## Try -### Try out the simple online CSS selectors site: -[SwiftSoup Test Site](https://swiftsoup.herokuapp.com/) - -### Try out the example project opening Terminal and type: -```shell -pod try SwiftSoup -``` -

- SwiftSoup - SwiftSoup -

- -# To parse an HTML document: - -```swift -do { - let html = "First parse" - + "

Parsed HTML into a doc.

" - let doc: Document = try SwiftSoup.parse(html) - return try doc.text() -} catch Exception.Error(let type, let message) { - print(message) -} catch { - print("error") -} -``` - -* Unclosed tags (e.g. `

Lorem

Ipsum` parses to `

Lorem

Ipsum

`) -* Implicit tags (e.g. a naked `Table data` is wrapped into a `
...`) -* Reliably creating the document structure (`html` containing a `head` and `body`, and only appropriate elements within the head) - - -### The object model of a document -* Documents consist of Elements and TextNodes -* The inheritance chain is: `Document` extends `Element` extends `Node.TextNode` extends `Node`. -* An Element contains a list of children Nodes, and has one parent Element. They also have provide a filtered list of child Elements only. - - - - -# Extract attributes, text, and HTML from elements -### Problem -After parsing a document, and finding some elements, you'll want to get at the data inside those elements. -### Solution -- To get the value of an attribute, use the `Node.attr(_ String key)` method -- For the text on an element (and its combined children), use `Element.text()` -- For HTML, use `Element.html()`, or `Node.outerHtml()` as appropriate - -```swift -do { - let html: String = "

An example link.

"; - let doc: Document = try SwiftSoup.parse(html) - let link: Element = try doc.select("a").first()! - - let text: String = try doc.body()!.text(); // "An example link" - let linkHref: String = try link.attr("href"); // "http://example.com/" - let linkText: String = try link.text(); // "example"" - - let linkOuterH: String = try link.outerHtml(); // "example" - let linkInnerH: String = try link.html(); // "example" -} catch Exception.Error(let type, let message) { - print(message) -} catch { - print("error") -} -``` - -### Description -The methods above are the core of the element data access methods. There are additional others: -- `Element.id()` -- `Element.tagName()` -- `Element.className()` and `Element.hasClass(_ String className)` - -All of these accessor methods have corresponding setter methods to change the data. - - - - - -# Parse a document from a String -### Problem -You have HTML in a Swift String, and you want to parse that HTML to get at its contents, or to make sure it's well formed, or to modify it. The String may have come from user input, a file, or from the web. -### Solution -Use the static `SwiftSoup.parse(_ html: String)` method, or `SwiftSoup.parse(_ html: String, _ baseUri: String)`. - -```swift -do { - let html = "First parse" - + "

Parsed HTML into a doc.

" - let doc: Document = try SwiftSoup.parse(html) - return try doc.text() -} catch Exception.Error(let type, let message) { - print("") -} catch { - print("") -} -``` -### Description -The `parse(_ html: String, _ baseUri: String)` method parses the input HTML into a new `Document`. The base URI argument is used to resolve relative URLs into absolute URLs, and should be set to the URL where the document was fetched from. If that's not applicable, or if you know the HTML has a base element, you can use the `parse(_ html: String)` method. - -As long as you pass in a non-null string, you're guaranteed to have a successful, sensible parse, with a Document containing (at least) a `head` and a `body` element. - -Once you have a `Document`, you can get at the data using the appropriate methods in `Document` and its supers `Element` and `Node`. - - - -# Parsing a body fragment -### Problem -You have a fragment of body HTML (e.g. `div` containing a couple of p tags; as opposed to a full HTML document) that you want to parse. Perhaps it was provided by a user submitting a comment, or editing the body of a page in a CMS. -### Solution -Use the `SwiftSoup.parseBodyFragment(_ html: String)` method. - -```swift -do { - let html: String = "

Lorem ipsum.

" - let doc: Document = try SwiftSoup.parseBodyFragment(html) - let body: Element? = doc.body() -} catch Exception.Error(let type, let message) { - print(message) -} catch { - print("error") -} -``` - -### Description -The `parseBodyFragment` method creates an empty shell document, and inserts the parsed HTML into the `body` element. If you used the normal `SwiftSoup(_ html: String)` method, you would generally get the same result, but explicitly treating the input as a body fragment ensures that any bozo HTML provided by the user is parsed into the `body` element. - -The `Document.body()` method retrieves the element children of the document's `body` element; it is equivalent to `doc.getElementsByTag("body")`. - -### Stay safe -If you are going to accept HTML input from a user, you need to be careful to avoid cross-site scripting attacks. See the documentation for the `Whitelist` based cleaner, and clean the input with `clean(String bodyHtml, Whitelist whitelist)`. - - - - - -# Sanitize untrusted HTML (to prevent XSS) -### Problem -You want to allow untrusted users to supply HTML for output on your website (e.g. as comment submission). You need to clean this HTML to avoid [cross-site scripting](https://en.wikipedia.org/wiki/Cross-site_scripting) (XSS) attacks. -### Solution -Use the SwiftSoup HTML `Cleaner` with a configuration specified by a `Whitelist`. - -```swift -do { - let unsafe: String = "

Link

" - let safe: String = try SwiftSoup.clean(unsafe, Whitelist.basic())! - // now:

Link

-} catch Exception.Error(let type, let message) { - print(message) -} catch { - print("error") -} -``` - -### Discussion -A cross-site scripting attack against your site can really ruin your day, not to mention your users'. Many sites avoid XSS attacks by not allowing HTML in user submitted content: they enforce plain text only, or use an alternative markup syntax like wiki-text or Markdown. These are seldom optimal solutions for the user, as they lower expressiveness, and force the user to learn a new syntax. - -A better solution may be to use a rich text WYSIWYG editor (like [CKEditor](http://ckeditor.com) or [TinyMCE](https://www.tinymce.com)). These output HTML, and allow the user to work visually. However, their validation is done on the client side: you need to apply a server-side validation to clean up the input and ensure the HTML is safe to place on your site. Otherwise, an attacker can avoid the client-side Javascript validation and inject unsafe HMTL directly into your site - -The SwiftSoup whitelist sanitizer works by parsing the input HTML (in a safe, sand-boxed environment), and then iterating through the parse tree and only allowing known-safe tags and attributes (and values) through into the cleaned output. - -It does not use regular expressions, which are inappropriate for this task. - -SwiftSoup provides a range of `Whitelist` configurations to suit most requirements; they can be modified if necessary, but take care. - -The cleaner is useful not only for avoiding XSS, but also in limiting the range of elements the user can provide: you may be OK with textual `a`, `strong` elements, but not structural `div` or `table` elements. - -### See also -- See the [XSS cheat sheet](http://ha.ckers.org/xss.html) and filter evasion guide, as an example of how regular-expression filters don't work, and why a safe whitelist parser-based sanitizer is the correct approach. -- See the `Cleaner` reference if you want to get a `Document` instead of a String return -- See the `Whitelist` reference for the different canned options, and to create a custom whitelist -- The [nofollow](https://en.wikipedia.org/wiki/Nofollow) link attribute - - - - -# Set attribute values -### Problem -You have a parsed document that you would like to update attribute values on, before saving it out to disk, or sending it on as a HTTP response. - -### Solution -Use the attribute setter methods `Element.attr(_ key: String, _ value: String)`, and `Elements.attr(_ key: String, _ value: String)`. - -If you need to modify the class attribute of an element, use the `Element.addClass(_ className: String)` and `Element.removeClass(_ className: String)` methods. - -The `Elements` collection has bulk attribute and class methods. For example, to add a `rel="nofollow"` attribute to every `a` element inside a div: - -```swift -do { - try doc.select("div.comments a").attr("rel", "nofollow") -} catch Exception.Error(let type, let message) { - print(message) -} catch { - print("error") -} -``` -### Description -Like the other methods in `Element`, the attr methods return the current `Element` (or `Elements` when working on a collection from a select). This allows convenient method chaining: - -```swift -do { - try doc.select("div.masthead").attr("title", "swiftsoup").addClass("round-box"); -} catch Exception.Error(let type, let message) { - print(message) -} catch { - print("error") -} -``` - - -# Set the HTML of an element -### Problem -You need to modify the HTML of an element. -### Solution -Use the HTML setter methods in `Element`: -```swift -do { - let doc: Document = try SwiftSoup.parse("
One
One") - let div: Element = try doc.select("div").first()! //
- try div.html("

lorem ipsum

") //

lorem ipsum

- try div.prepend("

First

") - try div.append("

Last

") - print(div) - // now div is:

First

lorem ipsum

Last

- - let span: Element = try doc.select("span").first()! // One - try span.wrap("
  • ") - print(doc) - // now:
  • One
  • -} catch Exception.Error(let type, let message) { - print(message) -} catch { - print("error") -} -``` -### Discussion -- `Element.html(_ html: String)` clears any existing inner HTML in an element, and replaces it with parsed HTML. -- `Element.prepend(_ first: String)` and `Element.append(_ last: String)` add HTML to the start or end of an element's inner HTML, respectively -- `Element.wrap(_ around: String)` wraps HTML around the outer HTML of an element. - -### See also -You can also use the `Element.prependElement(_ tag: String)` and `Element.appendElement(_ tag: String)` methods to create new elements and insert them into the document flow as a child element. - - - - - -# Setting the text content of elements -### Problem -You need to modify the text content of an HTML document. -# Solution -Use the text setter methods of `Element`: - -```swift -do { - let doc: Document = try SwiftSoup.parse("") - let div: Element = try doc.select("div").first()! //
    - try div.text("five > four") //
    five > four
    - try div.prepend("First ") - try div.append(" Last") - // now:
    First five > four Last
    -} catch Exception.Error(let type, let message) { - print(message) -} catch { - print("error") -} -``` - -### Discussion -The text setter methods mirror the [[HTML setter|Set the HTML of an element]] methods: -- `Element.text(_ text: String)` clears any existing inner HTML in an element, and replaces it with the supplied text. -- `Element.prepend(_ first: String)` and `Element.append(_ last: String)` add text nodes to the start or end of an element's inner HTML, respectively -The text should be supplied unencoded: characters like `<`, `>` etc will be treated as literals, not HTML. - - - - - -# Use DOM methods to navigate a document -### Problem -You have a HTML document that you want to extract data from. You know generally the structure of the HTML document. - -### Solution -Use the DOM-like methods available after parsing HTML into a `Document`. - -```swift -do { - let html: String = "One Two" - let els: Elements = try SwiftSoup.parse(html).select("a") - for link: Element in els.array() { - let linkHref: String = try link.attr("href") - let linkText: String = try link.text() - } -} catch Exception.Error(let type, let message) { - print(message) -} catch { - print("error") -} -``` -### Description -Elements provide a range of DOM-like methods to find elements, and extract and manipulate their data. The DOM getters are contextual: called on a parent Document they find matching elements under the document; called on a child element they find elements under that child. In this way you can window in on the data you want. -### Finding elements -* `getElementById(_ id: String)` -* `getElementsByTag(_ tag:String)` -* `getElementsByClass(_ className: String)` -* `getElementsByAttribute(_ key: String)` (and related methods) -* Element siblings: `siblingElements()`, `firstElementSibling()`, `lastElementSibling()`, `nextElementSibling()`, `previousElementSibling()` -* Graph: `parent()`, `children()`, `child(_ index: Int)` - -# Element data -* `attr(_ key: Strin)` to get and `attr(_ key: String, _ value: String)` to set attributes -* `attributes()` to get all attributes -* `id()`, `className()` and `classNames()` -* `text()` to get and `text(_ value: String)` to set the text content -* `html()` to get and `html(_ value: String)` to set the inner HTML content -* `outerHtml()` to get the outer HTML value -* `data()` to get data content (e.g. of script and style tags) -* `tag()` and `tagName()` - -### Manipulating HTML and text -* `append(_ html: String)`, `prepend(html: String)` -* `appendText(text: String)`, `prependText(text: String)` -* `appendElement(tagName: String)`, `prependElement(tagName: String)` -* `html(_ value: String)` - - - - - - - - - - - - -# Use selector syntax to find elements -### Problem -You want to find or manipulate elements using a CSS or jQuery-like selector syntax. -### Solution -Use the `Element.select(_ selector: String)` and `Elements.select(_ selector: String)` methods: - -```swift -do { - let doc: Document = try SwiftSoup.parse("...") - let links: Elements = try doc.select("a[href]") // a with href - let pngs: Elements = try doc.select("img[src$=.png]") - // img with src ending .png - let masthead: Element? = try doc.select("div.masthead").first() - // div with class=masthead - let resultLinks: Elements? = try doc.select("h3.r > a") // direct a after h3 -} catch Exception.Error(let type, let message) { - print(message) -} catch { - print("error") -} -``` -### Description -SwiftSoup elements support a [CSS](https://www.w3.org/TR/2009/PR-css3-selectors-20091215/) (or [jQuery](http://jquery.com)) like selector syntax to find matching elements, that allows very powerful and robust queries. - -The `select` method is available in a `Document`, `Element`, or in `Elements`. It is contextual, so you can filter by selecting from a specific element, or by chaining select calls. - -Select returns a list of `Elements` (as `Elements`), which provides a range of methods to extract and manipulate the results. -### Selector overview -* `tagname`: find elements by tag, e.g. `a` -* `ns|tag`: find elements by tag in a namespace, e.g. `fb|name` finds `` elements -* `#id`: find elements by ID, e.g. `#logo` -* `.class`: find elements by class name, e.g. `.masthead` -* `[attribute]`: elements with attribute, e.g. `[href]` -* `[^attr]`: elements with an attribute name prefix, e.g. `[^data-]` finds elements with HTML5 dataset attributes -* `[attr=value]`: elements with attribute value, e.g. `[width=500]` (also quotable, like `[data-name='launch sequence']`) -* `[attr^=value]`, `[attr$=value]`, `[attr*=value]`: elements with attributes that start with, end with, or contain the value, e.g. `[href*=/path/]` -* `[attr~=regex]`: elements with attribute values that match the regular expression; e.g. `img[src~=(?i)\.(png|jpe?g)]` -* `*`: all elements, e.g. `*` -### Selector combinations -* `el#id`: elements with ID, e.g. `div#logo` -* `el.class`: elements with class, e.g. `div.masthead` -* `el[attr]`: elements with attribute, e.g. `a[href]` -* Any combination, e.g. `a[href].highlight` -* Ancestor `child`: child elements that descend from ancestor, e.g. `.body p` finds `p` elements anywhere under a block with class "body" -* `parent > child`: child elements that descend directly from parent, e.g. `div.content > p` finds p elements; and `body > *` finds the direct children of the body tag -* `siblingA + siblingB`: finds sibling B element immediately preceded by sibling A, e.g. `div.head + div` -* `siblingA ~ siblingX`: finds sibling X element preceded by sibling A, e.g. `h1 ~ p` -* `el`, `el`, `el`: group multiple selectors, find unique elements that match any of the selectors; e.g. `div.masthead`, `div.logo` - -### Pseudo selectors -* `:lt(n)`: find elements whose sibling index (i.e. its position in the DOM tree relative to its parent) is less than n; e.g. `td:lt(3)` -* `:gt(n)`: find elements whose sibling index is greater than n; e.g. `div p:gt(2)` -* `:eq(n)`: find elements whose sibling index is equal to n; e.g. `form input:eq(1)` -* `:has(seletor)`: find elements that contain elements matching the selector; e.g. `div:has(p)` -* `:not(selector)`: find elements that do not match the selector; e.g. `div:not(.logo)` -* `:contains(text)`: find elements that contain the given text. The search is case-insensitive; e.g. `p:contains(swiftsoup)` -* `:containsOwn(text)`: find elements that directly contain the given text -* `:matches(regex)`: find elements whose text matches the specified regular expression; e.g. `div:matches((?i)login)` -* `:matchesOwn(regex)`: find elements whose own text matches the specified regular expression -* Note that the above indexed pseudo-selectors are 0-based, that is, the first element is at index 0, the second at 1, etc - -# Examples -## To parse an HTML document from String: - -```swift -let html = "First parse

    Parsed HTML into a doc.

    " -guard let doc: Document = try? SwiftSoup.parse(html) else { return } -``` - -## Get all text nodes: - -```swift -guard let elements = try? doc.getAllElements() else { return html } -for element in elements { - for textNode in element.textNodes() { - [...] - } -} -``` - -## Set CSS using SwiftSoup: - -```swift -try doc.head()?.append("") -``` - -## Get HTML value -```swift -let html = "
    " - + "
    " - + "
    " - + "
    " - + "" - + "" - + "" - + "
    " - + "" - + "" - + "" - + "" - + "
    " - + "
    " - + "
    " - + "
    " -guard let doc: Document = try? SwiftSoup.parse(html) else { return } // parse html -let elements = try doc.select("[name=transaction_id]") // query -let transaction_id = try elements.get(0) // select first element -let value = try transaction_id.val() // get value -print(value) // 4245 -``` -## How to remove all the html from a string - -```swift -guard let doc: Document = try? SwiftSoup.parse(html) else { return } // parse html -guard let txt = try? doc.text() else { return } -print(txt) -``` - -## How to get and update XML values - -```swift -let xml = "One" -guard let doc = try? SwiftSoup.parse(xml, "", Parser.xmlParser()) else { return } -guard let element = try? doc.getElementsByTag("val").first() // Find first element -element.text("NewValue") // Edit Value -let valueString = element.text() // "NewValue" -``` - -## How to get all `` - -```swift -do { - let doc: Document = try SwiftSoup.parse(html) - let srcs: Elements = try doc.select("img[src]") - let srcsStringArray: [String?] = srcs.array().map { try? $0.attr("src").description } - // do something with srcsStringArray -} catch Exception.Error(_, let message) { - print(message) -} catch { - print("error") -} -``` - -## Get all `href` of `` - -```swift -let html = "One Two" -guard let els: Elements = try? SwiftSoup.parse(html).select("a") else { return } -for element: Element in els.array() { - print(try? element.attr("href")) -} -``` -Output: -``` -"?foo=bar&mid<=true" -"?foo=bar Å å π 新 there ¾ © »" - - -"Hello &<> Å å π 新 there ¾ © »" -"Hello &<> Å å π 新 there ¾ © »" -"Hello &<> Å å π 新 there ¾ © »" -"Hello &<> Å å π 新 there ¾ © »" -"Hello &<> Å å π 新 there ¾ © »" - -``` - - - -## Author - -Nabil Chatbi, scinfu@gmail.com - -## Note -SwiftSoup was ported to Swift from Java [Jsoup](https://jsoup.org/) library. - -## License - -SwiftSoup is available under the MIT license. See the LICENSE file for more info. diff --git a/Example/Pods/SwiftSoup/Sources/ArrayExt.swift b/Example/Pods/SwiftSoup/Sources/ArrayExt.swift deleted file mode 100755 index a3b329f..0000000 --- a/Example/Pods/SwiftSoup/Sources/ArrayExt.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// ArrayExt.swift -// SwifSoup -// -// Created by Nabil Chatbi on 05/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -extension Array where Element : Equatable { - func lastIndexOf(_ e: Element) -> Int { - for pos in (0.. String { - return key - } - - /** - Set the attribute key; case is preserved. - @param key the new key; must not be null - */ - open func setKey(key: String) throws { - try Validate.notEmpty(string: key) - self.key = key.trim() - } - - /** - Get the attribute value. - @return the attribute value - */ - open func getValue() -> String { - return value - } - - /** - Set the attribute value. - @param value the new attribute value; must not be null - */ - @discardableResult - open func setValue(value: String) -> String { - let old = self.value - self.value = value - return old - } - - /** - Get the HTML representation of this attribute; e.g. {@code href="index.html"}. - @return HTML - */ - public func html() -> String { - let accum = StringBuilder() - html(accum: accum, out: (Document("")).outputSettings()) - return accum.toString() - } - - public func html(accum: StringBuilder, out: OutputSettings ) { - accum.append(key) - if (!shouldCollapseAttribute(out: out)) { - accum.append("=\"") - Entities.escape(accum, value, out, true, false, false) - accum.append("\"") - } - } - - /** - Get the string representation of this attribute, implemented as {@link #html()}. - @return string - */ - open func toString() -> String { - return html() - } - - /** - * Create a new Attribute from an unencoded key and a HTML attribute encoded value. - * @param unencodedKey assumes the key is not encoded, as can be only run of simple \w chars. - * @param encodedValue HTML attribute encoded value - * @return attribute - */ - public static func createFromEncoded(unencodedKey: String, encodedValue: String) throws ->Attribute { - let value = try Entities.unescape(string: encodedValue, strict: true) - return try Attribute(key: unencodedKey, value: value) - } - - public func isDataAttribute() -> Bool { - return key.startsWith(Attributes.dataPrefix) && key.count > Attributes.dataPrefix.count - } - - /** - * Collapsible if it's a boolean attribute and value is empty or same as name - * - * @param out Outputsettings - * @return Returns whether collapsible or not - */ - public final func shouldCollapseAttribute(out: OutputSettings) -> Bool { - return ("" == value || value.equalsIgnoreCase(string: key)) - && out.syntax() == OutputSettings.Syntax.html - && isBooleanAttribute() - } - - public func isBooleanAttribute() -> Bool { - return Attribute.booleanAttributes.contains(key.lowercased()) - } - - public func hashCode() -> Int { - var result = key.hashValue - result = 31 * result + value.hashValue - return result - } - - public func clone() -> Attribute { - do { - return try Attribute(key: key, value: value) - } catch Exception.Error( _, let msg) { - print(msg) - } catch { - - } - return try! Attribute(key: "", value: "") - } -} - -extension Attribute: Equatable { - static public func == (lhs: Attribute, rhs: Attribute) -> Bool { - return lhs.value == rhs.value && lhs.key == rhs.key - } - -} diff --git a/Example/Pods/SwiftSoup/Sources/Attributes.swift b/Example/Pods/SwiftSoup/Sources/Attributes.swift deleted file mode 100755 index 2ffa006..0000000 --- a/Example/Pods/SwiftSoup/Sources/Attributes.swift +++ /dev/null @@ -1,235 +0,0 @@ -// -// Attributes.swift -// SwifSoup -// -// Created by Nabil Chatbi on 29/09/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - * The attributes of an Element. - *

    - * Attributes are treated as a map: there can be only one value associated with an attribute key/name. - *

    - *

    - * Attribute name and value comparisons are case sensitive. By default for HTML, attribute names are - * normalized to lower-case on parsing. That means you should use lower-case strings when referring to attributes by - * name. - *

    - * - * - */ -open class Attributes: NSCopying { - - public static var dataPrefix: String = "data-" - - // Stored by lowercased key, but key case is checked against the copy inside - // the Attribute on retrieval. - var attributes: [Attribute] = [] - - public init() {} - - /** - Get an attribute value by key. - @param key the (case-sensitive) attribute key - @return the attribute value if set; or empty string if not set. - @see #hasKey(String) - */ - open func get(key: String) -> String { - if let attr = attributes.first(where: { $0.getKey() == key }) { - return attr.getValue() - } - return "" - } - - /** - * Get an attribute's value by case-insensitive key - * @param key the attribute name - * @return the first matching attribute value if set; or empty string if not set. - */ - open func getIgnoreCase(key: String )throws -> String { - try Validate.notEmpty(string: key) - if let attr = attributes.first(where: { $0.getKey().caseInsensitiveCompare(key) == .orderedSame }) { - return attr.getValue() - } - return "" - } - - /** - Set a new attribute, or replace an existing one by key. - @param key attribute key - @param value attribute value - */ - open func put(_ key: String, _ value: String) throws { - let attr = try Attribute(key: key, value: value) - put(attribute: attr) - } - - /** - Set a new boolean attribute, remove attribute if value is false. - @param key attribute key - @param value attribute value - */ - open func put(_ key: String, _ value: Bool) throws { - if (value) { - try put(attribute: BooleanAttribute(key: key)) - } else { - try remove(key: key) - } - } - - /** - Set a new attribute, or replace an existing one by (case-sensitive) key. - @param attribute attribute - */ - open func put(attribute: Attribute) { - let key = attribute.getKey() - if let ix = attributes.firstIndex(where: { $0.getKey() == key }) { - attributes[ix] = attribute - } else { - attributes.append(attribute) - } - } - - /** - Remove an attribute by key. Case sensitive. - @param key attribute key to remove - */ - open func remove(key: String)throws { - try Validate.notEmpty(string: key) - if let ix = attributes.firstIndex(where: { $0.getKey() == key }) { - attributes.remove(at: ix) } - } - - /** - Remove an attribute by key. Case insensitive. - @param key attribute key to remove - */ - open func removeIgnoreCase(key: String ) throws { - try Validate.notEmpty(string: key) - if let ix = attributes.firstIndex(where: { $0.getKey().caseInsensitiveCompare(key) == .orderedSame}) { - attributes.remove(at: ix) - } - } - - /** - Tests if these attributes contain an attribute with this key. - @param key case-sensitive key to check for - @return true if key exists, false otherwise - */ - open func hasKey(key: String) -> Bool { - return attributes.contains(where: { $0.getKey() == key }) - } - - /** - Tests if these attributes contain an attribute with this key. - @param key key to check for - @return true if key exists, false otherwise - */ - open func hasKeyIgnoreCase(key: String) -> Bool { - return attributes.contains(where: { $0.getKey().caseInsensitiveCompare(key) == .orderedSame}) - } - - /** - Get the number of attributes in this set. - @return size - */ - open func size() -> Int { - return attributes.count - } - - /** - Add all the attributes from the incoming set to this set. - @param incoming attributes to add to these attributes. - */ - open func addAll(incoming: Attributes?) { - guard let incoming = incoming else { return } - for attr in incoming.attributes { - put(attribute: attr) - } - } - - /** - Get the attributes as a List, for iteration. Do not modify the keys of the attributes via this view, as changes - to keys will not be recognised in the containing set. - @return an view of the attributes as a List. - */ - open func asList() -> [Attribute] { - return attributes - } - - /** - * Retrieves a filtered view of attributes that are HTML5 custom data attributes; that is, attributes with keys - * starting with {@code data-}. - * @return map of custom data attributes. - */ - open func dataset() -> [String: String] { - let prefixLength = Attributes.dataPrefix.count - let pairs = attributes.filter { $0.isDataAttribute() } - .map { ($0.getKey().substring(prefixLength), $0.getValue()) } - return Dictionary(uniqueKeysWithValues: pairs) - } - - /** - Get the HTML representation of these attributes. - @return HTML - @throws SerializationException if the HTML representation of the attributes cannot be constructed. - */ - open func html()throws -> String { - let accum = StringBuilder() - try html(accum: accum, out: Document("").outputSettings()) // output settings a bit funky, but this html() seldom used - return accum.toString() - } - - public func html(accum: StringBuilder, out: OutputSettings ) throws { - for attr in attributes { - accum.append(" ") - attr.html(accum: accum, out: out) - } - } - - open func toString()throws -> String { - return try html() - } - - /** - * Checks if these attributes are equal to another set of attributes, by comparing the two sets - * @param o attributes to compare with - * @return if both sets of attributes have the same content - */ - open func equals(o: AnyObject?) -> Bool { - if(o == nil) {return false} - if (self === o.self) {return true} - guard let that = o as? Attributes else {return false} - return (attributes == that.attributes) - } - - open func lowercaseAllKeys() { - for ix in attributes.indices { - attributes[ix].key = attributes[ix].key.lowercased() - } - } - - public func copy(with zone: NSZone? = nil) -> Any { - let clone = Attributes() - clone.attributes = attributes - return clone - } - - open func clone() -> Attributes { - return self.copy() as! Attributes - } - - fileprivate static func dataKey(key: String) -> String { - return dataPrefix + key - } - -} - -extension Attributes: Sequence { - public func makeIterator() -> AnyIterator { - return AnyIterator(attributes.makeIterator()) - } -} diff --git a/Example/Pods/SwiftSoup/Sources/BinarySearch.swift b/Example/Pods/SwiftSoup/Sources/BinarySearch.swift deleted file mode 100755 index fb98c57..0000000 --- a/Example/Pods/SwiftSoup/Sources/BinarySearch.swift +++ /dev/null @@ -1,95 +0,0 @@ -// -// BinarySearch.swift -// SwiftSoup-iOS -// -// Created by Garth Snyder on 2/28/19. -// Copyright © 2019 Nabil Chatbi. All rights reserved. -// -// Adapted from https://stackoverflow.com/questions/31904396/swift-binary-search-for-standard-array -// - -import Foundation - -extension Collection { - - /// Generalized binary search algorithm for ordered Collections - /// - /// Behavior is undefined if the collection is not properly sorted. - /// - /// This is only O(logN) for RandomAccessCollections; Collections in - /// general may implement offsetting of indexes as an O(K) operation. (E.g., - /// Strings are like this). - /// - /// - Note: If you are using this for searching only (not insertion), you - /// must always test the element at the returned index to ensure that - /// it's a genuine match. If the element is not present in the array, - /// you will still get a valid index back that represents the location - /// where it should be inserted. Also check to be sure the returned - /// index isn't off the end of the collection. - /// - /// - Parameter predicate: Reports the ordering of a given Element relative - /// to the desired Element. Typically, this is <. - /// - /// - Returns: Index N such that the predicate is true for all elements up to - /// but not including N, and is false for all elements N and beyond - - func binarySearch(predicate: (Element) -> Bool) -> Index { - var low = startIndex - var high = endIndex - while low != high { - let mid = index(low, offsetBy: distance(from: low, to: high)/2) - if predicate(self[mid]) { - low = index(after: mid) - } else { - high = mid - } - } - return low - } - - /// Binary search lookup for ordered Collections using a KeyPath - /// relative to Element. - /// - /// Behavior is undefined if the collection is not properly sorted. - /// - /// This is only O(logN) for RandomAccessCollections; Collections in - /// general may implement offsetting of indexes as an O(K) operation. (E.g., - /// Strings are like this). - /// - /// - Note: If you are using this for searching only (not insertion), you - /// must always test the element at the returned index to ensure that - /// it's a genuine match. If the element is not present in the array, - /// you will still get a valid index back that represents the location - /// where it should be inserted. Also check to be sure the returned - /// index isn't off the end of the collection. - /// - /// - Parameter keyPath: KeyPath that extracts the Element value on which - /// the Collection is presorted. Must be Comparable and Equatable. - /// ordering is presumed to be <, however that is defined for the type. - /// - /// - Returns: The index of a matching element, or nil if not found. If - /// the return value is non-nil, it is always a valid index. - - func indexOfElement(withValue value: T, atKeyPath keyPath: KeyPath) -> Index? where T: Comparable & Equatable { - let ix = binarySearch { $0[keyPath: keyPath] < value } - guard ix < endIndex else { return nil } - guard self[ix][keyPath: keyPath] == value else { return nil } - return ix - } - - func element(withValue value: T, atKeyPath keyPath: KeyPath) -> Element? where T: Comparable & Equatable { - if let ix = indexOfElement(withValue: value, atKeyPath: keyPath) { - return self[ix] - } - return nil - } - - func elements(withValue value: T, atKeyPath keyPath: KeyPath) -> [Element] where T: Comparable & Equatable { - guard let start = indexOfElement(withValue: value, atKeyPath: keyPath) else { return [] } - var end = index(after: start) - while end < endIndex && self[end][keyPath: keyPath] == value { - end = index(after: end) - } - return Array(self[start.. Bool { - return true - } -} diff --git a/Example/Pods/SwiftSoup/Sources/CharacterExt.swift b/Example/Pods/SwiftSoup/Sources/CharacterExt.swift deleted file mode 100755 index 2cab2b5..0000000 --- a/Example/Pods/SwiftSoup/Sources/CharacterExt.swift +++ /dev/null @@ -1,81 +0,0 @@ -// -// CharacterExt.swift -// SwifSoup -// -// Created by Nabil Chatbi on 08/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -extension Character { - - public static let space: Character = " " - public static let BackslashT: Character = "\t" - public static let BackslashN: Character = "\n" - public static let BackslashF: Character = Character(UnicodeScalar(12)) - public static let BackslashR: Character = "\r" - public static let BackshashRBackslashN: Character = "\r\n" - - //http://www.unicode.org/glossary/#supplementary_code_point - public static let MIN_SUPPLEMENTARY_CODE_POINT: UInt32 = 0x010000 - - /// True for any space character, and the control characters \t, \n, \r, \f, \v. - - var isWhitespace: Bool { - switch self { - case Character.space, Character.BackslashT, Character.BackslashN, Character.BackslashF, Character.BackslashR: return true - case Character.BackshashRBackslashN: return true - default: return false - - } - } - - /// `true` if `self` normalized contains a single code unit that is in the category of Decimal Numbers. - var isDigit: Bool { - - return isMemberOfCharacterSet(CharacterSet.decimalDigits) - - } - - /// Lowercase `self`. - var lowercase: Character { - - let str = String(self).lowercased() - return str[str.startIndex] - - } - - /// Return `true` if `self` normalized contains a single code unit that is a member of the supplied character set. - /// - /// - parameter set: The `NSCharacterSet` used to test for membership. - /// - returns: `true` if `self` normalized contains a single code unit that is a member of the supplied character set. - func isMemberOfCharacterSet(_ set: CharacterSet) -> Bool { - - let normalized = String(self).precomposedStringWithCanonicalMapping - let unicodes = normalized.unicodeScalars - - guard unicodes.count == 1 else { return false } - return set.contains(UnicodeScalar(unicodes.first!.value)!) - - } - - static func convertFromIntegerLiteral(value: IntegerLiteralType) -> Character { - return Character(UnicodeScalar(value)!) - } - - static func isLetter(_ char: Character) -> Bool { - return char.isLetter() - } - func isLetter() -> Bool { - return self.isMemberOfCharacterSet(CharacterSet.letters) - } - - static func isLetterOrDigit(_ char: Character) -> Bool { - return char.isLetterOrDigit() - } - func isLetterOrDigit() -> Bool { - if(self.isLetter()) {return true} - return self.isDigit - } -} diff --git a/Example/Pods/SwiftSoup/Sources/CharacterReader.swift b/Example/Pods/SwiftSoup/Sources/CharacterReader.swift deleted file mode 100755 index d53c795..0000000 --- a/Example/Pods/SwiftSoup/Sources/CharacterReader.swift +++ /dev/null @@ -1,320 +0,0 @@ -// -// CharacterReader.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 10/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - CharacterReader consumes tokens off a string. To replace the old TokenQueue. - */ -public final class CharacterReader { - private static let empty = "" - public static let EOF: UnicodeScalar = "\u{FFFF}"//65535 - private let input: String.UnicodeScalarView - private var pos: String.UnicodeScalarView.Index - private var mark: String.UnicodeScalarView.Index - //private let stringCache: Array // holds reused strings in this doc, to lessen garbage - - public init(_ input: String) { - self.input = input.unicodeScalars - self.pos = input.startIndex - self.mark = input.startIndex - } - - public func getPos() -> Int { - return input.distance(from: input.startIndex, to: pos) - } - - public func isEmpty() -> Bool { - return pos >= input.endIndex - } - - public func current() -> UnicodeScalar { - return (pos >= input.endIndex) ? CharacterReader.EOF : input[pos] - } - - @discardableResult - public func consume() -> UnicodeScalar { - guard pos < input.endIndex else { - return CharacterReader.EOF - } - let val = input[pos] - pos = input.index(after: pos) - return val - } - - public func unconsume() { - guard pos > input.startIndex else { return } - pos = input.index(before: pos) - } - - public func advance() { - guard pos < input.endIndex else { return } - pos = input.index(after: pos) - } - - public func markPos() { - mark = pos - } - - public func rewindToMark() { - pos = mark - } - - public func consumeAsString() -> String { - guard pos < input.endIndex else { return "" } - let str = String(input[pos]) - pos = input.index(after: pos) - return str - } - - /** - * Locate the next occurrence of a Unicode scalar - * - * - Parameter c: scan target - * - Returns: offset between current position and next instance of target. -1 if not found. - */ - public func nextIndexOf(_ c: UnicodeScalar) -> String.UnicodeScalarView.Index? { - // doesn't handle scanning for surrogates - return input[pos...].firstIndex(of: c) - } - - /** - * Locate the next occurence of a target string - * - * - Parameter seq: scan target - * - Returns: index of next instance of target. nil if not found. - */ - public func nextIndexOf(_ seq: String) -> String.UnicodeScalarView.Index? { - // doesn't handle scanning for surrogates - var start = pos - let targetScalars = seq.unicodeScalars - guard let firstChar = targetScalars.first else { return pos } // search for "" -> current place - MATCH: while true { - // Match on first scalar - guard let firstCharIx = input[start...].firstIndex(of: firstChar) else { return nil } - var current = firstCharIx - // Then manually match subsequent scalars - for scalar in targetScalars.dropFirst() { - current = input.index(after: current) - guard current < input.endIndex else { return nil } - if input[current] != scalar { - start = input.index(after: firstCharIx) - continue MATCH - } - } - // full match; current is at position of last matching character - return firstCharIx - } - } - - public func consumeTo(_ c: UnicodeScalar) -> String { - guard let targetIx = nextIndexOf(c) else { - return consumeToEnd() - } - let consumed = cacheString(pos, targetIx) - pos = targetIx - return consumed - } - - public func consumeTo(_ seq: String) -> String { - guard let targetIx = nextIndexOf(seq) else { - return consumeToEnd() - } - let consumed = cacheString(pos, targetIx) - pos = targetIx - return consumed - } - - public func consumeToAny(_ chars: UnicodeScalar...) -> String { - return consumeToAny(chars) - } - - public func consumeToAny(_ chars: [UnicodeScalar]) -> String { - let start = pos - while pos < input.endIndex { - if chars.contains(input[pos]) { - break - } - pos = input.index(after: pos) - } - return cacheString(start, pos) - } - - public func consumeToAnySorted(_ chars: UnicodeScalar...) -> String { - return consumeToAny(chars) - } - - public func consumeToAnySorted(_ chars: [UnicodeScalar]) -> String { - return consumeToAny(chars) - } - - static let dataTerminators: [UnicodeScalar] = [.Ampersand, .LessThan, TokeniserStateVars.nullScalr] - // read to &, <, or null - public func consumeData() -> String { - return consumeToAny(CharacterReader.dataTerminators) - } - - static let tagNameTerminators: [UnicodeScalar] = [.BackslashT, .BackslashN, .BackslashR, .BackslashF, .Space, .Slash, .GreaterThan, TokeniserStateVars.nullScalr] - // read to '\t', '\n', '\r', '\f', ' ', '/', '>', or nullChar - public func consumeTagName() -> String { - return consumeToAny(CharacterReader.tagNameTerminators) - } - - public func consumeToEnd() -> String { - let consumed = cacheString(pos, input.endIndex) - pos = input.endIndex - return consumed - } - - public func consumeLetterSequence() -> String { - let start = pos - while pos < input.endIndex { - let c = input[pos] - if ((c >= "A" && c <= "Z") || (c >= "a" && c <= "z") || c.isMemberOfCharacterSet(CharacterSet.letters)) { - pos = input.index(after: pos) - } else { - break - } - } - return cacheString(start, pos) - } - - public func consumeLetterThenDigitSequence() -> String { - let start = pos - while pos < input.endIndex { - let c = input[pos] - if ((c >= "A" && c <= "Z") || (c >= "a" && c <= "z") || c.isMemberOfCharacterSet(CharacterSet.letters)) { - pos = input.index(after: pos) - } else { - break - } - } - while pos < input.endIndex { - let c = input[pos] - if (c >= "0" && c <= "9") { - pos = input.index(after: pos) - } else { - break - } - } - return cacheString(start, pos) - } - - public func consumeHexSequence() -> String { - let start = pos - while pos < input.endIndex { - let c = input[pos] - if ((c >= "0" && c <= "9") || (c >= "A" && c <= "F") || (c >= "a" && c <= "f")) { - pos = input.index(after: pos) - } else { - break - } - } - return cacheString(start, pos) - } - - public func consumeDigitSequence() -> String { - let start = pos - while pos < input.endIndex { - let c = input[pos] - if (c >= "0" && c <= "9") { - pos = input.index(after: pos) - } else { - break - } - } - return cacheString(start, pos) - } - - public func matches(_ c: UnicodeScalar) -> Bool { - return !isEmpty() && input[pos] == c - - } - - public func matches(_ seq: String, ignoreCase: Bool = false, consume: Bool = false) -> Bool { - var current = pos - let scalars = seq.unicodeScalars - for scalar in scalars { - guard current < input.endIndex else { return false } - if ignoreCase { - guard input[current].uppercase == scalar.uppercase else { return false } - } else { - guard input[current] == scalar else { return false } - } - current = input.index(after: current) - } - if consume { - pos = current - } - return true - } - - public func matchesIgnoreCase(_ seq: String ) -> Bool { - return matches(seq, ignoreCase: true) - } - - public func matchesAny(_ seq: UnicodeScalar...) -> Bool { - return matchesAny(seq) - } - - public func matchesAny(_ seq: [UnicodeScalar]) -> Bool { - guard pos < input.endIndex else { return false } - return seq.contains(input[pos]) - } - - public func matchesAnySorted(_ seq: [UnicodeScalar]) -> Bool { - return matchesAny(seq) - } - - public func matchesLetter() -> Bool { - guard pos < input.endIndex else { return false } - let c = input[pos] - return (c >= "A" && c <= "Z") || (c >= "a" && c <= "z") || c.isMemberOfCharacterSet(CharacterSet.letters) - } - - public func matchesDigit() -> Bool { - guard pos < input.endIndex else { return false } - let c = input[pos] - return c >= "0" && c <= "9" - } - - @discardableResult - public func matchConsume(_ seq: String) -> Bool { - return matches(seq, consume: true) - } - - @discardableResult - public func matchConsumeIgnoreCase(_ seq: String) -> Bool { - return matches(seq, ignoreCase: true, consume: true) - } - - public func containsIgnoreCase(_ seq: String ) -> Bool { - // used to check presence of , . only finds consistent case. - let loScan = seq.lowercased(with: Locale(identifier: "en")) - let hiScan = seq.uppercased(with: Locale(identifier: "eng")) - return nextIndexOf(loScan) != nil || nextIndexOf(hiScan) != nil - } - - public func toString() -> String { - return String(input[pos...]) - } - - /** - * Originally intended as a caching mechanism for strings, but caching doesn't - * seem to improve performance. Now just a stub. - */ - private func cacheString(_ start: String.UnicodeScalarView.Index, _ end: String.UnicodeScalarView.Index) -> String { - return String(input[start..body are used. - @param dirtyDocument Untrusted base document to clean. - @return cleaned document. - */ - public func clean(_ dirtyDocument: Document)throws->Document { - //Validate.notNull(dirtyDocument) - let clean: Document = Document.createShell(dirtyDocument.getBaseUri()) - if (dirtyDocument.body() != nil && clean.body() != nil) // frameset documents won't have a body. the clean doc will have empty body. - { - try copySafeNodes(dirtyDocument.body()!, clean.body()!) - } - return clean - } - - /** - Determines if the input document is valid, against the whitelist. It is considered valid if all the tags and attributes - in the input HTML are allowed by the whitelist. -

    - This method can be used as a validator for user input forms. An invalid document will still be cleaned successfully - using the {@link #clean(Document)} document. If using as a validator, it is recommended to still clean the document - to ensure enforced attributes are set correctly, and that the output is tidied. -

    - @param dirtyDocument document to test - @return true if no tags or attributes need to be removed; false if they do - */ - public func isValid(_ dirtyDocument: Document)throws->Bool { - //Validate.notNull(dirtyDocument) - let clean: Document = Document.createShell(dirtyDocument.getBaseUri()) - let numDiscarded: Int = try copySafeNodes(dirtyDocument.body()!, clean.body()!) - return numDiscarded == 0 - } - - @discardableResult - fileprivate func copySafeNodes(_ source: Element, _ dest: Element)throws->Int { - let cleaningVisitor: Cleaner.CleaningVisitor = Cleaner.CleaningVisitor(source, dest, self) - let traversor: NodeTraversor = NodeTraversor(cleaningVisitor) - try traversor.traverse(source) - return cleaningVisitor.numDiscarded - } - - fileprivate func createSafeElement(_ sourceEl: Element)throws->ElementMeta { - let sourceTag: String = sourceEl.tagName() - let destAttrs: Attributes = Attributes() - let dest: Element = try Element(Tag.valueOf(sourceTag), sourceEl.getBaseUri(), destAttrs) - var numDiscarded: Int = 0 - - if let sourceAttrs = sourceEl.getAttributes() { - for sourceAttr: Attribute in sourceAttrs { - if (try whitelist.isSafeAttribute(sourceTag, sourceEl, sourceAttr)) { - destAttrs.put(attribute: sourceAttr) - } else { - numDiscarded+=1 - } - } - } - let enforcedAttrs: Attributes = try whitelist.getEnforcedAttributes(sourceTag) - destAttrs.addAll(incoming: enforcedAttrs) - - return ElementMeta(dest, numDiscarded) - } - -} - -extension Cleaner { - fileprivate final class CleaningVisitor: NodeVisitor { - var numDiscarded: Int = 0 - let root: Element - var destination: Element? // current element to append nodes to - - private var cleaner: Cleaner - - public init(_ root: Element, _ destination: Element, _ cleaner: Cleaner) { - self.root = root - self.destination = destination - self.cleaner = cleaner - } - - public func head(_ source: Node, _ depth: Int)throws { - if let sourceEl = (source as? Element) { - if (cleaner.whitelist.isSafeTag(sourceEl.tagName())) { // safe, clone and copy safe attrs - let meta: Cleaner.ElementMeta = try cleaner.createSafeElement(sourceEl) - let destChild: Element = meta.el - try destination?.appendChild(destChild) - - numDiscarded += meta.numAttribsDiscarded - destination = destChild - } else if (source != root) { // not a safe tag, so don't add. don't count root against discarded. - numDiscarded+=1 - } - } else if let sourceText = (source as? TextNode) { - let destText: TextNode = TextNode(sourceText.getWholeText(), source.getBaseUri()) - try destination?.appendChild(destText) - } else if let sourceData = (source as? DataNode) { - if sourceData.parent() != nil && cleaner.whitelist.isSafeTag(sourceData.parent()!.nodeName()) { - //let sourceData: DataNode = (DataNode) source - let destData: DataNode = DataNode(sourceData.getWholeData(), source.getBaseUri()) - try destination?.appendChild(destData) - } else { - numDiscarded+=1 - } - } else { // else, we don't care about comments, xml proc instructions, etc - numDiscarded+=1 - } - } - - public func tail(_ source: Node, _ depth: Int)throws { - if let x = (source as? Element) { - if cleaner.whitelist.isSafeTag(x.nodeName()) { - // would have descended, so pop destination stack - destination = destination?.parent() - } - } - } - } -} - -extension Cleaner { - fileprivate struct ElementMeta { - let el: Element - let numAttribsDiscarded: Int - - init(_ el: Element, _ numAttribsDiscarded: Int) { - self.el = el - self.numAttribsDiscarded = numAttribsDiscarded - } - } -} diff --git a/Example/Pods/SwiftSoup/Sources/Collector.swift b/Example/Pods/SwiftSoup/Sources/Collector.swift deleted file mode 100755 index 7bb6feb..0000000 --- a/Example/Pods/SwiftSoup/Sources/Collector.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// Collector.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 22/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - * Collects a list of elements that match the supplied criteria. - * - */ -open class Collector { - - private init() { - } - - /** - Build a list of elements, by visiting root and every descendant of root, and testing it against the evaluator. - @param eval Evaluator to test elements against - @param root root of tree to descend - @return list of matches; empty if none - */ - public static func collect (_ eval: Evaluator, _ root: Element)throws->Elements { - let elements: Elements = Elements() - try NodeTraversor(Accumulator(root, elements, eval)).traverse(root) - return elements - } - -} - -private final class Accumulator: NodeVisitor { - private let root: Element - private let elements: Elements - private let eval: Evaluator - - init(_ root: Element, _ elements: Elements, _ eval: Evaluator) { - self.root = root - self.elements = elements - self.eval = eval - } - - public func head(_ node: Node, _ depth: Int) { - guard let el = node as? Element else { - return - } - do { - if try eval.matches(root, el) { - elements.add(el) - } - } catch {} - } - - public func tail(_ node: Node, _ depth: Int) { - // void - } -} diff --git a/Example/Pods/SwiftSoup/Sources/CombiningEvaluator.swift b/Example/Pods/SwiftSoup/Sources/CombiningEvaluator.swift deleted file mode 100755 index fdeb0ae..0000000 --- a/Example/Pods/SwiftSoup/Sources/CombiningEvaluator.swift +++ /dev/null @@ -1,127 +0,0 @@ -// -// CombiningEvaluator.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 23/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - * Base combining (and, or) evaluator. - */ -public class CombiningEvaluator: Evaluator { - - public private(set) var evaluators: Array - var num: Int = 0 - - public override init() { - evaluators = Array() - super.init() - } - - public init(_ evaluators: Array) { - self.evaluators = evaluators - super.init() - updateNumEvaluators() - } - - public init(_ evaluators: Evaluator...) { - self.evaluators = evaluators - super.init() - updateNumEvaluators() - } - - func rightMostEvaluator() -> Evaluator? { - return num > 0 && evaluators.count > 0 ? evaluators[num - 1] : nil - } - - func replaceRightMostEvaluator(_ replacement: Evaluator) { - evaluators[num - 1] = replacement - } - - func updateNumEvaluators() { - // used so we don't need to bash on size() for every match test - num = evaluators.count - } - - public final class And: CombiningEvaluator { - public override init(_ evaluators: [Evaluator]) { - super.init(evaluators) - } - - public override init(_ evaluators: Evaluator...) { - super.init(evaluators) - } - - public override func matches(_ root: Element, _ node: Element) -> Bool { - for index in 0.. String { - let array: [String] = evaluators.map { String($0.toString()) } - return StringUtil.join(array, sep: " ") - } - } - - public final class Or: CombiningEvaluator { - /** - * Create a new Or evaluator. The initial evaluators are ANDed together and used as the first clause of the OR. - * @param evaluators initial OR clause (these are wrapped into an AND evaluator). - */ - public override init(_ evaluators: [Evaluator]) { - super.init() - if num > 1 { - self.evaluators.append(And(evaluators)) - } else { // 0 or 1 - self.evaluators.append(contentsOf: evaluators) - } - updateNumEvaluators() - } - - override init(_ evaluators: Evaluator...) { - super.init() - if num > 1 { - self.evaluators.append(And(evaluators)) - } else { // 0 or 1 - self.evaluators.append(contentsOf: evaluators) - } - updateNumEvaluators() - } - - override init() { - super.init() - } - - public func add(_ evaluator: Evaluator) { - evaluators.append(evaluator) - updateNumEvaluators() - } - - public override func matches(_ root: Element, _ node: Element) -> Bool { - for index in 0.. String { - return ":or\(evaluators.map {String($0.toString())})" - } - } -} diff --git a/Example/Pods/SwiftSoup/Sources/Comment.swift b/Example/Pods/SwiftSoup/Sources/Comment.swift deleted file mode 100755 index 0892cad..0000000 --- a/Example/Pods/SwiftSoup/Sources/Comment.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// Comment.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 22/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - A comment node. - */ -public class Comment: Node { - private static let COMMENT_KEY: String = "comment" - - /** - Create a new comment node. - @param data The contents of the comment - @param baseUri base URI - */ - public init(_ data: String, _ baseUri: String) { - super.init(baseUri) - do { - try attributes?.put(Comment.COMMENT_KEY, data) - } catch {} - } - - public override func nodeName() -> String { - return "#comment" - } - - /** - Get the contents of the comment. - @return comment content - */ - public func getData() -> String { - return attributes!.get(key: Comment.COMMENT_KEY) - } - - override func outerHtmlHead(_ accum: StringBuilder, _ depth: Int, _ out: OutputSettings) { - if (out.prettyPrint()) { - indent(accum, depth, out) - } - accum - .append("") - } - - override func outerHtmlTail(_ accum: StringBuilder, _ depth: Int, _ out: OutputSettings) {} - - public override func copy(with zone: NSZone? = nil) -> Any { - let clone = Comment(attributes!.get(key: Comment.COMMENT_KEY), baseUri!) - return copy(clone: clone) - } - - public override func copy(parent: Node?) -> Node { - let clone = Comment(attributes!.get(key: Comment.COMMENT_KEY), baseUri!) - return copy(clone: clone, parent: parent) - } - - public override func copy(clone: Node, parent: Node?) -> Node { - return super.copy(clone: clone, parent: parent) - } -} diff --git a/Example/Pods/SwiftSoup/Sources/Connection.swift b/Example/Pods/SwiftSoup/Sources/Connection.swift deleted file mode 100755 index 7b309a5..0000000 --- a/Example/Pods/SwiftSoup/Sources/Connection.swift +++ /dev/null @@ -1,10 +0,0 @@ -// -// Connection.swift -// SwifSoup -// -// Created by Nabil Chatbi on 29/09/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation -//TODO: diff --git a/Example/Pods/SwiftSoup/Sources/CssSelector.swift b/Example/Pods/SwiftSoup/Sources/CssSelector.swift deleted file mode 100755 index c812922..0000000 --- a/Example/Pods/SwiftSoup/Sources/CssSelector.swift +++ /dev/null @@ -1,166 +0,0 @@ -// -// CssSelector.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 21/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - * CSS-like element selector, that finds elements matching a query. - * - *

    CssSelector syntax

    - *

    - * A selector is a chain of simple selectors, separated by combinators. Selectors are case insensitive (including against - * elements, attributes, and attribute values). - *

    - *

    - * The universal selector (*) is implicit when no element selector is supplied (i.e. {@code *.header} and {@code .header} - * is equivalent). - *

    - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
    PatternMatchesExample
    *any element*
    tagelements with the given tag namediv
    *|Eelements of type E in any namespace ns*|name finds <fb:name> elements
    ns|Eelements of type E in the namespace nsfb|name finds <fb:name> elements
    #idelements with attribute ID of "id"div#wrap, #logo
    .classelements with a class name of "class"div.left, .result
    [attr]elements with an attribute named "attr" (with any value)a[href], [title]
    [^attrPrefix]elements with an attribute name starting with "attrPrefix". Use to find elements with HTML5 datasets[^data-], div[^data-]
    [attr=val]elements with an attribute named "attr", and value equal to "val"img[width=500], a[rel=nofollow]
    [attr="val"]elements with an attribute named "attr", and value equal to "val"span[hello="Cleveland"][goodbye="Columbus"], a[rel="nofollow"]
    [attr^=valPrefix]elements with an attribute named "attr", and value starting with "valPrefix"a[href^=http:]
    [attr$=valSuffix]elements with an attribute named "attr", and value ending with "valSuffix"img[src$=.png]
    [attr*=valContaining]elements with an attribute named "attr", and value containing "valContaining"a[href*=/search/]
    [attr~=regex]elements with an attribute named "attr", and value matching the regular expressionimg[src~=(?i)\\.(png|jpe?g)]
    The above may be combined in any orderdiv.header[title]

    Combinators

    E Fan F element descended from an E elementdiv a, .logo h1
    E {@literal >} Fan F direct child of Eol {@literal >} li
    E + Fan F element immediately preceded by sibling Eli + li, div.head + div
    E ~ Fan F element preceded by sibling Eh1 ~ p
    E, F, Gall matching elements E, F, or Ga[href], div, h3

    Pseudo selectors

    :lt(n)elements whose sibling index is less than ntd:lt(3) finds the first 3 cells of each row
    :gt(n)elements whose sibling index is greater than ntd:gt(1) finds cells after skipping the first two
    :eq(n)elements whose sibling index is equal to ntd:eq(0) finds the first cell of each row
    :has(selector)elements that contains at least one element matching the selectordiv:has(p) finds divs that contain p elements
    :not(selector)elements that do not match the selector. See also {@link Elements#not(String)}div:not(.logo) finds all divs that do not have the "logo" class.

    div:not(:has(div)) finds divs that do not contain divs.

    :contains(text)elements that contains the specified text. The search is case insensitive. The text may appear in the found element, or any of its descendants.p:contains(SwiftSoup) finds p elements containing the text "SwiftSoup".
    :matches(regex)elements whose text matches the specified regular expression. The text may appear in the found element, or any of its descendants.td:matches(\\d+) finds table cells containing digits. div:matches((?i)login) finds divs containing the text, case insensitively.
    :containsOwn(text)elements that directly contain the specified text. The search is case insensitive. The text must appear in the found element, not any of its descendants.p:containsOwn(SwiftSoup) finds p elements with own text "SwiftSoup".
    :matchesOwn(regex)elements whose own text matches the specified regular expression. The text must appear in the found element, not any of its descendants.td:matchesOwn(\\d+) finds table cells directly containing digits. div:matchesOwn((?i)login) finds divs containing the text, case insensitively.
    The above may be combined in any order and with other selectors.light:contains(name):eq(0)

    Structural pseudo selectors

    :rootThe element that is the root of the document. In HTML, this is the html element:root
    :nth-child(an+b)

    elements that have an+b-1 siblings before it in the document tree, for any positive integer or zero value of n, and has a parent element. For values of a and b greater than zero, this effectively divides the element's children into groups of a elements (the last group taking the remainder), and selecting the bth element of each group. For example, this allows the selectors to address every other row in a table, and could be used to alternate the color of paragraph text in a cycle of four. The a and b values must be integers (positive, negative, or zero). The index of the first child of an element is 1.

    - * In addition to this, :nth-child() can take odd and even as arguments instead. odd has the same signification as 2n+1, and even has the same signification as 2n.
    tr:nth-child(2n+1) finds every odd row of a table. :nth-child(10n-1) the 9th, 19th, 29th, etc, element. li:nth-child(5) the 5h li
    :nth-last-child(an+b)elements that have an+b-1 siblings after it in the document tree. Otherwise like :nth-child()tr:nth-last-child(-n+2) the last two rows of a table
    :nth-of-type(an+b)pseudo-class notation represents an element that has an+b-1 siblings with the same expanded element name before it in the document tree, for any zero or positive integer value of n, and has a parent elementimg:nth-of-type(2n+1)
    :nth-last-of-type(an+b)pseudo-class notation represents an element that has an+b-1 siblings with the same expanded element name after it in the document tree, for any zero or positive integer value of n, and has a parent elementimg:nth-last-of-type(2n+1)
    :first-childelements that are the first child of some other element.div {@literal >} p:first-child
    :last-childelements that are the last child of some other element.ol {@literal >} li:last-child
    :first-of-typeelements that are the first sibling of its type in the list of children of its parent elementdl dt:first-of-type
    :last-of-typeelements that are the last sibling of its type in the list of children of its parent elementtr {@literal >} td:last-of-type
    :only-childelements that have a parent element and whose parent element hasve no other element children
    :only-of-type an element that has a parent element and whose parent element has no other element children with the same expanded element name
    :emptyelements that have no children at all
    - * - * @see Element#select(String) - */ -@available(*, deprecated, renamed: "CssSelector") -typealias Selector = CssSelector - -open class CssSelector { - private let evaluator: Evaluator - private let root: Element - - private init(_ query: String, _ root: Element)throws { - let query = query.trim() - try Validate.notEmpty(string: query) - - self.evaluator = try QueryParser.parse(query) - - self.root = root - } - - private init(_ evaluator: Evaluator, _ root: Element) { - self.evaluator = evaluator - self.root = root - } - - /** - * Find elements matching selector. - * - * @param query CSS selector - * @param root root element to descend into - * @return matching elements, empty if none - * @throws CssSelector.SelectorParseException (unchecked) on an invalid CSS query. - */ - public static func select(_ query: String, _ root: Element)throws->Elements { - return try CssSelector(query, root).select() - } - - /** - * Find elements matching selector. - * - * @param evaluator CSS selector - * @param root root element to descend into - * @return matching elements, empty if none - */ - public static func select(_ evaluator: Evaluator, _ root: Element)throws->Elements { - return try CssSelector(evaluator, root).select() - } - - /** - * Find elements matching selector. - * - * @param query CSS selector - * @param roots root elements to descend into - * @return matching elements, empty if none - */ - public static func select(_ query: String, _ roots: Array)throws->Elements { - try Validate.notEmpty(string: query) - let evaluator: Evaluator = try QueryParser.parse(query) - var elements: Array = Array() - var seenElements: Array = Array() - // dedupe elements by identity, not equality - - for root: Element in roots { - let found: Elements = try select(evaluator, root) - for el: Element in found.array() { - if (!seenElements.contains(el)) { - elements.append(el) - seenElements.append(el) - } - } - } - return Elements(elements) - } - - private func select()throws->Elements { - return try Collector.collect(evaluator, root) - } - - // exclude set. package open so that Elements can implement .not() selector. - static func filterOut(_ elements: Array, _ outs: Array) -> Elements { - let output: Elements = Elements() - for el: Element in elements { - var found: Bool = false - for out: Element in outs { - if (el.equals(out)) { - found = true - break - } - } - if (!found) { - output.add(el) - } - } - return output - } -} diff --git a/Example/Pods/SwiftSoup/Sources/DataNode.swift b/Example/Pods/SwiftSoup/Sources/DataNode.swift deleted file mode 100755 index 37f7199..0000000 --- a/Example/Pods/SwiftSoup/Sources/DataNode.swift +++ /dev/null @@ -1,85 +0,0 @@ -// -// DataNode.swift -// SwifSoup -// -// Created by Nabil Chatbi on 29/09/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - A data node, for contents of style, script tags etc, where contents should not show in text(). - */ -open class DataNode: Node { - private static let DATA_KEY: String = "data" - - /** - Create a new DataNode. - @param data data contents - @param baseUri base URI - */ - public init(_ data: String, _ baseUri: String) { - super.init(baseUri) - do { - try attributes?.put(DataNode.DATA_KEY, data) - } catch {} - - } - - open override func nodeName() -> String { - return "#data" - } - - /** - Get the data contents of this node. Will be unescaped and with original new lines, space etc. - @return data - */ - open func getWholeData() -> String { - return attributes!.get(key: DataNode.DATA_KEY) - } - - /** - * Set the data contents of this node. - * @param data unencoded data - * @return this node, for chaining - */ - @discardableResult - open func setWholeData(_ data: String) -> DataNode { - do { - try attributes?.put(DataNode.DATA_KEY, data) - } catch {} - return self - } - - override func outerHtmlHead(_ accum: StringBuilder, _ depth: Int, _ out: OutputSettings)throws { - accum.append(getWholeData()) // data is not escaped in return from data nodes, so " in script, style is plain - } - - override func outerHtmlTail(_ accum: StringBuilder, _ depth: Int, _ out: OutputSettings) {} - - /** - Create a new DataNode from HTML encoded data. - @param encodedData encoded data - @param baseUri bass URI - @return new DataNode - */ - public static func createFromEncoded(_ encodedData: String, _ baseUri: String)throws->DataNode { - let data = try Entities.unescape(encodedData) - return DataNode(data, baseUri) - } - - public override func copy(with zone: NSZone? = nil) -> Any { - let clone = DataNode(attributes!.get(key: DataNode.DATA_KEY), baseUri!) - return copy(clone: clone) - } - - public override func copy(parent: Node?) -> Node { - let clone = DataNode(attributes!.get(key: DataNode.DATA_KEY), baseUri!) - return copy(clone: clone, parent: parent) - } - - public override func copy(clone: Node, parent: Node?) -> Node { - return super.copy(clone: clone, parent: parent) - } -} diff --git a/Example/Pods/SwiftSoup/Sources/DataUtil.swift b/Example/Pods/SwiftSoup/Sources/DataUtil.swift deleted file mode 100755 index f2d0dee..0000000 --- a/Example/Pods/SwiftSoup/Sources/DataUtil.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// DataUtil.swift -// SwifSoup -// -// Created by Nabil Chatbi on 02/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - * Internal static utilities for handling data. - * - */ -class DataUtil { - - static let charsetPattern = "(?i)\\bcharset=\\s*(?:\"|')?([^\\s,;\"']*)" - static let defaultCharset = "UTF-8" // used if not found in header or meta charset - static let bufferSize = 0x20000 // ~130K. - static let UNICODE_BOM = 0xFEFF - static let mimeBoundaryChars = "-_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - static let boundaryLength = 32 - -} diff --git a/Example/Pods/SwiftSoup/Sources/Document.swift b/Example/Pods/SwiftSoup/Sources/Document.swift deleted file mode 100755 index 12e29cb..0000000 --- a/Example/Pods/SwiftSoup/Sources/Document.swift +++ /dev/null @@ -1,562 +0,0 @@ -// -// Document.swift -// SwifSoup -// -// Created by Nabil Chatbi on 29/09/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -open class Document: Element { - public enum QuirksMode { - case noQuirks, quirks, limitedQuirks - } - - private var _outputSettings: OutputSettings = OutputSettings() - private var _quirksMode: Document.QuirksMode = QuirksMode.noQuirks - private let _location: String - private var updateMetaCharset: Bool = false - - /** - Create a new, empty Document. - @param baseUri base URI of document - @see SwiftSoup#parse - @see #createShell - */ - public init(_ baseUri: String) { - self._location = baseUri - super.init(try! Tag.valueOf("#root", ParseSettings.htmlDefault), baseUri) - } - - /** - Create a valid, empty shell of a document, suitable for adding more elements to. - @param baseUri baseUri of document - @return document with html, head, and body elements. - */ - static public func createShell(_ baseUri: String) -> Document { - let doc: Document = Document(baseUri) - let html: Element = try! doc.appendElement("html") - try! html.appendElement("head") - try! html.appendElement("body") - - return doc - } - - /** - * Get the URL this Document was parsed from. If the starting URL is a redirect, - * this will return the final URL from which the document was served from. - * @return location - */ - public func location() -> String { - return _location - } - - /** - Accessor to the document's {@code head} element. - @return {@code head} - */ - public func head() -> Element? { - return findFirstElementByTagName("head", self) - } - - /** - Accessor to the document's {@code body} element. - @return {@code body} - */ - public func body() -> Element? { - return findFirstElementByTagName("body", self) - } - - /** - Get the string contents of the document's {@code title} element. - @return Trimmed title, or empty string if none set. - */ - public func title()throws->String { - // title is a preserve whitespace tag (for document output), but normalised here - let titleEl: Element? = try getElementsByTag("title").first() - return titleEl != nil ? try StringUtil.normaliseWhitespace(titleEl!.text()).trim() : "" - } - - /** - Set the document's {@code title} element. Updates the existing element, or adds {@code title} to {@code head} if - not present - @param title string to set as title - */ - public func title(_ title: String)throws { - let titleEl: Element? = try getElementsByTag("title").first() - if (titleEl == nil) { // add to head - try head()?.appendElement("title").text(title) - } else { - try titleEl?.text(title) - } - } - - /** - Create a new Element, with this document's base uri. Does not make the new element a child of this document. - @param tagName element tag name (e.g. {@code a}) - @return new element - */ - public func createElement(_ tagName: String)throws->Element { - return try Element(Tag.valueOf(tagName, ParseSettings.preserveCase), self.getBaseUri()) - } - - /** - Normalise the document. This happens after the parse phase so generally does not need to be called. - Moves any text content that is not in the body element into the body. - @return this document after normalisation - */ - @discardableResult - public func normalise()throws->Document { - var htmlE: Element? = findFirstElementByTagName("html", self) - if (htmlE == nil) { - htmlE = try appendElement("html") - } - let htmlEl: Element = htmlE! - - if (head() == nil) { - try htmlEl.prependElement("head") - } - if (body() == nil) { - try htmlEl.appendElement("body") - } - - // pull text nodes out of root, html, and head els, and push into body. non-text nodes are already taken care - // of. do in inverse order to maintain text order. - try normaliseTextNodes(head()!) - try normaliseTextNodes(htmlEl) - try normaliseTextNodes(self) - - try normaliseStructure("head", htmlEl) - try normaliseStructure("body", htmlEl) - - try ensureMetaCharsetElement() - - return self - } - - // does not recurse. - private func normaliseTextNodes(_ element: Element)throws { - var toMove: Array = Array() - for node: Node in element.childNodes { - if let tn = (node as? TextNode) { - if (!tn.isBlank()) { - toMove.append(tn) - } - } - } - - for i in (0.. or contents into one, delete the remainder, and ensure they are owned by - private func normaliseStructure(_ tag: String, _ htmlEl: Element)throws { - let elements: Elements = try self.getElementsByTag(tag) - let master: Element? = elements.first() // will always be available as created above if not existent - if (elements.size() > 1) { // dupes, move contents to master - var toMove: Array = Array() - for i in 1.. - if (!(master != nil && master!.parent() != nil && master!.parent()!.equals(htmlEl))) { - try htmlEl.appendChild(master!) // includes remove() - } - } - - // fast method to get first by tag name, used for html, head, body finders - private func findFirstElementByTagName(_ tag: String, _ node: Node) -> Element? { - if (node.nodeName()==tag) { - return node as? Element - } else { - for child: Node in node.childNodes { - let found: Element? = findFirstElementByTagName(tag, child) - if (found != nil) { - return found - } - } - } - return nil - } - - open override func outerHtml()throws->String { - return try super.html() // no outer wrapper tag - } - - /** - Set the text of the {@code body} of this document. Any existing nodes within the body will be cleared. - @param text unencoded text - @return this document - */ - @discardableResult - public override func text(_ text: String)throws->Element { - try body()?.text(text) // overridden to not nuke doc structure - return self - } - - open override func nodeName() -> String { - return "#document" - } - - /** - * Sets the charset used in this document. This method is equivalent - * to {@link OutputSettings#charset(java.nio.charset.Charset) - * OutputSettings.charset(Charset)} but in addition it updates the - * charset / encoding element within the document. - * - *

    This enables - * {@link #updateMetaCharsetElement(boolean) meta charset update}.

    - * - *

    If there's no element with charset / encoding information yet it will - * be created. Obsolete charset / encoding definitions are removed!

    - * - *

    Elements used:

    - * - *
      - *
    • Html: <meta charset="CHARSET">
    • - *
    • Xml: <?xml version="1.0" encoding="CHARSET">
    • - *
    - * - * @param charset Charset - * - * @see #updateMetaCharsetElement(boolean) - * @see OutputSettings#charset(java.nio.charset.Charset) - */ - public func charset(_ charset: String.Encoding)throws { - updateMetaCharsetElement(true) - _outputSettings.charset(charset) - try ensureMetaCharsetElement() - } - - /** - * Returns the charset used in this document. This method is equivalent - * to {@link OutputSettings#charset()}. - * - * @return Current Charset - * - * @see OutputSettings#charset() - */ - public func charset()->String.Encoding { - return _outputSettings.charset() - } - - /** - * Sets whether the element with charset information in this document is - * updated on changes through {@link #charset(java.nio.charset.Charset) - * Document.charset(Charset)} or not. - * - *

    If set to false (default) there are no elements - * modified.

    - * - * @param update If true the element updated on charset - * changes, false if not - * - * @see #charset(java.nio.charset.Charset) - */ - public func updateMetaCharsetElement(_ update: Bool) { - self.updateMetaCharset = update - } - - /** - * Returns whether the element with charset information in this document is - * updated on changes through {@link #charset(java.nio.charset.Charset) - * Document.charset(Charset)} or not. - * - * @return Returns true if the element is updated on charset - * changes, false if not - */ - public func updateMetaCharsetElement() -> Bool { - return updateMetaCharset - } - - /** - * Ensures a meta charset (html) or xml declaration (xml) with the current - * encoding used. This only applies with - * {@link #updateMetaCharsetElement(boolean) updateMetaCharset} set to - * true, otherwise this method does nothing. - * - *
      - *
    • An exsiting element gets updated with the current charset
    • - *
    • If there's no element yet it will be inserted
    • - *
    • Obsolete elements are removed
    • - *
    - * - *

    Elements used:

    - * - *
      - *
    • Html: <meta charset="CHARSET">
    • - *
    • Xml: <?xml version="1.0" encoding="CHARSET">
    • - *
    - */ - private func ensureMetaCharsetElement()throws { - if (updateMetaCharset) { - let syntax: OutputSettings.Syntax = outputSettings().syntax() - - if (syntax == OutputSettings.Syntax.html) { - let metaCharset: Element? = try select("meta[charset]").first() - - if (metaCharset != nil) { - try metaCharset?.attr("charset", charset().displayName()) - } else { - let head: Element? = self.head() - - if (head != nil) { - try head?.appendElement("meta").attr("charset", charset().displayName()) - } - } - - // Remove obsolete elements - let s = try select("meta[name=charset]") - try s.remove() - - } else if (syntax == OutputSettings.Syntax.xml) { - let node: Node = getChildNodes()[0] - - if let decl = (node as? XmlDeclaration) { - - if (decl.name()=="xml") { - try decl.attr("encoding", charset().displayName()) - - _ = try decl.attr("version") - try decl.attr("version", "1.0") - } else { - try Validate.notNull(obj: baseUri) - let decl = XmlDeclaration("xml", baseUri!, false) - try decl.attr("version", "1.0") - try decl.attr("encoding", charset().displayName()) - - try prependChild(decl) - } - } else { - try Validate.notNull(obj: baseUri) - let decl = XmlDeclaration("xml", baseUri!, false) - try decl.attr("version", "1.0") - try decl.attr("encoding", charset().displayName()) - - try prependChild(decl) - } - } - } - } - - /** - * Get the document's current output settings. - * @return the document's current output settings. - */ - public func outputSettings() -> OutputSettings { - return _outputSettings - } - - /** - * Set the document's output settings. - * @param outputSettings new output settings. - * @return this document, for chaining. - */ - @discardableResult - public func outputSettings(_ outputSettings: OutputSettings) -> Document { - self._outputSettings = outputSettings - return self - } - - public func quirksMode()->Document.QuirksMode { - return _quirksMode - } - - @discardableResult - public func quirksMode(_ quirksMode: Document.QuirksMode) -> Document { - self._quirksMode = quirksMode - return self - } - - public override func copy(with zone: NSZone? = nil) -> Any { - let clone = Document(_location) - return copy(clone: clone) - } - - public override func copy(parent: Node?) -> Node { - let clone = Document(_location) - return copy(clone: clone, parent: parent) - } - - public override func copy(clone: Node, parent: Node?) -> Node { - let clone = clone as! Document - clone._outputSettings = _outputSettings.copy() as! OutputSettings - clone._quirksMode = _quirksMode - clone.updateMetaCharset = updateMetaCharset - return super.copy(clone: clone, parent: parent) - } - -} - -public class OutputSettings: NSCopying { - /** - * The output serialization syntax. - */ - public enum Syntax {case html, xml} - - private var _escapeMode: Entities.EscapeMode = Entities.EscapeMode.base - private var _encoder: String.Encoding = String.Encoding.utf8 // Charset.forName("UTF-8") - private var _prettyPrint: Bool = true - private var _outline: Bool = false - private var _indentAmount: UInt = 1 - private var _syntax = Syntax.html - - public init() {} - - /** - * Get the document's current HTML escape mode: base, which provides a limited set of named HTML - * entities and escapes other characters as numbered entities for maximum compatibility; or extended, - * which uses the complete set of HTML named entities. - *

    - * The default escape mode is base. - * @return the document's current escape mode - */ - public func escapeMode() -> Entities.EscapeMode { - return _escapeMode - } - - /** - * Set the document's escape mode, which determines how characters are escaped when the output character set - * does not support a given character:- using either a named or a numbered escape. - * @param escapeMode the new escape mode to use - * @return the document's output settings, for chaining - */ - @discardableResult - public func escapeMode(_ escapeMode: Entities.EscapeMode) -> OutputSettings { - self._escapeMode = escapeMode - return self - } - - /** - * Get the document's current output charset, which is used to control which characters are escaped when - * generating HTML (via the html() methods), and which are kept intact. - *

    - * Where possible (when parsing from a URL or File), the document's output charset is automatically set to the - * input charset. Otherwise, it defaults to UTF-8. - * @return the document's current charset. - */ - public func encoder() -> String.Encoding { - return _encoder - } - public func charset() -> String.Encoding { - return _encoder - } - - /** - * Update the document's output charset. - * @param charset the new charset to use. - * @return the document's output settings, for chaining - */ - @discardableResult - public func encoder(_ encoder: String.Encoding) -> OutputSettings { - self._encoder = encoder - return self - } - - @discardableResult - public func charset(_ e: String.Encoding) -> OutputSettings { - return encoder(e) - } - - /** - * Get the document's current output syntax. - * @return current syntax - */ - public func syntax() -> Syntax { - return _syntax - } - - /** - * Set the document's output syntax. Either {@code html}, with empty tags and boolean attributes (etc), or - * {@code xml}, with self-closing tags. - * @param syntax serialization syntax - * @return the document's output settings, for chaining - */ - @discardableResult - public func syntax(syntax: Syntax) -> OutputSettings { - _syntax = syntax - return self - } - - /** - * Get if pretty printing is enabled. Default is true. If disabled, the HTML output methods will not re-format - * the output, and the output will generally look like the input. - * @return if pretty printing is enabled. - */ - public func prettyPrint() -> Bool { - return _prettyPrint - } - - /** - * Enable or disable pretty printing. - * @param pretty new pretty print setting - * @return this, for chaining - */ - @discardableResult - public func prettyPrint(pretty: Bool) -> OutputSettings { - _prettyPrint = pretty - return self - } - - /** - * Get if outline mode is enabled. Default is false. If enabled, the HTML output methods will consider - * all tags as block. - * @return if outline mode is enabled. - */ - public func outline() -> Bool { - return _outline - } - - /** - * Enable or disable HTML outline mode. - * @param outlineMode new outline setting - * @return this, for chaining - */ - @discardableResult - public func outline(outlineMode: Bool) -> OutputSettings { - _outline = outlineMode - return self - } - - /** - * Get the current tag indent amount, used when pretty printing. - * @return the current indent amount - */ - public func indentAmount() -> UInt { - return _indentAmount - } - - /** - * Set the indent amount for pretty printing - * @param indentAmount number of spaces to use for indenting each level. Must be {@literal >=} 0. - * @return this, for chaining - */ - @discardableResult - public func indentAmount(indentAmount: UInt) -> OutputSettings { - _indentAmount = indentAmount - return self - } - - public func copy(with zone: NSZone? = nil) -> Any { - let clone: OutputSettings = OutputSettings() - clone.charset(_encoder) // new charset and charset encoder - clone._escapeMode = _escapeMode//Entities.EscapeMode.valueOf(escapeMode.name()) - // indentAmount, prettyPrint are primitives so object.clone() will handle - return clone - } - -} diff --git a/Example/Pods/SwiftSoup/Sources/DocumentType.swift b/Example/Pods/SwiftSoup/Sources/DocumentType.swift deleted file mode 100755 index 95f9b10..0000000 --- a/Example/Pods/SwiftSoup/Sources/DocumentType.swift +++ /dev/null @@ -1,129 +0,0 @@ -// -// DocumentType.swift -// SwifSoup -// -// Created by Nabil Chatbi on 29/09/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - * A {@code } node. - */ -public class DocumentType: Node { - static let PUBLIC_KEY: String = "PUBLIC" - static let SYSTEM_KEY: String = "SYSTEM" - private static let NAME: String = "name" - private static let PUB_SYS_KEY: String = "pubSysKey"; // PUBLIC or SYSTEM - private static let PUBLIC_ID: String = "publicId" - private static let SYSTEM_ID: String = "systemId" - // todo: quirk mode from publicId and systemId - - /** - * Create a new doctype element. - * @param name the doctype's name - * @param publicId the doctype's public ID - * @param systemId the doctype's system ID - * @param baseUri the doctype's base URI - */ - public init(_ name: String, _ publicId: String, _ systemId: String, _ baseUri: String) { - super.init(baseUri) - do { - try attr(DocumentType.NAME, name) - try attr(DocumentType.PUBLIC_ID, publicId) - if (has(DocumentType.PUBLIC_ID)) { - try attr(DocumentType.PUB_SYS_KEY, DocumentType.PUBLIC_KEY) - } - try attr(DocumentType.SYSTEM_ID, systemId) - } catch {} - } - - /** - * Create a new doctype element. - * @param name the doctype's name - * @param publicId the doctype's public ID - * @param systemId the doctype's system ID - * @param baseUri the doctype's base URI - */ - public init(_ name: String, _ pubSysKey: String?, _ publicId: String, _ systemId: String, _ baseUri: String) { - super.init(baseUri) - do { - try attr(DocumentType.NAME, name) - if(pubSysKey != nil) { - try attr(DocumentType.PUB_SYS_KEY, pubSysKey!) - } - try attr(DocumentType.PUBLIC_ID, publicId) - try attr(DocumentType.SYSTEM_ID, systemId) - } catch {} - } - - public override func nodeName() -> String { - return "#doctype" - } - - override func outerHtmlHead(_ accum: StringBuilder, _ depth: Int, _ out: OutputSettings) { - if (out.syntax() == OutputSettings.Syntax.html && !has(DocumentType.PUBLIC_ID) && !has(DocumentType.SYSTEM_ID)) { - // looks like a html5 doctype, go lowercase for aesthetics - accum.append("") - } - - override func outerHtmlTail(_ accum: StringBuilder, _ depth: Int, _ out: OutputSettings) { - } - - private func has(_ attribute: String) -> Bool { - do { - return !StringUtil.isBlank(try attr(attribute)) - } catch {return false} - } - - public override func copy(with zone: NSZone? = nil) -> Any { - let clone = DocumentType(attributes!.get(key: DocumentType.NAME), - attributes!.get(key: DocumentType.PUBLIC_ID), - attributes!.get(key: DocumentType.SYSTEM_ID), - baseUri!) - return copy(clone: clone) - } - - public override func copy(parent: Node?) -> Node { - let clone = DocumentType(attributes!.get(key: DocumentType.NAME), - attributes!.get(key: DocumentType.PUBLIC_ID), - attributes!.get(key: DocumentType.SYSTEM_ID), - baseUri!) - return copy(clone: clone, parent: parent) - } - - public override func copy(clone: Node, parent: Node?) -> Node { - return super.copy(clone: clone, parent: parent) - } - -} diff --git a/Example/Pods/SwiftSoup/Sources/Element.swift b/Example/Pods/SwiftSoup/Sources/Element.swift deleted file mode 100755 index 6259b99..0000000 --- a/Example/Pods/SwiftSoup/Sources/Element.swift +++ /dev/null @@ -1,1308 +0,0 @@ -// -// Element.swift -// SwifSoup -// -// Created by Nabil Chatbi on 29/09/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -open class Element: Node { - var _tag: Tag - - private static let classString = "class" - private static let emptyString = "" - private static let idString = "id" - private static let rootString = "#root" - - //private static let classSplit : Pattern = Pattern("\\s+") - private static let classSplit = "\\s+" - - /** - * Create a new, standalone Element. (Standalone in that is has no parent.) - * - * @param tag tag of this element - * @param baseUri the base URI - * @param attributes initial attributes - * @see #appendChild(Node) - * @see #appendElement(String) - */ - public init(_ tag: Tag, _ baseUri: String, _ attributes: Attributes) { - self._tag = tag - super.init(baseUri, attributes) - } - /** - * Create a new Element from a tag and a base URI. - * - * @param tag element tag - * @param baseUri the base URI of this element. It is acceptable for the base URI to be an empty - * string, but not null. - * @see Tag#valueOf(String, ParseSettings) - */ - public init(_ tag: Tag, _ baseUri: String) { - self._tag = tag - super.init(baseUri, Attributes()) - } - - open override func nodeName() -> String { - return _tag.getName() - } - /** - * Get the name of the tag for this element. E.g. {@code div} - * - * @return the tag name - */ - open func tagName() -> String { - return _tag.getName() - } - open func tagNameNormal() -> String { - return _tag.getNameNormal() - } - - /** - * Change the tag of this element. For example, convert a {@code } to a {@code

    } with - * {@code el.tagName("div")}. - * - * @param tagName new tag name for this element - * @return this element, for chaining - */ - @discardableResult - public func tagName(_ tagName: String)throws->Element { - try Validate.notEmpty(string: tagName, msg: "Tag name must not be empty.") - _tag = try Tag.valueOf(tagName, ParseSettings.preserveCase) // preserve the requested tag case - return self - } - - /** - * Get the Tag for this element. - * - * @return the tag object - */ - open func tag() -> Tag { - return _tag - } - - /** - * Test if this element is a block-level element. (E.g. {@code
    == true} or an inline element - * {@code

    == false}). - * - * @return true if block, false if not (and thus inline) - */ - open func isBlock() -> Bool { - return _tag.isBlock() - } - - /** - * Get the {@code id} attribute of this element. - * - * @return The id attribute, if present, or an empty string if not. - */ - open func id() -> String { - guard let attributes = attributes else {return Element.emptyString} - do { - return try attributes.getIgnoreCase(key: Element.idString) - } catch {} - return Element.emptyString - } - - /** - * Set an attribute value on this element. If this element already has an attribute with the - * key, its value is updated; otherwise, a new attribute is added. - * - * @return this element - */ - @discardableResult - open override func attr(_ attributeKey: String, _ attributeValue: String)throws->Element { - try super.attr(attributeKey, attributeValue) - return self - } - - /** - * Set a boolean attribute value on this element. Setting to true sets the attribute value to "" and - * marks the attribute as boolean so no value is written out. Setting to false removes the attribute - * with the same key if it exists. - * - * @param attributeKey the attribute key - * @param attributeValue the attribute value - * - * @return this element - */ - @discardableResult - open func attr(_ attributeKey: String, _ attributeValue: Bool)throws->Element { - try attributes?.put(attributeKey, attributeValue) - return self - } - - /** - * Get this element's HTML5 custom data attributes. Each attribute in the element that has a key - * starting with "data-" is included the dataset. - *

    - * E.g., the element {@code

    ...} has the dataset - * {@code package=SwiftSoup, language=java}. - *

    - * This map is a filtered view of the element's attribute map. Changes to one map (add, remove, update) are reflected - * in the other map. - *

    - * You can find elements that have data attributes using the {@code [^data-]} attribute key prefix selector. - * @return a map of {@code key=value} custom data attributes. - */ - open func dataset()->Dictionary { - return attributes!.dataset() - } - - open override func parent() -> Element? { - return parentNode as? Element - } - - /** - * Get this element's parent and ancestors, up to the document root. - * @return this element's stack of parents, closest first. - */ - open func parents() -> Elements { - let parents: Elements = Elements() - Element.accumulateParents(self, parents) - return parents - } - - private static func accumulateParents(_ el: Element, _ parents: Elements) { - let parent: Element? = el.parent() - if (parent != nil && !(parent!.tagName() == Element.rootString)) { - parents.add(parent!) - accumulateParents(parent!, parents) - } - } - - /** - * Get a child element of this element, by its 0-based index number. - *

    - * Note that an element can have both mixed Nodes and Elements as children. This method inspects - * a filtered list of children that are elements, and the index is based on that filtered list. - *

    - * - * @param index the index number of the element to retrieve - * @return the child element, if it exists, otherwise throws an {@code IndexOutOfBoundsException} - * @see #childNode(int) - */ - open func child(_ index: Int) -> Element { - return children().get(index) - } - - /** - * Get this element's child elements. - *

    - * This is effectively a filter on {@link #childNodes()} to get Element nodes. - *

    - * @return child elements. If this element has no children, returns an - * empty list. - * @see #childNodes() - */ - open func children() -> Elements { - // create on the fly rather than maintaining two lists. if gets slow, memoize, and mark dirty on change - var elements = Array() - for node in childNodes { - if let n = node as? Element { - elements.append(n) - } - } - return Elements(elements) - } - - /** - * Get this element's child text nodes. The list is unmodifiable but the text nodes may be manipulated. - *

    - * This is effectively a filter on {@link #childNodes()} to get Text nodes. - * @return child text nodes. If this element has no text nodes, returns an - * empty list. - *

    - * For example, with the input HTML: {@code

    One Two Three
    Four

    } with the {@code p} element selected: - *
      - *
    • {@code p.text()} = {@code "One Two Three Four"}
    • - *
    • {@code p.ownText()} = {@code "One Three Four"}
    • - *
    • {@code p.children()} = {@code Elements[,
      ]}
    • - *
    • {@code p.childNodes()} = {@code List["One ", , " Three ",
      , " Four"]}
    • - *
    • {@code p.textNodes()} = {@code List["One ", " Three ", " Four"]}
    • - *
    - */ - open func textNodes()->Array { - var textNodes = Array() - for node in childNodes { - if let n = node as? TextNode { - textNodes.append(n) - } - } - return textNodes - } - - /** - * Get this element's child data nodes. The list is unmodifiable but the data nodes may be manipulated. - *

    - * This is effectively a filter on {@link #childNodes()} to get Data nodes. - *

    - * @return child data nodes. If this element has no data nodes, returns an - * empty list. - * @see #data() - */ - open func dataNodes()->Array { - var dataNodes = Array() - for node in childNodes { - if let n = node as? DataNode { - dataNodes.append(n) - } - } - return dataNodes - } - - /** - * Find elements that match the {@link CssSelector} CSS query, with this element as the starting context. Matched elements - * may include this element, or any of its children. - *

    - * This method is generally more powerful to use than the DOM-type {@code getElementBy*} methods, because - * multiple filters can be combined, e.g.: - *

    - *
      - *
    • {@code el.select("a[href]")} - finds links ({@code a} tags with {@code href} attributes) - *
    • {@code el.select("a[href*=example.com]")} - finds links pointing to example.com (loosely) - *
    - *

    - * See the query syntax documentation in {@link CssSelector}. - *

    - * - * @param cssQuery a {@link CssSelector} CSS-like query - * @return elements that match the query (empty if none match) - * @see CssSelector - * @throws CssSelector.SelectorParseException (unchecked) on an invalid CSS query. - */ - public func select(_ cssQuery: String)throws->Elements { - return try CssSelector.select(cssQuery, self) - } - - /** - * Check if this element matches the given {@link CssSelector} CSS query. - * @param cssQuery a {@link CssSelector} CSS query - * @return if this element matches the query - */ - public func iS(_ cssQuery: String)throws->Bool { - return try iS(QueryParser.parse(cssQuery)) - } - - /** - * Check if this element matches the given {@link CssSelector} CSS query. - * @param cssQuery a {@link CssSelector} CSS query - * @return if this element matches the query - */ - public func iS(_ evaluator: Evaluator)throws->Bool { - guard let od = self.ownerDocument() else { - return false - } - return try evaluator.matches(od, self) - } - - /** - * Add a node child node to this element. - * - * @param child node to add. - * @return this element, so that you can add more child nodes or elements. - */ - @discardableResult - public func appendChild(_ child: Node)throws->Element { - // was - Node#addChildren(child). short-circuits an array create and a loop. - try reparentChild(child) - ensureChildNodes() - childNodes.append(child) - child.setSiblingIndex(childNodes.count - 1) - return self - } - - /** - * Add a node to the start of this element's children. - * - * @param child node to add. - * @return this element, so that you can add more child nodes or elements. - */ - @discardableResult - public func prependChild(_ child: Node)throws->Element { - try addChildren(0, child) - return self - } - - /** - * Inserts the given child nodes into this element at the specified index. Current nodes will be shifted to the - * right. The inserted nodes will be moved from their current parent. To prevent moving, copy the nodes first. - * - * @param index 0-based index to insert children at. Specify {@code 0} to insert at the start, {@code -1} at the - * end - * @param children child nodes to insert - * @return this element, for chaining. - */ - @discardableResult - public func insertChildren(_ index: Int, _ children: Array)throws->Element { - //Validate.notNull(children, "Children collection to be inserted must not be null.") - var index = index - let currentSize: Int = childNodeSize() - if (index < 0) { index += currentSize + 1} // roll around - try Validate.isTrue(val: index >= 0 && index <= currentSize, msg: "Insert position out of bounds.") - - try addChildren(index, children) - return self - } - - /** - * Create a new element by tag name, and add it as the last child. - * - * @param tagName the name of the tag (e.g. {@code div}). - * @return the new element, to allow you to add content to it, e.g.: - * {@code parent.appendElement("h1").attr("id", "header").text("Welcome")} - */ - @discardableResult - public func appendElement(_ tagName: String)throws->Element { - let child: Element = Element(try Tag.valueOf(tagName), getBaseUri()) - try appendChild(child) - return child - } - - /** - * Create a new element by tag name, and add it as the first child. - * - * @param tagName the name of the tag (e.g. {@code div}). - * @return the new element, to allow you to add content to it, e.g.: - * {@code parent.prependElement("h1").attr("id", "header").text("Welcome")} - */ - @discardableResult - public func prependElement(_ tagName: String)throws->Element { - let child: Element = Element(try Tag.valueOf(tagName), getBaseUri()) - try prependChild(child) - return child - } - - /** - * Create and append a new TextNode to this element. - * - * @param text the unencoded text to add - * @return this element - */ - @discardableResult - public func appendText(_ text: String)throws->Element { - let node: TextNode = TextNode(text, getBaseUri()) - try appendChild(node) - return self - } - - /** - * Create and prepend a new TextNode to this element. - * - * @param text the unencoded text to add - * @return this element - */ - @discardableResult - public func prependText(_ text: String)throws->Element { - let node: TextNode = TextNode(text, getBaseUri()) - try prependChild(node) - return self - } - - /** - * Add inner HTML to this element. The supplied HTML will be parsed, and each node appended to the end of the children. - * @param html HTML to add inside this element, after the existing HTML - * @return this element - * @see #html(String) - */ - @discardableResult - public func append(_ html: String)throws->Element { - let nodes: Array = try Parser.parseFragment(html, self, getBaseUri()) - try addChildren(nodes) - return self - } - - /** - * Add inner HTML into this element. The supplied HTML will be parsed, and each node prepended to the start of the element's children. - * @param html HTML to add inside this element, before the existing HTML - * @return this element - * @see #html(String) - */ - @discardableResult - public func prepend(_ html: String)throws->Element { - let nodes: Array = try Parser.parseFragment(html, self, getBaseUri()) - try addChildren(0, nodes) - return self - } - - /** - * Insert the specified HTML into the DOM before this element (as a preceding sibling). - * - * @param html HTML to add before this element - * @return this element, for chaining - * @see #after(String) - */ - @discardableResult - open override func before(_ html: String)throws->Element { - return try super.before(html) as! Element - } - - /** - * Insert the specified node into the DOM before this node (as a preceding sibling). - * @param node to add before this element - * @return this Element, for chaining - * @see #after(Node) - */ - @discardableResult - open override func before(_ node: Node)throws->Element { - return try super.before(node) as! Element - } - - /** - * Insert the specified HTML into the DOM after this element (as a following sibling). - * - * @param html HTML to add after this element - * @return this element, for chaining - * @see #before(String) - */ - @discardableResult - open override func after(_ html: String)throws->Element { - return try super.after(html) as! Element - } - - /** - * Insert the specified node into the DOM after this node (as a following sibling). - * @param node to add after this element - * @return this element, for chaining - * @see #before(Node) - */ - open override func after(_ node: Node)throws->Element { - return try super.after(node) as! Element - } - - /** - * Remove all of the element's child nodes. Any attributes are left as-is. - * @return this element - */ - @discardableResult - public func empty() -> Element { - childNodes.removeAll() - return self - } - - /** - * Wrap the supplied HTML around this element. - * - * @param html HTML to wrap around this element, e.g. {@code
    }. Can be arbitrarily deep. - * @return this element, for chaining. - */ - @discardableResult - open override func wrap(_ html: String)throws->Element { - return try super.wrap(html) as! Element - } - - /** - * Get a CSS selector that will uniquely select this element. - *

    - * If the element has an ID, returns #id; - * otherwise returns the parent (if any) CSS selector, followed by {@literal '>'}, - * followed by a unique selector for the element (tag.class.class:nth-child(n)). - *

    - * - * @return the CSS Path that can be used to retrieve the element in a selector. - */ - public func cssSelector()throws->String { - let elementId = id() - if (elementId.count > 0) { - return "#" + elementId - } - - // Translate HTML namespace ns:tag to CSS namespace syntax ns|tag - let tagName: String = self.tagName().replacingOccurrences(of: ":", with: "|") - var selector: String = tagName - let cl = try classNames() - let classes: String = cl.joined(separator: ".") - if (classes.count > 0) { - selector.append(".") - selector.append(classes) - } - - if (parent() == nil || ((parent() as? Document) != nil)) // don't add Document to selector, as will always have a html node - { - return selector - } - - selector.insert(contentsOf: " > ", at: selector.startIndex) - if (try parent()!.select(selector).array().count > 1) { - selector.append(":nth-child(\(try elementSiblingIndex() + 1))") - } - - return try parent()!.cssSelector() + (selector) - } - - /** - * Get sibling elements. If the element has no sibling elements, returns an empty list. An element is not a sibling - * of itself, so will not be included in the returned list. - * @return sibling elements - */ - public func siblingElements() -> Elements { - if (parentNode == nil) {return Elements()} - - let elements: Array? = parent()?.children().array() - let siblings: Elements = Elements() - if let elements = elements { - for el: Element in elements { - if (el != self) { - siblings.add(el) - } - } - } - return siblings - } - - /** - * Gets the next sibling element of this element. E.g., if a {@code div} contains two {@code p}s, - * the {@code nextElementSibling} of the first {@code p} is the second {@code p}. - *

    - * This is similar to {@link #nextSibling()}, but specifically finds only Elements - *

    - * @return the next element, or null if there is no next element - * @see #previousElementSibling() - */ - public func nextElementSibling()throws->Element? { - if (parentNode == nil) {return nil} - let siblings: Array? = parent()?.children().array() - let index: Int? = try Element.indexInList(self, siblings) - try Validate.notNull(obj: index) - if let siblings = siblings { - if (siblings.count > index!+1) { - return siblings[index!+1] - } else { - return nil} - } - return nil - } - - /** - * Gets the previous element sibling of this element. - * @return the previous element, or null if there is no previous element - * @see #nextElementSibling() - */ - public func previousElementSibling()throws->Element? { - if (parentNode == nil) {return nil} - let siblings: Array? = parent()?.children().array() - let index: Int? = try Element.indexInList(self, siblings) - try Validate.notNull(obj: index) - if (index! > 0) { - return siblings?[index!-1] - } else { - return nil - } - } - - /** - * Gets the first element sibling of this element. - * @return the first sibling that is an element (aka the parent's first element child) - */ - public func firstElementSibling() -> Element? { - // todo: should firstSibling() exclude this? - let siblings: Array? = parent()?.children().array() - return (siblings != nil && siblings!.count > 1) ? siblings![0] : nil - } - - /* - * Get the list index of this element in its element sibling list. I.e. if this is the first element - * sibling, returns 0. - * @return position in element sibling list - */ - public func elementSiblingIndex()throws->Int { - if (parent() == nil) {return 0} - let x = try Element.indexInList(self, parent()?.children().array()) - return x == nil ? 0 : x! - } - - /** - * Gets the last element sibling of this element - * @return the last sibling that is an element (aka the parent's last element child) - */ - public func lastElementSibling() -> Element? { - let siblings: Array? = parent()?.children().array() - return (siblings != nil && siblings!.count > 1) ? siblings![siblings!.count - 1] : nil - } - - private static func indexInList(_ search: Element, _ elements: Array?)throws->Int? { - try Validate.notNull(obj: elements) - if let elements = elements { - for i in 0..Elements { - try Validate.notEmpty(string: tagName) - let tagName = tagName.lowercased().trim() - - return try Collector.collect(Evaluator.Tag(tagName), self) - } - - /** - * Find an element by ID, including or under this element. - *

    - * Note that this finds the first matching ID, starting with this element. If you search down from a different - * starting point, it is possible to find a different element by ID. For unique element by ID within a Document, - * use {@link Document#getElementById(String)} - * @param id The ID to search for. - * @return The first matching element by ID, starting with this element, or null if none found. - */ - public func getElementById(_ id: String)throws->Element? { - try Validate.notEmpty(string: id) - - let elements: Elements = try Collector.collect(Evaluator.Id(id), self) - if (elements.array().count > 0) { - return elements.get(0) - } else { - return nil - } - } - - /** - * Find elements that have this class, including or under this element. Case insensitive. - *

    - * Elements can have multiple classes (e.g. {@code

    }. This method - * checks each class, so you can find the above with {@code el.getElementsByClass("header")}. - * - * @param className the name of the class to search for. - * @return elements with the supplied class name, empty if none - * @see #hasClass(String) - * @see #classNames() - */ - public func getElementsByClass(_ className: String)throws->Elements { - try Validate.notEmpty(string: className) - - return try Collector.collect(Evaluator.Class(className), self) - } - - /** - * Find elements that have a named attribute set. Case insensitive. - * - * @param key name of the attribute, e.g. {@code href} - * @return elements that have this attribute, empty if none - */ - public func getElementsByAttribute(_ key: String)throws->Elements { - try Validate.notEmpty(string: key) - let key = key.trim() - - return try Collector.collect(Evaluator.Attribute(key), self) - } - - /** - * Find elements that have an attribute name starting with the supplied prefix. Use {@code data-} to find elements - * that have HTML5 datasets. - * @param keyPrefix name prefix of the attribute e.g. {@code data-} - * @return elements that have attribute names that start with with the prefix, empty if none. - */ - public func getElementsByAttributeStarting(_ keyPrefix: String)throws->Elements { - try Validate.notEmpty(string: keyPrefix) - let keyPrefix = keyPrefix.trim() - - return try Collector.collect(Evaluator.AttributeStarting(keyPrefix), self) - } - - /** - * Find elements that have an attribute with the specific value. Case insensitive. - * - * @param key name of the attribute - * @param value value of the attribute - * @return elements that have this attribute with this value, empty if none - */ - public func getElementsByAttributeValue(_ key: String, _ value: String)throws->Elements { - return try Collector.collect(Evaluator.AttributeWithValue(key, value), self) - } - - /** - * Find elements that either do not have this attribute, or have it with a different value. Case insensitive. - * - * @param key name of the attribute - * @param value value of the attribute - * @return elements that do not have a matching attribute - */ - public func getElementsByAttributeValueNot(_ key: String, _ value: String)throws->Elements { - return try Collector.collect(Evaluator.AttributeWithValueNot(key, value), self) - } - - /** - * Find elements that have attributes that start with the value prefix. Case insensitive. - * - * @param key name of the attribute - * @param valuePrefix start of attribute value - * @return elements that have attributes that start with the value prefix - */ - public func getElementsByAttributeValueStarting(_ key: String, _ valuePrefix: String)throws->Elements { - return try Collector.collect(Evaluator.AttributeWithValueStarting(key, valuePrefix), self) - } - - /** - * Find elements that have attributes that end with the value suffix. Case insensitive. - * - * @param key name of the attribute - * @param valueSuffix end of the attribute value - * @return elements that have attributes that end with the value suffix - */ - public func getElementsByAttributeValueEnding(_ key: String, _ valueSuffix: String)throws->Elements { - return try Collector.collect(Evaluator.AttributeWithValueEnding(key, valueSuffix), self) - } - - /** - * Find elements that have attributes whose value contains the match string. Case insensitive. - * - * @param key name of the attribute - * @param match substring of value to search for - * @return elements that have attributes containing this text - */ - public func getElementsByAttributeValueContaining(_ key: String, _ match: String)throws->Elements { - return try Collector.collect(Evaluator.AttributeWithValueContaining(key, match), self) - } - - /** - * Find elements that have attributes whose values match the supplied regular expression. - * @param key name of the attribute - * @param pattern compiled regular expression to match against attribute values - * @return elements that have attributes matching this regular expression - */ - public func getElementsByAttributeValueMatching(_ key: String, _ pattern: Pattern)throws->Elements { - return try Collector.collect(Evaluator.AttributeWithValueMatching(key, pattern), self) - - } - - /** - * Find elements that have attributes whose values match the supplied regular expression. - * @param key name of the attribute - * @param regex regular expression to match against attribute values. You can use embedded flags (such as (?i) and (?m) to control regex options. - * @return elements that have attributes matching this regular expression - */ - public func getElementsByAttributeValueMatching(_ key: String, _ regex: String)throws->Elements { - var pattern: Pattern - do { - pattern = Pattern.compile(regex) - try pattern.validate() - } catch { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: "Pattern syntax error: \(regex)") - } - return try getElementsByAttributeValueMatching(key, pattern) - } - - /** - * Find elements whose sibling index is less than the supplied index. - * @param index 0-based index - * @return elements less than index - */ - public func getElementsByIndexLessThan(_ index: Int)throws->Elements { - return try Collector.collect(Evaluator.IndexLessThan(index), self) - } - - /** - * Find elements whose sibling index is greater than the supplied index. - * @param index 0-based index - * @return elements greater than index - */ - public func getElementsByIndexGreaterThan(_ index: Int)throws->Elements { - return try Collector.collect(Evaluator.IndexGreaterThan(index), self) - } - - /** - * Find elements whose sibling index is equal to the supplied index. - * @param index 0-based index - * @return elements equal to index - */ - public func getElementsByIndexEquals(_ index: Int)throws->Elements { - return try Collector.collect(Evaluator.IndexEquals(index), self) - } - - /** - * Find elements that contain the specified string. The search is case insensitive. The text may appear directly - * in the element, or in any of its descendants. - * @param searchText to look for in the element's text - * @return elements that contain the string, case insensitive. - * @see Element#text() - */ - public func getElementsContainingText(_ searchText: String)throws->Elements { - return try Collector.collect(Evaluator.ContainsText(searchText), self) - } - - /** - * Find elements that directly contain the specified string. The search is case insensitive. The text must appear directly - * in the element, not in any of its descendants. - * @param searchText to look for in the element's own text - * @return elements that contain the string, case insensitive. - * @see Element#ownText() - */ - public func getElementsContainingOwnText(_ searchText: String)throws->Elements { - return try Collector.collect(Evaluator.ContainsOwnText(searchText), self) - } - - /** - * Find elements whose text matches the supplied regular expression. - * @param pattern regular expression to match text against - * @return elements matching the supplied regular expression. - * @see Element#text() - */ - public func getElementsMatchingText(_ pattern: Pattern)throws->Elements { - return try Collector.collect(Evaluator.Matches(pattern), self) - } - - /** - * Find elements whose text matches the supplied regular expression. - * @param regex regular expression to match text against. You can use embedded flags (such as (?i) and (?m) to control regex options. - * @return elements matching the supplied regular expression. - * @see Element#text() - */ - public func getElementsMatchingText(_ regex: String)throws->Elements { - let pattern: Pattern - do { - pattern = Pattern.compile(regex) - try pattern.validate() - } catch { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: "Pattern syntax error: \(regex)") - } - return try getElementsMatchingText(pattern) - } - - /** - * Find elements whose own text matches the supplied regular expression. - * @param pattern regular expression to match text against - * @return elements matching the supplied regular expression. - * @see Element#ownText() - */ - public func getElementsMatchingOwnText(_ pattern: Pattern)throws->Elements { - return try Collector.collect(Evaluator.MatchesOwn(pattern), self) - } - - /** - * Find elements whose text matches the supplied regular expression. - * @param regex regular expression to match text against. You can use embedded flags (such as (?i) and (?m) to control regex options. - * @return elements matching the supplied regular expression. - * @see Element#ownText() - */ - public func getElementsMatchingOwnText(_ regex: String)throws->Elements { - let pattern: Pattern - do { - pattern = Pattern.compile(regex) - try pattern.validate() - } catch { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: "Pattern syntax error: \(regex)") - } - return try getElementsMatchingOwnText(pattern) - } - - /** - * Find all elements under this element (including self, and children of children). - * - * @return all elements - */ - public func getAllElements()throws->Elements { - return try Collector.collect(Evaluator.AllElements(), self) - } - - /** - * Gets the combined text of this element and all its children. Whitespace is normalized and trimmed. - *

    - * For example, given HTML {@code

    Hello there now!

    }, {@code p.text()} returns {@code "Hello there now!"} - * - * @return unencoded text, or empty string if none. - * @see #ownText() - * @see #textNodes() - */ - class textNodeVisitor: NodeVisitor { - let accum: StringBuilder - let trimAndNormaliseWhitespace: Bool - init(_ accum: StringBuilder, trimAndNormaliseWhitespace: Bool) { - self.accum = accum - self.trimAndNormaliseWhitespace = trimAndNormaliseWhitespace - } - public func head(_ node: Node, _ depth: Int) { - if let textNode = (node as? TextNode) { - if trimAndNormaliseWhitespace { - Element.appendNormalisedText(accum, textNode) - } else { - accum.append(textNode.getWholeText()) - } - } else if let element = (node as? Element) { - if !accum.isEmpty && - (element.isBlock() || element._tag.getName() == "br") && - !TextNode.lastCharIsWhitespace(accum) { - accum.append(" ") - } - } - } - - public func tail(_ node: Node, _ depth: Int) { - } - } - public func text(trimAndNormaliseWhitespace: Bool = true)throws->String { - let accum: StringBuilder = StringBuilder() - try NodeTraversor(textNodeVisitor(accum, trimAndNormaliseWhitespace: trimAndNormaliseWhitespace)).traverse(self) - let text = accum.toString() - if trimAndNormaliseWhitespace { - return text.trim() - } - return text - } - - /** - * Gets the text owned by this element only; does not get the combined text of all children. - *

    - * For example, given HTML {@code

    Hello there now!

    }, {@code p.ownText()} returns {@code "Hello now!"}, - * whereas {@code p.text()} returns {@code "Hello there now!"}. - * Note that the text within the {@code b} element is not returned, as it is not a direct child of the {@code p} element. - * - * @return unencoded text, or empty string if none. - * @see #text() - * @see #textNodes() - */ - public func ownText() -> String { - let sb: StringBuilder = StringBuilder() - ownText(sb) - return sb.toString().trim() - } - - private func ownText(_ accum: StringBuilder) { - for child: Node in childNodes { - if let textNode = (child as? TextNode) { - Element.appendNormalisedText(accum, textNode) - } else if let child = (child as? Element) { - Element.appendWhitespaceIfBr(child, accum) - } - } - } - - private static func appendNormalisedText(_ accum: StringBuilder, _ textNode: TextNode) { - let text: String = textNode.getWholeText() - - if (Element.preserveWhitespace(textNode.parentNode)) { - accum.append(text) - } else { - StringUtil.appendNormalisedWhitespace(accum, string: text, stripLeading: TextNode.lastCharIsWhitespace(accum)) - } - } - - private static func appendWhitespaceIfBr(_ element: Element, _ accum: StringBuilder) { - if (element._tag.getName() == "br" && !TextNode.lastCharIsWhitespace(accum)) { - accum.append(" ") - } - } - - static func preserveWhitespace(_ node: Node?) -> Bool { - // looks only at this element and one level up, to prevent recursion & needless stack searches - if let element = (node as? Element) { - return element._tag.preserveWhitespace() || element.parent() != nil && element.parent()!._tag.preserveWhitespace() - } - return false - } - - /** - * Set the text of this element. Any existing contents (text or elements) will be cleared - * @param text unencoded text - * @return this element - */ - @discardableResult - public func text(_ text: String)throws->Element { - empty() - let textNode: TextNode = TextNode(text, baseUri) - try appendChild(textNode) - return self - } - - /** - Test if this element has any text content (that is not just whitespace). - @return true if element has non-blank text content. - */ - public func hasText() -> Bool { - for child: Node in childNodes { - if let textNode = (child as? TextNode) { - if (!textNode.isBlank()) { - return true - } - } else if let el = (child as? Element) { - if (el.hasText()) { - return true - } - } - } - return false - } - - /** - * Get the combined data of this element. Data is e.g. the inside of a {@code script} tag. - * @return the data, or empty string if none - * - * @see #dataNodes() - */ - public func data() -> String { - let sb: StringBuilder = StringBuilder() - - for childNode: Node in childNodes { - if let data = (childNode as? DataNode) { - sb.append(data.getWholeData()) - } else if let element = (childNode as? Element) { - let elementData: String = element.data() - sb.append(elementData) - } - } - return sb.toString() - } - - /** - * Gets the literal value of this element's "class" attribute, which may include multiple class names, space - * separated. (E.g. on <div class="header gray"> returns, "header gray") - * @return The literal class attribute, or empty string if no class attribute set. - */ - public func className()throws->String { - return try attr(Element.classString).trim() - } - - /** - * Get all of the element's class names. E.g. on element {@code
    }, - * returns a set of two elements {@code "header", "gray"}. Note that modifications to this set are not pushed to - * the backing {@code class} attribute; use the {@link #classNames(java.util.Set)} method to persist them. - * @return set of classnames, empty if no class attribute - */ - public func classNames()throws->OrderedSet { - let fitted = try className().replaceAll(of: Element.classSplit, with: " ", options: .caseInsensitive) - let names: [String] = fitted.components(separatedBy: " ") - let classNames: OrderedSet = OrderedSet(sequence: names) - classNames.remove(Element.emptyString) // if classNames() was empty, would include an empty class - return classNames - } - - /** - Set the element's {@code class} attribute to the supplied class names. - @param classNames set of classes - @return this element, for chaining - */ - @discardableResult - public func classNames(_ classNames: OrderedSet)throws->Element { - try attributes?.put(Element.classString, StringUtil.join(classNames, sep: " ")) - return self - } - - /** - * Tests if this element has a class. Case insensitive. - * @param className name of class to check for - * @return true if it does, false if not - */ - // performance sensitive - public func hasClass(_ className: String) -> Bool { - let classAtt: String? = attributes?.get(key: Element.classString) - let len: Int = (classAtt != nil) ? classAtt!.count : 0 - let wantLen: Int = className.count - - if (len == 0 || len < wantLen) { - return false - } - let classAttr = classAtt! - - // if both lengths are equal, only need compare the className with the attribute - if (len == wantLen) { - return className.equalsIgnoreCase(string: classAttr) - } - - // otherwise, scan for whitespace and compare regions (with no string or arraylist allocations) - var inClass: Bool = false - var start: Int = 0 - for i in 0..Element { - let classes: OrderedSet = try classNames() - classes.append(className) - try classNames(classes) - return self - } - - /** - Remove a class name from this element's {@code class} attribute. - @param className class name to remove - @return this element - */ - @discardableResult - public func removeClass(_ className: String)throws->Element { - let classes: OrderedSet = try classNames() - classes.remove(className) - try classNames(classes) - return self - } - - /** - Toggle a class name on this element's {@code class} attribute: if present, remove it; otherwise add it. - @param className class name to toggle - @return this element - */ - @discardableResult - public func toggleClass(_ className: String)throws->Element { - let classes: OrderedSet = try classNames() - if (classes.contains(className)) {classes.remove(className) - } else { - classes.append(className) - } - try classNames(classes) - - return self - } - - /** - * Get the value of a form element (input, textarea, etc). - * @return the value of the form element, or empty string if not set. - */ - public func val()throws->String { - if (tagName()=="textarea") { - return try text() - } else { - return try attr("value") - } - } - - /** - * Set the value of a form element (input, textarea, etc). - * @param value value to set - * @return this element (for chaining) - */ - @discardableResult - public func val(_ value: String)throws->Element { - if (tagName() == "textarea") { - try text(value) - } else { - try attr("value", value) - } - return self - } - - override func outerHtmlHead(_ accum: StringBuilder, _ depth: Int, _ out: OutputSettings)throws { - if (out.prettyPrint() && (_tag.formatAsBlock() || (parent() != nil && parent()!.tag().formatAsBlock()) || out.outline())) { - if !accum.isEmpty { - indent(accum, depth, out) - } - } - accum - .append("<") - .append(tagName()) - try attributes?.html(accum: accum, out: out) - - // selfclosing includes unknown tags, isEmpty defines tags that are always empty - if (childNodes.isEmpty && _tag.isSelfClosing()) { - if (out.syntax() == OutputSettings.Syntax.html && _tag.isEmpty()) { - accum.append(">") - } else { - accum.append(" />") // in html, in xml - } - } else { - accum.append(">") - } - } - - override func outerHtmlTail(_ accum: StringBuilder, _ depth: Int, _ out: OutputSettings) { - if (!(childNodes.isEmpty && _tag.isSelfClosing())) { - if (out.prettyPrint() && (!childNodes.isEmpty && ( - _tag.formatAsBlock() || (out.outline() && (childNodes.count>1 || (childNodes.count==1 && !(((childNodes[0] as? TextNode) != nil))))) - ))) { - indent(accum, depth, out) - } - accum.append("") - } - } - - /** - * Retrieves the element's inner HTML. E.g. on a {@code
    } with one empty {@code

    }, would return - * {@code

    }. (Whereas {@link #outerHtml()} would return {@code

    }.) - * - * @return String of HTML. - * @see #outerHtml() - */ - public func html()throws->String { - let accum: StringBuilder = StringBuilder() - try html2(accum) - return getOutputSettings().prettyPrint() ? accum.toString().trim() : accum.toString() - } - - private func html2(_ accum: StringBuilder)throws { - for node in childNodes { - try node.outerHtml(accum) - } - } - - /** - * {@inheritDoc} - */ - open override func html(_ appendable: StringBuilder)throws->StringBuilder { - for node in childNodes { - try node.outerHtml(appendable) - } - return appendable - } - - /** - * Set this element's inner HTML. Clears the existing HTML first. - * @param html HTML to parse and set into this element - * @return this element - * @see #append(String) - */ - @discardableResult - public func html(_ html: String)throws->Element { - empty() - try append(html) - return self - } - - public override func copy(with zone: NSZone? = nil) -> Any { - let clone = Element(_tag, baseUri!, attributes!) - return copy(clone: clone) - } - - public override func copy(parent: Node?) -> Node { - let clone = Element(_tag, baseUri!, attributes!) - return copy(clone: clone, parent: parent) - } - public override func copy(clone: Node, parent: Node?) -> Node { - return super.copy(clone: clone, parent: parent) - } - - override public func hash(into hasher: inout Hasher) { - super.hash(into: &hasher) - hasher.combine(_tag) - } -} diff --git a/Example/Pods/SwiftSoup/Sources/Elements.swift b/Example/Pods/SwiftSoup/Sources/Elements.swift deleted file mode 100755 index b8e3852..0000000 --- a/Example/Pods/SwiftSoup/Sources/Elements.swift +++ /dev/null @@ -1,657 +0,0 @@ -// -// Elements.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 20/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// -/** -A list of {@link Element}s, with methods that act on every element in the list. -

    -To get an {@code Elements} object, use the {@link Element#select(String)} method. -

    -*/ - -import Foundation - -//open typealias Elements = Array -//typealias E = Element -open class Elements: NSCopying { - fileprivate var this: Array = Array() - - ///base init - public init() { - } - ///Initialized with an array - public init(_ a: Array) { - this = a - } - ///Initialized with an order set - public init(_ a: OrderedSet) { - this.append(contentsOf: a) - } - - /** - * Creates a deep copy of these elements. - * @return a deep copy - */ - public func copy(with zone: NSZone? = nil) -> Any { - let clone: Elements = Elements() - for e: Element in this { - clone.add(e.copy() as! Element) - } - return clone - } - - // attribute methods - /** - Get an attribute value from the first matched element that has the attribute. - @param attributeKey The attribute key. - @return The attribute value from the first matched element that has the attribute.. If no elements were matched (isEmpty() == true), - or if the no elements have the attribute, returns empty string. - @see #hasAttr(String) - */ - open func attr(_ attributeKey: String)throws->String { - for element in this { - if (element.hasAttr(attributeKey)) { - return try element.attr(attributeKey) - } - } - return "" - } - - /** - Checks if any of the matched elements have this attribute set. - @param attributeKey attribute key - @return true if any of the elements have the attribute; false if none do. - */ - open func hasAttr(_ attributeKey: String) -> Bool { - for element in this { - if element.hasAttr(attributeKey) {return true} - } - return false - } - - /** - * Set an attribute on all matched elements. - * @param attributeKey attribute key - * @param attributeValue attribute value - * @return this - */ - @discardableResult - open func attr(_ attributeKey: String, _ attributeValue: String)throws->Elements { - for element in this { - try element.attr(attributeKey, attributeValue) - } - return self - } - - /** - * Remove an attribute from every matched element. - * @param attributeKey The attribute to remove. - * @return this (for chaining) - */ - @discardableResult - open func removeAttr(_ attributeKey: String)throws->Elements { - for element in this { - try element.removeAttr(attributeKey) - } - return self - } - - /** - Add the class name to every matched element's {@code class} attribute. - @param className class name to add - @return this - */ - @discardableResult - open func addClass(_ className: String)throws->Elements { - for element in this { - try element.addClass(className) - } - return self - } - - /** - Remove the class name from every matched element's {@code class} attribute, if present. - @param className class name to remove - @return this - */ - @discardableResult - open func removeClass(_ className: String)throws->Elements { - for element: Element in this { - try element.removeClass(className) - } - return self - } - - /** - Toggle the class name on every matched element's {@code class} attribute. - @param className class name to add if missing, or remove if present, from every element. - @return this - */ - @discardableResult - open func toggleClass(_ className: String)throws->Elements { - for element: Element in this { - try element.toggleClass(className) - } - return self - } - - /** - Determine if any of the matched elements have this class name set in their {@code class} attribute. - @param className class name to check for - @return true if any do, false if none do - */ - - open func hasClass(_ className: String) -> Bool { - for element: Element in this { - if (element.hasClass(className)) { - return true - } - } - return false - } - - /** - * Get the form element's value of the first matched element. - * @return The form element's value, or empty if not set. - * @see Element#val() - */ - open func val()throws->String { - if (size() > 0) { - return try first()!.val() - } - return "" - } - - /** - * Set the form element's value in each of the matched elements. - * @param value The value to set into each matched element - * @return this (for chaining) - */ - @discardableResult - open func val(_ value: String)throws->Elements { - for element: Element in this { - try element.val(value) - } - return self - } - - /** - * Get the combined text of all the matched elements. - *

    - * Note that it is possible to get repeats if the matched elements contain both parent elements and their own - * children, as the Element.text() method returns the combined text of a parent and all its children. - * @return string of all text: unescaped and no HTML. - * @see Element#text() - */ - open func text(trimAndNormaliseWhitespace: Bool = true)throws->String { - let sb: StringBuilder = StringBuilder() - for element: Element in this { - if !sb.isEmpty { - sb.append(" ") - } - sb.append(try element.text(trimAndNormaliseWhitespace: trimAndNormaliseWhitespace)) - } - return sb.toString() - } - - /// Check if an element has text - open func hasText() -> Bool { - for element: Element in this { - if (element.hasText()) { - return true - } - } - return false - } - - /** - * Get the text content of each of the matched elements. If an element has no text, then it is not included in the - * result. - * @return A list of each matched element's text content. - * @see Element#text() - * @see Element#hasText() - * @see #text() - */ - public func eachText()throws->Array { - var texts: Array = Array() - for el: Element in this { - if (el.hasText()){ - texts.append(try el.text()) - } - } - return texts; - } - - /** - * Get the combined inner HTML of all matched elements. - * @return string of all element's inner HTML. - * @see #text() - * @see #outerHtml() - */ - open func html()throws->String { - let sb: StringBuilder = StringBuilder() - for element: Element in this { - if !sb.isEmpty { - sb.append("\n") - } - sb.append(try element.html()) - } - return sb.toString() - } - - /** - * Get the combined outer HTML of all matched elements. - * @return string of all element's outer HTML. - * @see #text() - * @see #html() - */ - open func outerHtml()throws->String { - let sb: StringBuilder = StringBuilder() - for element in this { - if !sb.isEmpty { - sb.append("\n") - } - sb.append(try element.outerHtml()) - } - return sb.toString() - } - - /** - * Get the combined outer HTML of all matched elements. Alias of {@link #outerHtml()}. - * @return string of all element's outer HTML. - * @see #text() - * @see #html() - */ - - open func toString()throws->String { - return try outerHtml() - } - - /** - * Update the tag name of each matched element. For example, to change each {@code } to a {@code }, do - * {@code doc.select("i").tagName("em");} - * @param tagName the new tag name - * @return this, for chaining - * @see Element#tagName(String) - */ - @discardableResult - open func tagName(_ tagName: String)throws->Elements { - for element: Element in this { - try element.tagName(tagName) - } - return self - } - - /** - * Set the inner HTML of each matched element. - * @param html HTML to parse and set into each matched element. - * @return this, for chaining - * @see Element#html(String) - */ - @discardableResult - open func html(_ html: String)throws->Elements { - for element: Element in this { - try element.html(html) - } - return self - } - - /** - * Add the supplied HTML to the start of each matched element's inner HTML. - * @param html HTML to add inside each element, before the existing HTML - * @return this, for chaining - * @see Element#prepend(String) - */ - @discardableResult - open func prepend(_ html: String)throws->Elements { - for element: Element in this { - try element.prepend(html) - } - return self - } - - /** - * Add the supplied HTML to the end of each matched element's inner HTML. - * @param html HTML to add inside each element, after the existing HTML - * @return this, for chaining - * @see Element#append(String) - */ - @discardableResult - open func append(_ html: String)throws->Elements { - for element: Element in this { - try element.append(html) - } - return self - } - - /** - * Insert the supplied HTML before each matched element's outer HTML. - * @param html HTML to insert before each element - * @return this, for chaining - * @see Element#before(String) - */ - @discardableResult - open func before(_ html: String)throws->Elements { - for element: Element in this { - try element.before(html) - } - return self - } - - /** - * Insert the supplied HTML after each matched element's outer HTML. - * @param html HTML to insert after each element - * @return this, for chaining - * @see Element#after(String) - */ - @discardableResult - open func after(_ html: String)throws->Elements { - for element: Element in this { - try element.after(html) - } - return self - } - - /** - Wrap the supplied HTML around each matched elements. For example, with HTML - {@code

    This is SwiftSoup

    }, - doc.select("b").wrap("<i></i>"); - becomes {@code

    This is SwiftSoup

    } - @param html HTML to wrap around each element, e.g. {@code
    }. Can be arbitrarily deep. - @return this (for chaining) - @see Element#wrap - */ - @discardableResult - open func wrap(_ html: String)throws->Elements { - try Validate.notEmpty(string: html) - for element: Element in this { - try element.wrap(html) - } - return self - } - - /** - * Removes the matched elements from the DOM, and moves their children up into their parents. This has the effect of - * dropping the elements but keeping their children. - *

    - * This is useful for e.g removing unwanted formatting elements but keeping their contents. - *

    - * - * E.g. with HTML:

    {@code

    One Two
    }

    - *

    {@code doc.select("font").unwrap();}

    - *

    HTML = {@code

    One Two
    }

    - * - * @return this (for chaining) - * @see Node#unwrap - */ - @discardableResult - open func unwrap()throws->Elements { - for element: Element in this { - try element.unwrap() - } - return self - } - - /** - * Empty (remove all child nodes from) each matched element. This is similar to setting the inner HTML of each - * element to nothing. - *

    - * E.g. HTML: {@code

    Hello there

    now

    }
    - * doc.select("p").empty();
    - * HTML = {@code

    } - * @return this, for chaining - * @see Element#empty() - * @see #remove() - */ - @discardableResult - open func empty() -> Elements { - for element: Element in this { - element.empty() - } - return self - } - - /** - * Remove each matched element from the DOM. This is similar to setting the outer HTML of each element to nothing. - *

    - * E.g. HTML: {@code

    Hello

    there

    }
    - * doc.select("p").remove();
    - * HTML = {@code
    } - *

    - * Note that this method should not be used to clean user-submitted HTML; rather, use {@link Cleaner} to clean HTML. - * @return this, for chaining - * @see Element#empty() - * @see #empty() - */ - @discardableResult - open func remove()throws->Elements { - for element in this { - try element.remove() - } - return self - } - - // filters - - /** - * Find matching elements within this element list. - * @param query A {@link CssSelector} query - * @return the filtered list of elements, or an empty list if none match. - */ - open func select(_ query: String)throws->Elements { - return try CssSelector.select(query, this) - } - - /** - * Remove elements from this list that match the {@link CssSelector} query. - *

    - * E.g. HTML: {@code

    Two
    }
    - * Elements divs = doc.select("div").not(".logo");
    - * Result: {@code divs: [
    Two
    ]} - *

    - * @param query the selector query whose results should be removed from these elements - * @return a new elements list that contains only the filtered results - */ - open func not(_ query: String)throws->Elements { - let out: Elements = try CssSelector.select(query, this) - return CssSelector.filterOut(this, out.this) - } - - /** - * Get the nth matched element as an Elements object. - *

    - * See also {@link #get(int)} to retrieve an Element. - * @param index the (zero-based) index of the element in the list to retain - * @return Elements containing only the specified element, or, if that element did not exist, an empty list. - */ - open func eq(_ index: Int) -> Elements { - return size() > index ? Elements([get(index)]) : Elements() - } - - /** - * Test if any of the matched elements match the supplied query. - * @param query A selector - * @return true if at least one element in the list matches the query. - */ - open func iS(_ query: String)throws->Bool { - let eval: Evaluator = try QueryParser.parse(query) - for e: Element in this { - if (try e.iS(eval)) { - return true - } - } - return false - - } - - /** - * Get all of the parents and ancestor elements of the matched elements. - * @return all of the parents and ancestor elements of the matched elements - */ - - open func parents() -> Elements { - let combo: OrderedSet = OrderedSet() - for e: Element in this { - combo.append(contentsOf: e.parents().array()) - } - return Elements(combo) - } - - // list-like methods - /** - Get the first matched element. - @return The first matched element, or null if contents is empty. - */ - open func first() -> Element? { - return isEmpty() ? nil : get(0) - } - - /// Check if no element stored - open func isEmpty() -> Bool { - return array().count == 0 - } - - /// Count - open func size() -> Int { - return array().count - } - - /** - Get the last matched element. - @return The last matched element, or null if contents is empty. - */ - open func last() -> Element? { - return isEmpty() ? nil : get(size() - 1) - } - - /** - * Perform a depth-first traversal on each of the selected elements. - * @param nodeVisitor the visitor callbacks to perform on each node - * @return this, for chaining - */ - @discardableResult - open func traverse(_ nodeVisitor: NodeVisitor)throws->Elements { - let traversor: NodeTraversor = NodeTraversor(nodeVisitor) - for el: Element in this { - try traversor.traverse(el) - } - return self - } - - /** - * Get the {@link FormElement} forms from the selected elements, if any. - * @return a list of {@link FormElement}s pulled from the matched elements. The list will be empty if the elements contain - * no forms. - */ - open func forms()->Array { - var forms: Array = Array() - for el: Element in this { - if let el = el as? FormElement { - forms.append(el) - } - } - return forms - } - - /** - * Appends the specified element to the end of this list. - * - * @param e element to be appended to this list - * @return true (as specified by {@link Collection#add}) - */ - open func add(_ e: Element) { - this.append(e) - } - - /** - * Insert the specified element at index. - */ - open func add(_ index: Int, _ element: Element) { - this.insert(element, at: index) - } - - /// Return element at index - open func get(_ i: Int) -> Element { - return this[i] - } - - /// Returns all elements - open func array()->Array { - return this - } -} - -/** -* Elements extension Equatable. -*/ -extension Elements: Equatable { - /// Returns a Boolean value indicating whether two values are equal. - /// - /// Equality is the inverse of inequality. For any values `a` and `b`, - /// `a == b` implies that `a != b` is `false`. - /// - /// - Parameters: - /// - lhs: A value to compare. - /// - rhs: Another value to compare. - public static func ==(lhs: Elements, rhs: Elements) -> Bool { - return lhs.this == rhs.this - } -} - -/** -* Elements RandomAccessCollection -*/ -extension Elements: RandomAccessCollection { - public subscript(position: Int) -> Element { - return this[position] - } - - public var startIndex: Int { - return this.startIndex - } - - public var endIndex: Int { - return this.endIndex - } - - /// The number of Element objects in the collection. - /// Equivalent to `size()` - public var count: Int { - return this.count - } -} - -/** -* Elements IteratorProtocol. -*/ -public struct ElementsIterator: IteratorProtocol { - /// Elements reference - let elements: Elements - //current element index - var index = 0 - - /// Initializer - init(_ countdown: Elements) { - self.elements = countdown - } - - /// Advances to the next element and returns it, or `nil` if no next element - mutating public func next() -> Element? { - let result = index < elements.size() ? elements.get(index) : nil - index += 1 - return result - } -} - -/** -* Elements Extension Sequence. -*/ -extension Elements: Sequence { - /// Returns an iterator over the elements of this sequence. - public func makeIterator() -> ElementsIterator { - return ElementsIterator(self) - } -} diff --git a/Example/Pods/SwiftSoup/Sources/Entities.swift b/Example/Pods/SwiftSoup/Sources/Entities.swift deleted file mode 100755 index fe5c638..0000000 --- a/Example/Pods/SwiftSoup/Sources/Entities.swift +++ /dev/null @@ -1,323 +0,0 @@ -// -// Entities.swift -// SwifSoup -// -// Created by Nabil Chatbi on 29/09/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - * HTML entities, and escape routines. - * Source: W3C HTML - * named character references. - */ -public class Entities { - private static let empty = -1 - private static let emptyName = "" - private static let codepointRadix: Int = 36 - - public class EscapeMode: Equatable { - - /** Restricted entities suitable for XHTML output: lt, gt, amp, and quot only. */ - public static let xhtml: EscapeMode = EscapeMode(string: Entities.xhtml, size: 4, id: 0) - /** Default HTML output entities. */ - public static let base: EscapeMode = EscapeMode(string: Entities.base, size: 106, id: 1) - /** Complete HTML entities. */ - public static let extended: EscapeMode = EscapeMode(string: Entities.full, size: 2125, id: 2) - - fileprivate let value: Int - - struct NamedCodepoint { - let scalar: UnicodeScalar - let name: String - } - - // Array of named references, sorted by name for binary search. built by BuildEntities. - // The few entities that map to a multi-codepoint sequence go into multipoints. - fileprivate var entitiesByName: [NamedCodepoint] = [] - - // Array of entities in first-codepoint order. We don't currently support - // multicodepoints to single named value currently. Lazy because this index - // is used only when generating HTML text. - fileprivate lazy var entitiesByCodepoint = entitiesByName.sorted() { a, b in a.scalar < b.scalar } - - public static func == (left: EscapeMode, right: EscapeMode) -> Bool { - return left.value == right.value - } - - static func != (left: EscapeMode, right: EscapeMode) -> Bool { - return left.value != right.value - } - - private static let codeDelims: [UnicodeScalar] = [",", ";"] - - init(string: String, size: Int, id: Int) { - - value = id - let reader: CharacterReader = CharacterReader(string) - - entitiesByName.reserveCapacity(size) - while !reader.isEmpty() { - let name: String = reader.consumeTo("=") - reader.advance() - let cp1: Int = Int(reader.consumeToAny(EscapeMode.codeDelims), radix: codepointRadix) ?? 0 - let codeDelim: UnicodeScalar = reader.current() - reader.advance() - let cp2: Int - if (codeDelim == ",") { - cp2 = Int(reader.consumeTo(";"), radix: codepointRadix) ?? 0 - reader.advance() - } else { - cp2 = empty - } - let _ = Int(reader.consumeTo("\n"), radix: codepointRadix) ?? 0 - reader.advance() - - entitiesByName.append(NamedCodepoint(scalar: UnicodeScalar(cp1)!, name: name)) - - if (cp2 != empty) { - if !Thread.isMainThread { - multipointsSemaphore.wait() - } - multipoints[name] = [UnicodeScalar(cp1)!, UnicodeScalar(cp2)!] - if !Thread.isMainThread { - multipointsSemaphore.signal() - } - } - } - // Entities should start in name order, but better safe than sorry... - entitiesByName.sort() { a, b in a.name < b.name } - } - - // Only returns the first of potentially multiple codepoints - public func codepointForName(_ name: String) -> UnicodeScalar? { - let ix = entitiesByName.binarySearch { $0.name < name } - guard ix < entitiesByName.endIndex else { return nil } - let entity = entitiesByName[ix] - guard entity.name == name else { return nil } - return entity.scalar - } - - // Search by first codepoint only - public func nameForCodepoint(_ codepoint: UnicodeScalar ) -> String? { - var ix = entitiesByCodepoint.binarySearch { $0.scalar < codepoint } - var matches: [String] = [] - while ix < entitiesByCodepoint.endIndex && entitiesByCodepoint[ix].scalar == codepoint { - matches.append(entitiesByCodepoint[ix].name) - ix = entitiesByCodepoint.index(after: ix) - } - return matches.isEmpty ? nil : matches.sorted().last! - } - - private func size() -> Int { - return entitiesByName.count - } - - } - - private static var multipoints: [String: [UnicodeScalar]] = [:] // name -> multiple character references - private static var multipointsSemaphore = DispatchSemaphore(value: 1) - - /** - * Check if the input is a known named entity - * @param name the possible entity name (e.g. "lt" or "amp") - * @return true if a known named entity - */ - public static func isNamedEntity(_ name: String ) -> Bool { - return (EscapeMode.extended.codepointForName(name) != nil) - } - - /** - * Check if the input is a known named entity in the base entity set. - * @param name the possible entity name (e.g. "lt" or "amp") - * @return true if a known named entity in the base set - * @see #isNamedEntity(String) - */ - public static func isBaseNamedEntity(_ name: String) -> Bool { - return EscapeMode.base.codepointForName(name) != nil - } - - /** - * Get the character(s) represented by the named entitiy - * @param name entity (e.g. "lt" or "amp") - * @return the string value of the character(s) represented by this entity, or "" if not defined - */ - public static func getByName(name: String) -> String? { - if let scalars = codepointsForName(name) { - return String(String.UnicodeScalarView(scalars)) - } - return nil - } - - public static func codepointsForName(_ name: String) -> [UnicodeScalar]? { - if !Thread.isMainThread { - multipointsSemaphore.wait() - } - if let scalars = multipoints[name] { - if !Thread.isMainThread { - multipointsSemaphore.signal() - } - return scalars - } - if !Thread.isMainThread { - multipointsSemaphore.signal() - } - - if let scalar = EscapeMode.extended.codepointForName(name) { - return [scalar] - } - return nil - } - - public static func escape(_ string: String, _ encode: String.Encoding = .utf8 ) -> String { - return Entities.escape(string, OutputSettings().charset(encode).escapeMode(Entities.EscapeMode.extended)) - } - - public static func escape(_ string: String, _ out: OutputSettings) -> String { - let accum = StringBuilder()//string.characters.count * 2 - escape(accum, string, out, false, false, false) - // try { - // - // } catch (IOException e) { - // throw new SerializationException(e) // doesn't happen - // } - return accum.toString() - } - - // this method is ugly, and does a lot. but other breakups cause rescanning and stringbuilder generations - static func escape(_ accum: StringBuilder, _ string: String, _ out: OutputSettings, _ inAttribute: Bool, _ normaliseWhite: Bool, _ stripLeadingWhite: Bool ) { - var lastWasWhite = false - var reachedNonWhite = false - let escapeMode: EscapeMode = out.escapeMode() - let encoder: String.Encoding = out.encoder() - //let length = UInt32(string.characters.count) - - var codePoint: UnicodeScalar - for ch in string.unicodeScalars { - codePoint = ch - - if (normaliseWhite) { - if (codePoint.isWhitespace) { - if ((stripLeadingWhite && !reachedNonWhite) || lastWasWhite) { - continue - } - accum.append(UnicodeScalar.Space) - lastWasWhite = true - continue - } else { - lastWasWhite = false - reachedNonWhite = true - } - } - - // surrogate pairs, split implementation for efficiency on single char common case (saves creating strings, char[]): - if (codePoint.value < Character.MIN_SUPPLEMENTARY_CODE_POINT) { - let c = codePoint - // html specific and required escapes: - switch (codePoint) { - case UnicodeScalar.Ampersand: - accum.append("&") - break - case UnicodeScalar(UInt32(0xA0))!: - if (escapeMode != EscapeMode.xhtml) { - accum.append(" ") - } else { - accum.append(" ") - } - break - case UnicodeScalar.LessThan: - // escape when in character data or when in a xml attribue val; not needed in html attr val - if (!inAttribute || escapeMode == EscapeMode.xhtml) { - accum.append("<") - } else { - accum.append(c) - } - break - case UnicodeScalar.GreaterThan: - if (!inAttribute) { - accum.append(">") - } else { - accum.append(c)} - break - case "\"": - if (inAttribute) { - accum.append(""") - } else { - accum.append(c) - } - break - default: - if (canEncode(c, encoder)) { - accum.append(c) - } else { - appendEncoded(accum: accum, escapeMode: escapeMode, codePoint: codePoint) - } - } - } else { - if (encoder.canEncode(String(codePoint))) // uses fallback encoder for simplicity - { - accum.append(String(codePoint)) - } else { - appendEncoded(accum: accum, escapeMode: escapeMode, codePoint: codePoint) - } - } - } - } - - private static func appendEncoded(accum: StringBuilder, escapeMode: EscapeMode, codePoint: UnicodeScalar) { - if let name = escapeMode.nameForCodepoint(codePoint) { - // ok for identity check - accum.append(UnicodeScalar.Ampersand).append(name).append(";") - } else { - accum.append("&#x").append(String.toHexString(n: Int(codePoint.value)) ).append(";") - } - } - - public static func unescape(_ string: String)throws-> String { - return try unescape(string: string, strict: false) - } - - /** - * Unescape the input string. - * @param string to un-HTML-escape - * @param strict if "strict" (that is, requires trailing ';' char, otherwise that's optional) - * @return unescaped string - */ - public static func unescape(string: String, strict: Bool)throws -> String { - return try Parser.unescapeEntities(string, strict) - } - - /* - * Provides a fast-path for Encoder.canEncode, which drastically improves performance on Android post JellyBean. - * After KitKat, the implementation of canEncode degrades to the point of being useless. For non ASCII or UTF, - * performance may be bad. We can add more encoders for common character sets that are impacted by performance - * issues on Android if required. - * - * Benchmarks: * - * OLD toHtml() impl v New (fastpath) in millis - * Wiki: 1895, 16 - * CNN: 6378, 55 - * Alterslash: 3013, 28 - * Jsoup: 167, 2 - */ - private static func canEncode(_ c: UnicodeScalar, _ fallback: String.Encoding) -> Bool { - // todo add more charset tests if impacted by Android's bad perf in canEncode - switch (fallback) { - case String.Encoding.ascii: - return c.value < 0x80 - case String.Encoding.utf8: - return true // real is:!(Character.isLowSurrogate(c) || Character.isHighSurrogate(c)) - but already check above - default: - return fallback.canEncode(String(Character(c))) - } - } - - static let xhtml: String = "amp=12;1\ngt=1q;3\nlt=1o;2\nquot=y;0" - - static let base: String = "AElig=5i;1c\nAMP=12;2\nAacute=5d;17\nAcirc=5e;18\nAgrave=5c;16\nAring=5h;1b\nAtilde=5f;19\nAuml=5g;1a\nCOPY=4p;h\nCcedil=5j;1d\nETH=5s;1m\nEacute=5l;1f\nEcirc=5m;1g\nEgrave=5k;1e\nEuml=5n;1h\nGT=1q;6\nIacute=5p;1j\nIcirc=5q;1k\nIgrave=5o;1i\nIuml=5r;1l\nLT=1o;4\nNtilde=5t;1n\nOacute=5v;1p\nOcirc=5w;1q\nOgrave=5u;1o\nOslash=60;1u\nOtilde=5x;1r\nOuml=5y;1s\nQUOT=y;0\nREG=4u;n\nTHORN=66;20\nUacute=62;1w\nUcirc=63;1x\nUgrave=61;1v\nUuml=64;1y\nYacute=65;1z\naacute=69;23\nacirc=6a;24\nacute=50;u\naelig=6e;28\nagrave=68;22\namp=12;3\naring=6d;27\natilde=6b;25\nauml=6c;26\nbrvbar=4m;e\nccedil=6f;29\ncedil=54;y\ncent=4i;a\ncopy=4p;i\ncurren=4k;c\ndeg=4w;q\ndivide=6v;2p\neacute=6h;2b\necirc=6i;2c\negrave=6g;2a\neth=6o;2i\neuml=6j;2d\nfrac12=59;13\nfrac14=58;12\nfrac34=5a;14\ngt=1q;7\niacute=6l;2f\nicirc=6m;2g\niexcl=4h;9\nigrave=6k;2e\niquest=5b;15\niuml=6n;2h\nlaquo=4r;k\nlt=1o;5\nmacr=4v;p\nmicro=51;v\nmiddot=53;x\nnbsp=4g;8\nnot=4s;l\nntilde=6p;2j\noacute=6r;2l\nocirc=6s;2m\nograve=6q;2k\nordf=4q;j\nordm=56;10\noslash=6w;2q\notilde=6t;2n\nouml=6u;2o\npara=52;w\nplusmn=4x;r\npound=4j;b\nquot=y;1\nraquo=57;11\nreg=4u;o\nsect=4n;f\nshy=4t;m\nsup1=55;z\nsup2=4y;s\nsup3=4z;t\nszlig=67;21\nthorn=72;2w\ntimes=5z;1t\nuacute=6y;2s\nucirc=6z;2t\nugrave=6x;2r\numl=4o;g\nuuml=70;2u\nyacute=71;2v\nyen=4l;d\nyuml=73;2x" - - static let full: String = "AElig=5i;2v\nAMP=12;8\nAacute=5d;2p\nAbreve=76;4k\nAcirc=5e;2q\nAcy=sw;av\nAfr=2kn8;1kh\nAgrave=5c;2o\nAlpha=pd;8d\nAmacr=74;4i\nAnd=8cz;1e1\nAogon=78;4m\nAopf=2koo;1ls\nApplyFunction=6e9;ew\nAring=5h;2t\nAscr=2kkc;1jc\nAssign=6s4;s6\nAtilde=5f;2r\nAuml=5g;2s\nBackslash=6qe;o1\nBarv=8h3;1it\nBarwed=6x2;120\nBcy=sx;aw\nBecause=6r9;pw\nBernoullis=6jw;gn\nBeta=pe;8e\nBfr=2kn9;1ki\nBopf=2kop;1lt\nBreve=k8;82\nBscr=6jw;gp\nBumpeq=6ry;ro\nCHcy=tj;bi\nCOPY=4p;1q\nCacute=7a;4o\nCap=6vm;zz\nCapitalDifferentialD=6kl;h8\nCayleys=6jx;gq\nCcaron=7g;4u\nCcedil=5j;2w\nCcirc=7c;4q\nCconint=6r4;pn\nCdot=7e;4s\nCedilla=54;2e\nCenterDot=53;2b\nCfr=6jx;gr\nChi=pz;8y\nCircleDot=6u1;x8\nCircleMinus=6ty;x3\nCirclePlus=6tx;x1\nCircleTimes=6tz;x5\nClockwiseContourIntegral=6r6;pp\nCloseCurlyDoubleQuote=6cd;e0\nCloseCurlyQuote=6c9;dt\nColon=6rb;q1\nColone=8dw;1en\nCongruent=6sh;sn\nConint=6r3;pm\nContourIntegral=6r2;pi\nCopf=6iq;f7\nCoproduct=6q8;nq\nCounterClockwiseContourIntegral=6r7;pr\nCross=8bz;1d8\nCscr=2kke;1jd\nCup=6vn;100\nCupCap=6rx;rk\nDD=6kl;h9\nDDotrahd=841;184\nDJcy=si;ai\nDScy=sl;al\nDZcy=sv;au\nDagger=6ch;e7\nDarr=6n5;j5\nDashv=8h0;1ir\nDcaron=7i;4w\nDcy=t0;az\nDel=6pz;n9\nDelta=pg;8g\nDfr=2knb;1kj\nDiacriticalAcute=50;27\nDiacriticalDot=k9;84\nDiacriticalDoubleAcute=kd;8a\nDiacriticalGrave=2o;13\nDiacriticalTilde=kc;88\nDiamond=6v8;za\nDifferentialD=6km;ha\nDopf=2kor;1lu\nDot=4o;1n\nDotDot=6ho;f5\nDotEqual=6s0;rw\nDoubleContourIntegral=6r3;pl\nDoubleDot=4o;1m\nDoubleDownArrow=6oj;m0\nDoubleLeftArrow=6og;lq\nDoubleLeftRightArrow=6ok;m3\nDoubleLeftTee=8h0;1iq\nDoubleLongLeftArrow=7w8;17g\nDoubleLongLeftRightArrow=7wa;17m\nDoubleLongRightArrow=7w9;17j\nDoubleRightArrow=6oi;lw\nDoubleRightTee=6ug;xz\nDoubleUpArrow=6oh;lt\nDoubleUpDownArrow=6ol;m7\nDoubleVerticalBar=6qt;ov\nDownArrow=6mr;i8\nDownArrowBar=843;186\nDownArrowUpArrow=6ph;mn\nDownBreve=lt;8c\nDownLeftRightVector=85s;198\nDownLeftTeeVector=866;19m\nDownLeftVector=6nx;ke\nDownLeftVectorBar=85y;19e\nDownRightTeeVector=867;19n\nDownRightVector=6o1;kq\nDownRightVectorBar=85z;19f\nDownTee=6uc;xs\nDownTeeArrow=6nb;jh\nDownarrow=6oj;m1\nDscr=2kkf;1je\nDstrok=7k;4y\nENG=96;6g\nETH=5s;35\nEacute=5l;2y\nEcaron=7u;56\nEcirc=5m;2z\nEcy=tp;bo\nEdot=7q;52\nEfr=2knc;1kk\nEgrave=5k;2x\nElement=6q0;na\nEmacr=7m;50\nEmptySmallSquare=7i3;15x\nEmptyVerySmallSquare=7fv;150\nEogon=7s;54\nEopf=2kos;1lv\nEpsilon=ph;8h\nEqual=8dx;1eo\nEqualTilde=6rm;qp\nEquilibrium=6oc;li\nEscr=6k0;gu\nEsim=8dv;1em\nEta=pj;8j\nEuml=5n;30\nExists=6pv;mz\nExponentialE=6kn;hc\nFcy=tg;bf\nFfr=2knd;1kl\nFilledSmallSquare=7i4;15y\nFilledVerySmallSquare=7fu;14w\nFopf=2kot;1lw\nForAll=6ps;ms\nFouriertrf=6k1;gv\nFscr=6k1;gw\nGJcy=sj;aj\nGT=1q;r\nGamma=pf;8f\nGammad=rg;a5\nGbreve=7y;5a\nGcedil=82;5e\nGcirc=7w;58\nGcy=sz;ay\nGdot=80;5c\nGfr=2kne;1km\nGg=6vt;10c\nGopf=2kou;1lx\nGreaterEqual=6sl;sv\nGreaterEqualLess=6vv;10i\nGreaterFullEqual=6sn;t6\nGreaterGreater=8f6;1gh\nGreaterLess=6t3;ul\nGreaterSlantEqual=8e6;1f5\nGreaterTilde=6sz;ub\nGscr=2kki;1jf\nGt=6sr;tr\nHARDcy=tm;bl\nHacek=jr;80\nHat=2m;10\nHcirc=84;5f\nHfr=6j0;fe\nHilbertSpace=6iz;fa\nHopf=6j1;fg\nHorizontalLine=7b4;13i\nHscr=6iz;fc\nHstrok=86;5h\nHumpDownHump=6ry;rn\nHumpEqual=6rz;rs\nIEcy=t1;b0\nIJlig=8i;5s\nIOcy=sh;ah\nIacute=5p;32\nIcirc=5q;33\nIcy=t4;b3\nIdot=8g;5p\nIfr=6j5;fq\nIgrave=5o;31\nIm=6j5;fr\nImacr=8a;5l\nImaginaryI=6ko;hf\nImplies=6oi;ly\nInt=6r0;pf\nIntegral=6qz;pd\nIntersection=6v6;z4\nInvisibleComma=6eb;f0\nInvisibleTimes=6ea;ey\nIogon=8e;5n\nIopf=2kow;1ly\nIota=pl;8l\nIscr=6j4;fn\nItilde=88;5j\nIukcy=sm;am\nIuml=5r;34\nJcirc=8k;5u\nJcy=t5;b4\nJfr=2knh;1kn\nJopf=2kox;1lz\nJscr=2kkl;1jg\nJsercy=so;ao\nJukcy=sk;ak\nKHcy=th;bg\nKJcy=ss;as\nKappa=pm;8m\nKcedil=8m;5w\nKcy=t6;b5\nKfr=2kni;1ko\nKopf=2koy;1m0\nKscr=2kkm;1jh\nLJcy=sp;ap\nLT=1o;m\nLacute=8p;5z\nLambda=pn;8n\nLang=7vu;173\nLaplacetrf=6j6;fs\nLarr=6n2;j1\nLcaron=8t;63\nLcedil=8r;61\nLcy=t7;b6\nLeftAngleBracket=7vs;16x\nLeftArrow=6mo;hu\nLeftArrowBar=6p0;mj\nLeftArrowRightArrow=6o6;l3\nLeftCeiling=6x4;121\nLeftDoubleBracket=7vq;16t\nLeftDownTeeVector=869;19p\nLeftDownVector=6o3;kw\nLeftDownVectorBar=861;19h\nLeftFloor=6x6;125\nLeftRightArrow=6ms;ib\nLeftRightVector=85q;196\nLeftTee=6ub;xq\nLeftTeeArrow=6n8;ja\nLeftTeeVector=862;19i\nLeftTriangle=6uq;ya\nLeftTriangleBar=89b;1c0\nLeftTriangleEqual=6us;yg\nLeftUpDownVector=85t;199\nLeftUpTeeVector=868;19o\nLeftUpVector=6nz;kk\nLeftUpVectorBar=860;19g\nLeftVector=6nw;kb\nLeftVectorBar=85u;19a\nLeftarrow=6og;lr\nLeftrightarrow=6ok;m4\nLessEqualGreater=6vu;10e\nLessFullEqual=6sm;t0\nLessGreater=6t2;ui\nLessLess=8f5;1gf\nLessSlantEqual=8e5;1ez\nLessTilde=6sy;u8\nLfr=2knj;1kp\nLl=6vs;109\nLleftarrow=6oq;me\nLmidot=8v;65\nLongLeftArrow=7w5;177\nLongLeftRightArrow=7w7;17d\nLongRightArrow=7w6;17a\nLongleftarrow=7w8;17h\nLongleftrightarrow=7wa;17n\nLongrightarrow=7w9;17k\nLopf=2koz;1m1\nLowerLeftArrow=6mx;iq\nLowerRightArrow=6mw;in\nLscr=6j6;fu\nLsh=6nk;jv\nLstrok=8x;67\nLt=6sq;tl\nMap=83p;17v\nMcy=t8;b7\nMediumSpace=6e7;eu\nMellintrf=6k3;gx\nMfr=2knk;1kq\nMinusPlus=6qb;nv\nMopf=2kp0;1m2\nMscr=6k3;gz\nMu=po;8o\nNJcy=sq;aq\nNacute=8z;69\nNcaron=93;6d\nNcedil=91;6b\nNcy=t9;b8\nNegativeMediumSpace=6bv;dc\nNegativeThickSpace=6bv;dd\nNegativeThinSpace=6bv;de\nNegativeVeryThinSpace=6bv;db\nNestedGreaterGreater=6sr;tq\nNestedLessLess=6sq;tk\nNewLine=a;1\nNfr=2knl;1kr\nNoBreak=6e8;ev\nNonBreakingSpace=4g;1d\nNopf=6j9;fx\nNot=8h8;1ix\nNotCongruent=6si;sp\nNotCupCap=6st;tv\nNotDoubleVerticalBar=6qu;p0\nNotElement=6q1;ne\nNotEqual=6sg;sk\nNotEqualTilde=6rm,mw;qn\nNotExists=6pw;n1\nNotGreater=6sv;tz\nNotGreaterEqual=6sx;u5\nNotGreaterFullEqual=6sn,mw;t3\nNotGreaterGreater=6sr,mw;tn\nNotGreaterLess=6t5;uq\nNotGreaterSlantEqual=8e6,mw;1f2\nNotGreaterTilde=6t1;ug\nNotHumpDownHump=6ry,mw;rl\nNotHumpEqual=6rz,mw;rq\nNotLeftTriangle=6wa;113\nNotLeftTriangleBar=89b,mw;1bz\nNotLeftTriangleEqual=6wc;119\nNotLess=6su;tw\nNotLessEqual=6sw;u2\nNotLessGreater=6t4;uo\nNotLessLess=6sq,mw;th\nNotLessSlantEqual=8e5,mw;1ew\nNotLessTilde=6t0;ue\nNotNestedGreaterGreater=8f6,mw;1gg\nNotNestedLessLess=8f5,mw;1ge\nNotPrecedes=6tc;vb\nNotPrecedesEqual=8fj,mw;1gv\nNotPrecedesSlantEqual=6w0;10p\nNotReverseElement=6q4;nl\nNotRightTriangle=6wb;116\nNotRightTriangleBar=89c,mw;1c1\nNotRightTriangleEqual=6wd;11c\nNotSquareSubset=6tr,mw;wh\nNotSquareSubsetEqual=6w2;10t\nNotSquareSuperset=6ts,mw;wl\nNotSquareSupersetEqual=6w3;10v\nNotSubset=6te,6he;vh\nNotSubsetEqual=6tk;w0\nNotSucceeds=6td;ve\nNotSucceedsEqual=8fk,mw;1h1\nNotSucceedsSlantEqual=6w1;10r\nNotSucceedsTilde=6tb,mw;v7\nNotSuperset=6tf,6he;vm\nNotSupersetEqual=6tl;w3\nNotTilde=6rl;ql\nNotTildeEqual=6ro;qv\nNotTildeFullEqual=6rr;r1\nNotTildeTilde=6rt;r9\nNotVerticalBar=6qs;or\nNscr=2kkp;1ji\nNtilde=5t;36\nNu=pp;8p\nOElig=9e;6m\nOacute=5v;38\nOcirc=5w;39\nOcy=ta;b9\nOdblac=9c;6k\nOfr=2knm;1ks\nOgrave=5u;37\nOmacr=98;6i\nOmega=q1;90\nOmicron=pr;8r\nOopf=2kp2;1m3\nOpenCurlyDoubleQuote=6cc;dy\nOpenCurlyQuote=6c8;dr\nOr=8d0;1e2\nOscr=2kkq;1jj\nOslash=60;3d\nOtilde=5x;3a\nOtimes=8c7;1df\nOuml=5y;3b\nOverBar=6da;em\nOverBrace=732;13b\nOverBracket=71w;134\nOverParenthesis=730;139\nPartialD=6pu;mx\nPcy=tb;ba\nPfr=2knn;1kt\nPhi=py;8x\nPi=ps;8s\nPlusMinus=4x;22\nPoincareplane=6j0;fd\nPopf=6jd;g3\nPr=8fv;1hl\nPrecedes=6t6;us\nPrecedesEqual=8fj;1gy\nPrecedesSlantEqual=6t8;uy\nPrecedesTilde=6ta;v4\nPrime=6cz;eg\nProduct=6q7;no\nProportion=6rb;q0\nProportional=6ql;oa\nPscr=2kkr;1jk\nPsi=q0;8z\nQUOT=y;3\nQfr=2kno;1ku\nQopf=6je;g5\nQscr=2kks;1jl\nRBarr=840;183\nREG=4u;1x\nRacute=9g;6o\nRang=7vv;174\nRarr=6n4;j4\nRarrtl=846;187\nRcaron=9k;6s\nRcedil=9i;6q\nRcy=tc;bb\nRe=6jg;gb\nReverseElement=6q3;nh\nReverseEquilibrium=6ob;le\nReverseUpEquilibrium=86n;1a4\nRfr=6jg;ga\nRho=pt;8t\nRightAngleBracket=7vt;170\nRightArrow=6mq;i3\nRightArrowBar=6p1;ml\nRightArrowLeftArrow=6o4;ky\nRightCeiling=6x5;123\nRightDoubleBracket=7vr;16v\nRightDownTeeVector=865;19l\nRightDownVector=6o2;kt\nRightDownVectorBar=85x;19d\nRightFloor=6x7;127\nRightTee=6ua;xo\nRightTeeArrow=6na;je\nRightTeeVector=863;19j\nRightTriangle=6ur;yd\nRightTriangleBar=89c;1c2\nRightTriangleEqual=6ut;yk\nRightUpDownVector=85r;197\nRightUpTeeVector=864;19k\nRightUpVector=6ny;kh\nRightUpVectorBar=85w;19c\nRightVector=6o0;kn\nRightVectorBar=85v;19b\nRightarrow=6oi;lx\nRopf=6jh;gd\nRoundImplies=86o;1a6\nRrightarrow=6or;mg\nRscr=6jf;g7\nRsh=6nl;jx\nRuleDelayed=8ac;1cb\nSHCHcy=tl;bk\nSHcy=tk;bj\nSOFTcy=to;bn\nSacute=9m;6u\nSc=8fw;1hm\nScaron=9s;70\nScedil=9q;6y\nScirc=9o;6w\nScy=td;bc\nSfr=2knq;1kv\nShortDownArrow=6mr;i7\nShortLeftArrow=6mo;ht\nShortRightArrow=6mq;i2\nShortUpArrow=6mp;hy\nSigma=pv;8u\nSmallCircle=6qg;o6\nSopf=2kp6;1m4\nSqrt=6qi;o9\nSquare=7fl;14t\nSquareIntersection=6tv;ww\nSquareSubset=6tr;wi\nSquareSubsetEqual=6tt;wp\nSquareSuperset=6ts;wm\nSquareSupersetEqual=6tu;ws\nSquareUnion=6tw;wz\nSscr=2kku;1jm\nStar=6va;zf\nSub=6vk;zw\nSubset=6vk;zv\nSubsetEqual=6ti;vu\nSucceeds=6t7;uv\nSucceedsEqual=8fk;1h4\nSucceedsSlantEqual=6t9;v1\nSucceedsTilde=6tb;v8\nSuchThat=6q3;ni\nSum=6q9;ns\nSup=6vl;zy\nSuperset=6tf;vp\nSupersetEqual=6tj;vx\nSupset=6vl;zx\nTHORN=66;3j\nTRADE=6jm;gf\nTSHcy=sr;ar\nTScy=ti;bh\nTab=9;0\nTau=pw;8v\nTcaron=9w;74\nTcedil=9u;72\nTcy=te;bd\nTfr=2knr;1kw\nTherefore=6r8;pt\nTheta=pk;8k\nThickSpace=6e7,6bu;et\nThinSpace=6bt;d7\nTilde=6rg;q9\nTildeEqual=6rn;qs\nTildeFullEqual=6rp;qy\nTildeTilde=6rs;r4\nTopf=2kp7;1m5\nTripleDot=6hn;f3\nTscr=2kkv;1jn\nTstrok=9y;76\nUacute=62;3f\nUarr=6n3;j2\nUarrocir=85l;193\nUbrcy=su;at\nUbreve=a4;7c\nUcirc=63;3g\nUcy=tf;be\nUdblac=a8;7g\nUfr=2kns;1kx\nUgrave=61;3e\nUmacr=a2;7a\nUnderBar=2n;11\nUnderBrace=733;13c\nUnderBracket=71x;136\nUnderParenthesis=731;13a\nUnion=6v7;z8\nUnionPlus=6tq;wf\nUogon=aa;7i\nUopf=2kp8;1m6\nUpArrow=6mp;hz\nUpArrowBar=842;185\nUpArrowDownArrow=6o5;l1\nUpDownArrow=6mt;ie\nUpEquilibrium=86m;1a2\nUpTee=6ud;xv\nUpTeeArrow=6n9;jc\nUparrow=6oh;lu\nUpdownarrow=6ol;m8\nUpperLeftArrow=6mu;ih\nUpperRightArrow=6mv;ik\nUpsi=r6;9z\nUpsilon=px;8w\nUring=a6;7e\nUscr=2kkw;1jo\nUtilde=a0;78\nUuml=64;3h\nVDash=6uj;y3\nVbar=8h7;1iw\nVcy=sy;ax\nVdash=6uh;y1\nVdashl=8h2;1is\nVee=6v5;z3\nVerbar=6c6;dp\nVert=6c6;dq\nVerticalBar=6qr;on\nVerticalLine=3g;18\nVerticalSeparator=7rs;16o\nVerticalTilde=6rk;qi\nVeryThinSpace=6bu;d9\nVfr=2knt;1ky\nVopf=2kp9;1m7\nVscr=2kkx;1jp\nVvdash=6ui;y2\nWcirc=ac;7k\nWedge=6v4;z0\nWfr=2knu;1kz\nWopf=2kpa;1m8\nWscr=2kky;1jq\nXfr=2knv;1l0\nXi=pq;8q\nXopf=2kpb;1m9\nXscr=2kkz;1jr\nYAcy=tr;bq\nYIcy=sn;an\nYUcy=tq;bp\nYacute=65;3i\nYcirc=ae;7m\nYcy=tn;bm\nYfr=2knw;1l1\nYopf=2kpc;1ma\nYscr=2kl0;1js\nYuml=ag;7o\nZHcy=t2;b1\nZacute=ah;7p\nZcaron=al;7t\nZcy=t3;b2\nZdot=aj;7r\nZeroWidthSpace=6bv;df\nZeta=pi;8i\nZfr=6js;gl\nZopf=6jo;gi\nZscr=2kl1;1jt\naacute=69;3m\nabreve=77;4l\nac=6ri;qg\nacE=6ri,mr;qe\nacd=6rj;qh\nacirc=6a;3n\nacute=50;28\nacy=ts;br\naelig=6e;3r\naf=6e9;ex\nafr=2kny;1l2\nagrave=68;3l\nalefsym=6k5;h3\naleph=6k5;h4\nalpha=q9;92\namacr=75;4j\namalg=8cf;1dm\namp=12;9\nand=6qv;p6\nandand=8d1;1e3\nandd=8d8;1e9\nandslope=8d4;1e6\nandv=8d6;1e7\nang=6qo;oj\nange=884;1b1\nangle=6qo;oi\nangmsd=6qp;ol\nangmsdaa=888;1b5\nangmsdab=889;1b6\nangmsdac=88a;1b7\nangmsdad=88b;1b8\nangmsdae=88c;1b9\nangmsdaf=88d;1ba\nangmsdag=88e;1bb\nangmsdah=88f;1bc\nangrt=6qn;og\nangrtvb=6v2;yw\nangrtvbd=87x;1b0\nangsph=6qq;om\nangst=5h;2u\nangzarr=70c;12z\naogon=79;4n\naopf=2kpe;1mb\nap=6rs;r8\napE=8ds;1ej\napacir=8dr;1eh\nape=6ru;rd\napid=6rv;rf\napos=13;a\napprox=6rs;r5\napproxeq=6ru;rc\naring=6d;3q\nascr=2kl2;1ju\nast=16;e\nasymp=6rs;r6\nasympeq=6rx;rj\natilde=6b;3o\nauml=6c;3p\nawconint=6r7;ps\nawint=8b5;1cr\nbNot=8h9;1iy\nbackcong=6rw;rg\nbackepsilon=s6;af\nbackprime=6d1;ei\nbacksim=6rh;qc\nbacksimeq=6vh;zp\nbarvee=6v1;yv\nbarwed=6x1;11y\nbarwedge=6x1;11x\nbbrk=71x;137\nbbrktbrk=71y;138\nbcong=6rw;rh\nbcy=tt;bs\nbdquo=6ce;e4\nbecaus=6r9;py\nbecause=6r9;px\nbemptyv=88g;1bd\nbepsi=s6;ag\nbernou=6jw;go\nbeta=qa;93\nbeth=6k6;h5\nbetween=6ss;tt\nbfr=2knz;1l3\nbigcap=6v6;z5\nbigcirc=7hr;15s\nbigcup=6v7;z7\nbigodot=8ao;1cd\nbigoplus=8ap;1cf\nbigotimes=8aq;1ch\nbigsqcup=8au;1cl\nbigstar=7id;15z\nbigtriangledown=7gd;15e\nbigtriangleup=7g3;154\nbiguplus=8as;1cj\nbigvee=6v5;z1\nbigwedge=6v4;yy\nbkarow=83x;17x\nblacklozenge=8a3;1c9\nblacksquare=7fu;14x\nblacktriangle=7g4;156\nblacktriangledown=7ge;15g\nblacktriangleleft=7gi;15k\nblacktriangleright=7g8;15a\nblank=74z;13f\nblk12=7f6;14r\nblk14=7f5;14q\nblk34=7f7;14s\nblock=7ew;14p\nbne=1p,6hx;o\nbnequiv=6sh,6hx;sm\nbnot=6xc;12d\nbopf=2kpf;1mc\nbot=6ud;xx\nbottom=6ud;xu\nbowtie=6vc;zi\nboxDL=7dj;141\nboxDR=7dg;13y\nboxDl=7di;140\nboxDr=7df;13x\nboxH=7dc;13u\nboxHD=7dy;14g\nboxHU=7e1;14j\nboxHd=7dw;14e\nboxHu=7dz;14h\nboxUL=7dp;147\nboxUR=7dm;144\nboxUl=7do;146\nboxUr=7dl;143\nboxV=7dd;13v\nboxVH=7e4;14m\nboxVL=7dv;14d\nboxVR=7ds;14a\nboxVh=7e3;14l\nboxVl=7du;14c\nboxVr=7dr;149\nboxbox=895;1bw\nboxdL=7dh;13z\nboxdR=7de;13w\nboxdl=7bk;13m\nboxdr=7bg;13l\nboxh=7b4;13j\nboxhD=7dx;14f\nboxhU=7e0;14i\nboxhd=7cc;13r\nboxhu=7ck;13s\nboxminus=6u7;xi\nboxplus=6u6;xg\nboxtimes=6u8;xk\nboxuL=7dn;145\nboxuR=7dk;142\nboxul=7bs;13o\nboxur=7bo;13n\nboxv=7b6;13k\nboxvH=7e2;14k\nboxvL=7dt;14b\nboxvR=7dq;148\nboxvh=7cs;13t\nboxvl=7c4;13q\nboxvr=7bw;13p\nbprime=6d1;ej\nbreve=k8;83\nbrvbar=4m;1k\nbscr=2kl3;1jv\nbsemi=6dr;er\nbsim=6rh;qd\nbsime=6vh;zq\nbsol=2k;x\nbsolb=891;1bv\nbsolhsub=7uw;16r\nbull=6ci;e9\nbullet=6ci;e8\nbump=6ry;rp\nbumpE=8fi;1gu\nbumpe=6rz;ru\nbumpeq=6rz;rt\ncacute=7b;4p\ncap=6qx;pa\ncapand=8ck;1dq\ncapbrcup=8cp;1dv\ncapcap=8cr;1dx\ncapcup=8cn;1dt\ncapdot=8cg;1dn\ncaps=6qx,1e68;p9\ncaret=6dd;eo\ncaron=jr;81\nccaps=8ct;1dz\nccaron=7h;4v\nccedil=6f;3s\nccirc=7d;4r\nccups=8cs;1dy\nccupssm=8cw;1e0\ncdot=7f;4t\ncedil=54;2f\ncemptyv=88i;1bf\ncent=4i;1g\ncenterdot=53;2c\ncfr=2ko0;1l4\nchcy=uf;ce\ncheck=7pv;16j\ncheckmark=7pv;16i\nchi=qv;9s\ncir=7gr;15q\ncirE=88z;1bt\ncirc=jq;7z\ncirceq=6s7;sc\ncirclearrowleft=6nu;k6\ncirclearrowright=6nv;k8\ncircledR=4u;1w\ncircledS=79k;13g\ncircledast=6u3;xc\ncircledcirc=6u2;xa\ncircleddash=6u5;xe\ncire=6s7;sd\ncirfnint=8b4;1cq\ncirmid=8hb;1j0\ncirscir=88y;1bs\nclubs=7kz;168\nclubsuit=7kz;167\ncolon=1m;j\ncolone=6s4;s7\ncoloneq=6s4;s5\ncomma=18;g\ncommat=1s;u\ncomp=6pt;mv\ncompfn=6qg;o7\ncomplement=6pt;mu\ncomplexes=6iq;f6\ncong=6rp;qz\ncongdot=8dp;1ef\nconint=6r2;pj\ncopf=2kpg;1md\ncoprod=6q8;nr\ncopy=4p;1r\ncopysr=6jb;fz\ncrarr=6np;k1\ncross=7pz;16k\ncscr=2kl4;1jw\ncsub=8gf;1id\ncsube=8gh;1if\ncsup=8gg;1ie\ncsupe=8gi;1ig\nctdot=6wf;11g\ncudarrl=854;18x\ncudarrr=851;18u\ncuepr=6vy;10m\ncuesc=6vz;10o\ncularr=6nq;k3\ncularrp=859;190\ncup=6qy;pc\ncupbrcap=8co;1du\ncupcap=8cm;1ds\ncupcup=8cq;1dw\ncupdot=6tp;we\ncupor=8cl;1dr\ncups=6qy,1e68;pb\ncurarr=6nr;k5\ncurarrm=858;18z\ncurlyeqprec=6vy;10l\ncurlyeqsucc=6vz;10n\ncurlyvee=6vi;zr\ncurlywedge=6vj;zt\ncurren=4k;1i\ncurvearrowleft=6nq;k2\ncurvearrowright=6nr;k4\ncuvee=6vi;zs\ncuwed=6vj;zu\ncwconint=6r6;pq\ncwint=6r5;po\ncylcty=6y5;12u\ndArr=6oj;m2\ndHar=86d;19t\ndagger=6cg;e5\ndaleth=6k8;h7\ndarr=6mr;ia\ndash=6c0;dl\ndashv=6ub;xr\ndbkarow=83z;180\ndblac=kd;8b\ndcaron=7j;4x\ndcy=tw;bv\ndd=6km;hb\nddagger=6ch;e6\nddarr=6oa;ld\nddotseq=8dz;1ep\ndeg=4w;21\ndelta=qc;95\ndemptyv=88h;1be\ndfisht=873;1aj\ndfr=2ko1;1l5\ndharl=6o3;kx\ndharr=6o2;ku\ndiam=6v8;zc\ndiamond=6v8;zb\ndiamondsuit=7l2;16b\ndiams=7l2;16c\ndie=4o;1o\ndigamma=rh;a6\ndisin=6wi;11j\ndiv=6v;49\ndivide=6v;48\ndivideontimes=6vb;zg\ndivonx=6vb;zh\ndjcy=uq;co\ndlcorn=6xq;12n\ndlcrop=6x9;12a\ndollar=10;6\ndopf=2kph;1me\ndot=k9;85\ndoteq=6s0;rx\ndoteqdot=6s1;rz\ndotminus=6rc;q2\ndotplus=6qc;ny\ndotsquare=6u9;xm\ndoublebarwedge=6x2;11z\ndownarrow=6mr;i9\ndowndownarrows=6oa;lc\ndownharpoonleft=6o3;kv\ndownharpoonright=6o2;ks\ndrbkarow=840;182\ndrcorn=6xr;12p\ndrcrop=6x8;129\ndscr=2kl5;1jx\ndscy=ut;cr\ndsol=8ae;1cc\ndstrok=7l;4z\ndtdot=6wh;11i\ndtri=7gf;15j\ndtrif=7ge;15h\nduarr=6ph;mo\nduhar=86n;1a5\ndwangle=886;1b3\ndzcy=v3;d0\ndzigrarr=7wf;17r\neDDot=8dz;1eq\neDot=6s1;s0\neacute=6h;3u\neaster=8dq;1eg\necaron=7v;57\necir=6s6;sb\necirc=6i;3v\necolon=6s5;s9\necy=ul;ck\nedot=7r;53\nee=6kn;he\nefDot=6s2;s2\nefr=2ko2;1l6\neg=8ey;1g9\negrave=6g;3t\negs=8eu;1g5\negsdot=8ew;1g7\nel=8ex;1g8\nelinters=73b;13e\nell=6j7;fv\nels=8et;1g3\nelsdot=8ev;1g6\nemacr=7n;51\nempty=6px;n7\nemptyset=6px;n5\nemptyv=6px;n6\nemsp=6bn;d2\nemsp13=6bo;d3\nemsp14=6bp;d4\neng=97;6h\nensp=6bm;d1\neogon=7t;55\neopf=2kpi;1mf\nepar=6vp;103\neparsl=89v;1c6\neplus=8dt;1ek\nepsi=qd;97\nepsilon=qd;96\nepsiv=s5;ae\neqcirc=6s6;sa\neqcolon=6s5;s8\neqsim=6rm;qq\neqslantgtr=8eu;1g4\neqslantless=8et;1g2\nequals=1p;p\nequest=6sf;sj\nequiv=6sh;so\nequivDD=8e0;1er\neqvparsl=89x;1c8\nerDot=6s3;s4\nerarr=86p;1a7\nescr=6jz;gs\nesdot=6s0;ry\nesim=6rm;qr\neta=qf;99\neth=6o;41\neuml=6j;3w\neuro=6gc;f2\nexcl=x;2\nexist=6pv;n0\nexpectation=6k0;gt\nexponentiale=6kn;hd\nfallingdotseq=6s2;s1\nfcy=uc;cb\nfemale=7k0;163\nffilig=1dkz;1ja\nfflig=1dkw;1j7\nffllig=1dl0;1jb\nffr=2ko3;1l7\nfilig=1dkx;1j8\nfjlig=2u,2y;15\nflat=7l9;16e\nfllig=1dky;1j9\nfltns=7g1;153\nfnof=b6;7v\nfopf=2kpj;1mg\nforall=6ps;mt\nfork=6vo;102\nforkv=8gp;1in\nfpartint=8b1;1cp\nfrac12=59;2k\nfrac13=6kz;hh\nfrac14=58;2j\nfrac15=6l1;hj\nfrac16=6l5;hn\nfrac18=6l7;hp\nfrac23=6l0;hi\nfrac25=6l2;hk\nfrac34=5a;2m\nfrac35=6l3;hl\nfrac38=6l8;hq\nfrac45=6l4;hm\nfrac56=6l6;ho\nfrac58=6l9;hr\nfrac78=6la;hs\nfrasl=6dg;eq\nfrown=6xu;12r\nfscr=2kl7;1jy\ngE=6sn;t8\ngEl=8ek;1ft\ngacute=dx;7x\ngamma=qb;94\ngammad=rh;a7\ngap=8ee;1fh\ngbreve=7z;5b\ngcirc=7x;59\ngcy=tv;bu\ngdot=81;5d\nge=6sl;sx\ngel=6vv;10k\ngeq=6sl;sw\ngeqq=6sn;t7\ngeqslant=8e6;1f6\nges=8e6;1f7\ngescc=8fd;1gn\ngesdot=8e8;1f9\ngesdoto=8ea;1fb\ngesdotol=8ec;1fd\ngesl=6vv,1e68;10h\ngesles=8es;1g1\ngfr=2ko4;1l8\ngg=6sr;ts\nggg=6vt;10b\ngimel=6k7;h6\ngjcy=ur;cp\ngl=6t3;un\nglE=8eq;1fz\ngla=8f9;1gj\nglj=8f8;1gi\ngnE=6sp;tg\ngnap=8ei;1fp\ngnapprox=8ei;1fo\ngne=8eg;1fl\ngneq=8eg;1fk\ngneqq=6sp;tf\ngnsim=6w7;10y\ngopf=2kpk;1mh\ngrave=2o;14\ngscr=6iy;f9\ngsim=6sz;ud\ngsime=8em;1fv\ngsiml=8eo;1fx\ngt=1q;s\ngtcc=8fb;1gl\ngtcir=8e2;1et\ngtdot=6vr;107\ngtlPar=87p;1aw\ngtquest=8e4;1ev\ngtrapprox=8ee;1fg\ngtrarr=86w;1ad\ngtrdot=6vr;106\ngtreqless=6vv;10j\ngtreqqless=8ek;1fs\ngtrless=6t3;um\ngtrsim=6sz;uc\ngvertneqq=6sp,1e68;td\ngvnE=6sp,1e68;te\nhArr=6ok;m5\nhairsp=6bu;da\nhalf=59;2l\nhamilt=6iz;fb\nhardcy=ui;ch\nharr=6ms;id\nharrcir=85k;192\nharrw=6nh;js\nhbar=6j3;fl\nhcirc=85;5g\nhearts=7l1;16a\nheartsuit=7l1;169\nhellip=6cm;eb\nhercon=6ux;yr\nhfr=2ko5;1l9\nhksearow=84l;18i\nhkswarow=84m;18k\nhoarr=6pr;mr\nhomtht=6rf;q5\nhookleftarrow=6nd;jj\nhookrightarrow=6ne;jl\nhopf=2kpl;1mi\nhorbar=6c5;do\nhscr=2kl9;1jz\nhslash=6j3;fi\nhstrok=87;5i\nhybull=6df;ep\nhyphen=6c0;dk\niacute=6l;3y\nic=6eb;f1\nicirc=6m;3z\nicy=u0;bz\niecy=tx;bw\niexcl=4h;1f\niff=6ok;m6\nifr=2ko6;1la\nigrave=6k;3x\nii=6ko;hg\niiiint=8b0;1cn\niiint=6r1;pg\niinfin=89o;1c3\niiota=6jt;gm\nijlig=8j;5t\nimacr=8b;5m\nimage=6j5;fp\nimagline=6j4;fm\nimagpart=6j5;fo\nimath=8h;5r\nimof=6uv;yo\nimped=c5;7w\nin=6q0;nd\nincare=6it;f8\ninfin=6qm;of\ninfintie=89p;1c4\ninodot=8h;5q\nint=6qz;pe\nintcal=6uy;yt\nintegers=6jo;gh\nintercal=6uy;ys\nintlarhk=8bb;1cx\nintprod=8cc;1dk\niocy=up;cn\niogon=8f;5o\niopf=2kpm;1mj\niota=qh;9b\niprod=8cc;1dl\niquest=5b;2n\niscr=2kla;1k0\nisin=6q0;nc\nisinE=6wp;11r\nisindot=6wl;11n\nisins=6wk;11l\nisinsv=6wj;11k\nisinv=6q0;nb\nit=6ea;ez\nitilde=89;5k\niukcy=uu;cs\niuml=6n;40\njcirc=8l;5v\njcy=u1;c0\njfr=2ko7;1lb\njmath=fr;7y\njopf=2kpn;1mk\njscr=2klb;1k1\njsercy=uw;cu\njukcy=us;cq\nkappa=qi;9c\nkappav=s0;a9\nkcedil=8n;5x\nkcy=u2;c1\nkfr=2ko8;1lc\nkgreen=8o;5y\nkhcy=ud;cc\nkjcy=v0;cy\nkopf=2kpo;1ml\nkscr=2klc;1k2\nlAarr=6oq;mf\nlArr=6og;ls\nlAtail=84b;18a\nlBarr=83y;17z\nlE=6sm;t2\nlEg=8ej;1fr\nlHar=86a;19q\nlacute=8q;60\nlaemptyv=88k;1bh\nlagran=6j6;ft\nlambda=qj;9d\nlang=7vs;16z\nlangd=87l;1as\nlangle=7vs;16y\nlap=8ed;1ff\nlaquo=4r;1t\nlarr=6mo;hx\nlarrb=6p0;mk\nlarrbfs=84f;18e\nlarrfs=84d;18c\nlarrhk=6nd;jk\nlarrlp=6nf;jo\nlarrpl=855;18y\nlarrsim=86r;1a9\nlarrtl=6n6;j7\nlat=8ff;1gp\nlatail=849;188\nlate=8fh;1gt\nlates=8fh,1e68;1gs\nlbarr=83w;17w\nlbbrk=7si;16p\nlbrace=3f;16\nlbrack=2j;v\nlbrke=87f;1am\nlbrksld=87j;1aq\nlbrkslu=87h;1ao\nlcaron=8u;64\nlcedil=8s;62\nlceil=6x4;122\nlcub=3f;17\nlcy=u3;c2\nldca=852;18v\nldquo=6cc;dz\nldquor=6ce;e3\nldrdhar=86f;19v\nldrushar=85n;195\nldsh=6nm;jz\nle=6sk;st\nleftarrow=6mo;hv\nleftarrowtail=6n6;j6\nleftharpoondown=6nx;kd\nleftharpoonup=6nw;ka\nleftleftarrows=6o7;l6\nleftrightarrow=6ms;ic\nleftrightarrows=6o6;l4\nleftrightharpoons=6ob;lf\nleftrightsquigarrow=6nh;jr\nleftthreetimes=6vf;zl\nleg=6vu;10g\nleq=6sk;ss\nleqq=6sm;t1\nleqslant=8e5;1f0\nles=8e5;1f1\nlescc=8fc;1gm\nlesdot=8e7;1f8\nlesdoto=8e9;1fa\nlesdotor=8eb;1fc\nlesg=6vu,1e68;10d\nlesges=8er;1g0\nlessapprox=8ed;1fe\nlessdot=6vq;104\nlesseqgtr=6vu;10f\nlesseqqgtr=8ej;1fq\nlessgtr=6t2;uj\nlesssim=6sy;u9\nlfisht=870;1ag\nlfloor=6x6;126\nlfr=2ko9;1ld\nlg=6t2;uk\nlgE=8ep;1fy\nlhard=6nx;kf\nlharu=6nw;kc\nlharul=86i;19y\nlhblk=7es;14o\nljcy=ux;cv\nll=6sq;tm\nllarr=6o7;l7\nllcorner=6xq;12m\nllhard=86j;19z\nlltri=7i2;15w\nlmidot=8w;66\nlmoust=71s;131\nlmoustache=71s;130\nlnE=6so;tc\nlnap=8eh;1fn\nlnapprox=8eh;1fm\nlne=8ef;1fj\nlneq=8ef;1fi\nlneqq=6so;tb\nlnsim=6w6;10x\nloang=7vw;175\nloarr=6pp;mp\nlobrk=7vq;16u\nlongleftarrow=7w5;178\nlongleftrightarrow=7w7;17e\nlongmapsto=7wc;17p\nlongrightarrow=7w6;17b\nlooparrowleft=6nf;jn\nlooparrowright=6ng;jp\nlopar=879;1ak\nlopf=2kpp;1mm\nloplus=8bx;1d6\nlotimes=8c4;1dc\nlowast=6qf;o5\nlowbar=2n;12\nloz=7gq;15p\nlozenge=7gq;15o\nlozf=8a3;1ca\nlpar=14;b\nlparlt=87n;1au\nlrarr=6o6;l5\nlrcorner=6xr;12o\nlrhar=6ob;lg\nlrhard=86l;1a1\nlrm=6by;di\nlrtri=6v3;yx\nlsaquo=6d5;ek\nlscr=2kld;1k3\nlsh=6nk;jw\nlsim=6sy;ua\nlsime=8el;1fu\nlsimg=8en;1fw\nlsqb=2j;w\nlsquo=6c8;ds\nlsquor=6ca;dw\nlstrok=8y;68\nlt=1o;n\nltcc=8fa;1gk\nltcir=8e1;1es\nltdot=6vq;105\nlthree=6vf;zm\nltimes=6vd;zj\nltlarr=86u;1ac\nltquest=8e3;1eu\nltrPar=87q;1ax\nltri=7gj;15n\nltrie=6us;yi\nltrif=7gi;15l\nlurdshar=85m;194\nluruhar=86e;19u\nlvertneqq=6so,1e68;t9\nlvnE=6so,1e68;ta\nmDDot=6re;q4\nmacr=4v;20\nmale=7k2;164\nmalt=7q8;16m\nmaltese=7q8;16l\nmap=6na;jg\nmapsto=6na;jf\nmapstodown=6nb;ji\nmapstoleft=6n8;jb\nmapstoup=6n9;jd\nmarker=7fy;152\nmcomma=8bt;1d4\nmcy=u4;c3\nmdash=6c4;dn\nmeasuredangle=6qp;ok\nmfr=2koa;1le\nmho=6jr;gj\nmicro=51;29\nmid=6qr;oq\nmidast=16;d\nmidcir=8hc;1j1\nmiddot=53;2d\nminus=6qa;nu\nminusb=6u7;xj\nminusd=6rc;q3\nminusdu=8bu;1d5\nmlcp=8gr;1ip\nmldr=6cm;ec\nmnplus=6qb;nw\nmodels=6uf;xy\nmopf=2kpq;1mn\nmp=6qb;nx\nmscr=2kle;1k4\nmstpos=6ri;qf\nmu=qk;9e\nmultimap=6uw;yp\nmumap=6uw;yq\nnGg=6vt,mw;10a\nnGt=6sr,6he;tp\nnGtv=6sr,mw;to\nnLeftarrow=6od;lk\nnLeftrightarrow=6oe;lm\nnLl=6vs,mw;108\nnLt=6sq,6he;tj\nnLtv=6sq,mw;ti\nnRightarrow=6of;lo\nnVDash=6un;y7\nnVdash=6um;y6\nnabla=6pz;n8\nnacute=90;6a\nnang=6qo,6he;oh\nnap=6rt;rb\nnapE=8ds,mw;1ei\nnapid=6rv,mw;re\nnapos=95;6f\nnapprox=6rt;ra\nnatur=7la;16g\nnatural=7la;16f\nnaturals=6j9;fw\nnbsp=4g;1e\nnbump=6ry,mw;rm\nnbumpe=6rz,mw;rr\nncap=8cj;1dp\nncaron=94;6e\nncedil=92;6c\nncong=6rr;r2\nncongdot=8dp,mw;1ee\nncup=8ci;1do\nncy=u5;c4\nndash=6c3;dm\nne=6sg;sl\nneArr=6on;mb\nnearhk=84k;18h\nnearr=6mv;im\nnearrow=6mv;il\nnedot=6s0,mw;rv\nnequiv=6si;sq\nnesear=84o;18n\nnesim=6rm,mw;qo\nnexist=6pw;n3\nnexists=6pw;n2\nnfr=2kob;1lf\nngE=6sn,mw;t4\nnge=6sx;u7\nngeq=6sx;u6\nngeqq=6sn,mw;t5\nngeqslant=8e6,mw;1f3\nnges=8e6,mw;1f4\nngsim=6t1;uh\nngt=6sv;u1\nngtr=6sv;u0\nnhArr=6oe;ln\nnharr=6ni;ju\nnhpar=8he;1j3\nni=6q3;nk\nnis=6ws;11u\nnisd=6wq;11s\nniv=6q3;nj\nnjcy=uy;cw\nnlArr=6od;ll\nnlE=6sm,mw;sy\nnlarr=6my;iu\nnldr=6cl;ea\nnle=6sw;u4\nnleftarrow=6my;it\nnleftrightarrow=6ni;jt\nnleq=6sw;u3\nnleqq=6sm,mw;sz\nnleqslant=8e5,mw;1ex\nnles=8e5,mw;1ey\nnless=6su;tx\nnlsim=6t0;uf\nnlt=6su;ty\nnltri=6wa;115\nnltrie=6wc;11b\nnmid=6qs;ou\nnopf=2kpr;1mo\nnot=4s;1u\nnotin=6q1;ng\nnotinE=6wp,mw;11q\nnotindot=6wl,mw;11m\nnotinva=6q1;nf\nnotinvb=6wn;11p\nnotinvc=6wm;11o\nnotni=6q4;nn\nnotniva=6q4;nm\nnotnivb=6wu;11w\nnotnivc=6wt;11v\nnpar=6qu;p4\nnparallel=6qu;p2\nnparsl=8hp,6hx;1j5\nnpart=6pu,mw;mw\nnpolint=8b8;1cu\nnpr=6tc;vd\nnprcue=6w0;10q\nnpre=8fj,mw;1gw\nnprec=6tc;vc\nnpreceq=8fj,mw;1gx\nnrArr=6of;lp\nnrarr=6mz;iw\nnrarrc=84z,mw;18s\nnrarrw=6n1,mw;ix\nnrightarrow=6mz;iv\nnrtri=6wb;118\nnrtrie=6wd;11e\nnsc=6td;vg\nnsccue=6w1;10s\nnsce=8fk,mw;1h2\nnscr=2klf;1k5\nnshortmid=6qs;os\nnshortparallel=6qu;p1\nnsim=6rl;qm\nnsime=6ro;qx\nnsimeq=6ro;qw\nnsmid=6qs;ot\nnspar=6qu;p3\nnsqsube=6w2;10u\nnsqsupe=6w3;10w\nnsub=6tg;vs\nnsubE=8g5,mw;1hv\nnsube=6tk;w2\nnsubset=6te,6he;vi\nnsubseteq=6tk;w1\nnsubseteqq=8g5,mw;1hw\nnsucc=6td;vf\nnsucceq=8fk,mw;1h3\nnsup=6th;vt\nnsupE=8g6,mw;1hz\nnsupe=6tl;w5\nnsupset=6tf,6he;vn\nnsupseteq=6tl;w4\nnsupseteqq=8g6,mw;1i0\nntgl=6t5;ur\nntilde=6p;42\nntlg=6t4;up\nntriangleleft=6wa;114\nntrianglelefteq=6wc;11a\nntriangleright=6wb;117\nntrianglerighteq=6wd;11d\nnu=ql;9f\nnum=z;5\nnumero=6ja;fy\nnumsp=6br;d5\nnvDash=6ul;y5\nnvHarr=83o;17u\nnvap=6rx,6he;ri\nnvdash=6uk;y4\nnvge=6sl,6he;su\nnvgt=1q,6he;q\nnvinfin=89q;1c5\nnvlArr=83m;17s\nnvle=6sk,6he;sr\nnvlt=1o,6he;l\nnvltrie=6us,6he;yf\nnvrArr=83n;17t\nnvrtrie=6ut,6he;yj\nnvsim=6rg,6he;q6\nnwArr=6om;ma\nnwarhk=84j;18g\nnwarr=6mu;ij\nnwarrow=6mu;ii\nnwnear=84n;18m\noS=79k;13h\noacute=6r;44\noast=6u3;xd\nocir=6u2;xb\nocirc=6s;45\nocy=u6;c5\nodash=6u5;xf\nodblac=9d;6l\nodiv=8c8;1dg\nodot=6u1;x9\nodsold=88s;1bn\noelig=9f;6n\nofcir=88v;1bp\nofr=2koc;1lg\nogon=kb;87\nograve=6q;43\nogt=88x;1br\nohbar=88l;1bi\nohm=q1;91\noint=6r2;pk\nolarr=6nu;k7\nolcir=88u;1bo\nolcross=88r;1bm\noline=6da;en\nolt=88w;1bq\nomacr=99;6j\nomega=qx;9u\nomicron=qn;9h\nomid=88m;1bj\nominus=6ty;x4\noopf=2kps;1mp\nopar=88n;1bk\noperp=88p;1bl\noplus=6tx;x2\nor=6qw;p8\norarr=6nv;k9\nord=8d9;1ea\norder=6k4;h1\norderof=6k4;h0\nordf=4q;1s\nordm=56;2h\norigof=6uu;yn\noror=8d2;1e4\norslope=8d3;1e5\norv=8d7;1e8\noscr=6k4;h2\noslash=6w;4a\nosol=6u0;x7\notilde=6t;46\notimes=6tz;x6\notimesas=8c6;1de\nouml=6u;47\novbar=6yl;12x\npar=6qt;oz\npara=52;2a\nparallel=6qt;ox\nparsim=8hf;1j4\nparsl=8hp;1j6\npart=6pu;my\npcy=u7;c6\npercnt=11;7\nperiod=1a;h\npermil=6cw;ed\nperp=6ud;xw\npertenk=6cx;ee\npfr=2kod;1lh\nphi=qu;9r\nphiv=r9;a2\nphmmat=6k3;gy\nphone=7im;162\npi=qo;9i\npitchfork=6vo;101\npiv=ra;a4\nplanck=6j3;fj\nplanckh=6j2;fh\nplankv=6j3;fk\nplus=17;f\nplusacir=8bn;1cz\nplusb=6u6;xh\npluscir=8bm;1cy\nplusdo=6qc;nz\nplusdu=8bp;1d1\npluse=8du;1el\nplusmn=4x;23\nplussim=8bq;1d2\nplustwo=8br;1d3\npm=4x;24\npointint=8b9;1cv\npopf=2kpt;1mq\npound=4j;1h\npr=6t6;uu\nprE=8fn;1h7\nprap=8fr;1he\nprcue=6t8;v0\npre=8fj;1h0\nprec=6t6;ut\nprecapprox=8fr;1hd\npreccurlyeq=6t8;uz\npreceq=8fj;1gz\nprecnapprox=8ft;1hh\nprecneqq=8fp;1h9\nprecnsim=6w8;10z\nprecsim=6ta;v5\nprime=6cy;ef\nprimes=6jd;g2\nprnE=8fp;1ha\nprnap=8ft;1hi\nprnsim=6w8;110\nprod=6q7;np\nprofalar=6y6;12v\nprofline=6xe;12e\nprofsurf=6xf;12f\nprop=6ql;oe\npropto=6ql;oc\nprsim=6ta;v6\nprurel=6uo;y8\npscr=2klh;1k6\npsi=qw;9t\npuncsp=6bs;d6\nqfr=2koe;1li\nqint=8b0;1co\nqopf=2kpu;1mr\nqprime=6dz;es\nqscr=2kli;1k7\nquaternions=6j1;ff\nquatint=8ba;1cw\nquest=1r;t\nquesteq=6sf;si\nquot=y;4\nrAarr=6or;mh\nrArr=6oi;lz\nrAtail=84c;18b\nrBarr=83z;181\nrHar=86c;19s\nrace=6rh,mp;qb\nracute=9h;6p\nradic=6qi;o8\nraemptyv=88j;1bg\nrang=7vt;172\nrangd=87m;1at\nrange=885;1b2\nrangle=7vt;171\nraquo=57;2i\nrarr=6mq;i6\nrarrap=86t;1ab\nrarrb=6p1;mm\nrarrbfs=84g;18f\nrarrc=84z;18t\nrarrfs=84e;18d\nrarrhk=6ne;jm\nrarrlp=6ng;jq\nrarrpl=85h;191\nrarrsim=86s;1aa\nrarrtl=6n7;j9\nrarrw=6n1;iz\nratail=84a;189\nratio=6ra;pz\nrationals=6je;g4\nrbarr=83x;17y\nrbbrk=7sj;16q\nrbrace=3h;1b\nrbrack=2l;y\nrbrke=87g;1an\nrbrksld=87i;1ap\nrbrkslu=87k;1ar\nrcaron=9l;6t\nrcedil=9j;6r\nrceil=6x5;124\nrcub=3h;1c\nrcy=u8;c7\nrdca=853;18w\nrdldhar=86h;19x\nrdquo=6cd;e2\nrdquor=6cd;e1\nrdsh=6nn;k0\nreal=6jg;g9\nrealine=6jf;g6\nrealpart=6jg;g8\nreals=6jh;gc\nrect=7fx;151\nreg=4u;1y\nrfisht=871;1ah\nrfloor=6x7;128\nrfr=2kof;1lj\nrhard=6o1;kr\nrharu=6o0;ko\nrharul=86k;1a0\nrho=qp;9j\nrhov=s1;ab\nrightarrow=6mq;i4\nrightarrowtail=6n7;j8\nrightharpoondown=6o1;kp\nrightharpoonup=6o0;km\nrightleftarrows=6o4;kz\nrightleftharpoons=6oc;lh\nrightrightarrows=6o9;la\nrightsquigarrow=6n1;iy\nrightthreetimes=6vg;zn\nring=ka;86\nrisingdotseq=6s3;s3\nrlarr=6o4;l0\nrlhar=6oc;lj\nrlm=6bz;dj\nrmoust=71t;133\nrmoustache=71t;132\nrnmid=8ha;1iz\nroang=7vx;176\nroarr=6pq;mq\nrobrk=7vr;16w\nropar=87a;1al\nropf=2kpv;1ms\nroplus=8by;1d7\nrotimes=8c5;1dd\nrpar=15;c\nrpargt=87o;1av\nrppolint=8b6;1cs\nrrarr=6o9;lb\nrsaquo=6d6;el\nrscr=2klj;1k8\nrsh=6nl;jy\nrsqb=2l;z\nrsquo=6c9;dv\nrsquor=6c9;du\nrthree=6vg;zo\nrtimes=6ve;zk\nrtri=7g9;15d\nrtrie=6ut;ym\nrtrif=7g8;15b\nrtriltri=89a;1by\nruluhar=86g;19w\nrx=6ji;ge\nsacute=9n;6v\nsbquo=6ca;dx\nsc=6t7;ux\nscE=8fo;1h8\nscap=8fs;1hg\nscaron=9t;71\nsccue=6t9;v3\nsce=8fk;1h6\nscedil=9r;6z\nscirc=9p;6x\nscnE=8fq;1hc\nscnap=8fu;1hk\nscnsim=6w9;112\nscpolint=8b7;1ct\nscsim=6tb;va\nscy=u9;c8\nsdot=6v9;zd\nsdotb=6u9;xn\nsdote=8di;1ec\nseArr=6oo;mc\nsearhk=84l;18j\nsearr=6mw;ip\nsearrow=6mw;io\nsect=4n;1l\nsemi=1n;k\nseswar=84p;18p\nsetminus=6qe;o2\nsetmn=6qe;o4\nsext=7qu;16n\nsfr=2kog;1lk\nsfrown=6xu;12q\nsharp=7lb;16h\nshchcy=uh;cg\nshcy=ug;cf\nshortmid=6qr;oo\nshortparallel=6qt;ow\nshy=4t;1v\nsigma=qr;9n\nsigmaf=qq;9l\nsigmav=qq;9m\nsim=6rg;qa\nsimdot=8dm;1ed\nsime=6rn;qu\nsimeq=6rn;qt\nsimg=8f2;1gb\nsimgE=8f4;1gd\nsiml=8f1;1ga\nsimlE=8f3;1gc\nsimne=6rq;r0\nsimplus=8bo;1d0\nsimrarr=86q;1a8\nslarr=6mo;hw\nsmallsetminus=6qe;o0\nsmashp=8c3;1db\nsmeparsl=89w;1c7\nsmid=6qr;op\nsmile=6xv;12t\nsmt=8fe;1go\nsmte=8fg;1gr\nsmtes=8fg,1e68;1gq\nsoftcy=uk;cj\nsol=1b;i\nsolb=890;1bu\nsolbar=6yn;12y\nsopf=2kpw;1mt\nspades=7kw;166\nspadesuit=7kw;165\nspar=6qt;oy\nsqcap=6tv;wx\nsqcaps=6tv,1e68;wv\nsqcup=6tw;x0\nsqcups=6tw,1e68;wy\nsqsub=6tr;wk\nsqsube=6tt;wr\nsqsubset=6tr;wj\nsqsubseteq=6tt;wq\nsqsup=6ts;wo\nsqsupe=6tu;wu\nsqsupset=6ts;wn\nsqsupseteq=6tu;wt\nsqu=7fl;14v\nsquare=7fl;14u\nsquarf=7fu;14y\nsquf=7fu;14z\nsrarr=6mq;i5\nsscr=2klk;1k9\nssetmn=6qe;o3\nssmile=6xv;12s\nsstarf=6va;ze\nstar=7ie;161\nstarf=7id;160\nstraightepsilon=s5;ac\nstraightphi=r9;a0\nstrns=4v;1z\nsub=6te;vl\nsubE=8g5;1hy\nsubdot=8fx;1hn\nsube=6ti;vw\nsubedot=8g3;1ht\nsubmult=8g1;1hr\nsubnE=8gb;1i8\nsubne=6tm;w9\nsubplus=8fz;1hp\nsubrarr=86x;1ae\nsubset=6te;vk\nsubseteq=6ti;vv\nsubseteqq=8g5;1hx\nsubsetneq=6tm;w8\nsubsetneqq=8gb;1i7\nsubsim=8g7;1i3\nsubsub=8gl;1ij\nsubsup=8gj;1ih\nsucc=6t7;uw\nsuccapprox=8fs;1hf\nsucccurlyeq=6t9;v2\nsucceq=8fk;1h5\nsuccnapprox=8fu;1hj\nsuccneqq=8fq;1hb\nsuccnsim=6w9;111\nsuccsim=6tb;v9\nsum=6q9;nt\nsung=7l6;16d\nsup=6tf;vr\nsup1=55;2g\nsup2=4y;25\nsup3=4z;26\nsupE=8g6;1i2\nsupdot=8fy;1ho\nsupdsub=8go;1im\nsupe=6tj;vz\nsupedot=8g4;1hu\nsuphsol=7ux;16s\nsuphsub=8gn;1il\nsuplarr=86z;1af\nsupmult=8g2;1hs\nsupnE=8gc;1ic\nsupne=6tn;wd\nsupplus=8g0;1hq\nsupset=6tf;vq\nsupseteq=6tj;vy\nsupseteqq=8g6;1i1\nsupsetneq=6tn;wc\nsupsetneqq=8gc;1ib\nsupsim=8g8;1i4\nsupsub=8gk;1ii\nsupsup=8gm;1ik\nswArr=6op;md\nswarhk=84m;18l\nswarr=6mx;is\nswarrow=6mx;ir\nswnwar=84q;18r\nszlig=67;3k\ntarget=6xi;12h\ntau=qs;9o\ntbrk=71w;135\ntcaron=9x;75\ntcedil=9v;73\ntcy=ua;c9\ntdot=6hn;f4\ntelrec=6xh;12g\ntfr=2koh;1ll\nthere4=6r8;pv\ntherefore=6r8;pu\ntheta=qg;9a\nthetasym=r5;9v\nthetav=r5;9x\nthickapprox=6rs;r3\nthicksim=6rg;q7\nthinsp=6bt;d8\nthkap=6rs;r7\nthksim=6rg;q8\nthorn=72;4g\ntilde=kc;89\ntimes=5z;3c\ntimesb=6u8;xl\ntimesbar=8c1;1da\ntimesd=8c0;1d9\ntint=6r1;ph\ntoea=84o;18o\ntop=6uc;xt\ntopbot=6ye;12w\ntopcir=8hd;1j2\ntopf=2kpx;1mu\ntopfork=8gq;1io\ntosa=84p;18q\ntprime=6d0;eh\ntrade=6jm;gg\ntriangle=7g5;158\ntriangledown=7gf;15i\ntriangleleft=7gj;15m\ntrianglelefteq=6us;yh\ntriangleq=6sc;sg\ntriangleright=7g9;15c\ntrianglerighteq=6ut;yl\ntridot=7ho;15r\ntrie=6sc;sh\ntriminus=8ca;1di\ntriplus=8c9;1dh\ntrisb=899;1bx\ntritime=8cb;1dj\ntrpezium=736;13d\ntscr=2kll;1ka\ntscy=ue;cd\ntshcy=uz;cx\ntstrok=9z;77\ntwixt=6ss;tu\ntwoheadleftarrow=6n2;j0\ntwoheadrightarrow=6n4;j3\nuArr=6oh;lv\nuHar=86b;19r\nuacute=6y;4c\nuarr=6mp;i1\nubrcy=v2;cz\nubreve=a5;7d\nucirc=6z;4d\nucy=ub;ca\nudarr=6o5;l2\nudblac=a9;7h\nudhar=86m;1a3\nufisht=872;1ai\nufr=2koi;1lm\nugrave=6x;4b\nuharl=6nz;kl\nuharr=6ny;ki\nuhblk=7eo;14n\nulcorn=6xo;12j\nulcorner=6xo;12i\nulcrop=6xb;12c\nultri=7i0;15u\numacr=a3;7b\numl=4o;1p\nuogon=ab;7j\nuopf=2kpy;1mv\nuparrow=6mp;i0\nupdownarrow=6mt;if\nupharpoonleft=6nz;kj\nupharpoonright=6ny;kg\nuplus=6tq;wg\nupsi=qt;9q\nupsih=r6;9y\nupsilon=qt;9p\nupuparrows=6o8;l8\nurcorn=6xp;12l\nurcorner=6xp;12k\nurcrop=6xa;12b\nuring=a7;7f\nurtri=7i1;15v\nuscr=2klm;1kb\nutdot=6wg;11h\nutilde=a1;79\nutri=7g5;159\nutrif=7g4;157\nuuarr=6o8;l9\nuuml=70;4e\nuwangle=887;1b4\nvArr=6ol;m9\nvBar=8h4;1iu\nvBarv=8h5;1iv\nvDash=6ug;y0\nvangrt=87w;1az\nvarepsilon=s5;ad\nvarkappa=s0;a8\nvarnothing=6px;n4\nvarphi=r9;a1\nvarpi=ra;a3\nvarpropto=6ql;ob\nvarr=6mt;ig\nvarrho=s1;aa\nvarsigma=qq;9k\nvarsubsetneq=6tm,1e68;w6\nvarsubsetneqq=8gb,1e68;1i5\nvarsupsetneq=6tn,1e68;wa\nvarsupsetneqq=8gc,1e68;1i9\nvartheta=r5;9w\nvartriangleleft=6uq;y9\nvartriangleright=6ur;yc\nvcy=tu;bt\nvdash=6ua;xp\nvee=6qw;p7\nveebar=6uz;yu\nveeeq=6sa;sf\nvellip=6we;11f\nverbar=3g;19\nvert=3g;1a\nvfr=2koj;1ln\nvltri=6uq;yb\nvnsub=6te,6he;vj\nvnsup=6tf,6he;vo\nvopf=2kpz;1mw\nvprop=6ql;od\nvrtri=6ur;ye\nvscr=2kln;1kc\nvsubnE=8gb,1e68;1i6\nvsubne=6tm,1e68;w7\nvsupnE=8gc,1e68;1ia\nvsupne=6tn,1e68;wb\nvzigzag=87u;1ay\nwcirc=ad;7l\nwedbar=8db;1eb\nwedge=6qv;p5\nwedgeq=6s9;se\nweierp=6jc;g0\nwfr=2kok;1lo\nwopf=2kq0;1mx\nwp=6jc;g1\nwr=6rk;qk\nwreath=6rk;qj\nwscr=2klo;1kd\nxcap=6v6;z6\nxcirc=7hr;15t\nxcup=6v7;z9\nxdtri=7gd;15f\nxfr=2kol;1lp\nxhArr=7wa;17o\nxharr=7w7;17f\nxi=qm;9g\nxlArr=7w8;17i\nxlarr=7w5;179\nxmap=7wc;17q\nxnis=6wr;11t\nxodot=8ao;1ce\nxopf=2kq1;1my\nxoplus=8ap;1cg\nxotime=8aq;1ci\nxrArr=7w9;17l\nxrarr=7w6;17c\nxscr=2klp;1ke\nxsqcup=8au;1cm\nxuplus=8as;1ck\nxutri=7g3;155\nxvee=6v5;z2\nxwedge=6v4;yz\nyacute=71;4f\nyacy=un;cm\nycirc=af;7n\nycy=uj;ci\nyen=4l;1j\nyfr=2kom;1lq\nyicy=uv;ct\nyopf=2kq2;1mz\nyscr=2klq;1kf\nyucy=um;cl\nyuml=73;4h\nzacute=ai;7q\nzcaron=am;7u\nzcy=tz;by\nzdot=ak;7s\nzeetrf=6js;gk\nzeta=qe;98\nzfr=2kon;1lr\nzhcy=ty;bx\nzigrarr=6ot;mi\nzopf=2kq3;1n0\nzscr=2klr;1kg\nzwj=6bx;dh\nzwnj=6bw;dg" - -} diff --git a/Example/Pods/SwiftSoup/Sources/Evaluator.swift b/Example/Pods/SwiftSoup/Sources/Evaluator.swift deleted file mode 100755 index b8882a6..0000000 --- a/Example/Pods/SwiftSoup/Sources/Evaluator.swift +++ /dev/null @@ -1,720 +0,0 @@ -// -// Evaluator.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 22/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - * Evaluates that an element matches the selector. - */ -public class Evaluator { - init () {} - - /** - * Test if the element meets the evaluator's requirements. - * - * @param root Root of the matching subtree - * @param element tested element - * @return Returns true if the requirements are met or - * false otherwise - */ - open func matches(_ root: Element, _ element: Element)throws->Bool { - preconditionFailure("self method must be overridden") - } - - open func toString() -> String { - preconditionFailure("self method must be overridden") - } - - /** - * Evaluator for tag name - */ - public class Tag: Evaluator { - private let tagName: String - private let tagNameNormal: String - - public init(_ tagName: String) { - self.tagName = tagName - self.tagNameNormal = tagName.lowercased() - } - - open override func matches(_ root: Element, _ element: Element)throws->Bool { - return element.tagNameNormal() == tagNameNormal - } - - open override func toString() -> String { - return String(tagName) - } - } - - /** - * Evaluator for tag name that ends with - */ - public final class TagEndsWith: Evaluator { - private let tagName: String - - public init(_ tagName: String) { - self.tagName = tagName - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - return (element.tagName().hasSuffix(tagName)) - } - - public override func toString() -> String { - return String(tagName) - } - } - - /** - * Evaluator for element id - */ - public final class Id: Evaluator { - private let id: String - - public init(_ id: String) { - self.id = id - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - return (id == element.id()) - } - - public override func toString() -> String { - return "#\(id)" - } - - } - - /** - * Evaluator for element class - */ - public final class Class: Evaluator { - private let className: String - - public init(_ className: String) { - self.className = className - } - - public override func matches(_ root: Element, _ element: Element) -> Bool { - return (element.hasClass(className)) - } - - public override func toString() -> String { - return ".\(className)" - } - - } - - /** - * Evaluator for attribute name matching - */ - public final class Attribute: Evaluator { - private let key: String - - public init(_ key: String) { - self.key = key - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - return element.hasAttr(key) - } - - public override func toString() -> String { - return "[\(key)]" - } - - } - - /** - * Evaluator for attribute name prefix matching - */ - public final class AttributeStarting: Evaluator { - private let keyPrefix: String - - public init(_ keyPrefix: String)throws { - try Validate.notEmpty(string: keyPrefix) - self.keyPrefix = keyPrefix.lowercased() - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - if let values = element.getAttributes() { - for attribute in values where attribute.getKey().lowercased().hasPrefix(keyPrefix) { - return true - } - } - return false - } - - public override func toString() -> String { - return "[^\(keyPrefix)]" - } - - } - - /** - * Evaluator for attribute name/value matching - */ - public final class AttributeWithValue: AttributeKeyPair { - public override init(_ key: String, _ value: String)throws { - try super.init(key, value) - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - if element.hasAttr(key) { - let string = try element.attr(key) - return value.equalsIgnoreCase(string: string.trim()) - } - return false - } - - public override func toString() -> String { - return "[\(key)=\(value)]" - } - - } - - /** - * Evaluator for attribute name != value matching - */ - public final class AttributeWithValueNot: AttributeKeyPair { - public override init(_ key: String, _ value: String)throws { - try super.init(key, value) - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - let string = try element.attr(key) - return !value.equalsIgnoreCase(string: string) - } - - public override func toString() -> String { - return "[\(key)!=\(value)]" - } - - } - - /** - * Evaluator for attribute name/value matching (value prefix) - */ - public final class AttributeWithValueStarting: AttributeKeyPair { - public override init(_ key: String, _ value: String)throws { - try super.init(key, value) - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - if element.hasAttr(key) { - return try element.attr(key).lowercased().hasPrefix(value) // value is lower case already - } - return false - } - - public override func toString() -> String { - return "[\(key)^=\(value)]" - } - - } - - /** - * Evaluator for attribute name/value matching (value ending) - */ - public final class AttributeWithValueEnding: AttributeKeyPair { - public override init(_ key: String, _ value: String)throws { - try super.init(key, value) - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - if element.hasAttr(key) { - return try element.attr(key).lowercased().hasSuffix(value) // value is lower case - } - return false - } - - public override func toString() -> String { - return "[\(key)$=\(value)]" - } - - } - - /** - * Evaluator for attribute name/value matching (value containing) - */ - public final class AttributeWithValueContaining: AttributeKeyPair { - public override init(_ key: String, _ value: String)throws { - try super.init(key, value) - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - if element.hasAttr(key) { - return try element.attr(key).lowercased().contains(value) // value is lower case - } - return false - } - - public override func toString() -> String { - return "[\(key)*=\(value)]" - } - - } - - /** - * Evaluator for attribute name/value matching (value regex matching) - */ - public final class AttributeWithValueMatching: Evaluator { - let key: String - let pattern: Pattern - - public init(_ key: String, _ pattern: Pattern) { - self.key = key.trim().lowercased() - self.pattern = pattern - super.init() - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - if element.hasAttr(key) { - let string = try element.attr(key) - return pattern.matcher(in: string).find() - } - return false - } - - public override func toString() -> String { - return "[\(key)~=\(pattern.toString())]" - } - - } - - /** - * Abstract evaluator for attribute name/value matching - */ - public class AttributeKeyPair: Evaluator { - let key: String - var value: String - - public init(_ key: String, _ value2: String)throws { - var value2 = value2 - try Validate.notEmpty(string: key) - try Validate.notEmpty(string: value2) - - self.key = key.trim().lowercased() - if value2.startsWith("\"") && value2.hasSuffix("\"") || value2.startsWith("'") && value2.hasSuffix("'") { - value2 = value2.substring(1, value2.count-2) - } - self.value = value2.trim().lowercased() - } - - open override func matches(_ root: Element, _ element: Element)throws->Bool { - preconditionFailure("self method must be overridden") - } - } - - /** - * Evaluator for any / all element matching - */ - public final class AllElements: Evaluator { - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - return true - } - - public override func toString() -> String { - return "*" - } - } - - /** - * Evaluator for matching by sibling index number (e {@literal <} idx) - */ - public final class IndexLessThan: IndexEvaluator { - public override init(_ index: Int) { - super.init(index) - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - return try element.elementSiblingIndex() < index - } - - public override func toString() -> String { - return ":lt(\(index))" - } - - } - - /** - * Evaluator for matching by sibling index number (e {@literal >} idx) - */ - public final class IndexGreaterThan: IndexEvaluator { - public override init(_ index: Int) { - super.init(index) - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - return try element.elementSiblingIndex() > index - } - - public override func toString() -> String { - return ":gt(\(index))" - } - - } - - /** - * Evaluator for matching by sibling index number (e = idx) - */ - public final class IndexEquals: IndexEvaluator { - public override init(_ index: Int) { - super.init(index) - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - return try element.elementSiblingIndex() == index - } - - public override func toString() -> String { - return ":eq(\(index))" - } - - } - - /** - * Evaluator for matching the last sibling (css :last-child) - */ - public final class IsLastChild: Evaluator { - public override func matches(_ root: Element, _ element: Element)throws->Bool { - - if let parent = element.parent() { - let index = try element.elementSiblingIndex() - return !(parent is Document) && index == (parent.getChildNodes().count - 1) - } - return false - } - - public override func toString() -> String { - return ":last-child" - } - } - - public final class IsFirstOfType: IsNthOfType { - public init() { - super.init(0, 1) - } - public override func toString() -> String { - return ":first-of-type" - } - } - - public final class IsLastOfType: IsNthLastOfType { - public init() { - super.init(0, 1) - } - public override func toString() -> String { - return ":last-of-type" - } - } - - public class CssNthEvaluator: Evaluator { - public let a: Int - public let b: Int - - public init(_ a: Int, _ b: Int) { - self.a = a - self.b = b - } - public init(_ b: Int) { - self.a = 0 - self.b = b - } - - open override func matches(_ root: Element, _ element: Element)throws->Bool { - let p: Element? = element.parent() - if (p == nil || (((p as? Document) != nil))) {return false} - - let pos: Int = try calculatePosition(root, element) - if (a == 0) {return pos == b} - - return (pos-b)*a >= 0 && (pos-b)%a==0 - } - - open override func toString() -> String { - if (a == 0) { - return ":\(getPseudoClass())(\(b))" - } - if (b == 0) { - return ":\(getPseudoClass())(\(a))" - } - return ":\(getPseudoClass())(\(a)\(b))" - } - - open func getPseudoClass() -> String { - preconditionFailure("self method must be overridden") - } - open func calculatePosition(_ root: Element, _ element: Element)throws->Int { - preconditionFailure("self method must be overridden") - } - } - - /** - * css-compatible Evaluator for :eq (css :nth-child) - * - * @see IndexEquals - */ - public final class IsNthChild: CssNthEvaluator { - - public override init(_ a: Int, _ b: Int) { - super.init(a, b) - } - - public override func calculatePosition(_ root: Element, _ element: Element)throws->Int { - return try element.elementSiblingIndex()+1 - } - - public override func getPseudoClass() -> String { - return "nth-child" - } - } - - /** - * css pseudo class :nth-last-child) - * - * @see IndexEquals - */ - public final class IsNthLastChild: CssNthEvaluator { - public override init(_ a: Int, _ b: Int) { - super.init(a, b) - } - - public override func calculatePosition(_ root: Element, _ element: Element)throws->Int { - var i = 0 - - if let l = element.parent() { - i = l.children().array().count - } - return i - (try element.elementSiblingIndex()) - } - - public override func getPseudoClass() -> String { - return "nth-last-child" - } - } - - /** - * css pseudo class nth-of-type - * - */ - public class IsNthOfType: CssNthEvaluator { - public override init(_ a: Int, _ b: Int) { - super.init(a, b) - } - - open override func calculatePosition(_ root: Element, _ element: Element) -> Int { - var pos = 0 - let family: Elements? = element.parent()?.children() - if let array = family?.array() { - for el in array { - if (el.tag() == element.tag()) {pos+=1} - if (el === element) {break} - } - } - - return pos - } - - open override func getPseudoClass() -> String { - return "nth-of-type" - } - } - - public class IsNthLastOfType: CssNthEvaluator { - - public override init(_ a: Int, _ b: Int) { - super.init(a, b) - } - - open override func calculatePosition(_ root: Element, _ element: Element)throws->Int { - var pos = 0 - if let family = element.parent()?.children() { - let x = try element.elementSiblingIndex() - for i in x.. String { - return "nth-last-of-type" - } - } - - /** - * Evaluator for matching the first sibling (css :first-child) - */ - public final class IsFirstChild: Evaluator { - public override func matches(_ root: Element, _ element: Element)throws->Bool { - let p = element.parent() - if(p != nil && !(((p as? Document) != nil))) { - return (try element.elementSiblingIndex()) == 0 - } - return false - } - - public override func toString() -> String { - return ":first-child" - } - } - - /** - * css3 pseudo-class :root - * @see :root selector - * - */ - public final class IsRoot: Evaluator { - public override func matches(_ root: Element, _ element: Element)throws->Bool { - let r: Element = ((root as? Document) != nil) ? root.child(0) : root - return element === r - } - public override func toString() -> String { - return ":root" - } - } - - public final class IsOnlyChild: Evaluator { - public override func matches(_ root: Element, _ element: Element)throws->Bool { - let p = element.parent() - return p != nil && !((p as? Document) != nil) && element.siblingElements().array().count == 0 - } - public override func toString() -> String { - return ":only-child" - } - } - - public final class IsOnlyOfType: Evaluator { - public override func matches(_ root: Element, _ element: Element)throws->Bool { - let p = element.parent() - if (p == nil || (p as? Document) != nil) {return false} - - var pos = 0 - if let family = p?.children().array() { - for el in family { - if (el.tag() == element.tag()) {pos+=1} - } - } - return pos == 1 - } - - public override func toString() -> String { - return ":only-of-type" - } - } - - public final class IsEmpty: Evaluator { - public override func matches(_ root: Element, _ element: Element)throws->Bool { - let family: Array = element.getChildNodes() - for n in family { - if (!((n as? Comment) != nil || (n as? XmlDeclaration) != nil || (n as? DocumentType) != nil)) {return false} - } - return true - } - - public override func toString() -> String { - return ":empty" - } - } - - /** - * Abstract evaluator for sibling index matching - * - * @author ant - */ - public class IndexEvaluator: Evaluator { - let index: Int - - public init(_ index: Int) { - self.index = index - } - } - - /** - * Evaluator for matching Element (and its descendants) text - */ - public final class ContainsText: Evaluator { - private let searchText: String - - public init(_ searchText: String) { - self.searchText = searchText.lowercased() - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - return (try element.text().lowercased().contains(searchText)) - } - - public override func toString() -> String { - return ":contains(\(searchText)" - } - } - - /** - * Evaluator for matching Element's own text - */ - public final class ContainsOwnText: Evaluator { - private let searchText: String - - public init(_ searchText: String) { - self.searchText = searchText.lowercased() - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - return (element.ownText().lowercased().contains(searchText)) - } - - public override func toString() -> String { - return ":containsOwn(\(searchText)" - } - } - - /** - * Evaluator for matching Element (and its descendants) text with regex - */ - public final class Matches: Evaluator { - private let pattern: Pattern - - public init(_ pattern: Pattern) { - self.pattern = pattern - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - let m = try pattern.matcher(in: element.text()) - return m.find() - } - - public override func toString() -> String { - return ":matches(\(pattern)" - } - } - - /** - * Evaluator for matching Element's own text with regex - */ - public final class MatchesOwn: Evaluator { - private let pattern: Pattern - - public init(_ pattern: Pattern) { - self.pattern = pattern - } - - public override func matches(_ root: Element, _ element: Element)throws->Bool { - let m = pattern.matcher(in: element.ownText()) - return m.find() - } - - public override func toString() -> String { - return ":matchesOwn(\(pattern.toString())" - } - } -} diff --git a/Example/Pods/SwiftSoup/Sources/Exception.swift b/Example/Pods/SwiftSoup/Sources/Exception.swift deleted file mode 100755 index a4ab97a..0000000 --- a/Example/Pods/SwiftSoup/Sources/Exception.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// Exception.swift -// SwifSoup -// -// Created by Nabil Chatbi on 02/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -public enum ExceptionType { - case IllegalArgumentException - case IOException - case XmlDeclaration - case MalformedURLException - case CloneNotSupportedException - case SelectorParseException -} - -public enum Exception: Error { - case Error(type:ExceptionType, Message: String) -} diff --git a/Example/Pods/SwiftSoup/Sources/FormElement.swift b/Example/Pods/SwiftSoup/Sources/FormElement.swift deleted file mode 100755 index a15754f..0000000 --- a/Example/Pods/SwiftSoup/Sources/FormElement.swift +++ /dev/null @@ -1,125 +0,0 @@ -// -// FormElement.swift -// SwifSoup -// -// Created by Nabil Chatbi on 29/09/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - * A HTML Form Element provides ready access to the form fields/controls that are associated with it. It also allows a - * form to easily be submitted. - */ -public class FormElement: Element { - private let _elements: Elements = Elements() - - /** - * Create a new, standalone form element. - * - * @param tag tag of this element - * @param baseUri the base URI - * @param attributes initial attributes - */ - public override init(_ tag: Tag, _ baseUri: String, _ attributes: Attributes) { - super.init(tag, baseUri, attributes) - } - - /** - * Get the list of form control elements associated with this form. - * @return form controls associated with this element. - */ - public func elements() -> Elements { - return _elements - } - - /** - * Add a form control element to this form. - * @param element form control to add - * @return this form element, for chaining - */ - @discardableResult - public func addElement(_ element: Element) -> FormElement { - _elements.add(element) - return self - } - - //todo: - /** - * Prepare to submit this form. A Connection object is created with the request set up from the form values. You - * can then set up other options (like user-agent, timeout, cookies), then execute it. - * @return a connection prepared from the values of this form. - * @throws IllegalArgumentException if the form's absolute action URL cannot be determined. Make sure you pass the - * document's base URI when parsing. - */ -// public func submit()throws->Connection { -// let action: String = hasAttr("action") ? try absUrl("action") : try baseUri() -// Validate.notEmpty(action, "Could not determine a form action URL for submit. Ensure you set a base URI when parsing.") -// Connection.Method method = attr("method").toUpperCase().equals("POST") ? -// Connection.Method.POST : Connection.Method.GET -// -// return Jsoup.connect(action) -// .data(formData()) -// .method(method) -// } - - //todo: - /** - * Get the data that this form submits. The returned list is a copy of the data, and changes to the contents of the - * list will not be reflected in the DOM. - * @return a list of key vals - */ -// public List formData() { -// ArrayList data = new ArrayList(); -// -// // iterate the form control elements and accumulate their values -// for (Element el: elements) { -// if (!el.tag().isFormSubmittable()) continue; // contents are form listable, superset of submitable -// if (el.hasAttr("disabled")) continue; // skip disabled form inputs -// String name = el.attr("name"); -// if (name.length() == 0) continue; -// String type = el.attr("type"); -// -// if ("select".equals(el.tagName())) { -// Elements options = el.select("option[selected]"); -// boolean set = false; -// for (Element option: options) { -// data.add(HttpConnection.KeyVal.create(name, option.val())); -// set = true; -// } -// if (!set) { -// Element option = el.select("option").first(); -// if (option != null) -// data.add(HttpConnection.KeyVal.create(name, option.val())); -// } -// } else if ("checkbox".equalsIgnoreCase(type) || "radio".equalsIgnoreCase(type)) { -// // only add checkbox or radio if they have the checked attribute -// if (el.hasAttr("checked")) { -// final String val = el.val().length() > 0 ? el.val() : "on"; -// data.add(HttpConnection.KeyVal.create(name, val)); -// } -// } else { -// data.add(HttpConnection.KeyVal.create(name, el.val())); -// } -// } -// return data; -// } - - public override func copy(with zone: NSZone? = nil) -> Any { - let clone = FormElement(_tag, baseUri!, attributes!) - return copy(clone: clone) - } - - public override func copy(parent: Node?) -> Node { - let clone = FormElement(_tag, baseUri!, attributes!) - return copy(clone: clone, parent: parent) - } - public override func copy(clone: Node, parent: Node?) -> Node { - let clone = clone as! FormElement - for att in _elements.array() { - clone._elements.add(att) - } - return super.copy(clone: clone, parent: parent) - } -} diff --git a/Example/Pods/SwiftSoup/Sources/HtmlTreeBuilder.swift b/Example/Pods/SwiftSoup/Sources/HtmlTreeBuilder.swift deleted file mode 100755 index 4f0fb9e..0000000 --- a/Example/Pods/SwiftSoup/Sources/HtmlTreeBuilder.swift +++ /dev/null @@ -1,781 +0,0 @@ -// -// HtmlTreeBuilder.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 24/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - * HTML Tree Builder; creates a DOM from Tokens. - */ -class HtmlTreeBuilder: TreeBuilder { - - private enum TagSets { - // tag searches - static let inScope = ["applet", "caption", "html", "table", "td", "th", "marquee", "object"] - static let list = ["ol", "ul"] - static let button = ["button"] - static let tableScope = ["html", "table"] - static let selectScope = ["optgroup", "option"] - static let endTags = ["dd", "dt", "li", "option", "optgroup", "p", "rp", "rt"] - static let titleTextarea = ["title", "textarea"] - static let frames = ["iframe", "noembed", "noframes", "style", "xmp"] - - static let special: Set = ["address", "applet", "area", "article", "aside", "base", "basefont", "bgsound", - "blockquote", "body", "br", "button", "caption", "center", "col", "colgroup", "command", "dd", - "details", "dir", "div", "dl", "dt", "embed", "fieldset", "figcaption", "figure", "footer", "form", - "frame", "frameset", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", - "iframe", "img", "input", "isindex", "li", "link", "listing", "marquee", "menu", "meta", "nav", - "noembed", "noframes", "noscript", "object", "ol", "p", "param", "plaintext", "pre", "script", - "section", "select", "style", "summary", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", - "title", "tr", "ul", "wbr", "xmp"] - } - - private var _state: HtmlTreeBuilderState = HtmlTreeBuilderState.Initial // the current state - private var _originalState: HtmlTreeBuilderState = HtmlTreeBuilderState.Initial // original / marked state - - private var baseUriSetFromDoc: Bool = false - private var headElement: Element? // the current head element - private var formElement: FormElement? // the current form element - private var contextElement: Element? // fragment parse context -- could be null even if fragment parsing - private var formattingElements: Array = Array() // active (open) formatting elements - private var pendingTableCharacters: Array = Array() // chars in table to be shifted out - private var emptyEnd: Token.EndTag = Token.EndTag() // reused empty end tag - - private var _framesetOk: Bool = true // if ok to go into frameset - private var fosterInserts: Bool = false // if next inserts should be fostered - private var fragmentParsing: Bool = false // if parsing a fragment of html - - public override init() { - super.init() - } - - public override func defaultSettings() -> ParseSettings { - return ParseSettings.htmlDefault - } - - override func parse(_ input: String, _ baseUri: String, _ errors: ParseErrorList, _ settings: ParseSettings)throws->Document { - _state = HtmlTreeBuilderState.Initial - baseUriSetFromDoc = false - return try super.parse(input, baseUri, errors, settings) - } - - func parseFragment(_ inputFragment: String, _ context: Element?, _ baseUri: String, _ errors: ParseErrorList, _ settings: ParseSettings)throws->Array { - // context may be null - _state = HtmlTreeBuilderState.Initial - initialiseParse(inputFragment, baseUri, errors, settings) - contextElement = context - fragmentParsing = true - var root: Element? = nil - - if let context = context { - if let d = context.ownerDocument() { // quirks setup: - doc.quirksMode(d.quirksMode()) - } - - // initialise the tokeniser state: - switch context.tagName() { - case TagSets.titleTextarea: - tokeniser.transition(TokeniserState.Rcdata) - case TagSets.frames: - tokeniser.transition(TokeniserState.Rawtext) - case "script": - tokeniser.transition(TokeniserState.ScriptData) - case "noscript": - tokeniser.transition(TokeniserState.Data) // if scripting enabled, rawtext - case "plaintext": - tokeniser.transition(TokeniserState.Data) - default: - tokeniser.transition(TokeniserState.Data) - } - - root = try Element(Tag.valueOf("html", settings), baseUri) - try Validate.notNull(obj: root) - try doc.appendChild(root!) - stack.append(root!) - resetInsertionMode() - - // setup form element to nearest form on context (up ancestor chain). ensures form controls are associated - // with form correctly - let contextChain: Elements = context.parents() - contextChain.add(0, context) - for parent: Element in contextChain.array() { - if let x = (parent as? FormElement) { - formElement = x - break - } - } - } - - try runParser() - if (context != nil && root != nil) { - return root!.getChildNodes() - } else { - return doc.getChildNodes() - } - } - - @discardableResult - public override func process(_ token: Token)throws->Bool { - currentToken = token - return try self._state.process(token, self) - } - - @discardableResult - func process(_ token: Token, _ state: HtmlTreeBuilderState)throws->Bool { - currentToken = token - return try state.process(token, self) - } - - func transition(_ state: HtmlTreeBuilderState) { - self._state = state - } - - func state() -> HtmlTreeBuilderState { - return _state - } - - func markInsertionMode() { - _originalState = _state - } - - func originalState() -> HtmlTreeBuilderState { - return _originalState - } - - func framesetOk(_ framesetOk: Bool) { - self._framesetOk = framesetOk - } - - func framesetOk() -> Bool { - return _framesetOk - } - - func getDocument() -> Document { - return doc - } - - func getBaseUri() -> String { - return baseUri - } - - func maybeSetBaseUri(_ base: Element)throws { - if (baseUriSetFromDoc) { // only listen to the first in parse - return - } - - let href: String = try base.absUrl("href") - if (href.count != 0) { // ignore etc - baseUri = href - baseUriSetFromDoc = true - try doc.setBaseUri(href) // set on the doc so doc.createElement(Tag) will get updated base, and to update all descendants - } - } - - func isFragmentParsing() -> Bool { - return fragmentParsing - } - - func error(_ state: HtmlTreeBuilderState) { - if (errors.canAddError() && currentToken != nil) { - errors.add(ParseError(reader.getPos(), "Unexpected token [\(currentToken!.tokenType())] when in state [\(state.rawValue)]")) - } - } - - @discardableResult - func insert(_ startTag: Token.StartTag)throws->Element { - // handle empty unknown tags - // when the spec expects an empty tag, will directly hit insertEmpty, so won't generate this fake end tag. - if (startTag.isSelfClosing()) { - let el: Element = try insertEmpty(startTag) - stack.append(el) - tokeniser.transition(TokeniserState.Data) // handles - - var tagPending: Token.Tag = Token.Tag() // tag we are building up - let startPending: Token.StartTag = Token.StartTag() - let endPending: Token.EndTag = Token.EndTag() - let charPending: Token.Char = Token.Char() - let doctypePending: Token.Doctype = Token.Doctype() // doctype building up - let commentPending: Token.Comment = Token.Comment() // comment building up - private var lastStartTag: String? // the last start tag emitted, to test appropriate end tag - private var selfClosingFlagAcknowledged: Bool = true - - init(_ reader: CharacterReader, _ errors: ParseErrorList?) { - self.reader = reader - self.errors = errors - } - - func read()throws->Token { - if (!selfClosingFlagAcknowledged) { - error("Self closing flag not acknowledged") - selfClosingFlagAcknowledged = true - } - - while (!isEmitPending) { - try state.read(self, reader) - } - - // if emit is pending, a non-character token was found: return any chars in buffer, and leave token for next read: - if !charsBuilder.isEmpty { - let str: String = charsBuilder.toString() - charsBuilder.clear() - charsString = nil - return charPending.data(str) - } else if (charsString != nil) { - let token: Token = charPending.data(charsString!) - charsString = nil - return token - } else { - isEmitPending = false - return emitPending! - } - } - - func emit(_ token: Token)throws { - try Validate.isFalse(val: isEmitPending, msg: "There is an unread token pending!") - - emitPending = token - isEmitPending = true - - if (token.type == Token.TokenType.StartTag) { - let startTag: Token.StartTag = token as! Token.StartTag - lastStartTag = startTag._tagName! - if (startTag._selfClosing) { - selfClosingFlagAcknowledged = false - } - } else if (token.type == Token.TokenType.EndTag) { - let endTag: Token.EndTag = token as! Token.EndTag - if (endTag._attributes.size() != 0) { - error("Attributes incorrectly present on end tag") - } - } - } - - func emit(_ str: String ) { - // buffer strings up until last string token found, to emit only one token for a run of character refs etc. - // does not set isEmitPending; read checks that - if (charsString == nil) { - charsString = str - } else { - if charsBuilder.isEmpty { // switching to string builder as more than one emit before read - charsBuilder.append(charsString!) - } - charsBuilder.append(str) - } - } - - func emit(_ chars: [UnicodeScalar]) { - emit(String(chars.map {Character($0)})) - } - - // func emit(_ codepoints: [Int]) { - // emit(String(codepoints, 0, codepoints.length)); - // } - - func emit(_ c: UnicodeScalar) { - emit(String(c)) - } - - func getState() -> TokeniserState { - return state - } - - func transition(_ state: TokeniserState) { - self.state = state - } - - func advanceTransition(_ state: TokeniserState) { - reader.advance() - self.state = state - } - - func acknowledgeSelfClosingFlag() { - selfClosingFlagAcknowledged = true - } - - func consumeCharacterReference(_ additionalAllowedCharacter: UnicodeScalar?, _ inAttribute: Bool)throws->[UnicodeScalar]? { - if (reader.isEmpty()) { - return nil - } - if (additionalAllowedCharacter != nil && additionalAllowedCharacter == reader.current()) { - return nil - } - if (reader.matchesAnySorted(Tokeniser.notCharRefCharsSorted)) { - return nil - } - - reader.markPos() - if (reader.matchConsume("#")) { // numbered - let isHexMode: Bool = reader.matchConsumeIgnoreCase("X") - let numRef: String = isHexMode ? reader.consumeHexSequence() : reader.consumeDigitSequence() - if (numRef.unicodeScalars.count == 0) { // didn't match anything - characterReferenceError("numeric reference with no numerals") - reader.rewindToMark() - return nil - } - if (!reader.matchConsume(";")) { - characterReferenceError("missing semicolon") // missing semi - } - var charval: Int = -1 - - let base: Int = isHexMode ? 16 : 10 - if let num = Int(numRef, radix: base) { - charval = num - } - - if (charval == -1 || (charval >= 0xD800 && charval <= 0xDFFF) || charval > 0x10FFFF) { - characterReferenceError("character outside of valid range") - return [Tokeniser.replacementChar] - } else { - // todo: implement number replacement table - // todo: check for extra illegal unicode points as parse errors - return [UnicodeScalar(charval)!] - } - } else { // named - // get as many letters as possible, and look for matching entities. - let nameRef: String = reader.consumeLetterThenDigitSequence() - let looksLegit: Bool = reader.matches(";") - // found if a base named entity without a ;, or an extended entity with the ;. - let found: Bool = (Entities.isBaseNamedEntity(nameRef) || (Entities.isNamedEntity(nameRef) && looksLegit)) - - if (!found) { - reader.rewindToMark() - if (looksLegit) { // named with semicolon - characterReferenceError("invalid named referenece '\(nameRef)'") - } - return nil - } - if (inAttribute && (reader.matchesLetter() || reader.matchesDigit() || reader.matchesAny("=", "-", "_"))) { - // don't want that to match - reader.rewindToMark() - return nil - } - if (!reader.matchConsume(";")) { - characterReferenceError("missing semicolon") // missing semi - } - if let points = Entities.codepointsForName(nameRef) { - if points.count > 2 { - try Validate.fail(msg: "Unexpected characters returned for \(nameRef) num: \(points.count)") - } - return points - } - try Validate.fail(msg: "Entity name not found: \(nameRef)") - return [] - } - } - - @discardableResult - func createTagPending(_ start: Bool)->Token.Tag { - tagPending = start ? startPending.reset() : endPending.reset() - return tagPending - } - - func emitTagPending()throws { - try tagPending.finaliseTag() - try emit(tagPending) - } - - func createCommentPending() { - commentPending.reset() - } - - func emitCommentPending()throws { - try emit(commentPending) - } - - func createDoctypePending() { - doctypePending.reset() - } - - func emitDoctypePending()throws { - try emit(doctypePending) - } - - func createTempBuffer() { - Token.reset(dataBuffer) - } - - func isAppropriateEndTagToken()throws->Bool { - if(lastStartTag != nil) { - let s = try tagPending.name() - return s.equalsIgnoreCase(string: lastStartTag!) - } - return false - } - - func appropriateEndTagName() -> String? { - if (lastStartTag == nil) { - return nil - } - return lastStartTag - } - - func error(_ state: TokeniserState) { - if (errors != nil && errors!.canAddError()) { - errors?.add(ParseError(reader.getPos(), "Unexpected character '\(String(reader.current()))' in input state [\(state.description)]")) - } - } - - func eofError(_ state: TokeniserState) { - if (errors != nil && errors!.canAddError()) { - errors?.add(ParseError(reader.getPos(), "Unexpectedly reached end of file (EOF) in input state [\(state.description)]")) - } - } - - private func characterReferenceError(_ message: String) { - if (errors != nil && errors!.canAddError()) { - errors?.add(ParseError(reader.getPos(), "Invalid character reference: \(message)")) - } - } - - private func error(_ errorMsg: String) { - if (errors != nil && errors!.canAddError()) { - errors?.add(ParseError(reader.getPos(), errorMsg)) - } - } - - func currentNodeInHtmlNS() -> Bool { - // todo: implement namespaces correctly - return true - // Element currentNode = currentNode() - // return currentNode != null && currentNode.namespace().equals("HTML") - } - - /** - * Utility method to consume reader and unescape entities found within. - * @param inAttribute - * @return unescaped string from reader - */ - func unescapeEntities(_ inAttribute: Bool)throws->String { - let builder: StringBuilder = StringBuilder() - while (!reader.isEmpty()) { - builder.append(reader.consumeTo(UnicodeScalar.Ampersand)) - if (reader.matches(UnicodeScalar.Ampersand)) { - reader.consume() - if let c = try consumeCharacterReference(nil, inAttribute) { - if (c.count==0) { - builder.append(UnicodeScalar.Ampersand) - } else { - builder.appendCodePoint(c[0]) - if (c.count == 2) { - builder.appendCodePoint(c[1]) - } - } - } else { - builder.append(UnicodeScalar.Ampersand) - } - } - } - return builder.toString() - } - -} diff --git a/Example/Pods/SwiftSoup/Sources/TokeniserState.swift b/Example/Pods/SwiftSoup/Sources/TokeniserState.swift deleted file mode 100755 index 707248a..0000000 --- a/Example/Pods/SwiftSoup/Sources/TokeniserState.swift +++ /dev/null @@ -1,1644 +0,0 @@ -// -// TokeniserState.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 12/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -protocol TokeniserStateProtocol { - func read(_ t: Tokeniser, _ r: CharacterReader)throws -} - -public class TokeniserStateVars { - public static let nullScalr: UnicodeScalar = "\u{0000}" - - static let attributeSingleValueCharsSorted = ["'", UnicodeScalar.Ampersand, nullScalr].sorted() - static let attributeDoubleValueCharsSorted = ["\"", UnicodeScalar.Ampersand, nullScalr].sorted() - static let attributeNameCharsSorted = [UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ", "/", "=", ">", nullScalr, "\"", "'", UnicodeScalar.LessThan].sorted() - static let attributeValueUnquoted = [UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ", UnicodeScalar.Ampersand, ">", nullScalr, "\"", "'", UnicodeScalar.LessThan, "=", "`"].sorted() - - static let replacementChar: UnicodeScalar = Tokeniser.replacementChar - static let replacementStr: String = String(Tokeniser.replacementChar) - static let eof: UnicodeScalar = CharacterReader.EOF -} - -enum TokeniserState: TokeniserStateProtocol { - case Data - case CharacterReferenceInData - case Rcdata - case CharacterReferenceInRcdata - case Rawtext - case ScriptData - case PLAINTEXT - case TagOpen - case EndTagOpen - case TagName - case RcdataLessthanSign - case RCDATAEndTagOpen - case RCDATAEndTagName - case RawtextLessthanSign - case RawtextEndTagOpen - case RawtextEndTagName - case ScriptDataLessthanSign - case ScriptDataEndTagOpen - case ScriptDataEndTagName - case ScriptDataEscapeStart - case ScriptDataEscapeStartDash - case ScriptDataEscaped - case ScriptDataEscapedDash - case ScriptDataEscapedDashDash - case ScriptDataEscapedLessthanSign - case ScriptDataEscapedEndTagOpen - case ScriptDataEscapedEndTagName - case ScriptDataDoubleEscapeStart - case ScriptDataDoubleEscaped - case ScriptDataDoubleEscapedDash - case ScriptDataDoubleEscapedDashDash - case ScriptDataDoubleEscapedLessthanSign - case ScriptDataDoubleEscapeEnd - case BeforeAttributeName - case AttributeName - case AfterAttributeName - case BeforeAttributeValue - case AttributeValue_doubleQuoted - case AttributeValue_singleQuoted - case AttributeValue_unquoted - case AfterAttributeValue_quoted - case SelfClosingStartTag - case BogusComment - case MarkupDeclarationOpen - case CommentStart - case CommentStartDash - case Comment - case CommentEndDash - case CommentEnd - case CommentEndBang - case Doctype - case BeforeDoctypeName - case DoctypeName - case AfterDoctypeName - case AfterDoctypePublicKeyword - case BeforeDoctypePublicIdentifier - case DoctypePublicIdentifier_doubleQuoted - case DoctypePublicIdentifier_singleQuoted - case AfterDoctypePublicIdentifier - case BetweenDoctypePublicAndSystemIdentifiers - case AfterDoctypeSystemKeyword - case BeforeDoctypeSystemIdentifier - case DoctypeSystemIdentifier_doubleQuoted - case DoctypeSystemIdentifier_singleQuoted - case AfterDoctypeSystemIdentifier - case BogusDoctype - case CdataSection - - internal func read(_ t: Tokeniser, _ r: CharacterReader)throws { - switch self { - case .Data: - switch (r.current()) { - case UnicodeScalar.Ampersand: - t.advanceTransition(.CharacterReferenceInData) - break - case UnicodeScalar.LessThan: - t.advanceTransition(.TagOpen) - break - case TokeniserStateVars.nullScalr: - t.error(self) // NOT replacement character (oddly?) - t.emit(r.consume()) - break - case TokeniserStateVars.eof: - try t.emit(Token.EOF()) - break - default: - let data: String = r.consumeData() - t.emit(data) - break - } - break - case .CharacterReferenceInData: - try TokeniserState.readCharRef(t, .Data) - break - case .Rcdata: - switch (r.current()) { - case UnicodeScalar.Ampersand: - t.advanceTransition(.CharacterReferenceInRcdata) - break - case UnicodeScalar.LessThan: - t.advanceTransition(.RcdataLessthanSign) - break - case TokeniserStateVars.nullScalr: - t.error(self) - r.advance() - t.emit(TokeniserStateVars.replacementChar) - break - case TokeniserStateVars.eof: - try t.emit(Token.EOF()) - break - default: - let data = r.consumeToAny(UnicodeScalar.Ampersand, UnicodeScalar.LessThan, TokeniserStateVars.nullScalr) - t.emit(data) - break - } - break - case .CharacterReferenceInRcdata: - try TokeniserState.readCharRef(t, .Rcdata) - break - case .Rawtext: - try TokeniserState.readData(t, r, self, .RawtextLessthanSign) - break - case .ScriptData: - try TokeniserState.readData(t, r, self, .ScriptDataLessthanSign) - break - case .PLAINTEXT: - switch (r.current()) { - case TokeniserStateVars.nullScalr: - t.error(self) - r.advance() - t.emit(TokeniserStateVars.replacementChar) - break - case TokeniserStateVars.eof: - try t.emit(Token.EOF()) - break - default: - let data = r.consumeTo(TokeniserStateVars.nullScalr) - t.emit(data) - break - } - break - case .TagOpen: - // from < in data - switch (r.current()) { - case "!": - t.advanceTransition(.MarkupDeclarationOpen) - break - case "/": - t.advanceTransition(.EndTagOpen) - break - case "?": - t.advanceTransition(.BogusComment) - break - default: - if (r.matchesLetter()) { - t.createTagPending(true) - t.transition(.TagName) - } else { - t.error(self) - t.emit(UnicodeScalar.LessThan) // char that got us here - t.transition(.Data) - } - break - } - break - case .EndTagOpen: - if (r.isEmpty()) { - t.eofError(self) - t.emit("")) { - t.error(self) - t.advanceTransition(.Data) - } else { - t.error(self) - t.advanceTransition(.BogusComment) - } - break - case .TagName: - // from < or ": - try t.emitTagPending() - t.transition(.Data) - break - case TokeniserStateVars.nullScalr: // replacement - t.tagPending.appendTagName(TokeniserStateVars.replacementStr) - break - case TokeniserStateVars.eof: // should emit pending tag? - t.eofError(self) - t.transition(.Data) - // no default, as covered with above consumeToAny - default: - break - } - case .RcdataLessthanSign: - if (r.matches("/")) { - t.createTempBuffer() - t.advanceTransition(.RCDATAEndTagOpen) - } else if (r.matchesLetter() && t.appropriateEndTagName() != nil && !r.containsIgnoreCase("), so rather than - // consuming to EOF break out here - t.tagPending = t.createTagPending(false).name(t.appropriateEndTagName()!) - try t.emitTagPending() - r.unconsume() // undo UnicodeScalar.LessThan - t.transition(.Data) - } else { - t.emit(UnicodeScalar.LessThan) - t.transition(.Rcdata) - } - break - case .RCDATAEndTagOpen: - if (r.matchesLetter()) { - t.createTagPending(false) - t.tagPending.appendTagName(r.current()) - t.dataBuffer.append(r.current()) - t.advanceTransition(.RCDATAEndTagName) - } else { - t.emit("": - if (try t.isAppropriateEndTagToken()) { - try t.emitTagPending() - t.transition(.Data) - } else {anythingElse(t, r)} - break - default: - anythingElse(t, r) - break - } - break - case .RawtextLessthanSign: - if (r.matches("/")) { - t.createTempBuffer() - t.advanceTransition(.RawtextEndTagOpen) - } else { - t.emit(UnicodeScalar.LessThan) - t.transition(.Rawtext) - } - break - case .RawtextEndTagOpen: - TokeniserState.readEndTag(t, r, .RawtextEndTagName, .Rawtext) - break - case .RawtextEndTagName: - try TokeniserState.handleDataEndTag(t, r, .Rawtext) - break - case .ScriptDataLessthanSign: - switch (r.consume()) { - case "/": - t.createTempBuffer() - t.transition(.ScriptDataEndTagOpen) - break - case "!": - t.emit("": - t.emit(c) - t.transition(.ScriptData) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.emit(TokeniserStateVars.replacementChar) - t.transition(.ScriptDataEscaped) - break - default: - t.emit(c) - t.transition(.ScriptDataEscaped) - } - break - case .ScriptDataEscapedLessthanSign: - if (r.matchesLetter()) { - t.createTempBuffer() - t.dataBuffer.append(r.current()) - t.emit("<" + String(r.current())) - t.advanceTransition(.ScriptDataDoubleEscapeStart) - } else if (r.matches("/")) { - t.createTempBuffer() - t.advanceTransition(.ScriptDataEscapedEndTagOpen) - } else { - t.emit(UnicodeScalar.LessThan) - t.transition(.ScriptDataEscaped) - } - break - case .ScriptDataEscapedEndTagOpen: - if (r.matchesLetter()) { - t.createTagPending(false) - t.tagPending.appendTagName(r.current()) - t.dataBuffer.append(r.current()) - t.advanceTransition(.ScriptDataEscapedEndTagName) - } else { - t.emit("": - t.emit(c) - t.transition(.ScriptData) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.emit(TokeniserStateVars.replacementChar) - t.transition(.ScriptDataDoubleEscaped) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.transition(.Data) - break - default: - t.emit(c) - t.transition(.ScriptDataDoubleEscaped) - } - break - case .ScriptDataDoubleEscapedLessthanSign: - if (r.matches("/")) { - t.emit("/") - t.createTempBuffer() - t.advanceTransition(.ScriptDataDoubleEscapeEnd) - } else { - t.transition(.ScriptDataDoubleEscaped) - } - break - case .ScriptDataDoubleEscapeEnd: - TokeniserState.handleDataDoubleEscapeTag(t, r, .ScriptDataEscaped, .ScriptDataDoubleEscaped) - break - case .BeforeAttributeName: - // from tagname ": - try t.emitTagPending() - t.transition(.Data) - break - case TokeniserStateVars.nullScalr: - t.error(self) - try t.tagPending.newAttribute() - r.unconsume() - t.transition(.AttributeName) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.transition(.Data) - break - case "\"", "'", UnicodeScalar.LessThan, "=": - t.error(self) - try t.tagPending.newAttribute() - t.tagPending.appendAttributeName(c) - t.transition(.AttributeName) - break - default: // A-Z, anything else - try t.tagPending.newAttribute() - r.unconsume() - t.transition(.AttributeName) - } - break - case .AttributeName: - let name = r.consumeToAnySorted(TokeniserStateVars.attributeNameCharsSorted) - t.tagPending.appendAttributeName(name) - - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT: - t.transition(.AfterAttributeName) - break - case "\n": - t.transition(.AfterAttributeName) - break - case "\r": - t.transition(.AfterAttributeName) - break - case UnicodeScalar.BackslashF: - t.transition(.AfterAttributeName) - break - case " ": - t.transition(.AfterAttributeName) - break - case "/": - t.transition(.SelfClosingStartTag) - break - case "=": - t.transition(.BeforeAttributeValue) - break - case ">": - try t.emitTagPending() - t.transition(.Data) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.tagPending.appendAttributeName(TokeniserStateVars.replacementChar) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.transition(.Data) - break - case "\"": - t.error(self) - t.tagPending.appendAttributeName(c) - case "'": - t.error(self) - t.tagPending.appendAttributeName(c) - case UnicodeScalar.LessThan: - t.error(self) - t.tagPending.appendAttributeName(c) - // no default, as covered in consumeToAny - default: - break - } - break - case .AfterAttributeName: - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - // ignore - break - case "/": - t.transition(.SelfClosingStartTag) - break - case "=": - t.transition(.BeforeAttributeValue) - break - case ">": - try t.emitTagPending() - t.transition(.Data) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.tagPending.appendAttributeName(TokeniserStateVars.replacementChar) - t.transition(.AttributeName) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.transition(.Data) - break - case "\"", "'", UnicodeScalar.LessThan: - t.error(self) - try t.tagPending.newAttribute() - t.tagPending.appendAttributeName(c) - t.transition(.AttributeName) - break - default: // A-Z, anything else - try t.tagPending.newAttribute() - r.unconsume() - t.transition(.AttributeName) - } - break - case .BeforeAttributeValue: - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - // ignore - break - case "\"": - t.transition(.AttributeValue_doubleQuoted) - break - case UnicodeScalar.Ampersand: - r.unconsume() - t.transition(.AttributeValue_unquoted) - break - case "'": - t.transition(.AttributeValue_singleQuoted) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.tagPending.appendAttributeValue(TokeniserStateVars.replacementChar) - t.transition(.AttributeValue_unquoted) - break - case TokeniserStateVars.eof: - t.eofError(self) - try t.emitTagPending() - t.transition(.Data) - break - case ">": - t.error(self) - try t.emitTagPending() - t.transition(.Data) - break - case UnicodeScalar.LessThan, "=", "`": - t.error(self) - t.tagPending.appendAttributeValue(c) - t.transition(.AttributeValue_unquoted) - break - default: - r.unconsume() - t.transition(.AttributeValue_unquoted) - } - break - case .AttributeValue_doubleQuoted: - let value = r.consumeToAny(TokeniserStateVars.attributeDoubleValueCharsSorted) - if (value.count > 0) { - t.tagPending.appendAttributeValue(value) - } else { - t.tagPending.setEmptyAttributeValue() - } - - let c = r.consume() - switch (c) { - case "\"": - t.transition(.AfterAttributeValue_quoted) - break - case UnicodeScalar.Ampersand: - - if let ref = try t.consumeCharacterReference("\"", true) { - t.tagPending.appendAttributeValue(ref) - } else { - t.tagPending.appendAttributeValue(UnicodeScalar.Ampersand) - } - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.tagPending.appendAttributeValue(TokeniserStateVars.replacementChar) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.transition(.Data) - break - // no default, handled in consume to any above - default: - break - } - break - case .AttributeValue_singleQuoted: - let value = r.consumeToAny(TokeniserStateVars.attributeSingleValueCharsSorted) - if (value.count > 0) { - t.tagPending.appendAttributeValue(value) - } else { - t.tagPending.setEmptyAttributeValue() - } - - let c = r.consume() - switch (c) { - case "'": - t.transition(.AfterAttributeValue_quoted) - break - case UnicodeScalar.Ampersand: - - if let ref = try t.consumeCharacterReference("'", true) { - t.tagPending.appendAttributeValue(ref) - } else { - t.tagPending.appendAttributeValue(UnicodeScalar.Ampersand) - } - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.tagPending.appendAttributeValue(TokeniserStateVars.replacementChar) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.transition(.Data) - break - // no default, handled in consume to any above - default: - break - } - break - case .AttributeValue_unquoted: - let value = r.consumeToAnySorted(TokeniserStateVars.attributeValueUnquoted) - if (value.count > 0) { - t.tagPending.appendAttributeValue(value) - } - - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - t.transition(.BeforeAttributeName) - break - case UnicodeScalar.Ampersand: - if let ref = try t.consumeCharacterReference(">", true) { - t.tagPending.appendAttributeValue(ref) - } else { - t.tagPending.appendAttributeValue(UnicodeScalar.Ampersand) - } - break - case ">": - try t.emitTagPending() - t.transition(.Data) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.tagPending.appendAttributeValue(TokeniserStateVars.replacementChar) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.transition(.Data) - break - case "\"", "'", UnicodeScalar.LessThan, "=", "`": - t.error(self) - t.tagPending.appendAttributeValue(c) - break - // no default, handled in consume to any above - default: - break - } - break - case .AfterAttributeValue_quoted: - // CharacterReferenceInAttributeValue state handled inline - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - t.transition(.BeforeAttributeName) - break - case "/": - t.transition(.SelfClosingStartTag) - break - case ">": - try t.emitTagPending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.transition(.Data) - break - default: - t.error(self) - r.unconsume() - t.transition(.BeforeAttributeName) - } - break - case .SelfClosingStartTag: - let c = r.consume() - switch (c) { - case ">": - t.tagPending._selfClosing = true - try t.emitTagPending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.transition(.Data) - break - default: - t.error(self) - r.unconsume() - t.transition(.BeforeAttributeName) - } - break - case .BogusComment: - // todo: handle bogus comment starting from eof. when does that trigger? - // rewind to capture character that lead us here - r.unconsume() - let comment: Token.Comment = Token.Comment() - comment.bogus = true - comment.data.append(r.consumeTo(">")) - // todo: replace nullChar with replaceChar - try t.emit(comment) - t.advanceTransition(.Data) - break - case .MarkupDeclarationOpen: - if (r.matchConsume("--")) { - t.createCommentPending() - t.transition(.CommentStart) - } else if (r.matchConsumeIgnoreCase("DOCTYPE")) { - t.transition(.Doctype) - } else if (r.matchConsume("[CDATA[")) { - // todo: should actually check current namepspace, and only non-html allows cdata. until namespace - // is implemented properly, keep handling as cdata - //} else if (!t.currentNodeInHtmlNS() && r.matchConsume("[CDATA[")) { - t.transition(.CdataSection) - } else { - t.error(self) - t.advanceTransition(.BogusComment) // advance so self character gets in bogus comment data's rewind - } - break - case .CommentStart: - let c = r.consume() - switch (c) { - case "-": - t.transition(.CommentStartDash) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.commentPending.data.append(TokeniserStateVars.replacementChar) - t.transition(.Comment) - break - case ">": - t.error(self) - try t.emitCommentPending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - t.eofError(self) - try t.emitCommentPending() - t.transition(.Data) - break - default: - t.commentPending.data.append(c) - t.transition(.Comment) - } - break - case .CommentStartDash: - let c = r.consume() - switch (c) { - case "-": - t.transition(.CommentStartDash) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.commentPending.data.append(TokeniserStateVars.replacementChar) - t.transition(.Comment) - break - case ">": - t.error(self) - try t.emitCommentPending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - t.eofError(self) - try t.emitCommentPending() - t.transition(.Data) - break - default: - t.commentPending.data.append(c) - t.transition(.Comment) - } - break - case .Comment: - let c = r.current() - switch (c) { - case "-": - t.advanceTransition(.CommentEndDash) - break - case TokeniserStateVars.nullScalr: - t.error(self) - r.advance() - t.commentPending.data.append(TokeniserStateVars.replacementChar) - break - case TokeniserStateVars.eof: - t.eofError(self) - try t.emitCommentPending() - t.transition(.Data) - break - default: - t.commentPending.data.append(r.consumeToAny("-", TokeniserStateVars.nullScalr)) - } - break - case .CommentEndDash: - let c = r.consume() - switch (c) { - case "-": - t.transition(.CommentEnd) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.commentPending.data.append("-").append(TokeniserStateVars.replacementChar) - t.transition(.Comment) - break - case TokeniserStateVars.eof: - t.eofError(self) - try t.emitCommentPending() - t.transition(.Data) - break - default: - t.commentPending.data.append("-").append(c) - t.transition(.Comment) - } - break - case .CommentEnd: - let c = r.consume() - switch (c) { - case ">": - try t.emitCommentPending() - t.transition(.Data) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.commentPending.data.append("--").append(TokeniserStateVars.replacementChar) - t.transition(.Comment) - break - case "!": - t.error(self) - t.transition(.CommentEndBang) - break - case "-": - t.error(self) - t.commentPending.data.append("-") - break - case TokeniserStateVars.eof: - t.eofError(self) - try t.emitCommentPending() - t.transition(.Data) - break - default: - t.error(self) - t.commentPending.data.append("--").append(c) - t.transition(.Comment) - } - break - case .CommentEndBang: - let c = r.consume() - switch (c) { - case "-": - t.commentPending.data.append("--!") - t.transition(.CommentEndDash) - break - case ">": - try t.emitCommentPending() - t.transition(.Data) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.commentPending.data.append("--!").append(TokeniserStateVars.replacementChar) - t.transition(.Comment) - break - case TokeniserStateVars.eof: - t.eofError(self) - try t.emitCommentPending() - t.transition(.Data) - break - default: - t.commentPending.data.append("--!").append(c) - t.transition(.Comment) - } - break - case .Doctype: - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - t.transition(.BeforeDoctypeName) - break - case TokeniserStateVars.eof: - t.eofError(self) - // note: fall through to > case - case ">": // catch invalid - t.error(self) - t.createDoctypePending() - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.error(self) - t.transition(.BeforeDoctypeName) - } - break - case .BeforeDoctypeName: - if (r.matchesLetter()) { - t.createDoctypePending() - t.transition(.DoctypeName) - return - } - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - break // ignore whitespace - case TokeniserStateVars.nullScalr: - t.error(self) - t.createDoctypePending() - t.doctypePending.name.append(TokeniserStateVars.replacementChar) - t.transition(.DoctypeName) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.createDoctypePending() - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.createDoctypePending() - t.doctypePending.name.append(c) - t.transition(.DoctypeName) - } - break - case .DoctypeName: - if (r.matchesLetter()) { - let name = r.consumeLetterSequence() - t.doctypePending.name.append(name) - return - } - let c = r.consume() - switch (c) { - case ">": - try t.emitDoctypePending() - t.transition(.Data) - break - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - t.transition(.AfterDoctypeName) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.doctypePending.name.append(TokeniserStateVars.replacementChar) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.doctypePending.name.append(c) - } - break - case .AfterDoctypeName: - if (r.isEmpty()) { - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - return - } - if (r.matchesAny(UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ")) { - r.advance() // ignore whitespace - } else if (r.matches(">")) { - try t.emitDoctypePending() - t.advanceTransition(.Data) - } else if (r.matchConsumeIgnoreCase(DocumentType.PUBLIC_KEY)) { - t.doctypePending.pubSysKey = DocumentType.PUBLIC_KEY - t.transition(.AfterDoctypePublicKeyword) - } else if (r.matchConsumeIgnoreCase(DocumentType.SYSTEM_KEY)) { - t.doctypePending.pubSysKey = DocumentType.SYSTEM_KEY - t.transition(.AfterDoctypeSystemKeyword) - } else { - t.error(self) - t.doctypePending.forceQuirks = true - t.advanceTransition(.BogusDoctype) - } - break - case .AfterDoctypePublicKeyword: - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - t.transition(.BeforeDoctypePublicIdentifier) - break - case "\"": - t.error(self) - // set public id to empty string - t.transition(.DoctypePublicIdentifier_doubleQuoted) - break - case "'": - t.error(self) - // set public id to empty string - t.transition(.DoctypePublicIdentifier_singleQuoted) - break - case ">": - t.error(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.error(self) - t.doctypePending.forceQuirks = true - t.transition(.BogusDoctype) - } - break - case .BeforeDoctypePublicIdentifier: - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - break - case "\"": - // set public id to empty string - t.transition(.DoctypePublicIdentifier_doubleQuoted) - break - case "'": - // set public id to empty string - t.transition(.DoctypePublicIdentifier_singleQuoted) - break - case ">": - t.error(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.error(self) - t.doctypePending.forceQuirks = true - t.transition(.BogusDoctype) - } - break - case .DoctypePublicIdentifier_doubleQuoted: - let c = r.consume() - switch (c) { - case "\"": - t.transition(.AfterDoctypePublicIdentifier) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.doctypePending.publicIdentifier.append(TokeniserStateVars.replacementChar) - break - case ">": - t.error(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.doctypePending.publicIdentifier.append(c) - } - break - case .DoctypePublicIdentifier_singleQuoted: - let c = r.consume() - switch (c) { - case "'": - t.transition(.AfterDoctypePublicIdentifier) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.doctypePending.publicIdentifier.append(TokeniserStateVars.replacementChar) - break - case ">": - t.error(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.doctypePending.publicIdentifier.append(c) - } - break - case .AfterDoctypePublicIdentifier: - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - t.transition(.BetweenDoctypePublicAndSystemIdentifiers) - break - case ">": - try t.emitDoctypePending() - t.transition(.Data) - break - case "\"": - t.error(self) - // system id empty - t.transition(.DoctypeSystemIdentifier_doubleQuoted) - break - case "'": - t.error(self) - // system id empty - t.transition(.DoctypeSystemIdentifier_singleQuoted) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.error(self) - t.doctypePending.forceQuirks = true - t.transition(.BogusDoctype) - } - break - case .BetweenDoctypePublicAndSystemIdentifiers: - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - break - case ">": - try t.emitDoctypePending() - t.transition(.Data) - break - case "\"": - t.error(self) - // system id empty - t.transition(.DoctypeSystemIdentifier_doubleQuoted) - break - case "'": - t.error(self) - // system id empty - t.transition(.DoctypeSystemIdentifier_singleQuoted) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.error(self) - t.doctypePending.forceQuirks = true - t.transition(.BogusDoctype) - } - break - case .AfterDoctypeSystemKeyword: - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - t.transition(.BeforeDoctypeSystemIdentifier) - break - case ">": - t.error(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - case "\"": - t.error(self) - // system id empty - t.transition(.DoctypeSystemIdentifier_doubleQuoted) - break - case "'": - t.error(self) - // system id empty - t.transition(.DoctypeSystemIdentifier_singleQuoted) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.error(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - } - break - case .BeforeDoctypeSystemIdentifier: - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - break - case "\"": - // set system id to empty string - t.transition(.DoctypeSystemIdentifier_doubleQuoted) - break - case "'": - // set public id to empty string - t.transition(.DoctypeSystemIdentifier_singleQuoted) - break - case ">": - t.error(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.error(self) - t.doctypePending.forceQuirks = true - t.transition(.BogusDoctype) - } - break - case .DoctypeSystemIdentifier_doubleQuoted: - let c = r.consume() - switch (c) { - case "\"": - t.transition(.AfterDoctypeSystemIdentifier) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.doctypePending.systemIdentifier.append(TokeniserStateVars.replacementChar) - break - case ">": - t.error(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.doctypePending.systemIdentifier.append(c) - } - break - case .DoctypeSystemIdentifier_singleQuoted: - let c = r.consume() - switch (c) { - case "'": - t.transition(.AfterDoctypeSystemIdentifier) - break - case TokeniserStateVars.nullScalr: - t.error(self) - t.doctypePending.systemIdentifier.append(TokeniserStateVars.replacementChar) - break - case ">": - t.error(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.doctypePending.systemIdentifier.append(c) - } - break - case .AfterDoctypeSystemIdentifier: - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - break - case ">": - try t.emitDoctypePending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - t.eofError(self) - t.doctypePending.forceQuirks = true - try t.emitDoctypePending() - t.transition(.Data) - break - default: - t.error(self) - t.transition(.BogusDoctype) - // NOT force quirks - } - break - case .BogusDoctype: - let c = r.consume() - switch (c) { - case ">": - try t.emitDoctypePending() - t.transition(.Data) - break - case TokeniserStateVars.eof: - try t.emitDoctypePending() - t.transition(.Data) - break - default: - // ignore char - break - } - break - case .CdataSection: - let data = r.consumeTo("]]>") - t.emit(data) - r.matchConsume("]]>") - t.transition(.Data) - break - } - } - - var description: String {return String(describing: type(of: self))} - /** - * Handles RawtextEndTagName, ScriptDataEndTagName, and ScriptDataEscapedEndTagName. Same body impl, just - * different else exit transitions. - */ - private static func handleDataEndTag(_ t: Tokeniser, _ r: CharacterReader, _ elseTransition: TokeniserState)throws { - if (r.matchesLetter()) { - let name = r.consumeLetterSequence() - t.tagPending.appendTagName(name) - t.dataBuffer.append(name) - return - } - - var needsExitTransition = false - if (try t.isAppropriateEndTagToken() && !r.isEmpty()) { - let c = r.consume() - switch (c) { - case UnicodeScalar.BackslashT, "\n", "\r", UnicodeScalar.BackslashF, " ": - t.transition(BeforeAttributeName) - break - case "/": - t.transition(SelfClosingStartTag) - break - case ">": - try t.emitTagPending() - t.transition(Data) - break - default: - t.dataBuffer.append(c) - needsExitTransition = true - } - } else { - needsExitTransition = true - } - - if (needsExitTransition) { - t.emit("": - if (t.dataBuffer.toString() == "script") { - t.transition(primary) - } else { - t.transition(fallback) - } - t.emit(c) - break - default: - r.unconsume() - t.transition(fallback) - } - } - -} diff --git a/Example/Pods/SwiftSoup/Sources/TreeBuilder.swift b/Example/Pods/SwiftSoup/Sources/TreeBuilder.swift deleted file mode 100755 index a8b9ac0..0000000 --- a/Example/Pods/SwiftSoup/Sources/TreeBuilder.swift +++ /dev/null @@ -1,98 +0,0 @@ -// -// TreeBuilder.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 24/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -public class TreeBuilder { - public var reader: CharacterReader - var tokeniser: Tokeniser - public var doc: Document // current doc we are building into - public var stack: Array // the stack of open elements - public var baseUri: String // current base uri, for creating new elements - public var currentToken: Token? // currentToken is used only for error tracking. - public var errors: ParseErrorList // null when not tracking errors - public var settings: ParseSettings - - private let start: Token.StartTag = Token.StartTag() // start tag to process - private let end: Token.EndTag = Token.EndTag() - - public func defaultSettings() -> ParseSettings {preconditionFailure("This method must be overridden")} - - public init() { - doc = Document("") - reader = CharacterReader("") - tokeniser = Tokeniser(reader, nil) - stack = Array() - baseUri = "" - errors = ParseErrorList(0, 0) - settings = ParseSettings(false, false) - } - - public func initialiseParse(_ input: String, _ baseUri: String, _ errors: ParseErrorList, _ settings: ParseSettings) { - doc = Document(baseUri) - self.settings = settings - reader = CharacterReader(input) - self.errors = errors - tokeniser = Tokeniser(reader, errors) - stack = Array() - self.baseUri = baseUri - } - - func parse(_ input: String, _ baseUri: String, _ errors: ParseErrorList, _ settings: ParseSettings)throws->Document { - initialiseParse(input, baseUri, errors, settings) - try runParser() - return doc - } - - public func runParser()throws { - while (true) { - let token: Token = try tokeniser.read() - try process(token) - token.reset() - - if (token.type == Token.TokenType.EOF) { - break - } - } - } - - @discardableResult - public func process(_ token: Token)throws->Bool {preconditionFailure("This method must be overridden")} - - @discardableResult - public func processStartTag(_ name: String)throws->Bool { - if (currentToken === start) { // don't recycle an in-use token - return try process(Token.StartTag().name(name)) - } - return try process(start.reset().name(name)) - } - - @discardableResult - public func processStartTag(_ name: String, _ attrs: Attributes)throws->Bool { - if (currentToken === start) { // don't recycle an in-use token - return try process(Token.StartTag().nameAttr(name, attrs)) - } - start.reset() - start.nameAttr(name, attrs) - return try process(start) - } - - @discardableResult - public func processEndTag(_ name: String)throws->Bool { - if (currentToken === end) { // don't recycle an in-use token - return try process(Token.EndTag().name(name)) - } - - return try process(end.reset().name(name)) - } - - public func currentElement() -> Element? { - let size: Int = stack.count - return size > 0 ? stack[size-1] : nil - } -} diff --git a/Example/Pods/SwiftSoup/Sources/UnicodeScalar.swift b/Example/Pods/SwiftSoup/Sources/UnicodeScalar.swift deleted file mode 100755 index 0a52709..0000000 --- a/Example/Pods/SwiftSoup/Sources/UnicodeScalar.swift +++ /dev/null @@ -1,67 +0,0 @@ -// -// UnicodeScalar.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 14/11/16. -// Copyright © 2016 Nabil Chatbi. All rights reserved. -// - -import Foundation - -private let uppercaseSet = CharacterSet.uppercaseLetters -private let lowercaseSet = CharacterSet.lowercaseLetters -private let alphaSet = CharacterSet.letters -private let alphaNumericSet = CharacterSet.alphanumerics -private let symbolSet = CharacterSet.symbols -private let digitSet = CharacterSet.decimalDigits - -extension UnicodeScalar { - public static let Ampersand: UnicodeScalar = "&" - public static let LessThan: UnicodeScalar = "<" - public static let GreaterThan: UnicodeScalar = ">" - - public static let Space: UnicodeScalar = " " - public static let BackslashF: UnicodeScalar = UnicodeScalar(12) - public static let BackslashT: UnicodeScalar = "\t" - public static let BackslashN: UnicodeScalar = "\n" - public static let BackslashR: UnicodeScalar = "\r" - public static let Slash: UnicodeScalar = "/" - - public static let FormFeed: UnicodeScalar = "\u{000B}"// Form Feed - public static let VerticalTab: UnicodeScalar = "\u{000C}"// vertical tab - - func isMemberOfCharacterSet(_ set: CharacterSet) -> Bool { - return set.contains(self) - } - - /// True for any space character, and the control characters \t, \n, \r, \f, \v. - var isWhitespace: Bool { - - switch self { - - case UnicodeScalar.Space, UnicodeScalar.BackslashT, UnicodeScalar.BackslashN, UnicodeScalar.BackslashR, UnicodeScalar.BackslashF: return true - - case UnicodeScalar.FormFeed, UnicodeScalar.VerticalTab: return true // Form Feed, vertical tab - - default: return false - - } - - } - - /// `true` if `self` normalized contains a single code unit that is in the categories of Uppercase and Titlecase Letters. - var isUppercase: Bool { - return isMemberOfCharacterSet(uppercaseSet) - } - - /// `true` if `self` normalized contains a single code unit that is in the category of Lowercase Letters. - var isLowercase: Bool { - return isMemberOfCharacterSet(lowercaseSet) - - } - - var uppercase: UnicodeScalar { - let str = String(self).uppercased() - return str.unicodeScalar(0) - } -} diff --git a/Example/Pods/SwiftSoup/Sources/Validate.swift b/Example/Pods/SwiftSoup/Sources/Validate.swift deleted file mode 100755 index 2e6e864..0000000 --- a/Example/Pods/SwiftSoup/Sources/Validate.swift +++ /dev/null @@ -1,133 +0,0 @@ -// -// Validate.swift -// SwifSoup -// -// Created by Nabil Chatbi on 02/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -struct Validate { - - /** - * Validates that the object is not null - * @param obj object to test - */ - public static func notNull(obj: Any?) throws { - if (obj == nil) { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: "Object must not be null") - } - } - - /** - * Validates that the object is not null - * @param obj object to test - * @param msg message to output if validation fails - */ - public static func notNull(obj: AnyObject?, msg: String) throws { - if (obj == nil) { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: msg) - } - } - - /** - * Validates that the value is true - * @param val object to test - */ - public static func isTrue(val: Bool) throws { - if (!val) { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: "Must be true") - } - } - - /** - * Validates that the value is true - * @param val object to test - * @param msg message to output if validation fails - */ - public static func isTrue(val: Bool, msg: String) throws { - if (!val) { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: msg) - } - } - - /** - * Validates that the value is false - * @param val object to test - */ - public static func isFalse(val: Bool) throws { - if (val) { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: "Must be false") - } - } - - /** - * Validates that the value is false - * @param val object to test - * @param msg message to output if validation fails - */ - public static func isFalse(val: Bool, msg: String) throws { - if (val) { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: msg) - } - } - - /** - * Validates that the array contains no null elements - * @param objects the array to test - */ - public static func noNullElements(objects: [AnyObject?]) throws { - try noNullElements(objects: objects, msg: "Array must not contain any null objects") - } - - /** - * Validates that the array contains no null elements - * @param objects the array to test - * @param msg message to output if validation fails - */ - public static func noNullElements(objects: [AnyObject?], msg: String) throws { - for obj in objects { - if (obj == nil) { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: msg) - } - } - } - - /** - * Validates that the string is not empty - * @param string the string to test - */ - public static func notEmpty(string: String?) throws { - if (string == nil || string?.count == 0) { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: "String must not be empty") - } - - } - - /** - * Validates that the string is not empty - * @param string the string to test - * @param msg message to output if validation fails - */ - public static func notEmpty(string: String?, msg: String ) throws { - if (string == nil || string?.count == 0) { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: msg) - } - } - - /** - Cause a failure. - @param msg message to output. - */ - public static func fail(msg: String) throws { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: msg) - } - - /** - Helper - */ - public static func exception(msg: String) throws { - throw Exception.Error(type: ExceptionType.IllegalArgumentException, Message: msg) - } -} diff --git a/Example/Pods/SwiftSoup/Sources/Whitelist.swift b/Example/Pods/SwiftSoup/Sources/Whitelist.swift deleted file mode 100755 index c395170..0000000 --- a/Example/Pods/SwiftSoup/Sources/Whitelist.swift +++ /dev/null @@ -1,650 +0,0 @@ -// -// Whitelist.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 14/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -/* - Thank you to Ryan Grove (wonko.com) for the Ruby HTML cleaner http://github.com/rgrove/sanitize/, which inspired - this whitelist configuration, and the initial defaults. - */ - -/** - Whitelists define what HTML (elements and attributes) to allow through the cleaner. Everything else is removed. -

    - Start with one of the defaults: -

    -
      -
    • {@link #none} -
    • {@link #simpleText} -
    • {@link #basic} -
    • {@link #basicWithImages} -
    • {@link #relaxed} -
    -

    - If you need to allow more through (please be careful!), tweak a base whitelist with: -

    -
      -
    • {@link #addTags} -
    • {@link #addAttributes} -
    • {@link #addEnforcedAttribute} -
    • {@link #addProtocols} -
    -

    - You can remove any setting from an existing whitelist with: -

    -
      -
    • {@link #removeTags} -
    • {@link #removeAttributes} -
    • {@link #removeEnforcedAttribute} -
    • {@link #removeProtocols} -
    - -

    - The cleaner and these whitelists assume that you want to clean a body fragment of HTML (to add user - supplied HTML into a templated page), and not to clean a full HTML document. If the latter is the case, either wrap the - document HTML around the cleaned body HTML, or create a whitelist that allows html and head - elements as appropriate. -

    -

    - If you are going to extend a whitelist, please be very careful. Make sure you understand what attributes may lead to - XSS attack vectors. URL attributes are particularly vulnerable and require careful validation. See - http://ha.ckers.org/xss.html for some XSS attack examples. -

    - */ - -import Foundation - -public class Whitelist { - private var tagNames: Set // tags allowed, lower case. e.g. [p, br, span] - private var attributes: Dictionary> // tag -> attribute[]. allowed attributes [href] for a tag. - private var enforcedAttributes: Dictionary> // always set these attribute values - private var protocols: Dictionary>> // allowed URL protocols for attributes - private var preserveRelativeLinks: Bool // option to preserve relative links - - /** - This whitelist allows only text nodes: all HTML will be stripped. - - @return whitelist - */ - public static func none() -> Whitelist { - return Whitelist() - } - - /** - This whitelist allows only simple text formatting: b, em, i, strong, u. All other HTML (tags and - attributes) will be removed. - - @return whitelist - */ - public static func simpleText()throws ->Whitelist { - return try Whitelist().addTags("b", "em", "i", "strong", "u") - } - - /** -

    - This whitelist allows a fuller range of text nodes: a, b, blockquote, br, cite, code, dd, dl, dt, em, i, li, - ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul, and appropriate attributes. -

    -

    - Links (a elements) can point to http, https, ftp, mailto, and have an enforced - rel=nofollow attribute. -

    -

    - Does not allow images. -

    - - @return whitelist - */ - public static func basic()throws->Whitelist { - return try Whitelist() - .addTags( - "a", "b", "blockquote", "br", "cite", "code", "dd", "dl", "dt", "em", - "i", "li", "ol", "p", "pre", "q", "small", "span", "strike", "strong", "sub", - "sup", "u", "ul") - - .addAttributes("a", "href") - .addAttributes("blockquote", "cite") - .addAttributes("q", "cite") - - .addProtocols("a", "href", "ftp", "http", "https", "mailto") - .addProtocols("blockquote", "cite", "http", "https") - .addProtocols("cite", "cite", "http", "https") - - .addEnforcedAttribute("a", "rel", "nofollow") - } - - /** - This whitelist allows the same text tags as {@link #basic}, and also allows img tags, with appropriate - attributes, with src pointing to http or https. - - @return whitelist - */ - public static func basicWithImages()throws->Whitelist { - return try basic() - .addTags("img") - .addAttributes("img", "align", "alt", "height", "src", "title", "width") - .addProtocols("img", "src", "http", "https") - - } - - /** - This whitelist allows a full range of text and structural body HTML: a, b, blockquote, br, caption, cite, - code, col, colgroup, dd, div, dl, dt, em, h1, h2, h3, h4, h5, h6, i, img, li, ol, p, pre, q, small, span, strike, strong, sub, - sup, table, tbody, td, tfoot, th, thead, tr, u, ul -

    - Links do not have an enforced rel=nofollow attribute, but you can add that if desired. -

    - - @return whitelist - */ - public static func relaxed()throws->Whitelist { - return try Whitelist() - .addTags( - "a", "b", "blockquote", "br", "caption", "cite", "code", "col", - "colgroup", "dd", "div", "dl", "dt", "em", "h1", "h2", "h3", "h4", "h5", "h6", - "i", "img", "li", "ol", "p", "pre", "q", "small", "span", "strike", "strong", - "sub", "sup", "table", "tbody", "td", "tfoot", "th", "thead", "tr", "u", - "ul") - - .addAttributes("a", "href", "title") - .addAttributes("blockquote", "cite") - .addAttributes("col", "span", "width") - .addAttributes("colgroup", "span", "width") - .addAttributes("img", "align", "alt", "height", "src", "title", "width") - .addAttributes("ol", "start", "type") - .addAttributes("q", "cite") - .addAttributes("table", "summary", "width") - .addAttributes("td", "abbr", "axis", "colspan", "rowspan", "width") - .addAttributes( - "th", "abbr", "axis", "colspan", "rowspan", "scope", - "width") - .addAttributes("ul", "type") - - .addProtocols("a", "href", "ftp", "http", "https", "mailto") - .addProtocols("blockquote", "cite", "http", "https") - .addProtocols("cite", "cite", "http", "https") - .addProtocols("img", "src", "http", "https") - .addProtocols("q", "cite", "http", "https") - } - - /** - Create a new, empty whitelist. Generally it will be better to start with a default prepared whitelist instead. - - @see #basic() - @see #basicWithImages() - @see #simpleText() - @see #relaxed() - */ - init() { - tagNames = Set() - attributes = Dictionary>() - enforcedAttributes = Dictionary>() - protocols = Dictionary>>() - preserveRelativeLinks = false - } - - /** - Add a list of allowed elements to a whitelist. (If a tag is not allowed, it will be removed from the HTML.) - - @param tags tag names to allow - @return this (for chaining) - */ - @discardableResult - open func addTags(_ tags: String...)throws ->Whitelist { - for tagName in tags { - try Validate.notEmpty(string: tagName) - tagNames.insert(TagName.valueOf(tagName)) - } - return self - } - - /** - Remove a list of allowed elements from a whitelist. (If a tag is not allowed, it will be removed from the HTML.) - - @param tags tag names to disallow - @return this (for chaining) - */ - @discardableResult - open func removeTags(_ tags: String...)throws ->Whitelist { - try Validate.notNull(obj: tags) - - for tag in tags { - try Validate.notEmpty(string: tag) - let tagName: TagName = TagName.valueOf(tag) - - if(tagNames.contains(tagName)) { // Only look in sub-maps if tag was allowed - tagNames.remove(tagName) - attributes.removeValue(forKey: tagName) - enforcedAttributes.removeValue(forKey: tagName) - protocols.removeValue(forKey: tagName) - } - } - return self - } - - /** - Add a list of allowed attributes to a tag. (If an attribute is not allowed on an element, it will be removed.) -

    - E.g.: addAttributes("a", "href", "class") allows href and class attributes - on a tags. -

    -

    - To make an attribute valid for all tags, use the pseudo tag :all, e.g. - addAttributes(":all", "class"). -

    - - @param tag The tag the attributes are for. The tag will be added to the allowed tag list if necessary. - @param keys List of valid attributes for the tag - @return this (for chaining) - */ - @discardableResult - open func addAttributes(_ tag: String, _ keys: String...)throws->Whitelist { - try Validate.notEmpty(string: tag) - try Validate.isTrue(val: keys.count > 0, msg: "No attributes supplied.") - - let tagName = TagName.valueOf(tag) - if (!tagNames.contains(tagName)) { - tagNames.insert(tagName) - } - var attributeSet = Set() - for key in keys { - try Validate.notEmpty(string: key) - attributeSet.insert(AttributeKey.valueOf(key)) - } - - if var currentSet = attributes[tagName] { - for at in attributeSet { - currentSet.insert(at) - } - attributes[tagName] = currentSet - } else { - attributes[tagName] = attributeSet - } - - return self - } - - /** - Remove a list of allowed attributes from a tag. (If an attribute is not allowed on an element, it will be removed.) -

    - E.g.: removeAttributes("a", "href", "class") disallows href and class - attributes on a tags. -

    -

    - To make an attribute invalid for all tags, use the pseudo tag :all, e.g. - removeAttributes(":all", "class"). -

    - - @param tag The tag the attributes are for. - @param keys List of invalid attributes for the tag - @return this (for chaining) - */ - @discardableResult - open func removeAttributes(_ tag: String, _ keys: String...)throws->Whitelist { - try Validate.notEmpty(string: tag) - try Validate.isTrue(val: keys.count > 0, msg: "No attributes supplied.") - - let tagName: TagName = TagName.valueOf(tag) - var attributeSet = Set() - for key in keys { - try Validate.notEmpty(string: key) - attributeSet.insert(AttributeKey.valueOf(key)) - } - - if(tagNames.contains(tagName)) { // Only look in sub-maps if tag was allowed - if var currentSet = attributes[tagName] { - for l in attributeSet { - currentSet.remove(l) - } - attributes[tagName] = currentSet - if(currentSet.isEmpty) { // Remove tag from attribute map if no attributes are allowed for tag - attributes.removeValue(forKey: tagName) - } - } - - } - - if(tag == ":all") { // Attribute needs to be removed from all individually set tags - for name in attributes.keys { - var currentSet: Set = attributes[name]! - for l in attributeSet { - currentSet.remove(l) - } - attributes[name] = currentSet - if(currentSet.isEmpty) { // Remove tag from attribute map if no attributes are allowed for tag - attributes.removeValue(forKey: name) - } - } - } - return self - } - - /** - Add an enforced attribute to a tag. An enforced attribute will always be added to the element. If the element - already has the attribute set, it will be overridden. -

    - E.g.: addEnforcedAttribute("a", "rel", "nofollow") will make all a tags output as - <a href="..." rel="nofollow"> -

    - - @param tag The tag the enforced attribute is for. The tag will be added to the allowed tag list if necessary. - @param key The attribute key - @param value The enforced attribute value - @return this (for chaining) - */ - @discardableResult - open func addEnforcedAttribute(_ tag: String, _ key: String, _ value: String)throws->Whitelist { - try Validate.notEmpty(string: tag) - try Validate.notEmpty(string: key) - try Validate.notEmpty(string: value) - - let tagName: TagName = TagName.valueOf(tag) - if (!tagNames.contains(tagName)) { - tagNames.insert(tagName) - } - let attrKey: AttributeKey = AttributeKey.valueOf(key) - let attrVal: AttributeValue = AttributeValue.valueOf(value) - - if (enforcedAttributes[tagName] != nil) { - enforcedAttributes[tagName]?[attrKey] = attrVal - } else { - var attrMap: Dictionary = Dictionary() - attrMap[attrKey] = attrVal - enforcedAttributes[tagName] = attrMap - } - return self - } - - /** - Remove a previously configured enforced attribute from a tag. - - @param tag The tag the enforced attribute is for. - @param key The attribute key - @return this (for chaining) - */ - @discardableResult - open func removeEnforcedAttribute(_ tag: String, _ key: String)throws->Whitelist { - try Validate.notEmpty(string: tag) - try Validate.notEmpty(string: key) - - let tagName: TagName = TagName.valueOf(tag) - if(tagNames.contains(tagName) && (enforcedAttributes[tagName] != nil)) { - let attrKey: AttributeKey = AttributeKey.valueOf(key) - var attrMap: Dictionary = enforcedAttributes[tagName]! - attrMap.removeValue(forKey: attrKey) - enforcedAttributes[tagName] = attrMap - - if(attrMap.isEmpty) { // Remove tag from enforced attribute map if no enforced attributes are present - enforcedAttributes.removeValue(forKey: tagName) - } - } - return self - } - - /** - * Configure this Whitelist to preserve relative links in an element's URL attribute, or convert them to absolute - * links. By default, this is false: URLs will be made absolute (e.g. start with an allowed protocol, like - * e.g. {@code http://}. - *

    - * Note that when handling relative links, the input document must have an appropriate {@code base URI} set when - * parsing, so that the link's protocol can be confirmed. Regardless of the setting of the {@code preserve relative - * links} option, the link must be resolvable against the base URI to an allowed protocol; otherwise the attribute - * will be removed. - *

    - * - * @param preserve {@code true} to allow relative links, {@code false} (default) to deny - * @return this Whitelist, for chaining. - * @see #addProtocols - */ - @discardableResult - open func preserveRelativeLinks(_ preserve: Bool) -> Whitelist { - preserveRelativeLinks = preserve - return self - } - - /** - Add allowed URL protocols for an element's URL attribute. This restricts the possible values of the attribute to - URLs with the defined protocol. -

    - E.g.: addProtocols("a", "href", "ftp", "http", "https") -

    -

    - To allow a link to an in-page URL anchor (i.e. <a href="#anchor">, add a #:
    - E.g.: addProtocols("a", "href", "#") -

    - - @param tag Tag the URL protocol is for - @param key Attribute key - @param protocols List of valid protocols - @return this, for chaining - */ - @discardableResult - open func addProtocols(_ tag: String, _ key: String, _ protocols: String...)throws->Whitelist { - try Validate.notEmpty(string: tag) - try Validate.notEmpty(string: key) - - let tagName: TagName = TagName.valueOf(tag) - let attrKey: AttributeKey = AttributeKey.valueOf(key) - var attrMap: Dictionary> - var protSet: Set - - if (self.protocols[tagName] != nil) { - attrMap = self.protocols[tagName]! - } else { - attrMap = Dictionary>() - self.protocols[tagName] = attrMap - } - - if (attrMap[attrKey] != nil) { - protSet = attrMap[attrKey]! - } else { - protSet = Set() - attrMap[attrKey] = protSet - self.protocols[tagName] = attrMap - } - for ptl in protocols { - try Validate.notEmpty(string: ptl) - let prot: Protocol = Protocol.valueOf(ptl) - protSet.insert(prot) - } - attrMap[attrKey] = protSet - self.protocols[tagName] = attrMap - - return self - } - - /** - Remove allowed URL protocols for an element's URL attribute. -

    - E.g.: removeProtocols("a", "href", "ftp") -

    - - @param tag Tag the URL protocol is for - @param key Attribute key - @param protocols List of invalid protocols - @return this, for chaining - */ - @discardableResult - open func removeProtocols(_ tag: String, _ key: String, _ protocols: String...)throws->Whitelist { - try Validate.notEmpty(string: tag) - try Validate.notEmpty(string: key) - - let tagName: TagName = TagName.valueOf(tag) - let attrKey: AttributeKey = AttributeKey.valueOf(key) - - if(self.protocols[tagName] != nil) { - var attrMap: Dictionary> = self.protocols[tagName]! - if(attrMap[attrKey] != nil) { - var protSet: Set = attrMap[attrKey]! - for ptl in protocols { - try Validate.notEmpty(string: ptl) - let prot: Protocol = Protocol.valueOf(ptl) - protSet.remove(prot) - } - attrMap[attrKey] = protSet - - if(protSet.isEmpty) { // Remove protocol set if empty - attrMap.removeValue(forKey: attrKey) - if(attrMap.isEmpty) { // Remove entry for tag if empty - self.protocols.removeValue(forKey: tagName) - } - - } - } - self.protocols[tagName] = attrMap - } - return self - } - - /** - * Test if the supplied tag is allowed by this whitelist - * @param tag test tag - * @return true if allowed - */ - public func isSafeTag(_ tag: String) -> Bool { - return tagNames.contains(TagName.valueOf(tag)) - } - - /** - * Test if the supplied attribute is allowed by this whitelist for this tag - * @param tagName tag to consider allowing the attribute in - * @param el element under test, to confirm protocol - * @param attr attribute under test - * @return true if allowed - */ - public func isSafeAttribute(_ tagName: String, _ el: Element, _ attr: Attribute)throws -> Bool { - let tag: TagName = TagName.valueOf(tagName) - let key: AttributeKey = AttributeKey.valueOf(attr.getKey()) - - if (attributes[tag] != nil) { - if (attributes[tag]?.contains(key))! { - if (protocols[tag] != nil) { - let attrProts: Dictionary> = protocols[tag]! - // ok if not defined protocol; otherwise test - return try (attrProts[key] == nil) || testValidProtocol(el, attr, attrProts[key]!) - } else { // attribute found, no protocols defined, so OK - return true - } - } - } - // no attributes defined for tag, try :all tag - return try !(tagName == ":all") && isSafeAttribute(":all", el, attr) - } - - private func testValidProtocol(_ el: Element, _ attr: Attribute, _ protocols: Set)throws->Bool { - // try to resolve relative urls to abs, and optionally update the attribute so output html has abs. - // rels without a baseuri get removed - var value: String = try el.absUrl(attr.getKey()) - if (value.count == 0) { - value = attr.getValue() - }// if it could not be made abs, run as-is to allow custom unknown protocols - if (!preserveRelativeLinks) { - attr.setValue(value: value) - } - - for ptl in protocols { - var prot: String = ptl.toString() - - if (prot=="#") { // allows anchor links - if (isValidAnchor(value)) { - return true - } else { - continue - } - } - - prot += ":" - - if (value.lowercased().hasPrefix(prot)) { - return true - } - - } - - return false - } - - private func isValidAnchor(_ value: String) -> Bool { - return value.startsWith("#") && !(Pattern(".*\\s.*").matcher(in: value).count > 0) - } - - public func getEnforcedAttributes(_ tagName: String)throws->Attributes { - let attrs: Attributes = Attributes() - let tag: TagName = TagName.valueOf(tagName) - if let keyVals: Dictionary = enforcedAttributes[tag] { - for entry in keyVals { - try attrs.put(entry.key.toString(), entry.value.toString()) - } - } - return attrs - } - -} - -// named types for config. All just hold strings, but here for my sanity. - -open class TagName: TypedValue { - override init(_ value: String) { - super.init(value) - } - - static func valueOf(_ value: String) -> TagName { - return TagName(value) - } -} - -open class AttributeKey: TypedValue { - override init(_ value: String) { - super.init(value) - } - - static func valueOf(_ value: String) -> AttributeKey { - return AttributeKey(value) - } -} - -open class AttributeValue: TypedValue { - override init(_ value: String) { - super.init(value) - } - - static func valueOf(_ value: String) -> AttributeValue { - return AttributeValue(value) - } -} - -open class Protocol: TypedValue { - override init(_ value: String) { - super.init(value) - } - - static func valueOf(_ value: String) -> Protocol { - return Protocol(value) - } -} - -open class TypedValue { - fileprivate let value: String - - init(_ value: String) { - self.value = value - } - - public func toString() -> String { - return value - } -} - -extension TypedValue: Hashable { - public func hash(into hasher: inout Hasher) { - hasher.combine(value) - } -} - -public func == (lhs: TypedValue, rhs: TypedValue) -> Bool { - if(lhs === rhs) {return true} - return lhs.value == rhs.value -} diff --git a/Example/Pods/SwiftSoup/Sources/XmlDeclaration.swift b/Example/Pods/SwiftSoup/Sources/XmlDeclaration.swift deleted file mode 100755 index 5f1032b..0000000 --- a/Example/Pods/SwiftSoup/Sources/XmlDeclaration.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// XmlDeclaration.swift -// SwifSoup -// -// Created by Nabil Chatbi on 29/09/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - An XML Declaration. - */ -public class XmlDeclaration: Node { - private let _name: String - private let isProcessingInstruction: Bool // String { - return "#declaration" - } - - /** - * Get the name of this declaration. - * @return name of this declaration. - */ - public func name() -> String { - return _name - } - - /** - Get the unencoded XML declaration. - @return XML declaration - */ - public func getWholeDeclaration()throws->String { - return try attributes!.html().trim() // attr html starts with a " " - } - - override func outerHtmlHead(_ accum: StringBuilder, _ depth: Int, _ out: OutputSettings) { - accum - .append("<") - .append(isProcessingInstruction ? "!" : "?") - .append(_name) - do { - try attributes?.html(accum: accum, out: out) - } catch {} - accum - .append(isProcessingInstruction ? "!" : "?") - .append(">") - } - - override func outerHtmlTail(_ accum: StringBuilder, _ depth: Int, _ out: OutputSettings) {} - - public override func copy(with zone: NSZone? = nil) -> Any { - let clone = XmlDeclaration(_name, baseUri!, isProcessingInstruction) - return copy(clone: clone) - } - - public override func copy(parent: Node?) -> Node { - let clone = XmlDeclaration(_name, baseUri!, isProcessingInstruction) - return copy(clone: clone, parent: parent) - } - public override func copy(clone: Node, parent: Node?) -> Node { - return super.copy(clone: clone, parent: parent) - } -} diff --git a/Example/Pods/SwiftSoup/Sources/XmlTreeBuilder.swift b/Example/Pods/SwiftSoup/Sources/XmlTreeBuilder.swift deleted file mode 100755 index 785a68b..0000000 --- a/Example/Pods/SwiftSoup/Sources/XmlTreeBuilder.swift +++ /dev/null @@ -1,146 +0,0 @@ -// -// XmlTreeBuilder.swift -// SwiftSoup -// -// Created by Nabil Chatbi on 14/10/16. -// Copyright © 2016 Nabil Chatbi.. All rights reserved. -// - -import Foundation - -/** - * Use the {@code XmlTreeBuilder} when you want to parse XML without any of the HTML DOM rules being applied to the - * document. - *

    Usage example: {@code Document xmlDoc = Jsoup.parse(html, baseUrl, Parser.xmlParser())}

    - * - */ -public class XmlTreeBuilder: TreeBuilder { - - public override init() { - super.init() - } - - public override func defaultSettings() -> ParseSettings { - return ParseSettings.preserveCase - } - - public func parse(_ input: String, _ baseUri: String)throws->Document { - return try parse(input, baseUri, ParseErrorList.noTracking(), ParseSettings.preserveCase) - } - - override public func initialiseParse(_ input: String, _ baseUri: String, _ errors: ParseErrorList, _ settings: ParseSettings) { - super.initialiseParse(input, baseUri, errors, settings) - stack.append(doc) // place the document onto the stack. differs from HtmlTreeBuilder (not on stack) - doc.outputSettings().syntax(syntax: OutputSettings.Syntax.xml) - } - - override public func process(_ token: Token)throws->Bool { - // start tag, end tag, doctype, comment, character, eof - switch (token.type) { - case .StartTag: - try insert(token.asStartTag()) - break - case .EndTag: - try popStackToClose(token.asEndTag()) - break - case .Comment: - try insert(token.asComment()) - break - case .Char: - try insert(token.asCharacter()) - break - case .Doctype: - try insert(token.asDoctype()) - break - case .EOF: // could put some normalisation here if desired - break -// default: -// try Validate.fail(msg: "Unexpected token type: " + token.tokenType()) - } - return true - } - - private func insertNode(_ node: Node)throws { - try currentElement()?.appendChild(node) - } - - @discardableResult - func insert(_ startTag: Token.StartTag)throws->Element { - let tag: Tag = try Tag.valueOf(startTag.name(), settings) - // todo: wonder if for xml parsing, should treat all tags as unknown? because it's not html. - let el: Element = try Element(tag, baseUri, settings.normalizeAttributes(startTag._attributes)) - try insertNode(el) - if (startTag.isSelfClosing()) { - tokeniser.acknowledgeSelfClosingFlag() - if (!tag.isKnownTag()) // unknown tag, remember this is self closing for output. see above. - { - tag.setSelfClosing() - } - } else { - stack.append(el) - } - return el - } - - func insert(_ commentToken: Token.Comment)throws { - let comment: Comment = Comment(commentToken.getData(), baseUri) - var insert: Node = comment - if (commentToken.bogus) { // xml declarations are emitted as bogus comments (which is right for html, but not xml) - // so we do a bit of a hack and parse the data as an element to pull the attributes out - let data: String = comment.getData() - if (data.count > 1 && (data.startsWith("!") || data.startsWith("?"))) { - let doc: Document = try SwiftSoup.parse("<" + data.substring(1, data.count - 2) + ">", baseUri, Parser.xmlParser()) - let el: Element = doc.child(0) - insert = XmlDeclaration(settings.normalizeTag(el.tagName()), comment.getBaseUri(), data.startsWith("!")) - insert.getAttributes()?.addAll(incoming: el.getAttributes()) - } - } - try insertNode(insert) - } - - func insert(_ characterToken: Token.Char)throws { - let node: Node = TextNode(characterToken.getData()!, baseUri) - try insertNode(node) - } - - func insert(_ d: Token.Doctype)throws { - let doctypeNode = DocumentType(settings.normalizeTag(d.getName()), d.getPubSysKey(), d.getPublicIdentifier(), d.getSystemIdentifier(), baseUri) - try insertNode(doctypeNode) - } - - /** - * If the stack contains an element with this tag's name, pop up the stack to remove the first occurrence. If not - * found, skips. - * - * @param endTag - */ - private func popStackToClose(_ endTag: Token.EndTag)throws { - let elName: String = try endTag.name() - var firstFound: Element? = nil - - for pos in (0..Array { - initialiseParse(inputFragment, baseUri, errors, settings) - try runParser() - return doc.getChildNodes() - } -} diff --git a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-Info.plist b/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-Info.plist deleted file mode 100755 index 3ac477e..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.3.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-dummy.m b/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-dummy.m deleted file mode 100755 index 1e3ae03..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FaviconFinder_iOS : NSObject -@end -@implementation PodsDummy_FaviconFinder_iOS -@end diff --git a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-prefix.pch b/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-prefix.pch deleted file mode 100755 index beb2a24..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-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/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-umbrella.h b/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-umbrella.h deleted file mode 100755 index df0fdc9..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS-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 FaviconFinderVersionNumber; -FOUNDATION_EXPORT const unsigned char FaviconFinderVersionString[]; - diff --git a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.debug.xcconfig b/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.debug.xcconfig deleted file mode 100755 index 5637c24..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.debug.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-iOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "SwiftSoup" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -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/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.modulemap b/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.modulemap deleted file mode 100755 index 7ac17ad..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FaviconFinder { - umbrella header "FaviconFinder-iOS-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.release.xcconfig b/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.release.xcconfig deleted file mode 100755 index 5637c24..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.release.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-iOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "SwiftSoup" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -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/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.xcconfig b/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.xcconfig deleted file mode 100755 index 8211139..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-iOS/FaviconFinder-iOS.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-iOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-Info.plist b/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-Info.plist deleted file mode 100755 index 3ac477e..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.3.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-dummy.m b/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-dummy.m deleted file mode 100755 index 4e124c0..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FaviconFinder_macOS : NSObject -@end -@implementation PodsDummy_FaviconFinder_macOS -@end diff --git a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-prefix.pch b/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-prefix.pch deleted file mode 100755 index 082f8af..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-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/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-umbrella.h b/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-umbrella.h deleted file mode 100755 index 3cf7358..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS-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 FaviconFinderVersionNumber; -FOUNDATION_EXPORT const unsigned char FaviconFinderVersionString[]; - diff --git a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.debug.xcconfig b/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.debug.xcconfig deleted file mode 100755 index de38896..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.debug.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-macOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "SwiftSoup" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -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/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.modulemap b/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.modulemap deleted file mode 100755 index 71d6487..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FaviconFinder { - umbrella header "FaviconFinder-macOS-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.release.xcconfig b/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.release.xcconfig deleted file mode 100755 index de38896..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.release.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-macOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "SwiftSoup" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -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/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.xcconfig b/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.xcconfig deleted file mode 100755 index a4ddcdb..0000000 --- a/Example/Pods/Target Support Files/FaviconFinder-macOS/FaviconFinder-macOS.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-macOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-Info.plist b/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-Info.plist deleted file mode 100755 index 2243fe6..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - 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/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-acknowledgements.markdown deleted file mode 100755 index 771a163..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-acknowledgements.markdown +++ /dev/null @@ -1,51 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## FaviconFinder - -Copyright (c) 2022 William Lumley - -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. - - -## SwiftSoup - -MIT License - -Copyright (c) 2016 Nabil Chatbi - -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/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-acknowledgements.plist deleted file mode 100755 index 9dea28c..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-acknowledgements.plist +++ /dev/null @@ -1,89 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2022 William Lumley <will@lumley.io> - -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 - FaviconFinder - Type - PSGroupSpecifier - - - FooterText - MIT License - -Copyright (c) 2016 Nabil Chatbi - -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 - SwiftSoup - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-dummy.m b/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-dummy.m deleted file mode 100755 index 96bd4e7..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_FaviconFinder_Example : NSObject -@end -@implementation PodsDummy_Pods_FaviconFinder_Example -@end diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-frameworks.sh deleted file mode 100755 index 3600a17..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-frameworks.sh +++ /dev/null @@ -1,188 +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="${DT_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 "${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}/FaviconFinder-macOS/FaviconFinder.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftSoup-macOS/SwiftSoup.framework" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/FaviconFinder-macOS/FaviconFinder.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftSoup-macOS/SwiftSoup.framework" -fi -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-umbrella.h b/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-umbrella.h deleted file mode 100755 index b069199..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example-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_FaviconFinder_ExampleVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_FaviconFinder_ExampleVersionString[]; - diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.debug.xcconfig deleted file mode 100755 index 03c91c8..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.debug.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-macOS/FaviconFinder.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS/SwiftSoup.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/../Frameworks' '@loader_path/Frameworks' "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "FaviconFinder" -framework "SwiftSoup" -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/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.modulemap b/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.modulemap deleted file mode 100755 index 9acaa8f..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_FaviconFinder_Example { - umbrella header "Pods-FaviconFinder_Example-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.release.xcconfig deleted file mode 100755 index 03c91c8..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Example/Pods-FaviconFinder_Example.release.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-macOS/FaviconFinder.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS/SwiftSoup.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/../Frameworks' '@loader_path/Frameworks' "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "FaviconFinder" -framework "SwiftSoup" -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/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-Info.plist b/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-Info.plist deleted file mode 100755 index 2243fe6..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - 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/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-acknowledgements.markdown deleted file mode 100755 index 771a163..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-acknowledgements.markdown +++ /dev/null @@ -1,51 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## FaviconFinder - -Copyright (c) 2022 William Lumley - -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. - - -## SwiftSoup - -MIT License - -Copyright (c) 2016 Nabil Chatbi - -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/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-acknowledgements.plist deleted file mode 100755 index 9dea28c..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-acknowledgements.plist +++ /dev/null @@ -1,89 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2022 William Lumley <will@lumley.io> - -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 - FaviconFinder - Type - PSGroupSpecifier - - - FooterText - MIT License - -Copyright (c) 2016 Nabil Chatbi - -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 - SwiftSoup - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-dummy.m b/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-dummy.m deleted file mode 100755 index 86d50d9..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_FaviconFinder_Tests : NSObject -@end -@implementation PodsDummy_Pods_FaviconFinder_Tests -@end diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-frameworks.sh b/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-frameworks.sh deleted file mode 100755 index 3600a17..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-frameworks.sh +++ /dev/null @@ -1,188 +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="${DT_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 "${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}/FaviconFinder-macOS/FaviconFinder.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftSoup-macOS/SwiftSoup.framework" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/FaviconFinder-macOS/FaviconFinder.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftSoup-macOS/SwiftSoup.framework" -fi -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-umbrella.h b/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-umbrella.h deleted file mode 100755 index 80a9155..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests-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_FaviconFinder_TestsVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_FaviconFinder_TestsVersionString[]; - diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.debug.xcconfig deleted file mode 100755 index 1b45179..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.debug.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-macOS/FaviconFinder.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS/SwiftSoup.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift "$(PLATFORM_DIR)/Developer/Library/Frameworks" '@executable_path/../Frameworks' '@loader_path/../Frameworks' "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" -OTHER_LDFLAGS = $(inherited) -framework "FaviconFinder" -framework "SwiftSoup" -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/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.modulemap b/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.modulemap deleted file mode 100755 index c09075e..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_FaviconFinder_Tests { - umbrella header "Pods-FaviconFinder_Tests-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.release.xcconfig deleted file mode 100755 index 1b45179..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_Tests/Pods-FaviconFinder_Tests.release.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-macOS/FaviconFinder.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS/SwiftSoup.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift "$(PLATFORM_DIR)/Developer/Library/Frameworks" '@executable_path/../Frameworks' '@loader_path/../Frameworks' "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" -OTHER_LDFLAGS = $(inherited) -framework "FaviconFinder" -framework "SwiftSoup" -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/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-Info.plist b/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-Info.plist deleted file mode 100755 index 2243fe6..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - 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/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-acknowledgements.markdown deleted file mode 100755 index 771a163..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-acknowledgements.markdown +++ /dev/null @@ -1,51 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## FaviconFinder - -Copyright (c) 2022 William Lumley - -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. - - -## SwiftSoup - -MIT License - -Copyright (c) 2016 Nabil Chatbi - -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/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-acknowledgements.plist deleted file mode 100755 index 9dea28c..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-acknowledgements.plist +++ /dev/null @@ -1,89 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2022 William Lumley <will@lumley.io> - -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 - FaviconFinder - Type - PSGroupSpecifier - - - FooterText - MIT License - -Copyright (c) 2016 Nabil Chatbi - -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 - SwiftSoup - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-dummy.m b/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-dummy.m deleted file mode 100755 index fca365d..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_FaviconFinder_iOS_Example : NSObject -@end -@implementation PodsDummy_Pods_FaviconFinder_iOS_Example -@end diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-frameworks.sh deleted file mode 100755 index a9aa38b..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-frameworks.sh +++ /dev/null @@ -1,188 +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="${DT_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 "${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}/FaviconFinder-iOS/FaviconFinder.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftSoup-iOS/SwiftSoup.framework" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/FaviconFinder-iOS/FaviconFinder.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftSoup-iOS/SwiftSoup.framework" -fi -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-umbrella.h b/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-umbrella.h deleted file mode 100755 index ee71799..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example-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_FaviconFinder_iOS_ExampleVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_FaviconFinder_iOS_ExampleVersionString[]; - diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.debug.xcconfig deleted file mode 100755 index 9c80c5d..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.debug.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-iOS/FaviconFinder.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-iOS/SwiftSoup.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "FaviconFinder" -framework "SwiftSoup" -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/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.modulemap b/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.modulemap deleted file mode 100755 index 9848075..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_FaviconFinder_iOS_Example { - umbrella header "Pods-FaviconFinder_iOS_Example-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.release.xcconfig deleted file mode 100755 index 9c80c5d..0000000 --- a/Example/Pods/Target Support Files/Pods-FaviconFinder_iOS_Example/Pods-FaviconFinder_iOS_Example.release.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FaviconFinder-iOS/FaviconFinder.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-iOS/SwiftSoup.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "FaviconFinder" -framework "SwiftSoup" -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/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-Info.plist b/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-Info.plist deleted file mode 100755 index 3914fce..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.3.7 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-dummy.m b/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-dummy.m deleted file mode 100755 index 893d4c4..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_SwiftSoup_iOS : NSObject -@end -@implementation PodsDummy_SwiftSoup_iOS -@end diff --git a/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-prefix.pch b/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-prefix.pch deleted file mode 100755 index beb2a24..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-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/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-umbrella.h b/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-umbrella.h deleted file mode 100755 index 57166c4..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS-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 SwiftSoupVersionNumber; -FOUNDATION_EXPORT const unsigned char SwiftSoupVersionString[]; - diff --git a/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.debug.xcconfig b/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.debug.xcconfig deleted file mode 100755 index e4c6845..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.debug.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-iOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_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_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftSoup -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/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.modulemap b/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.modulemap deleted file mode 100755 index 6c63b22..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module SwiftSoup { - umbrella header "SwiftSoup-iOS-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.release.xcconfig b/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.release.xcconfig deleted file mode 100755 index e4c6845..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.release.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-iOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_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_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftSoup -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/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.xcconfig b/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.xcconfig deleted file mode 100755 index 3ae31c4..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-iOS/SwiftSoup-iOS.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-iOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftSoup -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-Info.plist b/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-Info.plist deleted file mode 100755 index 3914fce..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.3.7 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-dummy.m b/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-dummy.m deleted file mode 100755 index e7ab865..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_SwiftSoup_macOS : NSObject -@end -@implementation PodsDummy_SwiftSoup_macOS -@end diff --git a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-prefix.pch b/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-prefix.pch deleted file mode 100755 index 082f8af..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-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/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-umbrella.h b/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-umbrella.h deleted file mode 100755 index 3b4daa6..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS-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 SwiftSoupVersionNumber; -FOUNDATION_EXPORT const unsigned char SwiftSoupVersionString[]; - diff --git a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.debug.xcconfig b/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.debug.xcconfig deleted file mode 100755 index 361faa2..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.debug.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_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_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftSoup -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/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.modulemap b/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.modulemap deleted file mode 100755 index 1432006..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module SwiftSoup { - umbrella header "SwiftSoup-macOS-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.release.xcconfig b/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.release.xcconfig deleted file mode 100755 index 361faa2..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.release.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_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_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftSoup -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/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.xcconfig b/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.xcconfig deleted file mode 100755 index 8efcbd7..0000000 --- a/Example/Pods/Target Support Files/SwiftSoup-macOS/SwiftSoup-macOS.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftSoup-macOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftSoup -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FaviconFinder.podspec b/FaviconFinder.podspec deleted file mode 100755 index f63117a..0000000 --- a/FaviconFinder.podspec +++ /dev/null @@ -1,36 +0,0 @@ -# -# Be sure to run `pod spec lint FaviconFinder.podspec' to ensure this is a -# valid spec and to remove all comments including this before submitting the spec. -# -# To learn more about Podspec attributes see https://guides.cocoapods.org/syntax/podspec.html -# To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ -# - -Pod::Spec.new do |s| - - s.name = "FaviconFinder" - s.version = "4.2.0" - s.summary = "A pure Swift library to detect favicons use by a website." - s.homepage = "https://github.com/will-lumley/FaviconFinder.git" - s.license = { :type => 'MIT', :file => 'LICENSE.txt' } - - s.description = <<-DESC - FaviconFinder is a tiny pure Swift library designed for iOS and macOS applications that allows - you to detect favicons used by a website. - DESC - - s.author = { "William Lumley" => "will@lumley.io" } - s.social_media_url = "https://twitter.com/wlumley95" - - s.ios.deployment_target = "15.0" - s.osx.deployment_target = "12.0" - - s.swift_version = '5.0' - - s.source = { :git => "https://github.com/will-lumley/FaviconFinder.git", :tag => s.version.to_s } - - s.source_files = 'Sources/**/*/*' - - s.dependency 'SwiftSoup', '~> 2.3.7' - -end diff --git a/Package.resolved b/Package.resolved old mode 100755 new mode 100644 index 70f64e2..643cb2a --- a/Package.resolved +++ b/Package.resolved @@ -6,8 +6,8 @@ "repositoryURL": "https://github.com/scinfu/SwiftSoup.git", "state": { "branch": null, - "revision": "f707b8680cddb96dc1855632340a572ef37bbb98", - "version": "2.5.3" + "revision": "f83c097597094a04124eb6e0d1e894d24129af87", + "version": "2.7.0" } } ] diff --git a/README.md b/README.md index 60eceb2..7a549a6 100755 --- a/README.md +++ b/README.md @@ -2,11 +2,8 @@ # FaviconFinder ![CI Status](https://github.com/will-lumley/FaviconFinder/actions/workflows/BuildTests.yml/badge.svg?branch=main) -[![Version](https://img.shields.io/cocoapods/v/FaviconFinder.svg?style=flat)](https://cocoapods.org/pods/FaviconFinder) -[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![SPM Compatible](https://img.shields.io/badge/SPM-compatible-4BC51D.svg?style=flat)](https://github.com/apple/swift-package-manager) ![Swift 5.0](https://img.shields.io/badge/Swift-5.0-orange.svg) -[![Platform](https://img.shields.io/cocoapods/p/FaviconFinder.svg?style=flat)](https://cocoapods.org/pods/FaviconFinder) [![License](https://img.shields.io/cocoapods/l/FaviconFinder.svg?style=flat)](https://cocoapods.org/pods/FaviconFinder) [![Twitter](https://img.shields.io/badge/twitter-@wlumley95-blue.svg?style=flat)](https://twitter.com/wlumley95) @@ -152,7 +149,7 @@ FaviconFinder is available through [CocoaPods](http://cocoapods.org). To install it, simply add the following line to your Podfile: ```ruby -pod 'FaviconFinder', '4.2.0' +pod 'FaviconFinder', '4.3.0' ``` ### Carthage @@ -160,7 +157,7 @@ FaviconFinder is also available through [Carthage](https://github.com/Carthage/C it, simply add the following line to your Cartfile: ```ruby -github "will-lumley/FaviconFinder" == 4.2.0 +github "will-lumley/FaviconFinder" == 4.3.0 ``` ### Swift Package Manager @@ -170,13 +167,19 @@ To install it, simply add the dependency to your Package.Swift file: ```swift ... dependencies: [ - .package(url: "https://github.com/will-lumley/FaviconFinder.git", from: "4.2.0"), + .package(url: "https://github.com/will-lumley/FaviconFinder.git", from: "4.3.0"), ], targets: [ .target( name: "YourTarget", dependencies: ["FaviconFinder"]), ] ... ``` + +### Cocoapods and Carthage +RichEditor was previously available through CocoaPods and Carthage, however making the library available to all three Cocoapods, +Carthage, and SPM (and functional to all three) was becoming troublesome. This, combined with the fact that SPM has seen a serious +up-tick in adoption & functionality, has led me to remove support for CocoaPods and Carthage. + ## Author [William Lumley](https://lumley.io/), will@lumley.io diff --git a/Example/Tests/FaviconFinderTests.swift b/Tests/FaviconFinderTests/FaviconFinderTests.swift similarity index 100% rename from Example/Tests/FaviconFinderTests.swift rename to Tests/FaviconFinderTests/FaviconFinderTests.swift diff --git a/Example/Tests/Info.plist b/Tests/FaviconFinderTests/Info.plist similarity index 100% rename from Example/Tests/Info.plist rename to Tests/FaviconFinderTests/Info.plist diff --git a/Example/Tests/RegexTests.swift b/Tests/FaviconFinderTests/RegexTests.swift similarity index 100% rename from Example/Tests/RegexTests.swift rename to Tests/FaviconFinderTests/RegexTests.swift diff --git a/Example/Tests/StringRemovalTests.swift b/Tests/FaviconFinderTests/StringRemovalTests.swift similarity index 100% rename from Example/Tests/StringRemovalTests.swift rename to Tests/FaviconFinderTests/StringRemovalTests.swift diff --git a/Example/Tests/URLParsingTests.swift b/Tests/FaviconFinderTests/URLParsingTests.swift similarity index 100% rename from Example/Tests/URLParsingTests.swift rename to Tests/FaviconFinderTests/URLParsingTests.swift diff --git a/_Pods.xcodeproj b/_Pods.xcodeproj deleted file mode 120000 index 3c5a8e7..0000000 --- a/_Pods.xcodeproj +++ /dev/null @@ -1 +0,0 @@ -Example/Pods/Pods.xcodeproj \ No newline at end of file diff --git a/iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.pbxproj b/iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..d05406d --- /dev/null +++ b/iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.pbxproj @@ -0,0 +1,378 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 60; + objects = { + +/* Begin PBXBuildFile section */ + BE638D1D2B67614E00AA3E60 /* iOSFaviconFinderExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE638D1C2B67614E00AA3E60 /* iOSFaviconFinderExampleApp.swift */; }; + BE638D1F2B67614E00AA3E60 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE638D1E2B67614E00AA3E60 /* ContentView.swift */; }; + BE638D212B67614F00AA3E60 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BE638D202B67614F00AA3E60 /* Assets.xcassets */; }; + BE638D242B67614F00AA3E60 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BE638D232B67614F00AA3E60 /* Preview Assets.xcassets */; }; + BE638D2C2B6762F600AA3E60 /* FaviconFinder in Frameworks */ = {isa = PBXBuildFile; productRef = BE638D2B2B6762F600AA3E60 /* FaviconFinder */; }; + BEF486702B676681000A1263 /* FaviconFinder in Frameworks */ = {isa = PBXBuildFile; productRef = BEF4866F2B676681000A1263 /* FaviconFinder */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + BE638D192B67614E00AA3E60 /* iOSFaviconFinderExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iOSFaviconFinderExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BE638D1C2B67614E00AA3E60 /* iOSFaviconFinderExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSFaviconFinderExampleApp.swift; sourceTree = ""; }; + BE638D1E2B67614E00AA3E60 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + BE638D202B67614F00AA3E60 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + BE638D232B67614F00AA3E60 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + BE638D162B67614E00AA3E60 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BE638D2C2B6762F600AA3E60 /* FaviconFinder in Frameworks */, + BEF486702B676681000A1263 /* FaviconFinder in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + BE638D102B67614E00AA3E60 = { + isa = PBXGroup; + children = ( + BE638D1B2B67614E00AA3E60 /* iOSFaviconFinderExample */, + BE638D1A2B67614E00AA3E60 /* Products */, + ); + sourceTree = ""; + }; + BE638D1A2B67614E00AA3E60 /* Products */ = { + isa = PBXGroup; + children = ( + BE638D192B67614E00AA3E60 /* iOSFaviconFinderExample.app */, + ); + name = Products; + sourceTree = ""; + }; + BE638D1B2B67614E00AA3E60 /* iOSFaviconFinderExample */ = { + isa = PBXGroup; + children = ( + BE638D1C2B67614E00AA3E60 /* iOSFaviconFinderExampleApp.swift */, + BE638D1E2B67614E00AA3E60 /* ContentView.swift */, + BE638D202B67614F00AA3E60 /* Assets.xcassets */, + BE638D222B67614F00AA3E60 /* Preview Content */, + ); + path = iOSFaviconFinderExample; + sourceTree = ""; + }; + BE638D222B67614F00AA3E60 /* Preview Content */ = { + isa = PBXGroup; + children = ( + BE638D232B67614F00AA3E60 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + BE638D182B67614E00AA3E60 /* iOSFaviconFinderExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = BE638D272B67614F00AA3E60 /* Build configuration list for PBXNativeTarget "iOSFaviconFinderExample" */; + buildPhases = ( + BE638D152B67614E00AA3E60 /* Sources */, + BE638D162B67614E00AA3E60 /* Frameworks */, + BE638D172B67614E00AA3E60 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iOSFaviconFinderExample; + packageProductDependencies = ( + BE638D2B2B6762F600AA3E60 /* FaviconFinder */, + BEF4866F2B676681000A1263 /* FaviconFinder */, + ); + productName = iOSFaviconFinderExample; + productReference = BE638D192B67614E00AA3E60 /* iOSFaviconFinderExample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BE638D112B67614E00AA3E60 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1520; + LastUpgradeCheck = 1520; + TargetAttributes = { + BE638D182B67614E00AA3E60 = { + CreatedOnToolsVersion = 15.2; + }; + }; + }; + buildConfigurationList = BE638D142B67614E00AA3E60 /* Build configuration list for PBXProject "iOSFaviconFinderExample" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = BE638D102B67614E00AA3E60; + packageReferences = ( + BEF4866E2B676681000A1263 /* XCLocalSwiftPackageReference ".." */, + ); + productRefGroup = BE638D1A2B67614E00AA3E60 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + BE638D182B67614E00AA3E60 /* iOSFaviconFinderExample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + BE638D172B67614E00AA3E60 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BE638D242B67614F00AA3E60 /* Preview Assets.xcassets in Resources */, + BE638D212B67614F00AA3E60 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + BE638D152B67614E00AA3E60 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BE638D1F2B67614E00AA3E60 /* ContentView.swift in Sources */, + BE638D1D2B67614E00AA3E60 /* iOSFaviconFinderExampleApp.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + BE638D252B67614F00AA3E60 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "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 = 17.2; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + BE638D262B67614F00AA3E60 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + 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 = 17.2; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + BE638D282B67614F00AA3E60 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"iOSFaviconFinderExample/Preview Content\""; + DEVELOPMENT_TEAM = 4ELTP9RFTJ; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.williamlumley.iOSFaviconFinderExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + BE638D292B67614F00AA3E60 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"iOSFaviconFinderExample/Preview Content\""; + DEVELOPMENT_TEAM = 4ELTP9RFTJ; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.williamlumley.iOSFaviconFinderExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + BE638D142B67614E00AA3E60 /* Build configuration list for PBXProject "iOSFaviconFinderExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BE638D252B67614F00AA3E60 /* Debug */, + BE638D262B67614F00AA3E60 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BE638D272B67614F00AA3E60 /* Build configuration list for PBXNativeTarget "iOSFaviconFinderExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BE638D282B67614F00AA3E60 /* Debug */, + BE638D292B67614F00AA3E60 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + BEF4866E2B676681000A1263 /* XCLocalSwiftPackageReference ".." */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ..; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + BE638D2B2B6762F600AA3E60 /* FaviconFinder */ = { + isa = XCSwiftPackageProductDependency; + productName = FaviconFinder; + }; + BEF4866F2B676681000A1263 /* FaviconFinder */ = { + isa = XCSwiftPackageProductDependency; + productName = FaviconFinder; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = BE638D112B67614E00AA3E60 /* Project object */; +} diff --git a/Example/FaviconFinder.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata old mode 100755 new mode 100644 similarity index 68% rename from Example/FaviconFinder.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata index b978f98..919434a --- a/Example/FaviconFinder.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/Example/FaviconFinder.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist old mode 100755 new mode 100644 similarity index 100% rename from Example/FaviconFinder.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..a51f800 --- /dev/null +++ b/iOSFaviconFinderExample/iOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,14 @@ +{ + "pins" : [ + { + "identity" : "swiftsoup", + "kind" : "remoteSourceControl", + "location" : "https://github.com/scinfu/SwiftSoup.git", + "state" : { + "revision" : "f83c097597094a04124eb6e0d1e894d24129af87", + "version" : "2.7.0" + } + } + ], + "version" : 2 +} diff --git a/iOSFaviconFinderExample/iOSFaviconFinderExample/Assets.xcassets/AccentColor.colorset/Contents.json b/iOSFaviconFinderExample/iOSFaviconFinderExample/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/iOSFaviconFinderExample/iOSFaviconFinderExample/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOSFaviconFinderExample/iOSFaviconFinderExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/iOSFaviconFinderExample/iOSFaviconFinderExample/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/iOSFaviconFinderExample/iOSFaviconFinderExample/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOSFaviconFinderExample/iOSFaviconFinderExample/Assets.xcassets/Contents.json b/iOSFaviconFinderExample/iOSFaviconFinderExample/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/iOSFaviconFinderExample/iOSFaviconFinderExample/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOSFaviconFinderExample/iOSFaviconFinderExample/ContentView.swift b/iOSFaviconFinderExample/iOSFaviconFinderExample/ContentView.swift new file mode 100644 index 0000000..bd12a27 --- /dev/null +++ b/iOSFaviconFinderExample/iOSFaviconFinderExample/ContentView.swift @@ -0,0 +1,72 @@ +// +// ContentView.swift +// iOSFaviconFinderExample +// +// Created by William Lumley on 29/1/2024. +// + +import FaviconFinder +import SwiftUI + +struct ContentView: View { + + @State var urlStr = "https://apple.com/au" + @ObservedObject var imageLoader = ImageLoader() + + var body: some View { + VStack { + Image(uiImage: self.imageLoader.image ?? UIImage()) + .frame(width: 100.0, height: 100.0, alignment: .center) + .aspectRatio(contentMode: .fit) + + TextField("Enter URL", text: $urlStr) + .border(Color.black) + .keyboardType(.URL) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .padding(25.0) + + Button(action: { + guard let url = URL(string: self.urlStr) else { + print("Not a valid URL: \(self.urlStr)") + return + } + + self.imageLoader.load(url: url) + + }, label: { + Text("Download Favicon") + }).padding(50.0) + + Spacer() + } + } +} + +final class ImageLoader: ObservableObject { + @Published private(set) var image: UIImage? = nil + + private var url: URL? = nil + + func load(url: URL) { + Task { + do { + let favicon = try await FaviconFinder(url: url, preferredType: .html, preferences: [ + FaviconDownloadType.html: FaviconType.appleTouchIcon.rawValue, + FaviconDownloadType.ico: "favicon.ico" + ]).downloadFavicon() + + DispatchQueue.main.async { + self.image = favicon.image + } + } catch { + print(error) + } + } + } +} + +#Preview { + ContentView() +} diff --git a/iOSFaviconFinderExample/iOSFaviconFinderExample/Preview Content/Preview Assets.xcassets/Contents.json b/iOSFaviconFinderExample/iOSFaviconFinderExample/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/iOSFaviconFinderExample/iOSFaviconFinderExample/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOSFaviconFinderExample/iOSFaviconFinderExample/iOSFaviconFinderExampleApp.swift b/iOSFaviconFinderExample/iOSFaviconFinderExample/iOSFaviconFinderExampleApp.swift new file mode 100644 index 0000000..4d676a6 --- /dev/null +++ b/iOSFaviconFinderExample/iOSFaviconFinderExample/iOSFaviconFinderExampleApp.swift @@ -0,0 +1,17 @@ +// +// iOSFaviconFinderExampleApp.swift +// iOSFaviconFinderExample +// +// Created by William Lumley on 29/1/2024. +// + +import SwiftUI + +@main +struct iOSFaviconFinderExampleApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.pbxproj b/macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..47be18c --- /dev/null +++ b/macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.pbxproj @@ -0,0 +1,382 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 60; + objects = { + +/* Begin PBXBuildFile section */ + BE638D3A2B67642D00AA3E60 /* macOSFaviconFinderExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE638D392B67642D00AA3E60 /* macOSFaviconFinderExampleApp.swift */; }; + BE638D3C2B67642D00AA3E60 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE638D3B2B67642D00AA3E60 /* ContentView.swift */; }; + BE638D3E2B67642F00AA3E60 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BE638D3D2B67642F00AA3E60 /* Assets.xcassets */; }; + BE638D412B67642F00AA3E60 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BE638D402B67642F00AA3E60 /* Preview Assets.xcassets */; }; + BE638D4A2B67644A00AA3E60 /* FaviconFinder in Frameworks */ = {isa = PBXBuildFile; productRef = BE638D492B67644A00AA3E60 /* FaviconFinder */; }; + BE638D4D2B67647900AA3E60 /* FaviconFinder in Frameworks */ = {isa = PBXBuildFile; productRef = BE638D4C2B67647900AA3E60 /* FaviconFinder */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + BE638D362B67642D00AA3E60 /* macOSFaviconFinderExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = macOSFaviconFinderExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BE638D392B67642D00AA3E60 /* macOSFaviconFinderExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = macOSFaviconFinderExampleApp.swift; sourceTree = ""; }; + BE638D3B2B67642D00AA3E60 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + BE638D3D2B67642F00AA3E60 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + BE638D402B67642F00AA3E60 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + BE638D422B67642F00AA3E60 /* macOSFaviconFinderExample.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = macOSFaviconFinderExample.entitlements; sourceTree = ""; }; + BEF4866D2B676560000A1263 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + BE638D332B67642D00AA3E60 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BE638D4A2B67644A00AA3E60 /* FaviconFinder in Frameworks */, + BE638D4D2B67647900AA3E60 /* FaviconFinder in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + BE638D2D2B67642D00AA3E60 = { + isa = PBXGroup; + children = ( + BE638D382B67642D00AA3E60 /* macOSFaviconFinderExample */, + BE638D372B67642D00AA3E60 /* Products */, + ); + sourceTree = ""; + }; + BE638D372B67642D00AA3E60 /* Products */ = { + isa = PBXGroup; + children = ( + BE638D362B67642D00AA3E60 /* macOSFaviconFinderExample.app */, + ); + name = Products; + sourceTree = ""; + }; + BE638D382B67642D00AA3E60 /* macOSFaviconFinderExample */ = { + isa = PBXGroup; + children = ( + BEF4866D2B676560000A1263 /* Info.plist */, + BE638D392B67642D00AA3E60 /* macOSFaviconFinderExampleApp.swift */, + BE638D3B2B67642D00AA3E60 /* ContentView.swift */, + BE638D3D2B67642F00AA3E60 /* Assets.xcassets */, + BE638D422B67642F00AA3E60 /* macOSFaviconFinderExample.entitlements */, + BE638D3F2B67642F00AA3E60 /* Preview Content */, + ); + path = macOSFaviconFinderExample; + sourceTree = ""; + }; + BE638D3F2B67642F00AA3E60 /* Preview Content */ = { + isa = PBXGroup; + children = ( + BE638D402B67642F00AA3E60 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + BE638D352B67642D00AA3E60 /* macOSFaviconFinderExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = BE638D452B67642F00AA3E60 /* Build configuration list for PBXNativeTarget "macOSFaviconFinderExample" */; + buildPhases = ( + BE638D322B67642D00AA3E60 /* Sources */, + BE638D332B67642D00AA3E60 /* Frameworks */, + BE638D342B67642D00AA3E60 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = macOSFaviconFinderExample; + packageProductDependencies = ( + BE638D492B67644A00AA3E60 /* FaviconFinder */, + BE638D4C2B67647900AA3E60 /* FaviconFinder */, + ); + productName = macOSFaviconFinderExample; + productReference = BE638D362B67642D00AA3E60 /* macOSFaviconFinderExample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BE638D2E2B67642D00AA3E60 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + KnownAssetTags = ( + New, + ); + LastSwiftUpdateCheck = 1520; + LastUpgradeCheck = 1520; + TargetAttributes = { + BE638D352B67642D00AA3E60 = { + CreatedOnToolsVersion = 15.2; + }; + }; + }; + buildConfigurationList = BE638D312B67642D00AA3E60 /* Build configuration list for PBXProject "macOSFaviconFinderExample" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = BE638D2D2B67642D00AA3E60; + packageReferences = ( + BE638D4B2B67647900AA3E60 /* XCLocalSwiftPackageReference ".." */, + ); + productRefGroup = BE638D372B67642D00AA3E60 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + BE638D352B67642D00AA3E60 /* macOSFaviconFinderExample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + BE638D342B67642D00AA3E60 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BE638D412B67642F00AA3E60 /* Preview Assets.xcassets in Resources */, + BE638D3E2B67642F00AA3E60 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + BE638D322B67642D00AA3E60 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BE638D3C2B67642D00AA3E60 /* ContentView.swift in Sources */, + BE638D3A2B67642D00AA3E60 /* macOSFaviconFinderExampleApp.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + BE638D432B67642F00AA3E60 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "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; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 14.2; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + BE638D442B67642F00AA3E60 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + 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; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 14.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + }; + name = Release; + }; + BE638D462B67642F00AA3E60 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = macOSFaviconFinderExample/macOSFaviconFinderExample.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"macOSFaviconFinderExample/Preview Content\""; + DEVELOPMENT_TEAM = 4ELTP9RFTJ; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = macOSFaviconFinderExample/Info.plist; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.williamlumley.macOSFaviconFinderExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + BE638D472B67642F00AA3E60 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = macOSFaviconFinderExample/macOSFaviconFinderExample.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"macOSFaviconFinderExample/Preview Content\""; + DEVELOPMENT_TEAM = 4ELTP9RFTJ; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = macOSFaviconFinderExample/Info.plist; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.williamlumley.macOSFaviconFinderExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + BE638D312B67642D00AA3E60 /* Build configuration list for PBXProject "macOSFaviconFinderExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BE638D432B67642F00AA3E60 /* Debug */, + BE638D442B67642F00AA3E60 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BE638D452B67642F00AA3E60 /* Build configuration list for PBXNativeTarget "macOSFaviconFinderExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BE638D462B67642F00AA3E60 /* Debug */, + BE638D472B67642F00AA3E60 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + BE638D4B2B67647900AA3E60 /* XCLocalSwiftPackageReference ".." */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ..; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + BE638D492B67644A00AA3E60 /* FaviconFinder */ = { + isa = XCSwiftPackageProductDependency; + productName = FaviconFinder; + }; + BE638D4C2B67647900AA3E60 /* FaviconFinder */ = { + isa = XCSwiftPackageProductDependency; + productName = FaviconFinder; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = BE638D2E2B67642D00AA3E60 /* Project object */; +} diff --git a/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata old mode 100755 new mode 100644 similarity index 61% rename from Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 94b2795..919434a --- a/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -1,4 +1,7 @@ + + diff --git a/macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..a51f800 --- /dev/null +++ b/macOSFaviconFinderExample/macOSFaviconFinderExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,14 @@ +{ + "pins" : [ + { + "identity" : "swiftsoup", + "kind" : "remoteSourceControl", + "location" : "https://github.com/scinfu/SwiftSoup.git", + "state" : { + "revision" : "f83c097597094a04124eb6e0d1e894d24129af87", + "version" : "2.7.0" + } + } + ], + "version" : 2 +} diff --git a/macOSFaviconFinderExample/macOSFaviconFinderExample/Assets.xcassets/AccentColor.colorset/Contents.json b/macOSFaviconFinderExample/macOSFaviconFinderExample/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/macOSFaviconFinderExample/macOSFaviconFinderExample/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/macOSFaviconFinderExample/macOSFaviconFinderExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/macOSFaviconFinderExample/macOSFaviconFinderExample/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..3f00db4 --- /dev/null +++ b/macOSFaviconFinderExample/macOSFaviconFinderExample/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,58 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/macOSFaviconFinderExample/macOSFaviconFinderExample/Assets.xcassets/Contents.json b/macOSFaviconFinderExample/macOSFaviconFinderExample/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/macOSFaviconFinderExample/macOSFaviconFinderExample/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/FaviconFinder/ContentView.swift b/macOSFaviconFinderExample/macOSFaviconFinderExample/ContentView.swift old mode 100755 new mode 100644 similarity index 83% rename from Example/FaviconFinder/ContentView.swift rename to macOSFaviconFinderExample/macOSFaviconFinderExample/ContentView.swift index c493791..8dfa1bd --- a/Example/FaviconFinder/ContentView.swift +++ b/macOSFaviconFinderExample/macOSFaviconFinderExample/ContentView.swift @@ -1,16 +1,15 @@ // // ContentView.swift -// FaviconFinderExample +// macOSFaviconFinderExample // -// Created by William Lumley on 18/10/19. -// Copyright © 2019 William Lumley. All rights reserved. +// Created by William Lumley on 29/1/2024. // -import SwiftUI -import Combine import FaviconFinder +import SwiftUI struct ContentView: View { + @State var urlStr = "https://apple.com/au" @ObservedObject var imageLoader = ImageLoader() @@ -22,6 +21,7 @@ struct ContentView: View { TextField("Enter URL", text: $urlStr) .border(Color.black) + .autocorrectionDisabled() .frame(maxWidth: .infinity, maxHeight: .infinity) .padding(25.0) @@ -42,12 +42,6 @@ struct ContentView: View { } } -struct ContentView_Previews: PreviewProvider { - static var previews: some View { - ContentView() - } -} - final class ImageLoader: ObservableObject { @Published private(set) var image: NSImage? = nil @@ -60,11 +54,17 @@ final class ImageLoader: ObservableObject { FaviconDownloadType.html: FaviconType.appleTouchIcon.rawValue, FaviconDownloadType.ico: "favicon.ico" ]).downloadFavicon() - - self.image = favicon.image + + DispatchQueue.main.async { + self.image = favicon.image + } } catch { print(error) } } } } + +#Preview { + ContentView() +} diff --git a/macOSFaviconFinderExample/macOSFaviconFinderExample/Info.plist b/macOSFaviconFinderExample/macOSFaviconFinderExample/Info.plist new file mode 100644 index 0000000..6631ffa --- /dev/null +++ b/macOSFaviconFinderExample/macOSFaviconFinderExample/Info.plist @@ -0,0 +1,6 @@ + + + + + + diff --git a/macOSFaviconFinderExample/macOSFaviconFinderExample/Preview Content/Preview Assets.xcassets/Contents.json b/macOSFaviconFinderExample/macOSFaviconFinderExample/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/macOSFaviconFinderExample/macOSFaviconFinderExample/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/FaviconFinder/FaviconFinder.entitlements b/macOSFaviconFinderExample/macOSFaviconFinderExample/macOSFaviconFinderExample.entitlements old mode 100755 new mode 100644 similarity index 100% rename from Example/FaviconFinder/FaviconFinder.entitlements rename to macOSFaviconFinderExample/macOSFaviconFinderExample/macOSFaviconFinderExample.entitlements diff --git a/macOSFaviconFinderExample/macOSFaviconFinderExample/macOSFaviconFinderExampleApp.swift b/macOSFaviconFinderExample/macOSFaviconFinderExample/macOSFaviconFinderExampleApp.swift new file mode 100644 index 0000000..bd94388 --- /dev/null +++ b/macOSFaviconFinderExample/macOSFaviconFinderExample/macOSFaviconFinderExampleApp.swift @@ -0,0 +1,17 @@ +// +// macOSFaviconFinderExampleApp.swift +// macOSFaviconFinderExample +// +// Created by William Lumley on 29/1/2024. +// + +import SwiftUI + +@main +struct macOSFaviconFinderExampleApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} From cb0ef03437666f4602ae8ac6708a43cb7ce250fd Mon Sep 17 00:00:00 2001 From: Will Lumley Date: Mon, 29 Jan 2024 16:04:09 +1100 Subject: [PATCH 2/5] Updated tests. --- .github/workflows/BuildTests.yml | 8 ++----- .github/workflows/DeployToCocoapods.yml | 23 ------------------- Package.swift | 6 ++++- .../FaviconFinderTests.swift | 3 +-- Tests/FaviconFinderTests/Info.plist | 22 ------------------ Tests/FaviconFinderTests/RegexTests.swift | 3 +-- .../StringRemovalTests.swift | 2 +- .../FaviconFinderTests/URLParsingTests.swift | 2 +- 8 files changed, 11 insertions(+), 58 deletions(-) delete mode 100644 .github/workflows/DeployToCocoapods.yml delete mode 100755 Tests/FaviconFinderTests/Info.plist diff --git a/.github/workflows/BuildTests.yml b/.github/workflows/BuildTests.yml index e62aa1a..8daafb0 100644 --- a/.github/workflows/BuildTests.yml +++ b/.github/workflows/BuildTests.yml @@ -19,9 +19,5 @@ jobs: - name: Force Xcode 13.2.1 run: sudo xcode-select -switch /Applications/Xcode_13.2.1.app - - name: Build Setup - run: >- - xcodebuild test - -workspace Example/FaviconFinder.xcworkspace - -scheme FaviconFinder-Example - -destination 'platform=macOS' + - name: Test + run: swift test diff --git a/.github/workflows/DeployToCocoapods.yml b/.github/workflows/DeployToCocoapods.yml deleted file mode 100644 index f5efce0..0000000 --- a/.github/workflows/DeployToCocoapods.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Deploy to Cocoapods - -on: - push: - tags: - - '*' - -jobs: - build: - runs-on: macOS-latest - steps: - - uses: actions/checkout@v1 - - - name: Install Cocoapods - run: gem install cocoapods - - - name: Deploy to Cocoapods - run: | - set -eo pipefail - pod lib lint --allow-warnings - pod trunk push --allow-warnings - env: - COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }} diff --git a/Package.swift b/Package.swift index c71e328..5f09dc9 100755 --- a/Package.swift +++ b/Package.swift @@ -21,6 +21,10 @@ let package = Package( // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "FaviconFinder", - dependencies: ["SwiftSoup"]) + dependencies: [ + "SwiftSoup" + ] + ), + .testTarget(name: "FaviconFinderTests", dependencies: ["FaviconFinder"]), ] ) diff --git a/Tests/FaviconFinderTests/FaviconFinderTests.swift b/Tests/FaviconFinderTests/FaviconFinderTests.swift index bfc0416..349dacf 100755 --- a/Tests/FaviconFinderTests/FaviconFinderTests.swift +++ b/Tests/FaviconFinderTests/FaviconFinderTests.swift @@ -6,9 +6,8 @@ // Copyright © 2019 William Lumley. All rights reserved. // -import XCTest - @testable import FaviconFinder +import XCTest class FaviconFinderTests: XCTestCase { diff --git a/Tests/FaviconFinderTests/Info.plist b/Tests/FaviconFinderTests/Info.plist deleted file mode 100755 index 6c40a6c..0000000 --- a/Tests/FaviconFinderTests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/Tests/FaviconFinderTests/RegexTests.swift b/Tests/FaviconFinderTests/RegexTests.swift index 27511f3..c7a28ed 100755 --- a/Tests/FaviconFinderTests/RegexTests.swift +++ b/Tests/FaviconFinderTests/RegexTests.swift @@ -6,9 +6,8 @@ // Copyright © 2019 William Lumley. All rights reserved. // -import XCTest - @testable import FaviconFinder +import XCTest class RegexTests: XCTestCase { let plainWebsite = "google.com" diff --git a/Tests/FaviconFinderTests/StringRemovalTests.swift b/Tests/FaviconFinderTests/StringRemovalTests.swift index 43b686b..b97c6bb 100755 --- a/Tests/FaviconFinderTests/StringRemovalTests.swift +++ b/Tests/FaviconFinderTests/StringRemovalTests.swift @@ -6,8 +6,8 @@ // Copyright © 2019 William Lumley. All rights reserved. // -import XCTest import FaviconFinder +import XCTest class StringRemovalTests: XCTestCase { diff --git a/Tests/FaviconFinderTests/URLParsingTests.swift b/Tests/FaviconFinderTests/URLParsingTests.swift index 26c494f..c48fab3 100755 --- a/Tests/FaviconFinderTests/URLParsingTests.swift +++ b/Tests/FaviconFinderTests/URLParsingTests.swift @@ -6,8 +6,8 @@ // Copyright © 2019 William Lumley. All rights reserved. // -import XCTest import FaviconFinder +import XCTest class URLParsingTests: XCTestCase { let gmailUrl = URL(string: "https://mail.google.com")! From 72a1fb0cdbaed71e6363787f78c16d4cba98d287 Mon Sep 17 00:00:00 2001 From: Will Lumley Date: Mon, 29 Jan 2024 16:07:56 +1100 Subject: [PATCH 3/5] Updated README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a549a6..2c11cac 100755 --- a/README.md +++ b/README.md @@ -176,7 +176,7 @@ targets: [ ``` ### Cocoapods and Carthage -RichEditor was previously available through CocoaPods and Carthage, however making the library available to all three Cocoapods, +FaviconFinder was previously available through CocoaPods and Carthage, however making the library available to all three Cocoapods, Carthage, and SPM (and functional to all three) was becoming troublesome. This, combined with the fact that SPM has seen a serious up-tick in adoption & functionality, has led me to remove support for CocoaPods and Carthage. From 7b4e88030a430b4af00b3e00f14e994d2ecc62a0 Mon Sep 17 00:00:00 2001 From: Will Lumley Date: Mon, 29 Jan 2024 16:10:55 +1100 Subject: [PATCH 4/5] Updated BuildTests.yml. --- .github/workflows/BuildTests.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/BuildTests.yml b/.github/workflows/BuildTests.yml index 8daafb0..7b2c7cd 100644 --- a/.github/workflows/BuildTests.yml +++ b/.github/workflows/BuildTests.yml @@ -11,13 +11,10 @@ on: jobs: build: name: Build and Test - runs-on: macos-12 + runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v2 - - name: Force Xcode 13.2.1 - run: sudo xcode-select -switch /Applications/Xcode_13.2.1.app - - name: Test run: swift test From 243364b4a39935e537ab79a77f8da93252fc6b57 Mon Sep 17 00:00:00 2001 From: Will Lumley Date: Mon, 29 Jan 2024 16:18:00 +1100 Subject: [PATCH 5/5] Updated README.md. --- README.md | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/README.md b/README.md index 2c11cac..4033c61 100755 --- a/README.md +++ b/README.md @@ -144,22 +144,6 @@ If you need to support older versions of iOS or macOS, version 3.3.0 of FaviconF ## Installation -### Cocoapods -FaviconFinder is available through [CocoaPods](http://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'FaviconFinder', '4.3.0' -``` - -### Carthage -FaviconFinder is also available through [Carthage](https://github.com/Carthage/Carthage). To install -it, simply add the following line to your Cartfile: - -```ruby -github "will-lumley/FaviconFinder" == 4.3.0 -``` - ### Swift Package Manager FaviconFinder is also available through [Swift Package Manager](https://github.com/apple/swift-package-manager). To install it, simply add the dependency to your Package.Swift file: